From 9e8b9c5c6457e71bc8dce41985c19a321c3d2e01 Mon Sep 17 00:00:00 2001 From: Stef Date: Sat, 3 Mar 2018 17:42:03 +0100 Subject: [PATCH 01/18] 1.8 (#292) --- .gitignore | 4 + AntistasiOfficial.Altis/AAFeconomics.sqf | 7 +- AntistasiOfficial.Altis/AI/AAFKilledEH.sqf | 6 +- AntistasiOfficial.Altis/AI/airCA.sqf | 26 + AntistasiOfficial.Altis/AI/airdrop.sqf | 54 +- AntistasiOfficial.Altis/AI/artilleriaNATO.sqf | 12 +- AntistasiOfficial.Altis/AI/askForHelp.sqf | 6 +- AntistasiOfficial.Altis/AI/autoRearm.sqf | 2 +- AntistasiOfficial.Altis/AI/fastropeAAF.sqf | 2 +- AntistasiOfficial.Altis/AI/fastropeCSAT.sqf | 2 +- AntistasiOfficial.Altis/AI/fastropeNATO.sqf | 2 +- AntistasiOfficial.Altis/AI/inmuneConvoy.sqf | 2 +- AntistasiOfficial.Altis/AI/medHeal.sqf | 9 +- AntistasiOfficial.Altis/AI/smokeCoverAuto.sqf | 2 +- AntistasiOfficial.Altis/CREATE/CIVinit.sqf | 2 +- AntistasiOfficial.Altis/CREATE/CSATpunish.sqf | 199 +- .../CREATE/CSATtimetoreveal.sqf | 5 + AntistasiOfficial.Altis/CREATE/NATOArmor.sqf | 46 +- AntistasiOfficial.Altis/CREATE/NATOCA.sqf | 282 +- AntistasiOfficial.Altis/CREATE/NATOQRF.sqf | 6 +- .../CREATE/VEHdespawner.sqf | 13 +- AntistasiOfficial.Altis/CREATE/VEHinit.sqf | 7 +- AntistasiOfficial.Altis/CREATE/combinedCA.sqf | 166 +- .../CREATE/createAAsite.sqf | 4 +- .../CREATE/createAirbase.sqf | 369 +- AntistasiOfficial.Altis/CREATE/createBase.sqf | 343 +- AntistasiOfficial.Altis/CREATE/createCIV.sqf | 3 +- .../CREATE/createCampFIA.sqf | 2 +- AntistasiOfficial.Altis/CREATE/createCity.sqf | 2 +- .../CREATE/createFIAEmplacement.sqf | 6 +- .../CREATE/createFIAOutpost.sqf | 301 +- .../CREATE/createFIApower.sqf | 238 +- .../CREATE/createFIAresources.sqf | 213 +- .../CREATE/createNATOaerop.sqf | 435 +- .../CREATE/createNATObases.sqf | 145 +- .../CREATE/createNATOpuesto.sqf | 4 +- .../CREATE/createOutpost.sqf | 99 +- .../CREATE/createPower.sqf | 15 +- .../CREATE/createResources.sqf | 30 +- .../CREATE/createRoadblock.sqf | 2 +- .../CREATE/createRoadblock2.sqf | 2 +- .../CREATE/createWatchpost.sqf | 2 +- .../CREATE/genRoadPatrol.sqf | 18 +- AntistasiOfficial.Altis/CREATE/genVEHinit.sqf | 20 +- AntistasiOfficial.Altis/CREATE/patrolCA.sqf | 489 +- .../CREATE/vehicleRemover.sqf | 1 + .../Compositions/HQ_adds.sqf | 2 + .../Functions/fn_FIAradio.sqf | 4 +- .../Functions/fn_QRF_RTB.sqf | 6 +- .../Functions/fn_QRF_dismountTroops.sqf | 2 +- .../Functions/fn_addActionMP.sqf | 2 +- .../Functions/fn_changeRoleStef.sqf | 104 +- .../Functions/fn_clearForest.sqf | 2 +- .../Functions/fn_detectACE.sqf | 8 +- .../Functions/fn_fastTravel.sqf | 16 +- .../Functions/fn_findRoadSpot.sqf | 2 +- .../Functions/fn_getNearbyCities.sqf | 2 +- .../Functions/fn_groundTransport.sqf | 4 +- .../Functions/fn_healCamp.sqf | 2 +- .../Functions/fn_initPlayerEH.sqf | 8 +- .../Functions/fn_init_hq.sqf | 5 +- .../Functions/fn_isUnconscious.sqf | 18 + .../Functions/fn_keyDownMain.sqf | 2 +- .../Functions/fn_lootCorpses.sqf | 2 +- .../Functions/fn_markerUpdate.sqf | 14 +- .../Functions/fn_setUnconscious.sqf | 18 + .../Functions/fn_storeGear.sqf | 2 +- .../Functions/fn_transferGear.sqf | 1 + .../Functions/functionList.hpp | 2 + .../JeroenArsenal/JNA/fn_arsenal.sqf | 5296 +++++++++-------- .../JeroenArsenal/JNA/fn_arsenal_init.sqf | 5 + .../JNA/fn_arsenal_loadInventory.sqf | 21 +- .../JeroenArsenal/JNA/fn_vehicleArsenal.sqf | 6 +- .../Actions/fn_logistics_addActionLoad.sqf | 4 + .../JNL/Functions/fn_logistics_canLoad.sqf | 37 +- .../JNL/Functions/fn_logistics_lockSeats.sqf | 1 - .../JeroenArsenal/JNL/fn_logistics_init.sqf | 50 +- .../JeroenArsenal/JNL/fn_logistics_load.sqf | 17 +- .../JeroenArsenal/JNL/fn_logistics_unLoad.sqf | 11 +- .../JeroenArsenal/Shit Jeroen.sqf | 2 +- AntistasiOfficial.Altis/Lists/basicLists.sqf | 2 +- AntistasiOfficial.Altis/Lists/gearList.sqf | 24 +- .../Missions/ASS_Mayor.sqf | 10 +- .../Missions/ASS_Traidor.sqf | 13 +- .../Missions/AS_ForestPatrol.sqf | 10 +- AntistasiOfficial.Altis/Missions/AS_Mayor.sqf | 15 +- .../Missions/AS_Oficial.sqf | 10 +- .../Missions/AS_specOP.sqf | 10 +- AntistasiOfficial.Altis/Missions/CONVOY.sqf | 32 +- AntistasiOfficial.Altis/Missions/CON_AA.sqf | 10 +- .../Missions/CON_Power.sqf | 10 +- .../Missions/CON_Puestos.sqf | 10 +- AntistasiOfficial.Altis/Missions/DEF_Camp.sqf | 10 +- .../Missions/DES_Antena.sqf | 10 +- .../Missions/DES_EnemySuppression.sqf | 10 +- AntistasiOfficial.Altis/Missions/DES_Fuel.sqf | 28 +- AntistasiOfficial.Altis/Missions/DES_Heli.sqf | 12 +- .../Missions/DES_Vehicle.sqf | 10 +- .../Missions/FND_CivCon.sqf | 13 +- .../Missions/FND_ExpDealer.sqf | 18 +- .../Missions/FND_MilCon.sqf | 13 +- .../Missions/INT_Reinforcements.sqf | 10 +- AntistasiOfficial.Altis/Missions/LOG_Ammo.sqf | 12 +- AntistasiOfficial.Altis/Missions/LOG_Bank.sqf | 16 +- .../Missions/LOG_Medical.sqf | 192 +- .../Missions/LOG_Suministros.sqf | 105 +- AntistasiOfficial.Altis/Missions/NATOAmmo.sqf | 22 +- .../Missions/PR_Brainwash.sqf | 26 +- .../Missions/PR_Pamphlet.sqf | 30 +- .../Missions/REP_Antena.sqf | 12 +- .../Missions/RES_Prisioneros.sqf | 9 +- .../Missions/RES_Refugiados.sqf | 9 +- AntistasiOfficial.Altis/Missions/ataqueHQ.sqf | 4 +- .../Missions/missionrequest.sqf | 43 +- .../Municion/NATOCrate.sqf | 15 +- AntistasiOfficial.Altis/Municion/cajaAAF.sqf | 28 +- .../Municion/emptyCrate.sqf | 3 - .../Municion/randomRifle.sqf | 2 + AntistasiOfficial.Altis/NATOdialog.sqf | 50 +- AntistasiOfficial.Altis/REINF/NATOArty.sqf | 4 +- AntistasiOfficial.Altis/REINF/NATOCAS.sqf | 6 +- .../REINF/NATORoadblock.sqf | 10 +- AntistasiOfficial.Altis/REINF/NATOUAV.sqf | 8 +- .../REINF/addFIAsquadHC.sqf | 20 +- AntistasiOfficial.Altis/REINF/addFIAveh.sqf | 5 + .../REINF/addToGarrison.sqf | 156 + .../REINF/buildMinefield.sqf | 10 +- .../REINF/controlHCsquad.sqf | 2 +- AntistasiOfficial.Altis/REINF/controlunit.sqf | 2 +- .../REINF/dismissPlayerGroup.sqf | 2 +- AntistasiOfficial.Altis/REINF/reinfplayer.sqf | 1 + AntistasiOfficial.Altis/Revive/ACErespawn.sqf | 8 +- .../Revive/handleDamage.sqf | 2 +- AntistasiOfficial.Altis/Revive/initRevive.sqf | 2 +- .../Revive/medUnconscious.sqf | 12 +- AntistasiOfficial.Altis/Revive/respawn.sqf | 10 +- AntistasiOfficial.Altis/Save/fn_loadGame.sqf | 17 +- .../Save/fn_saveFunctions.sqf | 39 +- AntistasiOfficial.Altis/Save/fn_saveGame.sqf | 32 +- .../Save/fn_savePlayer.sqf | 2 +- .../Save_test/autoSave.sqf | 28 - .../Save_test/loadPlayer.sqf | 29 - AntistasiOfficial.Altis/Save_test/save.sqf | 5 - .../Save_test/savePlayer.sqf | 26 - .../Core/fnc/UPSMON_arrayShufflePlus.sqf | 4 +- .../COMMON/Group/fnc/UPSMON_Isgrpstuck.sqf | 4 +- .../FORTIFY/Fnc/UPSMON_patrolBuilding.sqf | 104 +- .../UPSMON_FLANK/fnc/UPSMON_DOFLANK.sqf | 4 +- .../UPSMON_PATROL/Fnc/UPSMON_SrchPtrlPos.sqf | 2 +- .../fnc/UPSMON_DOPATROLSRCH.sqf | 3 +- .../Scripts/UPSMON/UPSMON_MAINLOOP.sqf | 957 +-- .../Scripts/UPSMON/UPSMON_MAINLOOP_body.sqf | 957 +++ .../Scripts/fn_advancedTowingInit.sqf | 1379 ++--- AntistasiOfficial.Altis/Stringtable.xml | 5157 +++++++++++++++- .../Templates/BLUE_CSAT.sqf | 2 +- .../Templates/BLUE_NATO.sqf | 15 +- .../Templates/BLUE_USAF.sqf | 11 +- .../Templates/BLUE_VMF.sqf | 1 + .../Templates/CIV_ALTIS.sqf | 2 +- AntistasiOfficial.Altis/Templates/IND_AAF.sqf | 9 +- .../Templates/IND_AFRF.sqf | 14 +- .../Templates/IND_NATO.sqf | 6 +- .../Templates/PLAYER_FIA.sqf | 7 +- .../Templates/PLAYER_GREF.sqf | 2 +- .../Templates/PLAYER_IND_FIA.sqf | 6 +- .../Templates/RED_CSAT.sqf | 6 +- AntistasiOfficial.Altis/Templates/RED_VMF.sqf | 5 +- AntistasiOfficial.Altis/Thumbs.db | Bin 0 -> 15872 bytes .../UI/defines/menuElements.hpp | 2 +- .../UI/defines/menu_commander.hpp | 33 +- .../UI/defines/menu_player.hpp | 15 +- .../UI/functions/fn_UI_createMenu.sqf | 7 +- .../UI/functions/fn_UI_setTText.sqf | 2 +- AntistasiOfficial.Altis/UI/startMenu.sqf | 2 +- .../VCOMAI/AIBEHAVIORNEW.fsm | 3666 ++++++++++++ AntistasiOfficial.Altis/VCOMAI/Background.paa | Bin 0 -> 652227 bytes .../VCOMAI/DangerIdentify.fsm | 586 ++ .../VCOMAI/DialogDefines.hpp | 1135 ++++ AntistasiOfficial.Altis/VCOMAI/Notes.txt | 14 + AntistasiOfficial.Altis/VCOMAI/ToDo.txt | 4 + AntistasiOfficial.Altis/VCOMAI/defines.hpp | 1567 +++++ AntistasiOfficial.Altis/VCOMAI/dialogs.hpp | 197 + .../VCOMAI/functions/#crater.sqf | 29 + .../DangerCauses/VCOMAI_CombatMovement.sqf | 81 + .../DangerCauses/VCOMAI_CurrentStance.sqf | 4 + .../DangerCauses/VCOMAI_DeadBodyDetection.sqf | 7 + .../VCOMAI_ExplosionDetection.sqf | 11 + .../DangerCauses/VCOMAI_MoveToCoverGroup.sqf | 4 + .../VCOMAI_RecentEnemyDetected.sqf | 4 + .../DangerCauses/VCOMAI_SetCombatStance.sqf | 1 + .../DangerCauses/VCOMAI_VehicleHandle.sqf | 16 + .../VCOMAI/functions/VCOMAI_AIHit.sqf | 28 + .../functions/VCOMAI_ArmEmptyStatic.sqf | 21 + .../VCOMAI/functions/VCOMAI_Artillery.sqf | 37 + .../functions/VCOMAI_ArtilleryCalled.sqf | 92 + .../VCOMAI/functions/VCOMAI_ArtilleryOLD.sqf | 42 + .../functions/VCOMAI_AttachPosition.sqf | 27 + .../VCOMAI/functions/VCOMAI_BuildingCheck.sqf | 29 + .../functions/VCOMAI_BuildingSpawnCheck.sqf | 27 + .../VCOMAI/functions/VCOMAI_CheckBag.sqf | 26 + .../VCOMAI/functions/VCOMAI_CheckBagOLD.sqf | 32 + .../VCOMAI/functions/VCOMAI_CheckStatic.sqf | 14 + .../VCOMAI/functions/VCOMAI_Classvehicle.sqf | 11 + .../functions/VCOMAI_ClosestAllyWarn.sqf | 131 + .../functions/VCOMAI_ClosestAllyWarnOLD.sqf | 142 + .../VCOMAI/functions/VCOMAI_ClosestEnemy.sqf | 17 + .../VCOMAI/functions/VCOMAI_ClosestObject.sqf | 34 + .../VCOMAI/functions/VCOMAI_CombatMode.sqf | 15 + .../VCOMAI/functions/VCOMAI_DebugText.sqf | 34 + .../functions/VCOMAI_DefaultSettings.sqf | 502 ++ .../VCOMAI/functions/VCOMAI_DeployUAV.sqf | 38 + .../functions/VCOMAI_DestroyBuilding.sqf | 74 + .../functions/VCOMAI_DestroyBuildingOLD.sqf | 142 + .../functions/VCOMAI_DetermineLeader.sqf | 22 + .../VCOMAI/functions/VCOMAI_DriverCheck.sqf | 19 + .../VCOMAI/functions/VCOMAI_EditMenuInit.sqf | 109 + .../VCOMAI/functions/VCOMAI_EnemyArray.sqf | 13 + .../VCOMAI/functions/VCOMAI_FindCoverPos.sqf | 65 + .../VCOMAI/functions/VCOMAI_FlankManeuver.sqf | 159 + .../functions/VCOMAI_FocusedAccuracy.sqf | 90 + .../VCOMAI/functions/VCOMAI_ForceHeal.sqf | 32 + .../VCOMAI/functions/VCOMAI_FragmentMove.sqf | 22 + .../VCOMAI/functions/VCOMAI_FriendlyArray.sqf | 9 + .../VCOMAI/functions/VCOMAI_Garrison.sqf | 56 + .../VCOMAI/functions/VCOMAI_GarrisonClear.sqf | 33 + .../functions/VCOMAI_GarrisonClearPatrol.sqf | 57 + .../VCOMAI/functions/VCOMAI_GroupLoiter.sqf | 24 + .../VCOMAI/functions/VCOMAI_HasMine.sqf | 34 + .../VCOMAI/functions/VCOMAI_HasMineOld.sqf | 50 + .../VCOMAI/functions/VCOMAI_HearingAids.sqf | 54 + .../VCOMAI/functions/VCOMAI_IRCheck.sqf | 38 + .../VCOMAI/functions/VCOMAI_LightGarrison.sqf | 49 + .../VCOMAI/functions/VCOMAI_LoiterAction.sqf | 158 + .../VCOMAI/functions/VCOMAI_MapMarkers.sqf | 31 + .../VCOMAI/functions/VCOMAI_MoveInCombat.sqf | 144 + .../VCOMAI/functions/VCOMAI_MoveToCover.sqf | 74 + .../functions/VCOMAI_MoveToCoverBackup.sqf | 80 + .../VCOMAI/functions/VCOMAI_PackStatic.sqf | 36 + .../VCOMAI/functions/VCOMAI_PackStaticOLD.sqf | 26 + .../VCOMAI/functions/VCOMAI_PlaceMine.sqf | 66 + .../VCOMAI/functions/VCOMAI_RankAndSkill.sqf | 15 + .../VCOMAI/functions/VCOMAI_ReGroup.sqf | 27 + .../VCOMAI/functions/VCOMAI_RearmGo.sqf | 12 + .../VCOMAI/functions/VCOMAI_RearmSelf.sqf | 46 + .../functions/VCOMAI_StanceModifier.sqf | 24 + .../functions/VCOMAI_SuppressedEffect.sqf | 43 + .../functions/VCOMAI_SuppressingShots.sqf | 80 + .../VCOMAI/functions/VCOMAI_ThrowGrenade.sqf | 59 + .../functions/VCOMAI_UAVDeploy.sqf} | 0 .../VCOMAI/functions/VCOMAI_UnpackStatic.sqf | 92 + .../functions/VCOMAI_UnpackStaticOLD.sqf | 106 + .../VCOMAI/functions/VCOMAI_VehicleHandle.sqf | 147 + .../functions/VCOMAI_VehicleHandleOLD.sqf | 137 + .../VCOMAI/functions/VCOMAI_Waypointcheck.sqf | 16 + .../VCOMAI/functions/VCOMAI_WepSupCheck.sqf | 8 + .../VCOMAI/functions/VCOM_Erasemarkers.sqf | 4 + .../VCOMAI/functions/VCOM_PARAMCHANGE.sqf | 67 + .../VCOMAI/functions/VCOM_PARAMSOPTIONS.sqf | 25 + .../VCOMAI/functions/VcomAI_DefaultSetup.sqf | 57 + .../VCOMAI/functions/VcomAI_DetermineRank.sqf | 9 + .../functions/VcomAI_FormationChange.sqf | 104 + .../VCOMAI/functions/VcomAI_QueueHandle.sqf | 34 + .../VCOMAI/functions/VcomAI_UnitInit.sqf | 94 + .../functions/dis_PARAMSLBChangedMM.sqf | 15 + AntistasiOfficial.Altis/VCOMAI/init.sqf | 164 + AntistasiOfficial.Altis/aceSettings.hpp | 94 +- AntistasiOfficial.Altis/briefing.sqf | 504 +- AntistasiOfficial.Altis/buildHQ.sqf | 6 + AntistasiOfficial.Altis/cba_settings.sqf | 48 +- AntistasiOfficial.Altis/cityinfo.sqf | 132 +- AntistasiOfficial.Altis/commsMP.sqf | 51 +- AntistasiOfficial.Altis/crearPuestosFIA.sqf | 6 +- AntistasiOfficial.Altis/defines.hpp | 2 +- AntistasiOfficial.Altis/description.ext | 80 +- AntistasiOfficial.Altis/destroyCheck.sqf | 2 +- AntistasiOfficial.Altis/dialogs.hpp | 510 +- AntistasiOfficial.Altis/establishCamp.sqf | 6 +- AntistasiOfficial.Altis/fastTravelRadio.sqf | 28 +- AntistasiOfficial.Altis/ftravelDialog.sqf | 20 +- AntistasiOfficial.Altis/garbageCleaner.sqf | 14 +- AntistasiOfficial.Altis/healandrepair.sqf | 2 +- AntistasiOfficial.Altis/init.sqf | 37 +- AntistasiOfficial.Altis/initFuncs.sqf | 3 +- AntistasiOfficial.Altis/initPetros.sqf | 7 +- AntistasiOfficial.Altis/initPlayerLocal.sqf | 186 +- AntistasiOfficial.Altis/initServer.sqf | 28 +- AntistasiOfficial.Altis/initVar.sqf | 24 +- AntistasiOfficial.Altis/initZones.sqf | 26 +- AntistasiOfficial.Altis/mission.sqm | 3682 +++++++++++- AntistasiOfficial.Altis/moveHQ.sqf | 8 +- AntistasiOfficial.Altis/mrkLOOSE.sqf | 149 +- AntistasiOfficial.Altis/mrkWIN.sqf | 164 +- AntistasiOfficial.Altis/musica.sqf | 2 +- AntistasiOfficial.Altis/onPlayerRespawn.sqf | 6 +- .../orgPlayers/assignStavros.sqf | 7 +- AntistasiOfficial.Altis/pic.paa | Bin 289846 -> 278386 bytes AntistasiOfficial.Altis/playerMarkers.sqf | 10 +- AntistasiOfficial.Altis/puestoDialog.sqf | 26 +- AntistasiOfficial.Altis/rebuildAssets.sqf | 10 +- AntistasiOfficial.Altis/reinitY.sqf | 2 +- AntistasiOfficial.Altis/resourcecheck.sqf | 4 +- AntistasiOfficial.Altis/script_component.hpp | 2 +- .../script_macros_common.hpp | 1642 +++++ .../script_macros_mission.hpp | 82 + AntistasiOfficial.Altis/serverAutosave.sqf | 2 +- AntistasiOfficial.Altis/shitstef.sqf | 201 + AntistasiOfficial.Altis/skiptime.sqf | 10 +- AntistasiOfficial.Altis/statistics.sqf | 12 +- AntistasiOfficial.Altis/teleport.sqf | 2 +- AntistasiOfficial.Altis/undercover.sqf | 4 +- .../workers/fn_getNextWorker.sqf | 2 +- .../workers/fn_initWorker.sqf | 15 +- .../workers/fn_initWorkerServer.sqf | 16 +- .../workers/fn_registerWorker.sqf | 31 +- .../workers/fn_unregisterWorker.sqf | 1 + README.md | 34 +- 316 files changed, 30422 insertions(+), 8603 deletions(-) create mode 100644 .gitignore create mode 100644 AntistasiOfficial.Altis/AI/airCA.sqf create mode 100644 AntistasiOfficial.Altis/CREATE/CSATtimetoreveal.sqf create mode 100644 AntistasiOfficial.Altis/Functions/fn_isUnconscious.sqf create mode 100644 AntistasiOfficial.Altis/Functions/fn_setUnconscious.sqf create mode 100644 AntistasiOfficial.Altis/REINF/addToGarrison.sqf delete mode 100644 AntistasiOfficial.Altis/Save_test/autoSave.sqf delete mode 100644 AntistasiOfficial.Altis/Save_test/loadPlayer.sqf delete mode 100644 AntistasiOfficial.Altis/Save_test/save.sqf delete mode 100644 AntistasiOfficial.Altis/Save_test/savePlayer.sqf create mode 100644 AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP_body.sqf create mode 100644 AntistasiOfficial.Altis/Thumbs.db create mode 100644 AntistasiOfficial.Altis/VCOMAI/AIBEHAVIORNEW.fsm create mode 100644 AntistasiOfficial.Altis/VCOMAI/Background.paa create mode 100644 AntistasiOfficial.Altis/VCOMAI/DangerIdentify.fsm create mode 100644 AntistasiOfficial.Altis/VCOMAI/DialogDefines.hpp create mode 100644 AntistasiOfficial.Altis/VCOMAI/Notes.txt create mode 100644 AntistasiOfficial.Altis/VCOMAI/ToDo.txt create mode 100644 AntistasiOfficial.Altis/VCOMAI/defines.hpp create mode 100644 AntistasiOfficial.Altis/VCOMAI/dialogs.hpp create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/#crater.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CombatMovement.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CurrentStance.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_DeadBodyDetection.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_ExplosionDetection.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_MoveToCoverGroup.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_RecentEnemyDetected.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_SetCombatStance.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_VehicleHandle.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AIHit.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArmEmptyStatic.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Artillery.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryCalled.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AttachPosition.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingCheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingSpawnCheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBag.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBagOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckStatic.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Classvehicle.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarn.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarnOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestEnemy.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestObject.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CombatMode.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DebugText.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DefaultSettings.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DeployUAV.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuilding.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuildingOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DetermineLeader.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DriverCheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EditMenuInit.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EnemyArray.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FindCoverPos.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FlankManeuver.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FocusedAccuracy.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ForceHeal.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FragmentMove.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FriendlyArray.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Garrison.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClear.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClearPatrol.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GroupLoiter.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMine.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMineOld.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HearingAids.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_IRCheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LightGarrison.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LoiterAction.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MapMarkers.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveInCombat.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCover.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCoverBackup.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStatic.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStaticOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PlaceMine.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RankAndSkill.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ReGroup.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmGo.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmSelf.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_StanceModifier.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressedEffect.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressingShots.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ThrowGrenade.sqf rename AntistasiOfficial.Altis/{Save_test/load => VCOMAI/functions/VCOMAI_UAVDeploy.sqf} (100%) create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStatic.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStaticOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandle.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandleOLD.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Waypointcheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_WepSupCheck.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOM_Erasemarkers.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMCHANGE.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMSOPTIONS.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DefaultSetup.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DetermineRank.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_FormationChange.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_QueueHandle.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_UnitInit.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/functions/dis_PARAMSLBChangedMM.sqf create mode 100644 AntistasiOfficial.Altis/VCOMAI/init.sqf create mode 100644 AntistasiOfficial.Altis/script_macros_common.hpp create mode 100644 AntistasiOfficial.Altis/script_macros_mission.hpp create mode 100644 AntistasiOfficial.Altis/shitstef.sqf diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c0c70c06 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +AntistasiOfficial.Altis/link.sqdev +AntistasiOfficial.Altis/.project +AntistasiOfficial.Altis/.settings/org.eclipse.core.resources.prefs diff --git a/AntistasiOfficial.Altis/AAFeconomics.sqf b/AntistasiOfficial.Altis/AAFeconomics.sqf index 0b76fabd..a3c7d4f6 100644 --- a/AntistasiOfficial.Altis/AAFeconomics.sqf +++ b/AntistasiOfficial.Altis/AAFeconomics.sqf @@ -27,11 +27,12 @@ if (_resourcesAAF > 5000) then{ [-5,0] remoteExec ["prestige",2]; if (_destroyed in power) then {[_destroyed] call AS_fnc_powerReorg}; _nombre = [_destroyed] call AS_fnc_localizar; - [["TaskFailed", ["", format ["%1 rebuilt by AAF",_nombre]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + [_nombre,{["TaskFailed", ["", format [localize "STR_NTS_REB_AAF", _this]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; + }; } forEach _destroyedCities; } else { - if ((count antenasMuertas > 0) and (not("REP" in misiones))) then{ + /*if ((count antenasMuertas > 0) and (not("REP" in misiones))) then{ { if ((_resourcesAAF > 5000) and (not("REP" in misiones))) then{ _marcador = [markers, _x] call BIS_fnc_nearestPosition; @@ -42,7 +43,7 @@ if (_resourcesAAF > 5000) then{ }; }; } forEach antenasMuertas; - }; + }; */ //Stef disabled repair radiotower, the mission is buggy, reduntant and pointless }; }; diff --git a/AntistasiOfficial.Altis/AI/AAFKilledEH.sqf b/AntistasiOfficial.Altis/AI/AAFKilledEH.sqf index 4ee7e84a..8966a14c 100644 --- a/AntistasiOfficial.Altis/AI/AAFKilledEH.sqf +++ b/AntistasiOfficial.Altis/AI/AAFKilledEH.sqf @@ -4,7 +4,7 @@ _killer = _this select 1; if (_muerto getVariable ["OPFORSpawn",false]) then {_muerto setVariable ["OPFORSpawn",nil,true]}; [_muerto] spawn postmortem; -if (activeACE) then { +if (activeACEMedical) then { if ((isNull _killer) || (_killer == _muerto)) then { _killer = _muerto getVariable ["ace_medical_lastDamageSource", _killer]; }; @@ -68,6 +68,6 @@ if ((side _killer == side_blue) || (captive _killer)) then { } forEach units _grupo; //Test the WarStatistics script. Sparker. - _posMuerto = getPos _muerto; - [ws_grid, _posMuerto select 0, _posMuerto select 1, 1] call ws_fnc_addValue; + //_posMuerto = getPos _muerto; + //[ws_grid, _posMuerto select 0, _posMuerto select 1, 1] call ws_fnc_addValue; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/AI/airCA.sqf b/AntistasiOfficial.Altis/AI/airCA.sqf new file mode 100644 index 00000000..73ccfa5c --- /dev/null +++ b/AntistasiOfficial.Altis/AI/airCA.sqf @@ -0,0 +1,26 @@ +/* +This script should send a jet to chase the FIA aircraft which is annoying AAF. +0 = blufor aircraft +*/ + + +_this select 0 +_FIAaricraft = _this select 0 +_targetpos = position (_FIAaricraft); + +_airport = [_targetpos] call AS_fnc_findAirportForCA; +_airportpos = getmakerpos [_airport]; +_depart = [_airportpos select 0, _airportpos select 1,300]; +_jet = [_depart, 0,dogfight, side_green] call bis_fnc_spawnvehicle; +_pilot = driver (_jet select 0); +_pilot reveal _FIAaricraft; +_pilot dotarget _FIAaricraft; + +waitUntil { + !alive (_FIAaricraft); +}; + if (!alive _FIAaricraft) then { + _wp0 = _pilot addWaypoint [_airportpos, 0]; + [_pilot,0] setWaypointBehaviour "CARELESS"; + _wp0 setWaypointSpeed "FULL"; + _wp0 setWaypointStatements ["true", "deletevehicle _this"]; diff --git a/AntistasiOfficial.Altis/AI/airdrop.sqf b/AntistasiOfficial.Altis/AI/airdrop.sqf index b00e94de..bd017203 100644 --- a/AntistasiOfficial.Altis/AI/airdrop.sqf +++ b/AntistasiOfficial.Altis/AI/airdrop.sqf @@ -1,5 +1,5 @@ private ["_veh","_grupo","_marcador","_posicion","_heli","_engagepos","_orig","_landpos","_exitpos","_wp","_wp1","_wp2","_wp3","_wp4"]; - +diag_log format ["NATOCA airdrop spawned"]; _veh = _this select 0; _grupo = _this select 1; _marcador = _this select 2; @@ -11,14 +11,11 @@ _heli = group driver _veh; {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _heli; _dist = 400 + (10*_threat); _orig = [0,0,0]; -if (side driver _veh == side_red) then - { - _orig = getMarkerPos "spawnCSAT"; - } -else - { - _orig = getMarkerPos "spawnNATO"; - }; +_distEng = if (_veh isKindOf "Helicopter") then {1000} else {5000}; +_distExit = if (_veh isKindOf "Helicopter") then {400} else {1000}; +if (side driver _veh == side_red) then {_orig = getMarkerPos "spawnCSAT";} else {_orig = getMarkerPos "spawnNATO";}; + + _engagepos = []; _landpos = []; @@ -26,20 +23,19 @@ _exitpos = []; _randang = random 360; -while {true} do - { - _landpos = [_posicion, _dist, _randang] call BIS_Fnc_relPos; +while {true} do { + _landpos = _posicion getPos [_dist, _randang]; if (!surfaceIsWater _landpos) exitWith {}; - }; + _randAng = _randAng + 1; +}; _randang = _randang + 90; -while {true} do - { - _exitpos = [_posicion, 400, _randang] call BIS_Fnc_relPos; +while {true} do { + _exitpos = _posicion getPos [_distExit, _randang]; _randang = _randang + 1; if ((!surfaceIsWater _exitpos) and (_exitpos distance _posicion > 300)) exitWith {}; - }; +}; _randang = [_landpos,_exitpos] call BIS_fnc_dirTo; _randang = _randang - 180; @@ -47,27 +43,33 @@ _randang = _randang - 180; _engagepos = [_landpos, 1000, _randang] call BIS_Fnc_relPos; {_x setBehaviour "CARELESS"} forEach units _heli; -_veh flyInHeight (150+(20*_threat)); +_engagepos = _landpos getPos [_distEng, _randang]; +{_x set [2,300]} forEach [_landPos,_exitPos,_engagePos]; +{_x setBehaviour "CARELESS"} forEach units _heli; +_veh flyInHeight 100; +_veh setCollisionLight false; _wp = _heli addWaypoint [_engagepos, 0]; +diag_log format ["NATOCA WP assigned and _landpos = %1",_landpos]; _wp setWaypointType "MOVE"; -_wp setWaypointSpeed "LIMITED"; +_wp setWaypointSpeed "FULL"; _wp1 = _heli addWaypoint [_landpos, 1]; _wp1 setWaypointType "MOVE"; -_wp1 setWaypointSpeed "LIMITED"; +_wp1 setWaypointSpeed "NORMAL"; _wp2 = _heli addWaypoint [_exitpos, 2]; _wp2 setWaypointType "MOVE"; +_wp1 setWaypointSpeed "LIMITED"; _wp3 = _heli addWaypoint [_orig, 3]; _wp3 setWaypointType "MOVE"; -_wp3 setWaypointSpeed "NORMAL"; +_wp3 setWaypointSpeed "FULL"; _wp3 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; waitUntil {sleep 1; (currentWaypoint _heli == 3) or (not alive _veh)}; -[_veh] call puertasLand; +//[_veh] call puertasLand; if (alive _veh) then { @@ -76,9 +78,9 @@ if (alive _veh) then _x allowDamage false; moveOut _x; sleep 0.35; - _chute = createVehicle ["NonSteerable_Parachute_F", (getPos _x), [], 0, "NONE"]; - _chute setPos (getPos _x); - _x moveinDriver _chute; + //_chute = createVehicle ["NonSteerable_Parachute_F", (getPos _x), [], 0, "NONE"]; + //_chute setPos (getPos _x); + //_x moveinDriver _chute; _x allowDamage true; sleep 0.5; } forEach units _grupo; @@ -87,4 +89,4 @@ if (alive _veh) then _wp4 = _grupo addWaypoint [_posicion, 0]; _wp4 setWaypointType "SAD"; -[_veh] call puertasLand; +//[_veh] call puertasLand; diff --git a/AntistasiOfficial.Altis/AI/artilleriaNATO.sqf b/AntistasiOfficial.Altis/AI/artilleriaNATO.sqf index 0ce77994..6d79a3dd 100644 --- a/AntistasiOfficial.Altis/AI/artilleriaNATO.sqf +++ b/AntistasiOfficial.Altis/AI/artilleriaNATO.sqf @@ -8,12 +8,8 @@ _equis = _pos select 0; _y = _pos select 1; _cuenta = 0; -while {({(_x distance _pos < 300) and (side _x == side_blue)} count allUnits == 0) and (_cuenta < 50) and (not(_marcador in forcedSpawn))} do - { - _cuenta = _cuenta + 1; - _rndmslp = 5 + (random 5); - sleep _rndmslp; - _shell1 = "Sh_82mm_AMOS" createVehicle [_equis + (150 - (random 300)),_y + (150 - (random 300)),200]; - _shell1 setVelocity [0,0,-50]; - }; + +_shell1 = "Sh_82mm_AMOS" createVehicle [_equis,_y,200]; +_shell1 setVelocity [0,0,-50]; + diff --git a/AntistasiOfficial.Altis/AI/askForHelp.sqf b/AntistasiOfficial.Altis/AI/askForHelp.sqf index cad04a1e..2444470d 100644 --- a/AntistasiOfficial.Altis/AI/askForHelp.sqf +++ b/AntistasiOfficial.Altis/AI/askForHelp.sqf @@ -14,7 +14,7 @@ _units = units group _unit; { if (typeOf _x == guer_sol_MED) then { - if ((alive _x) and (_medItem in (items _x)) and (not (_x getVariable "ASunconscious")) and (vehicle _x == _x) and (_x distance _unit < 81)) then + if ((alive _x) and (_medItem in (items _x)) and !([_x] call AS_fnc_isUnconscious) and (vehicle _x == _x) and (_x distance _unit < 81)) then { _medAvail = true; _medHelping = _x getVariable "ASmedHelping"; @@ -28,14 +28,14 @@ _units = units group _unit; }; } forEach _units; -if ((!_medAvail) or (_unit getVariable "ASunconscious")) then +if ((!_medAvail) or ([_unit] call AS_fnc_isUnconscious)) then { { if (!isPlayer _x) then { if (typeOf _x != guer_sol_MED) then { - if ((alive _x) and (_medItem in (items _x)) and (not (_x getVariable "ASunconscious")) and (vehicle _x == _x) and (_x distance _unit < _distance)) then + if ((alive _x) and (_medItem in (items _x)) and !([_x] call AS_fnc_isUnconscious) and (vehicle _x == _x) and (_x distance _unit < _distance)) then { _medHelping = _x getVariable "ASmedHelping"; if ((isNil "_medHelping") and (!(_x getVariable "ASrearming"))) then diff --git a/AntistasiOfficial.Altis/AI/autoRearm.sqf b/AntistasiOfficial.Altis/AI/autoRearm.sqf index 77eb1b4d..fffce0ec 100644 --- a/AntistasiOfficial.Altis/AI/autoRearm.sqf +++ b/AntistasiOfficial.Altis/AI/autoRearm.sqf @@ -3,7 +3,7 @@ private ["_unit","_Pweapon","_Sweapon","_cuenta","_magazines","_hayCaja","_dista _unit = _this select 0; if ((!alive _unit) or (isPlayer _unit) or (vehicle _unit != _unit) or (player != leader group player) or (captive _unit)) exitWith {}; -if (_unit getVariable "ASunconscious") exitWith {}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {}; _medHelping = _unit getVariable "ASmedHelping"; if (!(isNil "_medHelping")) exitWith {_unit groupChat "I cannot rearm right now. I'm healing a comrade"}; _rearming = _unit getVariable "ASrearming"; diff --git a/AntistasiOfficial.Altis/AI/fastropeAAF.sqf b/AntistasiOfficial.Altis/AI/fastropeAAF.sqf index e9755e52..2d61f1f3 100644 --- a/AntistasiOfficial.Altis/AI/fastropeAAF.sqf +++ b/AntistasiOfficial.Altis/AI/fastropeAAF.sqf @@ -43,7 +43,7 @@ if (alive _veh) then }; }; */ -[_veh] call smokeCoverAuto; +//[_veh] call smokeCoverAuto; { [_veh,_x] spawn diff --git a/AntistasiOfficial.Altis/AI/fastropeCSAT.sqf b/AntistasiOfficial.Altis/AI/fastropeCSAT.sqf index df057b16..33b5cb00 100644 --- a/AntistasiOfficial.Altis/AI/fastropeCSAT.sqf +++ b/AntistasiOfficial.Altis/AI/fastropeCSAT.sqf @@ -30,7 +30,7 @@ _veh flyInHeight 15; waitUntil {sleep 1; (not alive _veh) or ((speed _veh < 1) and (speed _veh > -1))}; -[_veh] call smokeCoverAuto; +//[_veh] call smokeCoverAuto; { [_veh,_x] spawn diff --git a/AntistasiOfficial.Altis/AI/fastropeNATO.sqf b/AntistasiOfficial.Altis/AI/fastropeNATO.sqf index a5cc7c6e..64fc5feb 100644 --- a/AntistasiOfficial.Altis/AI/fastropeNATO.sqf +++ b/AntistasiOfficial.Altis/AI/fastropeNATO.sqf @@ -30,7 +30,7 @@ _veh flyInHeight 15; waitUntil {sleep 1; (not alive _veh) or ((speed _veh < 1) and (speed _veh > -1))}; -[_veh] call smokeCoverAuto; +//[_veh] call smokeCoverAuto; { [_veh,_x] spawn diff --git a/AntistasiOfficial.Altis/AI/inmuneConvoy.sqf b/AntistasiOfficial.Altis/AI/inmuneConvoy.sqf index 0a5588dc..6d0b7ed1 100644 --- a/AntistasiOfficial.Altis/AI/inmuneConvoy.sqf +++ b/AntistasiOfficial.Altis/AI/inmuneConvoy.sqf @@ -71,7 +71,7 @@ waitUntil {sleep 1;(not alive _veh) or ({(_x knowsAbout _veh > 1.4) and (side _x if (!alive _veh) exitWith {}; -if (_enemigo) then {[["TaskSucceeded", ["", format ["%1 Spotted",_text]]],"BIS_fnc_showNotification"] call BIS_fnc_MP;}; +if (_enemigo) then {[_text,{["TaskSucceeded", ["", format ["%1 Spotted",_this]]] call BIS_fnc_showNotification}] remoteExec ["call", 0];}; _mrkfin = createMarker [format ["%2%1", random 100,_text], position _veh]; _mrkfin setMarkerShape "ICON"; _mrkfin setMarkerType _tipo; diff --git a/AntistasiOfficial.Altis/AI/medHeal.sqf b/AntistasiOfficial.Altis/AI/medHeal.sqf index f0d24362..45c3de13 100644 --- a/AntistasiOfficial.Altis/AI/medHeal.sqf +++ b/AntistasiOfficial.Altis/AI/medHeal.sqf @@ -6,7 +6,7 @@ _healed = false; if (_medic != _unit) then { _unit setVariable ["ASmedHelped",true]; _medic setVariable ["ASmedHelping",true]; - if (!(_unit getVariable ["ASunconscious", false])) then { + if !([_unit] call AS_fnc_isUnconscious) then { _unit groupChat format ["Comrades, this is %1. I'm hurt",name _unit]; playSound3D [(injuredSounds call BIS_fnc_selectRandom),_unit,false, getPosASL _unit, 1, 1, 50]; sleep 2; @@ -19,9 +19,9 @@ if (_medic != _unit) then { _medic disableAI "AUTOCOMBAT"; while {true} do { _medic doMove getPosATL _unit; - if ((!alive _medic) or (!alive _unit) or (_medic distance _unit < 3) or (_timeOut < time) or (_medic getVariable "ASunconscious") or (_unit != vehicle _unit) or (_medic != vehicle _medic)) exitWith {}; + if ((!alive _medic) or (!alive _unit) or (_medic distance _unit < 3) or (_timeOut < time) or ([_medic] call AS_fnc_isUnconscious) or (_unit != vehicle _unit) or (_medic != vehicle _medic)) exitWith {}; if (isPlayer _unit) then{ - if ((unitReady _medic) and (alive _medic) and (_medic distance _unit > 3) and (!(_medic getVariable "ASunconscious"))) then {_medic setPos position _unit}; + if ((unitReady _medic) and (alive _medic) and (_medic distance _unit > 3) and !([_medic] call AS_fnc_isUnconscious)) then {_medic setPos position _unit}; }; sleep 1; }; @@ -38,12 +38,13 @@ if (_medic != _unit) then { if (activeACEMedical) then { [_unit, _unit] call ace_medical_fnc_treatmentAdvanced_fullHeal; }; + [_unit, false] call AS_fnc_setUnconscious; _medic stop false; _unit stop false; _unit dofollow leader group _unit; _medic doFollow leader group _unit; _healed = true; - if ((alive _medic) and (alive _unit) /*and (not(_unit getVariable "ASunconscious"))*/ and (not(_medic getVariable "ASunconscious"))) then { + if ((alive _medic) and (alive _unit) and !([_medic] call AS_fnc_isUnconscious)) then { if (_medic != _unit) then {_medic groupChat format ["You are ready %1",name _unit]}; }; }; diff --git a/AntistasiOfficial.Altis/AI/smokeCoverAuto.sqf b/AntistasiOfficial.Altis/AI/smokeCoverAuto.sqf index feb3440a..a6b170a7 100644 --- a/AntistasiOfficial.Altis/AI/smokeCoverAuto.sqf +++ b/AntistasiOfficial.Altis/AI/smokeCoverAuto.sqf @@ -11,7 +11,7 @@ if ({"SmokeLauncher" in (_veh weaponsTurret _x)} count (allTurrets _veh) > 0) th else { private ["_pos","_humo"]; - _tipoHumo = selectRandom humo; + _tipoHumo = "SmokeShellRed"; for "_i" from 0 to 8 do { _pos = position _veh getPos [30,_i*40]; diff --git a/AntistasiOfficial.Altis/CREATE/CIVinit.sqf b/AntistasiOfficial.Altis/CREATE/CIVinit.sqf index 51b12c58..ae7444c7 100644 --- a/AntistasiOfficial.Altis/CREATE/CIVinit.sqf +++ b/AntistasiOfficial.Altis/CREATE/CIVinit.sqf @@ -8,7 +8,7 @@ _EHkilledIdx = _unit addEventHandler ["killed", { params ["_victim","_killer"]; private ["_multiplicator"]; - if (activeACE) then { + if (activeACEMedical) then { if ((isNull _killer) OR (_killer == _victim)) then { _killer = _victim getVariable ["ace_medical_lastDamageSource", _killer]; }; diff --git a/AntistasiOfficial.Altis/CREATE/CSATpunish.sqf b/AntistasiOfficial.Altis/CREATE/CSATpunish.sqf index 008a7628..bcf0fd70 100644 --- a/AntistasiOfficial.Altis/CREATE/CSATpunish.sqf +++ b/AntistasiOfficial.Altis/CREATE/CSATpunish.sqf @@ -13,7 +13,7 @@ _vehiculos = []; _civiles = []; _nombredest = [_mrkDestino] call AS_fnc_localizar; -_tsk = ["AtaqueAAF",[side_blue,civilian],[format ["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; +_tsk = ["AtaqueAAF",[side_blue,civilian],[["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; //Ataque de artillería [_mrkdestino] spawn artilleria; @@ -22,22 +22,22 @@ _tiempo = time + 3600; _posorigen = getMarkerPos "spawnCSAT"; -for "_i" from 1 to 3 do - { +for "_i" from 1 to 3 do { _tipoveh = opAir call BIS_fnc_selectRandom; + if(_i == 1) then {_tipoveh = opAir select 0}; + if(_i == 3) then {_tipoveh = opAir select 1}; _timeOut = 0; _pos = _posorigen findEmptyPosition [0,100,_tipoveh]; - while {_timeOut < 60} do - { + while {_timeOut < 60} do { if (count _pos > 0) exitWith {}; _timeOut = _timeOut + 1; _pos = _posorigen findEmptyPosition [0,100,_tipoveh]; sleep 1; - }; + }; if (count _pos == 0) then {_pos = _posorigen}; _vehicle=[_pos, 0, _tipoveh, side_red] call bis_fnc_spawnvehicle; _heli = _vehicle select 0; - _heli setVariable ["BLUFORSpawn",false]; + _heli setVariable ["OPFORSpawn",true]; _heliCrew = _vehicle select 1; _grupoheli = _vehicle select 2; _pilotos = _pilotos + _heliCrew; @@ -49,10 +49,13 @@ for "_i" from 1 to 3 do {[_x] spawn CSATinit} forEach _heliCrew; _wp1 = _grupoheli addWaypoint [_posdestino, 0]; _wp1 setWaypointType "SAD"; + _wp101 = _grupoheli addWaypoint [_posdestino, 50]; + _wp101 setWaypointType "LOITER"; + _wp101 setWaypointLoiterType "CIRCLE"; + _wp101 setWaypointLoiterRadius 200; + _wp101 setWaypointSpeed "LIMITED"; [_heli,"CSAT Air Attack"] spawn inmuneConvoy; - } - else - { + } else { {_x setBehaviour "CARELESS";} forEach units _grupoheli; _tipoGrupo = [opGroup_Squad, side_red] call AS_fnc_pickGroup; _grupo = [_posorigen, side_red, _tipoGrupo] call BIS_Fnc_spawnGroup; @@ -76,106 +79,136 @@ for "_i" from 1 to 3 do _wp3 setWaypointType "GETOUT"; _wp0 synchronizeWaypoint [_wp3]; _wp4 = _grupo addWaypoint [_posdestino, 1]; - _wp4 setWaypointType "SAD"; + _wp4 setwaypointtype "SAD"; + private _i = 1; + while {_i < 10} do + { + private _wp = _x addWaypoint [_posdestino, 50, _i, "MOVE wp"]; + _wp setWaypointCompletionRadius 0.2*50; + _wp setWaypointType "SAD"; + _i = _i + 1; + }; + [_grupo,0] setWaypointBehaviour "COMBAT"; _wp2 = _grupoheli addWaypoint [_posorigen, 1]; _wp2 setWaypointType "MOVE"; _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; [_grupoheli,1] setWaypointBehaviour "AWARE"; - } - else - {[_heli,_grupo,_posdestino,_posorigen,_grupoheli] spawn fastropeCSAT;} - }; - sleep 20; + } else { + [_heli,_grupo,_posdestino,_posorigen,_grupoheli] spawn fastropeCSAT;}; }; + sleep 3; +}; _datos = server getVariable _mrkDestino; - _numCiv = _datos select 0; -_numCiv = round ((_numCiv * civPerc)/2); - -if (_numCiv < 8) then {_numCiv = 8}; +_numCiv = 16; //making the number standard for now _size = [_mrkDestino] call sizeMarker; -_grupoCivil = createGroup side_blue; -_grupos pushBack _grupoCivil; +_grupoCivil1 = createGroup side_blue; +_grupos pushBack _grupoCivil1; -for "_i" from 0 to _numCiv do - { - _pos = _posdestino getPos [_size,random 360]; - _civ = _grupoCivil createUnit [CIV_units call BIS_fnc_selectRandom,_pos, [],_size,"NONE"]; +for "_i" from 0 to _numCiv do { + while {true} do { + _pos = _posdestino getPos [random _size,random 360]; + if (!surfaceIsWater _pos) exitWith {}; + }; + _civ = _grupoCivil1 createUnit [CIV_units call BIS_fnc_selectRandom,_pos, [],20,"NONE"]; _rnd = random 100; - if (_rnd < 90) then - { + if (_rnd < 90) then { if (_rnd < 25) then {[_civ, "hgun_PDW2000_F", 5, 0] call BIS_fnc_addWeapon;} else {[_civ, "hgun_Pistol_heavy_02_F", 5, 0] call BIS_fnc_addWeapon;}; - }; - _civiles pushBack _civ; - [_civ] spawn civInit; - sleep 1; }; + _civiles pushBack _civ; + [_civ] call civInit; + sleep 0.5; +}; +_grupoCivil = createGroup side_blue; +{[_x] join _grupoCivil} foreach (units _grupoCivil1); +_grupos pushBack _grupoCivil; [_grupoCivil, _mrkDestino, "AWARE","SPAWNED","NOVEH2"] execVM "scripts\UPSMON.sqf"; _civilMax = {alive _x} count _civiles; _solMax = count _soldados; +//Loop to make civis get killed at some point, could be done better by beeing sure CSAF find where they hide + [_grupoCivil,_soldados,_posdestino] spawn {sleep 900; //15 min, can be tweaked on need + diag_log format ["CSAT: civilians: %1 enemies: %2",_this select 0,_this select 1]; + {(_this select 0) reveal [_x,4]} foreach (_this select 1); + _wp7 = (_this select 0) addWaypoint [_this select 2, 1]; + _wp7 setWaypointType "SAD"; + [(_this select 0),1] setWaypointBehaviour "CARELESS"; + _pos = position (leader (_this select 0)); + diag_log format ["CSAT: pos: %1",_pos]; + _humo = "SmokeShellYellow" createVehicle _pos; + sleep 30; + _pos = position (leader (_this select 0)); + _humo = "SmokeShellYellow" createVehicle _pos; + sleep 60; + _pos = position (leader (_this select 0)); + _humo = "SmokeShellYellow" createVehicle _pos; + }; -for "_i" from 0 to round random 2 do - { +for "_i" from 0 to round random 2 do { [_mrkdestino, selectRandom opCASFW] spawn airstrike; sleep 30; - }; +}; {if ((surfaceIsWater position _x) and (vehicle _x == _x)) then {_x setDamage 1}} forEach _soldados; -waitUntil {sleep 5; (({not (captive _x)} count _soldados) < ({captive _x} count _soldados)) or ({alive _x} count _soldados < round (_solMax / 3)) or (({(_x distance _posdestino < _size*2) and (not(vehicle _x isKindOf "Air")) and (alive _x) and (!captive _x)} count _soldados) > 4*({(alive _x) and (_x distance _posdestino < _size*2)} count _civiles)) or (time > _tiempo)}; - -if ((({not (captive _x)} count _soldados) < ({captive _x} count _soldados)) or ({alive _x} count _soldados < round (_solMax / 3)) or (time > _tiempo)) then +waitUntil {sleep 5; + (({not (captive _x)} count _soldados) < ({captive _x} count _soldados)) or + ({alive _x} count _soldados < round (_solMax / 3)) or + ( + ({(_x distance _posdestino < _size*2) and (not(vehicle _x isKindOf "Air")) and (alive _x) and (!captive _x)} count _soldados) + > 4* + ({(alive _x) and (_x distance _posdestino < _size*2)} count _civiles) + ) or + (time > _tiempo)}; + + if ((({!(captive _x)} count _soldados) < ({captive _x} count _soldados)) or ({alive _x} count _soldados < round (_solMax / 3)) or (time > _tiempo)) then { + {_x doMove [0,0,0]} forEach _soldados; + _tsk = ["AtaqueAAF",[side_blue,civilian],[["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; + [-5,20,_posdestino] remoteExec ["AS_fnc_changeCitySupport",2]; + [10,0] remoteExec ["prestige",2]; + {[-5,0,_x] remoteExec ["AS_fnc_changeCitySupport",2]} forEach ciudades; + {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_posdestino,"BLUFORSpawn"] call distanceUnits); + [10,Slowhand] call playerScoreAdd; + } else { + _tsk = ["AtaqueAAF",[side_blue,civilian],[["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; + [-5,-20,_posdestino] remoteExec ["AS_fnc_changeCitySupport",2]; + {[0,-5,_x] remoteExec ["AS_fnc_changeCitySupport",2]} forEach ciudades; + destroyedCities = destroyedCities + [_mrkDestino]; + if (count destroyedCities > 7) then + { + ["destroyedCities",false,true] remoteExec ["BIS_fnc_endMission",0]; + }; + publicVariable "destroyedCities"; + for "_i" from 1 to 60 do + { + _mina = createMine ["APERSMine",_posdestino,[],_size]; + }; + }; + + forcedSpawn = forcedSpawn - [_mrkDestino]; publicVariable "forcedSpawn"; + sleep 15; + + [0,_tsk] spawn borrarTask; + [2400] remoteExec ["AS_fnc_increaseAttackTimer",2]; { - {_x doMove [0,0,0]} forEach _soldados; - _tsk = ["AtaqueAAF",[side_blue,civilian],[format ["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; - [-5,20,_posdestino] remoteExec ["AS_fnc_changeCitySupport",2]; - [10,0] remoteExec ["prestige",2]; - {[-5,0,_x] remoteExec ["AS_fnc_changeCitySupport",2]} forEach ciudades; - {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_posdestino,"BLUFORSpawn"] call distanceUnits); - [10,Slowhand] call playerScoreAdd; - } -else + waitUntil {sleep 1; !([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)}; + deleteVehicle _x; + } forEach _soldados; { - _tsk = ["AtaqueAAF",[side_blue,civilian],[format ["CSAT is making a punishment expedition to %1. They will kill everybody there. Defend the city at all costs",_nombredest],"CSAT Punishment",_mrkDestino],getMarkerPos _mrkDestino,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; - [-5,-20,_posdestino] remoteExec ["AS_fnc_changeCitySupport",2]; - {[0,-5,_x] remoteExec ["AS_fnc_changeCitySupport",2]} forEach ciudades; - destroyedCities = destroyedCities + [_mrkDestino]; - if (count destroyedCities > 7) then - { - ["destroyedCities",false,true] remoteExec ["BIS_fnc_endMission",0]; - }; - publicVariable "destroyedCities"; - for "_i" from 1 to 60 do - { - _mina = createMine ["APERSMine",_posdestino,[],_size]; - }; - }; + waitUntil {sleep 1; !([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)}; + deleteVehicle _x; + } forEach _pilotos; + { + if (!([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)) then {deleteVehicle _x}; + } forEach _vehiculos; + {deleteGroup _x} forEach _grupos; + + waitUntil {sleep 1; not (spawner getVariable _mrkDestino)}; -forcedSpawn = forcedSpawn - [_mrkDestino]; publicVariable "forcedSpawn"; -sleep 15; - -[0,_tsk] spawn borrarTask; -[7200] remoteExec ["AS_fnc_increaseAttackTimer",2]; -{ -waitUntil {sleep 1; !([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)}; -deleteVehicle _x; -} forEach _soldados; -{ -waitUntil {sleep 1; !([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)}; -deleteVehicle _x; -} forEach _pilotos; -{ -if (!([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits)) then {deleteVehicle _x}; -} forEach _vehiculos; -{deleteGroup _x} forEach _grupos; - -waitUntil {sleep 1; not (spawner getVariable _mrkDestino)}; - -{deleteVehicle _x} forEach _civiles; -deleteGroup _grupoCivil; + {deleteVehicle _x} forEach _civiles; + deleteGroup _grupoCivil; diff --git a/AntistasiOfficial.Altis/CREATE/CSATtimetoreveal.sqf b/AntistasiOfficial.Altis/CREATE/CSATtimetoreveal.sqf new file mode 100644 index 00000000..145b5d82 --- /dev/null +++ b/AntistasiOfficial.Altis/CREATE/CSATtimetoreveal.sqf @@ -0,0 +1,5 @@ +//to be spawned by \Create\CSATpunish.sqf + +sleep 900; //15 min, can be balanced +{(_this select 1) reveal _x} foreach (_this select 0); +diag_log format ["CSATPUNISH: CSAT = %1, CIVI = %2",_this select 1,_this select 0]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/NATOArmor.sqf b/AntistasiOfficial.Altis/CREATE/NATOArmor.sqf index 300bbc77..c6774915 100644 --- a/AntistasiOfficial.Altis/CREATE/NATOArmor.sqf +++ b/AntistasiOfficial.Altis/CREATE/NATOArmor.sqf @@ -7,7 +7,7 @@ private ["_originPos","_targetPosition","_originName","_targetName","_endTime"," #define duration 60 -_originPos = getMarkerPos _originMarker; +_originPosition = getMarkerPos _originMarker; _targetPosition = getMarkerPos _targetMarker; _targetName = [_targetMarker] call AS_fnc_localizar; @@ -16,7 +16,7 @@ duration = 60; _endTime = [date select 0, date select 1, date select 2, date select 3, (date select 4) + duration]; _endTime = dateToNumber _endTime; -_tsk = ["NATOArmor",[side_blue,civilian],[format [localize "STR_TSK_NATO_ARMOR",_targetName,_originName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_BLUE],format ["%1 Armor", A3_Str_BLUE],_targetMarker],_targetPosition,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; +_tsk = ["NATOArmor",[side_blue,civilian],[["STR_TSK_TD_NATO_ARMOR",_targetName,_originName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_BLUE],["STR_TSK_NATO_ARMOR", A3_Str_BLUE],_targetMarker],_targetPosition,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _counter = server getVariable ["prestigeNATO",0]; @@ -26,19 +26,14 @@ _counter = round (_counter / 25); _group = createGroup side_blue; _group setVariable ["esNATO",true,true]; -_wp0 = _group addWaypoint [_targetPosition, 0]; -_wp0 setWaypointType "SAD"; -_wp0 setWaypointBehaviour "SAFE"; -_wp0 setWaypointSpeed "LIMITED"; -_wp0 setWaypointFormation "COLUMN"; - -//_spawnpositionData = [_originPosition, _targetPosition] call AS_fnc_findSpawnSpots; //originPosition is unknown! Sparker. -_spawnpositionData = [_originPos, _targetPosition] call AS_fnc_findSpawnSpots; -_spawnPosition = _spawnpositionData select 0; -_direction = _spawnpositionData select 1; - - for "_i" from 1 to _counter do { + _spawnpositionData = [_originPosition, _targetPosition] call AS_fnc_findSpawnSpots; + _spawnPosition = _spawnpositionData select 0; + private _spawnPosition_s = [_spawnPosition, 5, 20, 5, 0, 6, 0, [], _spawnPosition select [0, 2]] call BIS_fnc_findSafePos; //Sparker: otherwise vehicles spawn inside each other + _spawnPosition = +_spawnPosition_s; + _spawnPosition pushback 0.1; //Because findsafepos returns [x, y] + _direction = _spawnpositionData select 1; + _vehicleData = [_spawnPosition, _direction, selectRandom bluMBT, _group] call bis_fnc_spawnvehicle; _vehicle = _vehicleData select 0; [_vehicle] spawn NATOVEHinit; @@ -47,13 +42,30 @@ for "_i" from 1 to _counter do { {[_x] spawn NATOinitCA; _allSoldiers pushBack _x} forEach _vehicleCrew; _allVehicles pushBack _vehicle; _vehicle allowCrewInImmobile true; - sleep 15; + sleep 2; }; +_wp0 = _group addWaypoint [_targetPosition, 0]; +_wp0 setWaypointType "SAD"; +_wp0 setWaypointBehaviour "SAFE"; +_wp0 setWaypointSpeed "NORMAL"; +_wp0 setWaypointFormation "COLUMN"; + +sleep 15; +_spawnergroup = createGroup east; +_spawner = _spawnergroup createUnit [selectrandom CIV_journalists, getmarkerpos _targetPosition, [], 15,"None"]; +_spawner setVariable ["BLUFORSpawn",true,true]; +_spawner disableAI "ALL"; +_spawner allowdamage false; +_spawner setcaptive true; +_spawner enableSimulation false; +hideObjectGlobal _spawner; +_allVehicles pushBack _spawner; + waitUntil {sleep 10; (dateToNumber date > _endTime) OR ({alive _x} count _allSoldiers == 0) OR ({(alive _x)} count _allVehicles == 0)}; if (({alive _x} count _allSoldiers == 0) OR ({(alive _x)} count _allVehicles == 0)) then { - _tsk = ["NATOArmor",[side_blue,civilian],[format [localize "STR_TSK_NATO_ARMOR",_targetName,_originName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_BLUE],format ["%1 Armor", A3_Str_BLUE],_targetMarker],_targetPosition,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; + _tsk = ["NATOArmor",[side_blue,civilian],[["STR_TSK_TD_NATO_ARMOR",_targetName,_originName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_BLUE],["STR_TSK_NATO_ARMOR", A3_Str_BLUE],_targetMarker],_targetPosition,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; [-10,0] remoteExec ["prestige",2]; }; @@ -61,4 +73,4 @@ sleep 15; [0,_tsk] spawn borrarTask; -[[_group], _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; \ No newline at end of file +[[_group], _allSoldiers, _allVehicles] call AS_fnc_despawnUnitsNow; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/NATOCA.sqf b/AntistasiOfficial.Altis/CREATE/NATOCA.sqf index cb7df6f3..5d8cfaa6 100644 --- a/AntistasiOfficial.Altis/CREATE/NATOCA.sqf +++ b/AntistasiOfficial.Altis/CREATE/NATOCA.sqf @@ -4,13 +4,11 @@ private ["_origen"]; _marcador = _this select 0; -//forcedSpawn = forcedSpawn + [_marcador]; publicVariable "forcedSpawn"; - _posicion = getMarkerPos (_marcador); _aeropuertos = aeropuertos - mrkAAF + ["spawnNATO"]; -_threatEval = [_marcador] call AAthreatEval; +_threatEval = 7; //Stef i forced it to 7 untill i manage to check if vehDef and static guns are operative or not. _origen = [_aeropuertos,_posicion] call BIS_fnc_nearestPosition; _orig = getMarkerPos _origen; @@ -18,143 +16,106 @@ _orig = getMarkerPos _origen; _nombredest = [_marcador] call AS_fnc_localizar; _nombreorig = "the NATO Carrier"; if (_origen!= "spawnNATO") then {_nombreorig = [_origen] call AS_fnc_localizar}; -_tsk = ["NATOCA",[side_blue,civilian],[format ["Our Commander asked %3 for an attack on %1. Help them in order to have success in this operation. Their attack will depart from %2",_nombredest,_nombreorig, A3_Str_BLUE],format ["%1 Attack", A3_Str_BLUE],_marcador],_posicion,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; +_tsk = ["NATOCA",[side_blue,civilian],[["STR_TSK_DESC_ATTACK",_nombredest,_nombreorig, A3_Str_BLUE],["STR_TSK_ATTACK", A3_Str_BLUE],_marcador],_posicion,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; misiones pushBackUnique _tsk; publicVariable "misiones"; _soldados = []; _vehiculos = []; _grupos = []; _tipoveh = ""; -_cuenta = server getVariable "prestigeNATO"; -_cuenta = round (_cuenta / 10); +_cuenta = 3; [-20,0] remoteExec ["prestige",2]; -if ((_marcador in bases) or (_marcador in aeropuertos)) then - { - /* - for "_i" from 1 to _cuenta do - { - [_marcador,"B_Plane_CAS_01_F"] spawn airstrike; - sleep 30; - }; - */ - [_marcador] spawn artilleriaNATO; - }; +_spawnergroup = createGroup east; +_spawner = _spawnergroup createUnit [selectrandom CIV_journalists, getmarkerpos _marcador, [], 15,"None"]; +_spawner setVariable ["BLUFORSpawn",true,true]; +_spawner disableAI "ALL"; +_spawner allowdamage false; +_spawner setcaptive true; +_spawner enableSimulation false; +hideObjectGlobal _spawner; -for "_i" from 1 to _cuenta do - { - _tipoveh = planesNATOTrans call BIS_fnc_selectRandom; - _vehicle=[_orig, 0, _tipoveh, side_blue] call bis_fnc_spawnvehicle; - _heli = _vehicle select 0; - _heliCrew = _vehicle select 1; - _grupoheli = _vehicle select 2; - {[_x] spawn NATOinitCA} forEach _heliCrew; - [_heli] spawn NATOVEHinit; - _soldados = _soldados + _heliCrew; - _grupos = _grupos + [_grupoheli]; - _vehiculos = _vehiculos + [_heli]; - _heli lock 3; - /* - if ((_tipoveh != "B_Heli_Light_01_F") and (_tipoveh != "B_Heli_Transport_01_camo_F")) then - { - _wp1 = _grupoheli addWaypoint [_posicion, 0]; - _wp1 setWaypointType "SAD"; - [_heli,"NATO Air Attack"] spawn inmuneConvoy; - } - else - { +sleep 15; + +for "_i" from 1 to _cuenta do { + //Create and initialise aircraft + _tipoveh = planesNATOTrans call BIS_fnc_selectRandom; + _vehicle=[_orig, 0, _tipoveh, side_blue] call bis_fnc_spawnvehicle; + _heli = _vehicle select 0; + _heliCrew = _vehicle select 1; + _grupoheli = _vehicle select 2; + _gunners = _heliCrew - [driver _heli]; + _gunnersgroup = createGroup west; + _gunners join _gunnersgroup; + _gunnersgroup setbehaviour "COMBAT"; + {_x setskill 1} foreach units _gunnersgroup; + {[_x] call NATOinitCA} forEach _heliCrew; + [_heli] call NATOVEHinit; + _soldados = _soldados + _heliCrew; + _grupos = _grupos + [_grupoheli]; + _vehiculos = _vehiculos + [_heli]; + _heli lock 3; {_x setBehaviour "CARELESS";} forEach units _grupoheli; - [_heli,"NATO Air Transport"] spawn inmuneConvoy; - }; - */ - {_x setBehaviour "CARELESS";} forEach units _grupoheli; - [_heli,"NATO Air Transport"] spawn inmuneConvoy; - if (_tipoveh in bluHeliDis) then - { - _tipoGrupo = [bluSquadWeapons, side_blue] call AS_fnc_pickGroup; - _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] spawn NATOinitCA} forEach units _grupo; - _grupos = _grupos + [_grupo]; - if ((_marcador in aeropuertos) or (random 10 < _threatEval)) then - { - [_heli,_grupo,_marcador,_threatEval] spawn airdrop - } - else - { - if ((_marcador in bases) or (_marcador in puestos)) then {[_heli,_grupo,_posicion,_orig,_grupoheli] spawn fastropeNATO;}; - if ((_marcador in recursos) or (_marcador in power) or (_marcador in fabricas)) then - { - {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; - _landpos = []; - _landpos = [_posicion, 0, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _landPos set [2, 0]; - _pad = createVehicle ["Land_HelipadEmpty_F", _landpos, [], 0, "NONE"]; - _vehiculos = _vehiculos + [_pad]; - _wp0 = _grupoheli addWaypoint [_landpos, 0]; - _wp0 setWaypointType "TR UNLOAD"; - _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT'; [vehicle this] call smokeCoverAuto"]; - [_grupoheli,0] setWaypointBehaviour "CARELESS"; - _wp3 = _grupo addWaypoint [_landpos, 0]; - _wp3 setWaypointType "GETOUT"; - _wp0 synchronizeWaypoint [_wp3]; - _wp4 = _grupo addWaypoint [_posicion, 1]; - _wp4 setWaypointType "SAD"; - _wp2 = _grupoheli addWaypoint [_orig, 1]; - _wp2 setWaypointType "MOVE"; - _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; - [_grupoheli,1] setWaypointBehaviour "AWARE"; - [_heli,true] spawn puertasLand; + [_heli,"NATO Air Transport"] call inmuneConvoy; + //Depending on kind of heli + if (_tipoveh in bluHeliDis) then { //Apache transport, can land, fastrope or paradrop + //Add troops and init them + _tipoGrupo = [bluSquadWeapons, side_blue] call AS_fnc_pickGroup; + _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] spawn NATOinitCA} forEach units _grupo; + _grupos = _grupos + [_grupo]; + //Decide for aidrop or fastrope/land + if ((_marcador in puestos) or (random 10 < _threatEval)) then { + {removebackpack _x; _x addBackpack "B_Parachute"} forEach units _grupo; + [_heli,_grupo,_marcador,_threatEval] spawn airdrop; + diag_log format ["NATOCA HeliDIS airdropping: %1, %2, %3 ",_heli,_grupo,_marcador]; + } else { + if ((_marcador in bases) or (_marcador in puestos)) then { + [_heli,_grupo,_posicion,_orig,_grupoheli] spawn fastropeNATO; + }; + if ((_marcador in recursos) or (_marcador in power) or (_marcador in fabricas)) then { + {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; + _landpos = []; + _landpos = [_posicion, 0, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _landPos set [2, 0]; + _pad = createVehicle ["Land_HelipadEmpty_F", _landpos, [], 0, "NONE"]; + _vehiculos = _vehiculos + [_pad]; + _wp0 = _grupoheli addWaypoint [_landpos, 0]; + _wp0 setWaypointType "TR UNLOAD"; + _wp0 setWaypointSpeed "FULL"; + _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT';"]; + [_grupoheli,0] setWaypointBehaviour "CARELESS"; + _wp3 = _grupo addWaypoint [_landpos, 0]; + _wp3 setWaypointType "GETOUT"; + _wp0 synchronizeWaypoint [_wp3]; + _wp4 = _grupo addWaypoint [_posicion, 1]; + _wp4 setWaypointType "SAD"; + _wp2 = _grupoheli addWaypoint [_orig, 1]; + _wp2 setWaypointType "MOVE"; + _wp2 setWaypointSpeed "FULL"; + _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; + [_grupoheli,1] setWaypointBehaviour "AWARE"; + [_heli,true] spawn puertasLand; }; }; }; - if (_tipoveh in bluHeliTS) then - { - {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; - _tipoGrupo = [bluTeam, side_blue] call AS_fnc_pickGroup; - _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] spawn NATOinitCA} forEach units _grupo; - _grupos = _grupos + [_grupo]; - _landpos = []; - _landpos = [_posicion, 0, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _landPos set [2, 0]; - _pad = createVehicle ["Land_HelipadEmpty_F", _landpos, [], 0, "NONE"]; - _vehiculos = _vehiculos + [_pad]; - _wp0 = _grupoheli addWaypoint [_landpos, 0]; - _wp0 setWaypointType "TR UNLOAD"; - _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT'; [vehicle this] call smokeCoverAuto"]; - [_grupoheli,0] setWaypointBehaviour "CARELESS"; - _wp3 = _grupo addWaypoint [_landpos, 0]; - _wp3 setWaypointType "GETOUT"; - _wp0 synchronizeWaypoint [_wp3]; - _wp4 = _grupo addWaypoint [_posicion, 1]; - _wp4 setWaypointType "SAD"; - _wp2 = _grupoheli addWaypoint [_orig, 1]; - _wp2 setWaypointType "MOVE"; - _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; - [_grupoheli,1] setWaypointBehaviour "AWARE"; - [_heli,true] spawn puertasLand; - }; - if (_tipoveh in bluHeliRope) then - { - {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; - _tipoGrupo = [bluSquad, side_blue] call AS_fnc_pickGroup; - _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] spawn NATOinitCA} forEach units _grupo; - _grupos = _grupos + [_grupo]; - if ((_marcador in aeropuertos) or (_marcador in bases) or (_marcador in puestos) or (random 10 < _threatEval)) then - { - [_heli,_grupo,_marcador,_threatEval] spawn airdrop - } - else - { + if (_tipoveh in bluHeliTS) then { //Littlebird will land only + {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; + //Add troops and init them + _tipoGrupo = [bluTeam, side_blue] call AS_fnc_pickGroup; + _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] call NATOinitCA} forEach units _grupo; + _grupos = _grupos + [_grupo]; _landpos = []; - _landpos = [_posicion, 0, 300, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _landpos = [_posicion, 0, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; _landPos set [2, 0]; _pad = createVehicle ["Land_HelipadEmpty_F", _landpos, [], 0, "NONE"]; _vehiculos = _vehiculos + [_pad]; + //WP assignement _wp0 = _grupoheli addWaypoint [_landpos, 0]; _wp0 setWaypointType "TR UNLOAD"; - _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT'; [vehicle this] call smokeCoverAuto"]; + _wp0 setWaypointSpeed "FULL"; + _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT';"]; [_grupoheli,0] setWaypointBehaviour "CARELESS"; _wp3 = _grupo addWaypoint [_landpos, 0]; _wp3 setWaypointType "GETOUT"; @@ -162,39 +123,90 @@ for "_i" from 1 to _cuenta do _wp4 = _grupo addWaypoint [_posicion, 1]; _wp4 setWaypointType "SAD"; _wp2 = _grupoheli addWaypoint [_orig, 1]; + _wp2 setWaypointSpeed "FULL"; _wp2 setWaypointType "MOVE"; _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; [_grupoheli,1] setWaypointBehaviour "AWARE"; [_heli,true] spawn puertasLand; - }; + diag_log format ["NATOCA HeliTS airdropping: %1, %2, %3 ",_heli,_grupo,_marcador]; + }; + if (_tipoveh in bluHeliRope) then { //Chinhook can aidrop or land + {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _grupoheli; + //Add troops and init them + _tipoGrupo = [bluSquad, side_blue] call AS_fnc_pickGroup; + _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _heli; _x moveInCargo _heli; _soldados = _soldados + [_x]; [_x] call NATOinitCA} forEach units _grupo; + _grupos = _grupos + [_grupo]; + + //Decide airdrop or land + if (!(_marcador in puestos) or (_marcador in bases) or (random 10 < _threatEval)) then { + {removebackpack _x; _x addBackpack "B_Parachute"} forEach units _grupo; + [_heli,_grupo,_marcador,_threatEval] spawn airdrop; + diag_log format ["NATOCA HeliRope: %1, %2, %3,",_heli,_grupo,_marcador]; + } else { + _landpos = []; + _landpos = [_posicion, 0, 300, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _landPos set [2, 0]; + _pad = createVehicle ["Land_HelipadEmpty_F", _landpos, [], 0, "NONE"]; + _vehiculos = _vehiculos + [_pad]; + _wp0 = _grupoheli addWaypoint [_landpos, 0]; + _wp0 setWaypointType "TR UNLOAD"; + _wp0 setWaypointSpeed "FULL"; + _wp0 setWaypointStatements ["true", "(vehicle this) land 'GET OUT';"]; + [_grupoheli,0] setWaypointBehaviour "CARELESS"; + _wp3 = _grupo addWaypoint [_landpos, 0]; + _wp3 setWaypointType "GETOUT"; + _wp0 synchronizeWaypoint [_wp3]; + _wp4 = _grupo addWaypoint [_posicion, 1]; + _wp4 setWaypointType "SAD"; + _wp2 = _grupoheli addWaypoint [_orig, 1]; + _wp2 setWaypointType "MOVE"; + _wp2 setWaypointSpeed "FULL"; + _wp2 setWaypointStatements ["true", "{deleteVehicle _x} forEach crew this; deleteVehicle this"]; + [_grupoheli,1] setWaypointBehaviour "AWARE"; + [_heli,true] spawn puertasLand; + }; }; - sleep 35; + sleep 25; }; + _solMax = count _soldados; _solMax = round (_solMax / 4); +sleep 20; +//Taking out enemy mortar to balance the fight + if ((_marcador in bases) and ((player distance _posicion)>300)) then { + [_marcador] spawn artilleriaNATO; + }; + if ((_marcador in aeropuertos) and ((player distance _posicion)>300)) then { + [_marcador] spawn artilleriaNATO; + }; + waitUntil {sleep 1; (_marcador in mrkFIA) or ({alive _x} count _soldados < _solMax)}; -if ({alive _x} count _soldados < _solMax) then - { - _tsk = ["NATOCA",[side_blue,civilian],[format ["Our Commander asked %3 for an attack on %1. Help them in order to have success in this operation. Their attack will depart from %2",_nombredest,_nombreorig, A3_Str_BLUE],format ["%1 Attack", A3_Str_BLUE],_marcador],_posicion,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; +if ({alive _x} count _soldados < _solMax) then { + _tsk = ["NATOCA",[side_blue,civilian],[["STR_TSK_DESC_ATTACK",_nombredest,_nombreorig, A3_Str_BLUE],["STR_TSK_ATTACK", A3_Str_BLUE],_marcador],_posicion,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; [-10,0] remoteExec ["prestige",2]; - }; +}; -//forcedSpawn = forcedSpawn - [_marcador]; publicVariable "forcedSpawn"; -sleep 15; //[_tsk,true] call BIS_fnc_deleteTask; [0,_tsk] spawn borrarTask; + { -_soldado = _x; -waitUntil {sleep 1; {_x distance _soldado < distanciaSPWN} count (allPlayers - (entities "HeadlessClient_F")) == 0}; -deleteVehicle _soldado; + _soldado = _x; + waitUntil {sleep 1; {_x distance _soldado < distanciaSPWN} count (allPlayers - (entities "HeadlessClient_F")) == 0}; + deleteVehicle _soldado; } forEach _soldados; + {deleteGroup _x} forEach _grupos; + { -_vehiculo = _x; -waitUntil {sleep 1; {_x distance _vehiculo < distanciaSPWN/2} count (allPlayers - (entities "HeadlessClient_F")) == 0}; -deleteVehicle _x} forEach _vehiculos; + _vehiculo = _x; + waitUntil {sleep 1; {_x distance _vehiculo < distanciaSPWN/2} count (allPlayers - (entities "HeadlessClient_F")) == 0}; + deleteVehicle _x +} forEach _vehiculos; +deletevehicle _spawner; +deleteGroup _spawnergroup; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/NATOQRF.sqf b/AntistasiOfficial.Altis/CREATE/NATOQRF.sqf index d1fb71cb..c4489701 100644 --- a/AntistasiOfficial.Altis/CREATE/NATOQRF.sqf +++ b/AntistasiOfficial.Altis/CREATE/NATOQRF.sqf @@ -42,7 +42,7 @@ _tiempolim = 30; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + _tiempolim]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["NATOQRF",[side_blue,civilian],[format ["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2.",_destName,_origName, A3_Str_BLUE],format ["%1 QRF", A3_Str_BLUE],_mrk],_dest,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; +_tsk = ["NATOQRF",[side_blue,civilian],[["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2.",_destName,_origName, A3_Str_BLUE],["%1 QRF", A3_Str_BLUE],_mrk],_dest,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; misiones pushBackUnique _tsk; publicVariable "misiones"; // cost: 10 NATO @@ -202,10 +202,10 @@ else { waitUntil {sleep 10; (dateToNumber date > _fechalimnum) or ({alive _x} count _soldados == 0)}; if (dateToNumber date > _fechalimnum) then { - _tsk = ["NATOQRF",[side_blue,civilian],[format ["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2",_destName,_origName, A3_Str_BLUE],format ["%1 QRF", A3_Str_BLUE],_mrk],_dest,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["NATOQRF",[side_blue,civilian],[["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2",_destName,_origName, A3_Str_BLUE],["%1 QRF", A3_Str_BLUE],_mrk],_dest,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; } else { - _tsk = ["NATOQRF",[side_blue,civilian],[format ["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2",_destName,_origName, A3_Str_BLUE],format ["%1 QRF", A3_Str_BLUE],_mrk],_dest,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["NATOQRF",[side_blue,civilian],[["Our Commander asked %3 for reinforcements near %1. Their troops will depart from %2",_destName,_origName, A3_Str_BLUE],["%1 QRF", A3_Str_BLUE],_mrk],_dest,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; [-5,0] remoteExec ["prestige",2]; }; diff --git a/AntistasiOfficial.Altis/CREATE/VEHdespawner.sqf b/AntistasiOfficial.Altis/CREATE/VEHdespawner.sqf index 5c7bb0aa..92ef6361 100644 --- a/AntistasiOfficial.Altis/CREATE/VEHdespawner.sqf +++ b/AntistasiOfficial.Altis/CREATE/VEHdespawner.sqf @@ -15,6 +15,7 @@ if ((typeOf _vehicle in CIV_vehicles) AND ({_x getVariable ["BLUFORSpawn",false] _data = server getVariable _city; _prestigeOPFOR = _data select 2; sleep 5; + if (random 100 < _prestigeOPFOR) then { { _unit = _x; @@ -29,9 +30,15 @@ if ((typeOf _vehicle in CIV_vehicles) AND ({_x getVariable ["BLUFORSpawn",false] }; while {alive _vehicle} do { - if (!([distanciaSPWN,1,_vehicle,"BLUFORSpawn"] call distanceUnits) AND !([distanciaSPWN,1,_vehicle,"OPFORSpawn"] call distanceUnits) AND !(_vehicle in staticsToSave) AND (_vehicle distance getMarkerPos guer_respawn > 100)) then { - if (_vehicle in reportedVehs) then {reportedVehs = reportedVehs - [_vehicle]; publicVariable "reportedVehs"}; - deleteVehicle _vehicle; + if ( + !([distanciaSPWN,1,_vehicle,"BLUFORSpawn"] call distanceUnits) AND + !([distanciaSPWN,1,_vehicle,"OPFORSpawn"] call distanceUnits) AND + !(_vehicle in staticsToSave) AND + (_vehicle distance getMarkerPos guer_respawn > 100) + ) then { + + if (_vehicle in reportedVehs) then {reportedVehs = reportedVehs - [_vehicle]; publicVariable "reportedVehs"}; + deleteVehicle _vehicle; }; sleep 60; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/VEHinit.sqf b/AntistasiOfficial.Altis/CREATE/VEHinit.sqf index a6fd2335..3d105f84 100644 --- a/AntistasiOfficial.Altis/CREATE/VEHinit.sqf +++ b/AntistasiOfficial.Altis/CREATE/VEHinit.sqf @@ -50,7 +50,8 @@ call { [-2,2,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]; if (activeBE) then {["des_arm"] remoteExec ["fnc_BE_XP", 2]}; }]; - _vehicle addEventHandler ["HandleDamage",{private ["_vehicle"]; _vehicle = _this select 0; if (_this select 1 == "") then {if ((_this select 2 > 0.9) and (!isNull driver _vehicle)) then {[_vehicle] call smokeCoverAuto}}}]; + //_vehicle addEventHandler ["HandleDamage",{private ["_vehicle"]; _vehicle = _this select 0; if (_this select 1 == "") then {if ((_this select 2 > 0.9) and (!isNull driver _vehicle)) then {[_vehicle] call smokeCoverAuto}}} + }; if (_vehicleType in vehTank) then { @@ -59,7 +60,9 @@ call { [-5,5,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]; if (activeBE) then {["des_arm"] remoteExec ["fnc_BE_XP", 2]}; }]; - _vehicle addEventHandler ["HandleDamage",{private ["_vehicle"]; _vehicle = _this select 0; if (_this select 1 == "") then {if ((_this select 2 > 0.9) and (!isNull driver _vehicle)) then {[_vehicle] call smokeCoverAuto}}}]; + //_vehicle addEventHandler ["HandleDamage",{private ["_vehicle"]; _vehicle = _this select 0; if (_this select 1 == "") then {if ((_this select 2 > 0.9) and (!isNull driver _vehicle)) then {[_vehicle] call smokeCoverAuto + + }; }; }; diff --git a/AntistasiOfficial.Altis/CREATE/combinedCA.sqf b/AntistasiOfficial.Altis/CREATE/combinedCA.sqf index 9b82cf24..ff568c2c 100644 --- a/AntistasiOfficial.Altis/CREATE/combinedCA.sqf +++ b/AntistasiOfficial.Altis/CREATE/combinedCA.sqf @@ -17,15 +17,14 @@ _prestigeCSAT = server getVariable ["prestigeCSAT",0]; diag_log format ["Info: Attack triggered. Timer prior to attack: %1.", cuentaCA]; -_base = [_marker] call AS_fnc_findBaseForCA; -_airport = [_marker] call AS_fnc_findAirportForCA; +//Where attack start from + _base = [_marker] call AS_fnc_findBaseForCA; + _airport = [_marker] call AS_fnc_findAirportForCA; + if ((_base == "") AND (_airport == "")) exitWith {diag_log format ["Info: Attack cancelled, no base available. Target location: %1.", _marker]}; -if ((_base == "") AND (_airport == "")) exitWith {diag_log format ["Info: Attack cancelled, no base available. Target location: %1.", _marker]}; - -_involveCSAT = false; -if ((random 100 < _prestigeCSAT) AND (_prestigeCSAT > 19) AND !(server getVariable "blockCSAT")) then { - _involveCSAT = true; -}; +//Involve CSAT or not + _involveCSAT = false; + if ((random 100 < _prestigeCSAT) AND (_prestigeCSAT > 44) AND !(server getVariable "blockCSAT")) then {_involveCSAT = true;}; if ((_airport != "") OR _involveCSAT) then {_threatEvaluationAir = [_marker] call AAthreatEval}; if (_base != "") then {_threatEvaluationLand = [_marker] call landThreatEval}; @@ -34,10 +33,21 @@ _targetName = [_marker] call AS_fnc_localizar; _originMarker = [_base, _airport] select (_base == ""); _originName = ([_base, _airport] select (_base == "")) call AS_fnc_localizar; -_task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE",A3_Str_INDEP,_originName],format ["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; +_task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE",A3_Str_INDEP,_originName],["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; misiones pushbackUnique "AtaqueAAF"; publicVariable "misiones"; -_attackDuration = time + 1800; +_attackDuration = time + 2400; + +//Adding caching area + _spawnergroup = createGroup east; + _spawner = _spawnergroup createUnit [selectrandom CIV_journalists, getmarkerpos _marker, [], 15,"None"]; + _spawner setVariable ["OPFORSpawn",true,true]; + _spawner disableAI "ALL"; + _spawner allowdamage false; + _spawner setcaptive true; + _spawner enableSimulation false; + hideObjectGlobal _spawner; +sleep 15; if !(_forceAirport == "") then { _involveCSAT = false; @@ -45,25 +55,23 @@ if !(_forceAirport == "") then { _airport = _forceAirport; }; + if (_involveCSAT) then { _resourcesAAF = server getVariable ["resourcesAAF",0]; if (_resourcesAAF > 20000) then { server setVariable ["resourcesAAF",_resourcesAAF - 20000,true]; [5,0] remoteExec ["prestige",2]; } else { - [5,-20] remoteExec ["prestige",2] + [5,0] remoteExec ["prestige",2] }; _originPosition = getMarkerPos "spawnCSAT"; _originPosition set [2,300]; _maxCounter = 3; - if ((_base == "") OR (_airport == "")) then {_maxCounter = 6}; - for "_i" from 1 to _maxCounter do { - if (_i == _maxCounter) then { - _vehicleType = selectRandom opHeliTrans; - } else { - _vehicleType = selectRandom opAir; - }; + if ((_base == "") OR (_airport == "")) then {_maxCounter = 3}; //Stef 21/01/2018 it was 6 before, no need to send that many CSAT, just increase too much AI spanwed + //Creating CSAT airtransports + for "_i" from 1 to _maxCounter do { + if (_i == _maxCounter) then { _vehicleType = selectRandom opHeliTrans;} else {_vehicleType = selectRandom opAir;}; _timeOut = 0; _spawnPosition = _originPosition findEmptyPosition [0,100,_vehicleType]; while {_timeOut < 60} do { @@ -80,41 +88,38 @@ if (_involveCSAT) then { _vehicleGroup = _vehicleData select 2; _redVehicles pushBack _vehicle; _redGroups pushBack _vehicleGroup; - - if !(_vehicleType in opHeliTrans) then{ - _wp_01 = _vehicleGroup addWaypoint [_markerPos, 0]; - _wp_01 setWaypointType "SAD"; - [_vehicle,"CSAT Air Attack"] spawn inmuneConvoy; - } else { - {_x setBehaviour "CARELESS";} forEach units _vehicleGroup; - _groupType = [opGroup_Squad, side_red] call AS_fnc_pickGroup; - _group = [_originPosition, side_red, _groupType] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _vehicle; _x moveInCargo _vehicle} forEach units _group; - _redGroups pushBack _group; - [_vehicle,"CSAT Air Transport"] spawn inmuneConvoy; - if ((_marker in bases) OR (_marker in aeropuertos) OR (random 10 < _threatEvaluationAir)) then { - [_vehicle,_group,_marker,_threatEvaluationAir] spawn airdrop; - } - else { - if ((random 100 < 50) OR (_vehicleType == opHeliDismount)) then { - {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _vehicleGroup; - _dismountPosition = []; - _dismountPosition = [_markerPos, 300, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _dismountPosition set [2, 0]; - _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; - _allVehicles pushBack _helipad; - - [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; + //Depending on vehicle type + if !(_vehicleType in opHeliTrans) then{ + _wp_01 = _vehicleGroup addWaypoint [_markerPos, 0]; + _wp_01 setWaypointType "SAD"; + [_vehicle,"CSAT Air Attack"] spawn inmuneConvoy; + } else { + {_x setBehaviour "CARELESS";} forEach units _vehicleGroup; + _groupType = [opGroup_Squad, side_red] call AS_fnc_pickGroup; + _group = [_originPosition, side_red, _groupType] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _vehicle; _x moveInCargo _vehicle} forEach units _group; + _redGroups pushBack _group; + [_vehicle,"CSAT Air Transport"] spawn inmuneConvoy; + if ((_marker in bases) OR (_marker in aeropuertos) OR (random 10 < _threatEvaluationAir)) then { + {removebackpack _x; _x addBackpack "B_Parachute"} forEach units _group; + [_vehicle,_group,_marker,_threatEvaluationAir] spawn airdrop; } else { - [_vehicleGroup, _originPosition, _markerPos, _marker, _group, 60*60] spawn AS_fnc_QRF_fastrope; + if ((random 100 < 50) OR (_vehicleType == opHeliDismount)) then { + {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _vehicleGroup; + _dismountPosition = []; + _dismountPosition = [_markerPos, 300, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _dismountPosition set [2, 0]; + _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; + _allVehicles pushBack _helipad; + [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; + } else {[_vehicleGroup, _originPosition, _markerPos, _marker, _group, 60*60] spawn AS_fnc_QRF_fastrope;}; }; }; - }; - sleep 15; + sleep 15; }; - _task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],format ["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; - [["TaskSucceeded", ["", format [localize "STR_TSK_CA_TARGET",_targetName]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + _task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"CREATED",10,true,true,"Defend"] call BIS_fnc_setTask; + [_targetNam,{["TaskSucceeded", ["", format [localize "STR_TSK_TD_CA_TARGET",_this]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; [_marker] spawn { params ["_targetMarker"]; @@ -127,7 +132,7 @@ if (_involveCSAT) then { }; }; sleep 2; - {if ((surfaceIsWater position _x) and (vehicle _x == _x)) then {_x setDamage 1}} forEach _allSoldiers; + {if ((surfaceIsWater position _x) and (vehicle _x == _x)) then {_x setDamage 1}} forEach _allSoldiers; //Soldiers in water won't be effective anyway. { _group = _x; @@ -140,15 +145,14 @@ if (_involveCSAT) then { [_x] spawn CSATVEHinit; } forEach _redVehicles; }; - +// AAF sending attack from base if !(_base == "") then { - [_base,60] spawn AS_fnc_addTimeForIdle; + [_base,10] spawn AS_fnc_addTimeForIdle; //Stef 21/01/2018 no need to have the base in idle for 1 hour, it will just decrease the enemy activity that would be restored after a restart anyway. _originPosition = getMarkerPos _base; _size = [_base] call sizeMarker; _maxCounter = 1 max (round (_size/30)); for "_i" from 1 to _maxCounter do { - //if (count (enemyMotorpool - vehPatrol) > 1) then { //Sparker: if it's only one then it fails. if (count (enemyMotorpool - vehPatrol) > 0) then { _vehicleType = enemyMotorpoolDef; _vehicleArray =+ (enemyMotorpool - vehPatrol); @@ -177,6 +181,7 @@ if !(_base == "") then { _vehicleType = _vehicleArray call BIS_fnc_selectRandom; }; + //Depending on vehicle type if !(_vehicleType in vehTank) then { call { if (_vehicleType in vehIFV) then { @@ -202,8 +207,6 @@ if !(_base == "") then { _initData = [_posRoad, _dir, _vehicleType, side_green] call bis_fnc_spawnvehicle; _allVehicles = _allVehicles + (_initData select [0,1]); //Stef the problem is it add a "string" instead of a ["string"] so i added brackets _allGroups = _allGroups + (_initData select [2,1]); // Stef: it was 1 and was selecting all units instead of the group according to bis_fnc_spawnvehicle biki so changed and added brackets - - _wp_01 = (_initData select 2) addWaypoint [_markerPos, 0]; //Stef waypoint was selecting the wrong reference. _wp_01 setWaypointBehaviour "SAFE"; [(_initData select 0),"Tank"] spawn inmuneConvoy; @@ -214,8 +217,9 @@ if !(_base == "") then { }; }; +//AAF sending unit from airport if !(_airport == "") then { - [_airport,60] spawn AS_fnc_addTimeForIdle; + [_airport,10] spawn AS_fnc_addTimeForIdle; if (_base != "") then {sleep ((_originPosition distance _markerPos)/16)}; _originPosition = getMarkerPos _airport; _originPosition set [2,300]; @@ -236,18 +240,9 @@ if !(_airport == "") then { } else { _vehicleArray =+ indAirForce arrayIntersect (heli_armed + heli_unarmed); call { - if ((_threatEvaluationAir > 7) AND (count (_vehicleArray arrayIntersect heli_armed) > 0)) then { - _vehicleArray = heli_armed; - }; - if ((_threatEvaluationAir > 14) AND (count (_vehicleArray arrayIntersect planes) > 0)) then { - _vehicleArray = planes; - }; - - if !(count _vehicleArray > 0) then { - _vehicleArray = heli_unarmed; - }; + if ((count (_vehicleArray arrayIntersect heli_armed) > 0)) then {_vehicleArray = heli_armed;}; + if !(count _vehicleArray > 0) then {_vehicleArray = heli_unarmed;}; }; - _vehicleType = _vehicleArray call BIS_fnc_selectRandom; }; @@ -269,7 +264,7 @@ if !(_airport == "") then { _allVehicles pushBack _vehicle; if !(_vehicleType in heli_unarmed) then { - [_vehicleGroup, _originPosition, _markerPos, 400, 60] spawn AS_fnc_QRF_loiter; + [_vehicleGroup, _originPosition, _markerPos, 400, 2400] spawn AS_fnc_QRF_loiter; [_vehicle,"Air Attack"] spawn inmuneConvoy; } else { _seats = ([_vehicleType,true] call BIS_fnc_crewCount) - ([_vehicleType,false] call BIS_fnc_crewCount); @@ -288,7 +283,7 @@ if !(_airport == "") then { _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; _allVehicles = _allVehicles + [_helipad]; - [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; + [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 2400, "air"] spawn AS_fnc_QRF_dismountTroops; [_vehicle,"Air Transport"] spawn inmuneConvoy; } else { _groupType = [infSquad, side_green] call AS_fnc_pickGroup; @@ -299,7 +294,7 @@ if !(_airport == "") then { {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _groupTwo; _allGroups pushBack _groupTwo; _dismountPosition = [_markerPos, 150, 300, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - [_vehicleGroup, _spawnPosition, _dismountPosition, _marker, [_group, _groupTwo], 60*60] spawn AS_fnc_QRF_fastrope; + [_vehicleGroup, _spawnPosition, _dismountPosition, _marker, [_group, _groupTwo], 2400] spawn AS_fnc_QRF_fastrope; }; }; @@ -327,15 +322,29 @@ diag_log format ["groups: %1; vehicles: %2; soldiers: %3", _allGroups, _allVehic //forcedSpawn pushBack _marker; //Sparker: force spawn a base under attack //publicVariable "forcedSpawn"; +//Retreat conditions waitUntil { sleep 5; ( - ({!(captive _x)} count _allSoldiers) < ({captive _x} count _allSoldiers)) OR - ({alive _x} count _allSoldiers < (round ((count _allSoldiers)/3))) OR + //Operative soldiers < 1/3 of All soldiers + ( {((alive _x) and (lifeState _x != "INCAPACITATED"))} count _allSoldiers < (round ((count _allSoldiers)/3)) ) OR + + //time is over (time > _attackDuration) OR + + //objective has been captured (_marker in mrkAAF) OR - (2*count (allUnits select {(side _x == side_blue) AND (_x distance _markerPos <= 100)}) < count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= 100)}) + + //(Operative FIA within 100m) < (Operative AAF within 100m) + (2*count (allUnits select {(side _x == side_blue) AND (_x distance _markerPos <= 100) and (lifeState _x != "INCAPACITATED")}) + ) < count ( + allUnits select { + ((side _x == side_green) OR (side _x == side_red)) AND + (_x distance _markerPos <= 100) and + (lifeState _x != "INCAPACITATED") + } + ) ) }; @@ -345,18 +354,18 @@ if !(_marker in mrkAAF) then { {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_markerPos,"BLUFORSpawn"] call distanceUnits); [5,Slowhand] call playerScoreAdd; if !(_involveCSAT) then { - _task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE",A3_Str_INDEP,_originName],format ["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; + _task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE",A3_Str_INDEP,_originName],["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; } else { - _task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],format ["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; + _task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"SUCCEEDED",10,true,true,"Defend"] call BIS_fnc_setTask; }; {_x doMove _originPosition} forEach _allSoldiers; {_wpRTB = _x addWaypoint [_originPosition, 0]; _x setCurrentWaypoint _wpRTB} forEach _allGroups; } else { [-10,Slowhand] call playerScoreAdd; if (!_involveCSAT) then { - _task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE",A3_Str_INDEP,_originName],format ["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; + _task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE",A3_Str_INDEP,_originName],["%1 Attack",A3_Str_INDEP],_originMarker],getMarkerPos _originMarker,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; } else { - _task = ["AtaqueAAF",[side_blue,civilian],[format [localize "STR_TSK_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],format ["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; + _task = ["AtaqueAAF",[side_blue,civilian],[["STR_TSK_TD_CA_CREATE_RED",A3_Str_INDEP,A3_Str_RED,_targetName,_originName],["%1/%2 Attack",A3_Str_INDEP,A3_Str_RED],_marker],getMarkerPos _marker,"FAILED",10,true,true,"Defend"] call BIS_fnc_setTask; }; }; @@ -371,5 +380,6 @@ waitUntil {sleep 1; !(spawner getVariable _marker)}; [_allGroups + _redGroups, _allSoldiers + _redSoldiers, _allVehicles + _redVehicles] spawn AS_fnc_despawnUnits; -forcedSpawn = forcedSpawn - [_marker]; //Sparker: remove force spawn a base under attack -publicVariable "forcedSpawn"; +deleteVehicle _spawner; +deleteGroup _spawnergroup; + diff --git a/AntistasiOfficial.Altis/CREATE/createAAsite.sqf b/AntistasiOfficial.Altis/CREATE/createAAsite.sqf index 5c527781..a91dd1d4 100644 --- a/AntistasiOfficial.Altis/CREATE/createAAsite.sqf +++ b/AntistasiOfficial.Altis/CREATE/createAAsite.sqf @@ -97,7 +97,7 @@ if (_hasSPAA) then { if ((({alive _x} count _allSoldiers < (_garrisonSize / 3)) OR ({fleeing _x} count _allSoldiers == {alive _x} count _allSoldiers)) AND !(alive _SPAA) AND ({alive _x} count units _groupGunners == 0)) then { [-5,0,_posMarker] remoteExec ["AS_fnc_changeCitySupport",2]; [0,5] remoteExec ["prestige",2]; - [["TaskSucceeded", ["", format [localize "STR_TSK_AAWP_DESTROYED", A3_Str_RED]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", format [localize "STR_TSK_TD_AAWP_DESTROYED", A3_Str_RED]]] call BIS_fnc_showNotification} remoteExec ["call", 0]; _mrk = format ["Dum%1",_marker]; deleteMarker _mrk; mrkAAF = mrkAAF - [_marker]; @@ -113,7 +113,7 @@ if (_hasSPAA) then { if (({alive _x} count _allSoldiers < (_garrisonSize / 3)) OR ({fleeing _x} count _allSoldiers == {alive _x} count _allSoldiers)) then { [-5,0,_posMarker] remoteExec ["AS_fnc_changeCitySupport",2]; [0,5] remoteExec ["prestige",2]; - [["TaskSucceeded", ["", format [localize "STR_TSK_AAWP_DESTROYED", A3_Str_RED]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", format [localize "STR_TSK_TD_AAWP_DESTROYED", A3_Str_RED]]] call BIS_fnc_showNotification} remoteExec ["call", 0]; _mrk = format ["Dum%1",_marker]; deleteMarker _mrk; mrkAAF = mrkAAF - [_marker]; diff --git a/AntistasiOfficial.Altis/CREATE/createAirbase.sqf b/AntistasiOfficial.Altis/CREATE/createAirbase.sqf index fdea0d94..96b4602e 100644 --- a/AntistasiOfficial.Altis/CREATE/createAirbase.sqf +++ b/AntistasiOfficial.Altis/CREATE/createAirbase.sqf @@ -13,80 +13,151 @@ _isFrontline = [_marker] call AS_fnc_isFrontline; _reduced = [false, true] select (_marker in reducedGarrisons); _patrolMarker = [_marker] call AS_fnc_createPatrolMarker; _busy = if (dateToNumber date > server getVariable _marker) then {false} else {true}; - _groupGunners = createGroup side_green; _buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; -for "_i" from 0 to (count _buildings) - 1 do { - _building = _buildings select _i; - _buildingType = typeOf _building; - - call { - if (_buildingType == "Land_HelipadCivil_F") exitWith { - _vehicle = createVehicle [selectRandom vehDef, position _building, [],0, "CAN_COLLIDE"]; - _vehicle setDir (getDir _building); - _unit = ([_markerPos, 0, infCrew, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; - }; -}; -if ((spawner getVariable _marker) AND (_isFrontline)) then { - _roads = _markerPos nearRoads _size; - if (count _roads != 0) then { - _data = [_markerPos, _roads, statAT] call AS_fnc_spawnBunker; - _allVehicles pushBack (_data select 0); - _vehicle = (_data select 1); - _allVehicles pushBack _vehicle; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - }; -}; -_currentCount = 0; -while {(spawner getVariable _marker) AND (_currentCount < 4)} do { - while {true} do { - _spawnPos = [_markerPos, 150 + (random 350) ,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - _groupType = [infPatrol, side_green] call AS_fnc_pickGroup; - _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; - sleep 1; - if (random 10 < 2.5) then { - _dog = _group createUnit ["Fin_random_F",_spawnPos,[],0,"FORM"]; - [_dog] spawn guardDog; +//Adding statics to garrison buildings + if(!_reduced) then { + for "_i" from 0 to (count _buildings) - 1 do { + _building = _buildings select _i; + _buildingType = typeOf _building; + + call { + //Stef defensive vehicle with gunner on. + if ((_buildingType == "Land_HelipadCivil_F") and !(_reduced)) exitWith { + _vehicle = createVehicle [selectRandom vehDef, position _building, [],0, "CAN_COLLIDE"]; + _vehicle setDir (getDir _building); + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infCrew, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allsoldiers pushBack _unit; + sleep 0.1; + }; + + if ((_buildingType == "Land_Cargo_HQ_V1_F") OR (_buildingType == "Land_Cargo_HQ_V2_F") OR (_buildingType == "Land_Cargo_HQ_V3_F")) exitWith { + _vehicle = createVehicle [statAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; + _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; + _vehicle setDir (getDir _building); + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allsoldiers pushBack _unit; + sleep 0.1; + }; + + if ((_buildingType == "Land_Cargo_Patrol_V1_F") OR (_buildingType == "Land_Cargo_Patrol_V2_F") OR (_buildingType == "Land_Cargo_Patrol_V3_F")) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; + _position = [getPosATL _vehicle, 2.5, (getDir _building) - 180] call BIS_Fnc_relPos; + _vehicle setPosATL _position; + _vehicle setDir (getDir _building) - 180; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allsoldiers pushBack _unit; + sleep 0.1; + }; + + //Create planes in specified locations + if ((_buildingType == "Land_JumpTarget_F") AND (!_isFrontline)) exitWith { + _vehicle = createVehicle [selectRandom planes, position _building, [],0, "CAN_COLLIDE"]; + _vehicle setDir (getDir _building); + _allVehicles pushBack _vehicle; + sleep 0.1; + }; + //Create heli in specified location + if ((_buildingType == "Land_HelipadRescue_F") AND (!_isFrontline)) exitWith { + _vehicle = createVehicle [selectRandom heli_armed, position _building, [],0, "CAN_COLLIDE"]; + _vehicle setDir (getDir _building); + _allVehicles pushBack _vehicle; + /*WiP: Engineers can consume their toolkit to unlock the vehicle. + _vehicle lock 3; + _vehicle addAction [localize "STR_ACT_TAKEFLAG", {if((_this select 1)(_this select 0) lock 0;},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull]) and (_this getUnitTrait 'engineer')"]; */ + sleep 0.1; + }; + + if (_buildingType in listbld) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allSoldiers pushback _unit; + sleep 0.1; + _allVehicles pushback _vehicle; + _vehicle = createVehicle [statMGtower, (_building buildingPos 17), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allsoldiers pushBack _unit; + sleep 0.1; + }; + }; + }; }; - [_group, _patrolMarker, "SAFE","SPAWNED", "NOVEH2"] execVM "scripts\UPSMON.sqf"; - _allGroups pushBack _group; - _currentCount = _currentCount +1; -}; -if !(_busy) then { - _buildings = nearestObjects [_markerPos, ["Land_LandMark_F"], _size / 2]; - if (count _buildings > 1) then { - _positionOne = getPos (_buildings select 0); - _positionTwo = getPos (_buildings select 1); - _direction = [_positionOne, _positionTwo] call BIS_fnc_DirTo; - _position = [_positionOne, 5,_direction] call BIS_fnc_relPos; - _group = createGroup side_green; - - _currentCount = 0; - while {(spawner getVariable _marker) AND (_currentCount < 5)} do { - _vehicleType = indAirForce call BIS_fnc_selectRandom; - _vehicle = createVehicle [_vehicleType, _position, [],3, "NONE"]; - _vehicle setDir (_direction + 90); - sleep 1; +//Create bunker if it is frontline + if ((spawner getVariable _marker) AND (_isFrontline)) then { + _roads = _markerPos nearRoads _size; + if (count _roads != 0) then { + _data = [_markerPos, _roads, statAT] call AS_fnc_spawnBunker; + _allVehicles pushBack (_data select 0); + _vehicle = (_data select 1); _allVehicles pushBack _vehicle; - _position = [_position, 20,_direction] call BIS_fnc_relPos; - _unit = ([_markerPos, 0, infPilot, _group] call bis_fnc_spawnvehicle) select 0; - _currentCount = _currentCount + 1; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; }; + }; - [_group, _marker, "SAFE","SPAWNED","NOFOLLOW","NOVEH"] execVM "scripts\UPSMON.sqf"; +//Create Mortars + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < 4)} do { + while {true} do { + _spawnPos = [_markerPos, 150 + (random 350) ,random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + _groupType = [infPatrol, side_green] call AS_fnc_pickGroup; + _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; + sleep 1; + if (random 10 < 2.5) then { + _dog = _group createUnit ["Fin_random_F",_spawnPos,[],0,"FORM"]; + [_dog] spawn guardDog; + }; + [_group, _patrolMarker, "SAFE","SPAWNED", "NOVEH2"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; + _currentCount = _currentCount +1; }; - _allGroups pushBack _group; -}; + +//Create transports + /*if !(_busy) then { + _buildings = nearestObjects [_markerPos, ["Land_LandMark_F"], _size / 2]; + if (count _buildings > 1) then { + _positionOne = getPos (_buildings select 0); + _positionTwo = getPos (_buildings select 1); + _direction = [_positionOne, _positionTwo] call BIS_fnc_DirTo; + _position = [_positionOne, 5,_direction] call BIS_fnc_relPos; + _group = createGroup side_green; + + + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < 5)} do { + _vehicleType = indAirForce call BIS_fnc_selectRandom; + _vehicle = createVehicle [_vehicleType, _position, [],3, "NONE"]; + _vehicle setDir (_direction + 90); + sleep 1; + _allVehicles pushBack _vehicle; + _position = [_position, 20,_direction] call BIS_fnc_relPos; + _unit = ([_markerPos, 0, infPilot, _group] call bis_fnc_spawnvehicle) select 0; + _currentCount = _currentCount + 1; + }; + + [_group, _marker, "SAFE","SPAWNED","NOFOLLOW","NOVEH"] execVM "scripts\UPSMON.sqf"; + }; + _allGroups pushBack _group; + };*/ _flag = createVehicle [cFlag, _markerPos, [],0, "CAN_COLLIDE"]; _flag allowDamage false; @@ -96,93 +167,123 @@ _allVehicles pushBack _flag; _crate = "I_supplyCrate_F" createVehicle _markerPos; _allVehicles pushBack _crate; -_arrayVeh = vehPatrol + vehSupply + enemyMotorpool - [heli_default]; -_vehicleCount = round (_size/60); -_currentCount = 0; -while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { - if (diag_fps > minimoFPS) then { - _vehicleType = _arrayVeh call BIS_fnc_selectRandom; - _position = [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _vehicle = createVehicle [_vehicleType, _position, [], 0, "NONE"]; - _vehicle setDir random 360; - _allVehicles pushBack _vehicle; +//Create vehicles based on marker _size + _arrayVeh = vehPatrol + vehSupply + enemyMotorpool - [heli_default]; + _vehicleCount = round (_size/45); + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { + if (diag_fps > minimoFPS) then { + _vehicleType = _arrayVeh call BIS_fnc_selectRandom; + _position = [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _vehicle = createVehicle [_vehicleType, _position, [], 0, "NONE"]; + _vehicle setDir random 360; + _allVehicles pushBack _vehicle; + }; + sleep 0.5; + _currentCount = _currentCount + 1; }; + + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _group = [_markerPos, side_green, _groupType] call BIS_Fnc_spawnGroup; + //if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; no need to expand groups in airfield sleep 1; - _currentCount = _currentCount + 1; -}; + [_group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; -_groupType = [infSquad, side_green] call AS_fnc_pickGroup; -_group = [_markerPos, side_green, _groupType] call BIS_Fnc_spawnGroup; -if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; -sleep 1; -[_group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -_allGroups pushBack _group; - -_currentCount = 0; -if (_isFrontline) then {_vehicleCount = _vehicleCount * 2}; -_vehicleCount = round(0.3*_vehicleCount); //Lower the amount of infantry squads -while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { - if (diag_fps > minimoFPS) then { - while {true} do { - _spawnPos = [_markerPos, 15 + (random _size),random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; +//Create soldiers based _vehiclecount + _currentCount = 0; + //if (_isFrontline) then {_vehicleCount = _vehicleCount * 2}; frontline in airport is draining too many possible slots, better add vehicles + //_vehicleCount = round(0.3*_vehicleCount); //Lower the amount of infantry squads + while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { + if (diag_fps > minimoFPS) then { + while {true} do { + _spawnPos = [_markerPos, 15 + (random _size),random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; + //if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; no need to expand groups in airfield + sleep 1; + [_group, _marker, "SAFE","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; }; - _groupType = [infSquad, side_green] call AS_fnc_pickGroup; - _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; - if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; sleep 1; - [_group, _marker, "SAFE","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - _allGroups pushBack _group; + _currentCount = _currentCount + 1; }; - sleep 1; - _currentCount = _currentCount + 1; -}; - -{[_x] spawn genVEHinit} forEach _allVehicles; +//Initialize vehicles + {[_x] spawn genVEHinit} forEach _allVehicles; -sleep 3; + sleep 3; -{ - _group = _x; - if (_reduced) then {[_group] call AS_fnc_adjustGroupSize}; +//Deleting part of soldiers if the place was recently recaptured. { - if (alive _x) then { - [_x] spawn genInitBASES; - _allSoldiers pushBackUnique _x; - }; - } forEach units _group; -} forEach _allGroups; - -[_marker, _allSoldiers] spawn AS_fnc_garrisonMonitor; + _group = _x; + if (_reduced) then {[_group] call AS_fnc_adjustGroupSize}; + { + if (alive _x) then { + [_x] spawn genInitBASES; + _allSoldiers pushBackUnique _x; + }; + } forEach units _group; + } forEach _allGroups; -_group = createGroup civilian; -_allGroups pushBack _group; -_dog = _group createUnit ["Fin_random_F",_markerPos,[],0,"FORM"]; -[_dog] spawn guardDog; -_allSoldiers pushBack _dog; + [_marker, _allSoldiers] spawn AS_fnc_garrisonMonitor; -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; +//Adding dog _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; - }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; + _dog = _group createUnit ["Fin_random_F",_markerPos,[],0,"FORM"]; + [_dog] spawn guardDog; + _allSoldiers pushBack _dog; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) > 3*count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 300)) AND !(captive _x)}))}; +//Adding Press Reporter + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; + _group = createGroup civilian; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; + }; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; + }; + +diag_log format ["ANTISTASI_COUNTER: %1 spawned %2 and %3 vehicles",_marker,count _allsoldiers, count _allvehicles]; + +//Despawning conditions + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + + (({!(vehicle _x isKindOf "Air")} + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + > 3* + count (allUnits select {( + (side _x == side_green) OR + (side _x == side_red)) AND + (_x distance _markerPos <= (_size max 300)) AND + !(captive _x) OR + (lifeState _x == "INCAPACITATED")}) + ) + }; if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then { [_flag] remoteExec ["mrkWIN",2]; }; -waitUntil {sleep 1; !(spawner getVariable _marker)}; +//Despawning + waitUntil {sleep 1; !(spawner getVariable _marker)}; -deleteMarker _patrolMarker; -[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; -if !(isNull _observer) then {deleteVehicle _observer}; + deleteMarker _patrolMarker; + [_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; + if !(isNull _observer) then {deleteVehicle _observer}; + +//Save destroyed buildings +{ + if ((!alive _x) AND !(_x in destroyedBuildings)) then { + destroyedBuildings = destroyedBuildings + [position _x]; + publicVariableServer "destroyedBuildings"; + }; +} forEach _buildings; diff --git a/AntistasiOfficial.Altis/CREATE/createBase.sqf b/AntistasiOfficial.Altis/CREATE/createBase.sqf index 7550d626..33997d1f 100644 --- a/AntistasiOfficial.Altis/CREATE/createBase.sqf +++ b/AntistasiOfficial.Altis/CREATE/createBase.sqf @@ -14,66 +14,79 @@ _reduced = [false, true] select (_marker in reducedGarrisons); _patrolMarker = [_marker] call AS_fnc_createPatrolMarker; _busy = if (dateToNumber date > server getVariable _marker) then {false} else {true}; -_buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; + _groupGunners = createGroup side_green; +_buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; -for "_i" from 0 to (count _buildings) - 1 do { - _building = _buildings select _i; - _buildingType = typeOf _building; +//Adding statics to garrison buildings + if(!_reduced) then { + for "_i" from 0 to (count _buildings) - 1 do { + _building = _buildings select _i; + _buildingType = typeOf _building; - call { - if ((_buildingType == "Land_Cargo_HQ_V1_F") OR (_buildingType == "Land_Cargo_HQ_V2_F") OR (_buildingType == "Land_Cargo_HQ_V3_F")) exitWith { - _vehicle = createVehicle [statAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; - _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; - _vehicle setDir (getDir _building); - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + call { + //Stef defensive vehicle with gunner on. + if ((_buildingType == "Land_HelipadCivil_F") and !(_reduced)) exitWith { + _vehicle = createVehicle [selectRandom vehDef, position _building, [],0, "CAN_COLLIDE"]; + _vehicle setDir (getDir _building); + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infCrew, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allSoldiers pushback _unit; + sleep 0.1; + }; - if ((_buildingType == "Land_Cargo_Patrol_V1_F") OR (_buildingType == "Land_Cargo_Patrol_V2_F") OR (_buildingType == "Land_Cargo_Patrol_V3_F")) exitWith { - _vehicle = createVehicle [statMGtower, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; - _position = [getPosATL _vehicle, 2.5, (getDir _building) - 180] call BIS_Fnc_relPos; - _vehicle setPosATL _position; - _vehicle setDir (getDir _building) - 180; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; -//Stef defensive vehicle with gunner on. - if (_buildingType == "Land_HelipadCivil_F") exitWith { - _vehicle = createVehicle [selectRandom vehDef, position _building, [],0, "CAN_COLLIDE"]; - _vehicle setDir (getDir _building); - _unit = ([_markerPos, 0, infCrew, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + if ((_buildingType == "Land_Cargo_HQ_V1_F") OR (_buildingType == "Land_Cargo_HQ_V2_F") OR (_buildingType == "Land_Cargo_HQ_V3_F")) exitWith { + _vehicle = createVehicle [statAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; + _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; + _vehicle setDir (getDir _building); + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allSoldiers pushback _unit; + sleep 0.3; + }; - if ((_buildingType == "Land_HelipadSquare_F") AND (!_isFrontline)) exitWith { - _vehicle = createVehicle [selectRandom heli_unarmed, position _building, [],0, "CAN_COLLIDE"]; - _vehicle setDir (getDir _building); - _allVehicles pushBack _vehicle; - sleep 1; - }; + if ((_buildingType == "Land_Cargo_Patrol_V1_F") OR (_buildingType == "Land_Cargo_Patrol_V2_F") OR (_buildingType == "Land_Cargo_Patrol_V3_F")) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; + _position = [getPosATL _vehicle, 2.5, (getDir _building) - 180] call BIS_Fnc_relPos; + _vehicle setPosATL _position; + _vehicle setDir (getDir _building) - 180; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allSoldiers pushback _unit; + sleep 0.3; + }; - if (_buildingType in listbld) exitWith { - _vehicle = createVehicle [statMGtower, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allSoldiers = _allSoldiers + [_unit]; - sleep 1; - _allVehicles = _allVehicles + [_vehicle]; - _vehicle = createVehicle [statMGtower, (_building buildingPos 17), [], 0, "CAN_COLLIDE"]; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + if ((_buildingType == "Land_HelipadSquare_F") AND (!_isFrontline)) exitWith { + _vehicle = createVehicle [selectRandom heli_unarmed, position _building, [],0, "CAN_COLLIDE"]; + _vehicle setDir (getDir _building); + _allVehicles pushBack _vehicle; + sleep 0.1; + }; + + if (_buildingType in listbld) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allSoldiers = _allSoldiers + [_unit]; + sleep 1; + _allVehicles = _allVehicles + [_vehicle]; + _vehicle = createVehicle [statMGtower, (_building buildingPos 17), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + _allSoldiers pushback _unit; + sleep 0.2; + }; + }; + }; }; -}; _flag = createVehicle [cFlag, _markerPos, [],0, "CAN_COLLIDE"]; _flag allowDamage false; @@ -83,103 +96,110 @@ _allVehicles pushBack _flag; _crate = "I_supplyCrate_F" createVehicle _markerPos; _allVehicles pushBack _crate; -_vehicleCount = 4 min (round (_size / 30)); -if ( _vehicleCount > 0 ) then { - _spawnPos = [_markerPos, random (_size / 2),random 360] call BIS_fnc_relPos; - _currentCount = 0; - while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { - _spawnPos = [_markerPos] call mortarPos; - _vehicle = statMortar createVehicle _spawnPos; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - _currentCount = _currentCount + 1; +//Create Mortars + _vehicleCount = 1 max (round (_size/60)); + if ( _vehicleCount > 0 ) then { + _spawnPos = [_markerPos, random (_size / 2),random 360] call BIS_fnc_relPos; + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { + _spawnPos = [_markerPos] call mortarPos; + _vehicle = statMortar createVehicle _spawnPos; + [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + _currentCount = _currentCount + 1; + }; }; -}; - -if ((spawner getVariable _marker) AND (_isFrontline)) then { - _roads = _markerPos nearRoads _size; - if (count _roads != 0) then { - _data = [_markerPos, _roads, statAT] call AS_fnc_spawnBunker; - _allVehicles pushBack (_data select 0); - _vehicle = (_data select 1); - _allVehicles pushBack _vehicle; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; +//Create Frontline Bunker + if ((spawner getVariable _marker) AND (_isFrontline)) then { + _roads = _markerPos nearRoads _size; + if (count _roads != 0) then { + _data = [_markerPos, _roads, statAT] call AS_fnc_spawnBunker; + _allVehicles pushBack (_data select 0); + _vehicle = (_data select 1); + _allVehicles pushBack _vehicle; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + }; }; -}; _allGroups pushBack _groupGunners; -if (!_busy) then { - _spawnpool = vehPatrol + enemyMotorpool - [heli_default]; //Stef removed APC from here added fixed position with gunner inside. - _vehicleCount = 1 max (round (_size/30)); - _spawnPos = _markerPos; - _currentCount = 0; - while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { - if (diag_fps > minimoFPS) then { - _vehicleType = selectRandom _spawnpool; - _spawnPos = [_spawnPos findEmptyPosition [10,60,_vehicleType], [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos] select (_size > 40); - _vehicle = createVehicle [_vehicleType, _spawnPos, [], 0, "NONE"]; - _vehicle setDir random 360; - _allVehicles pushBack _vehicle; +//Create Vehicles + if (!_busy) then { + _spawnpool = vehPatrol + enemyMotorpool - [heli_default]; //Stef removed APC from here added fixed position with gunner inside. + _vehicleCount = 1 max (round (_size/45)); + //_vehicleCount = 1 max (round (_size/30)); Stef increased the size = less vehicle + _spawnPos = _markerPos; + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { + if (diag_fps > minimoFPS) then { + _vehicleType = selectRandom _spawnpool; + _spawnPos = [_spawnPos findEmptyPosition [10,60,_vehicleType], [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos] select (_size > 40); + _vehicle = createVehicle [_vehicleType, _spawnPos, [], 0, "NONE"]; + _vehicle setDir random 360; + _allVehicles pushBack _vehicle; + }; + sleep 1; + _currentCount = _currentCount + 1; }; - sleep 1; - _currentCount = _currentCount + 1; }; -}; +//Initialize Vehicles {[_x] spawn genVEHinit} forEach _allVehicles; -_currentCount = 0; -while {(spawner getVariable _marker) AND (_currentCount < 4)} do { - while {true} do { - _spawnPos = [_markerPos, 150 + (random 350) ,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - _groupType = [infPatrol, side_green] call AS_fnc_pickGroup; - _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; - sleep 1; - if (random 10 < 2.5) then { - _dog = _group createUnit ["Fin_random_F",_spawnPos,[],0,"FORM"]; - [_dog] spawn guardDog; - }; - [_group, _patrolMarker, "SAFE","SPAWNED", "NOVEH2"] execVM "scripts\UPSMON.sqf"; - _allGroups pushBack _group; - _currentCount = _currentCount +1; -}; - -_groupType = [infSquad, side_green] call AS_fnc_pickGroup; -_group = [_markerPos, side_green, _groupType] call BIS_Fnc_spawnGroup; -if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; -sleep 1; -[_group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -_allGroups pushBack _group; -{_x setUnitPos "MIDDLE";} forEach units _group; - -_currentCount = 0; -if (_isFrontline) then {_vehicleCount = _vehicleCount * 2}; -while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { - if (diag_fps > minimoFPS) then { +//Create 4 Patrols + _currentCount = 0; + while {(spawner getVariable _marker) AND (_currentCount < 5)} do { while {true} do { - _spawnPos = [_markerPos, 15 + (random _size),random 360] call BIS_fnc_relPos; + _spawnPos = [_markerPos, 150 + (random 350) ,random 360] call BIS_fnc_relPos; if (!surfaceIsWater _spawnPos) exitWith {}; }; - _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _groupType = [infPatrol, side_green] call AS_fnc_pickGroup; _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; - if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; sleep 1; - [_group, _marker, "SAFE","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + if (random 10 < 2.5) then { + _dog = _group createUnit ["Fin_random_F",_spawnPos,[],0,"FORM"]; + [_dog] spawn guardDog; + }; + [_group, _patrolMarker, "SAFE","SPAWNED", "NOVEH2"] execVM "scripts\UPSMON.sqf"; _allGroups pushBack _group; + _currentCount = _currentCount +1; }; + + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _group = [_markerPos, side_green, _groupType] call BIS_Fnc_spawnGroup; + if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; sleep 1; - _currentCount = _currentCount + 1; -}; + [_group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; + {_x setUnitPos "MIDDLE";} forEach units _group; + +//Create soldiers + _currentCount = 0; + if (_isFrontline) then {_vehicleCount = _vehicleCount * 1}; //removed the *2, frontline base should fancy just better defense instead of more units + while {(spawner getVariable _marker) AND (_currentCount < _vehicleCount)} do { + if (diag_fps > minimoFPS) then { + while {true} do { + _spawnPos = [_markerPos, 15 + (random _size),random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _group = [_spawnPos, side_green, _groupType] call BIS_Fnc_spawnGroup; + //if (activeAFRF) then {_group = [_group, _markerPos] call AS_fnc_expandGroup}; No need for bigger groups in base creation + sleep 1.5; + [_group, _marker, "SAFE","SPAWNED", "NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; + }; + sleep 1.5; + _currentCount = _currentCount + 1; + }; sleep 3; + { _group = _x; if (_reduced) then {[_group] call AS_fnc_adjustGroupSize}; @@ -193,35 +213,48 @@ sleep 3; [_marker, _allSoldiers] spawn AS_fnc_garrisonMonitor; -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; - _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; +//Create journalist + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; + _group = createGroup civilian; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; + }; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; - _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; - -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) > 3*count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 300)) AND !(captive _x)}))}; -if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then{ - [_flag] remoteExec ["mrkWIN",2]; -}; -waitUntil {sleep 1; !(spawner getVariable _marker)}; +//Despawn conditions + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) + ) > 3* count ( + allUnits select {( (side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 300)) AND !(captive _x) and (lifeState _x != "INCAPACITATED")} + ) + ) + }; -{ - if ((!alive _x) AND !(_x in destroyedBuildings)) then { - destroyedBuildings = destroyedBuildings + [position _x]; - publicVariableServer "destroyedBuildings"; + if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then{ + [_flag] remoteExec ["mrkWIN",2]; }; -} forEach _buildings; -deleteMarker _patrolMarker; -[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; -if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file + waitUntil {sleep 1; !(spawner getVariable _marker)}; + + //Save destroyed buildings + { + if ((!alive _x) AND !(_x in destroyedBuildings)) then { + destroyedBuildings = destroyedBuildings + [position _x]; + publicVariableServer "destroyedBuildings"; + }; + } forEach _buildings; + + //Despawn + deleteMarker _patrolMarker; + [_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; + if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/createCIV.sqf b/AntistasiOfficial.Altis/CREATE/createCIV.sqf index 79e7f76e..64ac1934 100644 --- a/AntistasiOfficial.Altis/CREATE/createCIV.sqf +++ b/AntistasiOfficial.Altis/CREATE/createCIV.sqf @@ -147,4 +147,5 @@ for "_i" from 1 to _patrolCounter do { }; waitUntil {sleep 1; !(spawner getVariable _marker)}; -[_allGroups, _allCivilians, _allVehicles] spawn AS_fnc_despawnUnits; +[_allGroups, _allCivilians] call AS_fnc_despawnUnitsNow; +[[],[],_allVehicles] call AS_fnc_despawnUnits; diff --git a/AntistasiOfficial.Altis/CREATE/createCampFIA.sqf b/AntistasiOfficial.Altis/CREATE/createCampFIA.sqf index 3da235b3..29f31f66 100644 --- a/AntistasiOfficial.Altis/CREATE/createCampFIA.sqf +++ b/AntistasiOfficial.Altis/CREATE/createCampFIA.sqf @@ -37,7 +37,7 @@ _fire inflame true; waitUntil {sleep 5; !(spawner getVariable _marker) OR ({alive _x} count units _group == 0) OR !(_marker in campsFIA)}; if ({alive _x} count units _group == 0) then { - ["TaskFailed", ["", format [localize "STR_TSK_CAMP_DESTROYED", markerText _marker]]] remoteExec ["BIS_fnc_showNotification"]; + [_marker,{["TaskFailed", ["", format [localize "STR_TSK_TD_CAMP_DESTROYED", markerText _this]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; campsFIA = campsFIA - [_marker]; publicVariable "campsFIA"; campList = campList - [[_marker, markerText _marker]]; publicVariable "campList"; usedCN = usedCN - [markerText _marker]; publicVariable "usedCN"; diff --git a/AntistasiOfficial.Altis/CREATE/createCity.sqf b/AntistasiOfficial.Altis/CREATE/createCity.sqf index 77bbc34b..95b90a74 100644 --- a/AntistasiOfficial.Altis/CREATE/createCity.sqf +++ b/AntistasiOfficial.Altis/CREATE/createCity.sqf @@ -64,4 +64,4 @@ if ((({alive _x} count _allSoldiers == 0) OR ({fleeing _x} count _allSoldiers == waitUntil {sleep 1; !(spawner getVariable _marker)}; -[_allGroups, _allSoldiers, []] spawn AS_fnc_despawnUnits; \ No newline at end of file +if(_marker in mrkAAF) then {[_allGroups, _allSoldiers, []] spawn AS_fnc_despawnUnits;} else {[_allGroups, _allSoldiers, []] call AS_fnc_despawnUnitsNow;}; diff --git a/AntistasiOfficial.Altis/CREATE/createFIAEmplacement.sqf b/AntistasiOfficial.Altis/CREATE/createFIAEmplacement.sqf index 926e4096..3ad2d839 100644 --- a/AntistasiOfficial.Altis/CREATE/createFIAEmplacement.sqf +++ b/AntistasiOfficial.Altis/CREATE/createFIAEmplacement.sqf @@ -69,14 +69,14 @@ if ({alive _x} count units _group == 0) then { deleteMarker _marker; if (_onRoad) then { FIA_RB_list = FIA_RB_list - [_marker]; publicVariable "FIA_RB_list"; - [["TaskFailed", ["", "Roadblock Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskFailed", ["", localize "STR_NTS_RBLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; } else { FIA_WP_list = FIA_WP_list - [_marker]; publicVariable "FIA_WP_list"; - [["TaskFailed", ["", "Watchpost Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskFailed", ["", localize "STR_NTS_WPLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; deleteVehicle (nearestObjects [getMarkerPos _marker, [guer_rem_des], 50] select 0); }; }; waitUntil {sleep 1; !(spawner getVariable _marker) OR !(_marker in puestosFIA)}; -[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; \ No newline at end of file +[_allGroups, _allSoldiers, _allVehicles] call AS_fnc_despawnUnitsNow; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/createFIAOutpost.sqf b/AntistasiOfficial.Altis/CREATE/createFIAOutpost.sqf index 2d5d30d5..e719de36 100644 --- a/AntistasiOfficial.Altis/CREATE/createFIAOutpost.sqf +++ b/AntistasiOfficial.Altis/CREATE/createFIAOutpost.sqf @@ -14,155 +14,192 @@ _isFrontline = [_marker] call AS_fnc_isFrontline; _buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; _statics = staticsToSave select {_x distance _markerPos < (_size max 50)}; -_groupGunners = createGroup side_blue; //side_green; //What the hell was this? Sparker. -_allGroups pushBack _groupGunners; -for "_i" from 0 to (count _buildings) - 1 do { - _building = _buildings select _i; - _type = typeOf _building; - call { - if ((_type == "Land_Cargo_HQ_V1_F") OR (_type == "Land_Cargo_HQ_V2_F") OR (_type == "Land_Cargo_HQ_V3_F")) exitWith { - _vehicle = createVehicle [guer_stat_AA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; - _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; - _vehicle setDir (getDir _building); - _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; +//Add staticgun depending on the kind of building (this mechanic is poor, you have them for free and automatically, it give meaning into not destroying outpost buildings tho.) + _groupGunners = createGroup side_blue; + /*for "_i" from 0 to (count _buildings) - 1 do { + _building = _buildings select _i; + _type = typeOf _building; + call { + if ((_type == "Land_Cargo_HQ_V1_F") OR (_type == "Land_Cargo_HQ_V2_F") OR (_type == "Land_Cargo_HQ_V3_F")) exitWith { + _vehicle = createVehicle [guer_stat_AA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; + _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _vehicle setDir (getDir _building); + _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; - if ((_type == "Land_Cargo_Patrol_V1_F") or (_type == "Land_Cargo_Patrol_V2_F") or (_type == "Land_Cargo_Patrol_V3_F")) exitWith { - _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; - _direction = (getDir _building) - 180; - _spawnPos = [getPosATL _vehicle, 2.5, _direction] call BIS_Fnc_relPos; - _vehicle setPosATL _spawnPos; - _vehicle setDir (getDir _building) - 180; - _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + if ((_type == "Land_Cargo_Patrol_V1_F") or (_type == "Land_Cargo_Patrol_V2_F") or (_type == "Land_Cargo_Patrol_V3_F")) exitWith { + _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; + _direction = (getDir _building) - 180; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _spawnPos = [getPosATL _vehicle, 2.5, _direction] call BIS_Fnc_relPos; + _vehicle setPosATL _spawnPos; + _vehicle setDir (getDir _building) - 180; + _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; - if (_type in listbld) then { - _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 11), [], 0, "CAN_COLLIDE"]; - _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; - _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; - }; -}; - -_flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; -_flag allowDamage false; -_allVehicles pushBack _flag; -[_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; -[_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; -// Apex [_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; - -if (_marker in puertos) then { - [_flag,"seaport"] remoteExec ["AS_fnc_addActionMP"]; -}; - -_antenna = [antenas,_markerPos] call BIS_fnc_nearestPosition; -if (getPos _antenna distance _markerPos < 100) then { - [_flag,"jam"] remoteExec ["AS_fnc_addActionMP"]; -}; - -_garrison = garrison getVariable [_marker,[]]; -_strength = count _garrison; -_counter = 0; -_group = grpNull; -while {(spawner getVariable _marker) AND (_counter < _strength)} do { - if (isNull _group) then { - _group = createGroup side_blue; - _allGroups pushBack _group; - while {true} do { - _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - }; - _unitType = _garrison select _counter; - call { - if (_unitType == guer_sol_UN) exitWith { - _unit = _groupGunners createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _spawnPos = [_markerPos] call mortarPos; - _vehicle = guer_stat_mortar createVehicle _spawnPos; - _allVehicles pushBack _vehicle; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit assignAsGunner _vehicle; - _unit moveInGunner _vehicle; + if (_type in listbld) then { + _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 11), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + _vehicle = createVehicle [guer_stat_MGH, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; + _vehicle setCenterOfMass [(getCenterOfMass _vehicle) vectorAdd [0, 0, -1], 0]; + _unit = _groupGunners createUnit [guer_sol_AR, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; }; + };*/ //Disabled, those are added out from no-where, in future this can become a sort of upgrade - if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { - _static = _statics select 0; - if (typeOf _static == guer_stat_mortar) then { - _unit = _groupGunners createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; - [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - } else { +/*Jam feature disabled untill jam will have a function in AirControl patch + _antenna = [antenas,_markerPos] call BIS_fnc_nearestPosition; + if (getPos _antenna distance _markerPos < 100) then { + [_flag,"jam"] remoteExec ["AS_fnc_addActionMP"]; + }; +*/ +//Create groups for FIA Garrison + _garrison = garrison getVariable [_marker,[]]; + _strength = count _garrison; + _counter = 0; + _group = grpNull; + +//FIA Garrison selection + while {(spawner getVariable _marker) AND (_counter < _strength)} do { + if (isNull _group) then { + _group = createGroup side_blue; + _allGroups pushBack _group; + while {true} do { + _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + }; + _unitType = _garrison select _counter; + call { + //Mortar + if (_unitType == guer_sol_UN) exitWith { _unit = _groupGunners createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; + _spawnPos = [_markerPos] call mortarPos; + _vehicle = guer_stat_mortar createVehicle _spawnPos; + _allVehicles pushBack _vehicle; + [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; }; - _statics = _statics - [_static]; + //Militiaman use the statics placed by player + if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { + _static = _statics select 0; + if (typeOf _static == guer_stat_mortar) then { + _unit = _groupGunners createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit moveInGunner _static; + [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + } else { + _unit = _groupGunners createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit moveInGunner _static; + }; + _statics = _statics - [_static]; + }; + + //Create soldiers assigned as garrison + _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; + if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; }; - _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; - if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; + _counter = _counter + 1; + //Define the size of each group: more groups = different patrol area + if(count units _group == 4) then {_group = grpNull;}; }; - _counter = _counter + 1; - if(count units _group == 4) then {_group = grpNull;}; -}; - -for "_i" from 0 to (count _allGroups) - 1 do { //Stef 02/10 check here for adapting mobility - _group = _allGroups select _i; - if (_i == 0) then { - [_group, _marker, "SAFE","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - } else { - [_group, _marker, "SAFE","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + //Assign to UPSMON. If _grouGunners is included here and the 4th parameter isn't "Original" they get teleported away + for "_i" from 0 to (count _allGroups) - 1 do { + _group = _allGroups select _i; + if (_i == 0) then { //specific teleport position for first group + [_group, _marker, "COMBAT","SPAWNED","RANDOM","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + } else { + [_group, _marker, "COMBAT","SPAWNED","RANDOMUP","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + }; }; -}; + //Groups excluded from UPS, actually the issue is that they wander around instead of staying in static. + _allGroups pushBack _groupGunners; + [_groupGunners, _marker, "COMBAT","SPAWNED","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -{ - [_x] spawn VEHinit; -} forEach _allVehicles; +//Initialise vehicles + {[_x] spawn VEHinit;} forEach _allVehicles; -{ - _group = _x; +//Initialise FIA soldiers { - [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; - _allSoldiers pushBack _x; - } forEach units _group; -} forEach _allGroups; - -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; - _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; + _group = _x; + { + [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; + _allSoldiers pushBack _x; + } forEach units _group; + } forEach _allGroups; + +//Press Reporter + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; + _group = createGroup civilian; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; + }; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; - _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) > 3*(({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)))}; +//Flag + _flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; + _flag allowDamage false; + _allVehicles pushBack _flag; + [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; + [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; + _flag addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; + if (_marker in puertos) then { + [_flag,"seaport"] remoteExec ["AS_fnc_addActionMP"]; + }; + +//Despawn conditions FIA + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ( ({!(vehicle _x isKindOf "Air") OR (lifeState _x != "INCAPACITATED")} count (([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)))-1 + ) > 3*( + ( {(alive _x) AND (lifeState _x != "INCAPACITATED")} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) ) + ) + }; -if (spawner getVariable _marker) then { - [_marker] remoteExec ["mrkLOOSE",2]; -}; + if (spawner getVariable _marker) then { + [_marker] remoteExec ["mrkLOOSE",2]; + }; -waitUntil {sleep 1; !(spawner getVariable _marker)}; + waitUntil {sleep 1; !(spawner getVariable _marker)}; -{if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; + {if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; -[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; -if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file + [_allGroups, _allSoldiers, _allVehicles] call AS_fnc_despawnUnitsNow; + if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/createFIApower.sqf b/AntistasiOfficial.Altis/CREATE/createFIApower.sqf index c3a9dd97..61fdff1c 100644 --- a/AntistasiOfficial.Altis/CREATE/createFIApower.sqf +++ b/AntistasiOfficial.Altis/CREATE/createFIApower.sqf @@ -11,124 +11,160 @@ _workers = []; _markerPos = getMarkerPos (_marker); _size = [_marker] call sizeMarker; +_buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; _statics = staticsToSave select {_x distance _markerPos < (_size max 50)}; -if (_marker != "FIA_HQ") then { - _flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; - _flag allowDamage false; - _allVehicles pushBack _flag; - [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; - [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; - // Apex [_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; -}; - -_gunnerGroup = createGroup side_blue; -_allGroups pushBack _gunnerGroup; -_garrison = garrison getVariable [_marker,[]]; -_strength = count _garrison; -_counter = 0; -private _group = grpNull; -while {(spawner getVariable _marker) AND (_counter < _strength)} do { - if (isNull _group) then { - _group = createGroup side_blue; - _allGroups pushBack _group; - while {true} do { - _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - }; - _unitType = _garrison select _counter; - call { - if (_unitType == guer_sol_UN) exitWith { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _spawnPos = [_markerPos] call mortarPos; - _vehicle = guer_stat_mortar createVehicle _spawnPos; - _allVehicles pushBack _vehicle; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit assignAsGunner _vehicle; - _unit moveInGunner _vehicle; - }; - if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { - _static = _statics select 0; - if (typeOf _static == guer_stat_mortar) then { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; - [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - } else { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; +//Create groups for FIA Garrison + _gunnerGroup = createGroup side_blue; + + _garrison = garrison getVariable [_marker,[]]; + _strength = count _garrison; + _counter = 0; + private _group = grpNull; + +//FIA Garrison selection + while {(spawner getVariable _marker) AND (_counter < _strength)} do { + if (isNull _group) then { + _group = createGroup side_blue; + _allGroups pushBack _group; + while {true} do { + _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + }; + _unitType = _garrison select _counter; + call { + //Mortar + if (_unitType == guer_sol_UN) exitWith { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _spawnPos = [_markerPos] call mortarPos; + _vehicle = guer_stat_mortar createVehicle _spawnPos; + _allVehicles pushBack _vehicle; + [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + }; + //Militiamen use the statics placed by player + if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { + _static = _statics select 0; + if (typeOf _static == guer_stat_mortar) then { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _static; + _unit moveInGunner _static; + [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + } else { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _static; + _unit moveInGunner _static; + }; + _statics = _statics - [_static]; }; - _statics = _statics - [_static]; + //Create soldiers assigned as garrison + _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; + if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; }; - _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; - if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; + _counter = _counter + 1; + //Define the size of each group: more groups = different patrol area + if(count units _group == 4) then {_group = grpNull;}; }; - _counter = _counter + 1; - if(count units _group == 4) then {_group = grpNull;}; -}; - -for "_i" from 0 to (count _allGroups) - 1 do { - _group = _allGroups select _i; - if (_i == 0) then { - [_group, _marker, "SAFE","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - } else { - [_group, _marker, "SAFE","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; +//Assign to UPSMON. If _grouGunners is included here and the 4th parameter isn't "Original" they get teleported away (from staticgun too) + for "_i" from 0 to (count _allGroups) - 1 do { + _group = _allGroups select _i; + if (_i == 0) then { //specific teleport position for first group + [_group, _marker, "COMBAT","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + } else { + [_group, _marker, "COMBAT","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + }; }; -}; + _allGroups pushBack _gunnerGroup; + [_gunnerGroup, _marker, "COMBAT","SPAWNED","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -{ - [_x] spawn VEHinit; -} forEach _allVehicles; +//Initialise vehicles +{[_x] spawn VEHinit;} forEach _allVehicles; -{ - _group = _x; +//Initialise FIA soldiers { - [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; - _allSoldiers pushBack _x; - } forEach units _group; -} forEach _allGroups; - -if (_marker != "FIA_HQ") then { - if !(_marker in destroyedCities) then { - if ((daytime > 8) AND (daytime < 18)) then { - _group = createGroup civilian; - _allGroups pushBack _group; - for "_i" from 1 to 8 do { - _unit = _group createUnit [selectRandom CIV_workers, _markerPos, [],0, "NONE"]; - [_unit] spawn CIVinit; - _workers pushBack _unit; - sleep 0.5; + _group = _x; + { + [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; + _allSoldiers pushBack _x; + } forEach units _group; + } forEach _allGroups; + +//Add Workers + if (_marker != "FIA_HQ") then { + if !(_marker in destroyedCities) then { + if ((daytime > 8) AND (daytime < 18)) then { + _group = createGroup civilian; + _allGroups pushBack _group; + for "_i" from 1 to 8 do { + _unit = _group createUnit [selectRandom CIV_workers, _markerPos, [],15, "NONE"]; + [_unit] spawn CIVinit; + _workers pushBack _unit; + sleep 0.5; + }; + [_marker,_workers] spawn destroyCheck; + //[_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOSHARE","DORELAX","NOVEH2"] execVM "scripts\UPSMON.sqf"; }; - [_marker,_workers] spawn destroyCheck; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOSHARE","DORELAX","NOVEH2"] execVM "scripts\UPSMON.sqf"; }; }; -}; - -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; - _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; + +//Press Reporter + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; + _group = createGroup civilian; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; + }; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; - _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) > 3*(({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)))}; +//Flag + if (_marker != "FIA_HQ") then { + _flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; + _flag allowDamage false; + _allVehicles pushBack _flag; + [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; + [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; + _flag addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; + + }; + +//Despawn conditions FIA + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ( ({!(vehicle _x isKindOf "Air") OR (lifeState _x != "INCAPACITATED")} count (([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)))-1 + ) > 3*( + ( {(alive _x) AND (lifeState _x != "INCAPACITATED")} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) ) + ) + }; + + if (spawner getVariable _marker) then { + if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; + }; -if (spawner getVariable _marker) then { - if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; -}; + waitUntil {sleep 1; !(spawner getVariable _marker)}; -waitUntil {sleep 1; !(spawner getVariable _marker)}; + {if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; -[_allGroups, _allSoldiers + _workers, _allVehicles] spawn AS_fnc_despawnUnits; -if !(isNull _observer) then {deleteVehicle _observer}; + [_allGroups, _allSoldiers + _workers, _allVehicles] call AS_fnc_despawnUnitsNow; + if !(isNull _observer) then {deleteVehicle _observer}; diff --git a/AntistasiOfficial.Altis/CREATE/createFIAresources.sqf b/AntistasiOfficial.Altis/CREATE/createFIAresources.sqf index 7772b746..18e42b14 100644 --- a/AntistasiOfficial.Altis/CREATE/createFIAresources.sqf +++ b/AntistasiOfficial.Altis/CREATE/createFIAresources.sqf @@ -13,118 +13,149 @@ _markerPos = getMarkerPos (_marker); _statics = staticsToSave select {_x distance _markerPos < (_size max 50)}; -_flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; -_flag allowDamage false; -_allVehicles pushBack _flag; -[_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; -[_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; -// Apex [_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; - -_gunnerGroup = createGroup side_blue; -_allGroups pushBack _gunnerGroup; -_garrison = garrison getVariable [_marker,[]]; -_strength = count _garrison; -_counter = 0; -private _group = grpNull; -while {(spawner getVariable _marker) AND (_counter < _strength)} do { - if (isNull _group) then { - _group = createGroup side_blue; - _allGroups pushBack _group; - while {true} do { - _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - }; - _unitType = _garrison select _counter; - call { - if (_unitType == guer_sol_UN) exitWith { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _spawnPos = [_markerPos] call mortarPos; - _vehicle = guer_stat_mortar createVehicle _spawnPos; - _allVehicles pushBack _vehicle; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit assignAsGunner _vehicle; - _unit moveInGunner _vehicle; - }; - - if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { - _static = _statics select 0; - if (typeOf _static == guer_stat_mortar) then { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; - [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - } else { +//Create groups for FIA Garrison + _gunnerGroup = createGroup side_blue; + + _garrison = garrison getVariable [_marker,[]]; + _strength = count _garrison; + _counter = 0; + private _group = grpNull; + +//FIA Garrison selection + while {(spawner getVariable _marker) AND (_counter < _strength)} do { + if (isNull _group) then { + _group = createGroup side_blue; + _allGroups pushBack _group; + while {true} do { + _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; + if (!surfaceIsWater _spawnPos) exitWith {}; + }; + }; + _unitType = _garrison select _counter; + call { + //Mortar + if (_unitType == guer_sol_UN) exitWith { _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; + _spawnPos = [_markerPos] call mortarPos; + _vehicle = guer_stat_mortar createVehicle _spawnPos; + _allVehicles pushBack _vehicle; + [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + }; + + //Militiamen use the statics placed by player + if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { + _static = _statics select 0; + if (typeOf _static == guer_stat_mortar) then { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit moveInGunner _static; + [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + } else { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit moveInGunner _static; + }; + _statics = _statics - [_static]; }; - _statics = _statics - [_static]; + + //Create soldiers assigned as garrison + _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; + if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; }; - _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; - if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; + _counter = _counter + 1; + if(count units _group == 4) then {_group = grpNull;}; }; - _counter = _counter + 1; - if(count units _group == 4) then {_group = grpNull;}; -}; - +//Assign to UPSMON. If _grouGunners is included here and the 4th parameter isn't "Original" they get teleported away (from staticgun too) for "_i" from 0 to (count _allGroups) - 1 do { _group = _allGroups select _i; if (_i == 0) then { - [_group, _marker, "SAFE","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + [_group, _marker, "COMBAT","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; } else { - [_group, _marker, "SAFE","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + [_group, _marker, "COMBAT","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; }; }; +//Groups excluded from UPS + _allGroups pushBack _gunnerGroup; + [_gunnerGroup, _marker, "COMBAT","SPAWNED","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -{ - [_x] spawn VEHinit; -} forEach _allVehicles; +//Initialise vehicles + {[_x] spawn VEHinit;} forEach _allVehicles; -{ - _group = _x; +//Initialise FIA soldiers { - [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; - _allSoldiers pushBack _x; - } forEach units _group; -} forEach _allGroups; + _group = _x; + { + [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; + _allSoldiers pushBack _x; + } forEach units _group; + } forEach _allGroups; + +//Add Workers + if !(_marker in destroyedCities) then { + if ((daytime > 8) AND (daytime < 18)) then { + _group = createGroup civilian; + _allGroups pushBack _group; + for "_i" from 1 to 8 do { + _unit = _group createUnit [selectRandom CIV_workers, _markerPos, [],0, "NONE"]; + [_unit] spawn CIVinit; + _workers pushBack _unit; + sleep 0.5; + }; + [_marker,_workers] spawn destroyCheck; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOSHARE","DORELAX","NOVEH2"] execVM "scripts\UPSMON.sqf"; + }; + }; -if !(_marker in destroyedCities) then { - if ((daytime > 8) AND (daytime < 18)) then { +//Press Reporter + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; _group = createGroup civilian; - _allGroups pushBack _group; - for "_i" from 1 to 8 do { - _unit = _group createUnit [selectRandom CIV_workers, _markerPos, [],0, "NONE"]; - [_unit] spawn CIVinit; - _workers pushBack _unit; - sleep 0.5; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; }; - [_marker,_workers] spawn destroyCheck; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOSHARE","DORELAX","NOVEH2"] execVM "scripts\UPSMON.sqf"; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; -}; -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; - _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; +//Flag + _flag = createVehicle [guer_flag, _markerPos, [],0, "CAN_COLLIDE"]; + _flag allowDamage false; + _allVehicles pushBack _flag; + [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; + [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; + _flag addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; + +//Despawn conditions FIA + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ( ({!(vehicle _x isKindOf "Air") OR (lifeState _x != "INCAPACITATED")} count (([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)))-1 + ) > 3*( + ( {(alive _x) AND (lifeState _x != "INCAPACITATED")} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) ) + ) }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; - _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; - -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({not(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) > 3*(({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)))}; -if (spawner getVariable _marker) then { - [_marker] remoteExec ["mrkLOOSE",2]; -}; + if (spawner getVariable _marker) then { + [_marker] remoteExec ["mrkLOOSE",2]; + }; -waitUntil {sleep 1; !(spawner getVariable _marker)}; + waitUntil {sleep 1; !(spawner getVariable _marker)}; -[_allGroups, _allSoldiers + _workers, _allVehicles] spawn AS_fnc_despawnUnits; -if !(isNull _observer) then {deleteVehicle _observer}; + [_allGroups, _allSoldiers + _workers, _allVehicles] call AS_fnc_despawnUnitsNow; + if !(isNull _observer) then {deleteVehicle _observer}; diff --git a/AntistasiOfficial.Altis/CREATE/createNATOaerop.sqf b/AntistasiOfficial.Altis/CREATE/createNATOaerop.sqf index a4c4586e..5854513a 100644 --- a/AntistasiOfficial.Altis/CREATE/createNATOaerop.sqf +++ b/AntistasiOfficial.Altis/CREATE/createNATOaerop.sqf @@ -14,216 +14,45 @@ _guerVehicles = []; _markerPos = getMarkerPos (_marker); _size = [_marker] call sizeMarker; -_support = 0; //(server getVariable "prestigeNATO")/100; STEF removed -_statics = staticsToSave select {_x distance _markerPos < (_size max 50)}; - -_buildings = nearestObjects [_markerPos, ["Land_LandMark_F"], _size / 2]; -if (count _buildings > 1) then { - _pos1 = getPos (_buildings select 0); - _pos2 = getPos (_buildings select 1); - _direction = [_pos1, _pos2] call BIS_fnc_DirTo; - - _spawnPos = [_pos1, 5,_direction] call BIS_fnc_relPos; - _group = createGroup side_blue; - _allGroups pushBack _group; - - _counter = 0; - while {(spawner getVariable _marker) AND (_counter < round (1 *_support ))} do { - _vehicleType = (planesNATO - bluCASFW) call BIS_fnc_selectRandom; - _vehicle = createVehicle [_vehicleType, _spawnPos, [],3, "NONE"]; - _vehicle setDir (_direction + 90); - _allVehicles pushBack _vehicle; - sleep 1; - - _spawnPos = [_spawnPos, 20,_direction] call BIS_fnc_relPos; - _unit = ([_markerPos, 0, bluPilot, _group] call bis_fnc_spawnvehicle) select 0; - _counter = _counter + 1; - }; - - [_group, _marker, "SAFE","SPAWNED","NOFOLLOW","NOVEH"] execVM "scripts\UPSMON.sqf"; -}; - -_spawnPos = [_markerPos, 3,0] call BIS_fnc_relPos; -_flag = createVehicle [bluFlag, _spawnPos, [],0, "CAN_COLLIDE"]; -_flag allowDamage false; -_allVehicles pushBack _flag; -[_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; -[_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; -[_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; - -_maxVehicles = 0; // Stef replaced this with 0 "round ((_size/100)*_support);" -_counter = 0; -while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { - if (diag_fps > minimoFPS) then { - _vehicleType = vehNATO call BIS_fnc_selectRandom; - _spawnPos = [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _vehicle = createVehicle [_vehicleType, _spawnPos, [], 0, "NONE"]; - _vehicle setDir random 360; - _vehicle lock 3; - _allVehicles pushBack _vehicle; - sleep 1; - }; - - _counter = _counter + 1; -}; -/* -_groupType = [bluTeam, side_blue] call AS_fnc_pickGroup; -_group = [_markerPos, side_blue, _groupType] call BIS_Fnc_spawnGroup; -sleep 1; -//[leader _group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to ORIGINAL for smoother attacks -[leader _group, _marker, "SAFE", "ORIGINAL","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -_allGroups pushBack _group; - -_counter = 0; -while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { - if (diag_fps > minimoFPS) then { - while {true} do { - _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; - if (!surfaceIsWater _spawnPos) exitWith {}; - }; - _groupType = [bluTeam, side_blue] call AS_fnc_pickGroup; - _group = [_spawnPos,side_blue, _groupType] call BIS_Fnc_spawnGroup; - sleep 1; - if (!(_statics isEqualTo []) and (_counter == 0)) then { - //[leader _group, _marker, "SAFE","SPAWNED","FORTIFY","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 removed fortify for smoother attack - [leader _group, _marker, "SAFE","SPAWNED","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - } else { - //[leader _group, _marker, "SAFE","SPAWNED", "RANDOM","NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to RANDOMUP for smoother attack - [leader _group, _marker, "SAFE","SPAWNED", "ORIGINAL","NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - }; - _allGroups pushBack _group; - }; - - _counter = _counter + 1; -}; - -_gunnerGroup = createGroup side_blue; -_guerGroups pushBack _gunnerGroup; -_group = createGroup side_blue; -_guerGroups pushBack _group; -_garrison = garrison getVariable [_marker,[]]; -_strength = count _garrison; -_counter = 0; -*/ // Apex 21/9/2017 21:15 UK Time -/* -while {(spawner getVariable _marker) AND (_counter < _strength)} do { - _unitType = _garrison select _counter; - - call { - if (_unitType == guer_sol_UN) exitWith { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _spawnPos = [_markerPos] call mortarPos; - _vehicle = guer_stat_mortar createVehicle _spawnPos; - _guerVehicles pushBack _vehicle; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit assignAsGunner _vehicle; - _unit moveInGunner _vehicle; - }; - - if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { - _static = _statics select 0; - if (typeOf _static == guer_stat_mortar) then { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; - [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - } else { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _unit moveInGunner _static; - }; - _statics = _statics - [_static]; - }; - - _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; - if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; - }; - - _counter = _counter + 1; - sleep 0.5; - if (count units _group == 8) then { - _group = createGroup side_blue; - _guerGroups pushBack _group; - }; -}; -*/ +_support = (server getVariable "prestigeNATO")/100; -//NATO Garrison selection - for "_i" from 0 to (count _buildings) - 1 do { - _building = _buildings select _i; - _buildingType = typeOf _building; +_buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; +_statics = staticsToSave select {_x distance _markerPos < (_size max 50)}; - call { - if ((_buildingType == "Land_Cargo_HQ_V1_F") OR (_buildingType == "Land_Cargo_HQ_V2_F") OR (_buildingType == "Land_Cargo_HQ_V3_F")) exitWith { - _vehicle = createVehicle [selectRandom bluStatAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; - _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; - _vehicle setDir (getDir _building); - _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; +/* Stef Disable NATO Garrison: it spawn too many units and it's generally too easy to capture bases +//NATO Garrison + //Aircraft + if (count _buildings > 1) then { + _pos1 = getPos (_buildings select 0); + _pos2 = getPos (_buildings select 1); + _direction = [_pos1, _pos2] call BIS_fnc_DirTo; - if ((_buildingType == "Land_Cargo_Patrol_V1_F") OR (_buildingType == "Land_Cargo_Patrol_V2_F") OR (_buildingType == "Land_Cargo_Patrol_V3_F")) then { - _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; - _direction = (getDir _building) - 180; - _spawnPos = [getPosATL _vehicle, 2.5, _direction] call BIS_Fnc_relPos; - _vehicle setPosATL _spawnPos; - _vehicle setDir (getDir _building) - 180; - _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + _spawnPos = [_pos1, 5,_direction] call BIS_fnc_relPos; + _group = createGroup side_blue; + _allGroups pushBack _group; - if (_buildingType in listbld) then { - _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 11), [], 0, "CAN_COLLIDE"]; - _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; + _counter = 0; + while {(spawner getVariable _marker) AND (_counter < round (1 *_support ))} do { + _vehicleType = (planesNATO - bluCASFW) call BIS_fnc_selectRandom; + _vehicle = createVehicle [_vehicleType, _spawnPos, [],3, "NONE"]; + _vehicle setDir (_direction + 90); _allVehicles pushBack _vehicle; sleep 1; - _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; - _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; + _spawnPos = [_spawnPos, 20,_direction] call BIS_fnc_relPos; + _unit = ([_markerPos, 0, bluPilot, _group] call bis_fnc_spawnvehicle) select 0; + _counter = _counter + 1; }; - }; - }; - _spawnPos = [_markerPos, 3,0] call BIS_fnc_relPos; - _flag = createVehicle [bluFlag, _spawnPos, [],0, "CAN_COLLIDE"]; - _flag allowDamage false; - _allVehicles pushBack _flag; - [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; - [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; - [_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; - - _maxVehicles = 0; // Stef changed this to 0 "4 min (round ((_size / 30)*_support));" - if ( _maxVehicles > 0 ) then { - _spawnPos = [_markerPos, random (_size / 2),random 360] call BIS_fnc_relPos; - _counter = 0; - while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { - _spawnPos = [_markerPos] call mortarPos; - _vehicle = selectRandom bluStatMortar createVehicle _spawnPos; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - _counter = _counter + 1; + [_group, _marker, "SAFE","SPAWNED","NOFOLLOW","NOVEH"] execVM "scripts\UPSMON.sqf"; }; - }; - - {[_x] spawn NATOinit} forEach _allSoldiers; - {[_x] spawn NATOVEHinit} forEach _allVehicles; - - _maxVehicles = 1 max (round ((_size/30)*_support)); - _spawnPos = _markerPos; + //Vehicles + _maxVehicles = round ((_size/100)*_support); _counter = 0; while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { if (diag_fps > minimoFPS) then { _vehicleType = vehNATO call BIS_fnc_selectRandom; - if (_size > 40) then {_spawnPos = [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos} else {_spawnPos = _spawnPos findEmptyPosition [10,60,_vehicleType]}; + _spawnPos = [_markerPos, 10, _size/2, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; _vehicle = createVehicle [_vehicleType, _spawnPos, [], 0, "NONE"]; _vehicle setDir random 360; _vehicle lock 3; @@ -234,25 +63,95 @@ while {(spawner getVariable _marker) AND (_counter < _strength)} do { _counter = _counter + 1; }; -//NATO Garrison add to array - _gunnerGroup = createGroup side_blue; - _guerGroups pushBack _gunnerGroup; - _garrison = garrison getVariable [_marker,[]]; - _strength = count _garrison; + //NATO patrols + _groupType = [bluTeam, side_blue] call AS_fnc_pickGroup; + _group = [_markerPos, side_blue, _groupType] call BIS_Fnc_spawnGroup; + sleep 1; + //[leader _group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to ORIGINAL for smoother attacks + [leader _group, _marker, "SAFE", "ORIGINAL","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + _allGroups pushBack _group; + _counter = 0; - private _group = grpNull; -//FIA Garrison selection - while {(spawner getVariable _marker) AND (_counter < _strength)} do { - if (isNull _group) then { - _group = createGroup side_blue; - _guerGroups pushBack _group; + while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { + if (diag_fps > minimoFPS) then { while {true} do { _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; if (!surfaceIsWater _spawnPos) exitWith {}; }; + _groupType = [bluTeam, side_blue] call AS_fnc_pickGroup; + _group = [_spawnPos,side_blue, _groupType] call BIS_Fnc_spawnGroup; + sleep 1; + if (!(_statics isEqualTo []) and (_counter == 0)) then { + //[leader _group, _marker, "SAFE","SPAWNED","FORTIFY","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 removed fortify for smoother attack + [leader _group, _marker, "SAFE","SPAWNED","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + } else { + //[leader _group, _marker, "SAFE","SPAWNED", "RANDOM","NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to RANDOMUP for smoother attack + [leader _group, _marker, "SAFE","SPAWNED", "ORIGINAL","NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + }; + _allGroups pushBack _group; + }; + + _counter = _counter + 1; + }; + + //NATO Garrison Turrets + for "_i" from 0 to (count _buildings) - 1 do { + _building = _buildings select _i; + _buildingType = typeOf _building; + + call { + if ((_buildingType == "Land_Cargo_HQ_V1_F") OR (_buildingType == "Land_Cargo_HQ_V2_F") OR (_buildingType == "Land_Cargo_HQ_V3_F")) exitWith { + _vehicle = createVehicle [selectRandom bluStatAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; + _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; + _vehicle setDir (getDir _building); + _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; + + if ((_buildingType == "Land_Cargo_Patrol_V1_F") OR (_buildingType == "Land_Cargo_Patrol_V2_F") OR (_buildingType == "Land_Cargo_Patrol_V3_F")) then { + _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; + _direction = (getDir _building) - 180; + _spawnPos = [getPosATL _vehicle, 2.5, _direction] call BIS_Fnc_relPos; + _vehicle setPosATL _spawnPos; + _vehicle setDir (getDir _building) - 180; + _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; + + if (_buildingType in listbld) then { + _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 11), [], 0, "CAN_COLLIDE"]; + _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + + _vehicle = createVehicle [selectRandom bluStatHMG, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; + _unit = ([_markerPos, 0, bluGunner, _group] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; + }; }; +*/ + +//Create groups for FIA garrison + _gunnerGroup = createGroup side_blue; + _group = createGroup side_blue; + _guerGroups pushBack _group; + _garrison = garrison getVariable [_marker,[]]; + _strength = count _garrison; + _counter = 0; + +//FIA Garrison + while {(spawner getVariable _marker) AND (_counter < _strength)} do { _unitType = _garrison select _counter; call { + //Mortar if (_unitType == guer_sol_UN) exitWith { _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; _spawnPos = [_markerPos] call mortarPos; @@ -262,7 +161,7 @@ while {(spawner getVariable _marker) AND (_counter < _strength)} do { _unit assignAsGunner _vehicle; _unit moveInGunner _vehicle; }; - + //Militiamen use the statics placed by player if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { _static = _statics select 0; if (typeOf _static == guer_stat_mortar) then { @@ -275,68 +174,104 @@ while {(spawner getVariable _marker) AND (_counter < _strength)} do { }; _statics = _statics - [_static]; }; - + //Create soldiers assigned as garrison _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; }; _counter = _counter + 1; - if(count units _group == 4) then {_group = grpNull;}; + sleep 0.5; + if (count units _group == 4) then {_group = createGroup side_blue; _guerGroups pushBack _group;}; + }; + + //UPSMON + for "_i" from 0 to (count _guerGroups) - 1 do { + _group = _guerGroups select _i; + [_group, _marker, "COMBAT","SPAWNED","RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; }; -// Apex 21/9/2017 21:15 UK Time -for "_i" from 0 to (count _guerGroups) - 1 do { - _group = _guerGroups select _i; - //[leader _group, _marker, "SAFE","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to ORIGINAL for smoother attack - [_group, _marker, "SAFE","SPAWNED","ORIGINAL","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; -}; + _guerGroups pushBack _gunnerGroup; + [_gunnerGroup, _marker, "COMBAT","SPAWNED","ORIGINAL","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + +//Initialise vehicles +{[_x] spawn VEHinit;} forEach _guerVehicles; -{ - [_x] spawn VEHinit; -} forEach _guerVehicles; + + +//Initialise FIA soldiers { _group = _x; { [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; _allSoldiers pushBack _x; } forEach units _group; -} forEach _guerGroups; //_guerSoldiers; +} forEach _guerGroups; - -{ - _group = _x; +//Init NATO Garrison { - [_x] spawn NATOinit; _allSoldiers pushBack _x; - } forEach units _group; -} forEach _allGroups; + _group = _x; + { + [_x] spawn NATOinit; _allSoldiers pushBack _x; + } forEach units _group; + } forEach _allGroups; -{ - [_x] spawn NATOVEHinit; -} forEach _allVehicles; - -_observer = objNull; -if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { - _spawnPos = []; - _group = createGroup civilian; - while {true} do { - _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; - if !(surfaceIsWater _spawnPos) exitWith {}; + { + [_x] spawn NATOVEHinit; + } forEach _allVehicles; + +//Press Reporter + _observer = objNull; + if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { + _spawnPos = []; + _group = createGroup civilian; + while {true} do { + _spawnPos = [_markerPos, round (random _size), random 360] call BIS_Fnc_relPos; + if !(surfaceIsWater _spawnPos) exitWith {}; + }; + _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; + [_observer] spawn CIVinit; + _allGroups pushBack _group; + [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; - _observer = _group createUnit [selectRandom CIV_journalists, _spawnPos, [],0, "NONE"]; - [_observer] spawn CIVinit; - _allGroups pushBack _group; - [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; -}; - -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) > 3*(({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)))}; +//Flag + _spawnPos = [_markerPos, 3,0] call BIS_fnc_relPos; + _flag = createVehicle [bluFlag, _spawnPos, [],0, "CAN_COLLIDE"]; + _flag allowDamage false; + _allVehicles pushBack _flag; + [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; + [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; + _flag addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; + +//Despawn conditions FIA + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ( ({!(vehicle _x isKindOf "Air") OR (lifeState _x != "INCAPACITATED")} count (([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)))-1 + ) > 3*( + ( {(alive _x) AND (lifeState _x != "INCAPACITATED")} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) ) + ) + }; -if (spawner getVariable _marker) then { - if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; -}; + //Loose condition + if (spawner getVariable _marker) then { + if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; + }; + //Despawn + waitUntil {sleep 1; !(spawner getVariable _marker)}; -waitUntil {sleep 1; !(spawner getVariable _marker)}; + {if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; -[_allGroups + _guerGroups, _allSoldiers + _guerSoldiers, _allVehicles + _guerVehicles] spawn AS_fnc_despawnUnitsNow; -if !(isNull _observer) then {deleteVehicle _observer}; + [_allGroups + _guerGroups, _allSoldiers + _guerSoldiers, _allVehicles + _guerVehicles] call AS_fnc_despawnUnitsNow; + if !(isNull _observer) then {deleteVehicle _observer}; diff --git a/AntistasiOfficial.Altis/CREATE/createNATObases.sqf b/AntistasiOfficial.Altis/CREATE/createNATObases.sqf index a6ecd1f3..e3ac4399 100644 --- a/AntistasiOfficial.Altis/CREATE/createNATObases.sqf +++ b/AntistasiOfficial.Altis/CREATE/createNATObases.sqf @@ -22,8 +22,11 @@ _buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; _group = createGroup side_blue; _allGroups pushBack _group; -//NATO Garrison selection - /*for "_i" from 0 to (count _buildings) - 1 do { + +/* Disable NATO Garrison, wanna make NATO garrisoning a choice, not just by default.. untill capturing a base will be a real deal. +//NATO Garrison + //Turrets + for "_i" from 0 to (count _buildings) - 1 do { _building = _buildings select _i; _buildingType = typeOf _building; @@ -64,17 +67,9 @@ _allGroups pushBack _group; sleep 1; }; }; - }; */ - - _spawnPos = [_markerPos, 3,0] call BIS_fnc_relPos; - _flag = createVehicle [bluFlag, _spawnPos, [],0, "CAN_COLLIDE"]; - _flag allowDamage false; - _allVehicles pushBack _flag; - [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; - [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; - //[_flag,"garage"] remoteExec ["AS_fnc_addActionMP"]; // Apex + }; - _maxVehicles = 0; // Stef changed this to 0 "4 min (round ((_size / 30)*_support));" + _maxVehicles = 4 min (round ((_size / 30)*_support)); if ( _maxVehicles > 0 ) then { _spawnPos = [_markerPos, random (_size / 2),random 360] call BIS_fnc_relPos; _counter = 0; @@ -93,7 +88,7 @@ _allGroups pushBack _group; {[_x] spawn NATOinit} forEach _allSoldiers; {[_x] spawn NATOVEHinit} forEach _allVehicles; - _maxVehicles = 0 max (round ((_size/30)*_support)); //Stef 02/10 "max =" changed from 1 to 0 to prevent vehicle spawning + _maxVehicles = 1 max (round ((_size/30)*_support)); _spawnPos = _markerPos; _counter = 0; while {(spawner getVariable _marker) AND (_counter < _maxVehicles)} do { @@ -109,11 +104,11 @@ _allGroups pushBack _group; _counter = _counter + 1; }; -/* + + //Initialise NATO units _groupType = [bluTeam, side_blue] call AS_fnc_pickGroup; _group = [_markerPos, side_blue, _groupType] call BIS_Fnc_spawnGroup; sleep 1; - //[leader _group, _marker, "SAFE", "RANDOMUP","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to ORIGINAL for smoother attack [leader _group, _marker, "SAFE", "ORIGINAL","SPAWNED", "NOVEH2", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; _allGroups pushBack _group; @@ -129,20 +124,20 @@ _allGroups pushBack _group; _group = [_spawnPos,side_blue, _groupType] call BIS_Fnc_spawnGroup; sleep 1; if (_counter == 0) then { - //[leader _group, _marker, "SAFE","SPAWNED","FORTIFY","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 removed fortify for smoother attack - [leader _group, _marker, "SAFE","SPAWNED","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - } - else { + [leader _group, _marker, "SAFE","SPAWNED","FORTIFY","NOVEH","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + } else { [leader _group, _marker, "SAFE","SPAWNED", "RANDOM","NOVEH", "NOFOLLOW"] execVM "scripts\UPSMON.sqf"; }; _allGroups pushBack _group; }; _counter = _counter + 1; - };*/ -//NATO Garrison add to array + }; +}; +*/ + +//Create groups for FIA garrison _gunnerGroup = createGroup side_blue; - _guerGroups pushBack _gunnerGroup; _garrison = garrison getVariable [_marker,[]]; _strength = count _garrison; _counter = 0; @@ -152,7 +147,6 @@ _allGroups pushBack _group; if (isNull _group) then { _group = createGroup side_blue; _guerGroups pushBack _group; //Sparker. - //_guerGroups pushBack _group; while {true} do { _spawnPos = [_markerPos, random _size,random 360] call BIS_fnc_relPos; if (!surfaceIsWater _spawnPos) exitWith {}; @@ -160,65 +154,63 @@ _allGroups pushBack _group; }; _unitType = _garrison select _counter; call { - if (_unitType == guer_sol_UN) exitWith { - _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; - _spawnPos = [_markerPos] call mortarPos; - _vehicle = guer_stat_mortar createVehicle _spawnPos; - _guerVehicles pushBack _vehicle; - [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; - _unit assignAsGunner _vehicle; - _unit moveInGunner _vehicle; - }; - + //Mortar + if (_unitType == guer_sol_UN) exitWith { + _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _spawnPos = [_markerPos] call mortarPos; + _vehicle = guer_stat_mortar createVehicle _spawnPos; + _guerVehicles pushBack _vehicle; + [_vehicle] execVM "scripts\UPSMON\MON_artillery_add.sqf"; + _unit assignAsGunner _vehicle; + _unit moveInGunner _vehicle; + }; + //Man the statics placed by player if ((_unitType == guer_sol_RFL) AND (count _statics > 0)) exitWith { _static = _statics select 0; if (typeOf _static == guer_stat_mortar) then { _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _static; _unit moveInGunner _static; [_static] execVM "scripts\UPSMON\MON_artillery_add.sqf"; } else { _unit = _gunnerGroup createUnit [_unitType, _markerPos, [], 0, "NONE"]; + _unit assignAsGunner _static; _unit moveInGunner _static; }; _statics = _statics - [_static]; }; + //Create the soldier assigned as garrison _unit = _group createUnit [_unitType, _markerPos, [], 0, "NONE"]; if (_unitType == guer_sol_SL) then {_group selectLeader _unit}; }; _counter = _counter + 1; + //This should create several groups of 4 people, why? if(count units _group == 4) then {_group = grpNull;}; }; for "_i" from 0 to (count _guerGroups) - 1 do { _group = _guerGroups select _i; - //[leader _group, _marker, "SAFE","SPAWNED","RANDOM","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; Stef 14/09 changed to RANDOMUP for smoother attack - [_group, _marker, "SAFE","SPAWNED", "ORIGINAL","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; + [_group, _marker, "COMBAT","SPAWNED", "RANDOMUP","NOVEH2","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; }; -// Apex 22/9/17 21:12 UK Time - {[_x] spawn VEHinit;} forEach _guerVehicles; + _guerGroups pushBack _gunnerGroup; + [_gunnerGroup, _marker, "COMBAT","SPAWNED","NOFOLLOW"] execVM "scripts\UPSMON.sqf"; - //////////////////////////////// - /* //You obviously wanted to loop through groups, not soldiers. Sparker. - { - _group = _x; - { - [_x] spawn AS_fnc_initialiseFIAGarrisonUnit; - _allSoldiers pushBack _x; - } forEach units _group; - } forEach _guerSoldiers; - */ +//Initialise vehicles + {[_x] spawn VEHinit;} forEach _guerVehicles; +//Initialise FIA soldiers { _group = _x; { [_x, _marker] spawn AS_fnc_initialiseFIAGarrisonUnit; //Sparker added _marker to parameters _guerSoldiers pushBack _x; + //_allSoldiers pushBack _x; } forEach units _group; } forEach _guerGroups; - ///////////////////////////////// +//Initialise NATO soldiers { _group = _x; { @@ -226,9 +218,30 @@ _allGroups pushBack _group; } forEach units _group; } forEach _allGroups; +//Initialise NATO vehicles { [_x] spawn NATOVEHinit; } forEach _allVehicles; + +//Flag + _spawnPos = [_markerPos, 3,0] call BIS_fnc_relPos; + _flag = createVehicle [bluFlag, _spawnPos, [],0, "CAN_COLLIDE"]; + _flag allowDamage false; + _allVehicles pushBack _flag; + [_flag,"unit"] remoteExec ["AS_fnc_addActionMP"]; + [_flag,"vehicle"] remoteExec ["AS_fnc_addActionMP"]; + _flag addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; + //Add Journalist _observer = objNull; if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "prestigeCSAT"))/10)) AND (spawner getVariable _marker)) then { @@ -244,24 +257,32 @@ _allGroups pushBack _group; [_group, _marker, "SAFE", "SPAWNED","NOFOLLOW", "NOVEH2","NOSHARE","DoRelax"] execVM "scripts\UPSMON.sqf"; }; -//Despawn conditions -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) > 2*(({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)))}; - -//Territory loose conditions -if (spawner getVariable _marker) then { - if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; -}; +//Despawn conditions FIA + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ( ({!(vehicle _x isKindOf "Air") OR (lifeState _x != "INCAPACITATED")} count (([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)))-1 + ) > 3*( + ( {(alive _x) AND (lifeState _x != "INCAPACITATED")} count (_allSoldiers + _guerSoldiers)) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits) ) + ) + }; + //Territory loose conditions + if (spawner getVariable _marker) then { + if (_marker != "FIA_HQ") then {[_marker] remoteExec ["mrkLOOSE",2]}; + }; -if (count ([distanciaSPWN,0,_markerPos,"BLUFORSpawn"] call distanceUnits) < 1) then { - spawner setVariable [_marker,false,true]; -}; + //Despawn + if (count ([distanciaSPWN,0,_markerPos,"BLUFORSpawn"] call distanceUnits) < 1) then { + spawner setVariable [_marker,false,true]; + }; waitUntil {sleep 1; !(spawner getVariable _marker)}; -{if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; - -[_allGroups + _guerGroups, _allSoldiers + _guerSoldiers, _allVehicles + _guerVehicles] spawn AS_fnc_despawnUnits; //AS_fnc_despawnUnits is waiting for blufor to leave, not opfor!! So they might spawn multiple times. + //Save destroyed buildings + {if ((!alive _x) AND !(_x in destroyedBuildings)) then {destroyedBuildings = destroyedBuildings + [position _x]; publicVariableServer "destroyedBuildings"}} forEach _buildings; -if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file + //Despawn + [_allGroups + _guerGroups, _allSoldiers + _guerSoldiers, _allVehicles + _guerVehicles] call AS_fnc_despawnUnitsNow; //AS_fnc_despawnUnits is waiting for blufor to leave, not opfor!! So they might spawn multiple times. + if !(isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/createNATOpuesto.sqf b/AntistasiOfficial.Altis/CREATE/createNATOpuesto.sqf index fe21f6e7..d6466808 100644 --- a/AntistasiOfficial.Altis/CREATE/createNATOpuesto.sqf +++ b/AntistasiOfficial.Altis/CREATE/createNATOpuesto.sqf @@ -64,7 +64,7 @@ else { sleep 1; _veh lock 3; - +_veh setCenterOfMass [(getCenterOfMass _veh) vectorAdd [0, 0, -1], 0]; [_veh] spawn NATOVEHinit; _veh allowCrewInImmobile true; sleep 1; @@ -92,7 +92,7 @@ if ({alive _x} count units _grupo == 0) then { markers = markers - [_marcador]; publicVariable "markers"; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; deleteMarker _marcador; - [["TaskFailed", ["", "Roadblock Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskFailed", ["", localize "STR_NTS_RBLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }; waitUntil {sleep 1; (not(spawner getVariable _marcador)) or (not(_marcador in puestosNATO))}; diff --git a/AntistasiOfficial.Altis/CREATE/createOutpost.sqf b/AntistasiOfficial.Altis/CREATE/createOutpost.sqf index a976828e..547a690d 100644 --- a/AntistasiOfficial.Altis/CREATE/createOutpost.sqf +++ b/AntistasiOfficial.Altis/CREATE/createOutpost.sqf @@ -17,55 +17,56 @@ _buildings = nearestObjects [_markerPos, listMilBld, _size*1.5]; _groupGunners = createGroup side_green; _allGroups pushBack _groupGunners; -for "_i" from 0 to (count _buildings) - 1 do { - _building = _buildings select _i; - _type = typeOf _building; - - call { - if ((_type == "Land_Cargo_HQ_V1_F") OR (_type == "Land_Cargo_HQ_V2_F") OR (_type == "Land_Cargo_HQ_V3_F")) exitWith { - _vehicle = createVehicle [statAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; - _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; - _vehicle setDir (getDir _building); - _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; +if!(_reduced) then { + for "_i" from 0 to (count _buildings) - 1 do { + _building = _buildings select _i; + _type = typeOf _building; + + call { + if ((_type == "Land_Cargo_HQ_V1_F") OR (_type == "Land_Cargo_HQ_V2_F") OR (_type == "Land_Cargo_HQ_V3_F")) exitWith { + _vehicle = createVehicle [statAA, (_building buildingPos 8), [],0, "CAN_COLLIDE"]; + _vehicle setPosATL [(getPos _building select 0),(getPos _building select 1),(getPosATL _vehicle select 2)]; + _vehicle setDir (getDir _building); + _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; - if ((_type == "Land_Cargo_Patrol_V1_F") OR (_type == "Land_Cargo_Patrol_V2_F") OR (_type == "Land_Cargo_Patrol_V3_F")) exitWith { - _vehicle = createVehicle [statMGtower, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; - _ang = (getDir _building) - 180; - _position = [getPosATL _vehicle, 2.5, _ang] call BIS_Fnc_relPos; - _vehicle setPosATL _position; - _vehicle setDir (getDir _building) - 180; - _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; - }; + if ((_type == "Land_Cargo_Patrol_V1_F") OR (_type == "Land_Cargo_Patrol_V2_F") OR (_type == "Land_Cargo_Patrol_V3_F")) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 1), [], 0, "CAN_COLLIDE"]; + _ang = (getDir _building) - 180; + _position = [getPosATL _vehicle, 2.5, _ang] call BIS_Fnc_relPos; + _vehicle setPosATL _position; + _vehicle setDir (getDir _building) - 180; + _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; - if (_type in listbld) exitWith { - _vehicle = createVehicle [statMGtower, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; - _vehicle disableTIEquipment true; - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allSoldiers = _allSoldiers + [_unit]; - sleep 1; - _allVehicles = _allVehicles + [_vehicle]; - _vehicle = createVehicle [statMGtower, (_building buildingPos 17), [], 0, "CAN_COLLIDE"]; - _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. - _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; - _unit moveInGunner _vehicle; - _allVehicles pushBack _vehicle; - sleep 1; + if (_type in listbld) exitWith { + _vehicle = createVehicle [statMGtower, (_building buildingPos 13), [], 0, "CAN_COLLIDE"]; + _vehicle disableTIEquipment true; + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allSoldiers = _allSoldiers + [_unit]; + sleep 1; + _allVehicles = _allVehicles + [_vehicle]; + _vehicle = createVehicle [statMGtower, (_building buildingPos 17), [], 0, "CAN_COLLIDE"]; + _vehicle disableTIEquipment true; //Stef disable thermal vision of static guns, AI won't use it and it's just unbalanced if player get it. + _unit = ([_markerPos, 0, infGunner, _groupGunners] call bis_fnc_spawnvehicle) select 0; + _unit moveInGunner _vehicle; + _allVehicles pushBack _vehicle; + sleep 1; + }; }; }; }; - _flag = createVehicle [cFlag, _markerPos, [],0, "CAN_COLLIDE"]; _flag allowDamage false; [_flag,"take"] remoteExec ["AS_fnc_addActionMP"]; @@ -229,7 +230,19 @@ if ((random 100 < (((server getVariable "prestigeNATO") + (server getVariable "p [_marker, _allSoldiers] spawn AS_fnc_garrisonMonitor; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) > 3*count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 200)) AND !(captive _x)}))}; +//Despawn Conditions + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + (({!(vehicle _x isKindOf "Air")} + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + > 3* + count (allUnits select {( + (side _x == side_green) OR + (side _x == side_red)) AND + (_x distance _markerPos <= (_size max 200)) AND + !(captive _x)}) + ) + }; if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then { [_flag] remoteExec ["mrkWIN",2]; diff --git a/AntistasiOfficial.Altis/CREATE/createPower.sqf b/AntistasiOfficial.Altis/CREATE/createPower.sqf index 88f6fc08..75b20928 100644 --- a/AntistasiOfficial.Altis/CREATE/createPower.sqf +++ b/AntistasiOfficial.Altis/CREATE/createPower.sqf @@ -111,7 +111,20 @@ if !(_marker in destroyedCities) then { }; }; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) > 3*count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 200)) AND !(captive _x)}))}; +//Despawn conditions + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + + (({!(vehicle _x isKindOf "Air")} + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + > 3* + count (allUnits select {( + (side _x == side_green) OR + (side _x == side_red)) AND + (_x distance _markerPos <= (_size max 200)) AND + !(captive _x)}) + ) + }; if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then { [_flag] remoteExec ["mrkWIN",2]; diff --git a/AntistasiOfficial.Altis/CREATE/createResources.sqf b/AntistasiOfficial.Altis/CREATE/createResources.sqf index f1297418..5215cec5 100644 --- a/AntistasiOfficial.Altis/CREATE/createResources.sqf +++ b/AntistasiOfficial.Altis/CREATE/createResources.sqf @@ -111,14 +111,28 @@ if !(_marker in destroyedCities) then { }; }; -waitUntil {sleep 1; !(spawner getVariable _marker) OR (({!(vehicle _x isKindOf "Air")} count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) > 3*count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= (_size max 200)) AND !(captive _x)}))}; +//Despawn conditions + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + + (({!(vehicle _x isKindOf "Air") OR (lifeState _x == "INCAPACITATED")} + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + > 3* + count (allUnits select {( + (side _x == side_green) OR + (side _x == side_red)) AND + (_x distance _markerPos <= (_size max 200)) AND + !(captive _x) OR + (lifeState _x == "INCAPACITATED")}) + ) + }; -if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then { - [_flag] remoteExec ["mrkWIN",2]; -}; + if ((spawner getVariable _marker) AND !(_marker in mrkFIA)) then { + [_flag] remoteExec ["mrkWIN",2]; + }; -waitUntil {sleep 1; !(spawner getVariable _marker)}; + waitUntil {sleep 1; !(spawner getVariable _marker)}; -deleteMarker _patrolMarker; -[_allGroups, _allSoldiers + _workers, _allVehicles] spawn AS_fnc_despawnUnits; -if (!isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file + deleteMarker _patrolMarker; + [_allGroups, _allSoldiers + _workers, _allVehicles] spawn AS_fnc_despawnUnits; + if (!isNull _observer) then {deleteVehicle _observer}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/CREATE/createRoadblock.sqf b/AntistasiOfficial.Altis/CREATE/createRoadblock.sqf index da892346..e7c0e157 100644 --- a/AntistasiOfficial.Altis/CREATE/createRoadblock.sqf +++ b/AntistasiOfficial.Altis/CREATE/createRoadblock.sqf @@ -87,7 +87,7 @@ waitUntil {sleep 1; !(spawner getVariable _marker) or (count (allUnits select {( if (count (allUnits select {((side _x == side_green) or (side _x == side_red)) and (_x distance _markerPos <= _size)}) < 1) then { [-5,0,_markerPos] remoteExec ["AS_fnc_changeCitySupport",2]; - [["TaskSucceeded", ["", localize "STR_TSK_RB_DESTROYED"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", localize "STR_TSK_TD_RB_DESTROYED"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; [_markerPos] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; mrkAAF = mrkAAF - [_marker]; mrkFIA = mrkFIA + [_marker]; diff --git a/AntistasiOfficial.Altis/CREATE/createRoadblock2.sqf b/AntistasiOfficial.Altis/CREATE/createRoadblock2.sqf index 61f89e4f..86b0b3e3 100644 --- a/AntistasiOfficial.Altis/CREATE/createRoadblock2.sqf +++ b/AntistasiOfficial.Altis/CREATE/createRoadblock2.sqf @@ -94,7 +94,7 @@ private _removeMarker = false; if (count (allUnits select {((side _x == side_green) or (side _x == side_red)) and (_x distance _markerPos <= _size)}) < 1) then { //Did everyone die? _removeMarker = true; [-5,0,_markerPos] remoteExec ["AS_fnc_changeCitySupport",2]; - [["TaskSucceeded", ["", localize "STR_TSK_RB_DESTROYED"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", localize "STR_TSK_TD_RB_DESTROYED"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; [_markerPos] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; }; diff --git a/AntistasiOfficial.Altis/CREATE/createWatchpost.sqf b/AntistasiOfficial.Altis/CREATE/createWatchpost.sqf index cf95f71a..b9ed6dcc 100644 --- a/AntistasiOfficial.Altis/CREATE/createWatchpost.sqf +++ b/AntistasiOfficial.Altis/CREATE/createWatchpost.sqf @@ -85,7 +85,7 @@ if (count(allUnits select { }) < 1) then { [-5,0,_markerPos] remoteExec ["AS_fnc_changeCitySupport",2]; - [["TaskSucceeded", ["", localize "STR_TSK_WP_DESTROYED"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", localize "STR_TSK_TD_WP_DESTROYED"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; _mrk = format ["Dum%1",_marker]; deleteMarker _mrk; mrkAAF = mrkAAF - [_marker]; diff --git a/AntistasiOfficial.Altis/CREATE/genRoadPatrol.sqf b/AntistasiOfficial.Altis/CREATE/genRoadPatrol.sqf index e9b1a4a9..d33eaa8c 100644 --- a/AntistasiOfficial.Altis/CREATE/genRoadPatrol.sqf +++ b/AntistasiOfficial.Altis/CREATE/genRoadPatrol.sqf @@ -7,13 +7,13 @@ _allGroups = []; _allSoldiers = []; //Stef 17/10 Remove speedboats when RHS is active -_vehicleArray = vehPatrol + (if (activeAFRF) then {[]} else {vehPatrolBoat}); +_vehicleArray = vehPatrol + (if (activeAFRF) then {[]} else {vehPatrolBoat}) - heli_unarmed; while {true} do { _vehicleType = selectRandom _vehicleArray; call { if (_vehicleType in heli_unarmed) exitWith { - //_arrayBases = aeropuertos - mrkFIA; Stef disabled heli patrol, better use QRF instead + _arrayBases = aeropuertos - mrkFIA; //Stef disabled heli patrol, better use QRF instead }; if (_vehicleType in vehPatrolBoat) exitWith { _arrayBases = puertos - mrkFIA; @@ -21,16 +21,16 @@ while {true} do { _arrayBases = bases - mrkFIA; }; - if (_arraybases isEqualTo []) then { + if (_arrayBases isEqualTo []) then { _vehicleArray = _vehicleArray - [_vehicleType]; } else { while {true} do { - _base = [_arraybases,getMarkerPos guer_respawn] call BIS_fnc_nearestPosition; + _base = [_arrayBases,getMarkerPos guer_respawn] call BIS_fnc_nearestPosition; if !(spawner getVariable _base) exitWith {}; - if (spawner getVariable _base) then {_arraybases = _arraybases - [_base]}; - if (_arraybases isEqualTo []) exitWith {}; + if (spawner getVariable _base) then {_arrayBases = _arrayBases - [_base]}; + if (_arrayBases isEqualTo []) exitWith {}; }; - if (_arraybases isEqualTo []) then {_vehicleArray = _vehicleArray - [_vehicleType]}; + if (_arrayBases isEqualTo []) then {_vehicleArray = _vehicleArray - [_vehicleType]}; }; if (_vehicleArray isEqualTo []) exitWith {}; if !(spawner getVariable _base) exitWith {}; @@ -83,7 +83,7 @@ if (_vehicleType isKindOf "Car") then { _soldier assignAsCargo _vehicle; _soldier moveInCargo _vehicle; }; - [_vehicle] spawn smokeCover; + //[_vehicle] spawn smokeCover; }; { @@ -144,4 +144,4 @@ while {alive _vehicle} do { AAFpatrols = AAFpatrols - 1; publicVariableServer "AAFpatrols"; -[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; +[_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; //This has to change, spawning a script for too many units it's performance draining diff --git a/AntistasiOfficial.Altis/CREATE/genVEHinit.sqf b/AntistasiOfficial.Altis/CREATE/genVEHinit.sqf index 4416a4f9..e1603020 100644 --- a/AntistasiOfficial.Altis/CREATE/genVEHinit.sqf +++ b/AntistasiOfficial.Altis/CREATE/genVEHinit.sqf @@ -1,11 +1,12 @@ params ["_vehicle"]; private ["_vehicleType"]; -_vehicle setfuel 0.15; -if(activeACE) then {[_vehicle, 4000] call ace_refuel_fnc_setFuel;} else {_vehicle setfuelcargo 0.6;}; + if ((_vehicle isKindOf "FlagCarrier") OR (_vehicle isKindOf "Building")) exitWith {}; if (_vehicle isKindOf "ReammoBox_F") exitWith {[_vehicle] call cajaAAF}; +_vehicle setfuel 0.15; +if(activeACE) then {[_vehicle, 4000] call ace_refuel_fnc_setFuel;} else {_vehicle setfuelcargo 0.6;}; _vehicleType = typeOf _vehicle; @@ -21,7 +22,7 @@ call { if (activeBE) then {["des_arm"] remoteExec ["fnc_BE_XP", 2]}; } }]; - _vehicle addEventHandler ["HandleDamage",{_vehicle = _this select 0; if (!canFire _vehicle) then {[_vehicle] call smokeCoverAuto}}]; + //_vehicle addEventHandler ["HandleDamage",{_vehicle = _this select 0; if (!canFire _vehicle) then {//[_vehicle] call smokeCoverAuto}}]; }; // tank @@ -33,11 +34,12 @@ call { if (activeBE) then {["des_arm"] remoteExec ["fnc_BE_XP", 2]}; } }]; - _vehicle addEventHandler ["HandleDamage",{_vehicle = _this select 0; if (!canFire _vehicle) then {[_vehicle] call smokeCoverAuto}}]; + //_vehicle addEventHandler ["HandleDamage",{_vehicle = _this select 0; if (!canFire _vehicle) then {//[_vehicle] call smokeCoverAuto}}]; }; // plane or helicopter if (_vehicleType in indAirForce) exitWith { + _vehicle setfuel 0.4; _vehicle addEventHandler ["GetIn", { _crewPos = _this select 1; if (_crewPos == "driver") then { @@ -47,18 +49,20 @@ call { hint format ["AI is not capable of flying %1 vehicles.", A3_Str_INDEP]; }; }; - _vehicle setfuel 0.3; }]; if (_vehicleType in heli_unarmed) then { _vehicle addEventHandler ["killed",{ [-4000] remoteExec ["resourcesAAF",2]; if (activeBE) then {["des_veh"] remoteExec ["fnc_BE_XP", 2]}; - _vehicle setfuel 0.3; }]; } else { - if (_vehicle isKindOf "Helicopter") then {_vehicle setfuel 0.3; _vehicle addEventHandler ["killed",{[_this select 0] call AS_fnc_AAFassets;[0,0] remoteExec ["prestige",2]; [-2,2,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]}]}; - if (_vehicle isKindOf "Plane") then {_vehicle addEventHandler ["killed",{[_this select 0] call AS_fnc_AAFassets; [0,0] remoteExec ["prestige",2]; [-5,5,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]}]}; + if (_vehicle isKindOf "Helicopter") then { + _vehicle addEventHandler ["killed",{[_this select 0] call AS_fnc_AAFassets;[0,0] remoteExec ["prestige",2]; [-2,2,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]}] + }; + if (_vehicle isKindOf "Plane") then { + _vehicle addEventHandler ["killed",{[_this select 0] call AS_fnc_AAFassets; [0,0] remoteExec ["prestige",2]; [-5,5,position (_this select 0)] remoteExec ["AS_fnc_changeCitySupport",2]}] + }; }; }; diff --git a/AntistasiOfficial.Altis/CREATE/patrolCA.sqf b/AntistasiOfficial.Altis/CREATE/patrolCA.sqf index 49728654..4671597d 100644 --- a/AntistasiOfficial.Altis/CREATE/patrolCA.sqf +++ b/AntistasiOfficial.Altis/CREATE/patrolCA.sqf @@ -26,31 +26,33 @@ if !(_forceBase == "") then { _forcedAttack = true; }; -if (!(_forcedAttack) AND (diag_fps < minimoFPS)) exitWith {diag_log format ["Info: Small attack on %1 called off, low server FPS.", _marker]}; - -_exit = false; -if (_isMarker) then { - if (!_forcedAttack) then { - if (_marker in smallCAmrk) then { - _exit = true; - }; - }; -} else { - _nearestMarker = [smallCApos,_marker] call BIS_fnc_nearestPosition; - if (_nearestMarker distance _marker < (distanciaSPWN/2)) then { - _exit = true; - } else { - if (count smallCAmrk > 0) then { - _nearestMarker = [smallCAmrk,_marker] call BIS_fnc_nearestPosition; - if (getMarkerPos _nearestMarker distance _marker < (distanciaSPWN/2)) then {_exit = true}; +//Conditions to prevent the counterattack + //diag_fps + if (!(_forcedAttack) AND (count allunits > 200)) exitWith {diag_log format ["Info: Small attack on %1 called off, too many units.", _marker]}; + + _exit = false; + //another counterattack active in same zone (disabled) + if (_isMarker) then { + if (!_forcedAttack) then { + if (_marker in smallCAmrk) then { + _exit = true; + }; + }; + } else { + _nearestMarker = [smallCApos,_marker] call BIS_fnc_nearestPosition; + if (_nearestMarker distance _marker < (distanciaSPWN/2)) then { + _exit = true; + } else { + if (count smallCAmrk > 0) then { + _nearestMarker = [smallCAmrk,_marker] call BIS_fnc_nearestPosition; + if (getMarkerPos _nearestMarker distance _marker < (distanciaSPWN/2)) then {_exit = true}; + }; + }; }; - }; -}; - -if (_exit) exitWith {diag_log format ["Info: Small attack on %1 called off, nearby small attack already in progress.", _marker]}; - -//_radioContact = [([_marker] call AS_fnc_radioCheck), true] select (_forcedAttack); Stef 21/09 removed Radiotower QRF check. -//if !(_radioContact) exitWith {diag_log format ["Info: Small attack on %1 called off, no radio contact.", _marker]}; + //if (_exit) exitWith {diag_log format ["Info: Small attack on %1 called off, nearby small attack already in progress.", _marker]}; //Stef 05/12 patrolca should replace dead units, so no points to prevent several in same zone. + //missing radio coverage (disabled) + //_radioContact = [([_marker] call AS_fnc_radioCheck), true] select (_forcedAttack); Stef 21/09 removed Radiotower QRF check. + //if !(_radioContact) exitWith {diag_log format ["Info: Small attack on %1 called off, no radio contact.", _marker]}; if !(_forcedAttack) then { _base = [_marker] call AS_fnc_findBaseForCA; @@ -64,31 +66,32 @@ if ((_base == "") AND (_airport == "")) then { if ((_base == "") AND (_airport == "") AND !(_involveCSAT)) exitWith {diag_log format ["Info: Small attack on %1 called off, no base to attack from.", _marker]}; -if ((_base == "") AND (!(_airport == "") OR (_involveCSAT))) then { - _threatEvaluation = [_markerPos] call AAthreatEval; - if (!(_airport == "") AND !(_forcedAttack)) then { - if ((_threatEvaluation > 15) AND !(count (indAirForce arrayIntersect planes) > 0)) then { - _airport = ""; - } else { - if ((_threatEvaluation > 10) AND !(count (indAirForce arrayIntersect (heli_armed + planes)) > 0)) then { +// threatEval -- it isn't working because of unlocks missing; values should be adjusted to different conditions + if ((_base == "") AND (!(_airport == "") OR (_involveCSAT))) then { + _threatEvaluation = [_markerPos] call AAthreatEval; + if (!(_airport == "") AND !(_forcedAttack)) then { + if ((_threatEvaluation > 15) AND !(count (indAirForce arrayIntersect planes) > 0)) then { _airport = ""; + } else { + if ((_threatEvaluation > 10) AND !(count (indAirForce arrayIntersect (heli_armed + planes)) > 0)) then { + _airport = ""; + }; }; }; }; -}; -if !(_base == "") then { - _threatEvaluation = [_markerPos] call landThreatEval; - if !(_forcedAttack) then { - if ((_threatEvaluation > 15) AND !(count (enemyMotorpool arrayIntersect vehTank) > 0)) then { - _base = ""; - } else { - if ((_threatEvaluation > 5) AND (count (enemyMotorpool arrayIntersect (vehAPC + vehIFV + vehTank)) > 0)) then { + if !(_base == "") then { + _threatEvaluation = [_markerPos] call landThreatEval; + if !(_forcedAttack) then { + if ((_threatEvaluation > 15) AND !(count (enemyMotorpool arrayIntersect vehTank) > 0)) then { _base = ""; + } else { + if ((_threatEvaluation > 5) AND (count (enemyMotorpool arrayIntersect (vehAPC + vehIFV + vehTank)) > 0)) then { + _base = ""; + }; }; }; }; -}; if ((_base == "") AND (_airport == "") AND !(_involveCSAT)) exitWith {diag_log format ["Info: Small attack on %1 called off, threat level too high (%2).", _marker, _threatEvaluation]}; @@ -108,236 +111,254 @@ _allVehicles = []; _allGroups = []; _roads = []; -if !(_base == "") then { - _airport = ""; - _involveCSAT = false; - if !(_forcedAttack) then {[_base,20] spawn AS_fnc_addTimeForIdle}; - _originPosition = getMarkerPos _base; - _posData = [_originPosition, _markerPos] call AS_fnc_findSpawnSpots; - _posRoad = _posData select 0; - _dir = _posData select 1; - - _vehicleType = enemyMotorpoolDef; - if (count (enemyMotorpool - vehPatrol) > 1) then { - _vehicleArray =+ (enemyMotorpool - vehPatrol); - call { - if ((_threatEvaluation > 5) AND (count (enemyMotorpool arrayIntersect (vehTank + vehIFV)) > 0)) exitWith { - _vehicleArray = _vehicleArray - vehPatrol - vehTrucks; - }; - if ((_threatEvaluation > 3) AND (count (enemyMotorpool arrayIntersect (vehIFV + vehAPC)) > 0)) then { - _vehicleArray = _vehicleArray - vehTrucks; - }; - }; - - _vehicleType = _vehicleArray call BIS_fnc_selectRandom; - }; - - if !(_vehicleType in vehTank) then { - call { - if (_vehicleType in vehIFV) then { - _groupType = [infTeam, side_green] call AS_fnc_pickGroup; - _groupCounter = 1; - }; - if (_vehicleType in vehAPC) then { - _groupType = [infSquad, side_green] call AS_fnc_pickGroup; - _groupCounter = 1; - }; - if (_vehicleType in vehTrucks) then { - _groupType = [infSquad, side_green] call AS_fnc_pickGroup; - _groupCounter = 2; - }; - }; - _initData = [_vehicleType,_groupType,_groupCounter,_originPosition,_marker] call AS_fnc_groundTransport; - _allVehicles = _allVehicles + (_initData select 0); - _allGroups = _allGroups + (_initData select 1); - } else { - _initData = [_posRoad, _dir, _vehicleType, side_green] call bis_fnc_spawnvehicle; - _allVehicles = _allVehicles + (_initData select [0,1]); - _allGroups = _allGroups + (_initData select [2,1]); - - _wp_01 = (_initData select 2) addWaypoint [_markerPos, 0]; - _wp_01 setWaypointBehaviour "SAFE"; - [(_initData select 0),"Tank"] spawn inmuneConvoy; - (_initData select 0) allowCrewInImmobile true; - _wp_01 setWaypointType "SAD"; - }; -}; - -if !(_airport == "") then { - if !(_forcedAttack) then {[_airport,20] spawn AS_fnc_addTimeForIdle}; - _originPosition = getMarkerPos _airport; - _vehicleArray = (indAirForce - planes); - _maxCounter = [1,2] select (_isMarker); - for "_i" from 1 to _maxCounter do { - _vehicleType = selectRandom heli_unarmed; - if (_i < _maxCounter) then { - _vehicleArray =+ indAirForce arrayIntersect (heli_armed + heli_unarmed); +//Smallcounterattack sent from base + //Find spawn position + if !(_base == "") then { + _airport = ""; + _involveCSAT = false; + if !(_forcedAttack) then {[_base,2] spawn AS_fnc_addTimeForIdle}; + _originPosition = getMarkerPos _base; + _posData = [_originPosition, _markerPos] call AS_fnc_findSpawnSpots; + _posRoad = _posData select 0; + _dir = _posData select 1; + + _vehicleType = enemyMotorpoolDef; + //threat eval isn't working and tanks are bad as qrf because of their poor behaviour + if (count (enemyMotorpool - vehPatrol) > 1) then { + _vehicleArray =+ (enemyMotorpool - vehPatrol -vehTank); call { - if ((_threatEvaluation > 7) AND (count (_vehicleArray arrayIntersect heli_armed) > 0)) then { - _vehicleArray = heli_armed; + if ((_threatEvaluation > 5) AND (count (enemyMotorpool arrayIntersect (vehTank + vehIFV)) > 0)) exitWith { + _vehicleArray = _vehicleArray - vehTrucks - vehTank; }; - if ((_threatEvaluation > 14) AND (count (_vehicleArray arrayIntersect planes) > 0)) then { - _vehicleArray = planes; - }; - - if !(count _vehicleArray > 0) then { - _vehicleArray = heli_unarmed; + if ((_threatEvaluation > 3) AND (count (enemyMotorpool arrayIntersect (vehIFV + vehAPC)) > 0)) then { + _vehicleArray = _vehicleArray - vehTrucks - vehTank; }; }; _vehicleType = _vehicleArray call BIS_fnc_selectRandom; }; - _timeOut = 0; - _spawnPosition = _originPosition findEmptyPosition [0,100,heli_transport]; - while {_timeOut < 60} do { - if (count _spawnPosition > 0) exitWith {}; - _timeOut = _timeOut + 1; - _spawnPosition = _originPosition findEmptyPosition [0,100,heli_transport]; - sleep 1; - }; - if (_spawnPosition isEqualTo []) then {_spawnPosition = _originPosition}; - - _vehicleData = [_spawnPosition, [_spawnPosition, _markerPos] call BIS_fnc_dirTo,_vehicleType, side_green] call bis_fnc_spawnvehicle; - _vehicle = _vehicleData select 0; - _vehicleGroup = _vehicleData select 2; - _allGroups pushBack _vehicleGroup; - _allVehicles pushBack _vehicle; - - if !(_vehicleType in heli_unarmed) then { - [_vehicleGroup, _originPosition, _markerPos, 400, 60] spawn AS_fnc_QRF_loiter; - [_vehicle,"Air Attack"] spawn inmuneConvoy; - } else { - _seats = ([_vehicleType,true] call BIS_fnc_crewCount) - ([_vehicleType,false] call BIS_fnc_crewCount); - if (_seats <= 12) then { - if (_seats <= 7) then { + if !(_vehicleType in vehTank) then { + call { + if (_vehicleType in vehIFV) then { _groupType = [infTeam, side_green] call AS_fnc_pickGroup; - } else { + _groupCounter = 1; + }; + if (_vehicleType in vehAPC) then { _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _groupCounter = 1; + }; + if (_vehicleType in vehTrucks) then { + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _groupCounter = 2; }; - _group = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _group; - _allGroups pushBack _group; - - _dismountPosition = [_markerPos, 300, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - _dismountPosition set [2, 0]; - _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; - _allVehicles = _allVehicles + [_helipad]; - - [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; - [_vehicle,"Air Transport"] spawn inmuneConvoy; - } else { - _groupType = [infSquad, side_green] call AS_fnc_pickGroup; - _group = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _group; - _allGroups pushBack _group; - _groupTwo = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _groupTwo; - _allGroups pushBack _groupTwo; - _dismountPosition = [_markerPos, 150, 300, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; - [_vehicleGroup, _spawnPosition, _dismountPosition, _marker, [_group, _groupTwo], 60*60] spawn AS_fnc_QRF_fastrope; }; - }; - - if !(_i == _maxCounter) then { - sleep 15; + _initData = [_vehicleType,_groupType,_groupCounter,_originPosition,_marker] call AS_fnc_groundTransport; + _allVehicles = _allVehicles + (_initData select 0); + _allGroups = _allGroups + (_initData select 1); + } else { + _initData = [_posRoad, _dir, _vehicleType, side_green] call bis_fnc_spawnvehicle; + _allVehicles = _allVehicles + (_initData select [0,1]); + _allGroups = _allGroups + (_initData select [2,1]); + + _wp_01 = (_initData select 2) addWaypoint [_markerPos, 0]; + _wp_01 setWaypointBehaviour "SAFE"; + [(_initData select 0),"Tank"] spawn inmuneConvoy; + (_initData select 0) allowCrewInImmobile true; + _wp_01 setWaypointType "SAD"; }; }; -}; -{ - _group = _x; - _group allowFleeing 0; - { - [_x] spawn genInit; - _allSoldiers pushBack _x; - } forEach units _group; -} forEach _allGroups; - -{ - [_x] spawn genVEHinit; -} forEach _allVehicles; - -if (_involveCSAT) then { - _originPosition = getMarkerPos "spawnCSAT"; - _originPosition set [2,300]; - for "_i" from 1 to 3 do { - _vehicleType = selectRandom opHeliTrans; - if (_i < 3) then { - _vehicleType = selectRandom ([opAir, (opAir - opHeliTrans)] select (_threatEvaluation > 10)); - }; +//SmallCounterattack sent from Airport + if !(_airport == "") then { + if !(_forcedAttack) then {[_airport,2] spawn AS_fnc_addTimeForIdle}; + _originPosition = getMarkerPos _airport; + _vehicleArray = (indAirForce - planes); + _maxCounter = [1,2] select (_isMarker); + for "_i" from 1 to _maxCounter do { + _vehicleType = selectRandom heli_unarmed; + if (_i < _maxCounter) then { + _vehicleArray =+ indAirForce arrayIntersect (heli_armed + heli_unarmed); + call { + if ((_threatEvaluation > 7) AND (count (_vehicleArray arrayIntersect heli_armed) > 0)) then { + _vehicleArray = heli_armed; + }; + if ((_threatEvaluation > 14) AND (count (_vehicleArray arrayIntersect planes) > 0)) then { + _vehicleArray = planes; + }; + + if !(count _vehicleArray > 0) then { + _vehicleArray = heli_unarmed; + }; + }; - _timeOut = 0; - _spawnPosition = _originPosition findEmptyPosition [0,100,_vehicleType]; - while {_timeOut < 60} do { - if (count _spawnPosition > 0) exitWith {}; - _timeOut = _timeOut + 1; - _spawnPosition = _originPosition findEmptyPosition [0,100,_vehicleType]; - sleep 1; - }; - if (_spawnPosition isEqualTo []) then {_spawnPosition = _originPosition}; + _vehicleType = _vehicleArray call BIS_fnc_selectRandom; + }; - _vehicleData = [_originPosition, 0, _vehicleType, side_red] call bis_fnc_spawnvehicle; - _vehicle = _vehicleData select 0; - _vehicleGroup = _vehicleData select 2; - _redVehicles pushBack _vehicle; - _redGroups pushBack _vehicleGroup; + _timeOut = 0; + _spawnPosition = _originPosition findEmptyPosition [0,100,heli_transport]; + while {_timeOut < 60} do { + if (count _spawnPosition > 0) exitWith {}; + _timeOut = _timeOut + 1; + _spawnPosition = _originPosition findEmptyPosition [0,100,heli_transport]; + sleep 1; + }; + if (_spawnPosition isEqualTo []) then {_spawnPosition = _originPosition}; + + _vehicleData = [_spawnPosition, [_spawnPosition, _markerPos] call BIS_fnc_dirTo,_vehicleType, side_green] call bis_fnc_spawnvehicle; + _vehicle = _vehicleData select 0; + _vehicleGroup = _vehicleData select 2; + _allGroups pushBack _vehicleGroup; + _allVehicles pushBack _vehicle; + + if !(_vehicleType in heli_unarmed) then { + [_vehicleGroup, _originPosition, _markerPos, 400, 60] spawn AS_fnc_QRF_loiter; + [_vehicle,"Air Attack"] spawn inmuneConvoy; + } else { + _seats = ([_vehicleType,true] call BIS_fnc_crewCount) - ([_vehicleType,false] call BIS_fnc_crewCount); + if (_seats <= 12) then { + if (_seats <= 7) then { + _groupType = [infTeam, side_green] call AS_fnc_pickGroup; + } else { + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + }; + _group = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _group; + _allGroups pushBack _group; - if !(_vehicleType in opHeliTrans) then{ - _wp_01 = _vehicleGroup addWaypoint [_markerPos, 0]; - _wp_01 setWaypointType "SAD"; - [_vehicle,"CSAT Air Attack"] spawn inmuneConvoy; - } else { - {_x setBehaviour "CARELESS";} forEach units _vehicleGroup; - _groupType = [opGroup_Squad, side_red] call AS_fnc_pickGroup; - _group = [_originPosition, side_red, _groupType] call BIS_Fnc_spawnGroup; - {_x assignAsCargo _vehicle; _x moveInCargo _vehicle} forEach units _group; - _redGroups pushBack _group; - [_vehicle,"CSAT Air Transport"] spawn inmuneConvoy; - if ((_marker in bases) OR (_marker in aeropuertos) OR (random 10 < _threatEvaluation)) then { - [_vehicle,_group,_marker,_threatEvaluation] spawn airdrop; - } - else { - if ((random 100 < 50) OR (_vehicleType == opHeliDismount)) then { - {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _vehicleGroup; - _dismountPosition = []; _dismountPosition = [_markerPos, 300, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; _dismountPosition set [2, 0]; _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; - _allVehicles pushBack _helipad; + _allVehicles = _allVehicles + [_helipad]; [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; + [_vehicle,"Air Transport"] spawn inmuneConvoy; } else { - [_vehicleGroup, _originPosition, _markerPos, _marker, _group, 60*60] spawn AS_fnc_QRF_fastrope; + _groupType = [infSquad, side_green] call AS_fnc_pickGroup; + _group = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _group; + _allGroups pushBack _group; + _groupTwo = [_originPosition, side_green, _groupType] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _vehicle;_x moveInCargo _vehicle} forEach units _groupTwo; + _allGroups pushBack _groupTwo; + _dismountPosition = [_markerPos, 150, 300, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + [_vehicleGroup, _spawnPosition, _dismountPosition, _marker, [_group, _groupTwo], 60*60] spawn AS_fnc_QRF_fastrope; }; }; + + if !(_i == _maxCounter) then { + sleep 15; + }; }; - sleep 15; }; +//Initialise AAF units and vehicles created { _group = _x; + _group allowFleeing 0; { - [_x] spawn CSATinit; _redSoldiers pushBack _x; + [_x] spawn genInit; + _allSoldiers pushBack _x; } forEach units _group; - } forEach _redGroups; + } forEach _allGroups; { - [_x] spawn CSATVEHinit; - } forEach _redVehicles; -}; + [_x] spawn genVEHinit; + } forEach _allVehicles; + +//Smallcounterattack reinforced by CSAT + if (_involveCSAT) then { + _originPosition = getMarkerPos "spawnCSAT"; + _originPosition set [2,300]; + for "_i" from 1 to 3 do { + _vehicleType = selectRandom opHeliTrans; + if (_i < 3) then { + _vehicleType = selectRandom ([opAir, (opAir - opHeliTrans)] select (_threatEvaluation > 10)); + }; -if (_isMarker) then { - waitUntil {sleep 5; (({!(captive _x)} count _allSoldiers) < ({captive _x} count _allSoldiers)) OR ({alive _x} count _allSoldiers < (round ((count _allSoldiers)/3))) OR (_marker in mrkAAF) OR (time > _attackDuration)}; + _timeOut = 0; + _spawnPosition = _originPosition findEmptyPosition [0,100,_vehicleType]; + while {_timeOut < 60} do { + if (count _spawnPosition > 0) exitWith {}; + _timeOut = _timeOut + 1; + _spawnPosition = _originPosition findEmptyPosition [0,100,_vehicleType]; + sleep 1; + }; + if (_spawnPosition isEqualTo []) then {_spawnPosition = _originPosition}; + + _vehicleData = [_originPosition, 0, _vehicleType, side_red] call bis_fnc_spawnvehicle; + _vehicle = _vehicleData select 0; + _vehicleGroup = _vehicleData select 2; + _redVehicles pushBack _vehicle; + _redGroups pushBack _vehicleGroup; + + if !(_vehicleType in opHeliTrans) then{ + _wp_01 = _vehicleGroup addWaypoint [_markerPos, 0]; + _wp_01 setWaypointType "SAD"; + [_vehicle,"CSAT Air Attack"] spawn inmuneConvoy; + } else { + {_x setBehaviour "CARELESS";} forEach units _vehicleGroup; + _groupType = [opGroup_Squad, side_red] call AS_fnc_pickGroup; + _group = [_originPosition, side_red, _groupType] call BIS_Fnc_spawnGroup; + {_x assignAsCargo _vehicle; _x moveInCargo _vehicle} forEach units _group; + _redGroups pushBack _group; + [_vehicle,"CSAT Air Transport"] spawn inmuneConvoy; + if ((_marker in bases) OR (_marker in aeropuertos) OR (random 10 < _threatEvaluation)) then { + {removebackpack _x; _x addBackpack "B_Parachute"} forEach units _group; + [_vehicle,_group,_marker,_threatEvaluation] spawn airdrop; + } + else { + if ((random 100 < 50) OR (_vehicleType == opHeliDismount)) then { + {_x disableAI "TARGET"; _x disableAI "AUTOTARGET"} foreach units _vehicleGroup; + _dismountPosition = []; + _dismountPosition = [_markerPos, 300, 500, 10, 0, 0.3, 0] call BIS_Fnc_findSafePos; + _dismountPosition set [2, 0]; + _helipad = createVehicle ["Land_HelipadEmpty_F", _dismountPosition, [], 0, "NONE"]; + _allVehicles pushBack _helipad; + + [_vehicleGroup, _originPosition, _dismountPosition, _marker, _group, 60*60, "air"] spawn AS_fnc_QRF_dismountTroops; + } else { + [_vehicleGroup, _originPosition, _markerPos, _marker, _group, 60*60] spawn AS_fnc_QRF_fastrope; + }; + }; + }; + sleep 15; + }; + { + _group = _x; + { + [_x] spawn CSATinit; _redSoldiers pushBack _x; + } forEach units _group; + } forEach _redGroups; - smallCAmrk = smallCAmrk - [_marker]; - publicVariable "smallCAmrk"; + { + [_x] spawn CSATVEHinit; + } forEach _redVehicles; + }; - waitUntil {sleep 1; not (spawner getVariable _marker)}; -} else { - waitUntil {sleep 1; !([distanciaSPWN,1,_markerPos,"BLUFORSpawn"] call distanceUnits)}; - smallCApos = smallCApos - [_marker]; - publicVariable "smallCApos"; -}; +//Retreat conditions + if (_isMarker) then { + waitUntil {sleep 5;( + + // + ({(alive _x) and (lifeState _x != "INCAPACITATED")} count _allSoldiers < (round ((count _allSoldiers)/3))) OR + + // + (_marker in mrkAAF) OR + + // + (time > _attackDuration) + ) + }; + + smallCAmrk = smallCAmrk - [_marker]; + publicVariable "smallCAmrk"; + + waitUntil {sleep 1; not (spawner getVariable _marker)}; + } else { + waitUntil {sleep 1; !([distanciaSPWN,1,_markerPos,"BLUFORSpawn"] call distanceUnits)}; + smallCApos = smallCApos - [_marker]; + publicVariable "smallCApos"; + }; -[_allGroups + _redGroups, _allSoldiers + _redSoldiers, _allVehicles + _redVehicles] spawn AS_fnc_despawnUnits; + [_allGroups + _redGroups, _allSoldiers + _redSoldiers, _allVehicles + _redVehicles] spawn AS_fnc_despawnUnits; diff --git a/AntistasiOfficial.Altis/CREATE/vehicleRemover.sqf b/AntistasiOfficial.Altis/CREATE/vehicleRemover.sqf index aa0d83e6..d85bcc0d 100644 --- a/AntistasiOfficial.Altis/CREATE/vehicleRemover.sqf +++ b/AntistasiOfficial.Altis/CREATE/vehicleRemover.sqf @@ -2,6 +2,7 @@ params ["_vehicle"]; sleep 5; +if( ({_x distance _vehicle < 100} count (allUnits select {(side _x == side_blue)})) > 1 ) exitWith {}; if (isNull _vehicle) exitWith {}; if (!alive _vehicle) then { diff --git a/AntistasiOfficial.Altis/Compositions/HQ_adds.sqf b/AntistasiOfficial.Altis/Compositions/HQ_adds.sqf index ce65de66..2c92af4b 100644 --- a/AntistasiOfficial.Altis/Compositions/HQ_adds.sqf +++ b/AntistasiOfficial.Altis/Compositions/HQ_adds.sqf @@ -69,6 +69,8 @@ call { _item = _itemType createVehicle [0,0,0]; _item setpos _spawnPos; +_item allowdamage false; +_item enablesimulation false; [_item,"moveObject"] remoteExec ["AS_fnc_addActionMP"]; [_item,"removeObj"] remoteExec ["AS_fnc_addActionMP"]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_FIAradio.sqf b/AntistasiOfficial.Altis/Functions/fn_FIAradio.sqf index fa6c9a24..8f78f3b8 100644 --- a/AntistasiOfficial.Altis/Functions/fn_FIAradio.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_FIAradio.sqf @@ -10,13 +10,13 @@ if (debug) then {_chance = 100}; if (random 100 < _chance) then { if (not revelar) then { - [["TaskSucceeded", ["", "AAF Comms Intercepted"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", "AAF Comms Intercepted"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; revelar = true; publicVariable "revelar"; [[], "revealToPlayer.sqf"] remoteExec ["execVM", [0,-2] select isDedicated, true]; }; } else { if (revelar) then { - [["TaskFailed", ["", "AAF Comms Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskFailed", ["", "AAF Comms Lost"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; revelar = false; publicVariable "revelar"; }; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_QRF_RTB.sqf b/AntistasiOfficial.Altis/Functions/fn_QRF_RTB.sqf index c074f8b4..24bdd93a 100644 --- a/AntistasiOfficial.Altis/Functions/fn_QRF_RTB.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_QRF_RTB.sqf @@ -17,5 +17,7 @@ while { !({alive _x} count units _vehGroup == 0) && !({_x distance2D _dest > 200 sleep 5; }; -waitUntil {sleep 1; ({alive _x} count units _vehGroup == 0) || ({_x distance2D _dest > 200} count units _vehGroup == 0)}; -{deleteVehicle _x} forEach units _vehGroup + [vehicle leader _vehGroup]; deleteGroup _vehGroup; \ No newline at end of file +// Stef 31/01 this code caused the vehicle despawn after the driver was killed! or when player managed to fastravel. +/* +waitUntil {sleep 5; ({alive _x} count units _vehGroup == 0)}; +{deleteVehicle _x} forEach units _vehGroup + [vehicle leader _vehGroup]; deleteGroup _vehGroup; */ \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_QRF_dismountTroops.sqf b/AntistasiOfficial.Altis/Functions/fn_QRF_dismountTroops.sqf index ea47d300..cdb80600 100644 --- a/AntistasiOfficial.Altis/Functions/fn_QRF_dismountTroops.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_QRF_dismountTroops.sqf @@ -19,7 +19,7 @@ _wp400 = _vehGroup addWaypoint [_dest, 0]; _wp400 setWaypointBehaviour "CARELESS"; _wp400 setWaypointSpeed "FULL"; _wp400 setWaypointType "TR UNLOAD"; -_wp400 setWaypointStatements ["true", "(vehicle this) land 'GET OUT'; [vehicle this] call smokeCoverAuto"]; +_wp400 setWaypointStatements ["true", "(vehicle this) land 'GET OUT';"]; _wp401 = _infGroup1 addWaypoint [_dest, 0]; _wp401 setWaypointType "GETOUT"; _wp401 synchronizeWaypoint [_wp400]; diff --git a/AntistasiOfficial.Altis/Functions/fn_addActionMP.sqf b/AntistasiOfficial.Altis/Functions/fn_addActionMP.sqf index 87c2e0a6..771697e7 100644 --- a/AntistasiOfficial.Altis/Functions/fn_addActionMP.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_addActionMP.sqf @@ -20,7 +20,7 @@ switch _type do { case "interrogar": {_object addAction [localize "STR_ACT_INTERROGATE", "AI\interrogar.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]}; case "capturar": {_object addAction [localize "STR_ACT_OFFERTOJOIN", "AI\capturar.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]}; case "buildHQ": {_object addAction [localize "STR_ACT_BUILDHQ", {[] spawn buildHQ},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]}; - case "seaport": {_object addAction ["Buy Boat", "REINF\buyBoat.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"];}; + case "seaport": {_object addAction [localize "STR_ACT_BUYB", "REINF\buyBoat.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"];}; case "steal": {_object addAction ["Steal Static", "REINF\stealStatic.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"];}; case "garage": { if (isMultiplayer) then { diff --git a/AntistasiOfficial.Altis/Functions/fn_changeRoleStef.sqf b/AntistasiOfficial.Altis/Functions/fn_changeRoleStef.sqf index fdc965aa..621ffc35 100644 --- a/AntistasiOfficial.Altis/Functions/fn_changeRoleStef.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_changeRoleStef.sqf @@ -2,52 +2,60 @@ params ["_text"]; switch (_text) do { -case "officer":{ - player setVariable ["class", "officer"]; -player setUnitTrait ["medic",false]; -player setUnitTrait ["engineer",false]; -player setUnitTrait ["camouflagecoef",0.8]; -player setUnitTrait ["audiblecoef",0.8]; -player setUnitTrait ["loadcoef",1.4];}; - - -case "ammobearer":{ - player setVariable ["class", "ammobearer"]; -player setUnitTrait ["medic",false]; -player setUnitTrait ["engineer",false]; -player setUnitTrait ["camouflagecoef",1.2]; -player setUnitTrait ["audiblecoef",1.2]; -player setUnitTrait ["loadcoef",0.6];}; - -case "autorifleman":{ -player setVariable ["class", "autorifleman"]; -player setUnitTrait ["medic",false]; -player setUnitTrait ["engineer",false]; -player setUnitTrait ["camouflagecoef",1]; -player setUnitTrait ["audiblecoef",1.2]; -player setUnitTrait ["loadcoef",0.8];}; - -case "marksman":{ - player setVariable ["class", "marksman"]; -player setUnitTrait ["medic",false]; -player setUnitTrait ["engineer",false]; -player setUnitTrait ["camouflagecoef",0.8]; -player setUnitTrait ["audiblecoef",1]; -player setUnitTrait ["loadcoef",1.2];}; - -case "engineer":{ - player setVariable ["class", "engineer"]; -player setUnitTrait ["engineer",true]; -player setUnitTrait ["medic",false]; -player setUnitTrait ["camouflagecoef",1]; -player setUnitTrait ["audiblecoef",1]; -player setUnitTrait ["loadcoef",1];}; - -case "medic":{ - player setVariable ["class", "medic"]; -player setUnitTrait ["medic",true]; -player setUnitTrait ["engineer",false]; -player setUnitTrait ["camouflagecoef",1]; -player setUnitTrait ["audiblecoef",1]; -player setUnitTrait ["loadcoef",1];}; + case "officer":{ + player setVariable ["class", "officer"]; + player setUnitTrait ["medic",false]; + player setUnitTrait ["engineer",false]; + player setUnitTrait ["camouflagecoef",0.8]; + player setUnitTrait ["audiblecoef",0.8]; + player setUnitTrait ["loadcoef",1.4]; + hint "Officer role.\n\nOfficers have bonuses on both silent sneaking and camouflage, but cannot carry too much items"; + }; + case "ammobearer":{ + player setVariable ["class", "ammobearer"]; + player setUnitTrait ["medic",false]; + player setUnitTrait ["engineer",false]; + player setUnitTrait ["camouflagecoef",1.2]; + player setUnitTrait ["audiblecoef",1.2]; + player setUnitTrait ["loadcoef",0.6]; + hint "Ammo bearer role.\n\nAmmo bearers have a great strenght but are easy to spot and easy to hear."; + }; + + case "autorifleman":{ + player setVariable ["class", "autorifleman"]; + player setUnitTrait ["medic",false]; + player setUnitTrait ["engineer",false]; + player setUnitTrait ["camouflagecoef",1]; + player setUnitTrait ["audiblecoef",1.2]; + player setUnitTrait ["loadcoef",0.8]; + hint "Autorifleman role.\n\nAutoriflemen have a slight bonus on carry capacity, but make too much noise when they move"; + }; + case "marksman":{ + player setVariable ["class", "marksman"]; + player setUnitTrait ["medic",false]; + player setUnitTrait ["engineer",false]; + player setUnitTrait ["camouflagecoef",0.8]; + player setUnitTrait ["audiblecoef",1]; + player setUnitTrait ["loadcoef",1.2]; + hint "Marksman role.\n\nMarksmen know well how to hide, but have less carry capacity."; + }; + case "engineer":{ + player setVariable ["class", "engineer"]; + player setUnitTrait ["engineer",true]; + player setUnitTrait ["medic",false]; + player setUnitTrait ["camouflagecoef",1]; + player setUnitTrait ["audiblecoef",1]; + player setUnitTrait ["loadcoef",1]; + hint "Engineer role.\n\nEngineers do not have any bonus or penalties, but have the ability to use Repair Kits for vehicle repair"; + }; + + case "medic":{ + player setVariable ["class", "medic"]; + player setUnitTrait ["medic",true]; + player setUnitTrait ["engineer",false]; + player setUnitTrait ["camouflagecoef",1]; + player setUnitTrait ["audiblecoef",1]; + player setUnitTrait ["loadcoef",1]; + hint "Medic role.\n\nMedics do not have any bonus or penalties, but have the ability to use Medikits for full health restoration"; + }; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_clearForest.sqf b/AntistasiOfficial.Altis/Functions/fn_clearForest.sqf index 4e4c17e0..eb6396d5 100644 --- a/AntistasiOfficial.Altis/Functions/fn_clearForest.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_clearForest.sqf @@ -10,5 +10,5 @@ if (!isMultiplayer) then { } foreach (nearestTerrainObjects [getMarkerPos guer_respawn,["tree","bush"],20]) }; -hint localize "STR_HINTS_CLEARED_FOREST"; +hint localize "STR_HINTS_GEN_CLEARED_FOREST"; flag_chopForest = true; publicVariable "flag_chopForest"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACE.sqf index 8e53ba34..8109f4a7 100644 --- a/AntistasiOfficial.Altis/Functions/fn_detectACE.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_detectACE.sqf @@ -2,10 +2,10 @@ activeACE = !isNil "ace_common_fnc_isModLoaded"; activeACEhearing = false; activeACEMedical = false; if (activeACE) then { - unlockedItems = unlockedItems + ["ACE_EarPlugs","ACE_RangeCard","ACE_Clacker","ACE_M26_Clacker","ACE_DeadManSwitch","ACE_DefusalKit","ACE_MapTools","ACE_Flashlight_MX991","ACE_Sandbag_empty","ACE_wirecutter","ACE_RangeTable_82mm","ACE_SpareBarrel","ACE_EntrenchingTool","ACE_Cellphone","ACE_ConcertinaWireCoil","ACE_CableTie","ACE_SpottingScope","ACE_Tripod","ACE_Chemlight_HiWhite","ACE_Chemlight_HiRed"]; + {unlockedItems pushBack _x} foreach ["ACE_EarPlugs","ACE_RangeCard","ACE_Clacker","ACE_M26_Clacker","ACE_DeadManSwitch","ACE_DefusalKit","ACE_MapTools","ACE_Flashlight_MX991","ACE_Sandbag_empty","ACE_wirecutter","ACE_RangeTable_82mm","ACE_EntrenchingTool","ACE_Cellphone","ACE_CableTie","ACE_SpottingScope","ACE_Tripod","ACE_Chemlight_HiWhite","ACE_Chemlight_HiRed"]; unlockedBackpacks pushBackUnique "ACE_TacticalLadder_Pack"; unlockedWeapons pushBackUnique "ACE_VMH3"; - unlockedMagazines = unlockedMagazines + ["ACE_HandFlare_White","ACE_HandFlare_Red"]; + {unlockedMagazines pushback _x} foreach ["ACE_HandFlare_White","ACE_HandFlare_Red"]; genItems = genItems + ["ACE_Kestrel4500","ACE_ATragMX"]; if ("ACE_Hearing" call ace_common_fnc_isModLoaded) then { @@ -16,12 +16,12 @@ if (activeACE) then { if (ace_medical_level == 1) then //ACE Basic medical system { - unlockedItems = unlockedItems + ["ACE_fieldDressing","ACE_bloodIV_500","ACE_bloodIV","ACE_epinephrine","ACE_morphine","ACE_bodyBag"]; + {unlockedItems pushback _x} foreach ["ACE_fieldDressing","ACE_bloodIV_500","ACE_bloodIV","ACE_epinephrine","ACE_morphine","ACE_bodyBag"]; }; if(ace_medical_level == 2) then //ACE Advanced medical system { - unlockedItems = unlockedItems + ["ACE_bloodIV_500","ACE_bloodIV","ACE_epinephrine","ACE_morphine","ACE_bodyBag","ACE_elasticBandage","ACE_bloodIV_250","ACE_packingBandage","ACE_personalAidKit","ACE_plasmaIV","ACE_plasmaIV_500","ACE_plasmaIV_250","ACE_salineIV","ACE_salineIV_500","ACE_salineIV_250","ACE_surgicalKit","ACE_tourniquet","ACE_adenosine"]; + {unlockedItems pushback _x} foreach ["ACE_bloodIV_500","ACE_bloodIV","ACE_epinephrine","ACE_morphine","ACE_bodyBag","ACE_elasticBandage","ACE_bloodIV_250","ACE_packingBandage","ACE_personalAidKit","ACE_plasmaIV","ACE_plasmaIV_500","ACE_plasmaIV_250","ACE_salineIV","ACE_salineIV_500","ACE_salineIV_250","ACE_surgicalKit","ACE_tourniquet","ACE_adenosine","ACE_atropine","ACE_quikclot"]; }; }; }; diff --git a/AntistasiOfficial.Altis/Functions/fn_fastTravel.sqf b/AntistasiOfficial.Altis/Functions/fn_fastTravel.sqf index 6dd831d4..e7ebd805 100644 --- a/AntistasiOfficial.Altis/Functions/fn_fastTravel.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_fastTravel.sqf @@ -71,17 +71,11 @@ _transportUnit = { _unit allowDamage false; }; _ftPos = _ftPos findEmptyPosition [1, 50, typeOf _unit]; - if !(isNil {_unit getVariable "ASunconscious"}) then { - if !(_unit getVariable "ASunconscious") then { - _ftPos = _ftPos findEmptyPosition [1, 50, typeOf _unit]; - _unit setPosATL _ftPos; - sleep 0.1; // findEmptyPosition needs time or it returns a non-empty position :( by Golias - }; - } else { - _ftPos = _ftPos findEmptyPosition [1, 50, typeOf _unit]; - _unit setPosATL _ftPos; - sleep 0.1; // findEmptyPosition needs time or it returns a non-empty position :( by Golias - }; + if !([_unit] call AS_fnc_isUnconscious) then { + _ftPos = _ftPos findEmptyPosition [1, 50, typeOf _unit]; + _unit setPosATL _ftPos; + sleep 0.1; // findEmptyPosition needs time or it returns a non-empty position :( by Golias + }; }; targetPosition = []; diff --git a/AntistasiOfficial.Altis/Functions/fn_findRoadSpot.sqf b/AntistasiOfficial.Altis/Functions/fn_findRoadSpot.sqf index 402e9671..4af82ff9 100644 --- a/AntistasiOfficial.Altis/Functions/fn_findRoadSpot.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_findRoadSpot.sqf @@ -1,4 +1,4 @@ -params ["_origin","_destination",["_maxRadius",250]]; +params ["_origin","_destination",["_maxRadius",500]]; private ["_roadA","_roadB","_roadC","_targetRoad","_spawnPos"]; [[],false,20] params ["_roadArray","_roadsFound","_radius"]; diff --git a/AntistasiOfficial.Altis/Functions/fn_getNearbyCities.sqf b/AntistasiOfficial.Altis/Functions/fn_getNearbyCities.sqf index 92abbede..6fe819fe 100644 --- a/AntistasiOfficial.Altis/Functions/fn_getNearbyCities.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_getNearbyCities.sqf @@ -1,4 +1,4 @@ -params ["_marker", ["_min", 2000],["_max", 5000]]; +params ["_marker", ["_min", 2000],["_max", 2500]]; private ["_position", "_cities"]; _position = getMarkerPos _marker; diff --git a/AntistasiOfficial.Altis/Functions/fn_groundTransport.sqf b/AntistasiOfficial.Altis/Functions/fn_groundTransport.sqf index ae607183..cae229ed 100644 --- a/AntistasiOfficial.Altis/Functions/fn_groundTransport.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_groundTransport.sqf @@ -54,14 +54,14 @@ _wpV1_1 = _vehicleGroup addWaypoint [_dismountPosition, 0]; _wpV1_1 setWaypointBehaviour "CARELESS"; _wpV1_1 setWaypointSpeed "FULL"; _wpV1_1 setWaypointType "TR UNLOAD"; -_wpV1_1 setWaypointStatements ["true", "(vehicle this) land 'GET OUT'; [vehicle this] call smokeCoverAuto"]; +_wpV1_1 setWaypointStatements ["true", "(vehicle this) land 'GET OUT';"]; if (_isArmed) then { _wpV1_2 = _vehicleGroup addWaypoint [_targetPosition, 1]; _wpV1_2 setWaypointType "SAD"; _wpV1_2 setWaypointBehaviour "COMBAT"; - [_vehicle] spawn smokeCover; + //[_vehicle] spawn smokeCover; _vehicle allowCrewInImmobile true; [_vehicle,"APC"] spawn inmuneConvoy; }; diff --git a/AntistasiOfficial.Altis/Functions/fn_healCamp.sqf b/AntistasiOfficial.Altis/Functions/fn_healCamp.sqf index dfea54c1..5582ca29 100644 --- a/AntistasiOfficial.Altis/Functions/fn_healCamp.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_healCamp.sqf @@ -2,7 +2,7 @@ params ["_position"]; { if ((side _x == side_blue) and (_x distance _position < 20)) then { - if (activeACE) then { + if (activeACEMedical) then { _x setVariable ["ACE_isUnconscious",false,true]; [_x, _x] call ace_medical_fnc_treatmentAdvanced_fullHeal; } else { diff --git a/AntistasiOfficial.Altis/Functions/fn_initPlayerEH.sqf b/AntistasiOfficial.Altis/Functions/fn_initPlayerEH.sqf index c748f2d3..d2798b7d 100644 --- a/AntistasiOfficial.Altis/Functions/fn_initPlayerEH.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_initPlayerEH.sqf @@ -89,7 +89,7 @@ player addEventHandler ["GetInMan", { _owner = _vehicle getVariable ["vehOwner",getPlayerUID player]; if (_owner != (getPlayerUID player)) then { if ({getPlayerUID _x == _owner} count (units group player) == 0) then { - hint localize "STR_HINTS_EH_VEH_GROUP"; + hint localize "STR_HINTS_GEN_EH_VEH_GROUP"; moveOut _unit; _exit = true; }; @@ -131,7 +131,7 @@ player addEventHandler ["GetOutMan",{ // If Jeroen's arsenal isn't active, display unlock requirements if !(activeJNA) then { caja addEventHandler ["ContainerOpened", { - hint format [localize "STR_HINTS_INIT_MEMBER_GEAR", + hint format [localize "STR_HINTS_GEN_INIT_MEMBER_GEAR", ["weapons"] call AS_fnc_getUnlockRequirement, ["magazines"] call AS_fnc_getUnlockRequirement, ["vests"] call AS_fnc_getUnlockRequirement, @@ -210,7 +210,7 @@ if (isMultiplayer) then { params ["_container","_player"]; if !([_player] call isMember) then { _player setPos position petros; - hint format [localize "STR_HINTS_INIT_NOTMEMBER_GEAR", + hint format [localize "STR_HINTS_GEN_INIT_NOTMEMBER_GEAR", ["weapons"] call AS_fnc_getUnlockRequirement, ["magazines"] call AS_fnc_getUnlockRequirement, ["vests"] call AS_fnc_getUnlockRequirement, @@ -224,7 +224,7 @@ if (isMultiplayer) then { if !([_this select 0] call isMember) then { if ((_this select 1 == caja) OR ((_this select 0) distance caja < 3)) then { _control = true; - hint format [localize "STR_HINTS_INIT_NOTMEMBER_GEAR", + hint format [localize "STR_HINTS_GEN_INIT_NOTMEMBER_GEAR", ["weapons"] call AS_fnc_getUnlockRequirement, ["magazines"] call AS_fnc_getUnlockRequirement, ["vests"] call AS_fnc_getUnlockRequirement, diff --git a/AntistasiOfficial.Altis/Functions/fn_init_hq.sqf b/AntistasiOfficial.Altis/Functions/fn_init_hq.sqf index 382a7bc8..613cb2e1 100644 --- a/AntistasiOfficial.Altis/Functions/fn_init_hq.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_init_hq.sqf @@ -131,7 +131,6 @@ //cajaVeh cajaVeh allowDamage false; cajaVeh addAction [localize "str_act_healRepair", "healandrepair.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; - cajaVeh addAction [localize "str_act_moveAsset", "moveObject.sqf",nil,0,false,true,"","(_this == Slowhand)",5]; cajaVeh addAction [localize "str_act_buyVehicle", { nul = createDialog "vehicle_option" @@ -143,8 +142,8 @@ "", "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" ]; - cajaVeh addAction ["Buy Boat", "REINF\buyBoat.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; - + cajaVeh addAction [localize "STR_ACT_BUYB", "REINF\buyBoat.sqf",nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; + cajaVeh addAction [localize "str_act_moveAsset", "moveObject.sqf",nil,0,false,true,"","(_this == Slowhand)",5]; ////////////////////////////////////////////////////////////////////////////////////////////////////////// //campFire fuego allowDamage false; diff --git a/AntistasiOfficial.Altis/Functions/fn_isUnconscious.sqf b/AntistasiOfficial.Altis/Functions/fn_isUnconscious.sqf new file mode 100644 index 00000000..0e976dca --- /dev/null +++ b/AntistasiOfficial.Altis/Functions/fn_isUnconscious.sqf @@ -0,0 +1,18 @@ +/* + * Author: IrLED + * Checks if the player is unconscious + * + * Arguments: + * player: OBJECT + * + * Return Value: + * BOOLEAN - true if the object is unconscious + * + * Public: No + */ +params [["_player", objNull]]; +if (isNull _player) then { + true; +} else { + (_player getVariable ["ASunconscious",false]) || (_player getVariable ["ACE_isUnconscious",false]); +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_keyDownMain.sqf b/AntistasiOfficial.Altis/Functions/fn_keyDownMain.sqf index 72484fa9..08087c30 100644 --- a/AntistasiOfficial.Altis/Functions/fn_keyDownMain.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_keyDownMain.sqf @@ -1,6 +1,6 @@ params ["_control", "_key", "_shift", "_ctrl", "_alt"]; -if (player getVariable ["ASunconscious",false]) exitWith {false}; +if ([player] call AS_fnc_isUnconscious) exitWith {false}; if (player getVariable ["owner",player] != player) exitWith {false}; call { diff --git a/AntistasiOfficial.Altis/Functions/fn_lootCorpses.sqf b/AntistasiOfficial.Altis/Functions/fn_lootCorpses.sqf index 97f57e17..d524ef74 100644 --- a/AntistasiOfficial.Altis/Functions/fn_lootCorpses.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_lootCorpses.sqf @@ -19,7 +19,7 @@ private ["_corpses", "_corpse", "_foundCorpse", "_params", "_timeOut", "_contain #define DIS 50 if ((!alive _unit) or (isPlayer _unit) or (vehicle _unit != _unit) or (player != leader group player) or (captive _unit)) exitWith {}; -if (_unit getVariable "ASunconscious") exitWith {}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {}; if (_unit getVariable ["ASmedHelping", false]) exitWith {_unit groupChat "I cannot grab gear right now, I'm busy treating someone's wounds."}; if (_unit getVariable ["AS_storingGear", false]) exitWith {_unit groupChat "I am currently storing my gear."}; diff --git a/AntistasiOfficial.Altis/Functions/fn_markerUpdate.sqf b/AntistasiOfficial.Altis/Functions/fn_markerUpdate.sqf index d698ae25..8f4f7347 100644 --- a/AntistasiOfficial.Altis/Functions/fn_markerUpdate.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_markerUpdate.sqf @@ -5,26 +5,26 @@ if (markerColor _mrkD != guer_marker_colour) then {_mrkD setMarkerColor guer_mar call { if (_marker in puestos) exitWith { - _mrkD setMarkerText format ["%2 Outpost: %1", count (garrison getVariable _marker), A3_Str_PLAYER]; + _mrkD setMarkerText format [localize "STR_GL_MAP_OP1", count (garrison getVariable _marker), A3_Str_PLAYER]; }; if (_marker in bases) exitWith { - _mrkD setMarkerText format ["%2 Base: %1", count (garrison getVariable _marker), A3_Str_BLUE]; + _mrkD setMarkerText format [localize "STR_GL_MAP_MB1", count (garrison getVariable _marker), A3_Str_BLUE]; _mrkD setMarkerType guer_marker_type; }; if (_marker in power) exitWith { - _mrkD setMarkerText format ["Power Plant: %1", count (garrison getVariable _marker)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_PP"+": %1", count (garrison getVariable _marker)]; }; if (_marker in recursos) exitWith { - _mrkD setMarkerText format ["Resource: %1", count (garrison getVariable _marker)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_RS"+": %1", count (garrison getVariable _marker)]; }; if (_marker in aeropuertos) exitWith { - _mrkD setMarkerText format ["%2 Airport: %1", count (garrison getVariable _marker), A3_Str_BLUE]; + _mrkD setMarkerText format [localize "STR_GL_MAP_AP1", count (garrison getVariable _marker), A3_Str_BLUE]; _mrkD setMarkerType guer_marker_type; }; if (_marker in fabricas) exitWith { - _mrkD setMarkerText format ["Factory: %1", count (garrison getVariable _marker)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_FAC"+": %1", count (garrison getVariable _marker)]; }; if (_marker in puertos) exitWith { - _mrkD setMarkerText format ["Sea Port: %1", count (garrison getVariable _marker)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_SP"+": %1", count (garrison getVariable _marker)]; }; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/fn_setUnconscious.sqf b/AntistasiOfficial.Altis/Functions/fn_setUnconscious.sqf new file mode 100644 index 00000000..eec47af2 --- /dev/null +++ b/AntistasiOfficial.Altis/Functions/fn_setUnconscious.sqf @@ -0,0 +1,18 @@ +/* + * Author: IrLED + * Sets the object/player Unconscious + * + * Arguments: + * player: OBJECT + * state: BOOLEAN true - set unit unconscious, false(default)- set unit conscious + * + * Return Value: + * None + * + * Public: No + */ +params [["_player", objNull], ["_state", false]]; +if (isNull _player) exitWith {}; +[_player, _state] remoteExec ["setUnconscious", _player]; +_player setVariable ["ASunconscious", _state, true]; +_player setVariable ["ACE_isUnconscious", _state, true]; diff --git a/AntistasiOfficial.Altis/Functions/fn_storeGear.sqf b/AntistasiOfficial.Altis/Functions/fn_storeGear.sqf index 7ebd4c0d..8ec37769 100644 --- a/AntistasiOfficial.Altis/Functions/fn_storeGear.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_storeGear.sqf @@ -6,7 +6,7 @@ private ["_timeOut"]; _unit setVariable ["AS_cannotComply", true, true]; if ((!alive _unit) or (isPlayer _unit) or (vehicle _unit != _unit) or (player != leader group player) or (captive _unit)) exitWith {}; -if (_unit getVariable ["ASunconscious", false]) exitWith {}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {}; if (_unit getVariable ["ASmedHelping", false]) exitWith {_unit groupChat "I cannot go salvaging right now, I'm busy treating someone's wounds."}; if (_unit getVariable ["AS_storingGear", false] && !(_combined)) exitWith {diag_log "SG: unit already storing gear."}; diff --git a/AntistasiOfficial.Altis/Functions/fn_transferGear.sqf b/AntistasiOfficial.Altis/Functions/fn_transferGear.sqf index 6b1c63cd..12860709 100644 --- a/AntistasiOfficial.Altis/Functions/fn_transferGear.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_transferGear.sqf @@ -5,6 +5,7 @@ params ["_originContainer","_targetContainer"]; private ["_magazineCargo","_weaponsItemsCargo","_itemCargo","_backpackCargo","_containers","_item","_updated"]; _weaponsItemsCargo = weaponsItemsCargo _originContainer; +if (isnil "_weaponsItemsCargo") exitwith {}; _magazineCargo = magazineCargo _originContainer; _itemCargo = itemCargo _originContainer; _backpackCargo = backpackCargo _originContainer; diff --git a/AntistasiOfficial.Altis/Functions/functionList.hpp b/AntistasiOfficial.Altis/Functions/functionList.hpp index 942ea4a1..8f19508e 100644 --- a/AntistasiOfficial.Altis/Functions/functionList.hpp +++ b/AntistasiOfficial.Altis/Functions/functionList.hpp @@ -142,6 +142,8 @@ class AS { class addGearToCrate {}; class transferGear {}; class resetHQ {}; + class isUnconscious {}; + class setUnconscious {}; }; class headless { diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf index dc0cb92f..7b929cea 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf @@ -1,113 +1,113 @@ /* By: Jeroen Notenbomer - overwrites default arsenal script, original arsenal needs to be running first in order to initilize the display. + overwrites default arsenal script, original arsenal needs to be running first in order to initilize the display. fuctions: ["Preload"] call jn_fnc_arsenal; - preloads the arsenal like the default arsenal but it doesnt have "BIS_fnc_endLoadingScreen" so you dont have errors + preloads the arsenal like the default arsenal but it doesnt have "BIS_fnc_endLoadingScreen" so you dont have errors ["customInit", "arsanalDisplay"] call jn_fnc_arsenal; - overwrites all functions in the arsenal with JNA ones. + overwrites all functions in the arsenal with JNA ones. */ #include "script_component.hpp" #include "\A3\ui_f\hpp\defineDIKCodes.inc" #include "\A3\Ui_f\hpp\defineResinclDesign.inc" -#define FADE_DELAY 0.15 +#define FADE_DELAY 0.15 #define MODLIST ["","curator","kart","heli","mark","expansion","expansionpremium"] #define GETDLC\ - {\ - private _dlc = "";\ - private _addons = configsourceaddonlist _this;\ - if (count _addons > 0) then {\ - private _mods = configsourcemodlist (configfile >> "CfgPatches" >> _addons select 0);\ - if (count _mods > 0) then {\ - _dlc = _mods select 0;\ - };\ - };\ - _dlc\ - } + {\ + private _dlc = "";\ + private _addons = configsourceaddonlist _this;\ + if (count _addons > 0) then {\ + private _mods = configsourcemodlist (configfile >> "CfgPatches" >> _addons select 0);\ + if (count _mods > 0) then {\ + _dlc = _mods select 0;\ + };\ + };\ + _dlc\ + } #define ADDMODICON\ - {\ - private _dlcName = _this call GETDLC;\ - if (_dlcName != "") then {\ - _ctrlList lbsetpictureright [_lbAdd,(modParams [_dlcName,["logo"]]) param [0,""]];\ - _modID = _modList find _dlcName;\ - if (_modID < 0) then {_modID = _modList pushback _dlcName;};\ - _ctrlList lbsetvalue [_lbAdd,_modID];\ - };\ - }; + {\ + private _dlcName = _this call GETDLC;\ + if (_dlcName != "") then {\ + _ctrlList lbsetpictureright [_lbAdd,(modParams [_dlcName,["logo"]]) param [0,""]];\ + _modID = _modList find _dlcName;\ + if (_modID < 0) then {_modID = _modList pushback _dlcName;};\ + _ctrlList lbsetvalue [_lbAdd,_modID];\ + };\ + }; #define IDCS_LEFT\ - IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,\ - IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,\ - IDC_RSCDISPLAYARSENAL_TAB_HANDGUN,\ - IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,\ - IDC_RSCDISPLAYARSENAL_TAB_VEST,\ - IDC_RSCDISPLAYARSENAL_TAB_BACKPACK,\ - IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR,\ - IDC_RSCDISPLAYARSENAL_TAB_GOGGLES,\ - IDC_RSCDISPLAYARSENAL_TAB_NVGS,\ - IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS,\ - IDC_RSCDISPLAYARSENAL_TAB_MAP,\ - IDC_RSCDISPLAYARSENAL_TAB_GPS,\ - IDC_RSCDISPLAYARSENAL_TAB_RADIO,\ - IDC_RSCDISPLAYARSENAL_TAB_COMPASS,\ - IDC_RSCDISPLAYARSENAL_TAB_WATCH + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,\ + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,\ + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN,\ + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,\ + IDC_RSCDISPLAYARSENAL_TAB_VEST,\ + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK,\ + IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR,\ + IDC_RSCDISPLAYARSENAL_TAB_GOGGLES,\ + IDC_RSCDISPLAYARSENAL_TAB_NVGS,\ + IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS,\ + IDC_RSCDISPLAYARSENAL_TAB_MAP,\ + IDC_RSCDISPLAYARSENAL_TAB_GPS,\ + IDC_RSCDISPLAYARSENAL_TAB_RADIO,\ + IDC_RSCDISPLAYARSENAL_TAB_COMPASS,\ + IDC_RSCDISPLAYARSENAL_TAB_WATCH #define IDCS_RIGHT\ - IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC,\ - IDC_RSCDISPLAYARSENAL_TAB_ITEMACC,\ - IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE,\ - IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD,\ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,\ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL,\ - IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW,\ - IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT,\ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC\ - -#define IDCS [IDCS_LEFT,IDCS_RIGHT] + IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC,\ + IDC_RSCDISPLAYARSENAL_TAB_ITEMACC,\ + IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE,\ + IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD,\ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,\ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL,\ + IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW,\ + IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT,\ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC\ + +#define IDCS [IDCS_LEFT,IDCS_RIGHT] #define INITTYPES\ - _types = [];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,["Uniform"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_VEST,["Vest"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_BACKPACK,["Backpack"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR,["Headgear"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_GOGGLES,["Glasses"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_NVGS,["NVGoggles"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS,["Binocular","LaserDesignator"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,["AssaultRifle","MachineGun","SniperRifle","Shotgun","Rifle","SubmachineGun"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,["Launcher","MissileLauncher","RocketLauncher"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_HANDGUN,["Handgun"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_MAP,["Map"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_GPS,["GPS","UAVTerminal"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_RADIO,["Radio"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_COMPASS,["Compass"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_WATCH,["Watch"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_FACE,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_VOICE,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_INSIGNIA,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC,["AccessorySights"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMACC,["AccessoryPointer"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE,["AccessoryMuzzle"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD,["AccessoryBipod"]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT,[]];\ - _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC,["FirstAidKit","Medikit","MineDetector","Toolkit"]]; + _types = [];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,["Uniform"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_VEST,["Vest"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_BACKPACK,["Backpack"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR,["Headgear"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_GOGGLES,["Glasses"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_NVGS,["NVGoggles"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS,["Binocular","LaserDesignator"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,["AssaultRifle","MachineGun","SniperRifle","Shotgun","Rifle","SubmachineGun"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,["Launcher","MissileLauncher","RocketLauncher"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_HANDGUN,["Handgun"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_MAP,["Map"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_GPS,["GPS","UAVTerminal"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_RADIO,["Radio"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_COMPASS,["Compass"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_WATCH,["Watch"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_FACE,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_VOICE,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_INSIGNIA,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC,["AccessorySights"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMACC,["AccessoryPointer"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE,["AccessoryMuzzle"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD,["AccessoryBipod"]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT,[]];\ + _types set [IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC,["FirstAidKit","Medikit","MineDetector","Toolkit"]]; #define STATS_WEAPONS\ - ["reloadtime","dispersion","maxzeroing","hit","mass","initSpeed"],\ - [true,true,false,true,false,false] + ["reloadtime","dispersion","maxzeroing","hit","mass","initSpeed"],\ + [true,true,false,true,false,false] #define STATS_EQUIPMENT\ - ["passthrough","armor","maximumLoad","mass"],\ - [false,false,false,false] + ["passthrough","armor","maximumLoad","mass"],\ + [false,false,false,false] #define ERROR if !(_item in _disabledItems) then {_disabledItems set [count _disabledItems,_item];}; @@ -119,2566 +119,2574 @@ if!(_mode in ["draw3D","ListCurSel"])then{TRACE_1("jna call ",_mode);}; switch _mode do { - /////////////////////////////////////////////////////////////////////////////////////////// Externaly called - case "Preload": { - private ["_data"]; - - INITTYPES; - _data = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]; - - _configArray = ( - ("isclass _x" configclasses (configfile >> "cfgweapons")) + - ("isclass _x" configclasses (configfile >> "cfgvehicles")) + - ("isclass _x" configclasses (configfile >> "cfgglasses")) - ); - - { - _class = _x; - _className = configname _x; - _scope = if (isnumber (_class >> "scopeArsenal")) then {getnumber (_class >> "scopeArsenal")} else {getnumber (_class >> "scope")}; - _isBase = if (isarray (_x >> "muzzles")) then {(_className call bis_fnc_baseWeapon == _className)} else {true}; //-- Check if base weapon (true for all entity types) - if (_scope == 2 && {gettext (_class >> "model") != ""} && _isBase) then { - private ["_weaponType","_weaponTypeCategory"]; - _weaponType = (_className call bis_fnc_itemType); - _weaponTypeCategory = _weaponType select 0; - if (_weaponTypeCategory != "VehicleWeapon") then { - private ["_weaponTypeSpecific","_weaponTypeID"]; - _weaponTypeSpecific = _weaponType select 1; - _weaponTypeID = -1; - { - if (_weaponTypeSpecific in _x) exitwith {_weaponTypeID = _foreachindex;}; - } foreach _types; - if (_weaponTypeID >= 0) then { - private _items = _data select _weaponTypeID; - _items set [count _items,configname _class]; - }; - }; - }; - } foreach _configArray; - - //--- Magazines - Put and Throw - _magazinesThrowPut = []; - { - private ["_weapons","_tab","_magazines"]; - _weapon = _x select 0; - _tab = _x select 1; - _magazines = []; - { - { - private ["_mag"]; - _mag = _x; - if ({_x == _mag} count _magazines == 0) then { - private ["_cfgMag"]; - _magazines set [count _magazines,_mag]; - _cfgMag = configfile >> "cfgmagazines" >> _mag; - if (getnumber (_cfgMag >> "scope") == 2 || getnumber (_cfgMag >> "scopeArsenal") == 2) then { - private ["_items"]; - _items = _data select _tab; - _items pushback configname _cfgMag; - _magazinesThrowPut pushback tolower _mag; - }; - }; - } foreach getarray (_x >> "magazines"); - } foreach ("isclass _x" configclasses (configfile >> "cfgweapons" >> _weapon)); - } foreach [ - ["throw",IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW], - ["put",IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT] - ]; - - //--- Magazines - { - if (getnumber (_x >> "type") > 0 && {(getnumber (_x >> "scope") == 2 || getnumber (_x >> "scopeArsenal") == 2) && {!(tolower configname _x in _magazinesThrowPut)}}) then { - private _items = _data select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; - _items pushback configname _x; - }; - } foreach ("isclass _x" configclasses (configfile >> "cfgmagazines")); - - missionnamespace setvariable ["bis_fnc_arsenal_data",_data]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// Externaly called - case "Open": { - diag_log "JNA open arsenal"; - jna_dataList = _this select 0; - private _object = missionnamespace getVariable ["jna_object",objNull]; - ["Open",[nil,_object,player,false]] call bis_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "CustomInit":{ - - _display = _this select 0; - ["ReplaceBaseItems",[_display]] call jn_fnc_arsenal; - ["customEvents",[_display]] call jn_fnc_arsenal; - ["CreateListAll", [_display]] call jn_fnc_arsenal; - ['showMessage',[_display,"Jeroen (Not) Limited Arsenal"]] call jn_fnc_arsenal; - ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; - - ["jn_fnc_arsenal"] call BIS_fnc_endLoadingScreen; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "customEvents":{ - _display = _this select 0; - - //Keys - _display displayRemoveAllEventHandlers "keydown"; - _display displayAddEventHandler ["keydown",{['KeyDown',_this] call jn_fnc_arsenal;}]; - - //--- UI event handlers - _ctrlButtonClose = _display displayctrl (getnumber (configfile >> "RscDisplayArsenal" >> "Controls" >> "ControlBar" >> "controls" >> "ButtonClose" >> "idc")); - _ctrlButtonClose ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonClose ctrladdeventhandler ["buttonclick",{["buttonClose",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - - _ctrlButtonLoad = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONLOAD; - _ctrlButtonLoad ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonLoad ctrladdeventhandler ["buttonclick",{["buttonLoad",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - - _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; - _ctrlTemplateButtonOK ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlTemplateButtonOK ctrladdeventhandler ["buttonclick",{["buttonTemplateOK",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}];//todo remove - - _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; - _ctrlTemplateButtonDelete ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlTemplateButtonDelete ctrladdeventhandler ["buttonclick",{["buttonTemplateDelete",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - - _ctrlButtonExport = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONEXPORT; - _ctrlButtonExport ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonExport ctrlSetText "TODO"; - - _ctrlButtonImport = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONIMPORT; - _ctrlButtonImport ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonImport ctrlSetText "Default gear"; - _ctrlButtonImport ctrlSetTooltip "Add default items like radio and medical supplies"; - _ctrlButtonImport ctrladdeventhandler ["buttonclick",{["buttonDefaultGear",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - - _ctrlButtonSave = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONSAVE; - _ctrlButtonSave ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonSave ctrladdeventhandler ["buttonclick",{["buttonSave",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - - _ctrlButtonRandom = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONRANDOM; - _ctrlButtonRandom ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlButtonRandom ctrladdeventhandler ["buttonclick",{["buttonInvToJNA",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; - _ctrlButtonRandom ctrlSetText "To crate"; - _ctrlButtonRandom ctrlSetTooltip "Move items from crate inventory to arsenal"; - - _ctrlArrowLeft = _display displayctrl IDC_RSCDISPLAYARSENAL_ARROWLEFT; - _ctrlArrowLeft ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlArrowLeft ctrladdeventhandler ["buttonclick",{["buttonCargo",[ctrlparent (_this select 0),-1]] call jn_fnc_arsenal;}]; - - _ctrlArrowRight = _display displayctrl IDC_RSCDISPLAYARSENAL_ARROWRIGHT; - _ctrlArrowRight ctrlRemoveAllEventHandlers "buttonclick"; - _ctrlArrowRight ctrladdeventhandler ["buttonclick",{["buttonCargo",[ctrlparent (_this select 0),+1]] call jn_fnc_arsenal;}]; - - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - _ctrlTemplateValue ctrlRemoveAllEventHandlers "lbdblclick"; - _ctrlTemplateValue ctrladdeventhandler ["lbdblclick",{["buttonTemplateOK",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}];//todo remove - - //disable annoying deselecting of tabs when you misclick - _ctrlMouseArea = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEAREA; - _ctrlMouseArea ctrlRemoveEventHandler ["mousebuttonclick",0]; - - _ctrlButtonInterface = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONINTERFACE; - _ctrlButtonInterface ctrlRemoveAllEventHandlers "buttonclick"; - - //--- Menus - _sortValues = uinamespace getvariable ["jn_fnc_arsenal_sort",[]]; - { - _idc = _x; - - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); - _ctrlList ctrlRemoveAllEventHandlers "LBSelChanged"; - _ctrlList ctrlAddEventHandler ["MouseButtonUp", {uiNamespace setvariable ['jna_userInput',true];}]; - _ctrlList ctrlAddEventHandler ["LBSelChanged", format [" - if(uiNamespace getvariable ['jna_userInput',false])then{ - ['SelectItem',[ctrlparent (_this select 0),(_this select 0),%1]] call jn_fnc_arsenal; - uiNamespace setvariable ['jna_userInput',false]; - }; - ",_idc]]; - - - _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); - _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); - { - _x ctrlRemoveAllEventHandlers "buttonclick"; - if (_idc in [IDCS_LEFT]) then { - _x ctrladdeventhandler ["buttonclick",format ["['TabSelectLeft',[ctrlparent (_this select 0),%1],true] call jn_fnc_arsenal;",_idc]]; - } else { - _x ctrladdeventhandler ["buttonclick",format ["['TabSelectRight',[ctrlparent (_this select 0),%1],true] call jn_fnc_arsenal;",_idc]]; - }; - } foreach [_ctrlIcon,_ctrlTab]; - - //sort - _sort = _sortValues param [_idc,0]; - _ctrlSort = _display displayctrl (IDC_RSCDISPLAYARSENAL_SORT + _idc); - _ctrlSort ctrlRemoveAllEventHandlers "lbselchanged"; - - _ctrlSort lbsetcursel _sort; - _sortValues set [_idc,_sort]; - - } foreach IDCS; - uinamespace setvariable ["jn_fnc_arsenal_sort",_sortValues]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ReplaceBaseItems":{ - //replace magazines with partial filled, just like it was before entering the box, entering the arsanal refilles all ammo - _mags = missionNamespace getVariable "jna_magazines_init";//get ammo list from before arsenal started - - { - if!(isnil "_x")then{ - _container = switch _foreachindex do{ - case 0: {uniformContainer player;}; - case 1: {vestContainer player;}; - case 2: {backpackContainer player;}; - }; - clearMagazineCargo _container; - { - _item = _x select 0; - _amount = _x select 1; - _container addMagazineAmmoCargo [_item,1,_amount]; - }forEach _x; - }; - } forEach _mags; - - //replace all items to base type - _loadout = getUnitLoadout player;//this crap doesnt save weapon attachments in containers - - _unifrom = _loadout select 3; - _vest = _loadout select 4; - _backpack = _loadout select 5; - - _primaryweapon = _loadout select 0; - _secondaryweapon = _loadout select 1; - _handgunweapon = _loadout select 2; - - _primaryweapon set [0,((_primaryweapon select 0) call BIS_fnc_baseWeapon)]; - _secondaryweapon set [0,((_secondaryweapon select 0) call BIS_fnc_baseWeapon)]; - _handgunweapon set [0,((_handgunweapon select 0) call BIS_fnc_baseWeapon)]; - _backpack set [0,((_backpack select 0) call BIS_fnc_basicBackpack)]; - - _uniformitems = [_unifrom,1,[]] call BIS_fnc_param; - _vestitems = [_vest,1,[]] call BIS_fnc_param; - _backpackitems = [_backpack,1,[]] call BIS_fnc_param; - { - { - _item = [_x,0,[]] call BIS_fnc_param; - _itemname = [_item,0,""] call BIS_fnc_param; - if(typeName _item isequalto "ARRAY")then { - if(typeName _itemname isequalto "STRING")then { - if ( isClass (configFile >> "CFGweapons" >> _itemname)) then { - _item set [0,(_itemname call bis_fnc_baseWeapon)]; - }; - } - }; - }foreach _x; - }foreach [_uniformitems,_vestitems,_backpackitems]; //loop items in backpack - player setUnitLoadout _loadout; - - //re-add attachmets, saved before opening arsenal - { - _container = _x; - { - _container addItemCargo [_x,1]; - } forEach ((missionNamespace getVariable "jna_containerCargo_init") select _foreachindex); - } forEach [uniformContainer player,vestContainer player,backpackContainer player]; - }; - - - - - - - - - /////////////////////////////////////////////////////////////////////////////////////////// - case "TabSelectLeft": { - _display = _this select 0; - _index = _this select 1; - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - //create list - ["UpdateListGui",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; - - - //add current selected items - _inventory_player = ["ListCurSel",[_index]] call jn_fnc_arsenal; - ["UpdateItemAdd",[_index,_inventory_player,0]] call jn_fnc_arsenal; - - - //TODO sort (add select current item to sort?) - - ["ListSelectCurrent",[_display,_index]] call jn_fnc_arsenal; - - //show selected, disable others - { - _idc = _x; - _active = _idc == _index; - - { - _ctrlList = _display displayctrl (_x + _idc); - _ctrlList ctrlenable _active; - _ctrlList ctrlsetfade ([1,0] select _active); - _ctrlList ctrlcommit FADE_DELAY; - } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; - - _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); - _ctrlTab ctrlenable !_active; - - if (_active) then { - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); - _ctrlLineTabLeft = _display displayctrl IDC_RSCDISPLAYARSENAL_LINETABLEFT; - _ctrlLineTabLeft ctrlsetfade 0; - _ctrlTabPos = ctrlposition _ctrlTab; - _ctrlLineTabPosX = (_ctrlTabPos select 0) + (_ctrlTabPos select 2) - 0.01; - _ctrlLineTabPosY = (_ctrlTabPos select 1); - _ctrlLineTabLeft ctrlsetposition [ - safezoneX,//_ctrlLineTabPosX, - _ctrlLineTabPosY, - (ctrlposition _ctrlList select 0) - safezoneX,//_ctrlLineTabPosX, - ctrlposition _ctrlTab select 3 - ]; - _ctrlLineTabLeft ctrlcommit 0; - ctrlsetfocus _ctrlList; - }; - - _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); - //_ctrlIcon ctrlsetfade ([1,0] select _active); - _ctrlIcon ctrlshow _active; - _ctrlIcon ctrlenable !_active; - - _ctrlIconBackground = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICONBACKGROUND + _idc); - _ctrlIconBackground ctrlshow _active; - } foreach [IDCS_LEFT]; - - //Show left list background - { - _ctrl = _display displayctrl _x; - _ctrl ctrlsetfade 0; - _ctrl ctrlcommit FADE_DELAY; - } foreach [ - IDC_RSCDISPLAYARSENAL_LINETABLEFT, - IDC_RSCDISPLAYARSENAL_FRAMELEFT, - IDC_RSCDISPLAYARSENAL_BACKGROUNDLEFT - ]; - - //--- Weapon attachments - _showItems = _index in [IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,IDC_RSCDISPLAYARSENAL_TAB_HANDGUN]; - _fadeItems = [1,0] select _showItems; - { - _idc = _x; - _ctrl = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); - _ctrl ctrlenable _showItems; - _ctrl ctrlsetfade _fadeItems; - _ctrl ctrlcommit 0;//FADE_DELAY; - { - _ctrl = _display displayctrl (_x + _idc); - _ctrl ctrlenable _showItems; - _ctrl ctrlsetfade _fadeItems; - _ctrl ctrlcommit FADE_DELAY; - } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; - } foreach [ - IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, - IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD - ]; - - //Select right tab - if (_showItems) then { - ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC]] call jn_fnc_arsenal; - }; - - //--- Containers - _showCargo = _index in [IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,IDC_RSCDISPLAYARSENAL_TAB_VEST,IDC_RSCDISPLAYARSENAL_TAB_BACKPACK]; - _fadeCargo = [1,0] select _showCargo; - { - _idc = _x; - _ctrl = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); - _ctrl ctrlenable _showCargo; - _ctrl ctrlsetfade _fadeCargo; - _ctrl ctrlcommit 0;//FADE_DELAY; - { - _ctrlList = _display displayctrl (_x + _idc); - _ctrlList ctrlenable _showCargo; - _ctrlList ctrlsetfade _fadeCargo; - _ctrlList ctrlcommit FADE_DELAY; - } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED]; - } foreach [ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, - IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, - IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC - ]; - _ctrl = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - _ctrl ctrlsetfade _fadeCargo; - _ctrl ctrlcommit FADE_DELAY; - if (_showCargo) then { - //update weigth - _load = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; - }; - - _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - _ctrlLoadCargo progresssetposition _load; - - ['TabSelectRight',[_display, IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]] call jn_fnc_arsenal; - }; - - - //Show right list background - _showRight = _showItems || _showCargo; - _fadeRight = [1,0] select _showRight; - { - _ctrl = _display displayctrl _x; - _ctrl ctrlsetfade _fadeRight; - _ctrl ctrlcommit FADE_DELAY; - } foreach [ - IDC_RSCDISPLAYARSENAL_LINETABRIGHT, - IDC_RSCDISPLAYARSENAL_FRAMERIGHT, - IDC_RSCDISPLAYARSENAL_BACKGROUNDRIGHT - ]; - - //["updateItemInfo",[_display,_ctrlList, _index]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "TabSelectRight": { - private ["_ctrlList","_index","_cursel"]; - _display = _this select 0; - _index = _this select 1; - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - _type = (ctrltype _ctrlList == 102); - - - _inventory = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)then{ - - _usableMagazines = []; - { - _cfgWeapon = configfile >> "cfgweapons" >> _x; - { - _cfgMuzzle = if (_x == "this") then {_cfgWeapon} else {_cfgWeapon >> _x}; - { - _usableMagazines pushBackUnique _x; - } foreach getarray (_cfgMuzzle >> "magazines"); - } foreach getarray (_cfgWeapon >> "muzzles"); - } foreach (weapons player - ["Throw","Put"]); - - - - { - { - _usableMagazines pushBackUnique _x; - } forEach (getarray (configfile >> "cfgweapons" >> _x >> "magazines")); - }forEach [primaryweapon player, secondaryweapon player, handgunweapon player]; - - //loop all magazines and find usable - _magazines = []; - { - _itemAvailable = _x select 0; - _amountAvailable = _x select 1; - - if(_itemAvailable in _usableMagazines)then{ - _magazines set [count _magazines,[_itemAvailable, _amountAvailable]]; - }; - } forEach (jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL); - //return - _magazines; - }else{ - (jna_dataList select _index); - }; - - ["CreateList",[ _display, _index, _inventory]] call jn_fnc_arsenal; - switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMACC; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD: { - _ctrlListPrimaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON); - _ctrlListSecondaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON); - _ctrlListHandgun = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN); - - _weaponItems = switch true do { - case (ctrlenabled _ctrlListPrimaryWeapon): {primaryweaponitems player}; - case (ctrlenabled _ctrlListSecondaryWeapon): {secondaryweaponitems player}; - case (ctrlenabled _ctrlListHandgun): {handgunitems player}; - default {["","","",""]}; - }; - _accIndex = [ - IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, - IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD - ] find _index; - - _item = _weaponItems select _accIndex; - ["UpdateItemAdd",[_index,_item,0]] call jn_fnc_arsenal; - ["ListSelectCurrent",[_display,_index,_item]] call jn_fnc_arsenal; - }; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC:{ - _ctrlListUniform = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM); - _ctrlListVest = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST); - _ctrlListBackPack = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK); - - _items = switch true do { - case (ctrlenabled _ctrlListUniform): {uniformitems player;}; - case (ctrlenabled _ctrlListVest): {vestitems player;}; - case (ctrlenabled _ctrlListBackPack): {backpackitems player;}; - default {_items = [];}; - }; - - _itemsUnique = []; - { - _type = _x call jn_fnc_arsenal_itemType; - if(_type == _index || (_type == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL && _index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG))then{ - _itemsUnique pushBackUnique _x; - }; - }foreach _items; - - _inventory = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)then{ - { - { - if(_x in _itemsUnique)then{ - ["UpdateItemAdd",[_index,_x,0]] call jn_fnc_arsenal; - } - } forEach (getarray (configfile >> "cfgweapons" >> _x >> "magazines")); - }forEach [primaryweapon player, secondaryweapon player, handgunweapon player]; - }else{ - { - ["UpdateItemAdd",[_index,_x,0]] call jn_fnc_arsenal; - } forEach _itemsUnique; - }; - }; - }; - - ["UpdateListGui",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; - - - - _ctrFrameRight = _display displayctrl IDC_RSCDISPLAYARSENAL_FRAMERIGHT; - _ctrBackgroundRight = _display displayctrl IDC_RSCDISPLAYARSENAL_BACKGROUNDRIGHT; - - { - _idc = _x; - _active = _idc == _index; - { - _ctrlList = _display displayctrl (_x + _idc); - _ctrlList ctrlenable _active; - _ctrlList ctrlsetfade ([1,0] select _active); - _ctrlList ctrlcommit FADE_DELAY; - } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; - - _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); - _ctrlTab ctrlenable (!_active && ctrlfade _ctrlTab == 0); - - if (_active) then { - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); - _ctrlLineTabRight = _display displayctrl IDC_RSCDISPLAYARSENAL_LINETABRIGHT; - _ctrlLineTabRight ctrlsetfade 0; - _ctrlTabPos = ctrlposition _ctrlTab; - _ctrlLineTabPosX = (ctrlposition _ctrlList select 0) + (ctrlposition _ctrlList select 2); - _ctrlLineTabPosY = (_ctrlTabPos select 1); - _ctrlLineTabRight ctrlsetposition [ - _ctrlLineTabPosX, - _ctrlLineTabPosY, - safezoneX + safezoneW - _ctrlLineTabPosX,//(_ctrlTabPos select 0) - _ctrlLineTabPosX + 0.01, - ctrlposition _ctrlTab select 3 - ]; - _ctrlLineTabRight ctrlcommit 0; - ctrlsetfocus _ctrlList; - - _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - _ctrlListPos = ctrlposition _ctrlList; - _ctrlListPos set [3,(_ctrlListPos select 3) + (ctrlposition _ctrlLoadCargo select 3)]; - { - _x ctrlsetposition _ctrlListPos; - _x ctrlcommit 0; - } foreach [_ctrFrameRight,_ctrBackgroundRight]; - - if ( - _idc in [ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, - IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, - IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC - ] - ) then { - //to reselect same right-tab when switching between uniform vest backpack - uiNamespace setVariable ["jna_lastCargoListSelected", _idc]; - - //--- Update counts for all items in the list - _container = switch true do { - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM))): {uniformContainer player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST))): {vestContainer player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK))): {backpackContainer player}; - default {""}; - }; - - _items = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{ - itemCargo _container; - }else{ - magazinesAmmoCargo _container; - }; - - for "_l" from 0 to ((lnbsize _ctrlList select 0) - 1) do { - _dataStr = _ctrlList lnbdata [_l,0]; - _data = call compile _dataStr; - _item = _data select 0; - _amount = 0; - { - _itemX = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{_x}else{_x select 0}; - _amountX = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{1}else{_x select 1}; - if(_itemX == _item)then{ - _amount = _amount + _amountX; - } - } forEach _items; - - _ctrlList lnbsettext [[_l,2],str (_amount)]; - }; - ["SelectItemRight",[_display,_ctrlList,_idc]] call jn_fnc_arsenal; - }; - }; - - _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); - //_ctrlIcon ctrlenable false; - _ctrlIcon ctrlshow _active; - _ctrlIcon ctrlenable (!_active && ctrlfade _ctrlTab == 0); - - _ctrlIconBackground = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICONBACKGROUND + _idc); - _ctrlIconBackground ctrlshow _active; - } foreach [IDCS_RIGHT]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "CreateListAll":{ - _display = _this select 0; - _inventory_box_all = jna_dataList; - { - _inventory_box = _x; - _index = _foreachindex; - if(_index in [IDCS_LEFT])then{ - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - lbclear _ctrlList; - //create list with avalable items - ["CreateList",[_display,_index,_inventory_box]] call jn_fnc_arsenal; - }; - } forEach _inventory_box_all; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ListCurSel":{ - private _index = _this select 0; - - _return = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: { - primaryWeapon player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: { - secondaryweapon player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { - handgunweapon player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: { - uniform player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: { - vest player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { - backPack player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { - headgear player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: { - goggles player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_NVGS: { - hmd player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS: { - binocular player; - }; - case IDC_RSCDISPLAYARSENAL_TAB_RADIO:{ - _return1 = ""; - { - if(_index == _x call jn_fnc_arsenal_itemType)exitwith{_return1 = _x;}; - }foreach assignedItems player; - - //TFAR FIX - _radioName = getText(configfile >> "CfgWeapons" >> _return1 >> "tf_parent"); - if!(_radioName isEqualTo "")then{_return1 = _radioName;}; - - _return1; - }; - case IDC_RSCDISPLAYARSENAL_TAB_MAP; - case IDC_RSCDISPLAYARSENAL_TAB_GPS; - case IDC_RSCDISPLAYARSENAL_TAB_COMPASS; - case IDC_RSCDISPLAYARSENAL_TAB_WATCH:{ - _return1 = ""; - { - if(_index == _x call jn_fnc_arsenal_itemType)exitwith{_return1 = _x;}; - }foreach assignedItems player; - _return1; - }; - }; - _return; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ListSelectCurrent":{ - _display = _this select 0; - _index = _this select 1; - _item = _this select 2; - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - - - if(isnil "_item")then{ - _item = ["ListCurSel",[_index]] call jn_fnc_arsenal; - }; - - for "_l" from 0 to (lbsize _ctrlList - 1) do { - _dataStr = _ctrlList lbdata _l; - _data = call compile _dataStr; - _item_l = _data select 0; - if (_item isEqualTo _item_l) exitwith { - _ctrlList lbsetcursel _l; - }; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "CreateList":{ - _display = _this select 0; - _index = _this select 1; - _inventory = _this select 2; - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - _type = (ctrltype _ctrlList == 102); - if _type then{ - lnbclear _ctrlList; - }else{ - lbclear _ctrlList; - - // add empty - if!( - _index in [ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, - IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, - IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC - ])then{ - - //add empty - _emptyString = (" Qty: Name: "); - if( - _index in [ - IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_HANDGUN - ] - )then{ - _emptyString = (" ") + _emptyString; //little longer for bigger icons - }; - _lbAdd = _ctrlList lbadd _emptyString; - _data = str ["",0,""]; - _ctrlList lbsetdata [_lbAdd,_data]; - }; - }; - - //fill - { - _item = _x select 0; - _amount = _x select 1; - ["CreateItem",[_display,_ctrlList,_index,_item,_amount]] call jn_fnc_arsenal; - } forEach _inventory; - - //TODO better sorting of scopes gray items? - ["ListSort",[_display,_index]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ListSort":{ - _display = _this select 0; - _index = _this select 1; - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); - _type = (ctrltype _ctrlList == 102); - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "UpdateListGui":{ - _display = _this select 0; - _ctrlList = _this select 1; - _index = _this select 2; - - _type = (ctrltype _ctrlList == 102); - _rows = if _type then{ (lnbsize _ctrlList select 0) - 1}else{lbsize _ctrlList - 1}; - for "_l" from 0 to _rows do { - ["UpdateItemGui",[_display,_ctrlList,_index,_l]] call jn_fnc_arsenal; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// GLOBAL - case "UpdateItemAdd":{ - params ["_index","_item","_amount",["_updateDataList",false]]; - - //update datalist - if(_updateDataList)then{ - jna_dataList set [_index, [jna_dataList select _index, [_item, _amount]] call jn_fnc_arsenal_addToArray]; - }; - - private _display = uiNamespace getVariable ["arsanalDisplay","No display"]; - - if (typeName _display == "STRING") exitWith {}; - if(str _display isEqualTo "No display")exitWith{}; - - if(_item isEqualTo "")exitWith{}; - - if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL)then{ - if (ctrlEnabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)))then{ - _index = IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - }; - }; - - private _indexList = _index; - if(UINamespace getVariable ["jn_type","arsenal"] isEqualTo "vehicleArsenal")then{ - _indexList = [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL] select (_index in [IDCS_LEFT]); - }; - - private _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _indexList); - private _type = (ctrltype _ctrlList == 102); - private _cursel = if _type then{-1}else{lbCurSel _ctrlList}; - - if((_index in [IDCS_RIGHT]) && !(ctrlEnabled _ctrlList)) exitWith{}; - - _l_found = -1; - _rowSize = if _type then{((lnbSize _ctrlList select 0) - 1);}else{(lbsize _ctrlList - 1);}; - for "_l" from 0 to _rowSize do { - _dataStr = if _type then{_ctrlList lnbdata [_l,0]}else{_ctrlList lbdata _l}; - _dataCurrent = call compile _dataStr; - _itemCurrent = _dataCurrent select 0; - _amountCurrent = _dataCurrent select 1; - _displayNameCurrent = _dataCurrent select 2; - if(_item isEqualTo _itemCurrent)exitWith{ - _l_found = _l; - if(_amount == -1 || {_amountCurrent == -1})then{ - _amount = -1; - }else{ - _amount =_amountCurrent + _amount; - }; - _data = str [_item,_amount,_displayNameCurrent]; - if _type then{_ctrlList lnbsetdata [[_l,0],_data]}else{_ctrlList lbsetdata [_l,_data]}; - }; - }; - - - if(_l_found == -1)then{ - ["CreateItem",[_display,_ctrlList,_index,_item,_amount]] call jn_fnc_arsenal; - _l_found = _rowSize + 1; - }; - ["UpdateItemGui",[_display,_ctrlList,_index,_l_found]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// GLOBAL - case "UpdateItemRemove":{ - params ["_index","_item","_amount",["_updateDataList",false]]; - - //update datalist - if(_updateDataList)then{ - jna_dataList set [_index, [jna_dataList select _index, [_item, _amount]] call jn_fnc_arsenal_removeFromArray]; - }; - - private _display = uiNamespace getVariable ["arsanalDisplay","No display"]; - - if (typeName _display == "STRING") exitWith {}; - if(str _display isEqualTo "No display")exitWith{}; - if(_item isEqualTo "")exitWith{}; - - if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL)then{ - if (ctrlEnabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)))then{ - _index = IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - }; - }; - - //when used by vehicleArsenal; - _indexList = _index; - if(UINamespace getVariable ["jn_type","arsenal"] isEqualTo "vehicleArsenal")then{ - _indexList = [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL] select (_index in [IDCS_LEFT]); - }; - - private _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _indexList); - private _type = ctrltype _ctrlList == 102; - private _cursel = if _type then{-1}else{lbCurSel _ctrlList}; - - if((_index in [IDCS_RIGHT]) && !(ctrlEnabled _ctrlList)) exitWith{}; - - _l_found = -1; - _rowSize = if _type then{((lnbSize _ctrlList select 0) - 1);}else{(lbsize _ctrlList - 1);}; - for "_l" from 0 to _rowSize do { - _dataStr = if _type then{_ctrlList lnbdata [_l,0]}else{_ctrlList lbdata _l}; - _dataCurrent = call compile _dataStr; - _itemCurrent = _dataCurrent select 0; - _amountCurrent = _dataCurrent select 1; - _displayNameCurrent = _dataCurrent select 2; - if(_item isEqualTo _itemCurrent)exitWith{ - _l_found = _l; - if(_amount == -1)then{ - _amount = 0;//unlimited remove - }else{ - if(_amountCurrent == -1)then{ - _amount = -1; - }else{ - _amount = _amountCurrent - _amount; - if(_amount<0)then{_amount = 0;}; - } - }; - - if(_amount <= 0 && { - if _type then{ - (parseNumber (_ctrlList lnbText [_l,2]) == 0); - }else{ - (_l != _cursel); - } - })then{ - if(_type)then{_ctrlList lnbDeleteRow _l;}else{_ctrlList lbDelete _l;}; - if(_cursel > _l)then{ - //reselect item if a item above was removed - _ctrlList lbSetCurSel (_cursel-1); - }; - }else{ - _data = str [_item,_amount,_displayNameCurrent]; - if _type then{_ctrlList lnbsetdata [[_l,0],_data]}else{_ctrlList lbsetdata [_l,_data]}; - ["UpdateItemGui",[_display,_ctrlList,_index,_l_found]] call jn_fnc_arsenal; - }; - }; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "CreateItem":{ - private _display = _this select 0; - private _ctrlList = _this select 1; - private _index = _this select 2; - private _item = _this select 3; if(_item isEqualTo "")exitWith{}; - private _amount = _this select 4; - - private _xCfg = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {configfile >> "cfgvehicles" >> _item}; - case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: {configfile >> "cfgglasses" >> _item}; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT: {configfile >> "cfgmagazines" >> _item}; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC: {configfile >> "cfgweapons" >> _item}; - default {configfile >> "cfgweapons" >> _item}; - }; - private _displayName = gettext (_xCfg >> "displayName"); - private _data = str [_item,_amount,_displayName]; - private _lbAdd = 0; - - if (ctrltype _ctrlList == 102) then { - _lbAdd = _ctrlList lnbaddrow ["",_displayName,str 0]; - _ctrlList lnbsetdata [[_lbAdd,0],_data]; - _ctrlList lnbsetpicture [[_lbAdd,0],gettext (_xCfg >> "picture")]; - - _mass = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{ - getnumber (_xCfg >> "itemInfo" >> "mass"); - }else{ - getnumber (_xCfg >> "mass"); - }; - _ctrlList lnbsetvalue [[_lbAdd,0], _mass]; - - }else{ - _lbAdd = _ctrlList lbadd _displayName; - _ctrlList lbsetdata [_lbAdd,_data]; - _ctrlList lbsetpicture [_lbAdd,gettext (_xCfg >> "picture")]; - - //add magazine icon to weapons - if(_index in [ - IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_HANDGUN - ])then{ - _ammo_logo = getText(configfile >> "RscDisplayArsenal" >> "Controls" >> "TabCargoMag" >> "text"); - _ctrlList lbsetpictureright [_lbAdd,_ammo_logo]; - }; - - //grayout attachments - if(_index in [ - IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, - IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD - ])then{ - _weapon = switch true do { - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON))): {primaryweapon player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON))): {secondaryweapon player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN))): {handgunweapon player}; - default {""}; - }; - _compatibleItems = _weapon call bis_fnc_compatibleItems; - if not (({_x == _item} count _compatibleItems > 0) || _item isequalto "")exitwith{ - _ctrlList lbSetColor [_lbAdd, [1,1,1,0.25]]; - }; - }; - - }; - - //["UpdateItemGui",[_display,_index,_lbAdd]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "UpdateItemGui":{ - _display = _this select 0; - _ctrlList = _this select 1; - _index = _this select 2; - _l = _this select 3; - - _type = (ctrltype _ctrlList == 102); - _cursel = lbcursel _ctrlList; - _dataStr = if _type then{_ctrlList lnbData [_l,0]}else{_ctrlList lbdata _l}; - _data = call compile _dataStr; - _item = _data select 0; - _amount = _data select 1; - _displayName = _data select 2; - - - - //skip empty - if(_item isEqualTo "")exitWith{}; - - //update name with counters and ammocounters (need to be done after sorting) - //TODO change to define - _checkAmount = { - private["_amount","_suffix","_prefix","_amountString"]; - _amount = _this; - - - if(_amount == -1)exitWith{"[ ∞ ] ";}; - - _suffix = ""; - _prefix = ""; - if(_amount > 999)then{ - _amount = round(_amount/1000);_suffix="k"; - _prefix = switch true do{ - case(_amount>=100):{_amount = 99; "";}; - case(_amount>=10):{"";}; - case(_amount>=0):{"0";}; - }; - }else{ - _prefix = switch true do{ - case(_amount>=100):{"";}; - case(_amount>=10):{"0";}; - case(_amount>=0):{"00";}; - }; - }; - ("[ " + _prefix + (str _amount) + _suffix + " ] "); - }; - - //grayout items for non members, right items are done in selectRight - _min = jna_minItemMember select _index; - _grayout = false; - if ((_amount <= _min) AND (_amount != -1) AND !([player] call isMember)) then{_grayout = true}; - - _color = [1,1,1,1]; - if(_grayout)then{ - _color = [1,1,0,0.60]; - if _type then{ - _ctrlList lnbSetColor [[_l,1], _color]; - _ctrlList lnbSetColor [[_l,2], _color]; - }else{ - _ctrlList lbSetColor [_l, _color]; - }; - }; - - - //ammmo icon for weapons - _ammo_logo = getText(configfile >> "RscDisplayArsenal" >> "Controls" >> "TabCargoMag" >> "text"); - if _type then{ - _text = ((_amount call _checkAmount) + _displayName); - if(_index in [ - IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_HANDGUN - ])then{ - _text = " " + _text; - }; - _ctrlList lnbSetText [[_l,1],_text]; - - }else{ - _ctrlList lbSetText [_l, ((_amount call _checkAmount) + _displayName)]; - - //update ammo counter color on weapons - if(_index in [ - IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, - IDC_RSCDISPLAYARSENAL_TAB_HANDGUN - ])then{ - //check how many useable mags there are - _ammoTotal = 0; - //_compatableMagazines = server getVariable [format ["%1_mags", _item],[]];//TODO marker for changed entry - scopeName "updateWeapon";//TODO marker for changed entry - _compatableMagazines = (getarray (configfile >> "cfgweapons" >> _item >> "magazines"));//TODO marker for changed entry - { - private ["_amount"]; - _magName = _x select 0; - _amount = _x select 1; - //if(_amount == -1)exitWith{_ammoTotal = -1};//TODO marker for changed entry - if (_magName in _compatableMagazines) then { - if (_amount == -1) then {_ammoTotal = -1; breakTo "updateWeapon"};//TODO marker for changed entry - _ammoTotal = _ammoTotal + _amount; - } - } forEach (jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL); - - //change color; - _colorMult = switch (_item call BIS_fnc_itemType select 1) do{ - case "AssaultRifle": {1500}; - case "Handgun": {400}; - case "MachineGun": {4000}; - case "Shotgun": {300}; - case "Rifle": {1500}; - case "SubmachineGun": {800}; - case "SniperRifle": {200}; - Default {20};//launchers - }; - _colorMult = _ammoTotal / _colorMult; - if(_colorMult > 1 || _ammoTotal == -1)then{_colorMult = 1;}; - _red = -0.6*_colorMult+0.8; - _green = 0.6*_colorMult+0.2; - _ctrlList lbSetPictureRightColorSelected [_l,[_red,_green,0.3,1]]; - _ctrlList lbSetPictureRightColor [_l,[_red,_green,0.3,1]]; - - _strAmount = switch true do { - case (_amount == 0): { - "Looks like I am the only one using this today" - }; - case (_amount > 50): { - "More than enough for a whole army" - }; - case (_amount > 10): { - "Many of these left" - }; - case (_amount > 3): { - "Some of these left" - }; - case (_amount > 1): { - "If I want one I need to take it before some one else does" - }; - case (_amount == 1): { - "The last one in the box" - }; - case (_amount == -1): {//TODO marker for changed entry - "More than enough for a whole army" - }; - default{""}; - }; - - _strAmmo = switch true do { - case (_colorMult == 0): { - ", but there is no ammo for it" - }; - case (_colorMult > 0.9): { - ", and there is enough ammo for it" - }; - case (_colorMult > 0.2): { - ", and there is still some ammo for it" - }; - case (_colorMult > 0): { - ", but there are only a few shots for it" - }; - default{""}; - }; - - _ctrlList lbsettooltip [_l, (_strAmount + _strAmmo)]; - }; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "updateItemInfo": { - _display = _this select 0; - _ctrlList = _this select 1; - _index = _this select 2; - - - _cursel = lbcursel _ctrlList; - _type = (ctrltype _ctrlList == 102); - _dataStr = if _type then{_ctrlList lnbData [_cursel,0]}else{_ctrlList lbdata _cursel}; - _data = call compile _dataStr; - _item = _data select 0; - - - //--- Calculate load - _ctrlLoad = _display displayctrl IDC_RSCDISPLAYARSENAL_LOAD; - _ctrlLoad progresssetposition load player; - - //update weight - _load = switch true do { - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM))): {loaduniform player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST))): {loadvest player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK))): {loadbackpack player}; - default {0}; - }; - - _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - _ctrlLoadCargo progresssetposition _load; - - _itemCfg = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {configfile >> "cfgvehicles" >> _item}; - case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: {configfile >> "cfgglasses" >> _item}; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC: {configfile >> "cfgmagazines" >> _item}; - default {configfile >> "cfgweapons" >> _item}; - }; - - ["ShowItemInfo",[_itemCfg]] call jn_fnc_arsenal; - ["ShowItemStats",[_itemCfg]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "SelectItem": { - params ["_display","_ctrlList","_index"]; - - private _cursel = lbcursel _ctrlList; - private _type = (ctrltype _ctrlList == 102); - private _dataStr = if _type then{_ctrlList lnbData [_cursel,0]}else{_ctrlList lbdata _cursel}; - private _data = call compile _dataStr; - private _item = _data select 0; - private _amount = _data select 1; - private _displayName = _data select 2; - - private _oldItem = ""; - - private _ctrlListPrimaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON); - private _ctrlListSecondaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON); - private _ctrlListHandgun = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN); - - //check if weapon is unlocked - private _min = jna_minItemMember select _index; - if ((_amount <= _min) AND (_amount != -1) AND (_item !="") AND !([player] call isMember) AND !_type) exitWith{ - ['showMessage',[_display,"We are low on this item, only members may use it"]] call jn_fnc_arsenal; - - //reset _cursel - if(missionnamespace getvariable ["jna_reselect_item",true])then{//prefent loop when unavalable item was worn and a other unavalable item was selected - missionnamespace setvariable ["jna_reselect_item",false]; - ["ListSelectCurrent",[_display,_index]] call jn_fnc_arsenal; - missionnamespace setvariable ["jna_reselect_item",true]; - }; - }; - - switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM; - case IDC_RSCDISPLAYARSENAL_TAB_VEST; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { - _oldItem = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{ uniform player;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{ vest player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{ backpack player;}; - }; - - if (_oldItem != _item) then { - - _container = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{uniformContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{vestContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{ backpackContainer player;}; - }; - - _magazines = magazinesAmmoCargo _container; - - _items = [""] + (itemCargo _container); - { - _items = _items + [ - (_x select 0), //weapon - (_x select 1), //attachments - (_x select 2), - (_x select 3), - (_x select 5) //bipod - ]; - } forEach (weaponsItemsCargo _container); - _items = _items - [""]; - - - //remove container - switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{removeUniform player;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{removeVest player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{removebackpack player;}; - }; - - [_index, _oldItem] call jn_fnc_arsenal_addItem; - - if (_item != "") then{ - switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player forceaddUniform _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player addVest _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player addbackpack _item;}; - }; - - //container changed - _container = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{ uniformContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{vestContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{backpackContainer player;}; - }; - - [_index, _item] call jn_fnc_arsenal_removeItem; - }; - { - _canAdd = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player canAddItemToUniform _x;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player canAddItemToVest _x;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player canAddItemToBackpack _x;}; - }; - if(_canAdd)then{ - switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player addItemToUniform _x;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player addItemToVest _x;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player additemtobackpack _x;}; - }; - - }else{ - _indexItem = _x call jn_fnc_arsenal_itemType; - if!(_indexItem in [ - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, - IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, - IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, - IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT - ])then{ - [_indexItem, _x] call jn_fnc_arsenal_addItem; - }; - }; - } foreach _items; - - //add back ammo, if possible - { - _magazine = _x select 0; - _count = _x select 1; - - _canAdd = switch _index do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player canAddItemToUniform _magazine;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player canAddItemToVest _magazine;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player canAddItemToBackpack _magazine;}; - }; - if(_canAdd)then{ - _container addMagazineAmmoCargo [_magazine,1,_count]; - }else{ - _indexItem = _magazine call jn_fnc_arsenal_itemType; - [_indexItem, _magazine, _count] call jn_fnc_arsenal_addItem; - }; - }forEach _magazines; - - }; - _lastCargoListSelected = uiNamespace getVariable ["jna_lastCargoListSelected", IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]; - ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]] call jn_fnc_arsenal; - }; - case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { - _oldItem = headgear player; - if (_oldItem != _item) then { - removeheadgear player; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then{ - player addheadgear _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - diag_log ["_oldItem",_oldItem,_item]; - - }; - case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: { - _oldItem = goggles player; - if (_oldItem != _item) then { - removeGoggles player; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then{ - player addGoggles _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_NVGS:{ - _oldItem = hmd player; - if (_oldItem != _item) then { - player removeweapon _oldItem; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then{ - player addweapon _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS: { - _oldItem = binocular player; - if (_oldItem != _item) then { - player removeweapon _oldItem; - [_index,_oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then{ - player addweapon _item; - _magazines = getarray (configfile >> "cfgweapons" >> _item >> "magazines"); - if (count _magazines > 0) then { - _mag = (_magazines select 0); - if([jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, _mag] call jn_fnc_arsenal_itemCount > 0)then{ - if((player canAddItemToUniform _mag)||(player canAddItemToVest _mag)||(player canAddItemToBackpack _mag))then{ - player addmagazine _mag; - [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, _mag]call jn_fnc_arsenal_removeItem; - }else{ - titleText["I can't take batteries, I have no space for it", "PLAIN"]; - }; - }else{ - titleText["Shit there are no more batteries", "PLAIN"]; - }; - }; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { - _oldItem = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweapon player}; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweapon player}; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunweapon player}; - default {""}; - }; - - if (_oldItem != _item) then { - _oldAttachments = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweaponitems player}; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweaponitems player}; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunitems player}; - default {""}; - }; - _oldAttachments = _oldAttachments - [""]; - - //remove magazines - _oldMagazines = magazinesAmmoFull player;//["30Rnd_65x39_caseless_mag",30,false,-1,"Uniform"] - _loadout = getUnitLoadout player; - {player removeMagazine _x} forEach magazines player; - - - //remove weapon - player removeweapon _oldItem; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - - //add new weapon - if (_item != "") then { - //give player new weapon - [player,_item,0] call bis_fnc_addweapon; - [_index, _item]call jn_fnc_arsenal_removeItem; - - //try adding back attachments - { - switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {player addPrimaryWeaponItem _x}; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {player addSecondaryWeaponItem _x}; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {player addhandgunitem _x}; - default {""}; - }; - }foreach _oldAttachments; - - }; - - //re-add magazines - _loadoutNew = getUnitLoadout player; - _loadout set[_index, _loadoutNew select _index]; - player setUnitLoadout _loadout; - _oldCompatableMagazines = getarray (configfile >> "cfgweapons" >> _oldItem >> "magazines"); - _newCompatableMagazines = getarray (configfile >> "cfgweapons" >> _item >> "magazines"); - { - _magazine = _x select 0; - _amount = _x select 1; - _loaded = _x select 2; - _location = _x select 3; - if _loaded then{ - if ((_location == 1 && _index == IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON) || - (_location == 4 && _index == IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON) || - (_location == 2 && _index == IDC_RSCDISPLAYARSENAL_TAB_HANDGUN)) - then{ - player addweaponitem [_item,[_magazine,_amount]]; - }; - }else{ - if(_magazine in _oldCompatableMagazines)then{ - if!(_magazine in _newCompatableMagazines)then{ - player removemagazine _magazine; - }; - }; - }; - }forEach _oldMagazines; - - _updateMagazineList = []; - { - _magazine = _x select 0; - _amount = _x select 1; - _indexItem = _magazine call jn_fnc_arsenal_itemType; - - [_indexItem, _magazine, _amount] call jn_fnc_arsenal_addItem;//TODO - }forEach(_oldMagazines - magazinesAmmoFull player); - - _newAttachments = switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweaponitems player}; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweaponitems player}; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunitems player}; - default {""}; - }; - _newAttachments = _newAttachments - [""]; - - //save and load attachments - { - private["_idcList","_type"]; - _type = _x call bis_fnc_itemType; - _idcList = switch (_type select 1) do { - case "AccessoryMuzzle": {IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE}; - case "AccessoryPointer": {IDC_RSCDISPLAYARSENAL_TAB_ITEMACC}; - case "AccessorySights": {IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC}; - case "AccessoryBipod": {IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD}; - default {-1}; - }; - if(_idcList != -1)then{[_idcList, _x] call jn_fnc_arsenal_addItem}; - }foreach _oldAttachments - _newAttachments; - { - private["_idcList","_type"]; - _type = _x call bis_fnc_itemType; - _idcList = switch (_type select 1) do { - case "AccessoryMuzzle": {IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE}; - case "AccessoryPointer": {IDC_RSCDISPLAYARSENAL_TAB_ITEMACC}; - case "AccessorySights": {IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC}; - case "AccessoryBipod": {IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD}; - default {-1}; - }; - if(_idcList != -1)then{[_idcList, _x] call jn_fnc_arsenal_removeItem}; - }foreach _newAttachments - _oldAttachments; - - ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC]] call jn_fnc_arsenal; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_MAP; - case IDC_RSCDISPLAYARSENAL_TAB_GPS; - case IDC_RSCDISPLAYARSENAL_TAB_RADIO; - case IDC_RSCDISPLAYARSENAL_TAB_COMPASS; - case IDC_RSCDISPLAYARSENAL_TAB_WATCH: { - _oldItem = ""; - { - if(_index == (_x call jn_fnc_arsenal_itemType))exitwith{ - _oldItem = _x; - }; - }foreach assignedItems player; - - //TFAR FIX - _OldItemUnequal = _oldItem; - if(_index == IDC_RSCDISPLAYARSENAL_TAB_COMPASS)then{ - _radioName = getText(configfile >> "CfgWeapons" >> _oldItem >> "tf_parent"); - if!(_radioName isEqualTo "")exitWith{ - _OldItemUnequal = _radioName; - }; - }; - - if (_oldItem != _item) then { - player unassignitem _OldItemUnequal; - player removeitem _OldItemUnequal; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then { - player linkitem _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMACC; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE; - case IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD: { - - _weapon = switch true do { - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON))): {primaryweapon player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON))): {secondaryweapon player}; - case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN))): {handgunweapon player}; - default {""}; - }; - - //prevent selecting grey items, needs to be this complicated because bis_fnc_compatibleItems returns some crap resolts like optic_aco instead of Optic_Aco - _compatibleItems = _weapon call bis_fnc_compatibleItems; - if not (({_x == _item} count _compatibleItems > 0) || _item isequalto "")exitwith{ - ['TabSelectRight',[_display,_index]] call jn_fnc_arsenal; - }; - - _accIndex = [ - IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, - IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, - IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD - ] find _index; - - switch true do { - case (ctrlenabled _ctrlListPrimaryWeapon): { - - _oldItem = (primaryWeaponItems player select _accIndex); - if (_oldItem != _item) then { - player removeprimaryweaponitem _oldItem; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then { - player addprimaryweaponitem _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case (ctrlenabled _ctrlListSecondaryWeapon): { - _oldItem = (secondaryWeaponItems player select _accIndex); - if (_oldItem != _item) then { - player removesecondaryweaponitem _oldItem; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then { - player addsecondaryweaponitem _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - case (ctrlenabled _ctrlListHandgun): { - _oldItem = (handgunitems player select _accIndex); - if (_oldItem != _item) then { - player removehandgunitem _oldItem; - [_index, _oldItem] call jn_fnc_arsenal_addItem; - if (_item != "") then { - player addhandgunitem _item; - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - }; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; - case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC:{ - //handled in "buttonCargo" - }; - }; - - - - ["updateItemInfo",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; - ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "SelectItemRight": { - private ["_ctrlList","_index","_cursel"]; - _display = _this select 0; - _ctrlList = _this select 1; - _index = _this select 2; - _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); - _type = (ctrltype _ctrlList == 102); - - - //--- Get container - _indexLeft = -1; - { - _ctrlListLeft = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); - if (ctrlenabled _ctrlListLeft) exitwith {_indexLeft = _x;}; - } foreach [IDCS_LEFT]; - - _supply = switch _indexLeft do { - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: { - gettext (configfile >> "CfgWeapons" >> uniform _center >> "ItemInfo" >> "containerClass") - }; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: { - gettext (configfile >> "CfgWeapons" >> vest _center >> "ItemInfo" >> "containerClass") - }; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { - backpack _center - }; - default {0}; - }; - - _maximumLoad = getnumber (configfile >> "CfgVehicles" >> _supply >> "maximumLoad"); - - _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - _load = _maximumLoad * (1 - progressposition _ctrlLoadCargo); - - - - //-- Disable too heavy items - _min = jna_minItemMember select _index; - _rows = lnbsize _ctrlList select 0; - _columns = lnbsize _ctrlList select 1; - _colorWarning = ["IGUI","WARNING_RGB"] call bis_fnc_displayColorGet; - _columns = count lnbGetColumnsPosition _ctrlList; - for "_r" from 0 to (_rows - 1) do { - _dataStr = _ctrlList lnbData [_r,0]; - _data = call compile _dataStr; - _amount = _data select 1; - _grayout = false; - if ((_amount <= _min) AND (_amount != -1) AND (_amount !=0) AND !([player] call isMember)) then{_grayout = true}; - - _isIncompatible = _ctrlList lnbvalue [_r,1]; - _mass = _ctrlList lbvalue (_r * _columns); - _alpha = [1.0,0.25] select (_mass > parseNumber (str _load)); - _color = [[1,1,1,_alpha],[1,0.5,0,_alpha]] select _isIncompatible; - if(_grayout)then{_color = [1,1,0,0.60];}; - _ctrlList lnbsetcolor [[_r,1],_color]; - _ctrlList lnbsetcolor [[_r,2],_color]; - _text = _ctrlList lnbtext [_r,1]; - _ctrlList lbsettooltip [_r * _columns,[_text,_text + "\n(Not compatible with currently equipped weapons)"] select _isIncompatible]; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// event - case "buttonCargo": { - _display = _this select 0; - _add = _this select 1; - _selected = -1; - { - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); - if (ctrlenabled _ctrlList) exitwith {_selected = _x;}; - } foreach [IDCS_LEFT]; - - _ctrlList = ctrlnull; - _index = -1; - _lbcursel = -1; - { - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); - if (ctrlenabled _ctrlList) exitwith {_lbcursel = lbcursel _ctrlList;_index = _x}; - } foreach [IDCS_RIGHT]; - - _dataStr = _ctrlList lnbData [_lbcursel,0]; - _data = call compile _dataStr; - _item = _data select 0; - _amount = _data select 1; - - _load = 0; - _items = []; - _itemChanged = false; - - _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; - - //save old weight - _loadOld = switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; - }; - - - //remove or add - _count = 1; - if(((_amount > 0 || _amount == -1) || _add < 0) && (_add != 0))then{ - - if (_add > 0) then {//add - _min = jna_minItemMember select _index; - if((_amount <= _min) AND (_amount != -1) AND !([player] call isMember)) exitWith{ - ['showMessage',[_display,"We are low on this item, only members may use it"]] call jn_fnc_arsenal; - }; - if(_index in [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL])then{//magazines are handeld by bullet count - //check if full mag can be optaind - _count = getNumber (configfile >> "CfgMagazines" >> _item >> "count"); - if(_amount != -1)then{ - if(_amount<_count)then{_count = _amount}; - }; - _canAdd = false; - _container = switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {_canAdd = player canAddItemToUniform _item; uniformContainer player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {_canAdd = player canAddItemToVest _item; vestContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {_canAdd = player canAddItemToBackpack _item; backpackContainer player;}; - }; - if(_canAdd)then{ - _container addMagazineAmmoCargo [_item,1,_count]; - }; - }else{ - switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {player additemtouniform _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {player additemtovest _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {player additemtobackpack _item;}; - }; - }; - } else {//remove - if(_index in [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL])then{ - - _container = switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {uniformContainer player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {vestContainer player;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {backpackContainer player;}; - }; - - //save mags in list and remove them - _mags = magazinesAmmoCargo _container; - clearMagazineCargo _container; - - //add back magazines exept the one that needs to be removed - _removed = false; - { - if((_x select 0) isEqualTo _item && !_removed)then{ - _count = _x select 1;//this mag is removed - _removed = true; - }else{ - _container addMagazineAmmoCargo [(_x select 0),1,(_x select 1)]; - }; - } forEach _mags; - - }else{ - switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {player removeitemfromuniform _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {player removeitemfromvest _item;}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {player removeitemfrombackpack _item;}; - }; - }; - }; - }; - - //check if item was added - _load = switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; - }; - - if!(_loadOld isEqualTo _load)then{ - _amountOld = parseNumber (_ctrlList lnbtext [_lbcursel,2]); - if(_add > 0)then{ - _ctrlList lnbsettext [[_lbcursel,2],str (_amountOld + _count)]; - [_index, _item, _count]call jn_fnc_arsenal_removeItem; - }else{ - _ctrlList lnbsettext [[_lbcursel,2],str (_amountOld - _count)]; - [_index, _item, _count] call jn_fnc_arsenal_addItem; - }; - }; - - _load = switch _selected do{ - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; - case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; - }; - - _ctrlLoadCargo progresssetposition _load; - - ["SelectItemRight",[_display,_ctrlList,_index]] call jn_fnc_arsenal; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "buttonInvToJNA": { - //_display = _this select 0; - private _object = missionnamespace getVariable ["jna_object",objNull]; - private _array = _object call jn_fnc_arsenal_cargoToArray; - - //clear cargo - clearMagazineCargoGlobal _object; - clearItemCargoGlobal _object; - clearweaponCargoGlobal _object; - clearbackpackCargoGlobal _object; - - //update server - [_object,_array] remoteExec ["jn_fnc_arsenal_cargoToArsenal",2]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "showMessage": { - if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; - - _spawn = _this spawn { - disableserialization; - _display = _this select 0; - _message = _this select 1; - - _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; - _ctrlMessage ctrlsettext _message; - _ctrlMessage ctrlsetfade 1; - _ctrlMessage ctrlcommit 0; - _ctrlMessage ctrlsetfade 0; - _ctrlMessage ctrlcommit FADE_DELAY; - uisleep 5; - _ctrlMessage ctrlsetfade 1; - _ctrlMessage ctrlcommit FADE_DELAY; - }; - missionnamespace setvariable ["BIS_fnc_arsenal_message",_spawn]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "hideMessage":{ - _display = _this select 0; - if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; - _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; - _ctrlMessage ctrlsetfade 1; - _ctrlMessage ctrlcommit FADE_DELAY; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "showMessageEndless": { - if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; - - _spawn = _this spawn { - disableserialization; - _display = _this select 0; - _message = _this select 1; - - _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; - _ctrlMessage ctrlsettext _message; - _ctrlMessage ctrlsetfade 1; - _ctrlMessage ctrlcommit 0; - _ctrlMessage ctrlsetfade 0; - _ctrlMessage ctrlcommit FADE_DELAY; - }; - missionnamespace setvariable ["BIS_fnc_arsenal_message",_spawn]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ShowItemInfo": { - _itemCfg = _this select 0; - - if (isclass _itemCfg) then { - _dataStr = param [1,if (ctrltype _ctrlList == 102) then {_ctrlList lnbdata [_cursel,0]} else {_ctrlList lbdata _cursel}]; - _data = call compile _dataStr; - _item = _data select 0; - - _ctrlInfo = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFO; - _ctrlInfo ctrlsetfade 0; - _ctrlInfo ctrlcommit FADE_DELAY; - - _ctrlInfoName = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFONAME; - _ctrlInfoName ctrlsettext ((_item call bis_fnc_itemType) select 1); - - _ctrlInfoAuthor = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFOAUTHOR; - _ctrlInfoAuthor ctrlsettext ""; - [_itemCfg,_ctrlInfoAuthor] call bis_fnc_overviewauthor; - - //--- DLC / mod icon - _ctrlDLC = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_DLCICON; - _ctrlDLCBackground = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_DLCBACKGROUND; - _dlc = _itemCfg call GETDLC; - if (_dlc != "" && _fullVersion) then { - - _dlcParams = modParams [_dlc,["name","logo","logoOver"]]; - _name = _dlcParams param [0,""]; - _logo = _dlcParams param [1,""]; - _logoOver = _dlcParams param [2,""]; - _fieldManualTopicAndHint = getarray (configfile >> "cfgMods" >> _dlc >> "fieldManualTopicAndHint"); - - _ctrlDLC ctrlsettooltip _name; - _ctrlDLC ctrlsettext _logo; - _ctrlDLC ctrlsetfade 0; - _ctrlDLC ctrlseteventhandler ["mouseexit",format ["(_this select 0) ctrlsettext '%1';",_logo]]; - _ctrlDLC ctrlseteventhandler ["mouseenter",format ["(_this select 0) ctrlsettext '%1';",_logoOver]]; - _ctrlDLC ctrlseteventhandler ["buttonclick",format ["if (count %1 > 0) then {(%1 + [ctrlparent (_this select 0)]) call bis_fnc_openFieldManual;};",_fieldManualTopicAndHint]]; - _ctrlDLCBackground ctrlsetfade 0; - } else { - _ctrlDLC ctrlsetfade 1; - _ctrlDLCBackground ctrlsetfade 1; - }; - _ctrlDLC ctrlcommit FADE_DELAY; - _ctrlDLCBackground ctrlcommit FADE_DELAY; - - } else { - _ctrlInfo = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFO; - _ctrlInfo ctrlsetfade 1; - _ctrlInfo ctrlcommit FADE_DELAY; - - _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; - _ctrlStats ctrlsetfade 1; - _ctrlStats ctrlcommit FADE_DELAY; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "ShowItemStats": { - _itemCfg = _this select 0; - if (isclass _itemCfg) then { - _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; - - _ctrlStatsPos = ctrlposition _ctrlStats; - _ctrlStatsPos set [0,0]; - _ctrlStatsPos set [1,0]; - _ctrlBackground = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATSBACKGROUND; - _barMin = 0.01; - _barMax = 1; - - _statControls = [ - [IDC_RSCDISPLAYARSENAL_STATS_STAT1,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT1], - [IDC_RSCDISPLAYARSENAL_STATS_STAT2,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT2], - [IDC_RSCDISPLAYARSENAL_STATS_STAT3,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT3], - [IDC_RSCDISPLAYARSENAL_STATS_STAT4,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT4], - [IDC_RSCDISPLAYARSENAL_STATS_STAT5,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT5] - ]; - _rowH = 1 / (count _statControls + 1); - _fnc_showStats = { - _h = _rowH; - { - _ctrlStat = _display displayctrl ((_statControls select _foreachindex) select 0); - _ctrlText = _display displayctrl ((_statControls select _foreachindex) select 1); - if (count _x > 0) then { - _ctrlStat progresssetposition (_x select 0); - _ctrlText ctrlsettext toupper (_x select 1); - _ctrlText ctrlsetfade 0; - _ctrlText ctrlcommit 0; - //_ctrlText ctrlshow true; - _h = _h + _rowH; - } else { - _ctrlStat progresssetposition 0; - _ctrlText ctrlsetfade 1; - _ctrlText ctrlcommit 0; - //_ctrlText ctrlshow false; - }; - } foreach _this; - _ctrlStatsPos set [1,(_ctrlStatsPos select 3) * (1 - _h)]; - _ctrlStatsPos set [3,(_ctrlStatsPos select 3) * _h]; - _ctrlBackground ctrlsetposition _ctrlStatsPos; - _ctrlBackground ctrlcommit 0; - }; - - switch _index do { - case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON; - case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON; - case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { - _ctrlStats ctrlsetfade 0; - _statsExtremes = uinamespace getvariable "bis_fnc_arsenal_weaponStats"; - if !(isnil "_statsExtremes") then { - _statsMin = _statsExtremes select 0; - _statsMax = _statsExtremes select 1; - - _stats = [ - [_itemCfg], - STATS_WEAPONS, - _statsMin - ] call bis_fnc_configExtremes; - _stats = _stats select 1; - - _statReloadSpeed = linearConversion [_statsMin select 0,_statsMax select 0,_stats select 0,_barMax,_barMin]; - _statDispersion = linearConversion [_statsMin select 1,_statsMax select 1,_stats select 1,_barMax,_barMin]; - _statMaxRange = linearConversion [_statsMin select 2,_statsMax select 2,_stats select 2,_barMin,_barMax]; - _statHit = linearConversion [_statsMin select 3,_statsMax select 3,_stats select 3,_barMin,_barMax]; - _statMass = linearConversion [_statsMin select 4,_statsMax select 4,_stats select 4,_barMin,_barMax]; - _statInitSpeed = linearConversion [_statsMin select 5,_statsMax select 5,_stats select 5,_barMin,_barMax]; - if (getnumber (_itemCfg >> "type") == 4) then { - [ - [], - [], - [_statMaxRange,localize "str_a3_rscdisplayarsenal_stat_range"], - [_statHit,localize "str_a3_rscdisplayarsenal_stat_impact"], - [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] - ] call _fnc_showStats; - } else { - _statHit = sqrt(_statHit^2 * _statInitSpeed); //--- Make impact influenced by muzzle speed - [ - [_statReloadSpeed,localize "str_a3_rscdisplayarsenal_stat_rof"], - [_statDispersion,localize "str_a3_rscdisplayarsenal_stat_dispersion"], - [_statMaxRange,localize "str_a3_rscdisplayarsenal_stat_range"], - [_statHit,localize "str_a3_rscdisplayarsenal_stat_impact"], - [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] - ] call _fnc_showStats; - }; - }; - }; - case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM; - case IDC_RSCDISPLAYARSENAL_TAB_VEST; - case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK; - case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { - _ctrlStats ctrlsetfade 0; - _statsExtremes = uinamespace getvariable "bis_fnc_arsenal_equipmentStats"; - if !(isnil "_statsExtremes") then { - _statsMin = _statsExtremes select 0; - _statsMax = _statsExtremes select 1; - - _stats = [ - [_itemCfg], - STATS_EQUIPMENT, - _statsMin - ] call bis_fnc_configExtremes; - _stats = _stats select 1; - - _statArmorShot = linearConversion [_statsMin select 0,_statsMax select 0,_stats select 0,_barMin,_barMax]; - _statArmorExpl = linearConversion [_statsMin select 1,_statsMax select 1,_stats select 1,_barMin,_barMax]; - _statMaximumLoad = linearConversion [_statsMin select 2,_statsMax select 2,_stats select 2,_barMin,_barMax]; - _statMass = linearConversion [_statsMin select 3,_statsMax select 3,_stats select 3,_barMin,_barMax]; - - if (getnumber (_itemCfg >> "isbackpack") == 1) then { - _statArmorShot = _barMin; - _statArmorExpl = _barMin; - }; //--- Force no backpack armor - - [ - if (_item == "H_Beret_blk") then {[0.95,localize "STR_difficulty3"]} else {[]}, //--- Easter egg - [_statArmorShot,localize "str_a3_rscdisplayarsenal_stat_passthrough"], - [_statArmorExpl,localize "str_a3_rscdisplayarsenal_stat_armor"], - [_statMaximumLoad,localize "str_a3_rscdisplayarsenal_stat_load"], - [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] - ] call _fnc_showStats; - }; - }; - default { - if(_item == "G_Sport_Blackred")then{ - _ctrlStats ctrlsetfade 0; - [ - [], - [], - [], - [], - [0.75,"Thee drinker"] - ] call _fnc_showStats; - - }else{ - _ctrlStats ctrlsetfade 1; - }; - - }; - }; - _ctrlStats ctrlcommit FADE_DELAY; - } else { - _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; - _ctrlStats ctrlsetfade 1; - _ctrlStats ctrlcommit FADE_DELAY; - }; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "HighlightMissingIcons": { - _display = _this select 0; - - { - _index = _x; - _item = ["ListCurSel",[_index]] call jn_fnc_arsenal; - _ctrlTab = _display displayctrl(IDC_RSCDISPLAYARSENAL_TAB + _index); - - //check if some item was selected - if(_item isEqualTo "")then{ - _ctrlTab ctrlSetTextColor [1,0.3,0.3,1]; - }else{ - _ctrlTab ctrlSetTextColor [1,1,1,1]; - }; - } forEach [IDCS_LEFT]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// event - case "KeyDown": { - _display = _this select 0; - _key = _this select 1; - _shift = _this select 2; - _ctrl = _this select 3; - _alt = _this select 4; - _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); - _return = false; - _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; - _inTemplate = ctrlfade _ctrlTemplate == 0; - - switch true do { - case (_key == DIK_ESCAPE): { - if (_inTemplate) then { - _ctrlTemplate ctrlsetfade 1; - _ctrlTemplate ctrlcommit 0; - _ctrlTemplate ctrlenable false; - - _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; - _ctrlMouseBlock ctrlenable false; - } else { - if (true) then {["buttonClose",[_display]] spawn jn_fnc_arsenal;} else {_display closedisplay 2;}; - }; - _return = true; - }; - - //--- Enter - case (_key in [DIK_RETURN,DIK_NUMPADENTER]): { - _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; - if (ctrlfade _ctrlTemplate == 0) then { - if (BIS_fnc_arsenal_type == 0) then { - ["buttonTemplateOK",[_display]] spawn jn_fnc_arsenal; - } else { - ["buttonTemplateOK",[_display]] spawn jn_fnc_arsenal; - }; - _return = true; - }; - }; - - //--- Prevent opening the commanding menu - case (_key == DIK_1); - case (_key == DIK_2); - case (_key == DIK_3); - case (_key == DIK_4); - case (_key == DIK_5); - case (_key == DIK_1); - case (_key == DIK_7); - case (_key == DIK_8); - case (_key == DIK_9); - case (_key == DIK_0); - - //--- Tab to browse tabs - case (_key == DIK_TAB): { - }; - - - - //--- Save - case (_key == DIK_S): { - if (_ctrl) then {['buttonSave',[_display]] call jn_fnc_arsenal;}; - }; - //--- Open - case (_key == DIK_O): { - if (_ctrl) then {['buttonLoad',[_display]] call jn_fnc_arsenal;}; - }; - - //--- Vision mode - case (_key in (actionkeys "nightvision") && !_inTemplate): { - _mode = missionnamespace getvariable ["BIS_fnc_arsenal_visionMode",-1]; - _mode = (_mode + 1) % 3; - missionnamespace setvariable ["BIS_fnc_arsenal_visionMode",_mode]; - switch _mode do { - //--- Normal - case 0: { - camusenvg false; - false setCamUseTi 0; - }; - //--- NVG - case 1: { - camusenvg true; - false setCamUseTi 0; - }; - //--- TI - default { - camusenvg false; - true setCamUseTi 0; - }; - }; - playsound ["RscDisplayCurator_visionMode",true]; - _return = true; - - }; - }; - _return - }; - - /////////////////////////////////////////////////////////////////////////////////////////// event - case "buttonClose": { - _display = _this select 0; - - //remove missing item message - titleText["", "PLAIN"]; - - _display closedisplay 2; - if (missionname == "Arsenal") then {endmission "end1";}; - ["#(argb,8,8,3)color(0,0,0,1)",false,nil,0,[0,0.5]] call bis_fnc_textTiles; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - case "buttonDefaultGear":{ - - ///////////////////////////////////////////////////////////////////////////////// - // unifrom - _itemsUnifrom = []; - if(activeACE)then{ - - //ACE Basic medical system - if (ace_medical_level == 1) then{ - _itemsUnifrom pushBack ["ACE_fieldDressing",10]; - _itemsUnifrom pushBack ["ACE_morphine",6]; - _itemsUnifrom pushBack ["ACE_epinephrine",3]; - }; - - //ACE Advanced medical system - if (ace_medical_level == 2) then{ - _itemsUnifrom pushBack ["ACE_fieldDressing",4]; - _itemsUnifrom pushBack ["ACE_elasticBandage",4]; - _itemsUnifrom pushBack ["ACE_packingBandage",4]; - _itemsUnifrom pushBack ["ACE_quikclot",4]; - _itemsUnifrom pushBack ["ACE_morphine",1]; - _itemsUnifrom pushBack ["ACE_epinephrine",1]; - _itemsUnifrom pushBack ["ACE_tourniquet",1]; - }; - - _itemsUnifrom pushBack ["ACE_EarPlugs",1]; - _itemsUnifrom pushBack ["ACE_MapTools",1]; - _itemsUnifrom pushBack ["ACE_CableTie",3]; - - }else{ - _itemsUnifrom pushBack ["FirstAidKit",4]; - }; - diag_log ["_itemsUnifrom1",_itemsUnifrom]; - //check items that already exist - { - _itemsUnifrom = [_itemsUnifrom,_x] call jn_fnc_arsenal_removeFromArray; - } forEach (uniformItems player); - diag_log ["_itemsUnifrom2",_itemsUnifrom]; - //add non existing items to uniform - { - _item = _x select 0; - _amount = _x select 1; - _amountAdded = 0; - while {(_amountAdded < _amount) && (player canAddItemToUniform _x)}do{ - _amountAdded = _amountAdded + 1; - player addItemToUniform _item; - }; - - if(_amountAdded > 0)then{ - - }; - } forEach _itemsUnifrom; - - ///////////////////////////////////////////////////////////////////////////////// - // backpack stuff - _itemsBackpack = []; - - if(player getUnitTrait "Medic")then{ - if(activeACE)then{ - if (ace_medical_level == 1) then{ //ACE Basic medical system - _itemsBackpack pushBack ["ACE_fieldDressing",20]; - _itemsBackpack pushBack ["ACE_morphine",10]; - _itemsBackpack pushBack ["ACE_epinephrine",10]; - _itemsBackpack pushBack ["ACE_bloodIV",6]; - }; - if (ace_medical_level == 2) then{ //ACE Advanced medical system - _itemsBackpack pushBack ["ACE_elasticBandage",15]; - _itemsBackpack pushBack ["ACE_packingBandage",7]; - _itemsBackpack pushBack ["ACE_tourniquet",3]; - _itemsBackpack pushBack ["ACE_personalAidKit",1]; - }; - }else{ - _itemsBackpack pushBack ["Medikit",1]; - _itemsBackpack pushBack ["FirstAidKit",10]; - }; - - - }; - diag_log ["_itemsBackpack1",_itemsBackpack]; - //check items that already exist - { - _itemsBackpack = [_itemsBackpack,_x] call jn_fnc_arsenal_removeFromArray; - } forEach (backpackitems player); - diag_log ["_itemsBackpack2",_itemsBackpack]; - //add non existing items - { - _item = _x select 0; - _amount = _x select 1; - _amountAdded = 0; - while {(_amountAdded < _amount) && (player canAddItemToBackpack _x)}do{ - _amountAdded = _amountAdded + 1; - player addItemToBackpack _item; - }; - - if(_amountAdded > 0)then{ - - }; - } forEach _itemsBackpack; - - ///////////////////////////////////////////////////////////////////////////////// - //assigned items - { - _index = _x select 0; - _item = _x select 1; - diag_log ["error",_index, _item] ; - _itemCurrent = ["ListCurSel",[_index]] call jn_fnc_arsenal; - diag_log ["error",_index, _item,_itemCurrent] ; - if(_itemCurrent isEqualTo "")then{ - player linkitem _item; - - [_index, _item]call jn_fnc_arsenal_removeItem; - }; - } forEach [ - [IDC_RSCDISPLAYARSENAL_TAB_MAP,"ItemMap"], - [IDC_RSCDISPLAYARSENAL_TAB_RADIO,"ItemRadio"], - [IDC_RSCDISPLAYARSENAL_TAB_COMPASS,"ItemCompass"], - [IDC_RSCDISPLAYARSENAL_TAB_WATCH,"ItemWatch"] - ]; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////////////////////////////////////// - //LOAD AND SAVE BUTTON STUFF! - case "buttonLoad": { - _display = _this select 0; - ['showTemplates',[_display]] call jn_fnc_arsenal; - - _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; - _ctrlTemplate ctrlsetfade 0; - _ctrlTemplate ctrlcommit 0; - _ctrlTemplate ctrlenable true; - - _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; - _ctrlMouseBlock ctrlenable true; - ctrlsetfocus _ctrlMouseBlock; - - { - (_display displayctrl _x) ctrlsettext localize "str_disp_int_load"; - } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TITLE,IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK]; - { - _ctrl = _display displayctrl _x; - _ctrl ctrlshow false; - _ctrl ctrlenable false; - } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TEXTNAME,IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME]; - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - if (lnbcurselrow _ctrlTemplateValue < 0) then {_ctrlTemplateValue lnbsetcurselrow 0;}; - ctrlsetfocus _ctrlTemplateValue; - }; - - case "buttonSave": { - _display = _this select 0; - ['showTemplates',[_display]] call jn_fnc_arsenal; - - _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; - _ctrlTemplate ctrlsetfade 0; - _ctrlTemplate ctrlcommit 0; - _ctrlTemplate ctrlenable true; - - _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; - _ctrlMouseBlock ctrlenable true; - - { - (_display displayctrl _x) ctrlsettext localize "str_disp_int_save"; - } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TITLE,IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK]; - { - _ctrl = _display displayctrl _x; - _ctrl ctrlshow true; - _ctrl ctrlenable true; - } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TEXTNAME,IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME]; - - _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; - ctrlsetfocus _ctrlTemplateName; - - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; - _ctrlTemplateButtonOK ctrlenable true; - _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; - _ctrlTemplateButtonDelete ctrlenable ((lnbsize _ctrlTemplateValue select 0) > 0); - - ['showMessage',[_display,localize "STR_A3_RscDisplayArsenal_message_save"]] call bis_fnc_arsenal; - }; - - case "buttonTemplateOK": { - _display = _this select 0; - _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); - _hideTemplate = true; - - _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; - if (ctrlenabled _ctrlTemplateName) then { - //--- Save - [ - _center, - [profilenamespace,ctrltext _ctrlTemplateName], - [ - _center getvariable ["BIS_fnc_arsenal_face",face _center], - speaker _center, - _center call bis_fnc_getUnitInsignia - ] - ] call bis_fnc_saveInventory; - } else { - //--- Load - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - if ((_ctrlTemplateValue lbvalue lnbcurselrow _ctrlTemplateValue) >= 0) then { - _inventory = _ctrlTemplateValue lnbtext [lnbcurselrow _ctrlTemplateValue,0]; - _inventory call jn_fnc_arsenal_loadinventory; - - { - _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); - if(ctrlenabled _ctrlList) exitWith { - ["TabSelectLeft", [_display, _x]] call jn_fnc_arsenal; - }; - - } forEach [IDCS_LEFT]; - ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; - - } else { - _hideTemplate = false; - }; - }; - if (_hideTemplate) then { - _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; - _ctrlTemplate ctrlsetfade 1; - _ctrlTemplate ctrlcommit 0; - _ctrlTemplate ctrlenable false; - - _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; - _ctrlMouseBlock ctrlenable false; - }; - }; - - case "buttonTemplateDelete": { - _display = _this select 0; - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - _cursel = lnbcurselrow _ctrlTemplateValue; - _name = _ctrlTemplateValue lnbtext [_cursel,0]; - [_center,[profilenamespace,_name],nil,true] call bis_fnc_saveInventory; - ['showTemplates',[_display]] call jn_fnc_arsenal; - _ctrlTemplateValue lnbsetcurselrow (_cursel max (lbsize _ctrlTemplateValue - 1)); - - ["templateSelChanged",[_display]] call jn_fnc_arsenal; - }; - - case "showTemplates": { - _display = _this select 0; - - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - lnbclear _ctrlTemplateValue; - _data = profilenamespace getvariable ["bis_fnc_saveInventory_data",[]]; - _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); - - for "_i" from 0 to (count _data - 1) step 2 do { - _name = _data select _i; - _inventory = _data select (_i + 1); - - _inventoryWeapons = [ - (_inventory select 5), //--- Binocular - (_inventory select 6 select 0), //--- Primary weapon - (_inventory select 7 select 0), //--- Secondary weapon - (_inventory select 8 select 0) //--- Handgun - ] - [""]; - _inventoryMagazines = ( - (_inventory select 0 select 1) + //--- Uniform - (_inventory select 1 select 1) + //--- Vest - (_inventory select 2 select 1) //--- Backpack items - ) - [""]; - _inventoryItems = ( - [_inventory select 0 select 0] + (_inventory select 0 select 1) + //--- Uniform - [_inventory select 1 select 0] + (_inventory select 1 select 1) + //--- Vest - (_inventory select 2 select 1) + //--- Backpack items - [_inventory select 3] + //--- Headgear - [_inventory select 4] + //--- Goggles - (_inventory select 6 select 1) + //--- Primary weapon items - (_inventory select 7 select 1) + //--- Secondary weapon items - (_inventory select 8 select 1) + //--- Handgun items - (_inventory select 9) //--- Assigned items - ) - [""]; - _inventoryBackpacks = [_inventory select 2 select 0] - [""]; - - - _lbAdd = _ctrlTemplateValue lnbaddrow [_name]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,1],gettext (configfile >> "cfgweapons" >> (_inventory select 6 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,2],gettext (configfile >> "cfgweapons" >> (_inventory select 7 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,3],gettext (configfile >> "cfgweapons" >> (_inventory select 8 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,4],gettext (configfile >> "cfgweapons" >> (_inventory select 0 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,5],gettext (configfile >> "cfgweapons" >> (_inventory select 1 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,6],gettext (configfile >> "cfgvehicles" >> (_inventory select 2 select 0) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,7],gettext (configfile >> "cfgweapons" >> (_inventory select 3) >> "picture")]; - _ctrlTemplateValue lnbsetpicture [[_lbAdd,8],gettext (configfile >> "cfgglasses" >> (_inventory select 4) >> "picture")]; - - }; - _ctrlTemplateValue lnbsort [0,false]; - - ["templateSelChanged",[_display]] call jn_fnc_arsenal; - }; - - case "templateSelChanged": { - _display = _this select 0; - _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; - _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; - _ctrlTemplateName ctrlsettext (_ctrlTemplateValue lnbtext [lnbcurselrow _ctrlTemplateValue,0]); - - _cursel = lnbcurselrow _ctrlTemplateValue; - - _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; - //_ctrlTemplateButtonOK ctrlenable (_cursel >= 0 && (_ctrlTemplateValue lbvalue _cursel) >= 0); - _ctrlTemplateButtonOK ctrlenable true; - - _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; - //_ctrlTemplateButtonDelete ctrlenable (_cursel >= 0); - _ctrlTemplateButtonDelete ctrlenable true; - }; - - /////////////////////////////////////////////////////////////////////////////////////////// - default { - ["Error: wrong input given '%1' for mode '%2'",_this,_mode] call BIS_fnc_error; - }; + /////////////////////////////////////////////////////////////////////////////////////////// Externaly called + case "Preload": { + private ["_data"]; + + INITTYPES; + _data = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]; + + _configArray = ( + ("isclass _x" configclasses (configfile >> "cfgweapons")) + + ("isclass _x" configclasses (configfile >> "cfgvehicles")) + + ("isclass _x" configclasses (configfile >> "cfgglasses")) + ); + + { + _class = _x; + _className = configname _x; + _scope = if (isnumber (_class >> "scopeArsenal")) then {getnumber (_class >> "scopeArsenal")} else {getnumber (_class >> "scope")}; + _isBase = if (isarray (_x >> "muzzles")) then {(_className call bis_fnc_baseWeapon == _className)} else {true}; //-- Check if base weapon (true for all entity types) + if (_scope == 2 && {gettext (_class >> "model") != ""} && _isBase) then { + private ["_weaponType","_weaponTypeCategory"]; + _weaponType = (_className call bis_fnc_itemType); + _weaponTypeCategory = _weaponType select 0; + if (_weaponTypeCategory != "VehicleWeapon") then { + private ["_weaponTypeSpecific","_weaponTypeID"]; + _weaponTypeSpecific = _weaponType select 1; + _weaponTypeID = -1; + { + if (_weaponTypeSpecific in _x) exitwith {_weaponTypeID = _foreachindex;}; + } foreach _types; + if (_weaponTypeID >= 0) then { + private _items = _data select _weaponTypeID; + _items set [count _items,configname _class]; + }; + }; + }; + } foreach _configArray; + + //--- Magazines - Put and Throw + _magazinesThrowPut = []; + { + private ["_weapons","_tab","_magazines"]; + _weapon = _x select 0; + _tab = _x select 1; + _magazines = []; + { + { + private ["_mag"]; + _mag = _x; + if ({_x == _mag} count _magazines == 0) then { + private ["_cfgMag"]; + _magazines set [count _magazines,_mag]; + _cfgMag = configfile >> "cfgmagazines" >> _mag; + if (getnumber (_cfgMag >> "scope") == 2 || getnumber (_cfgMag >> "scopeArsenal") == 2) then { + private ["_items"]; + _items = _data select _tab; + _items pushback configname _cfgMag; + _magazinesThrowPut pushback tolower _mag; + }; + }; + } foreach getarray (_x >> "magazines"); + } foreach ("isclass _x" configclasses (configfile >> "cfgweapons" >> _weapon)); + } foreach [ + ["throw",IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW], + ["put",IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT] + ]; + + //--- Magazines + { + if (getnumber (_x >> "type") > 0 && {(getnumber (_x >> "scope") == 2 || getnumber (_x >> "scopeArsenal") == 2) && {!(tolower configname _x in _magazinesThrowPut)}}) then { + private _items = _data select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; + _items pushback configname _x; + }; + } foreach ("isclass _x" configclasses (configfile >> "cfgmagazines")); + + missionnamespace setvariable ["bis_fnc_arsenal_data",_data]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// Externaly called + case "Open": { + diag_log "JNA open arsenal"; + jna_dataList = _this select 0; + private _object = missionnamespace getVariable ["jna_object",objNull]; + ["Open",[nil,_object,player,false]] call bis_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "CustomInit":{ + + _display = _this select 0; + ["ReplaceBaseItems",[_display]] call jn_fnc_arsenal; + ["customEvents",[_display]] call jn_fnc_arsenal; + ["CreateListAll", [_display]] call jn_fnc_arsenal; + ['showMessage',[_display,"Jeroen (Not) Limited Arsenal"]] call jn_fnc_arsenal; + ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; + + ["jn_fnc_arsenal"] call BIS_fnc_endLoadingScreen; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "customEvents":{ + _display = _this select 0; + + //Keys + _display displayRemoveAllEventHandlers "keydown"; + _display displayAddEventHandler ["keydown",{['KeyDown',_this] call jn_fnc_arsenal;}]; + + //--- UI event handlers + _ctrlButtonClose = _display displayctrl (getnumber (configfile >> "RscDisplayArsenal" >> "Controls" >> "ControlBar" >> "controls" >> "ButtonClose" >> "idc")); + _ctrlButtonClose ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonClose ctrladdeventhandler ["buttonclick",{["buttonClose",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + + _ctrlButtonLoad = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONLOAD; + _ctrlButtonLoad ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonLoad ctrladdeventhandler ["buttonclick",{["buttonLoad",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + + _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; + _ctrlTemplateButtonOK ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlTemplateButtonOK ctrladdeventhandler ["buttonclick",{["buttonTemplateOK",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}];//todo remove + + _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; + _ctrlTemplateButtonDelete ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlTemplateButtonDelete ctrladdeventhandler ["buttonclick",{["buttonTemplateDelete",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + + _ctrlButtonExport = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONEXPORT; + _ctrlButtonExport ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonExport ctrlSetText "TODO"; + + _ctrlButtonImport = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONIMPORT; + _ctrlButtonImport ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonImport ctrlSetText "Default gear"; + _ctrlButtonImport ctrlSetTooltip "Add default items like radio and medical supplies"; + _ctrlButtonImport ctrladdeventhandler ["buttonclick",{["buttonDefaultGear",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + + _ctrlButtonSave = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONSAVE; + _ctrlButtonSave ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonSave ctrladdeventhandler ["buttonclick",{["buttonSave",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + + _ctrlButtonRandom = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONRANDOM; + _ctrlButtonRandom ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlButtonRandom ctrladdeventhandler ["buttonclick",{["buttonInvToJNA",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}]; + _ctrlButtonRandom ctrlSetText "To crate"; + _ctrlButtonRandom ctrlSetTooltip "Move items from crate inventory to arsenal"; + + _ctrlArrowLeft = _display displayctrl IDC_RSCDISPLAYARSENAL_ARROWLEFT; + _ctrlArrowLeft ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlArrowLeft ctrladdeventhandler ["buttonclick",{["buttonCargo",[ctrlparent (_this select 0),-1]] call jn_fnc_arsenal;}]; + + _ctrlArrowRight = _display displayctrl IDC_RSCDISPLAYARSENAL_ARROWRIGHT; + _ctrlArrowRight ctrlRemoveAllEventHandlers "buttonclick"; + _ctrlArrowRight ctrladdeventhandler ["buttonclick",{["buttonCargo",[ctrlparent (_this select 0),+1]] call jn_fnc_arsenal;}]; + + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + _ctrlTemplateValue ctrlRemoveAllEventHandlers "lbdblclick"; + _ctrlTemplateValue ctrladdeventhandler ["lbdblclick",{["buttonTemplateOK",[ctrlparent (_this select 0)]] call jn_fnc_arsenal;}];//todo remove + + //disable annoying deselecting of tabs when you misclick + _ctrlMouseArea = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEAREA; + _ctrlMouseArea ctrlRemoveEventHandler ["mousebuttonclick",0]; + + _ctrlButtonInterface = _display displayctrl IDC_RSCDISPLAYARSENAL_CONTROLSBAR_BUTTONINTERFACE; + _ctrlButtonInterface ctrlRemoveAllEventHandlers "buttonclick"; + + //--- Menus + _sortValues = uinamespace getvariable ["jn_fnc_arsenal_sort",[]]; + { + _idc = _x; + + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); + _ctrlList ctrlRemoveAllEventHandlers "LBSelChanged"; + _ctrlList ctrlAddEventHandler ["MouseButtonUp", {uiNamespace setvariable ['jna_userInput',true];}]; + _ctrlList ctrlAddEventHandler ["LBSelChanged", format [" + if(uiNamespace getvariable ['jna_userInput',false])then{ + ['SelectItem',[ctrlparent (_this select 0),(_this select 0),%1]] call jn_fnc_arsenal; + uiNamespace setvariable ['jna_userInput',false]; + }; + ",_idc]]; + + + _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); + _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); + { + _x ctrlRemoveAllEventHandlers "buttonclick"; + if (_idc in [IDCS_LEFT]) then { + _x ctrladdeventhandler ["buttonclick",format ["['TabSelectLeft',[ctrlparent (_this select 0),%1],true] call jn_fnc_arsenal;",_idc]]; + } else { + _x ctrladdeventhandler ["buttonclick",format ["['TabSelectRight',[ctrlparent (_this select 0),%1],true] call jn_fnc_arsenal;",_idc]]; + }; + } foreach [_ctrlIcon,_ctrlTab]; + + //sort + _sort = _sortValues param [_idc,0]; + _ctrlSort = _display displayctrl (IDC_RSCDISPLAYARSENAL_SORT + _idc); + _ctrlSort ctrlRemoveAllEventHandlers "lbselchanged"; + + _ctrlSort lbsetcursel _sort; + _sortValues set [_idc,_sort]; + + } foreach IDCS; + uinamespace setvariable ["jn_fnc_arsenal_sort",_sortValues]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ReplaceBaseItems":{ + //replace magazines with partial filled, just like it was before entering the box, entering the arsanal refilles all ammo + _mags = missionNamespace getVariable "jna_magazines_init";//get ammo list from before arsenal started + + { + if!(isnil "_x")then{ + _container = switch _foreachindex do{ + case 0: {uniformContainer player;}; + case 1: {vestContainer player;}; + case 2: {backpackContainer player;}; + }; + clearMagazineCargo _container; + { + _item = _x select 0; + _amount = _x select 1; + _container addMagazineAmmoCargo [_item,1,_amount]; + }forEach _x; + }; + } forEach _mags; + + //replace all items to base type + _loadout = getUnitLoadout player;//this crap doesnt save weapon attachments in containers + + _unifrom = _loadout select 3; + _vest = _loadout select 4; + _backpack = _loadout select 5; + + _primaryweapon = _loadout select 0; + _secondaryweapon = _loadout select 1; + _handgunweapon = _loadout select 2; + + _primaryweapon set [0,((_primaryweapon select 0) call BIS_fnc_baseWeapon)]; + _secondaryweapon set [0,((_secondaryweapon select 0) call BIS_fnc_baseWeapon)]; + _handgunweapon set [0,((_handgunweapon select 0) call BIS_fnc_baseWeapon)]; + _backpack set [0,((_backpack select 0) call BIS_fnc_basicBackpack)]; + + _uniformitems = [_unifrom,1,[]] call BIS_fnc_param; + _vestitems = [_vest,1,[]] call BIS_fnc_param; + _backpackitems = [_backpack,1,[]] call BIS_fnc_param; + { + { + _item = [_x,0,[]] call BIS_fnc_param; + _itemname = [_item,0,""] call BIS_fnc_param; + if(typeName _item isequalto "ARRAY")then { + if(typeName _itemname isequalto "STRING")then { + if ( isClass (configFile >> "CFGweapons" >> _itemname)) then { + _item set [0,(_itemname call bis_fnc_baseWeapon)]; + }; + } + }; + }foreach _x; + }foreach [_uniformitems,_vestitems,_backpackitems]; //loop items in backpack + removeBackpackGlobal player; + removeVest player; + removeUniform player; + player setUnitLoadout _loadout; + + //re-add attachmets, saved before opening arsenal + { + _container = _x; + { + _container addItemCargo [_x,1]; + } forEach ((missionNamespace getVariable "jna_containerCargo_init") select _foreachindex); + } forEach [uniformContainer player,vestContainer player,backpackContainer player]; + }; + + + + + + + + + /////////////////////////////////////////////////////////////////////////////////////////// + case "TabSelectLeft": { + _display = _this select 0; + _index = _this select 1; + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + //create list + ["UpdateListGui",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; + + + //add current selected items + _inventory_player = ["ListCurSel",[_index]] call jn_fnc_arsenal; + ["UpdateItemAdd",[_index,_inventory_player,0]] call jn_fnc_arsenal; + + + //TODO sort (add select current item to sort?) + + ["ListSelectCurrent",[_display,_index]] call jn_fnc_arsenal; + + //show selected, disable others + { + _idc = _x; + _active = _idc == _index; + + { + _ctrlList = _display displayctrl (_x + _idc); + _ctrlList ctrlenable _active; + _ctrlList ctrlsetfade ([1,0] select _active); + _ctrlList ctrlcommit FADE_DELAY; + } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; + + _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); + _ctrlTab ctrlenable !_active; + + if (_active) then { + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); + _ctrlLineTabLeft = _display displayctrl IDC_RSCDISPLAYARSENAL_LINETABLEFT; + _ctrlLineTabLeft ctrlsetfade 0; + _ctrlTabPos = ctrlposition _ctrlTab; + _ctrlLineTabPosX = (_ctrlTabPos select 0) + (_ctrlTabPos select 2) - 0.01; + _ctrlLineTabPosY = (_ctrlTabPos select 1); + _ctrlLineTabLeft ctrlsetposition [ + safezoneX,//_ctrlLineTabPosX, + _ctrlLineTabPosY, + (ctrlposition _ctrlList select 0) - safezoneX,//_ctrlLineTabPosX, + ctrlposition _ctrlTab select 3 + ]; + _ctrlLineTabLeft ctrlcommit 0; + ctrlsetfocus _ctrlList; + }; + + _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); + //_ctrlIcon ctrlsetfade ([1,0] select _active); + _ctrlIcon ctrlshow _active; + _ctrlIcon ctrlenable !_active; + + _ctrlIconBackground = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICONBACKGROUND + _idc); + _ctrlIconBackground ctrlshow _active; + } foreach [IDCS_LEFT]; + + //Show left list background + { + _ctrl = _display displayctrl _x; + _ctrl ctrlsetfade 0; + _ctrl ctrlcommit FADE_DELAY; + } foreach [ + IDC_RSCDISPLAYARSENAL_LINETABLEFT, + IDC_RSCDISPLAYARSENAL_FRAMELEFT, + IDC_RSCDISPLAYARSENAL_BACKGROUNDLEFT + ]; + + //--- Weapon attachments + _showItems = _index in [IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON,IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON,IDC_RSCDISPLAYARSENAL_TAB_HANDGUN]; + _fadeItems = [1,0] select _showItems; + { + _idc = _x; + _ctrl = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); + _ctrl ctrlenable _showItems; + _ctrl ctrlsetfade _fadeItems; + _ctrl ctrlcommit 0;//FADE_DELAY; + { + _ctrl = _display displayctrl (_x + _idc); + _ctrl ctrlenable _showItems; + _ctrl ctrlsetfade _fadeItems; + _ctrl ctrlcommit FADE_DELAY; + } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; + } foreach [ + IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, + IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD + ]; + + //Select right tab + if (_showItems) then { + ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC]] call jn_fnc_arsenal; + }; + + //--- Containers + _showCargo = _index in [IDC_RSCDISPLAYARSENAL_TAB_UNIFORM,IDC_RSCDISPLAYARSENAL_TAB_VEST,IDC_RSCDISPLAYARSENAL_TAB_BACKPACK]; + _fadeCargo = [1,0] select _showCargo; + { + _idc = _x; + _ctrl = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); + _ctrl ctrlenable _showCargo; + _ctrl ctrlsetfade _fadeCargo; + _ctrl ctrlcommit 0;//FADE_DELAY; + { + _ctrlList = _display displayctrl (_x + _idc); + _ctrlList ctrlenable _showCargo; + _ctrlList ctrlsetfade _fadeCargo; + _ctrlList ctrlcommit FADE_DELAY; + } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED]; + } foreach [ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, + IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, + IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC + ]; + _ctrl = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + _ctrl ctrlsetfade _fadeCargo; + _ctrl ctrlcommit FADE_DELAY; + if (_showCargo) then { + //update weigth + _load = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; + }; + + _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + _ctrlLoadCargo progresssetposition _load; + + ['TabSelectRight',[_display, IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]] call jn_fnc_arsenal; + }; + + + //Show right list background + _showRight = _showItems || _showCargo; + _fadeRight = [1,0] select _showRight; + { + _ctrl = _display displayctrl _x; + _ctrl ctrlsetfade _fadeRight; + _ctrl ctrlcommit FADE_DELAY; + } foreach [ + IDC_RSCDISPLAYARSENAL_LINETABRIGHT, + IDC_RSCDISPLAYARSENAL_FRAMERIGHT, + IDC_RSCDISPLAYARSENAL_BACKGROUNDRIGHT + ]; + + //["updateItemInfo",[_display,_ctrlList, _index]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "TabSelectRight": { + private ["_ctrlList","_index","_cursel"]; + _display = _this select 0; + _index = _this select 1; + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + _type = (ctrltype _ctrlList == 102); + + + _inventory = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)then{ + + _usableMagazines = []; + { + _cfgWeapon = configfile >> "cfgweapons" >> _x; + { + _cfgMuzzle = if (_x == "this") then {_cfgWeapon} else {_cfgWeapon >> _x}; + { + _usableMagazines pushBackUnique _x; + } foreach getarray (_cfgMuzzle >> "magazines"); + } foreach getarray (_cfgWeapon >> "muzzles"); + } foreach (weapons player - ["Throw","Put"]); + + + + { + { + _usableMagazines pushBackUnique _x; + } forEach (getarray (configfile >> "cfgweapons" >> _x >> "magazines")); + }forEach [primaryweapon player, secondaryweapon player, handgunweapon player]; + + //loop all magazines and find usable + _magazines = []; + { + _itemAvailable = _x select 0; + _amountAvailable = _x select 1; + + if(_itemAvailable in _usableMagazines)then{ + _magazines set [count _magazines,[_itemAvailable, _amountAvailable]]; + }; + } forEach (jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL); + //return + _magazines; + }else{ + (jna_dataList select _index); + }; + + ["CreateList",[ _display, _index, _inventory]] call jn_fnc_arsenal; + switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMACC; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD: { + _ctrlListPrimaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON); + _ctrlListSecondaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON); + _ctrlListHandgun = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN); + + _weaponItems = switch true do { + case (ctrlenabled _ctrlListPrimaryWeapon): {primaryweaponitems player}; + case (ctrlenabled _ctrlListSecondaryWeapon): {secondaryweaponitems player}; + case (ctrlenabled _ctrlListHandgun): {handgunitems player}; + default {["","","",""]}; + }; + _accIndex = [ + IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, + IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD + ] find _index; + + _item = _weaponItems select _accIndex; + ["UpdateItemAdd",[_index,_item,0]] call jn_fnc_arsenal; + ["ListSelectCurrent",[_display,_index,_item]] call jn_fnc_arsenal; + }; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC:{ + _ctrlListUniform = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM); + _ctrlListVest = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST); + _ctrlListBackPack = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK); + + _items = switch true do { + case (ctrlenabled _ctrlListUniform): {uniformitems player;}; + case (ctrlenabled _ctrlListVest): {vestitems player;}; + case (ctrlenabled _ctrlListBackPack): {backpackitems player;}; + default {_items = [];}; + }; + + _itemsUnique = []; + { + _type = _x call jn_fnc_arsenal_itemType; + if(_type == _index || (_type == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL && _index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG))then{ + _itemsUnique pushBackUnique _x; + }; + }foreach _items; + + _inventory = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)then{ + { + { + if(_x in _itemsUnique)then{ + ["UpdateItemAdd",[_index,_x,0]] call jn_fnc_arsenal; + } + } forEach (getarray (configfile >> "cfgweapons" >> _x >> "magazines")); + }forEach [primaryweapon player, secondaryweapon player, handgunweapon player]; + }else{ + { + ["UpdateItemAdd",[_index,_x,0]] call jn_fnc_arsenal; + } forEach _itemsUnique; + }; + }; + }; + + ["UpdateListGui",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; + + + + _ctrFrameRight = _display displayctrl IDC_RSCDISPLAYARSENAL_FRAMERIGHT; + _ctrBackgroundRight = _display displayctrl IDC_RSCDISPLAYARSENAL_BACKGROUNDRIGHT; + + { + _idc = _x; + _active = _idc == _index; + { + _ctrlList = _display displayctrl (_x + _idc); + _ctrlList ctrlenable _active; + _ctrlList ctrlsetfade ([1,0] select _active); + _ctrlList ctrlcommit FADE_DELAY; + } foreach [IDC_RSCDISPLAYARSENAL_LIST,IDC_RSCDISPLAYARSENAL_LISTDISABLED,IDC_RSCDISPLAYARSENAL_SORT]; + + _ctrlTab = _display displayctrl (IDC_RSCDISPLAYARSENAL_TAB + _idc); + _ctrlTab ctrlenable (!_active && ctrlfade _ctrlTab == 0); + + if (_active) then { + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _idc); + _ctrlLineTabRight = _display displayctrl IDC_RSCDISPLAYARSENAL_LINETABRIGHT; + _ctrlLineTabRight ctrlsetfade 0; + _ctrlTabPos = ctrlposition _ctrlTab; + _ctrlLineTabPosX = (ctrlposition _ctrlList select 0) + (ctrlposition _ctrlList select 2); + _ctrlLineTabPosY = (_ctrlTabPos select 1); + _ctrlLineTabRight ctrlsetposition [ + _ctrlLineTabPosX, + _ctrlLineTabPosY, + safezoneX + safezoneW - _ctrlLineTabPosX,//(_ctrlTabPos select 0) - _ctrlLineTabPosX + 0.01, + ctrlposition _ctrlTab select 3 + ]; + _ctrlLineTabRight ctrlcommit 0; + ctrlsetfocus _ctrlList; + + _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + _ctrlListPos = ctrlposition _ctrlList; + _ctrlListPos set [3,(_ctrlListPos select 3) + (ctrlposition _ctrlLoadCargo select 3)]; + { + _x ctrlsetposition _ctrlListPos; + _x ctrlcommit 0; + } foreach [_ctrFrameRight,_ctrBackgroundRight]; + + if ( + _idc in [ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, + IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, + IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC + ] + ) then { + //to reselect same right-tab when switching between uniform vest backpack + uiNamespace setVariable ["jna_lastCargoListSelected", _idc]; + + //--- Update counts for all items in the list + _container = switch true do { + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM))): {uniformContainer player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST))): {vestContainer player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK))): {backpackContainer player}; + default {""}; + }; + + _items = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{ + itemCargo _container; + }else{ + magazinesAmmoCargo _container; + }; + + for "_l" from 0 to ((lnbsize _ctrlList select 0) - 1) do { + _dataStr = _ctrlList lnbdata [_l,0]; + _data = call compile _dataStr; + _item = _data select 0; + _amount = 0; + { + _itemX = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{_x}else{_x select 0}; + _amountX = if(_idc == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{1}else{_x select 1}; + if(_itemX == _item)then{ + _amount = _amount + _amountX; + } + } forEach _items; + + _ctrlList lnbsettext [[_l,2],str (_amount)]; + }; + ["SelectItemRight",[_display,_ctrlList,_idc]] call jn_fnc_arsenal; + }; + }; + + _ctrlIcon = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICON + _idc); + //_ctrlIcon ctrlenable false; + _ctrlIcon ctrlshow _active; + _ctrlIcon ctrlenable (!_active && ctrlfade _ctrlTab == 0); + + _ctrlIconBackground = _display displayctrl (IDC_RSCDISPLAYARSENAL_ICONBACKGROUND + _idc); + _ctrlIconBackground ctrlshow _active; + } foreach [IDCS_RIGHT]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "CreateListAll":{ + _display = _this select 0; + _inventory_box_all = jna_dataList; + { + _inventory_box = _x; + _index = _foreachindex; + if(_index in [IDCS_LEFT])then{ + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + lbclear _ctrlList; + //create list with avalable items + ["CreateList",[_display,_index,_inventory_box]] call jn_fnc_arsenal; + }; + } forEach _inventory_box_all; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ListCurSel":{ + private _index = _this select 0; + + _return = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: { + primaryWeapon player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: { + secondaryweapon player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { + handgunweapon player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: { + uniform player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: { + vest player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { + backPack player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { + headgear player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: { + goggles player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_NVGS: { + hmd player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS: { + binocular player; + }; + case IDC_RSCDISPLAYARSENAL_TAB_RADIO:{ + _return1 = ""; + { + if(_index == _x call jn_fnc_arsenal_itemType)exitwith{_return1 = _x;}; + }foreach assignedItems player; + + //TFAR FIX + _radioName = getText(configfile >> "CfgWeapons" >> _return1 >> "tf_parent"); + if!(_radioName isEqualTo "")then{_return1 = _radioName;}; + + _return1; + }; + case IDC_RSCDISPLAYARSENAL_TAB_MAP; + case IDC_RSCDISPLAYARSENAL_TAB_GPS; + case IDC_RSCDISPLAYARSENAL_TAB_COMPASS; + case IDC_RSCDISPLAYARSENAL_TAB_WATCH:{ + _return1 = ""; + { + if(_index == _x call jn_fnc_arsenal_itemType)exitwith{_return1 = _x;}; + }foreach assignedItems player; + _return1; + }; + }; + _return; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ListSelectCurrent":{ + _display = _this select 0; + _index = _this select 1; + _item = _this select 2; + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + + + if(isnil "_item")then{ + _item = ["ListCurSel",[_index]] call jn_fnc_arsenal; + }; + + for "_l" from 0 to (lbsize _ctrlList - 1) do { + _dataStr = _ctrlList lbdata _l; + _data = call compile _dataStr; + _item_l = _data select 0; + if (_item isEqualTo _item_l) exitwith { + _ctrlList lbsetcursel _l; + }; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "CreateList":{ + _display = _this select 0; + _index = _this select 1; + _inventory = _this select 2; + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + _type = (ctrltype _ctrlList == 102); + if _type then{ + lnbclear _ctrlList; + }else{ + lbclear _ctrlList; + + // add empty + if!( + _index in [ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, + IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, + IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC + ])then{ + + //add empty + _emptyString = (" Qty: Name: "); + if( + _index in [ + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN + ] + )then{ + _emptyString = (" ") + _emptyString; //little longer for bigger icons + }; + _lbAdd = _ctrlList lbadd _emptyString; + _data = str ["",0,""]; + _ctrlList lbsetdata [_lbAdd,_data]; + }; + }; + + //fill + { + _item = _x select 0; + _amount = _x select 1; + ["CreateItem",[_display,_ctrlList,_index,_item,_amount]] call jn_fnc_arsenal; + } forEach _inventory; + + //TODO better sorting of scopes gray items? + ["ListSort",[_display,_index]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ListSort":{ + _display = _this select 0; + _index = _this select 1; + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _index); + _type = (ctrltype _ctrlList == 102); + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "UpdateListGui":{ + _display = _this select 0; + _ctrlList = _this select 1; + _index = _this select 2; + + _type = (ctrltype _ctrlList == 102); + _rows = if _type then{ (lnbsize _ctrlList select 0) - 1}else{lbsize _ctrlList - 1}; + for "_l" from 0 to _rows do { + ["UpdateItemGui",[_display,_ctrlList,_index,_l]] call jn_fnc_arsenal; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// GLOBAL + case "UpdateItemAdd":{ + params ["_index","_item","_amount",["_updateDataList",false]]; + + //update datalist + if(_updateDataList)then{ + jna_dataList set [_index, [jna_dataList select _index, [_item, _amount]] call jn_fnc_arsenal_addToArray]; + }; + + private _display = uiNamespace getVariable ["arsanalDisplay","No display"]; + + if (typeName _display == "STRING") exitWith {}; + if(str _display isEqualTo "No display")exitWith{}; + + if(_item isEqualTo "")exitWith{}; + + if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL)then{ + if (ctrlEnabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)))then{ + _index = IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + }; + }; + + private _indexList = _index; + if(UINamespace getVariable ["jn_type","arsenal"] isEqualTo "vehicleArsenal")then{ + _indexList = [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL] select (_index in [IDCS_LEFT]); + }; + + private _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _indexList); + private _type = (ctrltype _ctrlList == 102); + private _cursel = if _type then{-1}else{lbCurSel _ctrlList}; + + if((_index in [IDCS_RIGHT]) && !(ctrlEnabled _ctrlList)) exitWith{}; + + _l_found = -1; + _rowSize = if _type then{((lnbSize _ctrlList select 0) - 1);}else{(lbsize _ctrlList - 1);}; + for "_l" from 0 to _rowSize do { + _dataStr = if _type then{_ctrlList lnbdata [_l,0]}else{_ctrlList lbdata _l}; + _dataCurrent = call compile _dataStr; + _itemCurrent = _dataCurrent select 0; + _amountCurrent = _dataCurrent select 1; + _displayNameCurrent = _dataCurrent select 2; + if(_item isEqualTo _itemCurrent)exitWith{ + _l_found = _l; + if(_amount == -1 || {_amountCurrent == -1})then{ + _amount = -1; + }else{ + _amount =_amountCurrent + _amount; + }; + _data = str [_item,_amount,_displayNameCurrent]; + if _type then{_ctrlList lnbsetdata [[_l,0],_data]}else{_ctrlList lbsetdata [_l,_data]}; + }; + }; + + + if(_l_found == -1)then{ + ["CreateItem",[_display,_ctrlList,_index,_item,_amount]] call jn_fnc_arsenal; + _l_found = _rowSize + 1; + }; + ["UpdateItemGui",[_display,_ctrlList,_index,_l_found]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// GLOBAL + case "UpdateItemRemove":{ + params ["_index","_item","_amount",["_updateDataList",false]]; + + //update datalist + if(_updateDataList)then{ + jna_dataList set [_index, [jna_dataList select _index, [_item, _amount]] call jn_fnc_arsenal_removeFromArray]; + }; + + private _display = uiNamespace getVariable ["arsanalDisplay","No display"]; + + if (typeName _display == "STRING") exitWith {}; + if(str _display isEqualTo "No display")exitWith{}; + if(_item isEqualTo "")exitWith{}; + + if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL)then{ + if (ctrlEnabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG)))then{ + _index = IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + }; + }; + + //when used by vehicleArsenal; + _indexList = _index; + if(UINamespace getVariable ["jn_type","arsenal"] isEqualTo "vehicleArsenal")then{ + _indexList = [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL] select (_index in [IDCS_LEFT]); + }; + + private _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _indexList); + private _type = ctrltype _ctrlList == 102; + private _cursel = if _type then{-1}else{lbCurSel _ctrlList}; + + if((_index in [IDCS_RIGHT]) && !(ctrlEnabled _ctrlList)) exitWith{}; + + _l_found = -1; + _rowSize = if _type then{((lnbSize _ctrlList select 0) - 1);}else{(lbsize _ctrlList - 1);}; + for "_l" from 0 to _rowSize do { + _dataStr = if _type then{_ctrlList lnbdata [_l,0]}else{_ctrlList lbdata _l}; + _dataCurrent = call compile _dataStr; + _itemCurrent = _dataCurrent select 0; + _amountCurrent = _dataCurrent select 1; + _displayNameCurrent = _dataCurrent select 2; + if(_item isEqualTo _itemCurrent)exitWith{ + _l_found = _l; + if(_amount == -1)then{ + _amount = 0;//unlimited remove + }else{ + if(_amountCurrent == -1)then{ + _amount = -1; + }else{ + _amount = _amountCurrent - _amount; + if(_amount<0)then{_amount = 0;}; + } + }; + + if(_amount <= 0 && { + if _type then{ + (parseNumber (_ctrlList lnbText [_l,2]) == 0); + }else{ + (_l != _cursel); + } + })then{ + if(_type)then{_ctrlList lnbDeleteRow _l;}else{_ctrlList lbDelete _l;}; + if(_cursel > _l)then{ + //reselect item if a item above was removed + _ctrlList lbSetCurSel (_cursel-1); + }; + }else{ + _data = str [_item,_amount,_displayNameCurrent]; + if _type then{_ctrlList lnbsetdata [[_l,0],_data]}else{_ctrlList lbsetdata [_l,_data]}; + ["UpdateItemGui",[_display,_ctrlList,_index,_l_found]] call jn_fnc_arsenal; + }; + }; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "CreateItem":{ + private _display = _this select 0; + private _ctrlList = _this select 1; + private _index = _this select 2; + private _item = _this select 3; if(_item isEqualTo "")exitWith{}; + private _amount = _this select 4; + + private _xCfg = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {configfile >> "cfgvehicles" >> _item}; + case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: {configfile >> "cfgglasses" >> _item}; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT: {configfile >> "cfgmagazines" >> _item}; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC: {configfile >> "cfgweapons" >> _item}; + default {configfile >> "cfgweapons" >> _item}; + }; + private _displayName = gettext (_xCfg >> "displayName"); + private _data = str [_item,_amount,_displayName]; + private _lbAdd = 0; + + if (ctrltype _ctrlList == 102) then { + _lbAdd = _ctrlList lnbaddrow ["",_displayName,str 0]; + _ctrlList lnbsetdata [[_lbAdd,0],_data]; + _ctrlList lnbsetpicture [[_lbAdd,0],gettext (_xCfg >> "picture")]; + + _mass = if(_index == IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC)then{ + getnumber (_xCfg >> "itemInfo" >> "mass"); + }else{ + getnumber (_xCfg >> "mass"); + }; + _ctrlList lnbsetvalue [[_lbAdd,0], _mass]; + + }else{ + _lbAdd = _ctrlList lbadd _displayName; + _ctrlList lbsetdata [_lbAdd,_data]; + _ctrlList lbsetpicture [_lbAdd,gettext (_xCfg >> "picture")]; + + //add magazine icon to weapons + if(_index in [ + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN + ])then{ + _ammo_logo = getText(configfile >> "RscDisplayArsenal" >> "Controls" >> "TabCargoMag" >> "text"); + _ctrlList lbsetpictureright [_lbAdd,_ammo_logo]; + }; + + //grayout attachments + if(_index in [ + IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, + IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD + ])then{ + _weapon = switch true do { + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON))): {primaryweapon player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON))): {secondaryweapon player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN))): {handgunweapon player}; + default {""}; + }; + _compatibleItems = _weapon call bis_fnc_compatibleItems; + if not (({_x == _item} count _compatibleItems > 0) || _item isequalto "")exitwith{ + _ctrlList lbSetColor [_lbAdd, [1,1,1,0.25]]; + }; + }; + + }; + + //["UpdateItemGui",[_display,_index,_lbAdd]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "UpdateItemGui":{ + _display = _this select 0; + _ctrlList = _this select 1; + _index = _this select 2; + _l = _this select 3; + + _type = (ctrltype _ctrlList == 102); + _cursel = lbcursel _ctrlList; + _dataStr = if _type then{_ctrlList lnbData [_l,0]}else{_ctrlList lbdata _l}; + _data = call compile _dataStr; + _item = _data select 0; + _amount = _data select 1; + _displayName = _data select 2; + + + + //skip empty + if(_item isEqualTo "")exitWith{}; + + //update name with counters and ammocounters (need to be done after sorting) + //TODO change to define + _checkAmount = { + private["_amount","_suffix","_prefix","_amountString"]; + _amount = _this; + + + if(_amount == -1)exitWith{"[ ∞ ] ";}; + + _suffix = ""; + _prefix = ""; + if(_amount > 999)then{ + _amount = round(_amount/1000);_suffix="k"; + _prefix = switch true do{ + case(_amount>=100):{_amount = 99; "";}; + case(_amount>=10):{"";}; + case(_amount>=0):{"0";}; + }; + }else{ + _prefix = switch true do{ + case(_amount>=100):{"";}; + case(_amount>=10):{"0";}; + case(_amount>=0):{"00";}; + }; + }; + ("[ " + _prefix + (str _amount) + _suffix + " ] "); + }; + + //grayout items for non members, right items are done in selectRight + _min = jna_minItemMember select _index; + _grayout = false; + if ((_amount <= _min) AND (_amount != -1) AND !([player] call isMember)) then{_grayout = true}; + + _color = [1,1,1,1]; + if(_grayout)then{ + _color = [1,1,0,0.60]; + if _type then{ + _ctrlList lnbSetColor [[_l,1], _color]; + _ctrlList lnbSetColor [[_l,2], _color]; + }else{ + _ctrlList lbSetColor [_l, _color]; + }; + }; + + + //ammmo icon for weapons + _ammo_logo = getText(configfile >> "RscDisplayArsenal" >> "Controls" >> "TabCargoMag" >> "text"); + if _type then{ + _text = ((_amount call _checkAmount) + _displayName); + if(_index in [ + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN + ])then{ + _text = " " + _text; + }; + _ctrlList lnbSetText [[_l,1],_text]; + + }else{ + _ctrlList lbSetText [_l, ((_amount call _checkAmount) + _displayName)]; + + //update ammo counter color on weapons + if(_index in [ + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON, + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN + ])then{ + //check how many useable mags there are + _ammoTotal = 0; + //_compatableMagazines = server getVariable [format ["%1_mags", _item],[]];//TODO marker for changed entry + scopeName "updateWeapon";//TODO marker for changed entry + _compatableMagazines = (getarray (configfile >> "cfgweapons" >> _item >> "magazines"));//TODO marker for changed entry + { + private ["_amount"]; + _magName = _x select 0; + _amount = _x select 1; + //if(_amount == -1)exitWith{_ammoTotal = -1};//TODO marker for changed entry + if (_magName in _compatableMagazines) then { + if (_amount == -1) then {_ammoTotal = -1; breakTo "updateWeapon"};//TODO marker for changed entry + _ammoTotal = _ammoTotal + _amount; + } + } forEach (jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL); + + //change color; + _colorMult = switch (_item call BIS_fnc_itemType select 1) do{ + case "AssaultRifle": {1500}; + case "Handgun": {400}; + case "MachineGun": {4000}; + case "Shotgun": {300}; + case "Rifle": {1500}; + case "SubmachineGun": {800}; + case "SniperRifle": {200}; + Default {20};//launchers + }; + _colorMult = _ammoTotal / _colorMult; + if(_colorMult > 1 || _ammoTotal == -1)then{_colorMult = 1;}; + _red = -0.6*_colorMult+0.8; + _green = 0.6*_colorMult+0.2; + _ctrlList lbSetPictureRightColorSelected [_l,[_red,_green,0.3,1]]; + _ctrlList lbSetPictureRightColor [_l,[_red,_green,0.3,1]]; + + _strAmount = switch true do { + case (_amount == 0): { + "Looks like I am the only one using this today" + }; + case (_amount > 50): { + "More than enough for a whole army" + }; + case (_amount > 10): { + "Many of these left" + }; + case (_amount > 3): { + "Some of these left" + }; + case (_amount > 1): { + "If I want one I need to take it before some one else does" + }; + case (_amount == 1): { + "The last one in the box" + }; + case (_amount == -1): {//TODO marker for changed entry + "More than enough for a whole army" + }; + default{""}; + }; + + _strAmmo = switch true do { + case (_colorMult == 0): { + ", but there is no ammo for it" + }; + case (_colorMult > 0.9): { + ", and there is enough ammo for it" + }; + case (_colorMult > 0.2): { + ", and there is still some ammo for it" + }; + case (_colorMult > 0): { + ", but there are only a few shots for it" + }; + default{""}; + }; + + _ctrlList lbsettooltip [_l, (_strAmount + _strAmmo)]; + }; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "updateItemInfo": { + _display = _this select 0; + _ctrlList = _this select 1; + _index = _this select 2; + + _cursel = lbcursel _ctrlList; + _type = (ctrltype _ctrlList == 102); + _dataStr = if _type then{_ctrlList lnbData [_cursel,0]}else{_ctrlList lbdata _cursel}; + _data = call compile _dataStr; + _item = _data select 0; + + + //--- Calculate load + _ctrlLoad = _display displayctrl IDC_RSCDISPLAYARSENAL_LOAD; + _ctrlLoad progresssetposition load player; + + //update weight + _load = switch true do { + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_UNIFORM))): {loaduniform player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_VEST))): {loadvest player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_BACKPACK))): {loadbackpack player}; + default {0}; + }; + + _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + _ctrlLoadCargo progresssetposition _load; + + _itemCfg = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {configfile >> "cfgvehicles" >> _item}; + case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: {configfile >> "cfgglasses" >> _item}; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC: {configfile >> "cfgmagazines" >> _item}; + default {configfile >> "cfgweapons" >> _item}; + }; + + ["ShowItemInfo",[_itemCfg]] call jn_fnc_arsenal; + ["ShowItemStats",[_itemCfg]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "SelectItem": { + params ["_display","_ctrlList","_index"]; + + private _cursel = lbcursel _ctrlList; + private _type = (ctrltype _ctrlList == 102); + private _dataStr = if _type then{_ctrlList lnbData [_cursel,0]}else{_ctrlList lbdata _cursel}; + private _data = call compile _dataStr; + private _item = _data select 0; + private _amount = _data select 1; + private _displayName = _data select 2; + + private _oldItem = ""; + + private _ctrlListPrimaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON); + private _ctrlListSecondaryWeapon = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON); + private _ctrlListHandgun = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN); + + //check if weapon is unlocked + private _min = jna_minItemMember select _index; + if ((_amount <= _min) AND (_amount != -1) AND (_item !="") AND !([player] call isMember) AND !_type) exitWith{ + ['showMessage',[_display,"We are low on this item, only members may use it"]] call jn_fnc_arsenal; + + //reset _cursel + if(missionnamespace getvariable ["jna_reselect_item",true])then{//prefent loop when unavalable item was worn and a other unavalable item was selected + missionnamespace setvariable ["jna_reselect_item",false]; + ["ListSelectCurrent",[_display,_index]] call jn_fnc_arsenal; + missionnamespace setvariable ["jna_reselect_item",true]; + }; + }; + + switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM; + case IDC_RSCDISPLAYARSENAL_TAB_VEST; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { + _oldItem = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{ uniform player;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{ vest player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{ backpack player;}; + }; + + if (_oldItem != _item) then { + + _container = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{uniformContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{vestContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{ backpackContainer player;}; + }; + + _magazines = magazinesAmmoCargo _container; + + _items = [""] + (itemCargo _container); + { + _items = _items + [ + (_x select 0), //weapon + (_x select 1), //attachments + (_x select 2), + (_x select 3), + (_x select 5) //bipod + ]; + } forEach (weaponsItemsCargo _container); + _items = _items - [""]; + + + //remove container + switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{removeUniform player;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{removeVest player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{removebackpack player;}; + }; + + [_index, _oldItem] call jn_fnc_arsenal_addItem; + + if (_item != "") then{ + switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player forceaddUniform _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player addVest _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player addbackpack _item;}; + }; + + //container changed + _container = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{ uniformContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{vestContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{backpackContainer player;}; + }; + + [_index, _item] call jn_fnc_arsenal_removeItem; + }; + { + _canAdd = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player canAddItemToUniform _x;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player canAddItemToVest _x;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player canAddItemToBackpack _x;}; + }; + if(_canAdd)then{ + switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player addItemToUniform _x;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player addItemToVest _x;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player additemtobackpack _x;}; + }; + + }else{ + _indexItem = _x call jn_fnc_arsenal_itemType; + if!(_indexItem in [ + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG, + IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, + IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW, + IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT + ])then{ + [_indexItem, _x] call jn_fnc_arsenal_addItem; + }; + }; + } foreach _items; + + //add back ammo, if possible + { + _magazine = _x select 0; + _count = _x select 1; + + _canAdd = switch _index do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM:{player canAddItemToUniform _magazine;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST:{player canAddItemToVest _magazine;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK:{player canAddItemToBackpack _magazine;}; + }; + if(_canAdd)then{ + _container addMagazineAmmoCargo [_magazine,1,_count]; + }else{ + _indexItem = _magazine call jn_fnc_arsenal_itemType; + [_indexItem, _magazine, _count] call jn_fnc_arsenal_addItem; + }; + }forEach _magazines; + + }; + _lastCargoListSelected = uiNamespace getVariable ["jna_lastCargoListSelected", IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]; + ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG]] call jn_fnc_arsenal; + }; + case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { + _oldItem = headgear player; + if (_oldItem != _item) then { + removeheadgear player; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then{ + player addheadgear _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + diag_log ["_oldItem",_oldItem,_item]; + + }; + case IDC_RSCDISPLAYARSENAL_TAB_GOGGLES: { + _oldItem = goggles player; + if (_oldItem != _item) then { + removeGoggles player; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then{ + player addGoggles _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_NVGS:{ + _oldItem = hmd player; + if (_oldItem != _item) then { + player removeweapon _oldItem; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then{ + player addweapon _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_BINOCULARS: { + _oldItem = binocular player; + if (_oldItem != _item) then { + player removeweapon _oldItem; + [_index,_oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then{ + player addweapon _item; + _magazines = getarray (configfile >> "cfgweapons" >> _item >> "magazines"); + if (count _magazines > 0) then { + _mag = (_magazines select 0); + if([jna_dataList select IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, _mag] call jn_fnc_arsenal_itemCount > 0)then{ + if((player canAddItemToUniform _mag)||(player canAddItemToVest _mag)||(player canAddItemToBackpack _mag))then{ + player addmagazine _mag; + [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL, _mag]call jn_fnc_arsenal_removeItem; + }else{ + titleText["I can't take batteries, I have no space for it", "PLAIN"]; + }; + }else{ + titleText["Shit there are no more batteries", "PLAIN"]; + }; + }; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { + _oldItem = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweapon player}; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweapon player}; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunweapon player}; + default {""}; + }; + + if (_oldItem != _item) then { + _oldAttachments = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweaponitems player}; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweaponitems player}; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunitems player}; + default {""}; + }; + _oldAttachments = _oldAttachments - [""]; + + //remove magazines + _oldMagazines = magazinesAmmoFull player;//["30Rnd_65x39_caseless_mag",30,false,-1,"Uniform"] + _loadout = getUnitLoadout player; + {player removeMagazine _x} forEach magazines player; + + + //remove weapon + player removeweapon _oldItem; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + + //add new weapon + if (_item != "") then { + //give player new weapon + [player,_item,0] call bis_fnc_addweapon; + [_index, _item]call jn_fnc_arsenal_removeItem; + + //try adding back attachments + { + switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {player addPrimaryWeaponItem _x}; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {player addSecondaryWeaponItem _x}; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {player addhandgunitem _x}; + default {""}; + }; + }foreach _oldAttachments; + + }; + + //re-add magazines + _loadoutNew = getUnitLoadout player; + _loadout set[_index, _loadoutNew select _index]; + + removeBackpackGlobal player; + removeVest player; + removeUniform player; + player setUnitLoadout _loadout; + + _oldCompatableMagazines = getarray (configfile >> "cfgweapons" >> _oldItem >> "magazines"); + _newCompatableMagazines = getarray (configfile >> "cfgweapons" >> _item >> "magazines"); + { + _magazine = _x select 0; + _amount = _x select 1; + _loaded = _x select 2; + _location = _x select 3; + if _loaded then{ + if ((_location == 1 && _index == IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON) || + (_location == 4 && _index == IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON) || + (_location == 2 && _index == IDC_RSCDISPLAYARSENAL_TAB_HANDGUN)) + then{ + player addweaponitem [_item,[_magazine,_amount]]; + }; + }else{ + if(_magazine in _oldCompatableMagazines)then{ + if!(_magazine in _newCompatableMagazines)then{ + player removemagazine _magazine; + }; + }; + }; + }forEach _oldMagazines; + + _updateMagazineList = []; + { + _magazine = _x select 0; + _amount = _x select 1; + _indexItem = _magazine call jn_fnc_arsenal_itemType; + + [_indexItem, _magazine, _amount] call jn_fnc_arsenal_addItem;//TODO + }forEach(_oldMagazines - magazinesAmmoFull player); + + _newAttachments = switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON: {primaryweaponitems player}; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON: {secondaryweaponitems player}; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: {handgunitems player}; + default {""}; + }; + _newAttachments = _newAttachments - [""]; + + //save and load attachments + { + private["_idcList","_type"]; + _type = _x call bis_fnc_itemType; + _idcList = switch (_type select 1) do { + case "AccessoryMuzzle": {IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE}; + case "AccessoryPointer": {IDC_RSCDISPLAYARSENAL_TAB_ITEMACC}; + case "AccessorySights": {IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC}; + case "AccessoryBipod": {IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD}; + default {-1}; + }; + if(_idcList != -1)then{[_idcList, _x] call jn_fnc_arsenal_addItem}; + }foreach _oldAttachments - _newAttachments; + { + private["_idcList","_type"]; + _type = _x call bis_fnc_itemType; + _idcList = switch (_type select 1) do { + case "AccessoryMuzzle": {IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE}; + case "AccessoryPointer": {IDC_RSCDISPLAYARSENAL_TAB_ITEMACC}; + case "AccessorySights": {IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC}; + case "AccessoryBipod": {IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD}; + default {-1}; + }; + if(_idcList != -1)then{[_idcList, _x] call jn_fnc_arsenal_removeItem}; + }foreach _newAttachments - _oldAttachments; + + ['TabSelectRight',[_display,IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC]] call jn_fnc_arsenal; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_MAP; + case IDC_RSCDISPLAYARSENAL_TAB_GPS; + case IDC_RSCDISPLAYARSENAL_TAB_RADIO; + case IDC_RSCDISPLAYARSENAL_TAB_COMPASS; + case IDC_RSCDISPLAYARSENAL_TAB_WATCH: { + _oldItem = ""; + { + if(_index == (_x call jn_fnc_arsenal_itemType))exitwith{ + _oldItem = _x; + }; + }foreach assignedItems player; + + //TFAR FIX + _OldItemUnequal = _oldItem; + if(_index == IDC_RSCDISPLAYARSENAL_TAB_COMPASS)then{ + _radioName = getText(configfile >> "CfgWeapons" >> _oldItem >> "tf_parent"); + if!(_radioName isEqualTo "")exitWith{ + _OldItemUnequal = _radioName; + }; + }; + + if (_oldItem != _item) then { + player unassignitem _OldItemUnequal; + player removeitem _OldItemUnequal; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then { + player linkitem _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMACC; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE; + case IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD: { + + _weapon = switch true do { + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON))): {primaryweapon player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON))): {secondaryweapon player}; + case (ctrlenabled (_display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + IDC_RSCDISPLAYARSENAL_TAB_HANDGUN))): {handgunweapon player}; + default {""}; + }; + + //prevent selecting grey items, needs to be this complicated because bis_fnc_compatibleItems returns some crap resolts like optic_aco instead of Optic_Aco + _compatibleItems = _weapon call bis_fnc_compatibleItems; + if not (({_x == _item} count _compatibleItems > 0) || _item isequalto "")exitwith{ + ['TabSelectRight',[_display,_index]] call jn_fnc_arsenal; + }; + + _accIndex = [ + IDC_RSCDISPLAYARSENAL_TAB_ITEMMUZZLE, + IDC_RSCDISPLAYARSENAL_TAB_ITEMACC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMOPTIC, + IDC_RSCDISPLAYARSENAL_TAB_ITEMBIPOD + ] find _index; + + switch true do { + case (ctrlenabled _ctrlListPrimaryWeapon): { + + _oldItem = (primaryWeaponItems player select _accIndex); + if (_oldItem != _item) then { + player removeprimaryweaponitem _oldItem; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then { + player addprimaryweaponitem _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case (ctrlenabled _ctrlListSecondaryWeapon): { + _oldItem = (secondaryWeaponItems player select _accIndex); + if (_oldItem != _item) then { + player removesecondaryweaponitem _oldItem; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then { + player addsecondaryweaponitem _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + case (ctrlenabled _ctrlListHandgun): { + _oldItem = (handgunitems player select _accIndex); + if (_oldItem != _item) then { + player removehandgunitem _oldItem; + [_index, _oldItem] call jn_fnc_arsenal_addItem; + if (_item != "") then { + player addhandgunitem _item; + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + }; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOTHROW; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOPUT; + case IDC_RSCDISPLAYARSENAL_TAB_CARGOMISC:{ + //handled in "buttonCargo" + }; + }; + + + + ["updateItemInfo",[ _display,_ctrlList,_index]] call jn_fnc_arsenal; + ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "SelectItemRight": { + private ["_ctrlList","_index","_cursel"]; + _display = _this select 0; + _ctrlList = _this select 1; + _index = _this select 2; + _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); + _type = (ctrltype _ctrlList == 102); + + + //--- Get container + _indexLeft = -1; + { + _ctrlListLeft = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); + if (ctrlenabled _ctrlListLeft) exitwith {_indexLeft = _x;}; + } foreach [IDCS_LEFT]; + + _supply = switch _indexLeft do { + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: { + gettext (configfile >> "CfgWeapons" >> uniform _center >> "ItemInfo" >> "containerClass") + }; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: { + gettext (configfile >> "CfgWeapons" >> vest _center >> "ItemInfo" >> "containerClass") + }; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: { + backpack _center + }; + default {0}; + }; + + _maximumLoad = getnumber (configfile >> "CfgVehicles" >> _supply >> "maximumLoad"); + + _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + _load = _maximumLoad * (1 - progressposition _ctrlLoadCargo); + + + + //-- Disable too heavy items + _min = jna_minItemMember select _index; + _rows = lnbsize _ctrlList select 0; + _columns = lnbsize _ctrlList select 1; + _colorWarning = ["IGUI","WARNING_RGB"] call bis_fnc_displayColorGet; + _columns = count lnbGetColumnsPosition _ctrlList; + for "_r" from 0 to (_rows - 1) do { + _dataStr = _ctrlList lnbData [_r,0]; + _data = call compile _dataStr; + _amount = _data select 1; + _grayout = false; + if ((_amount <= _min) AND (_amount != -1) AND (_amount !=0) AND !([player] call isMember)) then{_grayout = true}; + + _isIncompatible = _ctrlList lnbvalue [_r,1]; + _mass = _ctrlList lbvalue (_r * _columns); + _alpha = [1.0,0.25] select (_mass > parseNumber (str _load)); + _color = [[1,1,1,_alpha],[1,0.5,0,_alpha]] select _isIncompatible; + if(_grayout)then{_color = [1,1,0,0.60];}; + _ctrlList lnbsetcolor [[_r,1],_color]; + _ctrlList lnbsetcolor [[_r,2],_color]; + _text = _ctrlList lnbtext [_r,1]; + _ctrlList lbsettooltip [_r * _columns,[_text,_text + "\n(Not compatible with currently equipped weapons)"] select _isIncompatible]; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// event + case "buttonCargo": { + _display = _this select 0; + _add = _this select 1; + _selected = -1; + { + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); + if (ctrlenabled _ctrlList) exitwith {_selected = _x;}; + } foreach [IDCS_LEFT]; + + _ctrlList = ctrlnull; + _index = -1; + _lbcursel = -1; + { + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); + if (ctrlenabled _ctrlList) exitwith {_lbcursel = lbcursel _ctrlList;_index = _x}; + } foreach [IDCS_RIGHT]; + + _dataStr = _ctrlList lnbData [_lbcursel,0]; + _data = call compile _dataStr; + _item = _data select 0; + _amount = _data select 1; + + _load = 0; + _items = []; + _itemChanged = false; + + _ctrlLoadCargo = _display displayctrl IDC_RSCDISPLAYARSENAL_LOADCARGO; + + //save old weight + _loadOld = switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; + }; + + + //remove or add + _count = 1; + if(((_amount > 0 || _amount == -1) || _add < 0) && (_add != 0))then{ + + if (_add > 0) then {//add + _min = jna_minItemMember select _index; + if((_amount <= _min) AND (_amount != -1) AND !([player] call isMember)) exitWith{ + ['showMessage',[_display,"We are low on this item, only members may use it"]] call jn_fnc_arsenal; + }; + if(_index in [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL])then{//magazines are handeld by bullet count + //check if full mag can be optaind + _count = getNumber (configfile >> "CfgMagazines" >> _item >> "count"); + if(_amount != -1)then{ + if(_amount<_count)then{_count = _amount}; + }; + _canAdd = false; + _container = switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {_canAdd = player canAddItemToUniform _item; uniformContainer player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {_canAdd = player canAddItemToVest _item; vestContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {_canAdd = player canAddItemToBackpack _item; backpackContainer player;}; + }; + if(_canAdd)then{ + _container addMagazineAmmoCargo [_item,1,_count]; + }; + }else{ + switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {player additemtouniform _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {player additemtovest _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {player additemtobackpack _item;}; + }; + }; + } else {//remove + if(_index in [IDC_RSCDISPLAYARSENAL_TAB_CARGOMAG,IDC_RSCDISPLAYARSENAL_TAB_CARGOMAGALL])then{ + + _container = switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {uniformContainer player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {vestContainer player;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {backpackContainer player;}; + }; + + //save mags in list and remove them + _mags = magazinesAmmoCargo _container; + clearMagazineCargo _container; + + //add back magazines exept the one that needs to be removed + _removed = false; + { + if((_x select 0) isEqualTo _item && !_removed)then{ + _count = _x select 1;//this mag is removed + _removed = true; + }else{ + _container addMagazineAmmoCargo [(_x select 0),1,(_x select 1)]; + }; + } forEach _mags; + + }else{ + switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {player removeitemfromuniform _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {player removeitemfromvest _item;}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {player removeitemfrombackpack _item;}; + }; + }; + }; + }; + + //check if item was added + _load = switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; + }; + + if!(_loadOld isEqualTo _load)then{ + _amountOld = parseNumber (_ctrlList lnbtext [_lbcursel,2]); + if(_add > 0)then{ + _ctrlList lnbsettext [[_lbcursel,2],str (_amountOld + _count)]; + [_index, _item, _count]call jn_fnc_arsenal_removeItem; + }else{ + _ctrlList lnbsettext [[_lbcursel,2],str (_amountOld - _count)]; + [_index, _item, _count] call jn_fnc_arsenal_addItem; + }; + }; + + _load = switch _selected do{ + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM: {loaduniform player}; + case IDC_RSCDISPLAYARSENAL_TAB_VEST: {loadvest player}; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK: {loadbackpack player}; + }; + + _ctrlLoadCargo progresssetposition _load; + + ["SelectItemRight",[_display,_ctrlList,_index]] call jn_fnc_arsenal; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "buttonInvToJNA": { + //_display = _this select 0; + private _object = missionnamespace getVariable ["jna_object",objNull]; + private _array = _object call jn_fnc_arsenal_cargoToArray; + + //clear cargo + clearMagazineCargoGlobal _object; + clearItemCargoGlobal _object; + clearweaponCargoGlobal _object; + clearbackpackCargoGlobal _object; + + //update server + [_object,_array] remoteExec ["jn_fnc_arsenal_cargoToArsenal",2]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "showMessage": { + if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; + + _spawn = _this spawn { + disableserialization; + _display = _this select 0; + _message = _this select 1; + + _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; + _ctrlMessage ctrlsettext _message; + _ctrlMessage ctrlsetfade 1; + _ctrlMessage ctrlcommit 0; + _ctrlMessage ctrlsetfade 0; + _ctrlMessage ctrlcommit FADE_DELAY; + uisleep 5; + _ctrlMessage ctrlsetfade 1; + _ctrlMessage ctrlcommit FADE_DELAY; + }; + missionnamespace setvariable ["BIS_fnc_arsenal_message",_spawn]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "hideMessage":{ + _display = _this select 0; + if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; + _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; + _ctrlMessage ctrlsetfade 1; + _ctrlMessage ctrlcommit FADE_DELAY; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "showMessageEndless": { + if !(isnil {missionnamespace getvariable "BIS_fnc_arsenal_message"}) then {terminate (missionnamespace getvariable "BIS_fnc_arsenal_message")}; + + _spawn = _this spawn { + disableserialization; + _display = _this select 0; + _message = _this select 1; + + _ctrlMessage = _display displayctrl IDC_RSCDISPLAYARSENAL_MESSAGE; + _ctrlMessage ctrlsettext _message; + _ctrlMessage ctrlsetfade 1; + _ctrlMessage ctrlcommit 0; + _ctrlMessage ctrlsetfade 0; + _ctrlMessage ctrlcommit FADE_DELAY; + }; + missionnamespace setvariable ["BIS_fnc_arsenal_message",_spawn]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ShowItemInfo": { + _itemCfg = _this select 0; + + if (isclass _itemCfg) then { + _dataStr = param [1,if (ctrltype _ctrlList == 102) then {_ctrlList lnbdata [_cursel,0]} else {_ctrlList lbdata _cursel}]; + _data = call compile _dataStr; + _item = _data select 0; + + _ctrlInfo = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFO; + _ctrlInfo ctrlsetfade 0; + _ctrlInfo ctrlcommit FADE_DELAY; + + _ctrlInfoName = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFONAME; + _ctrlInfoName ctrlsettext ((_item call bis_fnc_itemType) select 1); + + _ctrlInfoAuthor = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFOAUTHOR; + _ctrlInfoAuthor ctrlsettext ""; + [_itemCfg,_ctrlInfoAuthor] call bis_fnc_overviewauthor; + + //--- DLC / mod icon + _ctrlDLC = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_DLCICON; + _ctrlDLCBackground = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_DLCBACKGROUND; + _dlc = _itemCfg call GETDLC; + if (_dlc != "" && _fullVersion) then { + + _dlcParams = modParams [_dlc,["name","logo","logoOver"]]; + _name = _dlcParams param [0,""]; + _logo = _dlcParams param [1,""]; + _logoOver = _dlcParams param [2,""]; + _fieldManualTopicAndHint = getarray (configfile >> "cfgMods" >> _dlc >> "fieldManualTopicAndHint"); + + _ctrlDLC ctrlsettooltip _name; + _ctrlDLC ctrlsettext _logo; + _ctrlDLC ctrlsetfade 0; + _ctrlDLC ctrlseteventhandler ["mouseexit",format ["(_this select 0) ctrlsettext '%1';",_logo]]; + _ctrlDLC ctrlseteventhandler ["mouseenter",format ["(_this select 0) ctrlsettext '%1';",_logoOver]]; + _ctrlDLC ctrlseteventhandler ["buttonclick",format ["if (count %1 > 0) then {(%1 + [ctrlparent (_this select 0)]) call bis_fnc_openFieldManual;};",_fieldManualTopicAndHint]]; + _ctrlDLCBackground ctrlsetfade 0; + } else { + _ctrlDLC ctrlsetfade 1; + _ctrlDLCBackground ctrlsetfade 1; + }; + _ctrlDLC ctrlcommit FADE_DELAY; + _ctrlDLCBackground ctrlcommit FADE_DELAY; + + } else { + _ctrlInfo = _display displayctrl IDC_RSCDISPLAYARSENAL_INFO_INFO; + _ctrlInfo ctrlsetfade 1; + _ctrlInfo ctrlcommit FADE_DELAY; + + _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; + _ctrlStats ctrlsetfade 1; + _ctrlStats ctrlcommit FADE_DELAY; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "ShowItemStats": { + _itemCfg = _this select 0; + if (isclass _itemCfg) then { + _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; + + _ctrlStatsPos = ctrlposition _ctrlStats; + _ctrlStatsPos set [0,0]; + _ctrlStatsPos set [1,0]; + _ctrlBackground = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATSBACKGROUND; + _barMin = 0.01; + _barMax = 1; + + _statControls = [ + [IDC_RSCDISPLAYARSENAL_STATS_STAT1,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT1], + [IDC_RSCDISPLAYARSENAL_STATS_STAT2,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT2], + [IDC_RSCDISPLAYARSENAL_STATS_STAT3,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT3], + [IDC_RSCDISPLAYARSENAL_STATS_STAT4,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT4], + [IDC_RSCDISPLAYARSENAL_STATS_STAT5,IDC_RSCDISPLAYARSENAL_STATS_STATTEXT5] + ]; + _rowH = 1 / (count _statControls + 1); + _fnc_showStats = { + _h = _rowH; + { + _ctrlStat = _display displayctrl ((_statControls select _foreachindex) select 0); + _ctrlText = _display displayctrl ((_statControls select _foreachindex) select 1); + if (count _x > 0) then { + _ctrlStat progresssetposition (_x select 0); + _ctrlText ctrlsettext toupper (_x select 1); + _ctrlText ctrlsetfade 0; + _ctrlText ctrlcommit 0; + //_ctrlText ctrlshow true; + _h = _h + _rowH; + } else { + _ctrlStat progresssetposition 0; + _ctrlText ctrlsetfade 1; + _ctrlText ctrlcommit 0; + //_ctrlText ctrlshow false; + }; + } foreach _this; + _ctrlStatsPos set [1,(_ctrlStatsPos select 3) * (1 - _h)]; + _ctrlStatsPos set [3,(_ctrlStatsPos select 3) * _h]; + _ctrlBackground ctrlsetposition _ctrlStatsPos; + _ctrlBackground ctrlcommit 0; + }; + + switch _index do { + case IDC_RSCDISPLAYARSENAL_TAB_PRIMARYWEAPON; + case IDC_RSCDISPLAYARSENAL_TAB_SECONDARYWEAPON; + case IDC_RSCDISPLAYARSENAL_TAB_HANDGUN: { + _ctrlStats ctrlsetfade 0; + _statsExtremes = uinamespace getvariable "bis_fnc_arsenal_weaponStats"; + if !(isnil "_statsExtremes") then { + _statsMin = _statsExtremes select 0; + _statsMax = _statsExtremes select 1; + + _stats = [ + [_itemCfg], + STATS_WEAPONS, + _statsMin + ] call bis_fnc_configExtremes; + _stats = _stats select 1; + + _statReloadSpeed = linearConversion [_statsMin select 0,_statsMax select 0,_stats select 0,_barMax,_barMin]; + _statDispersion = linearConversion [_statsMin select 1,_statsMax select 1,_stats select 1,_barMax,_barMin]; + _statMaxRange = linearConversion [_statsMin select 2,_statsMax select 2,_stats select 2,_barMin,_barMax]; + _statHit = linearConversion [_statsMin select 3,_statsMax select 3,_stats select 3,_barMin,_barMax]; + _statMass = linearConversion [_statsMin select 4,_statsMax select 4,_stats select 4,_barMin,_barMax]; + _statInitSpeed = linearConversion [_statsMin select 5,_statsMax select 5,_stats select 5,_barMin,_barMax]; + if (getnumber (_itemCfg >> "type") == 4) then { + [ + [], + [], + [_statMaxRange,localize "str_a3_rscdisplayarsenal_stat_range"], + [_statHit,localize "str_a3_rscdisplayarsenal_stat_impact"], + [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] + ] call _fnc_showStats; + } else { + _statHit = sqrt(_statHit^2 * _statInitSpeed); //--- Make impact influenced by muzzle speed + [ + [_statReloadSpeed,localize "str_a3_rscdisplayarsenal_stat_rof"], + [_statDispersion,localize "str_a3_rscdisplayarsenal_stat_dispersion"], + [_statMaxRange,localize "str_a3_rscdisplayarsenal_stat_range"], + [_statHit,localize "str_a3_rscdisplayarsenal_stat_impact"], + [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] + ] call _fnc_showStats; + }; + }; + }; + case IDC_RSCDISPLAYARSENAL_TAB_UNIFORM; + case IDC_RSCDISPLAYARSENAL_TAB_VEST; + case IDC_RSCDISPLAYARSENAL_TAB_BACKPACK; + case IDC_RSCDISPLAYARSENAL_TAB_HEADGEAR: { + _ctrlStats ctrlsetfade 0; + _statsExtremes = uinamespace getvariable "bis_fnc_arsenal_equipmentStats"; + if !(isnil "_statsExtremes") then { + _statsMin = _statsExtremes select 0; + _statsMax = _statsExtremes select 1; + + _stats = [ + [_itemCfg], + STATS_EQUIPMENT, + _statsMin + ] call bis_fnc_configExtremes; + _stats = _stats select 1; + + _statArmorShot = linearConversion [_statsMin select 0,_statsMax select 0,_stats select 0,_barMin,_barMax]; + _statArmorExpl = linearConversion [_statsMin select 1,_statsMax select 1,_stats select 1,_barMin,_barMax]; + _statMaximumLoad = linearConversion [_statsMin select 2,_statsMax select 2,_stats select 2,_barMin,_barMax]; + _statMass = linearConversion [_statsMin select 3,_statsMax select 3,_stats select 3,_barMin,_barMax]; + + if (getnumber (_itemCfg >> "isbackpack") == 1) then { + _statArmorShot = _barMin; + _statArmorExpl = _barMin; + }; //--- Force no backpack armor + + [ + if (_item == "H_Beret_blk") then {[0.95,localize "STR_difficulty3"]} else {[]}, //--- Easter egg + [_statArmorShot,localize "str_a3_rscdisplayarsenal_stat_passthrough"], + [_statArmorExpl,localize "str_a3_rscdisplayarsenal_stat_armor"], + [_statMaximumLoad,localize "str_a3_rscdisplayarsenal_stat_load"], + [_statMass,localize "str_a3_rscdisplayarsenal_stat_weight"] + ] call _fnc_showStats; + }; + }; + default { + if(_item == "G_Sport_Blackred")then{ + _ctrlStats ctrlsetfade 0; + [ + [], + [], + [], + [], + [0.75,"Thee drinker"] + ] call _fnc_showStats; + + }else{ + _ctrlStats ctrlsetfade 1; + }; + + }; + }; + _ctrlStats ctrlcommit FADE_DELAY; + } else { + _ctrlStats = _display displayctrl IDC_RSCDISPLAYARSENAL_STATS_STATS; + _ctrlStats ctrlsetfade 1; + _ctrlStats ctrlcommit FADE_DELAY; + }; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "HighlightMissingIcons": { + _display = _this select 0; + + { + _index = _x; + _item = ["ListCurSel",[_index]] call jn_fnc_arsenal; + _ctrlTab = _display displayctrl(IDC_RSCDISPLAYARSENAL_TAB + _index); + + //check if some item was selected + if(_item isEqualTo "")then{ + _ctrlTab ctrlSetTextColor [1,0.3,0.3,1]; + }else{ + _ctrlTab ctrlSetTextColor [1,1,1,1]; + }; + } forEach [IDCS_LEFT]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// event + case "KeyDown": { + _display = _this select 0; + _key = _this select 1; + _shift = _this select 2; + _ctrl = _this select 3; + _alt = _this select 4; + _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); + _return = false; + _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; + _inTemplate = ctrlfade _ctrlTemplate == 0; + + switch true do { + case (_key == DIK_ESCAPE): { + if (_inTemplate) then { + _ctrlTemplate ctrlsetfade 1; + _ctrlTemplate ctrlcommit 0; + _ctrlTemplate ctrlenable false; + + _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; + _ctrlMouseBlock ctrlenable false; + } else { + if (true) then {["buttonClose",[_display]] spawn jn_fnc_arsenal;} else {_display closedisplay 2;}; + }; + _return = true; + }; + + //--- Enter + case (_key in [DIK_RETURN,DIK_NUMPADENTER]): { + _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; + if (ctrlfade _ctrlTemplate == 0) then { + if (BIS_fnc_arsenal_type == 0) then { + ["buttonTemplateOK",[_display]] spawn jn_fnc_arsenal; + } else { + ["buttonTemplateOK",[_display]] spawn jn_fnc_arsenal; + }; + _return = true; + }; + }; + + //--- Prevent opening the commanding menu + case (_key == DIK_1); + case (_key == DIK_2); + case (_key == DIK_3); + case (_key == DIK_4); + case (_key == DIK_5); + case (_key == DIK_1); + case (_key == DIK_7); + case (_key == DIK_8); + case (_key == DIK_9); + case (_key == DIK_0); + + //--- Tab to browse tabs + case (_key == DIK_TAB): { + }; + + + + //--- Save + case (_key == DIK_S): { + if (_ctrl) then {['buttonSave',[_display]] call jn_fnc_arsenal;}; + }; + //--- Open + case (_key == DIK_O): { + if (_ctrl) then {['buttonLoad',[_display]] call jn_fnc_arsenal;}; + }; + + //--- Vision mode + case (_key in (actionkeys "nightvision") && !_inTemplate): { + _mode = missionnamespace getvariable ["BIS_fnc_arsenal_visionMode",-1]; + _mode = (_mode + 1) % 3; + missionnamespace setvariable ["BIS_fnc_arsenal_visionMode",_mode]; + switch _mode do { + //--- Normal + case 0: { + camusenvg false; + false setCamUseTi 0; + }; + //--- NVG + case 1: { + camusenvg true; + false setCamUseTi 0; + }; + //--- TI + default { + camusenvg false; + true setCamUseTi 0; + }; + }; + playsound ["RscDisplayCurator_visionMode",true]; + _return = true; + + }; + }; + _return + }; + + /////////////////////////////////////////////////////////////////////////////////////////// event + case "buttonClose": { + _display = _this select 0; + + //remove missing item message + titleText["", "PLAIN"]; + + _display closedisplay 2; + if (missionname == "Arsenal") then {endmission "end1";}; + ["#(argb,8,8,3)color(0,0,0,1)",false,nil,0,[0,0.5]] call bis_fnc_textTiles; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + case "buttonDefaultGear":{ + + ///////////////////////////////////////////////////////////////////////////////// + // unifrom + _itemsUnifrom = []; + if(activeACEMedical)then{ + + //ACE Basic medical system + if (ace_medical_level == 1) then{ + _itemsUnifrom pushBack ["ACE_fieldDressing",10]; + _itemsUnifrom pushBack ["ACE_morphine",3]; + _itemsUnifrom pushBack ["ACE_epinephrine",2]; + }; + + //ACE Advanced medical system + if (ace_medical_level == 2) then{ + _itemsUnifrom pushBack ["ACE_elasticBandage",10]; + _itemsUnifrom pushBack ["ACE_morphine",1]; + _itemsUnifrom pushBack ["ACE_epinephrine",1]; + _itemsUnifrom pushBack ["ACE_tourniquet",2]; + }; + + _itemsUnifrom pushBack ["ACE_EarPlugs",1]; + _itemsUnifrom pushBack ["ACE_MapTools",1]; + _itemsUnifrom pushBack ["ACE_CableTie",2]; + + }else{ + _itemsUnifrom pushBack ["FirstAidKit",4]; + }; + diag_log ["_itemsUnifrom1",_itemsUnifrom]; + //check items that already exist + { + _itemsUnifrom = [_itemsUnifrom,_x] call jn_fnc_arsenal_removeFromArray; + } forEach (uniformItems player); + diag_log ["_itemsUnifrom2",_itemsUnifrom]; + //add non existing items to uniform + { + _item = _x select 0; + _amount = _x select 1; + _amountAdded = 0; + while {(_amountAdded < _amount) && (player canAddItemToUniform _x)}do{ + _amountAdded = _amountAdded + 1; + player addItemToUniform _item; + }; + + if(_amountAdded > 0)then{ + + }; + } forEach _itemsUnifrom; + + ///////////////////////////////////////////////////////////////////////////////// + // backpack stuff + _itemsBackpack = []; + + if(player getUnitTrait "Medic")then{ + if(activeACEMedical)then{ + if (ace_medical_level == 1) then{ //ACE Basic medical system + _itemsBackpack pushBack ["ACE_fieldDressing",20]; + _itemsBackpack pushBack ["ACE_morphine",10]; + _itemsBackpack pushBack ["ACE_epinephrine",10]; + _itemsBackpack pushBack ["ACE_bloodIV",6]; + }; + if (ace_medical_level == 2) then{ //ACE Advanced medical system + _itemsBackpack pushBack ["ACE_elasticBandage",25]; + _itemsBackpack pushBack ["ACE_tourniquet",5]; + _itemsBackpack pushBack ["ACE_morphine",10]; + _itemsBackpack pushBack ["ACE_epinephrine",10]; + _itemsBackpack pushBack ["ACE_adenosine",5]; + _itemsBackpack pushBack ["ACE_salineIV_250",4]; + _itemsBackpack pushBack ["ACE_surgicalKit",1]; + _itemsBackpack pushBack ["ACE_personalAidKit",2]; + }; + }else{ + _itemsBackpack pushBack ["Medikit",1]; + _itemsBackpack pushBack ["FirstAidKit",10]; + }; + + + }; + diag_log ["_itemsBackpack1",_itemsBackpack]; + //check items that already exist + { + _itemsBackpack = [_itemsBackpack,_x] call jn_fnc_arsenal_removeFromArray; + } forEach (backpackitems player); + diag_log ["_itemsBackpack2",_itemsBackpack]; + //add non existing items + { + _item = _x select 0; + _amount = _x select 1; + _amountAdded = 0; + while {(_amountAdded < _amount) && (player canAddItemToBackpack _x)}do{ + _amountAdded = _amountAdded + 1; + player addItemToBackpack _item; + }; + + if(_amountAdded > 0)then{ + + }; + } forEach _itemsBackpack; + + ///////////////////////////////////////////////////////////////////////////////// + //assigned items + { + _index = _x select 0; + _item = _x select 1; + diag_log ["error",_index, _item] ; + _itemCurrent = ["ListCurSel",[_index]] call jn_fnc_arsenal; + diag_log ["error",_index, _item,_itemCurrent] ; + if(_itemCurrent isEqualTo "")then{ + player linkitem _item; + + [_index, _item]call jn_fnc_arsenal_removeItem; + }; + } forEach [ + [IDC_RSCDISPLAYARSENAL_TAB_MAP,"ItemMap"], + [IDC_RSCDISPLAYARSENAL_TAB_RADIO,"ItemRadio"], + [IDC_RSCDISPLAYARSENAL_TAB_COMPASS,"ItemCompass"], + [IDC_RSCDISPLAYARSENAL_TAB_WATCH,"ItemWatch"] + ]; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////// + //LOAD AND SAVE BUTTON STUFF! + case "buttonLoad": { + _display = _this select 0; + ['showTemplates',[_display]] call jn_fnc_arsenal; + + _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; + _ctrlTemplate ctrlsetfade 0; + _ctrlTemplate ctrlcommit 0; + _ctrlTemplate ctrlenable true; + + _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; + _ctrlMouseBlock ctrlenable true; + ctrlsetfocus _ctrlMouseBlock; + + { + (_display displayctrl _x) ctrlsettext localize "str_disp_int_load"; + } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TITLE,IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK]; + { + _ctrl = _display displayctrl _x; + _ctrl ctrlshow false; + _ctrl ctrlenable false; + } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TEXTNAME,IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME]; + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + if (lnbcurselrow _ctrlTemplateValue < 0) then {_ctrlTemplateValue lnbsetcurselrow 0;}; + ctrlsetfocus _ctrlTemplateValue; + }; + + case "buttonSave": { + _display = _this select 0; + ['showTemplates',[_display]] call jn_fnc_arsenal; + + _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; + _ctrlTemplate ctrlsetfade 0; + _ctrlTemplate ctrlcommit 0; + _ctrlTemplate ctrlenable true; + + _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; + _ctrlMouseBlock ctrlenable true; + + { + (_display displayctrl _x) ctrlsettext localize "str_disp_int_save"; + } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TITLE,IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK]; + { + _ctrl = _display displayctrl _x; + _ctrl ctrlshow true; + _ctrl ctrlenable true; + } foreach [IDC_RSCDISPLAYARSENAL_TEMPLATE_TEXTNAME,IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME]; + + _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; + ctrlsetfocus _ctrlTemplateName; + + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; + _ctrlTemplateButtonOK ctrlenable true; + _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; + _ctrlTemplateButtonDelete ctrlenable ((lnbsize _ctrlTemplateValue select 0) > 0); + + ['showMessage',[_display,localize "STR_A3_RscDisplayArsenal_message_save"]] call bis_fnc_arsenal; + }; + + case "buttonTemplateOK": { + _display = _this select 0; + _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); + _hideTemplate = true; + + _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; + if (ctrlenabled _ctrlTemplateName) then { + //--- Save + [ + _center, + [profilenamespace,ctrltext _ctrlTemplateName], + [ + _center getvariable ["BIS_fnc_arsenal_face",face _center], + speaker _center, + _center call bis_fnc_getUnitInsignia + ] + ] call bis_fnc_saveInventory; + } else { + //--- Load + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + if ((_ctrlTemplateValue lbvalue lnbcurselrow _ctrlTemplateValue) >= 0) then { + _inventory = _ctrlTemplateValue lnbtext [lnbcurselrow _ctrlTemplateValue,0]; + _inventory call jn_fnc_arsenal_loadinventory; + + { + _ctrlList = _display displayctrl (IDC_RSCDISPLAYARSENAL_LIST + _x); + if(ctrlenabled _ctrlList) exitWith { + ["TabSelectLeft", [_display, _x]] call jn_fnc_arsenal; + }; + + } forEach [IDCS_LEFT]; + ["HighlightMissingIcons",[_display]] call jn_fnc_arsenal; + + } else { + _hideTemplate = false; + }; + }; + if (_hideTemplate) then { + _ctrlTemplate = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_TEMPLATE; + _ctrlTemplate ctrlsetfade 1; + _ctrlTemplate ctrlcommit 0; + _ctrlTemplate ctrlenable false; + + _ctrlMouseBlock = _display displayctrl IDC_RSCDISPLAYARSENAL_MOUSEBLOCK; + _ctrlMouseBlock ctrlenable false; + }; + }; + + case "buttonTemplateDelete": { + _display = _this select 0; + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + _cursel = lnbcurselrow _ctrlTemplateValue; + _name = _ctrlTemplateValue lnbtext [_cursel,0]; + [_center,[profilenamespace,_name],nil,true] call bis_fnc_saveInventory; + ['showTemplates',[_display]] call jn_fnc_arsenal; + _ctrlTemplateValue lnbsetcurselrow (_cursel max (lbsize _ctrlTemplateValue - 1)); + + ["templateSelChanged",[_display]] call jn_fnc_arsenal; + }; + + case "showTemplates": { + _display = _this select 0; + + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + lnbclear _ctrlTemplateValue; + _data = profilenamespace getvariable ["bis_fnc_saveInventory_data",[]]; + _center = (missionnamespace getvariable ["BIS_fnc_arsenal_center",player]); + + for "_i" from 0 to (count _data - 1) step 2 do { + _name = _data select _i; + _inventory = _data select (_i + 1); + + _inventoryWeapons = [ + (_inventory select 5), //--- Binocular + (_inventory select 6 select 0), //--- Primary weapon + (_inventory select 7 select 0), //--- Secondary weapon + (_inventory select 8 select 0) //--- Handgun + ] - [""]; + _inventoryMagazines = ( + (_inventory select 0 select 1) + //--- Uniform + (_inventory select 1 select 1) + //--- Vest + (_inventory select 2 select 1) //--- Backpack items + ) - [""]; + _inventoryItems = ( + [_inventory select 0 select 0] + (_inventory select 0 select 1) + //--- Uniform + [_inventory select 1 select 0] + (_inventory select 1 select 1) + //--- Vest + (_inventory select 2 select 1) + //--- Backpack items + [_inventory select 3] + //--- Headgear + [_inventory select 4] + //--- Goggles + (_inventory select 6 select 1) + //--- Primary weapon items + (_inventory select 7 select 1) + //--- Secondary weapon items + (_inventory select 8 select 1) + //--- Handgun items + (_inventory select 9) //--- Assigned items + ) - [""]; + _inventoryBackpacks = [_inventory select 2 select 0] - [""]; + + + _lbAdd = _ctrlTemplateValue lnbaddrow [_name]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,1],gettext (configfile >> "cfgweapons" >> (_inventory select 6 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,2],gettext (configfile >> "cfgweapons" >> (_inventory select 7 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,3],gettext (configfile >> "cfgweapons" >> (_inventory select 8 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,4],gettext (configfile >> "cfgweapons" >> (_inventory select 0 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,5],gettext (configfile >> "cfgweapons" >> (_inventory select 1 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,6],gettext (configfile >> "cfgvehicles" >> (_inventory select 2 select 0) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,7],gettext (configfile >> "cfgweapons" >> (_inventory select 3) >> "picture")]; + _ctrlTemplateValue lnbsetpicture [[_lbAdd,8],gettext (configfile >> "cfgglasses" >> (_inventory select 4) >> "picture")]; + + }; + _ctrlTemplateValue lnbsort [0,false]; + + ["templateSelChanged",[_display]] call jn_fnc_arsenal; + }; + + case "templateSelChanged": { + _display = _this select 0; + _ctrlTemplateValue = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_VALUENAME; + _ctrlTemplateName = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_EDITNAME; + _ctrlTemplateName ctrlsettext (_ctrlTemplateValue lnbtext [lnbcurselrow _ctrlTemplateValue,0]); + + _cursel = lnbcurselrow _ctrlTemplateValue; + + _ctrlTemplateButtonOK = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONOK; + //_ctrlTemplateButtonOK ctrlenable (_cursel >= 0 && (_ctrlTemplateValue lbvalue _cursel) >= 0); + _ctrlTemplateButtonOK ctrlenable true; + + _ctrlTemplateButtonDelete = _display displayctrl IDC_RSCDISPLAYARSENAL_TEMPLATE_BUTTONDELETE; + //_ctrlTemplateButtonDelete ctrlenable (_cursel >= 0); + _ctrlTemplateButtonDelete ctrlenable true; + }; + + /////////////////////////////////////////////////////////////////////////////////////////// + default { + ["Error: wrong input given '%1' for mode '%2'",_this,_mode] call BIS_fnc_error; + }; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_init.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_init.sqf index ca85bc53..2a9f57df 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_init.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_init.sqf @@ -111,6 +111,11 @@ if(hasInterface)then{ if(_type isEqualTo "arsenal")then{ [clientOwner] remoteExecCall ["jn_fnc_arsenal_requestClose",2]; + //Sparker: refresh the lists of ulocked weapons. Otherwise it is called only when you add gear through 'to cargo' button or through vehicles. + [] spawn { + sleep 3; + [unlockedWeapons,true] call AS_fnc_weaponsCheck; + }; }; if(_type isEqualTo "vehicleArsenal")then{ diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf index 1072809f..95e54136 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf @@ -293,6 +293,9 @@ _backpackItems = _inventory select 2 select 1; //add containers _containers = [_uniform,_vest,_backpack]; +private _invCallArray = [{removeUniform player;player forceAddUniform _uniform;},//todo remove + {removeVest player;player addVest _vest;}, + {removeBackpackGlobal player;player addBackpack _backpack;}]; { _item = _x; if!(_item isEqualTo "")then{ @@ -305,29 +308,17 @@ _containers = [_uniform,_vest,_backpack]; call { if ([_itemCounts select _index, _item] call jn_fnc_arsenal_itemCount == -1) exitWith { - call ([ - {player forceAddUniform _uniform;},//todo remove - {player addVest _vest;}, - {player addBackpack _backpack;} - ] select _foreachindex); + call (_invCallArray select _foreachindex); }; if ([_availableItems select _index, _item] call jn_fnc_arsenal_itemCount > 0) then { - call ([ - {player forceAddUniform _uniform;},//todo remove - {player addVest _vest;}, - {player addBackpack _backpack;} - ] select _foreachindex); + call (_invCallArray select _foreachindex); [_arrayTaken,_index,_item,_amount] call _addToArray; [_availableItems,_index,_item,_amount] call _removeFromArray; } else { _oldItem = [_uniform_old,_vest_old,_backpack_old] select _foreachindex; if !(_oldItem isEqualTo "") then { - call ([ - {player forceAddUniform _uniform_old;}, //todo remove - {player addVest _vest_old;}, - {player addBackpack _backpack_old;} - ] select _foreachindex); + call (_invCallArray select _foreachindex); _arrayReplaced = [_arrayReplaced,[_item,_oldItem]] call jn_fnc_arsenal_addToArray; [_arrayTaken,_index,_oldItem,1] call _addToArray; } else { diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_vehicleArsenal.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_vehicleArsenal.sqf index 0b352ccb..24f6a6f6 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_vehicleArsenal.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_vehicleArsenal.sqf @@ -657,7 +657,8 @@ switch _mode do { jnva_loadout set [_index,[jnva_loadout select _index,[_item,_count]] call jn_fnc_arsenal_addToArray]; jnva_loadout_mass = _mass; - [_index, _item, _count] remoteExecCall ["jn_fnc_arsenal_removeItem"]; + //[_index, _item, _count] remoteExecCall ["jn_fnc_arsenal_removeItem"]; + [_index, _item, _count] call jn_fnc_arsenal_removeItem; //Sparker: why execute it on all clients? }; }; @@ -676,7 +677,8 @@ switch _mode do { jnva_loadout set [_index,[jnva_loadout select _index,[_item,_count]] call jn_fnc_arsenal_removeFromArray]; _mass = ["getMassItem",[_item,_count,_index]] call jn_fnc_vehicleArsenal; jnva_loadout_mass = jnva_loadout_mass - _mass; - [_index, _item, _count] remoteExecCall ["jn_fnc_arsenal_addItem"]; + //[_index, _item, _count] remoteExecCall ["jn_fnc_arsenal_addItem"]; + [_index, _item, _count] call jn_fnc_arsenal_addItem; //Sparker: why execute it on all clients? }; }; }; diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Actions/fn_logistics_addActionLoad.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Actions/fn_logistics_addActionLoad.sqf index 6b929d3b..7bff1ee3 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Actions/fn_logistics_addActionLoad.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Actions/fn_logistics_addActionLoad.sqf @@ -41,6 +41,10 @@ _loadActionID = _object addAction [ { private _nodeID = [_nearestVehicle, _cargo] call jn_fnc_logistics_canLoad; switch (_nodeID) do { + case -4: + { + hint 'Can not load cargo: passengers have occupied cargo space!'; + }; case -3: { hint 'This vehicle can not carry this cargo!'; diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_canLoad.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_canLoad.sqf index 467f7a8b..c5f2ef59 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_canLoad.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_canLoad.sqf @@ -10,9 +10,10 @@ Returns: INTEGER node number where object can be loaded on to - or -1 if a other type was already loaded + or -1 if another type was already loaded or -2 if there was no more space or -3 if this vehicle can't have any cargo at all + or -4 if cargo space is occupied (by a passenger) */ params[ ["_vehicle",objNull,[objNull]], ["_object",objNull,[objNull]] ]; @@ -40,7 +41,7 @@ private _nodesLoaded = 0; if(_typeLoaded != _typeObject && _typeLoaded != -1)exitWith{-1}; -//available nodes +//==== Get available nodes ==== private _nodeTotal = 0; { private _type = _x select 0; @@ -51,7 +52,33 @@ private _nodeTotal = 0; if(_nodeTotal == 0)exitWith{-3}; //there is some node free -if(_nodesLoaded < _nodeTotal)exitWith{_nodesLoaded}; +if(_nodesLoaded < _nodeTotal) then +{ + //==== Check if cargo space is occupied by passengers ==== + //Get occupied cargo nodes + private _occupiedCargo = []; + { + //[unit,role,cargoIndex,turretPath,personTurret] + _occupiedCargo pushback (_x select 2); //cargo index + }forEach fullCrew _vehicle; + //Get all seats that can be locked by cargo of this type + private _allCargoLockedSeats = []; + { + _allCargoLockedSeats append (_x select 1); + } forEach ([_vehicle, _typeObject] call jn_fnc_logistics_getNodes); -//node type is correct but no nodes where free --2; \ No newline at end of file + //Cargo space is occupied by passengers + if (count (_allCargoLockedSeats arrayintersect _occupiedCargo) > 0) then + { + -4 + } + else //Cargo space is not occupied by passengers and there is some free node + { + _nodesLoaded + } +} +else +{ + //node type is correct but no nodes were free + -2; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_lockSeats.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_lockSeats.sqf index 0eda2d8e..a82c8c2c 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_lockSeats.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/Functions/fn_logistics_lockSeats.sqf @@ -11,7 +11,6 @@ private _nodesLocked = []; } forEach attachedObjects _vehicle; private _nodes = [_vehicle,_type] call jn_fnc_logistics_getNodes; - _vehicle lockCargo false; { _lockSeats = _nodes select _x select 1;//get seats to lock diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_init.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_init.sqf index 5c70080a..a1c95c94 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_init.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_init.sqf @@ -17,6 +17,11 @@ jnl_vehicleHardpoints = [ [1, [0,-2.61185,-0.63], [6,7,8,9,10,11]] ]], + //Motorboat civilian + ["\A3\boat_f_gamma\Boat_Civil_01\Boat_Civil_01_F", [ + [1, [0,-1.697,-0.874], []] + ]], + //AAF Zamak open ["\A3\soft_f_beta\Truck_02\Truck_02_transport_F", [ [0, [-0.000671387,-1.31882,-0.81], [2,3,4,5,6,7,8,9,10,11,12,13]], @@ -30,6 +35,42 @@ jnl_vehicleHardpoints = [ [1, [0,-2.1,-0.81], [9,10,11,12,13]] ]], + //AFRF Zamak open + ["rhsafrf\addons\rhs_kamaz\rhs_kamaz5350", [ + [0, [-0.000671387,-1.31882,-0.81], [2,3,4,5,6,7,8,9,10,11,12,13]], + [1, [0,0,-0.81], [2,3,4,5,6,7,8]], + [1, [0,-2.1,-0.81], [9,10,11,12,13]] + ]], + + + //NATO HEMTT open + ["\A3\soft_f_beta\Truck_01\Truck_01_transport_F.p3d",[ + [1, [0.0300293,-0.0808449,0.283923], [1,16,8,9]], + [1, [0.0256348,-2.99881,0.315941], [3,4,10,11]], + [1, [0.0249023,-1.56604,0.30022], [5,6,12,13]] + ]], + + //NATO HEMTT closed + ["\A3\soft_f_beta\Truck_01\Truck_01_transport_F.p3d",[ + [1, [0.0300293,-0.0808449,0.283923], [1,16,8,9]], + [1, [0.0256348,-2.99881,0.315941], [3,4,10,11]], + [1, [0.0249023,-1.56604,0.30022], [5,6,12,13]] + ]], + + //CSAT Tempest open + ["\A3\Soft_F_EPC\Truck_03\Truck_03_transport_F.p3d",[ + [1, [0.0541992,-0.788692,0.41213], [1,7,6,9]], + [1, [0.0561523,-2.33265,0.423543], [2,3,8,12]], + [1, [0.0625,-3.89461,0.435087], [4,5,11,10]] + ]], + + //CSAT Tempest closed + ["\A3\Soft_F_EPC\Truck_03\Truck_03_covered_F.p3d",[ + [1, [0.0541992,-0.788692,0.41213], [1,7,6,9]], + [1, [0.0561523,-2.33265,0.423543], [2,3,8,12]], + [1, [0.0625,-3.89461,0.435087], [4,5,11,10]] + ]], + //RHS Gaz-66 truck ["\rhsafrf\addons\rhs_gaz66\rhs_gaz66.p3d", [ [0, [0,-0.88974,-0.610707], []], //Weapon node @@ -37,6 +78,7 @@ jnl_vehicleHardpoints = [ [1, [0,-1.73634,-0.610707], []] ]], + //RHS Ural-4320 truck ["\rhsafrf\addons\rhs_a2port_car\Ural\Ural_open2.p3d", [ [0, [0,-1.36476,-0.19277], []], //Weapon @@ -63,7 +105,13 @@ jnl_vehicleHardpoints = [ //Civilian transport boat ["\A3\Boat_F_Exp\Boat_Transport_02\Boat_Transport_02_F.p3d", [ [1, [0,1.233,-0.72029], []] - ]] + ]], + + //Tanoa boat + ["\A3\Boat_F_Exp\Boat_Transport_02\Boat_Transport_02_F.p3d",[ + [1,[-0.0615234,0.492443,0.322869],[5,6,2]] + ]] + ]; //lock seats when cargo is added diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_load.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_load.sqf index db9f9d99..b5c2a8d8 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_load.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_load.sqf @@ -36,9 +36,11 @@ if _playAnimation then{ private _objectType = _nodeArray select 0; private _nodeID = _nodeArray select 1; + /* if(_objectType == 0)then{//if its a weapon _object enableWeaponDisassembly true; }; + */ private _bbv = (boundingBoxReal _vehicle select 0 select 1) + ((boundingCenter _vehicle) select 1); private _bbo = (boundingBoxReal _object select 0 select 1) + ((boundingCenter _object) select 1); @@ -49,15 +51,19 @@ if _playAnimation then{ //Set initial position _object attachto [_vehicle, _locStart]; _object setVectorDirAndUp [_cargoOffsetAndDir select 1, [0, 0, 1]]; - - //Push it in till it's in place! - private _step = 0.1; + + //lock seats + //Need to call the function here, because it gets data from objects attached to the vehicle + sleep 0.1; + [_vehicle] remoteExec ["jn_fnc_logistics_lockSeats",[0, -2] select isDedicated,_vehicle]; + + //Push it in till it's in place! while {_locStart select 1 < _locEnd select 1}do{ - sleep 0.1; _locStart = _locStart vectorAdd [0, _step, 0]; _object attachto [_vehicle, _locStart]; _object setVectorDirAndUp [_cargoOffsetAndDir select 1, [0, 0, 1]]; + sleep 0.1; }; @@ -102,7 +108,4 @@ _object setVariable ["ace_dragging_canDrag",false, true]; _object setVariable ["ace_dragging_canCarry",false, true]; _object setvariable ["ace_cargo_canLoad",false, true]; -//lock seats -[_vehicle] remoteExec ["jn_fnc_logistics_lockSeats",[0, -2] select isDedicated,_vehicle]; - _nodeID \ No newline at end of file diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_unLoad.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_unLoad.sqf index f6e02771..80be968b 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_unLoad.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNL/fn_logistics_unLoad.sqf @@ -62,12 +62,13 @@ if(!isnull _object)then{ detach _object; _object setVelocity _vel; - //lock seats - _vehicle call jn_fnc_logistics_lockSeats;//needs to be called after detach - _vehicle setVariable ["jnl_isUnloading",false, true]; //Clear object's jnl_cargo variable _object setVariable ["jnl_cargo", Nil]; + + //re-enable seats + //need to call the function here, since it gets data from jnl_cargo! + [_vehicle] remoteExec ["jn_fnc_logistics_lockSeats",[0, -2] select isDedicated,_vehicle]; }; _return = true; @@ -88,8 +89,4 @@ _object setVariable ["ace_dragging_canDrag",_ace_dragging_canDrag]; _object setVariable ["ace_dragging_canCarry",_ace_dragging_canCarry]; _object setvariable ["ace_cargo_canLoad",_ace_cargo_canLoad]; - -//re-enable seats -[_vehicle] remoteExec ["jn_fnc_logistics_lockSeats",[0, -2] select isDedicated,_vehicle]; - _return \ No newline at end of file diff --git a/AntistasiOfficial.Altis/JeroenArsenal/Shit Jeroen.sqf b/AntistasiOfficial.Altis/JeroenArsenal/Shit Jeroen.sqf index b28e4a1e..75554f14 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/Shit Jeroen.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/Shit Jeroen.sqf @@ -322,7 +322,7 @@ swithcAction = {player addAction["switch player", }foreach (allunits select {side _x isEqualTo resistance && {!(_x in allplayers)} } ); _old = player; selectPlayer _closedAI; - if((_old getVariable ["ASunconscious",false]) || (_old getVariable ["ACE_isUnconscious",false]))then{ + if([_old] call AS_fnc_isUnconscious)then{ _old setDamage 1; }; if!(player getVariable ["swithcAction",false])then{ diff --git a/AntistasiOfficial.Altis/Lists/basicLists.sqf b/AntistasiOfficial.Altis/Lists/basicLists.sqf index d5ecef65..ed76c02a 100644 --- a/AntistasiOfficial.Altis/Lists/basicLists.sqf +++ b/AntistasiOfficial.Altis/Lists/basicLists.sqf @@ -1,5 +1,5 @@ // military buildings, intact and destroyed -listMilBld = ["Land_Cargo_Tower_V1_F","Land_Cargo_Tower_V1_No1_F","Land_Cargo_Tower_V1_No2_F","Land_Cargo_Tower_V1_No3_F","Land_Cargo_Tower_V1_No4_F","Land_Cargo_Tower_V1_No5_F","Land_Cargo_Tower_V1_No6_F","Land_Cargo_Tower_V1_No7_F","Land_Cargo_Tower_V2_F", "Land_Cargo_Tower_V3_F","Land_Cargo_HQ_V1_F","Land_Cargo_HQ_V2_F","Land_Cargo_HQ_V3_F","Land_Cargo_Patrol_V1_F","Land_Cargo_Patrol_V2_F","Land_Cargo_Patrol_V3_F","Land_HelipadSquare_F","Land_Cargo_Tower_V1_ruins_F","Land_Cargo_Tower_V2_ruins_F","Land_Cargo_Tower_V3_ruins_F","Land_HelipadCivil_F"]; +listMilBld = ["Land_Cargo_Tower_V1_F","Land_Cargo_Tower_V1_No1_F","Land_Cargo_Tower_V1_No2_F","Land_Cargo_Tower_V1_No3_F","Land_Cargo_Tower_V1_No4_F","Land_Cargo_Tower_V1_No5_F","Land_Cargo_Tower_V1_No6_F","Land_Cargo_Tower_V1_No7_F","Land_Cargo_Tower_V2_F", "Land_Cargo_Tower_V3_F","Land_Cargo_HQ_V1_F","Land_Cargo_HQ_V2_F","Land_Cargo_HQ_V3_F","Land_Cargo_Patrol_V1_F","Land_Cargo_Patrol_V2_F","Land_Cargo_Patrol_V3_F","Land_HelipadSquare_F","Land_Cargo_Tower_V1_ruins_F","Land_Cargo_Tower_V2_ruins_F","Land_Cargo_Tower_V3_ruins_F","Land_HelipadCivil_F","Land_JumpTarget_F","Land_HelipadRescue_F"]; // buildings for outposts/bases listbld = ["Land_Cargo_Tower_V1_F","Land_Cargo_Tower_V1_No1_F","Land_Cargo_Tower_V1_No2_F","Land_Cargo_Tower_V1_No3_F","Land_Cargo_Tower_V1_No4_F","Land_Cargo_Tower_V1_No5_F","Land_Cargo_Tower_V1_No6_F","Land_Cargo_Tower_V1_No7_F","Land_Cargo_Tower_V2_F", "Land_Cargo_Tower_V3_F"]; diff --git a/AntistasiOfficial.Altis/Lists/gearList.sqf b/AntistasiOfficial.Altis/Lists/gearList.sqf index 21bb0e65..7b70f376 100644 --- a/AntistasiOfficial.Altis/Lists/gearList.sqf +++ b/AntistasiOfficial.Altis/Lists/gearList.sqf @@ -1073,11 +1073,32 @@ if (activeACE) then { "ACE_salineIV_250", "ACE_surgicalKit", "ACE_tourniquet", - "ACE_adenosine" + "ACE_adenosine", + "ACE_atropine" ]; }; +aceadvmedical = [ + + ["ACE_elasticBandage",-1], + ["ACE_bloodIV_250",-1], + ["ACE_packingBandage",-1], + ["ACE_personalAidKit",-1], + ["ACE_plasmaIV",-1], + ["ACE_plasmaIV_500",-1], + ["ACE_plasmaIV_250",-1], + ["ACE_salineIV",-1], + ["ACE_salineIV_500",-1], + ["ACE_salineIV_250",-1], + ["ACE_surgicalKit",-1], + ["ACE_tourniquet",-1], + ["ACE_adenosine",-1], + ["ACE_atropine",-1], + ["ACE_quikclot",-1] + +]; + blockedWeapons = ["rhs_weap_svd","rhs_weap_rpg18","rhs_weap_strela","rhs_weap_svd_pso1","rhs_weap_pkp_pkas","rhs_weap_pkp_1p63","rhs_weap_pkp_1p29"]; gear_allMagazines = []; @@ -1098,6 +1119,7 @@ AS_specialWeapons = [ "rhs_weap_M590_5RD", "rhsusf_weap_MP7A2", "rhs_weap_savz61", + "rhs_weap_savz61_folded", "SMG_05_F", "SMG_02_F", "SMG_01_F" diff --git a/AntistasiOfficial.Altis/Missions/ASS_Mayor.sqf b/AntistasiOfficial.Altis/Missions/ASS_Mayor.sqf index 4372b849..f3320576 100644 --- a/AntistasiOfficial.Altis/Missions/ASS_Mayor.sqf +++ b/AntistasiOfficial.Altis/Missions/ASS_Mayor.sqf @@ -4,8 +4,8 @@ if (!isServer and hasInterface) exitWith {}; private ["_houses","_mayor"]; -_tskTitle = localize "Str_tsk_ASSMAYOR"; -_tskDesc = localize "Str_tskDesc_ASSMAYOR"; +_tskTitle = "STR_TSK_TD_ASSMAYOR"; +_tskDesc = "STR_TSK_TD_DESC_ASSMAYOR"; _initialMarker = _this select 0; _source = _this select 1; @@ -85,7 +85,7 @@ if (_source == "civ") then { server setVariable ["civActive", _val + 1, true]; }; -_tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_posTsk,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_posTsk,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; {[_x] spawn CSATinit; _x allowFleeing 0} forEach units _mayorGroup; @@ -125,7 +125,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _mayor) or if ({_mayor knowsAbout _x > 1.4} count ([500,0,_mayor,"BLUFORSpawn"] call distanceUnits) > 0) then { //hint "You have been discovered. The traitor is fleeing to the nearest base. Go and kill him!"; - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; {_x enableAI "MOVE"} forEach units _mayorGroup; _mayor assignAsDriver _veh; [_mayor] orderGetin true; @@ -141,7 +141,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _mayor) or if (not alive _mayor) then { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [10,-20,_initialPosition] remoteExec ["AS_fnc_changeCitySupport",2]; { diff --git a/AntistasiOfficial.Altis/Missions/ASS_Traidor.sqf b/AntistasiOfficial.Altis/Missions/ASS_Traidor.sqf index 523cc677..dd01fe20 100644 --- a/AntistasiOfficial.Altis/Missions/ASS_Traidor.sqf +++ b/AntistasiOfficial.Altis/Missions/ASS_Traidor.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_ASSTraitor"; -_tskDesc = localize "Str_tskDesc_ASSTraitor"; +_tskTitle = "STR_TSK_TD_ASSTraitor"; +_tskDesc = "STR_TSK_TD_DESC_ASSTraitor"; _initialMarker = _this select 0; _source = _this select 1; @@ -38,6 +38,7 @@ _base = [_arraybases, _initialPosition] call BIS_Fnc_nearestPosition; _posBase = getMarkerPos _base; _traitor = ([_traitorPosition, 0, opI_OFF2, _traitorGroup] call bis_fnc_spawnvehicle) select 0; +_traitor setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for traitor [_traitor] spawn { params ["_subject"]; _subject allowDamage false; @@ -61,7 +62,7 @@ if (_source == "civ") then { server setVariable ["civActive", _val + 1, true]; }; -_tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_posTsk,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_posTsk,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; {[_x] spawn CSATinit; _x allowFleeing 0} forEach units _traitorGroup; @@ -100,7 +101,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _traitor) o if ({_traitor knowsAbout _x > 1.4} count ([500,0,_traitor,"BLUFORSpawn"] call distanceUnits) > 0) then { //hint "You have been discovered. The traitor is fleeing to the nearest base. Go and kill him!"; - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; {_x enableAI "MOVE"} forEach units _traitorGroup; _traitor assignAsDriver _veh; [_traitor] orderGetin true; @@ -116,7 +117,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _traitor) if (not alive _traitor) then { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [0,300] remoteExec ["resourcesFIA",2]; { @@ -140,7 +141,7 @@ if (not alive _traitor) then } else { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_traitor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [-10,Slowhand] call playerScoreAdd; if (dateToNumber date > _fechalimnum) then { diff --git a/AntistasiOfficial.Altis/Missions/AS_ForestPatrol.sqf b/AntistasiOfficial.Altis/Missions/AS_ForestPatrol.sqf index d33fa1f2..065daa59 100644 --- a/AntistasiOfficial.Altis/Missions/AS_ForestPatrol.sqf +++ b/AntistasiOfficial.Altis/Missions/AS_ForestPatrol.sqf @@ -2,8 +2,8 @@ if (!isServer and hasInterface) exitWith {}; private ["_Forest","_posHQ","_mrkOutpost","_distance"]; -_tskTitle = localize "Str_tsk_ASFOREST"; -_tskDesc = localize "Str_tskDesc_ASFOREST"; +_tskTitle = "STR_TSK_TD_ASFOREST"; +_tskDesc = "STR_TSK_TD_DESC_ASFOREST"; _posHQ = getMarkerPos guer_respawn; @@ -42,7 +42,7 @@ if (_source == "mil") then { _nombredest = [_mrkOutpost] call AS_fnc_localizar; -_tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _tipoGrupo = [infSquad, side_green] call AS_fnc_pickGroup; @@ -68,13 +68,13 @@ waitUntil {sleep 5; ((!alive _target1) && (!alive _target2) && (!alive _target3 if (dateToNumber date > _fechalimnum) then { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; } else { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_mrkOutpost],_Forest,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,500] remoteExec ["resourcesFIA",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_Forest,"BLUFORSpawn"] call distanceUnits); diff --git a/AntistasiOfficial.Altis/Missions/AS_Mayor.sqf b/AntistasiOfficial.Altis/Missions/AS_Mayor.sqf index ab92d4a3..211d4fb9 100644 --- a/AntistasiOfficial.Altis/Missions/AS_Mayor.sqf +++ b/AntistasiOfficial.Altis/Missions/AS_Mayor.sqf @@ -4,8 +4,8 @@ if (!isServer and hasInterface) exitWith {}; private ["_houses","_mayor"]; -_tskTitle = localize "Str_tsk_ASSMAYOR"; -_tskDesc = localize "Str_tskDesc_ASSMAYOR"; +_tskTitle = "STR_TSK_TD_ASSMAYOR"; +_tskDesc = "STR_TSK_TD_DESC_ASSMAYOR"; _initialMarker = _this select 0; _source = _this select 1; @@ -48,6 +48,7 @@ _mayor = ([_traitorPosition, 0, "C_man_1", _mayorGroup] call bis_fnc_spawnvehicl sleep 0.1; _mayor addGoggles "G_Tactical_Black"; _mayor addHeadgear "H_Hat_checker"; +removeUniform _mayor; _mayor addUniform "U_NikosAgedBody"; [_mayor] spawn { params ["_subject"]; @@ -72,7 +73,7 @@ if (_source == "civ") then { server setVariable ["civActive", _val + 1, true]; }; -_tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; {[_x] spawn CSATinit; _x allowFleeing 0} forEach units _mayorGroup; @@ -112,7 +113,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _mayor) or if ({_mayor knowsAbout _x > 1.4} count ([500,0,_mayor,"BLUFORSpawn"] call distanceUnits) > 0) then { hint "The Mayor has been spooked, he will try to run for an enemy base for safety!"; - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; {_x enableAI "MOVE"} forEach units _mayorGroup; _mayor assignAsDriver _veh; [_mayor] orderGetin true; @@ -128,7 +129,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _mayor) or if (not alive _mayor) then { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [10,-20,_initialPosition] remoteExec ["AS_fnc_changeCitySupport",2]; { @@ -153,7 +154,7 @@ if (not alive _mayor) then if (_mayor distance getMarkerPos guer_respawn < 50) then { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [0,300] remoteExec ["resourcesFIA",2]; [-10,20,_initialPosition] remoteExec ["AS_fnc_changeCitySupport",2]; @@ -182,7 +183,7 @@ if (_mayor distance getMarkerPos guer_respawn < 50) then else { - _tsk = ["ASS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["ASS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_initialMarker],_mayor,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [-2,Slowhand] call playerScoreAdd; [10,0,_initialPosition] remoteExec ["AS_fnc_changeCitySupport",2]; }; diff --git a/AntistasiOfficial.Altis/Missions/AS_Oficial.sqf b/AntistasiOfficial.Altis/Missions/AS_Oficial.sqf index 3146a658..d640b47b 100644 --- a/AntistasiOfficial.Altis/Missions/AS_Oficial.sqf +++ b/AntistasiOfficial.Altis/Missions/AS_Oficial.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_ASOfficer"; -_tskDesc = localize "Str_tskDesc_ASOfficer"; +_tskTitle = "STR_TSK_TD_ASOfficer"; +_tskDesc = "STR_TSK_TD_DESC_ASOfficer"; _marcador = _this select 0; _source = _this select 1; @@ -18,7 +18,7 @@ _fechalim = [date select 0, date select 1, date select 2, date select 3, (date s _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _grp = createGroup side_red; @@ -34,7 +34,7 @@ sleep 1; waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (not alive _oficial)}; if (not alive _oficial) then { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,300] remoteExec ["resourcesFIA",2]; [1800] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_posicion,"BLUFORSpawn"] call distanceUnits); @@ -46,7 +46,7 @@ if (not alive _oficial) then { }; // BE module } else { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; [_marcador,-30] spawn AS_fnc_addTimeForIdle; diff --git a/AntistasiOfficial.Altis/Missions/AS_specOP.sqf b/AntistasiOfficial.Altis/Missions/AS_specOP.sqf index f2965343..795547f2 100644 --- a/AntistasiOfficial.Altis/Missions/AS_specOP.sqf +++ b/AntistasiOfficial.Altis/Missions/AS_specOP.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_ASSpecOp"; -_tskDesc = localize "Str_tskDesc_ASSpecOp"; +_tskTitle = "STR_TSK_TD_ASSpecOp"; +_tskDesc = "STR_TSK_TD_DESC_ASSpecOp"; _marcador = _this select 0; _source = _this select 1; @@ -19,7 +19,7 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; +_tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Kill"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _mrkfin = createMarkerLocal [format ["specops%1", random 100],_posicion]; @@ -45,14 +45,14 @@ waitUntil {sleep 5; (dateToNumber date > _fechalimnum) or ({alive _x} count uni if (dateToNumber date > _fechalimnum) then { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Kill"] call BIS_fnc_setTask; [5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; } else { - _tsk = ["AS",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; + _tsk = ["AS",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Kill"] call BIS_fnc_setTask; [0,200] remoteExec ["resourcesFIA",2]; [0,5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; diff --git a/AntistasiOfficial.Altis/Missions/CONVOY.sqf b/AntistasiOfficial.Altis/Missions/CONVOY.sqf index 9f70f14a..3bcd6db9 100644 --- a/AntistasiOfficial.Altis/Missions/CONVOY.sqf +++ b/AntistasiOfficial.Altis/Missions/CONVOY.sqf @@ -74,49 +74,49 @@ _originName = [_base] call AS_fnc_localizar; call { if (_convoyType == "Municion") exitWith { - _tskTitle = localize "STR_TSK_CVY_AMMO"; - _tskDesc = localize "STR_TSKDESC_CVY_AMMO"; + _tskTitle = "STR_TSK_TD_CVY_AMMO"; + _tskDesc = "STR_TSK_TD_DESC_CVY_AMMO"; _icon = "rearm"; _objectiveType = vehAmmo; }; if (_convoyType == "Armor") exitWith { - _tskTitle = localize "STR_TSK_CVY_ARMOR"; - _tskDesc = localize "STR_TSKDESC_CVY_ARMOR"; + _tskTitle = "STR_TSK_TD_CVY_ARMOR"; + _tskDesc = "STR_TSK_TD_DESC_CVY_ARMOR"; _icon = "Destroy"; _objectiveType = [selectRandom vehIFV, selectRandom vehTank] select ({(_x in vehTank)} count enemyMotorpool > 0); }; if (_convoyType == "Prisoners") exitWith { - _tskTitle = localize "STR_TSK_CVY_PRIS"; - _tskDesc = localize "STR_TSKDESC_CVY_PRIS"; + _tskTitle = "STR_TSK_TD_CVY_PRIS"; + _tskDesc = "STR_TSK_TD_DESC_CVY_PRIS"; _icon = "run"; _objectiveType = enemyMotorpoolDef; }; if (_convoyType == "Money") exitWith { - _tskTitle = localize "STR_TSK_CVY_MONEY"; - _tskDesc = localize "STR_TSKDESC_CVY_MONEY"; + _tskTitle = "STR_TSK_TD_CVY_MONEY"; + _tskDesc = "STR_TSK_TD_DESC_CVY_MONEY"; _icon = "move"; _objectiveType = AS_misVehicleBox; }; if (_convoyType == "Supplies") exitWith { - _tskTitle = localize "STR_TSK_CVY_SUPPLY"; - _tskDesc = localize "STR_TSKDESC_CVY_SUPPLY"; + _tskTitle = "STR_TSK_TD_CVY_SUPPLY"; + _tskDesc = "STR_TSK_TD_DESC_CVY_SUPPLY"; _icon = "heal"; _objectiveType = AS_misVehicleBox; }; if (_convoyType == "HVT") exitWith { - _tskTitle = localize "STR_TSK_CVY_HVT"; - _tskDesc = localize "STR_TSKDESC_CVY_HVT"; + _tskTitle = "STR_TSK_TD_CVY_HVT"; + _tskDesc = "STR_TSK_TD_DESC_CVY_HVT"; _icon = "Destroy"; _objectiveType = selectRandom standardMRAP; }; }; -_tsk = ["CONVOY",[side_blue,civilian],[format [_tskDesc,_originName,numberToDate [2035,_startTimeNumber] select 3,numberToDate [2035,_startTimeNumber] select 4,_destinationName],format [_tskTitle, A3_Str_INDEP],_destination],_posDestination,"CREATED",5,true,true,_icon] call BIS_fnc_setTask; +_tsk = ["CONVOY",[side_blue,civilian],[[_tskDesc,_originName,numberToDate [2035,_startTimeNumber] select 3,numberToDate [2035,_startTimeNumber] select 4,_destinationName],[_tskTitle, A3_Str_INDEP],_destination],_posDestination,"CREATED",5,true,true,_icon] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; @@ -218,7 +218,7 @@ if (_convoyType == "HVT") then { {[_x] spawn genInit;_x assignAsCargo _veh;_x moveInCargo _veh; _units pushBack _x; [_x] join ((_vehData select 3) select 0)} forEach units _tempGroup; deleteGroup _tempGroup; if (_escortType != enemyMotorpoolDef) then { - [_veh] spawn smokeCover; + //[_veh] spawn smokeCover; }; }; @@ -321,7 +321,7 @@ if !(_escortType in vehTank) then { {[_x] spawn genInit;_x assignAsCargo _veh;_x moveInCargo _veh; _units pushBack _x; [_x] join ((_vehData select 3) select 0)} forEach units _tempGroup; deleteGroup _tempGroup; if (_escortType != enemyMotorpoolDef) then { - [_veh] spawn smokeCover; + //[_veh] spawn smokeCover; }; }; @@ -599,7 +599,7 @@ if (_convoyType == "Supplies") then { publicVariable "reportedVehs"; }; -_tsk = ["CONVOY",[side_blue,civilian],[format [_tskDesc,_originName,numberToDate [2035,_startTimeNumber] select 3,numberToDate [2035,_startTimeNumber] select 4,_destinationName],format [_tskTitle, A3_Str_INDEP],_destination],_posDestination,_tskOutcome,5,true,true,_icon] call BIS_fnc_setTask; +_tsk = ["CONVOY",[side_blue,civilian],[[_tskDesc,_originName,numberToDate [2035,_startTimeNumber] select 3,numberToDate [2035,_startTimeNumber] select 4,_destinationName],[_tskTitle, A3_Str_INDEP],_destination],_posDestination,_tskOutcome,5,true,true,_icon] call BIS_fnc_setTask; { while {(count (waypoints _x)) > 0} do { diff --git a/AntistasiOfficial.Altis/Missions/CON_AA.sqf b/AntistasiOfficial.Altis/Missions/CON_AA.sqf index ae3c9ade..b60c8894 100644 --- a/AntistasiOfficial.Altis/Missions/CON_AA.sqf +++ b/AntistasiOfficial.Altis/Missions/CON_AA.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_CONOPAA"; -_tskDesc = localize "Str_tskDesc_CONOPAA"; +_tskTitle = "STR_TSK_TD_CONOPAA"; +_tskDesc = "STR_TSK_TD_DESC_CONOPAA"; private ["_marcador"]; @@ -20,14 +20,14 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; +_tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1; ((dateToNumber date > _fechalimnum) or (not(_marcador in mrkAAF)))}; if (dateToNumber date > _fechalimnum) then { - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; [5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; @@ -36,7 +36,7 @@ if (dateToNumber date > _fechalimnum) then if (not(_marcador in mrkAAF)) then { sleep 10; - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; [0,200] remoteExec ["resourcesFIA",2]; [-5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; diff --git a/AntistasiOfficial.Altis/Missions/CON_Power.sqf b/AntistasiOfficial.Altis/Missions/CON_Power.sqf index da09f39f..53790439 100644 --- a/AntistasiOfficial.Altis/Missions/CON_Power.sqf +++ b/AntistasiOfficial.Altis/Missions/CON_Power.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_CONPower"; -_tskDesc = localize "Str_tskDesc_CONPower"; +_tskTitle = "STR_TSK_TD_CONPower"; +_tskDesc = "STR_TSK_TD_DESC_CONPower"; private ["_marcador"]; @@ -20,13 +20,13 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; +_tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1; ((dateToNumber date > _fechalimnum) or (not(_marcador in mrkAAF)))}; if (dateToNumber date > _fechalimnum) then { - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; [5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; @@ -34,7 +34,7 @@ if (dateToNumber date > _fechalimnum) then { if (not(_marcador in mrkAAF)) then { sleep 10; - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; [0,200] remoteExec ["resourcesFIA",2]; [-5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; diff --git a/AntistasiOfficial.Altis/Missions/CON_Puestos.sqf b/AntistasiOfficial.Altis/Missions/CON_Puestos.sqf index 93843e2a..04b27f8f 100644 --- a/AntistasiOfficial.Altis/Missions/CON_Puestos.sqf +++ b/AntistasiOfficial.Altis/Missions/CON_Puestos.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_CONOP"; -_tskDesc = localize "Str_tskDesc_CONOP"; +_tskTitle = "STR_TSK_TD_CONOP"; +_tskDesc = "STR_TSK_TD_DESC_CONOP"; private ["_marcador"]; @@ -14,14 +14,14 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; +_tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Target"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1; ((dateToNumber date > _fechalimnum) or (not(_marcador in mrkAAF)))}; if (dateToNumber date > _fechalimnum) then { - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Target"] call BIS_fnc_setTask; [5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; @@ -30,7 +30,7 @@ if (dateToNumber date > _fechalimnum) then if (not(_marcador in mrkAAF)) then { sleep 10; - _tsk = ["CON",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; + _tsk = ["CON",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Target"] call BIS_fnc_setTask; [0,200] remoteExec ["resourcesFIA",2]; [-5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; diff --git a/AntistasiOfficial.Altis/Missions/DEF_Camp.sqf b/AntistasiOfficial.Altis/Missions/DEF_Camp.sqf index 6f5a2a1c..abb2778b 100644 --- a/AntistasiOfficial.Altis/Missions/DEF_Camp.sqf +++ b/AntistasiOfficial.Altis/Missions/DEF_Camp.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "STR_TSK_DEFCAMP"; -_tskDesc = localize "STR_TSKDESC_DEFCAMP"; +_tskTitle = "STR_TSK_TD_DEFCAMP"; +_tskDesc = "STR_TSK_TD_DESC_DEFCAMP"; if (server getVariable ["active_campQRF", false]) exitWith {}; if (server getVariable ["blockCSAT", false]) exitWith {}; @@ -38,7 +38,7 @@ if (count _airports > 0) then { _airportName = format ["the %1 carrier",A3_Str_RED]; }; -_tsk = ["DEF_Camp",[side_blue,civilian],[format [_tskDesc, _campName, _airportName], format [_tskTitle, _campName],_targetMarker],_targetPosition,"CREATED",5,true,true,"Defend"] call BIS_fnc_setTask; +_tsk = ["DEF_Camp",[side_blue,civilian],[[_tskDesc, _campName, _airportName],[_tskTitle, _campName],_targetMarker],_targetPosition,"CREATED",5,true,true,"Defend"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; if (isMultiplayer) then { @@ -52,13 +52,13 @@ if (isMultiplayer) then { waitUntil {sleep 3; (server getVariable ["campQRF", false]) OR {!(_targetMarker in campsFIA)}}; if (_targetMarker in campsFIA) then { - _tsk = ["DEF_Camp",[side_blue,civilian],[format [_tskDesc, _campName, _airportName], format [_tskTitle, _campName],_targetMarker],_targetPosition,"SUCCEEDED",5,true,true,"Defend"] call BIS_fnc_setTask; + _tsk = ["DEF_Camp",[side_blue,civilian],[[_tskDesc, _campName, _airportName],[_tskTitle, _campName],_targetMarker],_targetPosition,"SUCCEEDED",5,true,true,"Defend"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [0,300] remoteExec ["resourcesFIA",2]; [5,Slowhand] call playerScoreAdd; {if (isPlayer _x) then {[10,_x] call playerScoreAdd}} forEach ([500,0,_targetPosition,"BLUFORSpawn"] call distanceUnits); } else { - _tsk = ["DEF_Camp",[side_blue,civilian],[format [_tskDesc, _campName, _airportName], format [_tskTitle, _campName],_targetMarker],_targetPosition,"FAILED",5,true,true,"Defend"] call BIS_fnc_setTask; + _tsk = ["DEF_Camp",[side_blue,civilian],[[_tskDesc, _campName, _airportName],[_tskTitle, _campName],_targetMarker],_targetPosition,"FAILED",5,true,true,"Defend"] call BIS_fnc_setTask; }; server setVariable ["campQRF", false, true]; diff --git a/AntistasiOfficial.Altis/Missions/DES_Antena.sqf b/AntistasiOfficial.Altis/Missions/DES_Antena.sqf index dae0b06d..51e37072 100644 --- a/AntistasiOfficial.Altis/Missions/DES_Antena.sqf +++ b/AntistasiOfficial.Altis/Missions/DES_Antena.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith{}; -_tskTitle = localize "Str_tsk_DesAntenna"; -_tskDesc = localize "Str_tskDesc_DesAntenna"; +_tskTitle = "STR_TSK_TD_DesAntenna"; +_tskDesc = "STR_TSK_TD_DESC_DesAntenna"; private ["_antena","_posicion","_tiempolim","_marcador","_nombredest","_mrkfin","_tsk"]; @@ -17,20 +17,20 @@ _nombredest = [_marcador] call AS_fnc_localizar; _mrkfin = createMarker [format ["DES%1", random 100], _posicion]; _mrkfin setMarkerShape "ICON"; -_tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; +_tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1;(dateToNumber date > _fechalimnum) or (not alive _antena) or (not(_marcador in mrkAAF))}; if (dateToNumber date > _fechalimnum) then { - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; [-10,Slowhand] call playerScoreAdd; }; if ((not alive _antena) or (not(_marcador in mrkAAF))) then { sleep 15; - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [0,0] remoteExec ["prestige",2]; [600] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (_x distance _posicion < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); diff --git a/AntistasiOfficial.Altis/Missions/DES_EnemySuppression.sqf b/AntistasiOfficial.Altis/Missions/DES_EnemySuppression.sqf index df1cd24d..8d7fcf95 100644 --- a/AntistasiOfficial.Altis/Missions/DES_EnemySuppression.sqf +++ b/AntistasiOfficial.Altis/Missions/DES_EnemySuppression.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "STR_TSK_DESSuppression"; -_tskDesc = localize "STR_TSKDESC_DESSuppression"; +_tskTitle = "STR_TSK_TD_DESSuppression"; +_tskDesc = "STR_TSK_TD_DESC_DESSuppression"; private ["_poscrash", "_posbase", "_mrkfin", "_mrkTarget", "_tipoveh", "_churches", "_vehiculos", "_soldados", "_grupos", "_unit", "_roads", "_road", "_vehicle", "_veh", "_tipogrupo", "_tsk", "_humo", "_emitterArray", "_poschurch", "_grupo", "_missionchurch", "_posmissionchurch", "_group1", "_MRAP"]; @@ -61,7 +61,7 @@ while {true} do { // setting the mission - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; @@ -148,12 +148,12 @@ while {true} do { if (dateToNumber date > _fechalimnum) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [5, 0, _posicion] remoteExec ["AS_fnc_changeCitySupport", 2]; [-50] remoteExec ["AS_fnc_increaseAttackTimer", 2]; [-20, Slowhand] call playerScoreAdd; } else { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nombredest, numberToDate [2035, _fechalimnum] select 3, numberToDate [2035, _fechalimnum] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _missionchurch, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [3, 200] remoteExec ["resourcesFIA", 2]; [0, 5, _posicion] remoteExec ["AS_fnc_changeCitySupport", 2]; [_mrkchurch] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; diff --git a/AntistasiOfficial.Altis/Missions/DES_Fuel.sqf b/AntistasiOfficial.Altis/Missions/DES_Fuel.sqf index 05aeca94..50a66059 100644 --- a/AntistasiOfficial.Altis/Missions/DES_Fuel.sqf +++ b/AntistasiOfficial.Altis/Missions/DES_Fuel.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "STR_TSK_DESfuel"; -_tskDesc = localize "STR_TSKDESC_DESfuel"; +_tskTitle = "STR_TSK_TD_DESfuel"; +_tskDesc = "STR_TSK_TD_DESC_DESfuel"; private ["_posbase", "_mrkfin", "_mrkTarget", "_tipoveh", "_range", "_vehiculos", "_soldados", "_grupos", "_returntime", "_roads", "_road", "_vehicle", "_veh", "_TypeOfGroup", "_tsk", "_humo", "_emitterArray", "_poschurch", "_grupo", "_fuelstop", "_posfuelstop", "_fuelstops"]; @@ -65,7 +65,7 @@ _base = ""; // setting the mission _nearestbase = [_base] call AS_fnc_localizar; - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; @@ -115,27 +115,27 @@ _base = ""; }; if (dateToNumber date > _TimeLeft) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; }; if ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [-5, 5, _InitialMarker] remoteExec ["AS_fnc_changeCitySupport", 2]; }; if (not alive _veh) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; }; if (_veh distance _posfuelstop < 40) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _veh, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _veh, "CREATED", 5, true, true, "Destroy"] call BIS_fnc_setTask; hint "The fuel truck has arrived at the station."; _returntime = (time + (1800 + (random 600))); waitUntil {sleep 5; (not alive _veh) or ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0) or (dateToNumber date > _TimeLeft) or (time > _returntime) }; if (not alive _veh) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [-10, 10, _InitialMarker] remoteExec ["AS_fnc_changeCitySupport", 2]; [5, 0] remoteExec ["prestige", 2]; {if (_x distance _veh < 1500) then { [10, _x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -145,11 +145,11 @@ _base = ""; }; if ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [-5, 5, _InitialMarker] remoteExec ["AS_fnc_changeCitySupport", 2]; }; - if (dateToNumber date > _TimeLeft) exitWith {_tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + if (dateToNumber date > _TimeLeft) exitWith {_tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; }; if (time >= _returntime) then { @@ -164,11 +164,11 @@ _base = ""; waitUntil {sleep 5; ((_veh distance _posbase) < 75) or (not alive _veh) or ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0) or (dateToNumber date > _TimeLeft) }; - if (dateToNumber date > _TimeLeft) then {_tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + if (dateToNumber date > _TimeLeft) then {_tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; }; if (not alive _veh) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [-10, 10, _InitialMarker] remoteExec ["AS_fnc_changeCitySupport", 2]; {if (_x distance _veh < 1500) then { [10, _x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); [5, Slowhand] call playerScoreAdd; @@ -177,12 +177,12 @@ _base = ""; }; if ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0) then { - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "SUCCEEDED", 5, true, true, "Destroy"] call BIS_fnc_setTask; [-5, 5, _InitialMarker] remoteExec ["AS_fnc_changeCitySupport", 2]; }; if (_veh distance _posbase < 75) then{ - _tsk = ["DES", [side_blue, civilian], [format [_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; + _tsk = ["DES", [side_blue, civilian], [[_tskDesc, _nearestbase, numberToDate [2035, _TimeLeft] select 3, numberToDate [2035, _TimeLeft] select 4, A3_Str_INDEP], _tskTitle, _mrkfin], _fuelstop, "FAILED", 5, true, true, "Destroy"] call BIS_fnc_setTask; deleteVehicle _veh; deleteGroup _grupo; }; diff --git a/AntistasiOfficial.Altis/Missions/DES_Heli.sqf b/AntistasiOfficial.Altis/Missions/DES_Heli.sqf index b3ab8768..fe69763b 100644 --- a/AntistasiOfficial.Altis/Missions/DES_Heli.sqf +++ b/AntistasiOfficial.Altis/Missions/DES_Heli.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_DesHeli"; -_tskDesc = localize "Str_tskDesc_DesHeli"; +_tskTitle = "STR_TSK_TD_DesHeli"; +_tskDesc = "STR_TSK_TD_DESC_DesHeli"; private ["_poscrash","_marcador","_posicion","_mrkfin","_tipoveh","_efecto","_heli","_vehiculos","_soldados","_grupos","_unit","_roads","_road","_vehicle","_veh","_tipogrupo","_tsk","_humo","_emitterArray"]; @@ -37,7 +37,7 @@ _mrkfin setMarkerShape "ICON"; _nombrebase = [_marcador] call AS_fnc_localizar; -_tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; +_tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _vehiculos = []; _soldados = []; @@ -88,7 +88,7 @@ _grupo = [_posicion, side_green, _tipogrupo] call BIS_Fnc_spawnGroup; {_x assignAsCargo _veh; _x moveInCargo _veh; _soldados = _soldados + [_x]; [_x] join _grupoveh; [_x] spawn genInit} forEach units _grupo; deleteGroup _grupo; -[_veh] spawn smokeCover; +//[_veh] spawn smokeCover; _Vwp0 = _grupoVeh addWaypoint [_poscrash, 0]; _Vwp0 setWaypointType "TR UNLOAD"; @@ -148,7 +148,7 @@ waitUntil {sleep 1; (not alive _heli) or (_vehT distance _posicion < 100) or (da if (not alive _heli) then { - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [0,300] remoteExec ["resourcesFIA",2]; [0,0] remoteExec ["prestige",2]; //[-3,3,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; @@ -164,7 +164,7 @@ if (not alive _heli) then if ((dateToNumber date > _fechalimnum) or (_vehT distance _posicion < 100)) then { - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombrebase],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; //[3,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; diff --git a/AntistasiOfficial.Altis/Missions/DES_Vehicle.sqf b/AntistasiOfficial.Altis/Missions/DES_Vehicle.sqf index 2d078640..61b39f50 100644 --- a/AntistasiOfficial.Altis/Missions/DES_Vehicle.sqf +++ b/AntistasiOfficial.Altis/Missions/DES_Vehicle.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_DesVehicle"; -_tskDesc = localize "Str_tskDesc_DesVehicle"; +_tskTitle = "STR_TSK_TD_DesVehicle"; +_tskDesc = "STR_TSK_TD_DESC_DesVehicle"; private ["_marcador","_posicion","_fechalim","_fechalimnum","_nombredest","_tipoVeh","_texto","_camionCreado","_size","_pos","_veh","_grupo","_unit"]; @@ -28,7 +28,7 @@ if (count (enemyMotorpool - vehTank) < count enemyMotorpool) then {_tipoVeh = se // if ("I_MBT_03_cannon_F" in enemyMotorpool) then {_tipoVeh = "I_MBT_03_cannon_F"; _texto = "AAF Tank"} else {_tipoVeh = opSPAA; _texto = "CSAT Artillery"}; -_tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; +_tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _camionCreado = false; @@ -65,7 +65,7 @@ if (spawner getVariable _marcador) then if ((not alive _veh) or ({_x getVariable ["BLUFORSpawn",false]} count crew _veh > 0)) then { - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [0,300] remoteExec ["resourcesFIA",2]; [2,0] remoteExec ["prestige",2]; if (_tipoVeh == opSPAA) then {[0,0] remoteExec ["prestige",2]; [0,10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]} else {[0,5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]}; @@ -81,7 +81,7 @@ if (spawner getVariable _marcador) then }; if (dateToNumber date > _fechalimnum) then { - _tsk = ["DES",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["DES",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4,_texto],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; [-5,-100] remoteExec ["resourcesFIA",2]; [5,0,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; if (_tipoVeh == opSPAA) then {[0,0] remoteExec ["prestige",2]}; diff --git a/AntistasiOfficial.Altis/Missions/FND_CivCon.sqf b/AntistasiOfficial.Altis/Missions/FND_CivCon.sqf index 5b627f97..8c585938 100644 --- a/AntistasiOfficial.Altis/Missions/FND_CivCon.sqf +++ b/AntistasiOfficial.Altis/Missions/FND_CivCon.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_fndCiv"; -_tskDesc = localize "Str_tskDesc_fndCiv"; +_tskTitle = "STR_TSK_TD_fndCiv"; +_tskDesc = "STR_TSK_TD_DESC_fndCiv"; _site = _this select 0; _position = getMarkerPos _site; @@ -27,6 +27,7 @@ _nombredest = [_site] call AS_fnc_localizar; _grpVul = createGroup side_blue; _grpDealer = createGroup Civilian; Stranger = _grpDealer createUnit [CIV_specialUnits select 2, [8173.79,25308.9,0.00156975], [], 0.9, "NONE"]; +Stranger setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for Stranger sleep 2; Stranger setPos _posDealer; Stranger setIdentity "Stranger"; @@ -51,7 +52,7 @@ _contact = false; _posTsk = (position _bldg) getPos [random 50, random 360]; -_tsk = ["FND_C",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; +_tsk = ["FND_C",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1; (dateToNumber date > _fechalimnum) || (not alive Stranger) || ({(side _x isEqualTo civilian) && (_x distance Stranger < 500)} count allPlayers > 0)}; @@ -67,7 +68,7 @@ while {(dateToNumber date < _fechalimnum) && (alive Stranger) && (!_civActive)} while {({(side _x == side_blue) && (_x distance Stranger < 200)} count allPlayers < 1) && ({(side _x isEqualTo civilian) && (_x distance Stranger < 200)} count allPlayers > 0) && (dateToNumber date < _fechalimnum)} do { scopeName "loop1"; if (!(_acc) && {(side _x isEqualTo civilian) && (_x distance Stranger < 5)} count allPlayers > 0) exitWith { - _tsk = ["FND_C",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"ASSIGNED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_C",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"ASSIGNED",5,true,true,"Find"] call BIS_fnc_setTask; _acc = true; _contact = true; @@ -97,11 +98,11 @@ if ((_contact) && (alive Stranger) && (_civActive)) then { Stranger enableAI "MOVE"; Stranger stop false; Stranger doMove getMarkerPos "resource_7"; - _tsk = ["FND_C",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_C",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; Stranger allowDamage false; } else { - _tsk = ["FND_C",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_C",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; [[Stranger,"remove"],"AS_fnc_addActionMP"] call BIS_fnc_MP; [Stranger] joinSilent grpNull; [Stranger] joinSilent _grpVul; diff --git a/AntistasiOfficial.Altis/Missions/FND_ExpDealer.sqf b/AntistasiOfficial.Altis/Missions/FND_ExpDealer.sqf index f640522b..537c2032 100644 --- a/AntistasiOfficial.Altis/Missions/FND_ExpDealer.sqf +++ b/AntistasiOfficial.Altis/Missions/FND_ExpDealer.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_fndExp"; -_tskDesc = localize "Str_tskDesc_fndExp"; +_tskTitle = "STR_TSK_TD_fndExp"; +_tskDesc = "STR_TSK_TD_DESC_fndExp"; _site = _this select 0; @@ -53,7 +53,7 @@ _tiempolim = 60; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + _tiempolim]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["FND_E",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; +_tsk = ["FND_E",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _objs = [_posCmp, ([_posCmp,_p1] call BIS_fnc_DirTo), call (compile (preprocessFileLineNumbers "Compositions\cmpExp.sqf"))] call BIS_fnc_ObjectsMapper; @@ -62,6 +62,7 @@ sleep 3; // Devin, as known from JA2 -- bow down to the masters at Sir-Tech! _groupDev = createGroup Civilian; Devin = _groupDev createUnit [CIV_specialUnits select 0, [8173.79,25308.9,0.00156975], [], 0.9, "NONE"]; +Devin setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for Devin Devin allowDamage false; sleep 2; Devin setPos _posCmp; @@ -125,7 +126,7 @@ if (random 8 < 1) then { {_x assignAsCargo _veh; _x moveInCargo _veh; _soldados = _soldados + [_x]; [_x] spawn genInit} forEach units _grupo; _grupos = _grupos + [_grupo]; - [_veh] spawn smokeCover; + //[_veh] spawn smokeCover; _Vwp0 = _grupoVeh addWaypoint [_posCmp, 0]; _Vwp0 setWaypointType "TR UNLOAD"; @@ -136,7 +137,7 @@ if (random 8 < 1) then { }; // END QRF -waitUntil {sleep 1; (dateToNumber date > _fechalimnum) || !(alive Devin) || ({(side _x isEqualTo side_blue) && (_x distance Devin < 200)} count allPlayers > 0)}; +waitUntil {sleep 1; (dateToNumber date > _fechalimnum) || !(alive Devin) || ((Devin distance _posCmp) > 50) || ({(side _x isEqualTo side_blue) && (_x distance Devin < 200)} count allPlayers > 0)}; {if (isPlayer _x) then {[petros,"hint","Don't ask Devin about the Holy Handgrenade of Antioch. Just don't."] remoteExec ["commsMP",_x]}} forEach ([200,0,Devin,"BLUFORSpawn"] call distanceUnits); @@ -149,7 +150,7 @@ if !(_qrf) then { waitUntil {sleep 1; (dateToNumber date > _fechalimnum) || !(alive Devin) || ({((side _x isEqualTo side_blue) || (side _x isEqualTo civilian)) && (_x distance Devin < 10)} count allPlayers > 0)}; if ({((side _x isEqualTo side_blue) || (side _x isEqualTo civilian)) && (_x distance Devin < 10)} count allPlayers > 0) then { - _tsk = ["FND_E",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_E",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; [[Devin,"buy_exp"],"AS_fnc_addActionMP"] call BIS_fnc_MP; _mrkDev = createMarker ["Devin", _posCmp]; _mrkDev setMarkerShape "ICON"; @@ -166,10 +167,10 @@ if ({((side _x isEqualTo side_blue) || (side _x isEqualTo civilian)) && (_x dist [[line1],"DIRECT",0.15] execVM "createConv.sqf"; } else { - _tsk = ["FND_E",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_E",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_site],_posCmp,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; }; -waitUntil {sleep 10; (dateToNumber date > _fechalimnum) || !(alive Devin)}; +waitUntil {sleep 10; (dateToNumber date > _fechalimnum) || !(alive Devin) || ((Devin distance _posCmp) > 50)}; if (alive Devin) then { Devin enableAI "ANIM"; @@ -184,6 +185,7 @@ else { server setVariable ["expActive", false, true]; [1200,_tsk] spawn borrarTask; +if((Devin distance _posCmp) > 50) then {Devin globalchat "Wait, what? I'm not going to be kidnapped by you twat, i'd rather EXPLOOOODE!"; sleep 5; _shell1 = "Sh_82mm_AMOS" createVehicle position Devin;_shell1 setVelocity [0,0,150]}; sleep 30; deleteMarker "Devin"; deleteMarker "DevPat"; diff --git a/AntistasiOfficial.Altis/Missions/FND_MilCon.sqf b/AntistasiOfficial.Altis/Missions/FND_MilCon.sqf index 3ae18337..e62fe4bc 100644 --- a/AntistasiOfficial.Altis/Missions/FND_MilCon.sqf +++ b/AntistasiOfficial.Altis/Missions/FND_MilCon.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_fndMil"; -_tskDesc = localize "Str_tskDesc_fndMil"; +_tskTitle = "STR_TSK_TD_fndMil"; +_tskDesc = "STR_TSK_TD_DESC_fndMil"; private ["_mrk"]; @@ -30,6 +30,7 @@ _nombredest = [_site] call AS_fnc_localizar; _grpVul = createGroup side_blue; _grpDealer = createGroup Civilian; Nomad = _grpDealer createUnit [CIV_specialUnits select 1, [8173.79,25308.9,0.00156975], [], 0.9, "NONE"]; +Nomad setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for Nomad sleep 2; Nomad setPos _posDealer; Nomad removeWeaponGlobal (primaryWeapon Nomad); @@ -50,7 +51,7 @@ _break = false; _posTsk = (position _bldg) getPos [random 50, random 360]; -_tsk = ["FND_M",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; +_tsk = ["FND_M",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"CREATED",5,true,true,"Find"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; waitUntil {sleep 1; (dateToNumber date > _fechalimnum) || (not alive Nomad) || ({(side _x isEqualTo civilian) && (_x distance Nomad < 500)} count allPlayers > 0)}; @@ -70,7 +71,7 @@ while {(dateToNumber date < _fechalimnum) && (alive Nomad) && (!_milActive)} do while {({(side _x == side_blue) && (_x distance Nomad < 200)} count allPlayers < 1) && ({(side _x isEqualTo civilian) && (_x distance Nomad < 200)} count allPlayers > 0) && (dateToNumber date < _fechalimnum)} do { scopeName "loop1"; if (!(_acc) && {(side _x isEqualTo civilian) && (_x distance Nomad < 5)} count allPlayers > 0) exitWith { - _tsk = ["FND_M",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"ASSIGNED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_M",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"ASSIGNED",5,true,true,"Find"] call BIS_fnc_setTask; _acc = true; _contact = true; @@ -101,11 +102,11 @@ if ((_contact) && (alive Nomad) && (_milActive)) then { Nomad enableAI "MOVE"; Nomad stop false; Nomad doMove getMarkerPos "resource_7"; - _tsk = ["FND_M",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_M",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"SUCCEEDED",5,true,true,"Find"] call BIS_fnc_setTask; Nomad allowDamage false; } else { - _tsk = ["FND_M",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; + _tsk = ["FND_M",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_site],_posDealer,"FAILED",5,true,true,"Find"] call BIS_fnc_setTask; [[Nomad,"remove"],"AS_fnc_addActionMP"] call BIS_fnc_MP; _break = true; }; diff --git a/AntistasiOfficial.Altis/Missions/INT_Reinforcements.sqf b/AntistasiOfficial.Altis/Missions/INT_Reinforcements.sqf index 097554ce..46e00e9b 100644 --- a/AntistasiOfficial.Altis/Missions/INT_Reinforcements.sqf +++ b/AntistasiOfficial.Altis/Missions/INT_Reinforcements.sqf @@ -9,8 +9,8 @@ private ["_posTarget", "_posBase", "_soldiers", "_groups", "_vehicles", "_endTim if ("INT" in misiones) exitWith {"Info: Reinforcement task killed, reinforcements task active already."}; //if ((format ["INT_%1",_target]) in misiones) exitWith {format ["Info: Reinforcement task killed, %1 already receiving reinforcements.", _target]}; -_tskTitle = localize "STR_TSK_INTREINF"; -_tskDesc = localize "STR_TSKDESC_INTREINF"; +_tskTitle = "STR_TSK_TD_INTREINF"; +_tskDesc = "STR_TSK_TD_DESC_INTREINF"; _posBase = getMarkerPos _base; _posTarget = getMarkerPos _target; @@ -26,7 +26,7 @@ _targetName = [_target] call AS_fnc_localizar; _baseName = [_base] call AS_fnc_localizar; [_base, 15] spawn AS_fnc_addTimeForIdle; -_tsk = ["INT",[side_blue,civilian],[format [_tskDesc, A3_Str_INDEP, _targetName, _baseName],format [_tskTitle, A3_Str_INDEP],_target],_posTarget,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; +_tsk = ["INT",[side_blue,civilian],[[_tskDesc, A3_Str_INDEP, _targetName, _baseName],[_tskTitle, A3_Str_INDEP],_target],_posTarget,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; sleep (DELAY * 60); @@ -50,11 +50,11 @@ waitUntil { }; if ({_x distance _posTarget < 150} count _soldiers > 5) then { - _tsk = ["INT",[side_blue,civilian],[format [_tskDesc, A3_Str_INDEP, _targetName, _baseName],format [_tskTitle, A3_Str_INDEP],_target],_posTarget,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["INT",[side_blue,civilian],[[_tskDesc, A3_Str_INDEP, _targetName, _baseName],[_tskTitle, A3_Str_INDEP],_target],_posTarget,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; [-10, Slowhand] call playerScoreAdd; [5, 0, _posTarget] remoteExec ["AS_fnc_changeCitySupport", 2]; } else { - _tsk = ["INT",[side_blue,civilian],[format [_tskDesc, A3_Str_INDEP, _targetName, _baseName],format [_tskTitle, A3_Str_INDEP],_target],_posTarget,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _tsk = ["INT",[side_blue,civilian],[[_tskDesc, A3_Str_INDEP, _targetName, _baseName],[_tskTitle, A3_Str_INDEP],_target],_posTarget,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [10, Slowhand] call playerScoreAdd; [0, 5, _posTarget] remoteExec ["AS_fnc_changeCitySupport", 2]; }; diff --git a/AntistasiOfficial.Altis/Missions/LOG_Ammo.sqf b/AntistasiOfficial.Altis/Missions/LOG_Ammo.sqf index 17209acf..c871f555 100644 --- a/AntistasiOfficial.Altis/Missions/LOG_Ammo.sqf +++ b/AntistasiOfficial.Altis/Missions/LOG_Ammo.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_logAmmo"; -_tskDesc = localize "Str_tskDesc_logAmmo"; +_tskTitle = "STR_TSK_TD_logAmmo"; +_tskDesc = "STR_TSK_TD_DESC_logAmmo"; private ["_pos","_camion","_camionCreado","_grupo","_grupo1","_mrk"]; @@ -14,7 +14,7 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"rearm"] call BIS_fnc_setTask; +_tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"rearm"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _camionCreado = false; @@ -64,14 +64,14 @@ if (spawner getVariable _marcador) then if (dateToNumber date > _fechalimnum) then { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"rearm"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"rearm"] call BIS_fnc_setTask; [-1200] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; }; if ((not alive _camion) or ({_x getVariable ["BLUFORSpawn",false]} count crew _camion > 0)) then { [position _camion] spawn patrolCA; - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"rearm"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"rearm"] call BIS_fnc_setTask; [0,300] remoteExec ["resourcesFIA",2]; [1200] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (_x distance _camion < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -85,7 +85,7 @@ if (spawner getVariable _marcador) then } else { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"rearm"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"rearm"] call BIS_fnc_setTask; [-1200] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; }; diff --git a/AntistasiOfficial.Altis/Missions/LOG_Bank.sqf b/AntistasiOfficial.Altis/Missions/LOG_Bank.sqf index 9fe5cd2d..6312825b 100644 --- a/AntistasiOfficial.Altis/Missions/LOG_Bank.sqf +++ b/AntistasiOfficial.Altis/Missions/LOG_Bank.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_logBank"; -_tskDesc = localize "Str_tskDesc_logBank"; +_tskTitle = "STR_TSK_TD_logBank"; +_tskDesc = "STR_TSK_TD_DESC_logBank"; _banco = _this select 0; @@ -21,6 +21,10 @@ _mrkfin setMarkerShape "ICON"; _pos = (getMarkerPos guer_respawn) findEmptyPosition [1,50,AS_misVehicleBox]; _camion = AS_misVehicleBox createVehicle _pos; +_camion allowDamage false; +[_camion] spawn {sleep 1; (_this select 0) allowDamage true;}; + + {_x reveal _camion} forEach (allPlayers - (entities "HeadlessClient_F")); [_camion] spawn vehInit; _camion setVariable ["destino",_nombredest,true]; @@ -35,7 +39,7 @@ _camion addEventHandler ["GetIn", [_camion,"Mission Vehicle"] spawn inmuneConvoy; -_tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"CREATED",5,true,true,"Interact"] call BIS_fnc_setTask; +_tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"CREATED",5,true,true,"Interact"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _mrk = createMarkerLocal [format ["%1patrolarea", floor random 100], _posicion]; _mrk setMarkerShapeLocal "RECTANGLE"; @@ -57,7 +61,7 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (!alive _camion) or (_ if ((dateToNumber date > _fechalimnum) or (!alive _camion)) then { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Interact"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Interact"] call BIS_fnc_setTask; _resourcesAAF = server getVariable "resourcesAAF"; _resourcesAAF = _resourcesAAF + 5000; server setVariable ["resourcesAAF",_resourcesAAF,true]; @@ -106,7 +110,7 @@ else waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (!alive _camion) or (_camion distance _posbase < 50)}; if ((_camion distance _posbase < 50) and (dateToNumber date < _fechalimnum)) then { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"SUCCEEDED",5,true,true,"Interact"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"SUCCEEDED",5,true,true,"Interact"] call BIS_fnc_setTask; [0,5000] remoteExec ["resourcesFIA",2]; [-20,0] remoteExec ["prestige",2]; [1800] remoteExec ["AS_fnc_increaseAttackTimer",2]; @@ -120,7 +124,7 @@ if ((_camion distance _posbase < 50) and (dateToNumber date < _fechalimnum)) the }; if (!alive _camion) then { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Interact"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_INDEP],_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"Interact"] call BIS_fnc_setTask; [1800] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; }; diff --git a/AntistasiOfficial.Altis/Missions/LOG_Medical.sqf b/AntistasiOfficial.Altis/Missions/LOG_Medical.sqf index 6d2b87dd..eca46e07 100644 --- a/AntistasiOfficial.Altis/Missions/LOG_Medical.sqf +++ b/AntistasiOfficial.Altis/Missions/LOG_Medical.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_logMedical"; -_tskDesc = localize "Str_tskDesc_logMedical"; +_tskTitle = "STR_TSK_TD_logMedical"; +_tskDesc = "STR_TSK_TD_DESC_logMedical"; private ["_poscrash","_posbase","_mrkfin","_mrkTarget","_tipoveh","_heli","_vehiculos","_soldados","_grupos","_unit","_roads","_road","_vehicle","_veh","_tipogrupo","_tsk","_humo","_emitterArray"]; @@ -47,14 +47,14 @@ while {true} do { if ((!surfaceIsWater _poscrash) && (_poscrash distance _posHQ < 4000) && (getMarkerPos _nfMarker distance _poscrash > 500) && (getMarkerPos _nhMarker distance _poscrash > 800)) exitWith {}; }; -_tipoVeh = AS_misSupplyBoxEnd; +_tipoVeh = AS_misSupplyBoxEmpty; _posCrashMrk = [_poscrash,random 200,random 360] call BIS_fnc_relPos; _posCrash = _posCrash findEmptyPosition [0,100,_tipoVeh]; _mrkfin = createMarker [format ["REC%1", random 100], _posCrashMrk]; _mrkfin setMarkerShape "ICON"; -_tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; +_tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; @@ -63,36 +63,37 @@ _soldados = []; _grupos = []; _sboxempty = createVehicle [_tipoVeh, _poscrash, [], 0, "CAN_COLLIDE"]; -//[_sboxempty,"Supply Crate"] spawn inmuneConvoy; -//reportedVehs pushBack _sboxempty; publicVariable "reportedVehs"; -//_sboxempty lockCargo true; -//{_sboxempty lockCargo [_x, false];} forEach [0 ,1]; -//_sboxempty setFuel 0; - -_crate1 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; // This code require an optimization, they are all same items which should spawn in different position and all deleted at same time later. -_crate2 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate3 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate4 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate5 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate6 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate7 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate8 = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; -_crate1 setPos ([getPos _sboxempty, 6, 185] call BIS_Fnc_relPos); -_crate2 setPos ([getPos _sboxempty, 4, 167] call BIS_Fnc_relPos); -_crate3 setPos ([getPos _sboxempty, 8, 105] call BIS_Fnc_relPos); -_crate4 setPos ([getPos _sboxempty, 5, 215] call BIS_Fnc_relPos); -_crate5 setPos ([getPos _sboxempty, 6, 125] call BIS_Fnc_relPos); -_crate6 setPos ([getPos _sboxempty, 4, 147] call BIS_Fnc_relPos); -_crate7 setPos ([getPos _sboxempty, 8, 82] call BIS_Fnc_relPos); -_crate8 setPos ([getPos _sboxempty, 5, 222] call BIS_Fnc_relPos); -_crate1 setDir (getDir _sboxempty + (floor random 180)); -_crate2 setDir (getDir _sboxempty + (floor random 180)); -_crate3 setDir (getDir _sboxempty + (floor random 180)); -_crate4 setDir (getDir _sboxempty + (floor random 180)); -_crate5 setDir (getDir _sboxempty + (floor random 180)); -_crate6 setDir (getDir _sboxempty + (floor random 180)); -_crate7 setDir (getDir _sboxempty + (floor random 180)); -_crate8 setDir (getDir _sboxempty + (floor random 180)); +[_sboxempty,"Supply Crate"] spawn inmuneConvoy; //necessary for marker icon + +// number of crate offsets = number of spawned crates +_crateOffsets = [ + [ 6, 185], + [ 4, 167], + [ 8, 105], + [ 5, 215], + [ 6, 125], + [ 4, 147], + [ 8, 82 ], + [ 5, 222] +]; + +_crates = []; +{ + _x params ["_distance","_heading"]; + + _currentCrate = "Land_PaperBox_01_small_closed_white_med_F" createVehicle _poscrash; + _currentCrate setPos ([getPos _sboxempty, _distance, _heading] call BIS_Fnc_relPos); + _currentCrate setDir (getDir _sboxempty + (floor random 180)); + if(activeACE && {["ace_dragging"] call ace_common_fnc_isModLoaded}) then { // check if ace dragging module is active + [_currentCrate, false] call ace_dragging_fnc_setCarryable; //disable carrying + [_currentCrate, false] call ace_dragging_fnc_setDraggable; // disable dragging + }; + if(activeACE && {["ace_cargo"] call ace_common_fnc_isModLoaded}) then { // check if ace cargo module is active + [_currentCrate, -1] call ace_cargo_fnc_setSize; // disable loading as cargo with ace + }; + + _crates pushBack _currentCrate; +} forEach _crateOffsets; _tipoGrupo = [infGarrisonSmall, side_green] call AS_fnc_pickGroup; _grupo = [_poscrash, side_green, _tipogrupo] call BIS_Fnc_spawnGroup; @@ -133,7 +134,7 @@ _grupo = [_posbase, side_green, _tipogrupo] call BIS_Fnc_spawnGroup; {_x assignAsCargo _veh; _x moveInCargo _veh; _soldados = _soldados + [_x]; [_x] spawn genInit} forEach units _grupo; _grupos = _grupos + [_grupo]; -[_veh] spawn smokeCover; +//[_veh] spawn smokeCover; _Vwp0 = _grupoVeh addWaypoint [_poscrash, 0]; _Vwp0 setWaypointType "TR UNLOAD"; @@ -142,20 +143,17 @@ _Gwp0 = _grupo addWaypoint [_poscrash, 0]; _Gwp0 setWaypointType "GETOUT"; _Vwp0 synchronizeWaypoint [_Gwp0]; -waitUntil {sleep 1; (not alive _sboxempty) or (dateToNumber date > _fechalimnum) or ({(side _x == side_blue) and (_x distance _sboxempty < 500)} count allUnits > 0)}; - -waitUntil {sleep 1; (not alive _sboxempty) or (dateToNumber date > _fechalimnum) or ({(side _x == side_blue) and (_x distance _sboxempty < 50)} count allUnits > 0)}; +waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or ({(side _x == side_blue) and (_x distance _sboxempty < 500)} count allUnits > 0)}; _mrkfin = createMarker [format ["REC%1", random 100], _poscrash]; _mrkfin setMarkerShape "ICON"; if (dateToNumber date > _fechalimnum) then { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; -} -else { - _tsk = ["LOG",[side_blue,civilian],[format ["Secure the vehicle, load the cargo, and deliver the supplies to the people in %1 before %2:%3. AAF command has probably dispatched a patrol from %4 to retrieve the goods, so you better hurry. Note: no cargo left behind!",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_poscrash,"AUTOASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; +} else { + _tsk = ["LOG",[side_blue,civilian],[["Secure the vehicle, load the cargo, and deliver the supplies to the people in %1 before %2:%3. AAF command has probably dispatched a patrol from %4 to retrieve the goods, so you better hurry. Note: no cargo left behind!",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_poscrash,"AUTOASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; _cuenta = 120; _counter = 0; @@ -172,75 +170,88 @@ else { }; if ((side _x == civilian) and (_x distance _posCrash < 300)) then {_x doMove position _sboxempty}; } forEach allUnits; - } forEach ([300,0,_sboxempty,"BLUFORSpawn"] call distanceUnits); + } forEach ([300,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits); while {(_counter < _cuenta) and (dateToNumber date < _fechalimnum)} do { - while {(_counter < _cuenta) and (_sboxempty distance _posCrash < 40) and !({_x getVariable ["ASunconscious",false]} count ([80,0,_sboxempty,"BLUFORSpawn"] call distanceUnits) == count ([80,0,_sboxempty,"BLUFORSpawn"] call distanceUnits)) and ({(side _x == side_green) and (_x distance _sboxempty < 50)} count allUnits == 0) and (dateToNumber date < _fechalimnum)} do { - + while { + (_counter < _cuenta) and + (_sboxempty distance _posCrash < 40) and + !({[_x] call AS_fnc_isUnconscious} count + ([80,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits) + == + count ( + [80,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits)) and + ({(side _x == side_green) and (_x distance _sboxempty < 50) and (lifeState _x != "INCAPACITATED")} count allUnits == 0) and + (dateToNumber date < _fechalimnum)} + do { if !(_active) then { - {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]}} forEach ([80,0,_sboxempty,"BLUFORSpawn"] call distanceUnits); + {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]}} forEach ([80,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits); _active = true; [[petros,"globalChat","Keep area clear while repacking"],"commsMP"] call BIS_fnc_MP; }; - _counter = _counter + 1; sleep 1; - - }; + }; if (_counter < _cuenta) then { _counter = 0; _active = false; - {if (isPlayer _x) then {[0,true] remoteExec ["pBarMP",_x]}} forEach ([100,0,_sboxempty,"BLUFORSpawn"] call distanceUnits); - - if (((_sboxempty distance _posCrash > 40) or (not([80,1,_sboxempty,"BLUFORSpawn"] call distanceUnits)) or ({(side _x == side_green) and (_x distance _sboxempty < 50)} count allUnits != 0)) and (alive _sboxempty)) then {[[petros,"hint","Hold this position while loading the supplies into the crate."],"commsMP"] call BIS_fnc_MP}; - waitUntil {sleep 1; ((_sboxempty distance _posCrash < 40) and ([80,1,_sboxempty,"BLUFORSpawn"] call distanceUnits) and ({(side _x == side_green) and (_x distance _sboxempty < 50)} count allUnits == 0)) or (dateToNumber date > _fechalimnum)}; + {if (isPlayer _x) then {[0,true] remoteExec ["pBarMP",_x]}} forEach ([100,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits); + + if ( + ((_sboxempty distance _posCrash > 40) or (not([80,1,position _sboxempty,"BLUFORSpawn"] call distanceUnits)) or + ({(side _x == side_green) and (_x distance _sboxempty < 50) and (lifeState _x != "INCAPACITATED")} count allUnits != 0)) + ) then { + [[petros,"hint","Hold this position while loading the supplies into the crate."],"commsMP"] call BIS_fnc_MP}; + waitUntil {sleep 1; + ((_sboxempty distance _posCrash < 40) and ([80,1,_sboxempty,"BLUFORSpawn"] call distanceUnits) and + ({(side _x == side_green) and (_x distance _sboxempty < 50) and (lifeState _x != "INCAPACITATED")} count allUnits == 0)) or + (dateToNumber date > _fechalimnum)}; }; - if ((alive _sboxempty) and !(_counter < _cuenta)) exitWith { + if !(_counter < _cuenta) exitWith { _formato = format ["Good to go. Deliver these supplies to %1.",_nombredest]; - {if (isPlayer _x) then {[petros,"hint",_formato] remoteExec ["commsMP",_x]}} forEach ([80,0,_sboxempty,"BLUFORSpawn"] call distanceUnits); - deleteVehicle _crate1; - deleteVehicle _crate2; - deleteVehicle _crate3; - deleteVehicle _crate4; - deleteVehicle _crate5; - deleteVehicle _crate6; - deleteVehicle _crate7; - deleteVehicle _crate8; - _pos1 = getpos _sboxempty; - deleteVehicle _sboxempty; - s_box = AS_misSupplyBox createVehicle _pos1; - s_box call jn_fnc_logistics_addAction; - /*s_box addAction ["Delivery infos", - { - hint format ["Deliver this box to %1, unload it to start distributing to people",_nombredest]; - }, - nil, - 0, - false, - true, - "", - "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" - ];*/ //Stef 20/11/2017 need help it says that _nombredest is wrong but it works at line 202... + {if (isPlayer _x) then {[petros,"hint",_formato] remoteExec ["commsMP",_x]}} forEach ([80,0,position _sboxempty,"BLUFORSpawn"] call distanceUnits); }; }; + +// delete boxes +{deleteVehicle _x;} forEach _crates ; +_pos1 = position _sboxempty; +deleteVehicle _sboxempty; + +// Create the repacked box add delivery info + _sbox = AS_misSupplyBox createVehicle _pos1; + _sbox call jn_fnc_logistics_addAction; + _sbox setVariable ["destino",_nombredest,true]; + _sbox addAction ["Delivery infos", + { + _text = format ["Deliver this box to %1, unload it to start distributing to people",(_this select 0) getVariable "destino"]; + _text remoteExecCall ["hint",_this select 2]; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; _mrkTarget = createMarker [format ["REC%1", random 100], _posicion]; _mrkTarget setMarkerShape "ICON"; _active = false; - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkTarget],_posicion,"AUTOASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; - - waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or (s_box distance _posicion < 40)}; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkTarget],_posicion,"AUTOASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; + hint format ["%1 is the box, %2 is posicion",_sbox,_posicion]; + waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or ( (_sbox distance _posicion < 40) and (isNull attachedTo _sbox) ) }; if (dateToNumber date < _fechalimnum) then { _counter = 0; _cuenta = 10; - while {(_counter < _cuenta) and (isNull attachedTo s_box) and !({_x getVariable ["ASunconscious",false]} count ([80,0,s_box,"BLUFORSpawn"] call distanceUnits) == count ([80,0,s_box,"BLUFORSpawn"] call distanceUnits)) and (dateToNumber date < _fechalimnum)} do { + while {(_counter < _cuenta) and (isNull attachedTo _sbox) and !({[_x] call AS_fnc_isUnconscious} count ([80,0,_sbox,"BLUFORSpawn"] call distanceUnits) == count ([80,0,_sbox,"BLUFORSpawn"] call distanceUnits)) and (dateToNumber date < _fechalimnum)} do { if !(_active) then { - {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]}} forEach ([80,0,s_box,"BLUFORSpawn"] call distanceUnits); + {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]}} forEach ([80,0,_sbox,"BLUFORSpawn"] call distanceUnits); _active = true; [[petros,"globalChat","Leave the vehicle here, they'll come pick it up."],"commsMP"] call BIS_fnc_MP; }; @@ -249,11 +260,11 @@ else { sleep 1; }; - {if (isPlayer _x) then {[s_box,true] remoteExec ["AS_fnc_lockVehicle",_x];}} forEach ([100,0,s_box,"BLUFORSpawn"] call distanceUnits); + {if (isPlayer _x) then {[_sbox,true] remoteExec ["AS_fnc_lockVehicle",_x];}} forEach ([100,0,_sbox,"BLUFORSpawn"] call distanceUnits); - if (alive s_box) then { + if (alive _sbox) then { [[petros,"hint","Supplies Delivered"],"commsMP"] call BIS_fnc_MP; - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; [0,15,_marcador] remoteExec ["AS_fnc_changeCitySupport",2]; [5,0] remoteExec ["prestige",2]; {if (_x distance _posicion < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -284,13 +295,13 @@ else { } else { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; }; } else { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, _nombreOrig, A3_Str_INDEP],_tskTitle,_mrkfin],_posCrashMrk,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; }; @@ -298,8 +309,7 @@ else { [1200,_tsk] spawn borrarTask; deleteMarker _mrkfin; -{ -waitUntil {sleep 1;(!([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits))}; +{waitUntil {sleep 1;(!([distanciaSPWN,1,_x,"BLUFORSpawn"] call distanceUnits))}; deleteVehicle _x} forEach _vehiculos; {deleteVehicle _x} forEach _soldados; -{deleteGroup _x} forEach _grupos; \ No newline at end of file +{deleteGroup _x} forEach _grupos; diff --git a/AntistasiOfficial.Altis/Missions/LOG_Suministros.sqf b/AntistasiOfficial.Altis/Missions/LOG_Suministros.sqf index 04b1fe8b..e757a432 100644 --- a/AntistasiOfficial.Altis/Missions/LOG_Suministros.sqf +++ b/AntistasiOfficial.Altis/Missions/LOG_Suministros.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "Str_tsk_logSupply"; -_tskDesc = localize "Str_tskDesc_logSupply"; +_tskTitle = "STR_TSK_TD_logSupply"; +_tskDesc = "STR_TSK_TD_DESC_logSupply"; _marcador = _this select 0; _posicion = getMarkerPos _marcador; @@ -11,13 +11,13 @@ _fechalim = [date select 0, date select 1, date select 2, date select 3, (date s _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; +_tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _pos = (getMarkerPos guer_respawn) findEmptyPosition [1,50,AS_misSupplyBox]; _sbox = AS_misSupplyBox createVehicle _pos; _sbox call jn_fnc_logistics_addAction; -{_x reveal _sbox} forEach (allPlayers - (entities "HeadlessClient_F")); //HELP! the reveal must be applied to units around _sbox +//{_x reveal _sbox} forEach (allPlayers - (entities "HeadlessClient_F")); No sense to reveal an object to players _sbox setVariable ["destino",_nombredest,true]; _sbox addAction ["Delivery infos", { @@ -35,66 +35,75 @@ _sbox addAction ["Delivery infos", [_sbox,"Supply Crate"] spawn inmuneConvoy; -waitUntil {sleep 1; (not alive _sbox) or (dateToNumber date > _fechalimnum) or (_sbox distance _posicion < 40)}; +waitUntil {sleep 1; (not alive _sbox) or (dateToNumber date > _fechalimnum) or (_sbox distance _posicion < 40) and (isNull attachedTo _sbox)}; -if ((not alive _sbox) or (dateToNumber date > _fechalimnum)) then - { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; +if (dateToNumber date > _fechalimnum) then { + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; - } -else - { +} else { _cuenta = 120; _counter = 0; _active = false; - [_posicion] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; //This make the base busy, a base shouldn't be busy because of this + [_posicion] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; //In future this will be small ca from outpost {_amigo = _x; - if (captive _amigo) then - { - [_amigo,false] remoteExec ["setCaptive",_amigo]; - }; - { - if ((side _x == side_green) and (_x distance _posicion < distanciaSPWN)) then - { - if (_x distance _posicion < 300) then {_x doMove _posicion} else {_x reveal [_amigo,4]}; - }; - if ((side _x == civilian) and (_x distance _posicion < 300)) then {_x doMove position _sbox}; - } forEach allUnits; - } forEach ([300,0,_sbox,"BLUFORSpawn"] call distanceUnits); - while {(_counter < _cuenta) and (alive _sbox) and (dateToNumber date < _fechalimnum)} do + if (captive _amigo) then {[_amigo,false] remoteExec ["setCaptive",_amigo];}; { - while {(_counter < _cuenta) and (_sbox distance _posicion < 40) && (speed _sbox < 1) and (alive _sbox) and (isNull attachedTo _sbox) and !({_x getVariable ["ASunconscious",false]} count ([40,0,_sbox,"BLUFORSpawn"] call distanceUnits) == count ([40,0,_sbox,"BLUFORSpawn"] call distanceUnits)) and ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits == 0) and (dateToNumber date < _fechalimnum)} do - { - if !(_active) then { - { - _x action ["eject", _sbox]; - } forEach (crew (_sbox)); - _sbox lock 2; - _sbox engineOn false; - {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]; [_sbox,true] remoteExec ["AS_fnc_lockVehicle",_x];}} forEach ([80,0,_sbox,"BLUFORSpawn"] call distanceUnits); - _active = true; - [[petros,"globalChat","Guard the truck!"],"commsMP"] call BIS_fnc_MP; + if ((side _x == side_green) and (_x distance _posicion < distanciaSPWN)) then { + if (_x distance _posicion < 300) then {_x doMove _posicion} else {_x reveal [_amigo,4]}; }; + if ((side _x == civilian) and (_x distance _posicion < 300)) then {_x doMove position _sbox}; + } forEach allUnits; + } forEach ([300,0,position _sbox,"BLUFORSpawn"] call distanceUnits); + + while {(_counter < _cuenta) and (dateToNumber date < _fechalimnum)} do { + while { + (_counter < _cuenta) and + (_sbox distance _posicion < 40) && (speed _sbox < 1) and + (alive _sbox) and + (isNull attachedTo _sbox) and + !( + {[_x] call AS_fnc_isUnconscious} count ([40,0,_sbox,"BLUFORSpawn"] call distanceUnits) == + count ([40,0,_sbox,"BLUFORSpawn"] call distanceUnits)) and + ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits == 0) and (dateToNumber date < _fechalimnum)} do { + if !(_active) then { //this is not going to have any use since it is a crate. + { + _x action ["eject", _sbox]; + } forEach (crew (_sbox)); + _sbox lock 2; + _sbox engineOn false; + {if (isPlayer _x) then {[(_cuenta - _counter),false] remoteExec ["pBarMP",_x]; [_sbox,true] remoteExec ["AS_fnc_lockVehicle",_x];}} forEach ([80,0,_sbox,"BLUFORSpawn"] call distanceUnits); + _active = true; + [[petros,"globalChat","Guard the truck!"],"commsMP"] call BIS_fnc_MP; + }; _counter = _counter + 1; sleep 1; - }; - if (_counter < _cuenta) then - { + }; + + if (_counter < _cuenta) then { _counter = 0; _active = false; {if (isPlayer _x) then {[0,true] remoteExec ["pBarMP",_x]}} forEach ([100,0,_sbox,"BLUFORSpawn"] call distanceUnits); - if (((_sbox distance _posicion > 40) or (not([40,1,_sbox,"BLUFORSpawn"] call distanceUnits)) or ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits != 0)) and (alive _sbox)) then {[[petros,"hint","Don't get the truck far from the city center, and stay close to it, and clean all AAF presence in the surroundings or count will restart"],"commsMP"] call BIS_fnc_MP}; - waitUntil {sleep 1; (!alive _sbox) or ((_sbox distance _posicion < 40) and ([40,1,_sbox,"BLUFORSpawn"] call distanceUnits) and ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits == 0)) or (dateToNumber date > _fechalimnum)}; + if ( + ((_sbox distance _posicion > 40) or (not([40,1,_sbox,"BLUFORSpawn"] call distanceUnits)) or + ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits != 0)) and (alive _sbox)) + then {[[petros,"hint","Don't get the truck far from the city center, and stay close to it, and clean all AAF presence in the surroundings or count will restart"],"commsMP"] call BIS_fnc_MP}; + + waitUntil {sleep 1; ( + (_sbox distance _posicion < 40) and ([40,1,_sbox,"BLUFORSpawn"] call distanceUnits) and + ({(side _x == side_green) and (_x distance _sbox < 50)} count allUnits == 0)) + or (dateToNumber date > _fechalimnum)}; }; - if ((alive _sbox) and !(_counter < _cuenta)) exitWith {}; + + if !(_counter < _cuenta) exitWith {}; }; - if ((alive _sbox) and (dateToNumber date < _fechalimnum)) then { + + if (dateToNumber date < _fechalimnum) then { [[petros,"hint","Supplies Delivered"],"commsMP"] call BIS_fnc_MP; - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; [0,15,_marcador] remoteExec ["AS_fnc_changeCitySupport",2]; [5,0] remoteExec ["prestige",2]; {if (_x distance _posicion < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -106,7 +115,7 @@ else // BE module } else { - _tsk = ["LOG",[side_blue,civilian],[format [_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["LOG",[side_blue,civilian],[[_tskDesc,_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_marcador],_posicion,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; }; @@ -115,14 +124,12 @@ else _ecpos = getpos _sbox; deleteVehicle _sbox; -_empty = AS_misSupplyBoxEnd createVehicle _ecpos; +_empty = AS_misSupplyBoxEmpty createVehicle _ecpos; //sleep (600 + random 1200); //[_tsk,true] call BIS_fnc_deleteTask; [600,_tsk] spawn borrarTask; -waitUntil {sleep 1; (not([distanciaSPWN,1,_empty,"BLUFORSpawn"] call distanceUnits)) or ((_empty distance (getMarkerPos guer_respawn) < 60) && (speed _empty < 1))}; -[_sbox,true] call vaciar; - +waitUntil {sleep 1; (not([distanciaSPWN,1,_empty,"BLUFORSpawn"] call distanceUnits)) or ((_empty distance (getMarkerPos guer_respawn) < 60))}; deleteVehicle _empty; diff --git a/AntistasiOfficial.Altis/Missions/NATOAmmo.sqf b/AntistasiOfficial.Altis/Missions/NATOAmmo.sqf index a44f3be9..f12377e1 100644 --- a/AntistasiOfficial.Altis/Missions/NATOAmmo.sqf +++ b/AntistasiOfficial.Altis/Missions/NATOAmmo.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith{}; -_tskTitle = localize "Str_tsk_NATOSupply"; _tskTitle = format [_tskTitle, A3_Str_BLUE]; -_tskDesc = localize "Str_tskDesc_NATOSupply"; _tskDesc = format [_tskDesc, A3_Str_BLUE]; +_tskTitle = "STR_TSK_TD_NATOSupply"; +_tskDesc = "STR_TSK_TD_DESC_NATOSupply"; _posicion = _this select 0; _NATOSupp = _this select 1; @@ -13,7 +13,7 @@ _mrkfin setMarkerShape "ICON"; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + 60]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["NATOAmmo",[side_blue,civilian],[_tskDesc,_tskTitle,_mrkfin],_posicion,"CREATED",5,true,true,"rifle"] call BIS_fnc_setTask; +_tsk = ["NATOAmmo",[side_blue,civilian],[[_tskDesc, A3_Str_BLUE],[_tskTitle, A3_Str_BLUE],_mrkfin],_posicion,"CREATED",5,true,true,"rifle"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; [-5,0] remoteExec ["prestige",2]; @@ -44,8 +44,7 @@ waitUntil {sleep 2; (_heli distance _posicion < 300) or (!canMove _heli) or (dat Slowhand hcRemoveGroup _grupoHeli; -if (_heli distance _posicion < 300) then - { +if (_heli distance _posicion < 300) then { _chute = createVehicle ["B_Parachute_02_F", [100, 100, 200], [], 0, 'FLY']; _chute setPos [getPosASL _heli select 0, getPosASL _heli select 1, (getPosASL _heli select 2) - 50]; _crate = createVehicle ["B_supplyCrate_F", position _chute, [], 0, 'NONE']; @@ -59,14 +58,15 @@ if (_heli distance _posicion < 300) then _wp3 setWaypointSpeed "FULL"; waitUntil {position _crate select 2 < 0.5 || isNull _chute}; detach _crate; - _tsk = ["NATOAmmo",[side_blue,civilian],[_tskDesc,_tskTitle,_mrkfin],_posicion,"SUCCEEDED",5,true,true,"rifle"] call BIS_fnc_setTask; + private _pos = getPos _crate; + _pos set [2, 0.5]; + _crate setPos _pos; + _tsk = ["NATOAmmo",[side_blue,civilian],[[_tskDesc, A3_Str_BLUE],[_tskTitle, A3_Str_BLUE],_mrkfin],_posicion,"SUCCEEDED",5,true,true,"rifle"] call BIS_fnc_setTask; _humo = "SmokeShellBlue" createVehicle position _crate; _vehiculos = _vehiculos + [_humo]; - } -else - { - _tsk = ["NATOAmmo",[side_blue,civilian],[_tskDesc,_tskTitle,_mrkfin],_posicion,"FAILED",5,true,true,"rifle"] call BIS_fnc_setTask; - }; +} else { + _tsk = ["NATOAmmo",[side_blue,civilian],[[_tskDesc, A3_Str_BLUE],[_tskTitle, A3_Str_BLUE],_mrkfin],_posicion,"FAILED",5,true,true,"rifle"] call BIS_fnc_setTask; +}; sleep 15; diff --git a/AntistasiOfficial.Altis/Missions/PR_Brainwash.sqf b/AntistasiOfficial.Altis/Missions/PR_Brainwash.sqf index 9baae0ec..ddf35cc1 100644 --- a/AntistasiOfficial.Altis/Missions/PR_Brainwash.sqf +++ b/AntistasiOfficial.Altis/Missions/PR_Brainwash.sqf @@ -1,11 +1,11 @@ if (!isServer and hasInterface) exitWith{}; -_tskTitle = localize "Str_tsk_PRBrain"; -_tskDesc = localize "Str_tskDesc_PRBrain"; -_tskDesc_fail = localize "Str_tskDesc_PRBrain_fail"; -_tskDesc_fail2 = localize "Str_tskDesc_PRBrain_fail2"; -_tskDesc_hold = localize "Str_tskDesc_PRBrain_hold"; -_tskDesc_success = localize "Str_tskDesc_PRBrain_success"; +_tskTitle = "STR_TSK_TD_PRBrain"; +_tskDesc = "STR_TSK_TD_DESC_PRBrain"; +_tskDesc_fail = "STR_TSK_TD_DESC_PRBrain_fail"; +_tskDesc_fail2 = "STR_TSK_TD_DESC_PRBrain_fail2"; +_tskDesc_hold = "STR_TSK_TD_DESC_PRBrain_hold"; +_tskDesc_success = "STR_TSK_TD_DESC_PRBrain_success"; /* parameters @@ -20,7 +20,7 @@ _tiempolim = 60; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + _tiempolim]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["PR",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; +_tsk = ["PR",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; @@ -58,6 +58,8 @@ if (count _airports > 0) then {_airport = [_airports, _targetPosition] call BIS_ propTruck = ""; _pos = (getMarkerPos guer_respawn) findEmptyPosition [10,50,"C_Truck_02_box_F"]; propTruck = "C_Truck_02_box_F" createVehicle _pos; +propTruck allowDamage false; +[propTruck] spawn {sleep 1; (_this select 0) allowDamage true;}; // spawn eye candy _grafArray = []; @@ -144,7 +146,7 @@ if !(server getVariable "BCactive") then { }; if (_break) exitWith { - _tsk = ["PR",[side_blue,civilian],[format [_tskDesc_fail,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["PR",[side_blue,civilian],[[_tskDesc_fail,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_targetMarker] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; @@ -227,7 +229,7 @@ if (isMultiplayer) then { 0 = [_targetMarker, 30, _timing, _comp] spawn attackWaves; -_tsk = ["PR",[side_blue,civilian],[format [_tskDesc_hold,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],propTruck,"ASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; +_tsk = ["PR",[side_blue,civilian],[[_tskDesc_hold,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],propTruck,"ASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; /* setup for the progress bar/timer @@ -246,7 +248,7 @@ while {(server getVariable "BCactive") && (alive propTruck) && ({(side _x isEqua // alive, deployed, timer below maximum, blufor alive, no opfor/greenfor, conscious players within 250m while {(server getVariable "BCactive") && (alive propTruck) && - !({_x getVariable ["ASunconscious",false]} count ([300,0, propTruck,"BLUFORSpawn"] call distanceUnits) == count ([300,0, propTruck,"BLUFORSpawn"] call distanceUnits)) && + !({[_x] call AS_fnc_isUnconscious} count ([300,0, propTruck,"BLUFORSpawn"] call distanceUnits) == count ([300,0, propTruck,"BLUFORSpawn"] call distanceUnits)) && ({((side _x == side_green) || (side _x == side_red)) && (_x distance propTruck < 50)} count allUnits == 0)} do { // activate the timer @@ -309,12 +311,12 @@ if (_break) then { // failure if you held out for less than 10 minutes if (_break) then { - _tsk = ["PR",[side_blue,civilian],[format [_tskDesc_fail2,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["PR",[side_blue,civilian],[[_tskDesc_fail2,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_targetMarker] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; } else { - _tsk = ["PR",[side_blue,civilian],[format [_tskDesc_success,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; + _tsk = ["PR",[side_blue,civilian],[[_tskDesc_success,_targetName,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4],_tskTitle,_targetMarker],_targetPosition,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; [0,_prestige,_targetMarker] remoteExec ["AS_fnc_changeCitySupport",2]; {if (_x distance _targetPosition < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); [10,Slowhand] call playerScoreAdd; diff --git a/AntistasiOfficial.Altis/Missions/PR_Pamphlet.sqf b/AntistasiOfficial.Altis/Missions/PR_Pamphlet.sqf index fa1623f5..1c58b1fb 100644 --- a/AntistasiOfficial.Altis/Missions/PR_Pamphlet.sqf +++ b/AntistasiOfficial.Altis/Missions/PR_Pamphlet.sqf @@ -4,11 +4,11 @@ params ["_marker"]; [3,[],[],[],[],[]] params ["_countBuildings","_targetBuildings","_allGroups","_allSoldiers","_allVehicles","_leafletCrates"]; private ["_targetPosition","_targetName","_duration","_endTime","_task","_spawnPosition","_missionVehicle","_crate","_range","_allBuildings","_usableBuildings","_index","_perimeterBuildings","_currentBuilding","_lastBuilding","_bPositions","_groupType","_params","_group","_dog","_leaflets","_drop"]; -_tskTitle = localize "STR_TSK_PRPAMPHLET"; -_tskDesc = localize "STR_TSKDESC_PRPAMPHLET"; -_tskDesc_fail = localize "STR_TSKDESC_PRPAMPHLET_FAIL"; -_tskDesc_drop = localize "STR_TSKDESC_PRPAMPHLET_DROP"; -_tskDesc_success = localize "STR_TSKDESC_PRPAMPHLET_SUCCESS"; +_tskTitle = "STR_TSK_TD_PRPAMPHLET"; +_tskDesc = "STR_TSK_TD_DESC_PRPAMPHLET"; +_tskDesc_fail = "STR_TSK_TD_DESC_PRPAMPHLET_FAIL"; +_tskDesc_drop = "STR_TSK_TD_DESC_PRPAMPHLET_DROP"; +_tskDesc_success = "STR_TSK_TD_DESC_PRPAMPHLET_SUCCESS"; _targetPosition = getMarkerPos _marker; _targetName = [_marker] call AS_fnc_localizar; @@ -28,17 +28,15 @@ _duration = 60; _endTime = [date select 0, date select 1, date select 2, date select 3, (date select 4) + _duration]; _endTime = dateToNumber _endTime; -_task = ["PR",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_targetPosition,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; +_task = ["PR",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_targetPosition,"CREATED",5,true,true,"Heal"] call BIS_fnc_setTask; misiones pushBack _task; publicVariable "misiones"; _spawnPosition = (getMarkerPos guer_respawn) findEmptyPosition [5,50,"C_Van_01_transport_F"]; -if !(count (server getVariable ["obj_vehiclePad",[]]) > 0) then { - if (count (_spawnPosition nearObjects ["AllVehicles",7]) > 0) then { - _spawnPosition = (server getVariable ["obj_vehiclePad",[]]); - }; -}; +sleep 1; _missionVehicle = "C_Van_01_transport_F" createVehicle _spawnPosition; +_missionVehicle allowDamage false; +[_missionVehicle] spawn {sleep 1; (_this select 0) allowDamage true;}; _lockedseats = [2,3,4,5,6,7,8,9,10,11]; {_missionVehicle lockcargo [_x, true]} foreach _lockedseats; @@ -135,7 +133,7 @@ waitUntil {sleep 1; !(alive _missionVehicle) OR (dateToNumber date > _endTime) O // vehicle destroyed or timer ran out if !(_missionVehicle distance _targetPosition < 550) exitWith { - _task = ["PR",[side_blue,civilian], [format [_tskDesc_fail, _targetName],_tskTitle,_marker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _task = ["PR",[side_blue,civilian], [[_tskDesc_fail, _targetName],_tskTitle,_marker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [5,-5,_targetPosition] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; @@ -184,7 +182,7 @@ while {(alive _missionVehicle) AND (dateToNumber date < _endTime) AND (_currentD if !(_proceed) then { _proceed = true; _currentDrop = _targetBuildings select _currentDropCount; - _task = ["PR",[side_blue,civilian],[format [_tskDesc_drop,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker], position _currentDrop,"ASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; + _task = ["PR",[side_blue,civilian],[[_tskDesc_drop,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker], position _currentDrop,"ASSIGNED",5,true,true,"Heal"] call BIS_fnc_setTask; _patGroup = _allGroups select 0; if (((leader _patGroup) distance2D (position _currentDrop)) > ((leader (_allGroups select 1)) distance2D (position _currentDrop))) then { @@ -209,7 +207,7 @@ while {(alive _missionVehicle) AND (dateToNumber date < _endTime) AND (_currentD }; // stop unloading when enemies get too close - while {(_counter < _deploymentTime) AND (alive _missionVehicle) AND !({_x getVariable ["ASunconscious",false]} count ([80,0,_missionVehicle,"BLUFORSpawn"] call distanceUnits) == count ([80,0,_missionVehicle,"BLUFORSpawn"] call distanceUnits)) AND ({((side _x == side_green) OR (side _x == side_red)) AND (_x distance _missionVehicle < 50)} count allUnits == 0) AND (dateToNumber date < _endTime) AND (server getVariable "pr_unloading_pamphlets")} do { + while {(_counter < _deploymentTime) AND (alive _missionVehicle) AND !({[_x] call AS_fnc_isUnconscious} count ([80,0,_missionVehicle,"BLUFORSpawn"] call distanceUnits) == count ([80,0,_missionVehicle,"BLUFORSpawn"] call distanceUnits)) AND ({((side _x == side_green) OR (side _x == side_red)) AND (_x distance _missionVehicle < 50)} count allUnits == 0) AND (dateToNumber date < _endTime) AND (server getVariable "pr_unloading_pamphlets")} do { // spawn eye candy if !(_unloading) then { @@ -291,11 +289,11 @@ while {(alive _missionVehicle) AND (dateToNumber date < _endTime) AND (_currentD // fail if the truck is destroyed or the timer runs out if (!(alive _missionVehicle) OR (dateToNumber date > _endTime)) then { - _task = ["PR",[side_blue,civilian], [format [_tskDesc_fail, _targetName],_tskTitle,_marker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; + _task = ["PR",[side_blue,civilian], [[_tskDesc_fail, _targetName],_tskTitle,_marker],_targetPosition,"FAILED",5,true,true,"Heal"] call BIS_fnc_setTask; [0,-2,_marker] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; } else { - _task = ["PR",[side_blue,civilian], [format [_tskDesc_success,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_targetPosition,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; + _task = ["PR",[side_blue,civilian], [[_tskDesc_success,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_targetPosition,"SUCCEEDED",5,true,true,"Heal"] call BIS_fnc_setTask; [-15,5,_marker] remoteExec ["AS_fnc_changeCitySupport",2]; [5,0] remoteExec ["prestige",2]; {if (_x distance _targetPosition < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); diff --git a/AntistasiOfficial.Altis/Missions/REP_Antena.sqf b/AntistasiOfficial.Altis/Missions/REP_Antena.sqf index 47611cb0..7f8583fa 100644 --- a/AntistasiOfficial.Altis/Missions/REP_Antena.sqf +++ b/AntistasiOfficial.Altis/Missions/REP_Antena.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; params ["_marker","_posAntenna"]; -[localize "STR_TSK_REPANTENNA",localize "STR_TSKDESC_REPANTENNA",""] params ["_tskTitle","_tskDesc","_group"]; +["STR_TSK_TD_REPANTENNA","STR_TSK_TD_DESC_REPANTENNA",""] params ["_tskTitle","_tskDesc","_group"]; private ["_duration","_endTime","_targetName","_task","_size","_position","_vehicle","_unit","_antenna","_resourcesAAF"]; @@ -10,7 +10,7 @@ _endTime = [date select 0, date select 1, date select 2, date select 3, (date se _endTime = dateToNumber _endTime; _targetName = [_marker] call AS_fnc_localizar; -_task = ["REP",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_posAntenna,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; +_task = ["REP",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_tskTitle,_marker],_posAntenna,"CREATED",5,true,true,"Destroy"] call BIS_fnc_setTask; misiones pushBack _task; publicVariable "misiones"; waitUntil {sleep 1;(dateToNumber date > _endTime) OR (spawner getVariable _marker)}; @@ -37,7 +37,7 @@ if (spawner getVariable _marker) then { waitUntil {sleep 1;(dateToNumber date > _endTime) OR !(alive _vehicle)}; if !(alive _vehicle) then { - _task = ["REP",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _task = ["REP",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [2,0] remoteExec ["prestige",2]; [1200] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (_x distance _vehicle < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -47,7 +47,7 @@ if (spawner getVariable _marker) then { if (dateToNumber date > _endTime) then { if (_marker in mrkFIA) then { - _task = ["REP",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _task = ["REP",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"SUCCEEDED",5,true,true,"Destroy"] call BIS_fnc_setTask; [2,0] remoteExec ["prestige",2]; [1200] remoteExec ["AS_fnc_increaseAttackTimer",2]; {if (_x distance _vehicle < 500) then {[10,_x] call playerScoreAdd}} forEach (allPlayers - (entities "HeadlessClient_F")); @@ -58,7 +58,7 @@ if (dateToNumber date > _endTime) then { }; // BE module } else { - _task = ["REP",[side_blue,civilian],[format [_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; + _task = ["REP",[side_blue,civilian],[[_tskDesc,_targetName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4, A3_Str_INDEP],_tskTitle,_marker],_posAntenna,"FAILED",5,true,true,"Destroy"] call BIS_fnc_setTask; //[5,0,_posAntenna] remoteExec ["AS_fnc_changeCitySupport",2]; [-600] remoteExec ["AS_fnc_increaseAttackTimer",2]; [-10,Slowhand] call playerScoreAdd; @@ -84,7 +84,7 @@ if (dateToNumber date > _endTime) then { antenas = antenas - [_object]; antenasmuertas pushBack (getPos _object); deleteMarker _mrk; - [["TaskSucceeded", ["", localize "STR_TSK_RADIO_DESTROYED"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", localize "STR_TSK_TD_RADIO_DESTROYED"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }]; }; diff --git a/AntistasiOfficial.Altis/Missions/RES_Prisioneros.sqf b/AntistasiOfficial.Altis/Missions/RES_Prisioneros.sqf index 6bdcc5c7..6eb05e6a 100644 --- a/AntistasiOfficial.Altis/Missions/RES_Prisioneros.sqf +++ b/AntistasiOfficial.Altis/Missions/RES_Prisioneros.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; params ["_marker"]; -[localize "STR_TSK_RESPRISONERS",localize "STR_TSKDESC_RESPRISONERS",[],[]] params ["_taskTitle","_taskDesc","_POWs","_housePositions"]; +["STR_TSK_TD_RESPRISONERS","STR_TSK_TD_DESC_RESPRISONERS",[],[]] params ["_taskTitle","_taskDesc","_POWs","_housePositions"]; private ["_markerPos","_duration","_endTime","_houses","_house","_townName","_task","_groupPOW","_count","_unit","_blacklistbld","_options","_tempPos"]; @@ -12,7 +12,7 @@ _endTime = dateToNumber _endTime; _townName = [_marker] call AS_fnc_localizar; -_task = ["RES",[side_blue,civilian],[format [_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"CREATED",5,true,true,"run"] call BIS_fnc_setTask; +_task = ["RES",[side_blue,civilian],[[_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"CREATED",5,true,true,"run"] call BIS_fnc_setTask; misiones pushBack _task; publicVariable "misiones"; _blacklistbld = ["Land_Cargo_HQ_V1_F", "Land_Cargo_HQ_V2_F","Land_Cargo_HQ_V3_F","Land_Cargo_Tower_V1_F","Land_Cargo_Tower_V1_No1_F","Land_Cargo_Tower_V1_No2_F","Land_Cargo_Tower_V1_No3_F","Land_Cargo_Tower_V1_No4_F","Land_Cargo_Tower_V1_No5_F","Land_Cargo_Tower_V1_No6_F","Land_Cargo_Tower_V1_No7_F","Land_Cargo_Tower_V2_F","Land_Cargo_Patrol_V1_F","Land_Cargo_Patrol_V2_F","Land_Cargo_Patrol_V3_F"]; @@ -42,6 +42,7 @@ _groupPOW = createGroup side_blue; for "_i" from 0 to _count do { _unit = _groupPOW createUnit [guer_POW, (_housePositions select _i), [], 0, "NONE"]; + _unit setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for POW _unit allowDamage false; _unit setCaptive true; _unit disableAI "MOVE"; @@ -84,7 +85,7 @@ if (dateToNumber date > _endTime) then { waitUntil {sleep 1; ({alive _x} count _POWs == 0) OR ({(alive _x) AND (_x distance getMarkerPos guer_respawn < 50)} count _POWs > 0)}; if ({alive _x} count _POWs == 0) then { - _task = ["RES",[side_blue,civilian],[format [_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"FAILED",5,true,true,"run"] call BIS_fnc_setTask; + _task = ["RES",[side_blue,civilian],[[_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"FAILED",5,true,true,"run"] call BIS_fnc_setTask; {_x setCaptive false} forEach _POWs; _count = 2 * (count _POWs); [_count,0] remoteExec ["prestige",2]; @@ -92,7 +93,7 @@ if ({alive _x} count _POWs == 0) then { }; if ({(alive _x) AND (_x distance getMarkerPos guer_respawn < 50)} count _POWs > 0) then { - _task = ["RES",[side_blue,civilian],[format [_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"SUCCEEDED",5,true,true,"run"] call BIS_fnc_setTask; + _task = ["RES",[side_blue,civilian],[[_taskDesc,_townName,numberToDate [2035,_endTime] select 3,numberToDate [2035,_endTime] select 4],_taskTitle,_marker],_markerPos,"SUCCEEDED",5,true,true,"run"] call BIS_fnc_setTask; _count = {(alive _x) AND (_x distance getMarkerPos guer_respawn < 150)} count _POWs; [2*_count,100*_count] remoteExec ["resourcesFIA",2]; [0,10,_markerPos] remoteExec ["AS_fnc_changeCitySupport",2]; diff --git a/AntistasiOfficial.Altis/Missions/RES_Refugiados.sqf b/AntistasiOfficial.Altis/Missions/RES_Refugiados.sqf index fb4f4fad..288253d1 100644 --- a/AntistasiOfficial.Altis/Missions/RES_Refugiados.sqf +++ b/AntistasiOfficial.Altis/Missions/RES_Refugiados.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; params ["_marker"]; -[localize "STR_TSK_RESREFUGEES",localize "STR_TSKDESC_RESREFUGEES",[],[]] params ["_taskTitle","_taskDesc","_POWs","_housePositions"]; +["STR_TSK_TD_RESREFUGEES","STR_TSK_TD_DESC_RESREFUGEES",[],[]] params ["_taskTitle","_taskDesc","_POWs","_housePositions"]; private ["_markerPos","_size","_houses","_house","_townName","_task","_groupPOW","_count","_unit"]; @@ -18,7 +18,7 @@ while {count _housePositions < 5} do { }; -_task = ["RES",[side_blue,civilian],[format [_taskDesc,_townName, A3_Str_INDEP],_taskTitle,_marker],getPos _house,"CREATED",5,true,true,"run"] call BIS_fnc_setTask; +_task = ["RES",[side_blue,civilian],[[_taskDesc,_townName, A3_Str_INDEP],_taskTitle,_marker],getPos _house,"CREATED",5,true,true,"run"] call BIS_fnc_setTask; misiones pushBack _task; publicVariable "misiones"; _groupPOW = createGroup side_blue; @@ -27,6 +27,7 @@ _count = (count _housePositions) min 8; for "_i" from 1 to (_count - 1) do { _unit = _groupPOW createUnit [guer_POW, _housePositions select _i, [], 0, "NONE"]; + _unit setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for refugees _unit allowDamage false; _unit disableAI "MOVE"; _unit disableAI "AUTOTARGET"; @@ -61,13 +62,13 @@ sleep 30; waitUntil {sleep 1; ({alive _x} count _POWs == 0) OR ({(alive _x) AND (_x distance getMarkerPos guer_respawn < 50)} count _POWs > 0)}; if ({alive _x} count _POWs == 0) then { - _task = ["RES",[side_blue,civilian],[format [_taskDesc,_marker, A3_Str_INDEP],_taskTitle,_townName],getPos _house,"FAILED",5,true,true,"run"] call BIS_fnc_setTask; + _task = ["RES",[side_blue,civilian],[[_taskDesc,_marker, A3_Str_INDEP],_taskTitle,_townName],getPos _house,"FAILED",5,true,true,"run"] call BIS_fnc_setTask; _count = count _POWs; [_count,0] remoteExec ["prestige",2]; [0,-15,_markerPos] remoteExec ["AS_fnc_changeCitySupport",2]; [-10,Slowhand] call playerScoreAdd; } else { - _task = ["RES",[side_blue,civilian],[format [_taskDesc,_marker, A3_Str_INDEP],_taskTitle,_townName],getPos _house,"SUCCEEDED",5,true,true,"run"] call BIS_fnc_setTask; + _task = ["RES",[side_blue,civilian],[[_taskDesc,_marker, A3_Str_INDEP],_taskTitle,_townName],getPos _house,"SUCCEEDED",5,true,true,"run"] call BIS_fnc_setTask; _count = {(alive _x) and (_x distance getMarkerPos guer_respawn < 150)} count _POWs; [_count,_count*100] remoteExec ["resourcesFIA",2]; [0,_count,_marker] remoteExec ["AS_fnc_changeCitySupport",2]; diff --git a/AntistasiOfficial.Altis/Missions/ataqueHQ.sqf b/AntistasiOfficial.Altis/Missions/ataqueHQ.sqf index 7394b7c7..674f8299 100644 --- a/AntistasiOfficial.Altis/Missions/ataqueHQ.sqf +++ b/AntistasiOfficial.Altis/Missions/ataqueHQ.sqf @@ -1,7 +1,7 @@ if (!isServer and hasInterface) exitWith {}; -_tskTitle = localize "STR_TSK_HQATTACK"; -_tskDesc = localize "STR_TSKDESC_HQATTACK"; +_tskTitle = "STR_TSK_TD_HQATTACK"; +_tskDesc = "STR_TSK_TD_DESC_HQATTACK"; _posicion = getMarkerPos guer_respawn; diff --git a/AntistasiOfficial.Altis/Missions/missionrequest.sqf b/AntistasiOfficial.Altis/Missions/missionrequest.sqf index 7831e6c4..4fcd1bd7 100644 --- a/AntistasiOfficial.Altis/Missions/missionrequest.sqf +++ b/AntistasiOfficial.Altis/Missions/missionrequest.sqf @@ -6,10 +6,11 @@ params [["_type","LOG"],["_muted",false],["_manual",false]]; [getMarkerPos guer_respawn,[],[],false] params ["_positionHQ","_options","_zones"]; private ["_currentZone","_markerPos","_nearestZone","_gearCount","_threshold","_base","_data","_prestigeOPFOR","_prestigeBLUFOR"]; +_prestigeCSAT = server getVariable ["prestigeCSAT",0]; if (_type in misiones) exitWith { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_TYPE_ACTIVE"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_TYPE_ACTIVE"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; }; @@ -38,8 +39,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_DES_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_DES_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_DES_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_DES_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -85,8 +86,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_LOG_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_LOG_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_LOG_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_LOG_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -127,8 +128,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_RES_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_RES_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_RES_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_RES_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -156,8 +157,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_FND_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_FND_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_FND_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_FND_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -185,8 +186,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_FND_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_FND_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_FND_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_FND_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -214,8 +215,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_FNDE_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_FNDE_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_FNDE_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_FNDE_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -238,8 +239,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_CVY_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_CVY_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_CVY_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_CVY_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -262,12 +263,12 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_ASS_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_ASS_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_ASS_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_ASS_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; - [_currentZone, "civ"] remoteExec [(["ASS_Traidor","AS_forest"] select (_currentZone in puestos)), call AS_fnc_getNextWorker]; + if((random 100 < _prestigeCSAT) and (_prestigeCSAT > 21)) then {[_currentZone, "civ"] remoteExec [(["ASS_Traidor","AS_forest"] select (_currentZone in puestos)), call AS_fnc_getNextWorker];} else {} }; }; @@ -320,8 +321,8 @@ call { if (_options isEqualTo []) then { if (!_muted) then { - [petros,"globalChat",localize "STR_HINTS_MIS_PR_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; - [petros,"hint",localize "STR_HINTS_MIS_PR_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_PR_NO_CHAT"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locHint","STR_HINTS_MIS_PR_NO_HINT"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; } else { _currentZone = selectRandom _options; @@ -332,5 +333,5 @@ call { }; if ((count _options > 0) AND (!_muted)) then { - [petros,"globalChat",localize "STR_HINTS_MIS_GIVEN"] remoteExec ["commsMP",[0,-2] select isDedicated]; + [petros,"locGlobalChat","STR_HINTS_MIS_GIVEN"] remoteExec ["commsMP",[0,-2] select isDedicated]; }; diff --git a/AntistasiOfficial.Altis/Municion/NATOCrate.sqf b/AntistasiOfficial.Altis/Municion/NATOCrate.sqf index ded964a5..bdf24d54 100644 --- a/AntistasiOfficial.Altis/Municion/NATOCrate.sqf +++ b/AntistasiOfficial.Altis/Municion/NATOCrate.sqf @@ -5,10 +5,7 @@ private ["_crate","_NATOSupp"]; _crate = _this select 0; _NATOSupp = _this select 1; -clearMagazineCargoGlobal _crate; -clearWeaponCargoGlobal _crate; -clearItemCargoGlobal _crate; -clearBackpackCargoGlobal _crate; +[_crate] call emptyCrate; //Standard Equipment (good for 5 people) // Weapon @@ -20,7 +17,7 @@ clearBackpackCargoGlobal _crate; _crate addWeaponCargoGlobal [bluATMissile select 0, 5 ]; _crate addItemCargoGlobal ["SmokeShellRed" , 25 ]; _crate addItemCargoGlobal ["SmokeShellGreen" , 25 ]; - _crate addItemCargoGlobal [bluAttachments select 0, 5 ]; //flashlight + _crate addItemCargoGlobal [bluAttachments select 0, 6 ]; //flashlight {_crate addItemCargoGlobal [_x , 20 ]; //Shells: Smoke and Flares Green and Red } foreach bluGLsmoke; @@ -43,7 +40,7 @@ clearBackpackCargoGlobal _crate; _crate addItemCargoGlobal ["ToolKit" , 1 ]; _crate addItemCargoGlobal ["MineDetector" , 1 ]; if (activeTFAR) then { - _crate addBackpackCargoGlobal [lrRadio , 5 ]; + _crate addBackpackCargoGlobal [lrRadio , 3 ]; }; // From Tier 1 @@ -78,6 +75,8 @@ clearBackpackCargoGlobal _crate; _crate addItemCargoGlobal [bluScopes select 1, 5 ]; _crate addMagazineCargoGlobal [bluLMGAmmo select 0, 40 ]; _crate addMagazineCargoGlobal [selectrandom bluRifleAmmo , 50 ]; // Extra ammo bonus + if (activeACE) then { + _crate addItemCargoGlobal [blunvg select 0, 5 ];}; } else { if (BE_currentStage == 2) then { @@ -95,6 +94,8 @@ clearBackpackCargoGlobal _crate; _crate addItemCargoGlobal [bluScopes select 1, 5 ]; _crate addMagazineCargoGlobal [bluLMGAmmo select 0, 20 ]; _crate addMagazineCargoGlobal [selectrandom bluRifleAmmo , 25 ]; // Extra ammo + if (activeACE) then { + _crate addItemCargoGlobal [blunvg select 0, 2 ];}; } else { if (BE_currentStage == 1) then { @@ -110,6 +111,8 @@ clearBackpackCargoGlobal _crate; _crate addWeaponCargoGlobal [bluLMG select 0, 2 ]; // LMG _crate addItemCargoGlobal [bluScopes select 1, 2 ]; _crate addMagazineCargoGlobal [bluLMGAmmo select 0, 8 ]; + if (activeACE) then { + _crate addItemCargoGlobal [blunvg select 0, 1 ];}; }; }; }; diff --git a/AntistasiOfficial.Altis/Municion/cajaAAF.sqf b/AntistasiOfficial.Altis/Municion/cajaAAF.sqf index 39e09738..a6a2f86d 100644 --- a/AntistasiOfficial.Altis/Municion/cajaAAF.sqf +++ b/AntistasiOfficial.Altis/Municion/cajaAAF.sqf @@ -1,13 +1,12 @@ if (!isServer and hasInterface) exitWith {}; -params ["_crate", "_AAFcrate", "_FIAcrate", "_weaponList", "_magList", "_itemList", "_opticsList", "_mineList", "_typeInt", "_classInt", "_item", "_mags", "_rlist"]; +params ["_crate", "_AAFcrate","_weaponList", "_magList", "_itemList", "_opticsList", "_mineList", "_typeInt", "_classInt", "_item", "_mags", "_rlist"]; private ["_cosa","_num","_magazines"]; [_crate] call emptyCrate; _AAFcrate = "I_supplyCrate_F"; -_FIAcrate = "IG_supplyCrate_F"; _weaponList = genWeapons - unlockedWeapons; _magList = genAmmo - unlockedMagazines; _itemList = genItems - unlockedItems; @@ -135,7 +134,7 @@ _fnc_gear = { call { - if ((typeOf _crate == _AAFcrate) or (typeOf _crate == _FIAcrate)) exitWith { + if ((typeOf _crate == _AAFcrate) or ( _crate isEqualTo caja)) exitWith { ["weapon", 4, 4, 3] call _fnc_gear; ["magazine", 5, 10] call _fnc_gear; ["item", 5, 5] call _fnc_gear; @@ -160,11 +159,19 @@ call { }; if (typeOf _crate == campCrate) exitWith { - for "_i" from 0 to 2 do { - _item = selectRandom unlockedWeapons; - _crate addWeaponCargoGlobal [_item, 5]; - _crate addMagazineCargoGlobal [getArray (configFile / "CfgWeapons" / _item / "magazines") select 0, 30]; - }; + if (activeAFRF) then { + _crate addWeaponCargoGlobal ["rhs_weap_Izh18" , random 10 ]; + _crate addMagazineCargoGlobal ["rhsgref_1Rnd_Slug" , random 100 ]; + _crate addWeaponCargoGlobal ["rhs_weap_savz58v" , random 3 ]; + _crate addMagazineCargoGlobal ["rhs_30Rnd_762x39mm_Savz58" , random 20 ]; + _crate additemCargoGlobal ["SmokeShellYellow" , random 10 ]; + _crate additemCargoGlobal ["Chemlight_blue" , random 20 ]; + } else { + _crate addWeaponCargoGlobal ["SMG_01_F" , random 10 ]; + _crate addMagazineCargoGlobal ["30Rnd_45ACP_Mag_SMG_01" , random 10 ]; + _crate additemCargoGlobal ["SmokeShellYellow" , random 10 ]; + _crate additemCargoGlobal ["Chemlight_blue" , random 20 ]; + }; _rlist = genATLaunchers arrayIntersect unlockedWeapons; if (count _rlist > 0) then { @@ -196,7 +203,7 @@ call { }; if (activeTFAR) then { - if (typeOf _crate == _FIAcrate) then { + if (_crate isEqualTo caja) then { _crate addBackpackCargoGlobal [lrRadio,2]; } else { if (4 < random 5) then { @@ -208,7 +215,6 @@ if (activeTFAR) then { _crate addBackpackCargoGlobal ["B_Carryall_oli", 1]; //Add the action to load the crate with Jeroen's loading script. Sparker. -if(!(_crate isEqualTo caja)) then -{ +if(!(_crate isEqualTo caja)) then { _crate call jn_fnc_logistics_addAction; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Municion/emptyCrate.sqf b/AntistasiOfficial.Altis/Municion/emptyCrate.sqf index dbaf1c3d..20cb039e 100644 --- a/AntistasiOfficial.Altis/Municion/emptyCrate.sqf +++ b/AntistasiOfficial.Altis/Municion/emptyCrate.sqf @@ -1,7 +1,4 @@ -if (!isServer and hasInterface) exitWith {}; - params ["_crate"]; - clearMagazineCargoGlobal _crate; clearWeaponCargoGlobal _crate; clearItemCargoGlobal _crate; diff --git a/AntistasiOfficial.Altis/Municion/randomRifle.sqf b/AntistasiOfficial.Altis/Municion/randomRifle.sqf index 82001c16..e1871f82 100644 --- a/AntistasiOfficial.Altis/Municion/randomRifle.sqf +++ b/AntistasiOfficial.Altis/Municion/randomRifle.sqf @@ -21,6 +21,7 @@ if (_changeHelmet) then { if (activeBE) then { _result = ["outfit"] call fnc_BE_getCurrentValue; if (random 100 > _result) then { + removeUniform _unit; _unit forceAddUniform (selectRandom civUniforms); _unit addItemToUniform "FirstAidKit"; _unit addMagazine [guer_gear_grenHE, 1]; @@ -30,6 +31,7 @@ if (_changeHelmet) then { // BE module else { if (random 10 > _skillFIA) then { + removeUniform _unit; _unit forceAddUniform (selectRandom civUniforms); _unit addItemToUniform "FirstAidKit"; _unit addMagazine [guer_gear_grenHE, 1]; diff --git a/AntistasiOfficial.Altis/NATOdialog.sqf b/AntistasiOfficial.Altis/NATOdialog.sqf index 77236718..9b85d206 100644 --- a/AntistasiOfficial.Altis/NATOdialog.sqf +++ b/AntistasiOfficial.Altis/NATOdialog.sqf @@ -1,9 +1,9 @@ -//if (player != Slowhand) exitWith {hint "Only Commander can ask for NATO support"}; +//if (player != Slowhand) exitWith {hint localize "STR_HINTS_NATOD_OCCAFNATOS"}; _tipo = _this select 0; -if (!allowPlayerRecruit) exitWith {hint "Server is very loaded. \nWait one minute or change FPS settings in order to fulfill this request"}; -if (_tipo in misiones) exitWith {hint "NATO is already busy with this kind of mission"}; -if (!([player] call hasRadio)) exitWith {hint "You need a radio in your inventory to be able to give orders to other squads"}; +if (!allowPlayerRecruit) exitWith {hint localize "STR_HINTS_NATOD_SIVLWOMOCFPS"}; +if (_tipo in misiones) exitWith {hint localize "STR_HINTS_NATOD_NATOIABWTKOM"}; +if (!([player] call hasRadio)) exitWith {hint localize "STR_HINTS_NATOD_YNARIYITBATGOTOS"}; // check if FIA controls a radio tower // /begin @@ -30,7 +30,7 @@ if (_c < 1) exitWith { _bases = bases - mrkAAF; _aeropuertos = aeropuertos - mrkAAF; -if (((_tipo == "NATOArty") or (_tipo == "NATOArmor") or (_tipo == "NATORoadblock")) and (count _bases == 0)) exitWith {hint "You need to conquer at least one base to perform this action"}; +if (((_tipo == "NATOArty") or (_tipo == "NATOArmor") or (_tipo == "NATORoadblock")) and (count _bases == 0)) exitWith {hint localize "STR_HINTS_NATOD_YNYCALOBTPTA"}; _costeNATO = 5; _textoHint = ""; @@ -38,41 +38,41 @@ _textoHint = ""; switch (_tipo) do { case "NATOCA": { _costeNATO = 20; - _textohint = "Click on the base or airport you want NATO to attack"; + _textohint = localize "STR_HINTS_NATOD_COTBOAYWNATOTA"; }; case "NATOArmor": { _costeNATO = 20; - _textohint = "Click on the base from which you want NATO to attack"; + _textohint = localize "STR_HINTS_NATOD_COTBFWYWNATOTOTA"; }; case "NATOAmmo": { _costeNATO = 5; - _textohint = "Click on the spot where you want the Ammodrop"; + _textohint = localize "STR_HINTS_NATOD_COTSWYWTA"; }; case "NATOArty": { _costeNATO = 10; - _textohint = "Click on the base from which you want Artillery Support"; + _textohint = localize "STR_HINTS_NATOD_COTBFWYWAS"; }; case "NATOCAS": { _costeNATO = 10; - _textohint = "Click on the airport from which you want NATO to attack"; + _textohint = localize "STR_HINTS_NATOD_COTAFWYWNATOTA"; }; case "NATORoadblock": { _costeNATO = 10; - _textohint = "Click on the spot where you want NATO to setup a roadblock"; + _textohint = localize "STR_HINTS_NATOD_COTSWYWNATOTSAR"; }; case "NATOQRF": { _costeNATO = 10; - _textohint = "Click on the base or airport/carrier from which you want NATO to dispatch a QRF"; + _textohint = localize "STR_HINTS_NATOD_COTBOACFWYWNATOTDAQRF"; }; case "NATORED": { //Stef 30-08 adding a way to reduce CSATprestige by spending NATO _costeNATO = 100; - _textohint = "You informed about supporting enemy faction emplacement, its destruction will reduce their concern about the island"; + _textohint = localize "STR_HINTS_NATOD_YIASEFEIDWRTCATI"; }; }; _NATOSupp = server getVariable "prestigeNATO"; -if (_NATOSupp < _costeNATO) exitWith {hint format ["We lack of enough NATO Support in order to proceed with this request (%1 needed)",_costeNATO]}; +if (_NATOSupp < _costeNATO) exitWith {hint format [localize "STR_HINTS_NATOD_WLOENATOSIOTPWTR",_costeNATO]}; if (_tipo == "NATOCAS") exitWith {[] remoteExec [_tipo, call AS_fnc_getNextWorker]}; if (_tipo == "NATOUAV") exitWith {[] remoteExec [_tipo, call AS_fnc_getNextWorker]}; @@ -105,7 +105,7 @@ _loc = "spawnNATO"; // roadblocks, only allowed on roads if (_tipo == "NATORoadblock") exitWith { _check = isOnRoad _posicionTel; - if !(_check) exitWith {hint "Roadblocks can only be placed on roads."}; + if !(_check) exitWith {hint localize "STR_HINTS_NATOD_RBCOBPOR"}; [_posicionTel] remoteExec [_tipo, call AS_fnc_getNextWorker]; }; @@ -121,7 +121,7 @@ if (_tipo == "NATOQRF") exitWith { }; posicionTel = []; - hint format ["QRF departing from %1. Mark the target for the QRF.",_sitioName]; + hint format [localize "STR_HINTS_NATOD_QRFDF1MTTFTQRF",_sitioName]; openMap true; onMapSingleClick "posicionTel = _pos;"; @@ -134,26 +134,26 @@ if (_tipo == "NATOQRF") exitWith { _destino =+ posicionTel; openMap false; - if (surfaceIsWater _destino) exitWith {hint "No LCS available this decade, QRF is restricted to land."}; - hint "QRF inbound."; + if (surfaceIsWater _destino) exitWith {hint localize "STR_HINTS_NATOD_NLCSATDQRFIRTL"}; + hint localize "STR_HINTS_NATOD_QRFI"; [_loc,_destino] remoteExec ["NATOQRF", call AS_fnc_getNextWorker]; }; -if (_posicionTel distance getMarkerPos _sitio > 50) exitWith {hint "You must click near a map marker"}; +if (_posicionTel distance getMarkerPos _sitio > 50) exitWith {hint localize "STR_HINTS_NATOD_YMCNAMM"}; if (_tipo == "NATOArty") exitWith { - if (not(_sitio in _bases)) exitWith {hint "Artillery support can only be obtained from bases."}; + if (not(_sitio in _bases)) exitWith {hint localize "STR_HINTS_NATOD_ASCOBOFB"}; [_sitio] remoteExec ["NATOArty", call AS_fnc_getNextWorker]; }; if (_tipo == "NATOArmor") then { if (not(_sitio in _bases)) then { _salir = true; - hint "You must click near a friendly base"; + hint localize "STR_HINTS_NATOD_YMCNAFB"; } else { posicionTel = []; - hint "Click on the Armored Column destination"; + hint localize "STR_HINTS_NATOD_COTACD"; openMap true; onMapSingleClick "posicionTel = _pos;"; @@ -167,7 +167,7 @@ if (_tipo == "NATOArmor") then { openMap false; _destino = [markers, _posicionTel] call BIS_Fnc_nearestPosition; if (_posicionTel distance getMarkerPos _destino > 50) then { - hint "You must click near a map marker"; + hint localize "STR_HINTS_NATOD_YMCNAMM"; _salir = true } else { @@ -177,8 +177,8 @@ if (_tipo == "NATOArmor") then { }; if (_tipo == "NATOCA") then { - if ((_sitio in ciudades) or (_sitio in controles) or (_sitio in colinas)) then {_salir = true; hint "NATO won't attack this kind of zone."}; - if (_sitio in mrkFIA) then {_salir = true; hint "NATO Attacks may be only ordered on AAF controlled zones"}; + if ((_sitio in ciudades) or (_sitio in controles) or (_sitio in colinas)) then {_salir = true; hint localize "STR_HINTS_NATOD_NATOWATKOZ"}; + if (_sitio in mrkFIA) then {_salir = true; hint localize "STR_HINTS_NATOD_NATOAMBOOOAAFCZ"}; }; if (_salir) exitWith {}; diff --git a/AntistasiOfficial.Altis/REINF/NATOArty.sqf b/AntistasiOfficial.Altis/REINF/NATOArty.sqf index e17272bb..415e539f 100644 --- a/AntistasiOfficial.Altis/REINF/NATOArty.sqf +++ b/AntistasiOfficial.Altis/REINF/NATOArty.sqf @@ -15,7 +15,7 @@ _fechalimnum = dateToNumber _fechalim; _nombredest = [_marcador] call AS_fnc_localizar; -_tsk = ["NATOArty",[west,civilian],[format ["We have %4 Artillery support from %1. They will be under our command until %2:%3.",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 Artillery", A3_Str_BLUE],_marcador],_posicion,"CREATED",5,true,true,"target"] call BIS_fnc_setTask; +_tsk = ["NATOArty",[west,civilian],[["STR_TSK_ARTY_DESC",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["STR_TSK_ARTY_TITLE", A3_Str_BLUE],_marcador],_posicion,"CREATED",5,true,true,"target"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _size = [_marcador] call sizeMarker; @@ -61,7 +61,7 @@ if ({alive _x} count _vehiculos == 0) then { [-5,0] remoteExec ["prestige",2]; - _tsk = ["NATOArty",[west,civilian],[format ["We have %4 Artillery support from %1. They will be under our command until %2:%3.",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 Artillery", A3_Str_BLUE],_marcador],_posicion,"FAILED",5,true,true,"target"] call BIS_fnc_setTask; + _tsk = ["NATOArty",[west,civilian],[["STR_TSK_ARTY_DESC",_nombredest,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["STR_TSK_ARTY_TITLE", A3_Str_BLUE],_marcador],_posicion,"FAILED",5,true,true,"target"] call BIS_fnc_setTask; }; //[_tsk,true] call BIS_fnc_deleteTask; diff --git a/AntistasiOfficial.Altis/REINF/NATOCAS.sqf b/AntistasiOfficial.Altis/REINF/NATOCAS.sqf index e6c55288..b9cfb51a 100644 --- a/AntistasiOfficial.Altis/REINF/NATOCAS.sqf +++ b/AntistasiOfficial.Altis/REINF/NATOCAS.sqf @@ -15,7 +15,7 @@ _fechalimnum = dateToNumber _fechalim; _nombreorig = format ["the %1 Carrier", A3_Str_BLUE]; if (_origen!= "spawnNATO") then {_nombreorig = [_origen] call AS_fnc_localizar}; -_tsk = ["NATOCAS",[side_blue,civilian],[format ["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 CAS", A3_Str_BLUE],_origen],_orig,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; +_tsk = ["NATOCAS",[side_blue,civilian],[["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["%1 CAS", A3_Str_BLUE],_origen],_orig,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _tipoVeh = bluHeliArmed; @@ -60,11 +60,11 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or ({alive _x} count _veh if (dateToNumber date > _fechalimnum) then { - [["TaskSucceeded", ["", format ["%1 CAS finished", A3_Str_BLUE]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", format ["%1 CAS finished", A3_Str_BLUE]]] call BIS_fnc_showNotification} remoteExec ["call", 0]; } else { - _tsk = ["NATOCAS",[side_blue,civilian],[format ["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 CAS", A3_Str_BLUE],_origen],_orig,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; + _tsk = ["NATOCAS",[side_blue,civilian],[["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["%1 CAS", A3_Str_BLUE],_origen],_orig,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; [-5,0] remoteExec ["prestige",2]; }; diff --git a/AntistasiOfficial.Altis/REINF/NATORoadblock.sqf b/AntistasiOfficial.Altis/REINF/NATORoadblock.sqf index b05c3e54..9d6cf691 100644 --- a/AntistasiOfficial.Altis/REINF/NATORoadblock.sqf +++ b/AntistasiOfficial.Altis/REINF/NATORoadblock.sqf @@ -20,7 +20,7 @@ _fechalimnum = dateToNumber _fechalim; _nombreorig = [_origen] call AS_fnc_localizar; -_texto = "NATO Roadblock"; +_texto = "STR_GL_NATORB"; _tipoGrupo = [bluATTeam, side_blue] call AS_fnc_pickGroup; _tipoVeh = bluAPC select 0; @@ -29,7 +29,7 @@ _mrk = createMarker [format ["NATOPost%1", random 1000], _posicionTel]; _mrk setMarkerShape "ICON"; -_tsk = ["NATORoadblock",[side_blue,civilian],[format ["%1 is dispatching a team to establish a Roadblock. Send and cover the team until reaches its destination.", A3_Str_BLUE],format ["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; +_tsk = ["NATORoadblock",[side_blue,civilian],[["%1 is dispatching a team to establish a Roadblock. Send and cover the team until reaches its destination.", A3_Str_BLUE],["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; misiones pushBackUnique _tsk; publicVariable "misiones"; _grupo = [_orig, side_blue, _tipoGrupo] call BIS_Fnc_spawnGroup; _grupo setGroupId ["Watch"]; @@ -80,11 +80,11 @@ if ({(alive _x) and (_x distance _posicionTel < 10)} count units _grupo > 0) the puestosNATO = puestosNATO + [_mrk]; publicVariable "puestosNATO"; markers = markers + [_mrk]; publicVariable "markers"; spawner setVariable [_mrk,false,true]; - _tsk = ["NATORoadblock",[side_blue,civilian],[format ["%3 successfully deployed a roadblock, They will hold their position until %1:%2.",numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["NATORoadblock",[side_blue,civilian],[["%3 successfully deployed a roadblock, They will hold their position until %1:%2.",numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; _mrk setMarkerType "flag_Spain"; //_mrk setMarkerColor "ColorBlue"; - _mrk setMarkerText _texto; + _mrk setMarkerText localize _texto; waitUntil {sleep 60; (dateToNumber date > _fechalimnum)}; @@ -96,7 +96,7 @@ if ({(alive _x) and (_x distance _posicionTel < 10)} count units _grupo > 0) the [0,_tsk] spawn borrarTask; } else { - _tsk = ["NATORoadblock",[side_blue,civilian],[format ["%1 is dispatching a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination.", A3_Str_BLUE],format ["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["NATORoadblock",[side_blue,civilian],[["%1 is dispatching a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination.", A3_Str_BLUE],["%1 Roadblock Deployment", A3_Str_BLUE],_mrk],_posicionTel,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; sleep 3; deleteMarker _mrk; diff --git a/AntistasiOfficial.Altis/REINF/NATOUAV.sqf b/AntistasiOfficial.Altis/REINF/NATOUAV.sqf index d4a949f4..f60cd6f7 100644 --- a/AntistasiOfficial.Altis/REINF/NATOUAV.sqf +++ b/AntistasiOfficial.Altis/REINF/NATOUAV.sqf @@ -15,7 +15,7 @@ _fechalimnum = dateToNumber _fechalim; _nombreorig = format ["the %1 Carrier", A3_Str_BLUE]; if (_origen!= "spawnNATO") then {_nombreorig = [_origen] call AS_fnc_localizar}; -_tsk = ["NATOUAV",[side_blue,civilian],[format ["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 UAV", A3_Str_BLUE],_origen],_orig,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; +_tsk = ["NATOUAV",[side_blue,civilian],[["STR_TSK_UAV_DESC",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["STR_TSK_UAV_TITLE", A3_Str_BLUE],_origen],_orig,"CREATED",5,true,true,"Attack"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _soldados = []; @@ -24,7 +24,7 @@ _vehiculos = []; _grupoHeli = createGroup side_blue; _grupoHeli setVariable ["esNATO",true,true]; _grupoHeli setGroupId ["UAV"]; -hint format ["%1 UAV will be available on HC module in a few seconds.", A3_Str_BLUE]; +hint format [localize "STR_TSK_NUAV_UAVWBAOHC", A3_Str_BLUE]; for "_i" from 1 to 1 do { @@ -47,11 +47,11 @@ waitUntil {sleep 1; (dateToNumber date > _fechalimnum) or ({alive _x} count _veh if (dateToNumber date > _fechalimnum) then { - [["TaskSucceeded", ["", format ["%1 UAV finished", A3_Str_BLUE]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", format [localize "STR_NTS_UAV_FIN", A3_Str_BLUE]]] call BIS_fnc_showNotification} remoteExec ["call", 0]; } else { - _tsk = ["NATOUAV",[side_blue,civilian],[format ["%4 is providing Air support from %1. They will be under our command until %2:%3.",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],format ["%1 UAV", A3_Str_BLUE],_origen],_orig,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; + _tsk = ["NATOUAV",[side_blue,civilian],[["STR_TSK_UAV_DESC",_nombreorig,numberToDate [2035,_fechalimnum] select 3,numberToDate [2035,_fechalimnum] select 4, A3_Str_BLUE],["STR_TSK_UAV_TITLE", A3_Str_BLUE],_origen],_orig,"FAILED",5,true,true,"Attack"] call BIS_fnc_setTask; [-5,0] remoteExec ["prestige",2]; }; diff --git a/AntistasiOfficial.Altis/REINF/addFIAsquadHC.sqf b/AntistasiOfficial.Altis/REINF/addFIAsquadHC.sqf index 1977d01a..013d501a 100644 --- a/AntistasiOfficial.Altis/REINF/addFIAsquadHC.sqf +++ b/AntistasiOfficial.Altis/REINF/addFIAsquadHC.sqf @@ -14,6 +14,9 @@ private ["_hr","_resourcesFIA","_spawnData","_roadPos","_direction","_spawnPos", if (_check) exitWith {Hint "You cannot Recruit Squads with enemies near your HQ"}; +_spawnData = [(getMarkerPos guer_respawn), [ciudades, (getMarkerPos guer_respawn)] call BIS_fnc_nearestPosition] call AS_fnc_findRoadspot; +if(_spawnData isequalto []) exitwith {hint localize "STR_HINTS_COMMANDER_HQRECRUITFAR"; comandante globalChat localize "STR_HINTS_COMMANDER_HQRECRUITFAR";}; + _hr = server getVariable ["hr",0]; _resourcesFIA = server getVariable ["resourcesFIA",0]; @@ -41,7 +44,7 @@ if (_resourcesFIA < _cost) exitWith {hint format ["You do not have enough money [-_costHR, -_cost] remoteExec ["resourcesFIA",2]; -_spawnData = [(getMarkerPos guer_respawn), [ciudades, (getMarkerPos guer_respawn)] call BIS_fnc_nearestPosition] call AS_fnc_findRoadspot; + _roadPos = _spawnData select 0; _direction = _spawnData select 1; @@ -80,10 +83,15 @@ if (_isInfantry) then { if ((activeGREF) AND (_groupCategory isEqualTo guer_stat_AT)) exitWith { _spawnPos = _roadPos findEmptyPosition [1,50,guer_veh_technical_AT]; - _vehicleData = [_spawnPos,_direction,guer_veh_technical_AT,side_blue] call bis_fnc_spawnvehicle; - _vehicle = _vehicleData select 0; - _group = _vehicleData select 2; - _group setVariable ["staticAutoT",false,true]; + _vehicle = guer_veh_technical_AT createVehicle _spawnpos; + _vehicle setDir _direction; + _group = createGroup side_blue; + _unit = _group createUnit [guer_sol_UN, _roadPos, [],0,"NONE"]; + _unit assignAsDriver _vehicle; + _unit moveInDriver _vehicle; + _unit = _group createUnit [guer_sol_UN, _roadPos, [],0,"NONE"]; + _unit moveInGunner _vehicle; + _unit assignAsGunner _vehicle; _group setGroupId [format ["M.AT-%1",{side (leader _x) == side_blue} count allGroups]]; }; @@ -118,6 +126,8 @@ if (_isInfantry) then { }; {[_x] call AS_fnc_initialiseFIAUnit} forEach units _group; +{_x setvariable ["generated",true,true]} forEach units _group; + leader _group setBehaviour "SAFE"; Slowhand hcSetGroup [_group]; _group setVariable ["isHCgroup", true, true]; diff --git a/AntistasiOfficial.Altis/REINF/addFIAveh.sqf b/AntistasiOfficial.Altis/REINF/addFIAveh.sqf index f0cd50b6..85e63262 100644 --- a/AntistasiOfficial.Altis/REINF/addFIAveh.sqf +++ b/AntistasiOfficial.Altis/REINF/addFIAveh.sqf @@ -31,6 +31,11 @@ if (_resourcesFIA < _coste) exitWith {hint format ["You do not have enough money _pos = position player findEmptyPosition [10,50,_tipoVeh]; if (count _pos == 0) exitWith {hint "Not enough space to place this type of vehicle"}; _veh = _tipoVeh createVehicle _pos; +//If it's a quadbike, make it loadable with logistics script +if (_tipoVeh == (vfs select 3)) then +{ + _veh call jn_fnc_logistics_addAction; +}; if (!isMultiplayer) then { [0,(-1* _coste)] remoteExec ["resourcesFIA", 2]; diff --git a/AntistasiOfficial.Altis/REINF/addToGarrison.sqf b/AntistasiOfficial.Altis/REINF/addToGarrison.sqf new file mode 100644 index 00000000..9727da15 --- /dev/null +++ b/AntistasiOfficial.Altis/REINF/addToGarrison.sqf @@ -0,0 +1,156 @@ +private ["_posicionTel","_cercano","_cosa","_grupo","_unidades","_salir"]; +openMap true; +posicionTel = []; +_cosa = _this select 0; + +onMapSingleClick "posicionTel = _pos"; + +hint "Select the zone on which sending the selected troops as garrison"; + +waitUntil {sleep 0.5; (count posicionTel > 0) or (not visiblemap)}; +onMapSingleClick ""; + +if (!visibleMap) exitWith {}; + +_posicionTel = posicionTel; + +_cercano = [markers,_posicionTel] call BIS_fnc_nearestPosition; + +if !(_posicionTel inArea _cercano) exitWith {hint "You must click near a marked zone"}; + +if (not(_cercano in mrkFIA)) exitWith {hint "That zone does not belong to Syndikat"}; + +if ((_cercano in puestosFIA) and !(isOnRoad getMarkerPos _cercano)) exitWith {hint "You cannot manage garrisons on this kind of zone"}; + +_cosa = _this select 0; + +_grupo = grpNull; +_unidades = objNull; + +if ((_cosa select 0) isEqualType grpNull) then + { + _grupo = _cosa select 0; + _unidades = units _grupo; + } +else + { + _unidades = _cosa; + }; + +_salir = false; + +{ +if ((typeOf _x == guer_POW) or (typeOf _x in CIV_units) or (!alive _x)) exitWith {_salir = true} +} forEach _unidades; + +if (_salir) exitWith {hint "Static crewman, prisoners, refugees or dead units cannot be added to any garrison"}; + +if ((groupID _grupo == "MineSw") or (groupID _grupo == "Watch") or (isPlayer(leader _grupo))) exitWith {hint "You cannot garrison player led, Watchpost, Roadblocks or Minefield building squads"}; + + +if (isNull _grupo) then + { + _grupo = createGroup side_blue; + _unidades joinSilent _grupo; + hint "Adding units to garrison"; + {arrayids pushBackUnique (name _x)} forEach _unidades; + } +else + { + hint format ["Adding %1 squad to garrison", groupID _grupo]; + }; + +_garrison = []; +_garrison = _garrison + (garrison getVariable [_cercano,[]]); +{_garrison pushBack (typeOf _x)} forEach _unidades; +garrison setVariable [_cercano,_garrison,true]; +[_cercano] call AS_fnc_markerUpdate; + +_noBorrar = false; + +if (spawner getVariable _cercano) then + { + {deleteWaypoint _x} forEach waypoints _grupo; + _wp = _grupo addWaypoint [(getMarkerPos _cercano), 0]; + _wp setWaypointType "MOVE"; + { + _x setVariable ["marcador",_cercano,true]; + _x addEventHandler ["killed", + { + _muerto = _this select 0; + _marcador = _muerto getVariable "marcador"; + if (!isNil "_marcador") then + { + if (_marcador in mrkFIA) then + { + _garrison = []; + _garrison = _garrison + (garrison getVariable [_marcador,[]]); + if (_garrison isEqualType []) then + { + for "_i" from 0 to (count _garrison -1) do + { + if (typeOf _muerto == (_garrison select _i)) exitWith {_garrison deleteAt _i}; + }; + garrison setVariable [_marcador,_garrison,true]; + }; + [_marcador] call AS_fnc_markerUpdate; + _muerto setVariable [_marcador,nil,true]; + }; + }; + }]; + } forEach _unidades; + + waitUntil {sleep 1; (!(spawner getVariable _cercano) or !(_cercano in mrkFIA))}; + if (!(_cercano in mrkFIA)) then {_noBorrar = true}; + }; + +if (!_noBorrar) then + { + { + if (alive _x) then + { + deleteVehicle _x + }; + } forEach _unidades; + deleteGroup _grupo; + } +else + { + //añadir el grupo al HC y quitarles variables + { + if (alive _x) then + { + _x setVariable ["marcador",nil,true]; + _x removeAllEventHandlers "killed"; + _x addEventHandler ["killed", { + _muerto = _this select 0; + _killer = _this select 1; + [_muerto] remoteExec ["postmortem",2]; + if ((isPlayer _killer) and (side _killer == side_blue)) then + { + if (!isMultiPlayer) then + { + _nul = [0,20] remoteExec ["resourcesFIA",2]; + _killer addRating 1000; + }; + }; /* Stef, will do later + else + { + if (side _killer == side_green) then + { + _nul = [0.25,0,getPos _muerto] remoteExec ["citySupportChange",2]; + [-0.25,0] remoteExec ["prestige",2]; + } + else + { + if (side _killer == muyMalos) then {[0,-0.25] remoteExec ["prestige",2]}; + }; + };*/ + _muerto setVariable ["BLUFORSpawn",nil,true]; + }]; + }; + } forEach _unidades; + Slowhand hcSetGroup [_grupo]; + hint format ["Group %1 is back to HC control because the zone which was pointed to garrison has been lost",groupID _grupo]; + }; + diff --git a/AntistasiOfficial.Altis/REINF/buildMinefield.sqf b/AntistasiOfficial.Altis/REINF/buildMinefield.sqf index 7262eda5..93076b6f 100644 --- a/AntistasiOfficial.Altis/REINF/buildMinefield.sqf +++ b/AntistasiOfficial.Altis/REINF/buildMinefield.sqf @@ -52,7 +52,7 @@ _mrk setMarkerColor "ColorRed"; _mrk setMarkerBrush "DiagGrid"; _mrk setMarkerText _texto; -_tsk = ["Mines",[side_blue,civilian],[format ["An Engineer Team has been deployed at your command with High Command Option. Once they reach the position, they will start to deploy %1 mines in the area. Cover them in the meantime.",_cantidad],"Minefield Deploy",_mrk],_posicionTel,"CREATED",5,true,true,"map"] call BIS_fnc_setTask; +_tsk = ["Mines",[side_blue,civilian],[["STR_TSK_MINEFIELD_DESC",_cantidad],"STR_MINEFIELD_TITLE",_mrk],_posicionTel,"CREATED",5,true,true,"map"] call BIS_fnc_setTask; misiones pushBack _tsk; publicVariable "misiones"; _grupo = createGroup side_blue; @@ -99,7 +99,7 @@ if ((_camion distance _posicionTel < 50) and ({alive _x} count units _grupo > 0) hint ""; }; Slowhand hcRemoveGroup _grupo; - [[petros,"hint","Engineer Team deploying mines."],"commsMP"] call BIS_fnc_MP; + [[petros,"locHint","STR_TSK_MINEFIELD_HINT"],"commsMP"] call BIS_fnc_MP; [_grupo, _mrk, "SAFE","SPAWNED", "SHOWMARKER"] execVM "scripts\UPSMON.sqf"; sleep 30*_cantidad; if ((alive _camion) and ({alive _x} count units _grupo > 0)) then @@ -112,7 +112,7 @@ if ((_camion distance _posicionTel < 50) and ({alive _x} count units _grupo > 0) _mina = createMine [_tipo,_posicionTel,[],100]; side_blue revealMine _mina; }; - _tsk = ["Mines",[side_blue,civilian],[format ["An Engineer Team has been deployed at your command with High Command Option. Once they reach the position, they will start to deploy %1 mines in the area. Cover them in the meantime.",_cantidad],"Minefield Deploy",_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Map"] call BIS_fnc_setTask; + _tsk = ["Mines",[side_blue,civilian],[["STR_TSK_MINEFIELD_DESC",_cantidad],"STR_MINEFIELD_TITLE",_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Map"] call BIS_fnc_setTask; sleep 15; //[_tsk,true] call BIS_fnc_deleteTask; [0,_tsk] spawn borrarTask; @@ -120,7 +120,7 @@ if ((_camion distance _posicionTel < 50) and ({alive _x} count units _grupo > 0) } else { - _tsk = ["Mines",[side_blue,civilian],[format ["An Engineer Team has been deployed at your command with High Command Option. Once they reach the position, they will start to deploy %1 mines in the area. Cover them in the meantime.",_cantidad],"Minefield Deploy",_mrk],_posicionTel,"FAILED",5,true,true,"Map"] call BIS_fnc_setTask; + _tsk = ["Mines",[side_blue,civilian],[["STR_TSK_MINEFIELD_DESC",_cantidad],"STR_MINEFIELD_TITLE",_mrk],_posicionTel,"FAILED",5,true,true,"Map"] call BIS_fnc_setTask; sleep 15; Slowhand hcRemoveGroup _grupo; //[_tsk,true] call BIS_fnc_deleteTask; @@ -133,7 +133,7 @@ if ((_camion distance _posicionTel < 50) and ({alive _x} count units _grupo > 0) } else { - _tsk = ["Mines",[side_blue,civilian],[format ["An Engineer Team has been deployed at your command with High Command Option. Once they reach the position, they will start to deploy %1 mines in the area. Cover them in the meantime.",_cantidad],"Minefield Deploy",_mrk],_posicionTel,"FAILED",5,true,true,"Map"] call BIS_fnc_setTask; + _tsk = ["Mines",[side_blue,civilian],[["STR_TSK_MINEFIELD_DESC",_cantidad],"STR_MINEFIELD_TITLE",_mrk],_posicionTel,"FAILED",5,true,true,"Map"] call BIS_fnc_setTask; sleep 15; Slowhand hcRemoveGroup _grupo; //[_tsk,true] call BIS_fnc_deleteTask; diff --git a/AntistasiOfficial.Altis/REINF/controlHCsquad.sqf b/AntistasiOfficial.Altis/REINF/controlHCsquad.sqf index 5661a3db..e665b177 100644 --- a/AntistasiOfficial.Altis/REINF/controlHCsquad.sqf +++ b/AntistasiOfficial.Altis/REINF/controlHCsquad.sqf @@ -7,7 +7,7 @@ _grupos = _this select 0; _grupo = _grupos select 0; _unit = leader _grupo; -if (_unit getVariable ["ASunconscious",false]) exitWith {hint "You cannot control an unconscious unit"}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {hint "You cannot control an unconscious unit"}; if (!alive _unit) exitWith {hint "You cannot control a dead unit"}; if ((not(typeOf _unit in guer_soldierArray)) and (typeOf _unit != guer_POW)) exitWith {hint "You cannot control a unit which does not belong to FIA"}; diff --git a/AntistasiOfficial.Altis/REINF/controlunit.sqf b/AntistasiOfficial.Altis/REINF/controlunit.sqf index abf4fe0b..3c106d8e 100644 --- a/AntistasiOfficial.Altis/REINF/controlunit.sqf +++ b/AntistasiOfficial.Altis/REINF/controlunit.sqf @@ -9,7 +9,7 @@ if (_unit == Petros) exitWith {hint "You cannot control Petros";}; if (player != leader group player) exitWith {hint "You cannot control AI if you are not the squad leader"}; if (isPlayer _unit) exitWith {hint "You cannot control another player"}; if (!alive _unit) exitWith {hint "You cannot control a dead unit"}; -if (_unit getVariable ["ASunconscious",false]) exitWith {hint "You cannot control an unconscious unit"}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {hint "You cannot control an unconscious unit"}; if (captive _unit) exitWith {hint "You cannot control an Undercover unit"}; if ((not(typeOf _unit in guer_soldierArray)) and (typeOf _unit != guer_POW)) exitWith {hint "You cannot control a unit which does not belong to FIA"}; if ({((side _x == side_green) or (side _x == side_red)) and (not (captive _x)) and (_x distance player < 500)} count allUnits > 0) exitWith {hint "You cannot remote control with enemies nearby"}; diff --git a/AntistasiOfficial.Altis/REINF/dismissPlayerGroup.sqf b/AntistasiOfficial.Altis/REINF/dismissPlayerGroup.sqf index 41d24b42..efad0f57 100644 --- a/AntistasiOfficial.Altis/REINF/dismissPlayerGroup.sqf +++ b/AntistasiOfficial.Altis/REINF/dismissPlayerGroup.sqf @@ -46,7 +46,7 @@ if (_ai) then _armas = []; {_unit = _x; - if ((alive _unit) and (not(_x getVariable "ASunconscious"))) then + if ((alive _unit) and !([_x] call AS_fnc_isUnconscious)) then { _resourcesFIA = _resourcesFIA + (server getVariable (typeOf _unit)); _hr = _hr +1; diff --git a/AntistasiOfficial.Altis/REINF/reinfplayer.sqf b/AntistasiOfficial.Altis/REINF/reinfplayer.sqf index 6ea66b3b..6ebccbdd 100644 --- a/AntistasiOfficial.Altis/REINF/reinfplayer.sqf +++ b/AntistasiOfficial.Altis/REINF/reinfplayer.sqf @@ -61,6 +61,7 @@ else }; [_unit] spawn AS_fnc_initialiseFIAUnit; +_unit setvariable ["generated",true,true]; if (_tipounidad == "Soldier_AA") then { _aal = genAALaunchers select 0; diff --git a/AntistasiOfficial.Altis/Revive/ACErespawn.sqf b/AntistasiOfficial.Altis/Revive/ACErespawn.sqf index 81fded5d..d85e0e69 100644 --- a/AntistasiOfficial.Altis/Revive/ACErespawn.sqf +++ b/AntistasiOfficial.Altis/Revive/ACErespawn.sqf @@ -1,14 +1,12 @@ params ["_player"]; _old = { sleep 5; - player setVariable ["ACE_isUnconscious",false,true]; - player setDamage 0.9; - player setVariable ["ASunconscious",false,true]; + [player, false] call AS_fnc_setUnconscious; [player] spawn medUnconscious; }; sleep 15; -if !(_player getVariable ["ASunconscious", false]) then { - _player setVariable ["ASunconscious",true,true]; +if !([_player] call AS_fnc_isUnconscious) then { + [player, true] call AS_fnc_setUnconscious; [] call _old; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Revive/handleDamage.sqf b/AntistasiOfficial.Altis/Revive/handleDamage.sqf index 63cd7bc9..759e2790 100644 --- a/AntistasiOfficial.Altis/Revive/handleDamage.sqf +++ b/AntistasiOfficial.Altis/Revive/handleDamage.sqf @@ -39,7 +39,7 @@ if (isPlayer _unit) then { if (_part == "") then { if (_dam >= 1) then { //Stef 16/10 disable instadeath - if (!(_unit getVariable "ASunconscious")) then { + if !([_unit] call AS_fnc_isUnconscious) then { moveOut _unit; _dam = 0.9; [_unit] spawn medUnconscious; diff --git a/AntistasiOfficial.Altis/Revive/initRevive.sqf b/AntistasiOfficial.Altis/Revive/initRevive.sqf index 6f62959c..600c3cb4 100644 --- a/AntistasiOfficial.Altis/Revive/initRevive.sqf +++ b/AntistasiOfficial.Altis/Revive/initRevive.sqf @@ -1,7 +1,7 @@ private ["_unit"]; //esto habrá que meterlo en onplayerrespawn también _unit = _this select 0; -_unit setVariable ["ASunconscious",false,true]; +[_unit, false] call AS_fnc_setUnconscious; _unit setVariable ["ASrespawning",false]; _unit addEventHandler ["HandleDamage", handleDamage]; diff --git a/AntistasiOfficial.Altis/Revive/medUnconscious.sqf b/AntistasiOfficial.Altis/Revive/medUnconscious.sqf index c5dacac4..ba90542e 100644 --- a/AntistasiOfficial.Altis/Revive/medUnconscious.sqf +++ b/AntistasiOfficial.Altis/Revive/medUnconscious.sqf @@ -1,10 +1,10 @@ params ["_unit"]; private ["_grupo","_grupos","_isLeader","_dummyGroup","_bleedOut","_suicide","_saveVolume","_ayuda","_isHelped","_texto","_isPlayer","_camTarget","_saveVolumeVoice"]; -if (_unit getVariable "ASunconscious") exitWith {}; +if ([_unit] call AS_fnc_isUnconscious) exitWith {}; if (damage _unit < 0.9) exitWith {}; if (!local _unit) exitWith {}; -_unit setVariable ["ASunconscious",true,true]; +[_unit, true] call AS_fnc_setUnconscious; _bleedOut = time + 300; _isPlayer = isPlayer _unit; if (_isPlayer) then { @@ -63,7 +63,7 @@ if (_isPlayer) then { if (isMultiplayer) then {[_unit,"heal"] remoteExec ["AS_fnc_addActionMP",0,_unit]}; }; -while {(time < _bleedOut) and (damage _unit > 0.25) and (alive _unit) and (_unit getVariable "ASunconscious") and (!(_unit getVariable ["ASrespawning",false]))} do { +while {(time < _bleedOut) and (damage _unit > 0.25) and (alive _unit) and ([_unit] call AS_fnc_isUnconscious) and (!(_unit getVariable ["ASrespawning",false]))} do { if (random 10 < 1) then {playSound3D [(injuredSounds call BIS_fnc_selectRandom),_unit,false, getPosASL _unit, 1, 1, 50];}; if (_isPlayer) then { _isHelped = _unit getVariable "ASmedHelped"; @@ -126,7 +126,7 @@ if (time > _bleedOut) exitWith { _ayuda = [_unit] call askForHelp; if (!isNull _ayuda) then{ _unit setdamage 0.2; - _unit setVariable ["ASunconscious",false,true]; + [_unit, false] call AS_fnc_setUnconscious; _unit playMoveNow "AmovPpneMstpSnonWnonDnon_healed"; }else{ [_unit] call respawn @@ -134,7 +134,7 @@ if (time > _bleedOut) exitWith { } else { _unit setdamage 0.2; _unit setUnconscious false; - _unit setVariable ["ASunconscious",false,true]; + [_unit, false] call AS_fnc_setUnconscious; _unit playMoveNow "AmovPpneMstpSnonWnonDnon_healed"; }; }else{ @@ -142,7 +142,7 @@ if (time > _bleedOut) exitWith { }; }; -if (_unit getVariable "ASunconscious") then {_unit setVariable ["ASunconscious",false,true]}; +if ([_unit] call AS_fnc_isUnconscious) then {[_unit, false] call AS_fnc_setUnconscious;}; if (alive _unit) then { _unit setUnconscious false; diff --git a/AntistasiOfficial.Altis/Revive/respawn.sqf b/AntistasiOfficial.Altis/Revive/respawn.sqf index 7342eebc..0be6cedb 100644 --- a/AntistasiOfficial.Altis/Revive/respawn.sqf +++ b/AntistasiOfficial.Altis/Revive/respawn.sqf @@ -2,7 +2,7 @@ private ["_unit"]; _unit = _this select 0; if (!local _unit) exitWith {}; if (_unit getVariable "ASrespawning") exitWith {}; -if (not( _unit getVariable "ASunconscious")) exitWith {}; +if !([_unit] call AS_fnc_isUnconscious) exitWith {}; if (_unit != _unit getVariable ["owner",_unit]) exitWith {}; if (!isPlayer _unit) exitWith {}; _unit setVariable ["ASrespawning",true]; @@ -25,19 +25,19 @@ if (isMultiplayer) exitWith */ (findDisplay 46) displayRemoveEventHandler ["KeyDown", respawnMenu]; [_unit,false] remoteExec ["setCaptive"]; - _unit setVariable ["ASunconscious",false,true]; + [_unit, false] call AS_fnc_setUnconscious; _unit setVariable ["ASrespawning",false]; //if (captive _unit) then {[_unit,false] remoteExec ["setCaptive"]}; _unit setDamage 1; }; private ["_posicion","_tam","_roads","_road","_pos"]; _posicion = getMarkerPos guer_respawn; -if (_unit getVariable "ASunconscious") then {_unit setVariable ["ASunconscious",false,true]}; +if ([_unit] call AS_fnc_isUnconscious) then {[_unit, false] call AS_fnc_setUnconscious}; _unit setVariable ["ASmedHelped",nil]; _unit setVariable ["ASmedHelping",nil]; _unit setDamage 0; _unit setVariable ["compromised",0]; -if (activeACE) then { +if (activeACEMedical) then { _unit setVariable ["ACE_isUnconscious",false,true]; [_unit, _unit] call ace_medical_fnc_treatmentAdvanced_fullHeal; }; @@ -69,7 +69,7 @@ if (_x != vehicle _x) then } else { - if ((!(_x getVariable "ASunconscious")) and (alive _x)) then + if (!([_x] call AS_fnc_isUnconscious) and (alive _x)) then { _x setPosATL _posicion; _x setVariable ["ASrearming",false]; diff --git a/AntistasiOfficial.Altis/Save/fn_loadGame.sqf b/AntistasiOfficial.Altis/Save/fn_loadGame.sqf index 9b41e221..f8d88991 100644 --- a/AntistasiOfficial.Altis/Save/fn_loadGame.sqf +++ b/AntistasiOfficial.Altis/Save/fn_loadGame.sqf @@ -5,6 +5,7 @@ petros allowdamage false; //ADD STATS THAT NEED TO BE LOADED HERE. //preinit +["posHQ"] call fn_loadData; publicVariable "posHQ"; ["campaign_playerList"] call fn_loadData; ["membersPool"] call fn_loadData; publicVariable "membersPool"; flag_playerList = true; @@ -59,7 +60,7 @@ unlockedRifles = unlockedweapons - gear_sidearms - gear_missileLaunchers - gear_ ["jng_vehicleList"] call fn_loadData; //Sparker's War Statistics data -["ws_grid"] call fn_loadData; +//["ws_grid"] call fn_loadData; //=========================================================================== @@ -93,21 +94,21 @@ _markers = _markers + controles; }; if (_x in aeropuertos) exitWith { - _mrkD setMarkerText format ["%2 Airport: %1",count (garrison getVariable _x), A3_Str_BLUE]; + _mrkD setMarkerText format [localize "STR_GL_MAP_AP1",count (garrison getVariable _x), A3_Str_BLUE]; _mrkD setMarkerType guer_marker_type; planesAAFmax = planesAAFmax - 1; helisAAFmax = helisAAFmax - 2; }; if (_x in bases) exitWith { - _mrkD setMarkerText format ["%2 Base: %1",count (garrison getVariable _x), A3_Str_BLUE]; + _mrkD setMarkerText format [localize "STR_GL_MAP_MB1",count (garrison getVariable _x), A3_Str_BLUE]; _mrkD setMarkerType guer_marker_type; APCAAFmax = APCAAFmax - 2; tanksAAFmax = tanksAAFmax - 1; }; if (_x in puestos) exitWith { - _mrkD setMarkerText format ["%2 Outpost: %1",count (garrison getVariable _x), A3_Str_PLAYER]; + _mrkD setMarkerText format [localize "STR_GL_MAP_OP1",count (garrison getVariable _x), A3_Str_PLAYER]; }; if (_x in ciudades) exitWith { @@ -119,7 +120,7 @@ _markers = _markers + controles; }; if ((_x in recursos) OR (_x in fabricas)) exitWith { - if (_x in recursos) then {_mrkD setMarkerText format ["Resource: %1",count (garrison getVariable _x)]} else {_mrkD setMarkerText format ["Factory: %1",count (garrison getVariable _x)]}; + if (_x in recursos) then {_mrkD setMarkerText format [localize "STR_GL_MAP_RS"+": %1",count (garrison getVariable _x)]} else {_mrkD setMarkerText format [localize "STR_GL_MAP_FAC"+": %1",count (garrison getVariable _x)]}; _power = [power, getMarkerPos _x] call BIS_fnc_nearestPosition; if (!(_power in mrkFIA) OR (_power in destroyedCities)) then { [_x,false] spawn AS_fnc_adjustLamps; @@ -128,11 +129,11 @@ _markers = _markers + controles; }; if (_x in puertos) exitWith { - _mrkD setMarkerText format ["Sea Port: %1",count (garrison getVariable _x)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_SP"+": %1",count (garrison getVariable _x)]; }; if (_x in power) exitWith { - _mrkD setMarkerText format ["Power Plant: %1",count (garrison getVariable _x)]; + _mrkD setMarkerText format [localize "STR_GL_MAP_PP"+": %1",count (garrison getVariable _x)]; if (_x in destroyedCities) then {[_x] call AS_fnc_destroyCity}; }; }; @@ -180,7 +181,7 @@ publicVariable "markers"; publicVariable "mrkAAF"; publicVariable "mrkFIA"; -["posHQ"] call fn_loadData; publicVariable "posHQ"; + ["flag_chopForest"] call fn_loadData; publicVariable "flag_chopForest"; ["objectsHQ"] call fn_loadData; ["addObjectsHQ"] call fn_loadData; diff --git a/AntistasiOfficial.Altis/Save/fn_saveFunctions.sqf b/AntistasiOfficial.Altis/Save/fn_saveFunctions.sqf index 7606fe06..3e2bb932 100644 --- a/AntistasiOfficial.Altis/Save/fn_saveFunctions.sqf +++ b/AntistasiOfficial.Altis/Save/fn_saveFunctions.sqf @@ -93,7 +93,18 @@ fn_setPlayerData = { TRACE_3("START fn_setPlayerData", _varName,_varValue,_player); call { if(_varName == 'loadout') exitWith { - if(_varValue isEqualType []) then {_player setUnitLoadout _varValue;}; + if(_varValue isEqualType []) then { + [ _varValue, + { + removeBackpackGlobal player; + removeVest player; + removeUniform player; + removeGoggles player; + player setUnitLoadout _this; + systemChat "Loadout restored"; + } + ] remoteExec ["call", _player]; + }; }; if(_varName isEqualTo 'funds') exitWith {_player setVariable ["dinero",_varValue,true];}; if(_varName isEqualTo 'score') exitWith {_player setVariable ["score",_varValue,true];}; @@ -112,8 +123,12 @@ fn_saveData = { if (_varName == "") exitWith {ERROR_2("Error in fn_saveData, no name -- name: %1; value: %2", _varname,_varValue)}; if (isNil "_varValue") exitWith {ERROR_2("Error in fn_saveData, no value -- name: %1; value: %2", _varname,_varValue)}; if(usingIniDb)then{ - //["write", ["Game", _varName, _varValue]] call saveDB; - [saveDB, "Game", _varname, _varValue] call fn_saveDataINIDBI; + if ((['AS_saveprofilesave', 0] call BIS_fnc_getParamValue) == 1) then { + profileNameSpace setVariable [format ["%1_%2_S_%3",worldName,static_playerSide,_varname],_varValue]; + } else { + //["write", ["Game", _varName, _varValue]] call saveDB; + [saveDB, "Game", _varname, _varValue] call fn_saveDataINIDBI; + } }else{ profileNameSpace setVariable [format ["%1_%2_S_%3",worldName,static_playerSide,_varname],_varValue]; }; @@ -123,9 +138,14 @@ fn_loadData = { params [["_varname","",[""]]]; if (_varName == "") exitWith {ERROR_1("Error in fn_loadData, no name -- name: %1", _varname)}; - _varValue = if(usingIniDb)then{ - //[saveDB, _varname,loadDB] call AS_FNC_loadDataINIDBI; //Not going to pre-compile it! - [loadDB, "Game", _varname, objNull] call fn_loadDataINIDBI; + _varValue = + if(usingIniDb)then{ + if ((['AS_loadprofilesave', 0] call BIS_fnc_getParamValue) == 1) then { + profileNameSpace getVariable [(format ["%1_%2_S_%3",worldName,static_playerSide,_varname]),objNull]; + } else { + //[saveDB, _varname,loadDB] call AS_FNC_loadDataINIDBI; //Not going to pre-compile it! + [loadDB, "Game", _varname, objNull] call fn_loadDataINIDBI; + } }else{ profileNameSpace getVariable [(format ["%1_%2_S_%3",worldName,static_playerSide,_varname]),objNull]; }; @@ -256,7 +276,7 @@ fn_setData = { publicVariable "enemyMotorpool" }; }; - if(_varName == 'time') exitWith {setDate _varValue; forceWeatherChange}; + if(_varName == 'time') exitWith {setDate _varValue;}; if(_varName == 'resourcesAAF') exitWith {server setVariable ["resourcesAAF",_varValue,true]}; if(_varName == 'resourcesFIA') exitWith {server setVariable ["resourcesFIA",_varValue,true]}; if(_varName == 'destroyedBuildings') exitWith { @@ -336,10 +356,10 @@ fn_setData = { _mrk setMarkerType "loc_bunker"; _mrk setMarkerColor "ColorYellow"; if (isOnRoad _x) then { - _mrk setMarkerText "FIA Roadblock"; + _mrk setMarkerText localize "STR_GL_FIARB"; FIA_RB_list pushBackUnique _mrk; } else { - _mrk setMarkerText "FIA Watchpost"; + _mrk setMarkerText localize "STR_GL_FIAWP"; FIA_WP_list pushBackUnique _mrk; }; spawner setVariable [_mrk,false,true]; @@ -499,6 +519,7 @@ fn_setData = { _veh = _tipoVeh createVehicle [0,0,0]; _veh setDir _dirVeh; _veh setPosATL _posVeh; + _veh setCenterOfMass [(getCenterOfMass _veh) vectorAdd [0, 0, -1], 0]; if (_tipoVeh in (statics_allMGs + statics_allATs + statics_allAAs + statics_allMortars)) then { staticsToSave pushBack _veh; diff --git a/AntistasiOfficial.Altis/Save/fn_saveGame.sqf b/AntistasiOfficial.Altis/Save/fn_saveGame.sqf index 4398acef..edd7c4aa 100644 --- a/AntistasiOfficial.Altis/Save/fn_saveGame.sqf +++ b/AntistasiOfficial.Altis/Save/fn_saveGame.sqf @@ -46,7 +46,7 @@ flag_savingServer = true; ["campaign_playerList",server getVariable ["campaign_playerList",[]]] call fn_saveData; //Sparker's War Statistics data -["ws_grid", ws_grid] call fn_saveData; +//["ws_grid", ws_grid] call fn_saveData; private ["_hr","_funds","_vehicle","_weapons","_magazines","_items","_backpacks","_containers","_backpack","_vehiclesToSave","_vehicleType","_supportOPFOR","_supportBLUFOR","_data","_garrison","_mines","_emplacements","_camps","_missionTypes","_objectsHQ","_addObjectsHQ"]; @@ -123,7 +123,7 @@ if (count _containers > 0) then { }; }; -if (isMultiplayer) then { +/*if (isMultiplayer) then { { { if ([_x] call BIS_fnc_baseWeapon in lockedWeapons) then { @@ -149,7 +149,7 @@ if (isMultiplayer) then { if (!(_backpack in unlockedBackpacks) AND (_backpack != "")) then { _backpacks pushBack _backpack; }; -}; +};*/ _vehiclesToSave = []; { @@ -178,17 +178,19 @@ _vehiclesToSave = []; if (_vehicleType != AS_misSupplyBox) then { if (_vehicleType != "I_supplyCrate_F") then { if (_vehicleType != "Land_Camping_Light_F") then { - if (count attachedObjects _vehicle == 0) then { - if ((alive _vehicle) AND ({(alive _x) AND (!isPlayer _x)} count crew _vehicle == 0)) then { - if !(_vehicleType == "WeaponHolderSimulated") then { - _vehiclesToSave pushBackUnique [_vehicleType,getPosATLVisual _vehicle,getDir _vehicle]; - _weapons = _weapons + weaponCargo _vehicle; - _magazines = _magazines + magazineCargo _vehicle; - _items = _items + itemCargo _vehicle; - if (count backpackCargo _vehicle > 0) then { - { - _backpacks pushBack (_x call BIS_fnc_basicBackpack); - } forEach backpackCargo _vehicle; + if (_vehicleType != "Land_WoodenCrate_01_F") then { + if (count attachedObjects _vehicle == 0) then { + if ((alive _vehicle) AND ({(alive _x) AND (!isPlayer _x)} count crew _vehicle == 0)) then { + if !(_vehicleType == "WeaponHolderSimulated") then { + _vehiclesToSave pushBackUnique [_vehicleType,getPosATLVisual _vehicle,getDir _vehicle]; + _weapons = _weapons + weaponCargo _vehicle; + _magazines = _magazines + magazineCargo _vehicle; + _items = _items + itemCargo _vehicle; + if (count backpackCargo _vehicle > 0) then { + { + _backpacks pushBack (_x call BIS_fnc_basicBackpack); + } forEach backpackCargo _vehicle; + }; }; }; }; @@ -309,6 +311,6 @@ _data = []; flag_savingServer = false; -[petros,"save",[localize "STR_HINTS_SAVE_COM_1",localize "STR_HINTS_SAVE_COM_2",localize "STR_HINTS_SAVE_COM_3",localize "STR_HINTS_SAVE_COM_4"]] remoteExec ["commsMP",Slowhand]; +[petros,"save",""] remoteExec ["commsMP",Slowhand]; INFO("Maintenance: game successfully saved."); LOG("END fn_saveGame"); \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Save/fn_savePlayer.sqf b/AntistasiOfficial.Altis/Save/fn_savePlayer.sqf index 16199e28..54892de3 100644 --- a/AntistasiOfficial.Altis/Save/fn_savePlayer.sqf +++ b/AntistasiOfficial.Altis/Save/fn_savePlayer.sqf @@ -24,7 +24,7 @@ if (isMultiplayer) then { }; //if player is to far from hq dont save his/her gear. -private _loadout = if(_checkDistance && ((getPos _player) distance (getPos fuego) > 10000))then{ //Sparker changed the radius to 10km range +private _loadout = if([_player] call AS_fnc_isUnconscious OR (_checkDistance AND {(getPos _player) distance (getPos fuego) > 10000}))then{ [[],[],[],[],[],[],"","",[],["","","","","",""]]; }else{ getUnitLoadout _player; diff --git a/AntistasiOfficial.Altis/Save_test/autoSave.sqf b/AntistasiOfficial.Altis/Save_test/autoSave.sqf deleted file mode 100644 index af951ee9..00000000 --- a/AntistasiOfficial.Altis/Save_test/autoSave.sqf +++ /dev/null @@ -1,28 +0,0 @@ - - -autoSaveTest = { - - for "_i" from 5 to 1 step -1 do{ - - //move saves - _saveName1 = ("antistasi_autoSave_" + str _i); - _save1 = profileNamespace getVariable _saveName1; - _saveName2 = ("antistasi_autoSave_" + str (_i+1)); - profileNamespace setVariable [_saveName2,_save1]; - - //create new - if(_i == 1)then{ - _newsave call newSave; - profileNamespace setVariable [_saveName1,_newsave]; - }; - - }; - - saveProfileNamespace; -}; - -_b = "test"; - -_name = QUOTE(_b); - -diag_log ["tet",[_name,_b]]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Save_test/loadPlayer.sqf b/AntistasiOfficial.Altis/Save_test/loadPlayer.sqf deleted file mode 100644 index c7546b71..00000000 --- a/AntistasiOfficial.Altis/Save_test/loadPlayer.sqf +++ /dev/null @@ -1,29 +0,0 @@ -params ["_player"]; - -_uid = getPlayerUID _player - -_saveArray = saveObj getVariable _uid; - -if(isNil "_saveArray")exitWith{ - //new player - - //remove gear? -}; - -{ - _x call{ - params ["_name","_data"]; - - if(_name = "_loadout")exitWith{ - _player setUnitLoadout _data; - }; - if(_name = "_rank")exitWith{ - _player setRank _data; - }; - if()exitWith{}; - if()exitWith{}; - }; -}forEach _saveArray; - -_player setUnitLoadout _loadout; - diff --git a/AntistasiOfficial.Altis/Save_test/save.sqf b/AntistasiOfficial.Altis/Save_test/save.sqf deleted file mode 100644 index e3ab4d1a..00000000 --- a/AntistasiOfficial.Altis/Save_test/save.sqf +++ /dev/null @@ -1,5 +0,0 @@ - -//save players loadouts -{ - -} forEach allVariables saveObj; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Save_test/savePlayer.sqf b/AntistasiOfficial.Altis/Save_test/savePlayer.sqf deleted file mode 100644 index 9dfb87c8..00000000 --- a/AntistasiOfficial.Altis/Save_test/savePlayer.sqf +++ /dev/null @@ -1,26 +0,0 @@ -#include - -#define QUOTE(VAR) #VAR -QUOTE(var_1); // returns "var_1" - - - - -params ["_player"]; -_uid = getPlayerUID _player -_loadout = getUnitLoadout _player; - - -//items to save -_array = [_loadout,_rank]; - - -//create list -_saveArray []; -{ - pushBack [QUOTE(_x),_x]; -} forEach _array; - - - -saveObj setVariable [_uid, _saveArray]; diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Core/fnc/UPSMON_arrayShufflePlus.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Core/fnc/UPSMON_arrayShufflePlus.sqf index db9b8073..fe0878d6 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Core/fnc/UPSMON_arrayShufflePlus.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Core/fnc/UPSMON_arrayShufflePlus.sqf @@ -13,10 +13,10 @@ Returns: private ["_cnt","_el1","_rnd","_indx","_el2"]; _cnt = count _this - 1; +if (_cnt < 1) exitWith {_this;}; //Nothing to shuffle _el1 = _this select _cnt; -_this resize _cnt; _rnd = random diag_tickTime * _cnt; -for "_i" from 0 to _cnt do { +for "_i" from 1 to _cnt do { _indx = floor random _rnd % _cnt; _el2 = _this select _indx; _this set [_indx, _el1]; diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Group/fnc/UPSMON_Isgrpstuck.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Group/fnc/UPSMON_Isgrpstuck.sqf index 0d00caaf..e0a5dacd 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Group/fnc/UPSMON_Isgrpstuck.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/COMMON/Group/fnc/UPSMON_Isgrpstuck.sqf @@ -53,7 +53,9 @@ If (alive _npc) then //{if (alive _x && leader _x != _x) then {_x dofollow (leader _x)};} foreach units _grp; _grp setvariable ["UPSMON_RSTUCKCONTROL",0]; _stuck = true; - + private _leader = leader _grp; + {_x forceSpeed -1; _x doFollow _leader;}count units _grp; + if (UPSMON_Debug>0) then {player sidechat format["%1 stucked, moving",_grp getvariable ["UPSMON_Grpid",0]]}; if (UPSMON_Debug>0) then {diag_log format["%1 stuck for %2 seconds - trying to move again",_grp getvariable ["UPSMON_Grpid",0]]}; }; diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/FORTIFY/Fnc/UPSMON_patrolBuilding.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/FORTIFY/Fnc/UPSMON_patrolBuilding.sqf index 4f6fdf06..1c0d790c 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/FORTIFY/Fnc/UPSMON_patrolBuilding.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/FORTIFY/Fnc/UPSMON_patrolBuilding.sqf @@ -13,62 +13,68 @@ Returns: nothing ****************************************************************/ -private ["_units","_bldpos","_grp","_movein","_currpos","_attackpos","_unit","_patrolto","_time"]; +private ["_units","_bldpos","_grp","_unit","_patrolto","_time"]; _units = _this select 0; _bldpos = _this select 1; _grp = _this select 2; -_time = _this select 3; -_grp setVariable ["UPSMON_inbuilding",true]; +_bldpos = _bldpos select {!isNil "_x"}; +private _grpid = _grp getVariable "UPSMON_grpid"; +_grp setVariable ["UPSMON_inbuilding",true]; +private _exitPos = (leader _grp) getPos [30, random 360]; +{_x forceSpeed -1; _x doMove getPos _x; false;}count _units; +sleep 0.1; _units = [_units] call UPSMON_Getunits; -_movein = []; -if (count _units > 0) then - { - _currpos = getposATL (_units select 0); - _attackpos = _currpos; - - If ("deletethis" in _bldpos) then {_bldpos = _bldpos - ["deletethis"]}; - If (count _bldpos > 0) then - { - _attackpos = _bldpos select 0; - }; - - { - _unit = _x; - If (alive _unit) then - { - If (vehicle _unit == _unit) then - { - If (Unitready _unit) then - { - If ("deletethis" in _bldpos) then {_bldpos = _bldpos - ["deletethis"]}; - If (count _bldpos > 0) then - { - _patrolto = _bldpos select 0; - _bldpos set [0,"deletethis"]; - _bldpos = _bldpos - ["deletethis"]; - Dostop _unit; - _unit domove _patrolto; - _unit setdestination [_patrolto,"LEADER PLANNED",true]; - _movein pushback _unit; - }; - }; - }; - }; - } foreach _units; - - sleep _time; - - _time = (((_attackpos vectordistance _currpos)*1.2) + 5); - If (_grp getvariable ["UPSMON_Grpmission",""] != "PATROLINBLD" || _grp getvariable ["UPSMON_Grpmission",""] != "ASSAULT") exitwith {_grp setVariable ["UPSMON_inbuilding",false];}; +if (count _units > 0) then { + _bldpos = _bldpos - ["deletethis"]; - If (count _bldpos > 0 && count _units > 0) then - { - [_units,_bldpos,_grp,_time] call UPSMON_patrolBuilding; - }; + private _countAlive = 1; + _time = time + (60 * count _bldpos); + while {_time > time AND count _bldpos > 0 AND _countAlive > 0 AND {_grp getvariable "UPSMON_Grpmission" isEqualTo "PATROLINBLD"}} do{ + _countAlive = 0; + { + _unit = _x; + If (alive _unit) then + { + _countAlive = _countAlive + 1; + If (vehicle _unit == _unit) then + { + private _unitNum = _forEachIndex; + private _currPos = getPos _unit; + //What i see from current pos + private _eyePos = eyePos _unit; + { + private _aslPos = AGLToASL _x; + if (((lineIntersectsWith [_eyePos, _aslPos]) isEqualTo []) OR (_x vectordistance _currPos < 1)) then { + _bldpos set [_forEachIndex, "deletethis"]; + }; + }forEach _bldpos; + _bldpos = _bldpos - ["deletethis"]; + //Stuck checkWWW + _currPos = getPos _unit; + private _lastPos = _unit getVariable ["UPSMON_PATROLINBLD_lastpos", _currPos]; + _unit setVariable ["UPSMON_PATROLINBLD_lastpos", _currPos]; + if (_lastPos vectordistance _currPos < 0.1) then { + //unstuck + If (count _bldpos > 0) then { + _patrolto = selectRandom _bldpos; + doStop _unit; + _unit doMove _patrolto; + _unit setdestination [_patrolto,"LEADER PLANNED",true]; + }; + }; + sleep 1; + }; + }; + } foreach _units; + sleep 2; + }; +}; - _grp setVariable ["UPSMON_inbuilding",false]; - }; \ No newline at end of file +{_x forceSpeed -1; _x doMove _exitPos; false;}count _units; +sleep 30; +_grp setvariable ["UPSMON_bldposToCheck",nil]; +_grp setVariable ["UPSMON_inbuilding",nil]; diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_FLANK/fnc/UPSMON_DOFLANK.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_FLANK/fnc/UPSMON_DOFLANK.sqf index e58b2f1d..59ae5178 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_FLANK/fnc/UPSMON_DOFLANK.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_FLANK/fnc/UPSMON_DOFLANK.sqf @@ -37,8 +37,8 @@ _grpid = _grp getvariable ["UPSMON_Grpid",0]; _water = 0; _grp setvariable ["UPSMON_searchingpos",true]; - -_closeenough = UPSMON_closeenough; + +_closeenough = UPSMON_closeenough; // get position of spotted unit in player group, and watch that spot // angle from unit to target diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROL/Fnc/UPSMON_SrchPtrlPos.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROL/Fnc/UPSMON_SrchPtrlPos.sqf index fdd91760..b3faafdc 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROL/Fnc/UPSMON_SrchPtrlPos.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROL/Fnc/UPSMON_SrchPtrlPos.sqf @@ -81,7 +81,7 @@ while {_scan} do if (!("air" in _typeofgrp)) then { _nearRoads = _centerpos nearRoads _rangeX; - If (count _nearRoads > 0) then + If !(_nearRoads isEqualTo []) then { _nearRoads = _nearRoads call UPSMON_arrayShufflePlus; { diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROLSRCH/fnc/UPSMON_DOPATROLSRCH.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROLSRCH/fnc/UPSMON_DOPATROLSRCH.sqf index 90ba04b8..1545abeb 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROLSRCH/fnc/UPSMON_DOPATROLSRCH.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/MODULES/ORDERS/UPSMON_PATROLSRCH/fnc/UPSMON_DOPATROLSRCH.sqf @@ -38,7 +38,7 @@ _grp setvariable ["UPSMON_searchingpos",true]; // angle from unit to target _dir1 =[_currpos,_suspectPos] call BIS_fnc_DirTo; -_dir2 = [_suspectPos,_currpos] call BIS_fnc_DirTo;; +_dir2 = [_suspectPos,_currpos] call BIS_fnc_DirTo; _suspectPos = [_suspectPos select 0,_suspectPos select 1,0]; If (("ship" in _typeofgrp) || ("air" in _typeofgrp)) then @@ -97,6 +97,7 @@ If (count _bldpositions > 0) then _bldpos = (_bldpositions select 1) select 0; _grp setvariable ["UPSMON_Grpmission","PATROLINBLD"]; _grp setvariable ["UPSMON_bldposToCheck",_bldpos]; + _wptype = "MOVE"; }; [_grp,_targetpos,_wptype,"COLUMN",_speedmode,_Behaviour,"YELLOW",_radius] call UPSMON_DocreateWP; _grp setvariable ["UPSMON_searchingpos",false]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP.sqf index a70dd807..4c3aada5 100644 --- a/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP.sqf +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP.sqf @@ -83,6 +83,8 @@ UPSMON_MAINLOOP_postItem = {}; scriptname "UPSMON_MAINLOOP"; UPSMON_MAINLOOP_cycle = 10; +UPSMON_MAINLOOP_body = compile preProcessFileLineNumbers "Scripts\UPSMON\UPSMON_MAINLOOP_body.sqf"; + while {true} do { #ifdef PROFILE_UPSMON @@ -92,962 +94,9 @@ while {true} do #ifdef PROFILE_UPSMON call UPSMON_MAINLOOP_preItem; #endif - If (!IsNull _x) then - { - _grp = _x; - - _members = (_grp getvariable "UPSMON_Origin") select 4; - - _grpmission = _grp getvariable "UPSMON_GrpMission"; - _grpstatus = _grp getvariable "UPSMON_Grpstatus"; - - _grpid = _grp getVariable "UPSMON_grpid"; - _Ucthis = _grp getvariable "UPSMON_Ucthis"; - - _lastcurrpos = (_grp getvariable "UPSMON_Lastinfos") select 0; - _lastpos = (_grp getvariable "UPSMON_Lastinfos") select 1; - _lastattackpos = _grp getvariable ["UPSMON_Lastattackpos",[]]; - - _areamarker = _Ucthis select 1; - _surrended = false; - - if (({alive _x && !(captive _x)} count units _grp) == 0 || _grp getvariable ["UPSMON_Removegroup",false]) exitwith - { - [_grp,_UCthis] call UPSMON_RESPAWN; - }; - - _npc = leader _grp; - _driver = driver (vehicle _npc); - - // did the leader die? - _npc = [_npc,_grp] call UPSMON_getleader; - if (!alive _npc || isplayer _npc) exitwith {[_grp,_UCthis] call UPSMON_RESPAWN;}; - - _buildingdist = 50; - _deadbodiesnear = false; - _stuck = false; - _makenewtarget = false; - _haslos = false; - _terrainscan = ["meadow",10]; - _targetpos = [0,0]; - _Attackpos = []; - _opfknowval = 0; - _wptype = "MOVE"; - _targetdist = 1000; - _traveldist = 0; - _dist = 10000; - _ratio = 0.5; - _safemode = ["CARELESS","SAFE"]; - - _target = ObjNull; - _typeofeni = []; - - _speedmode = speedmode _npc; - _behaviour = behaviour _npc; - _combatmode = "YELLOW"; - - - // current position - _currPos = getposATL _npc; - - If (count(waypoints _grp) != 0) then - { - _wppos = waypointPosition [_grp,count(waypoints _grp)-1]; - _targetpos = _wppos; - _wptype = waypointType [_grp,count(waypoints _grp)-1]; - _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; - }; - - _grpcomposition = [_grp] call UPSMON_analysegrp; - _typeofgrp = _grpcomposition select 0; - _capacityofgrp = _grpcomposition select 1; - _assignedvehicle = _grpcomposition select 2; - _weaponrange = _grpcomposition select 3; - - _supstatus = [_grp] call UPSMON_supstatestatus; - _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; - - If (_grp getvariable ["UPSMON_NOAI",false]) then - { - _fixedtargetPos = [_grp,_lastpos] call UPSMON_GetReinfPos; - if (count _fixedtargetPos > 0) then {_targetpos = _fixedtargetPos;}; - - _terrainscan = _currpos call UPSMON_sample_terrain; - _unitsneedammo = [_npc] call UPSMON_checkmunition; - _vehiclesneedsupply = [_assignedvehicle] call UPSMON_Checkvehiclesstatus; - -//********************************************************************************************************************* -// Acquisition of the target -//********************************************************************************************************************* - _TargetSearch = [_grp] call UPSMON_TargetAcquisition; - _Enemies = _TargetSearch select 0; - _Allies = _TargetSearch select 1; - _target = _TargetSearch select 2; - _dist = _TargetSearch select 3; - _targetsnear = _TargetSearch select 4; - _attackPos = _TargetSearch select 5; - _suspectenies = _TargetSearch select 6; - _opfknowval = _TargetSearch select 7; - - if (_opfknowval > 0) then - { - If (_grp getvariable ["UPSMON_lastOpfknowval",0] < _opfknowval) then - { - _timeontarget = (_grp getvariable ["UPSMON_TIMEONTARGET",time]) - 10; - _grp setvariable ["UPSMON_TIMEONTARGET",_timeontarget]; - }; - }; -//********************************************************************************************************************* -// Reactions -//********************************************************************************************************************* - - _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; - - If (!IsNull _target) then - { - _grp setvariable ["UPSMON_Grpstatus","RED"]; - - _haslos = [_npc,_target,_weaponrange,130] call UPSMON_Haslos; - - //Analyse Targets && Allies - _Situation = [_grp,_Allies,_Enemies] call UPSMON_Checkratio; - _ratio = _Situation select 0; - _enicapacity = _Situation select 1; - _typeofeni = _Situation select 2; - - //Retreat - [_grp,_dist,_ratio,_supstatus,_unitsneedammo,_typeofgrp,_attackpos,_assignedvehicle] call UPSMON_IsRetreating; - - //Surrender - [_grp,_dist,_ratio,_supstatus,_unitsneedammo,_typeofgrp,_haslos] call UPSMON_IsSurrending; - - If (_grp getvariable ["UPSMON_Grpmission",""] == "SURRENDER") exitwith {[_grp] call UPSMON_surrended;}; - - // Artillery Support - _artillery = [_grp] call UPSMON_ArtiChk; - If (_artillery) then - { - [_grp,_currpos,_attackpos,_dist,_enies] call UPSMON_FO; - }; - - // Reinforcement Support - _reinf = [_grp,_ratio,_typeofgrp] call UPSMON_ReinfChk; - If (_reinf) then - { - [_grp,_currpos,_attackpos,_radiorange,_enicapacity] spawn UPSMON_CallRenf; - }; - }; - - if (_supstatus == "SUPRESSED") then - { - _timeontarget = (_grp getvariable ["UPSMON_TIMEONTARGET",time]) + 30; - _grp setvariable ["UPSMON_TIMEONTARGET",_timeontarget]; - }; - - _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; - _maneuver = [_grp,_nowp,_attackpos,_typeofgrp] call UPSMON_Cangrpmaneuver; - - If (_maneuver) then - { - If ("air" in _typeofgrp) then - { - [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; - _grp setvariable ["UPSMON_Grpmission","ASSAULT"]; - _grpstatus = "PURPLE"; - } - else - { - If ("ship" in _typeofgrp) then - { - If (_dist < 300 && (surfaceIsWater _attackpos)) then - { - [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; - _grp setvariable ["UPSMON_Grpstatus","BLACK"]; - } - else - { - [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos] call UPSMON_PLANFLANK; - }; - } - else - { - If (_ratio < 1.2 && (_supstatus != "SUPRESSED")) then - { - _inmarker = [_attackpos,_areamarker] call UPSMON_pos_fnc_isBlacklisted; - // Offensive Behaviour - If (_dist <= 300 && ({alive _x && !(captive _x)} count units _grp) >= 4 && !("arti" in _typeofgrp) && (!(_grp getvariable ["UPSMON_NOFOLLOW",false]) || !_inmarker)) then - { - //Assault - If ("car" in _typeofgrp && !("infantry" in _typeofgrp)) then - { - _terrainscantarget = _attackpos call UPSMON_sample_terrain; - - If (((_terrainscantarget) select 0 == "inhabited" || (_terrainscantarget) select 0 == "forest") && (_terrainscantarget) select 1 > 100) then - { - [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos] call UPSMON_PLANFLANK; - } - else - { - [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; - _grp setvariable ["UPSMON_Grpstatus","BLACK"]; - }; - } - else - { - [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist,_targetdist] call UPSMON_PLANASSLT; - _grp setvariable ["UPSMON_Grpstatus","BLACK"]; - }; - } - else - { - If (("staticbag" in _typeofgrp) || (_grp getvariable ["UPSMON_NOFOLLOW",false] && _inmarker)) then - { - If ((_haslos && _dist <= _weaponrange && _dist > 300) || (_grp getvariable ["UPSMON_NOFOLLOW",false] && _inmarker)) then - { - //SUPPORT - //[_grp] call UPSMON_PLANSPT; - if (_wptype != "HOLD") then - { - _timeorder = time + 15; - _grp setvariable ["UPSMON_TIMEORDER",_timeorder]; - [_grp,_currpos,"HOLD","LINE","LIMITED","STEALTH","YELLOW",1] call UPSMON_DocreateWP; - }; - _grp setvariable ["UPSMON_Grpmission","SUPPORT"]; - _grp setvariable ["UPSMON_Grpstatus","PURPLE"]; - } - else - { - //FLANK - [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos,_targetpos,_currpos] call UPSMON_PLANFLANK; - }; - } - else - { - //FLANK - [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos,_targetpos,_currpos] call UPSMON_PLANFLANK; - }; - }; - } - else - { - //Defensive Behaviour - if (_wptype != "HOLD") then - { - [_grp,_dist,_target,_supstatus,_terrainscan] spawn UPSMON_DODEFEND; - _timeorder = time + 5; - _grp setvariable ["UPSMON_TIMEORDER",_timeorder]; - }; - _grp setvariable ["UPSMON_Grpmission","DEFEND"]; - }; - }; - }; - }; - - If (IsNull _target) then - { - If ((_grp getvariable ["UPSMON_attackpos",[]]) isEqualTo []) then - { - If (count _suspectenies > 0) then - { - _suspectenies = [_suspectenies, [], { _currpos distance ((_x getvariable "UPSMON_TargetInfos") select 0)}, "ASCEND"] call BIS_fnc_sortBy; - _suspectpos = ((_suspectenies select 0) getvariable "UPSMON_TargetInfos") select 0; - _grp setvariable ["UPSMON_SuspectPos",_suspectpos]; - }; - }; - - If (_supstatus != "" || count (_grp getvariable ["UPSMON_SuspectPos",[]]) > 0) then - { - _artipos = _grp getvariable ["UPSMON_SuspectPos",[]]; - - If (count _artipos > 0) then - { - [_grp,(_grp getvariable "UPSMON_SuspectPos"),_currpos] call UPSMON_GETINPATROLSRCH; - }; - If ([] call UPSMON_Nighttime) then - { - If (!(UPSMON_FlareInTheAir)) then - { - - If (_artipos isEqualTo []) then - { - _artipos = [_currpos,[100,200],[0,360],0,[0,100],0] call UPSMON_pos; - }; - - If !(_artipos isEqualTo []) then - { - _artillery = [_grp] call UPSMON_ArtiChk; - If (_artillery) then - { - [_grp,_currpos,_artipos,_dist,_enies,"ILLUM"] call UPSMON_FO; - } - else - { - If (_supstatus != "SUPRESSED") then - { - //Fire Flare - [_grp,_artipos] call UPSMON_FireFlare; - }; - }; - }; - }; - } - else - { - If (_supstatus == "SUPRESSED") then - { - _smokepos = _grp getvariable ["UPSMON_SuspectPos",[]]; - If (_smokepos isEqualTo []) then - { - _smokepos = [_currpos,[30,100],[0,360],0,[0,100],0] call UPSMON_pos; - }; - - If !(_smokepos isEqualTo []) then - { - _nosmoke = [_grp] call UPSMON_NOSMOKE; - If (!_nosmoke) then {[units _grp,_smokepos] spawn UPSMON_CreateSmokeCover;}; - }; - }; - }; - }; - }; - - _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; - - [_grp,_supstatus,_attackpos,_dist,_terrainscan,_haslos,_typeofgrp] call UPSMON_ChangeFormation; - - If ("arti" in _typeofgrp) then - { - If (_grp getvariable ["UPSMON_Grpmission",""] != "RETREAT") then - { - If (!(_grp getvariable ["UPSMON_OnBattery",false])) then - { - If (count _attackpos > 0 || count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then - { - _artitarget = _attackpos; - If (count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then {_artitarget = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 0;}; - [_grp,_typeofgrp,_nowp,_artitarget] spawn UPSMON_artillerysetbattery; - if (_grp getvariable ["UPSMON_Grpmission",""] != "FIREMISSION") then - { - _grp setvariable ["UPSMON_Grpmission","FIREMISSION"]; - }; - }; - }; - }; - }; - - If (_grp getvariable ["UPSMON_TRANSPORT",false]) then - { - If (!(_grp getvariable ["UPSMON_GrpInAction",false])) then - { - If (count (_grp getvariable ["UPSMON_Transportmission",[]]) > 0) then - { - _grp setvariable ["UPSMON_Grpmission","TRANSPORT"]; - }; - }; - }; - - If (_grp getvariable ["UPSMON_Supply",false]) then - { - If (!(_grp getvariable ["UPSMON_GrpInAction",false])) then - { - If (count (_grp getvariable ["UPSMON_Supplymission",[]]) > 0) then - { - _grp setvariable ["UPSMON_Grpmission","SUPPLY"]; - }; - }; - }; - - If (_grpstatus == "GREEN") then - { - _dead = ObjNull; - //If in safe mode if find dead bodies change behaviour - if (UPSMON_deadBodiesReact)then - { - { - if (alive _x) then - { - if (vehicle _x == _x) then - { - _dead = [_x,_buildingdist] call UPSMON_deadbodies; - if (!IsNull _dead) exitwith - { - _deadbodiesnear = true; - _grp setvariable ["UPSMON_Grpstatus","YELLOW"]; - }; - }; - }; - } foreach units _grp; - - If (_deadbodiesnear) then - { - [_grp,getposATL _dead,_currpos] call UPSMON_GETINPATROLSRCH; - }; - }; - - //Stuck control - _stuck = [_npc,_lastcurrpos,_currpos] call UPSMON_Isgrpstuck; - } - else - { - If (IsNull _target) then - { - _grpstatus = "YELLOW"; - }; - }; - - }; // End NOAI - - If ("air" in _typeofgrp || "car" in _typeofgrp || "tank" in _typeofgrp) then - { - If (_grp getvariable ["UPSMON_Grpmission",""] != "RESSUPLY") then - { - If ((_grp getvariable ["UPSMON_Grpstatus","GREEN"] == "GREEN") || (_grp getvariable ["UPSMON_Grpmission",""] == "DEFEND") || ("air" in _typeofgrp)) then - { - If (_dist > 800) then - { - //_supplyunit = [_grp] call UPSMON_getsupply; - //If (!IsNull _supplyunit) then - //{ - //_grp setvariable ["UPSMON_Grpmission","RESSUPLY"]; - //_grp setvariable ["UPSMON_SupplyGrp",_supplyunit]; - //_supplypos = [_grp] call UPSMON_GetSupplyPos; - //_supplyunit setvariable ["UPSMON_Supplymission",[_grp,_vehiclesneedsupply,_supplypos]]; - //} - //else - //{ - //If ("air" in _typeofgrp) then - //{ - //_basepos = (_grp getvariable "UPSMON_Origin") select 0; - //[_grp,_basepos,"MOVE","COLUMN","FULL","CARELESS","YELLOW",1,UPSMON_flyInHeight] call UPSMON_DocreateWP; - //_grp setvariable ["UPSMON_Grpmission","RESSUPLY"]; - //} - //}; - }; - }; - }; - }; - -//********************************************************************************************************************* -// ORDERS -//********************************************************************************************************************* - - switch (_grp getvariable "UPSMON_GrpMission") do - { - case "ASSAULT": - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (!(_grp getvariable ["UPSMON_GrpinAction",false])) then - { - If (_targetdist <= 300) then - { - If (IsNull _target) then - { - If (_targetdist <= 100) then - { - [_grp,_grp getvariable ["UPSMON_attackpos",[]],_currpos] call UPSMON_GETINPATROLSRCH; - }; - } - else - { - If (vehicle _target == _target) then - { - If ([_target] call UPSMON_Inbuilding) then - { - If ((_target getvariable "UPSMON_TargetInfos") select 1 <= 10) then - { - If (_dist <= 100) then - { - //The target is in a building, what do we do ? - [_grp,_target,_currpos] spawn UPSMON_AssltBld; - }; - }; - } - else - { - if (_dist > 50) then - { - If (_haslos) then - { - //[_grp,_target] spawn UPSMON_Assltposition; - }; - }; - }; - }; - }; - }; - }; - }; - }; - - case "FLANK": - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (_targetdist <= 20) then - { - If (_grp getvariable "UPSMON_TIMEORDER" <= time) then - { - If (IsNull _target) then - { - [_grp,_grp getvariable ["UPSMON_attackpos",[]],_currpos] call UPSMON_GETINPATROLSRCH; - }; - }; - }; - }; - }; - - case "SUPPORT": - { - If (_targetdist <= 10) then - { - If (!IsNull _target) then - { - If (!(_grp setvariable ["UPSMON_GrpinAction",false])) then - { - If ("staticbag" in _typeofgrp) then - { - //Deploy static - [_grp,_currpos,_attackpos] call UPSMON_DeployStatic; - }; - }; - } - else - { - [_grp,(_grp getvariable "UPSMON_Attackpos"),_currpos] call UPSMON_GETINPATROLSRCH; - }; - }; - }; - - case "DEFEND": - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (_wptype == "HOLD") then - { - If (!(_grp getvariable ["UPSMON_GrpinAction",false])) then - { - If (_supstatus != "SUPRESSED") then - { - If (_targetdist <= 100) then - { - If (_dist > 500) then - { - If ("heavy" in _typeofeni || "medium" in _typeofeni) then - { - //Put minefield - [_grp,_attackpos] call UPSMON_SetMinefield; - }; - }; - - [_grp,_attackpos] spawn UPSMON_FORTIFY; - }; - }; - }; - }; - }; - }; - - case "PATROLSRCH": - { - If (count (_grp getvariable ["UPSMON_Alertpos",[]]) > 0) then - { - If (_grp getvariable ["UPSMON_SRCHTIME",time] > time) then - { - if (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - if (!(_grp getvariable ["UPSMON_Disembarking",false])) then - { - If ((_targetpos select 0 == (_grp getvariable "UPSMON_Alertpos") select 0 && _targetpos select 1 == (_grp getvariable "UPSMON_Alertpos") select 1) - || _targetdist <= 5 - //|| _stuck - || moveToFailed _npc - || moveToCompleted _npc - || (_grp getvariable ["UPSMON_TIMEONTARGET",0] < time && !("air" in _typeofgrp)) - //|| (("air" in _typeofgrp && !(_grp getVariable ["UPSMON_landing",false])) && (_targetdist <= (30 + (_currpos select 2)))) - || ("air" in _typeofgrp && _wptype != "LOITER")) then - { - [_grp,_grp getvariable "UPSMON_Alertpos",_typeofgrp,_areamarker] spawn UPSMON_DOPATROLSRCH; - }; - }; - }; - } - else - { - [_grp] spawn UPSMON_BackToNormal; - _grp setvariable ["UPSMON_Alertpos",[]]; - }; - }; - }; - - case "PATROLINBLD": - { - If (_targetdist <= 100) then - { - If (count (_grp getvariable ["UPSMON_bldposToCheck",[]]) > 0) then - { - If (!(_grp getvariable ["UPSMON_InBuilding",false])) then - { - _units = [units _grp] call UPSMON_Getunits; - [_units,_grp getvariable ["UPSMON_bldposToCheck",[]],_grp,55] spawn UPSMON_patrolBuilding; - } - } - else - { - _grp setvariable ["UPSMON_Grpmission","PATROLSRCH"]; - }; - }; - }; - - case "REINFORCEMENT": - { - If (_targetdist <= UPSMON_Closeenough) then - { - [_grp,_targetpos,_currpos] call UPSMON_GETINPATROLSRCH; - _grpstatus = "YELLOW" - }; - }; - - case "AMBUSH": - { - _ambush2 = if ("AMBUSH2:" in _UCthis || "AMBUSH2" in _UCthis || "AMBUSHDIR2:" in _UCthis) then {true} else {false}; - _ambushdistance = [_currpos,(_grp getvariable "UPSMON_Positiontoambush")] call UPSMON_distancePosSqr; - _targetdistance = 1000; - _targetknowaboutyou = 0; - _linkactivate = false; - - if (!isnull _target) then {_targetdistance = [_currpos,getposATL _target] call UPSMON_distancePosSqr;_targetknowaboutyou = _target knowsabout _npc;}; - //Ambush enemy is nearly aproach - //_ambushdist = 50; - // replaced _target by _NearestEnemy - - If (_grp getvariable ["UPSMON_LINKED",0] > 0) then - { - { - If (side _x == _side) then - { - If (round ([_currpos,getposATL (leader _x)] call UPSMON_distancePosSqr) <= (_grp getvariable ["UPSMON_LINKED",0])) then - { - If (_x getvariable "UPSMON_AMBUSHFIRE") - exitwith {_linkactivate = true}; - }; - }; - } foreach UPSMON_NPCs - }; - - If (((_supstatus != "") || _linkactivate || (_grp getvariable ["UPSMON_AMBUSHWAIT",time]) < time) - || ((!isNull _target && "Air" countType [_target] == 0) - && ((_targetdistance <= _ambushdistance) - ||(round ([getposATL _target,(_grp getvariable "UPSMON_Positiontoambush")] call UPSMON_distancePosSqr) < 10) - || (_npc knowsabout _target > 3 && _ambush2)))) then - { - sleep ((random 0.5) + 1); // let the enemy then get in the area - - if (UPSMON_Debug>0) then {diag_log format["%1: FIREEEEEEEEE!!! Gothit: %2 linkactivate: %3 Distance: %4 PositionToAmbush: %5 AmbushWait:%6 %7",_grpid,_supstatus,_linkactivate,(_targetdistance <= _ambushdistance),_target distance (_grp getvariable "UPSMON_Positiontoambush") < 20,_grp getvariable ["UPSMON_AMBUSHWAIT",time] < time,(_npc knowsabout _target > 3 && _ambush2)]}; - - _npc setBehaviour "COMBAT"; - _npc setcombatmode "YELLOW"; - _grpstatus = "PURPLE"; - - { - If !(isNil "bdetect_enable") then {_x setVariable ["bcombat_task", nil];}; - } foreach units _grp; - - _grp setvariable ["UPSMON_AMBUSHFIRE",true]; - - //No engage yet - _grp setvariable ["UPSMON_grpmission","SUPPORT"]; - }; - }; - - case "FORTIFY": - { - If (!(IsNull _target)) then - { - If (!(_grp getvariable ["UPSMON_Checkbuild",false])) then - { - if (behaviour _npc != "COMBAT") then {_npc setbehaviour "COMBAT"}; - [_grp,_dist] call UPSMON_unitdefend; - - If (_grp getvariable ["UPSMON_OrgGrpMission",""] != "FORTIFY") then - { - If (_ratio > 1.2) then - { - _grp setvariable ["UPSMON_Grpmission","SUPPORT"]; - } - }; - }; - } - else - { - If (_grp getvariable ["UPSMON_OrgGrpMission",""] != "FORTIFY") then - { - [_grp,(_grp getvariable "UPSMON_Attackpos"),_currpos] call UPSMON_GETINPATROLSRCH; - _grpstatus = "YELLOW" - }; - }; - }; - - case "RETREAT": - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (_targetdist <= 50) then - { - _grp setvariable ["UPSMON_Grpmission","DEFEND"]; - }; - }; - }; - - case "TRANSPORT": - { - If (count _assignedvehicle > 0) then - { - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "MoveToRP" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then - { - _grouptransported = [_grp] call UPSMON_CheckTransported; - - If (!IsNull _grouptransported) then - { - If (!(_grp getvariable ["UPSMON_embarking",false])) then - { - If (_targetdist <= 50) then - { - _destination = (_grp getvariable ["UPSMON_Transportmission",[]]) select 1; - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "MoveToRP") then - { - //Embark group in transport (LAND) - [_grouptransported,_assignedvehicle,_destination] spawn UPSMON_getinassignedveh; - }; - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then - { - if (_currpos select 2 <= 3) then - { - //Embark group in transport (HELI) - [_grouptransported,_assignedvehicle,_destination] spawn UPSMON_getinassignedveh; - }; - }; - }; - }; - } - else - { - //If there are nobody anymore to transport then return to base - [_assignedvehicle select 0] call UPSMON_Returnbase; - }; - }; - - If (_targetdist <= 100) then - { - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDING" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDBASE" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDPZ") then - { - If (unitReady (driver (_assignedvehicle select 0)) || toUpper(landResult (_assignedvehicle select 0)) != "NOTREADY" || (landResult (_assignedvehicle select 0)) == "") then - { - //Make heli land and stop or land and be ready to move :) - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDING") then {If (((getposATL (_assignedvehicle select 0)) select 2) > 20) then {(_assignedvehicle select 0) land "GET OUT";}}; - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then {If (((getposATL (_assignedvehicle select 0)) select 2) > 20) then {(_assignedvehicle select 0) land "GET IN";}}; - If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDBASE") then {(_assignedvehicle select 0) land "LAND";}; - }; - }; - }; - } - else - { - _grp setvariable ["UPSMON_Transport",false]; - _grp setvariable ["UPSMON_Transportmission",[]] - }; - }; - - case "WAITTRANSPORT": - { - _grouptransported = [_grp] call UPSMON_CheckTransported; - If (IsNull _grouptransported) then - { - [_grp,_grp getvariable ["UPSMON_TransportDest",[]],"MOVE",_formation,_speedmode,_behaviour,"YELLOW",1] spawn UPSMON_DocreateWP; - }; - }; - - case "SUPPLY": - { - If (true) then - { - - }; - }; - - case "RESUPPLY": - { - - }; - - case "PATROL": - { - _speedmode = Speedmode _npc; - _behaviour = Behaviour _npc; - _wpformation = Formation _npc; - - If (!(_grp getvariable ["UPSMON_InTransport",false])) then - { - - If ("arti" in _typeofgrp) then - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (_targetdist <= 10 && (_grp getvariable ["UPSMON_TIMEONTARGET",time] <= time)) then - { - _makenewtarget=true; - }; - }; - } - else - { - - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (!(_grp getvariable ["UPSMON_embarking",false])) then - { - If (!(_grp getvariable ["UPSMON_Disembarking",false])) then - { - If (!([_targetpos,_areamarker] call UPSMON_pos_fnc_isBlacklisted) - || _stuck - || _targetdist <= 5 - //|| moveToFailed _driver - //|| Unitready _driver - //|| moveToCompleted _driver - || count(waypoints _grp) == 0 - || ((("tank" in _typeofgrp) || ("ship" in _typeofgrp) || ("apc" in _typeofgrp) ||("car" in _typeofgrp)) && _targetdist <= 25) - || (("air" in _typeofgrp && !(_grp getVariable ["UPSMON_landing",false])) && (_targetdist <= 70 || Unitready _driver))) then - { - _makenewtarget=true; - }; - }; - }; - }; - }; - }; - - // Search new patrol pos - if (_makenewtarget) then - { - if (UPSMON_Debug > 0) then {diag_log format ["Grp%1 search newpos",_grp getvariable ["UPSMON_grpid",0]];}; - [_grp,_wpformation,_speedmode,_areamarker,_Behaviour,_combatmode,_typeofgrp] spawn UPSMON_DOPATROL; - }; - }; - - case "FIREMISSION": - { - If (count _attackpos > 0 || count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then - { - If (_grp getvariable ["UPSMON_OnBattery",false]) then - { - //_area = (_attackpos distance (leader _grp))/10;//modified by Barbolani to make the dispersion distance dependant. - If ((!(_grp getvariable ["UPSMON_Batteryfire",false])) and ({((side _x == civilian) and (_x distance _attackpos < (200))) or ((side _x == side (leader _grp)) and (_x distance _attackPos < 100))} count allUnits == 0)/* and (_area > 5)*/) then //modified by Barbolani for Antistasi - { - _artitarget = _attackpos; - _firemission = "HE"; - _roundsask = 1; - _area = 10; - If (count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then - { - _artitarget = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 0; - _firemission = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 1; - _roundsask = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 2; - _area = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 2; - }; - - [_grp,_artitarget,_area,_roundsask,_firemission] spawn UPSMON_artillerydofire; - } - else - { - If (_grp getvariable ["UPSMON_RoundsComplete",false]) then - { - [_grp] call UPSMON_BackToNormal; - _grp setvariable ["UPSMON_OnBattery",false]; - _grp setvariable ["UPSMON_RoundsComplete",false]; - }; - }; - }; - } - else - { - If (_grp getvariable ["UPSMON_RoundsComplete",false]) then - { - [_grp] call UPSMON_BackToNormal; - _grp setvariable ["UPSMON_OnBattery",false]; - _grp setvariable ["UPSMON_RoundsComplete",false]; - }; - }; - }; - - case "RELAX": - { - [_grp,_areamarker] call UPSMON_DORELAX; - }; - - case "STATIC": - { - - }; - - }; - - If (count(waypoints _grp) != 0) then - { - _wppos = waypointPosition [_grp,count(waypoints _grp)-1]; - _targetpos = _wppos; - _wptype = waypointType [_grp,count(waypoints _grp)-1]; - _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; - }; - - if (!_nowp) then - { -/////////////////////////////////////////////////////////////////////////// -/////////// Disembarking ////////////////// -////////////////////////////////////////////////////////////////////////// - - If (!(_grp getvariable ["UPSMON_disembarking",false])) then - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (_targetpos select 0 != 0 && _targetpos select 1 != 0) then - { - If (count _assignedvehicle > 0) then - { - [_grp,_assignedvehicle,_dist,_targetdist,_supstatus] call UPSMON_Disembarkment; - }; - }; - }; - }; -/////////////////////////////////////////////////////////////////////////// -/////////// Embarking ////////////////// -////////////////////////////////////////////////////////////////////////// - - If (!(_grp getvariable ["UPSMON_embarking",false])) then - { - if (!(_grp getvariable ["UPSMON_Disembarking",false])) then - { - If (!(_grp getvariable ["UPSMON_searchingpos",false])) then - { - If (!(_grp getVariable ["UPSMON_landing",false])) then - { - [_grp,_typeofgrp,_targetpos,_dist,_targetdist,_assignedvehicle,_supstatus,_speedmode,_behaviour] call UPSMON_Embarkment; - }; - }; - }; - }; - };// !NOWP - - if (({alive _x && !(captive _x)} count units _grp) == 0 || _grp getvariable ["UPSMON_Removegroup",false]) exitwith - { - [_grp,_UCthis] call UPSMON_RESPAWN; - }; - _grp setvariable ["UPSMON_Lastinfos",[_currpos,_targetpos]]; - _grp setvariable ["UPSMON_lastOpfknowval",_opfknowval]; - _grp setvariable ["UPSMON_LastGrpmission",_grp getvariable ["UPSMON_Grpmission",""]]; + _x call UPSMON_MAINLOOP_body; - sleep 0.1; - }; #ifdef PROFILE_UPSMON call UPSMON_MAINLOOP_postItem; #endif diff --git a/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP_body.sqf b/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP_body.sqf new file mode 100644 index 00000000..5bb774fc --- /dev/null +++ b/AntistasiOfficial.Altis/Scripts/UPSMON/UPSMON_MAINLOOP_body.sqf @@ -0,0 +1,957 @@ +params ["_x"]; + +If (!IsNull _x) then +{ + _grp = _x; + + _members = (_grp getvariable "UPSMON_Origin") select 4; + + _grpmission = _grp getvariable "UPSMON_GrpMission"; + _grpstatus = _grp getvariable "UPSMON_Grpstatus"; + + _grpid = _grp getVariable "UPSMON_grpid"; + _Ucthis = _grp getvariable "UPSMON_Ucthis"; + + _lastcurrpos = (_grp getvariable "UPSMON_Lastinfos") select 0; + _lastpos = (_grp getvariable "UPSMON_Lastinfos") select 1; + _lastattackpos = _grp getvariable ["UPSMON_Lastattackpos",[]]; + + _areamarker = _Ucthis select 1; + _surrended = false; + + if (({alive _x && !(captive _x)} count units _grp) == 0 || _grp getvariable ["UPSMON_Removegroup",false]) exitwith + { + [_grp,_UCthis] call UPSMON_RESPAWN; + }; + + _npc = leader _grp; + _driver = driver (vehicle _npc); + + // did the leader die? + _npc = [_npc,_grp] call UPSMON_getleader; + if (!alive _npc || isplayer _npc) exitwith {[_grp,_UCthis] call UPSMON_RESPAWN;}; + + _buildingdist = 50; + _deadbodiesnear = false; + _stuck = false; + _makenewtarget = false; + _haslos = false; + _terrainscan = ["meadow",10]; + _targetpos = [0,0]; + _Attackpos = []; + _opfknowval = 0; + _wptype = "MOVE"; + _targetdist = 1000; + _traveldist = 0; + _dist = 10000; + _ratio = 0.5; + _safemode = ["CARELESS","SAFE"]; + + _target = ObjNull; + _typeofeni = []; + + _speedmode = speedmode _npc; + _behaviour = behaviour _npc; + _combatmode = "YELLOW"; + + + // current position + _currPos = getposATL _npc; + + If (count(waypoints _grp) != 0) then + { + _wppos = waypointPosition [_grp,count(waypoints _grp)-1]; + _targetpos = _wppos; + _wptype = waypointType [_grp,count(waypoints _grp)-1]; + _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; + }; + + _grpcomposition = [_grp] call UPSMON_analysegrp; + _typeofgrp = _grpcomposition select 0; + _capacityofgrp = _grpcomposition select 1; + _assignedvehicle = _grpcomposition select 2; + _weaponrange = _grpcomposition select 3; + + _supstatus = [_grp] call UPSMON_supstatestatus; + _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; + +If (_grp getvariable ["UPSMON_NOAI",false]) then +{ + _fixedtargetPos = [_grp,_lastpos] call UPSMON_GetReinfPos; + if (count _fixedtargetPos > 0) then {_targetpos = _fixedtargetPos;}; + + _terrainscan = _currpos call UPSMON_sample_terrain; + _unitsneedammo = [_npc] call UPSMON_checkmunition; + _vehiclesneedsupply = [_assignedvehicle] call UPSMON_Checkvehiclesstatus; + +//********************************************************************************************************************* +// Acquisition of the target +//********************************************************************************************************************* + _TargetSearch = [_grp] call UPSMON_TargetAcquisition; + _Enemies = _TargetSearch select 0; + _Allies = _TargetSearch select 1; + _target = _TargetSearch select 2; + _dist = _TargetSearch select 3; + _targetsnear = _TargetSearch select 4; + _attackPos = _TargetSearch select 5; + _suspectenies = _TargetSearch select 6; + _opfknowval = _TargetSearch select 7; + + if (_opfknowval > 0) then + { + If (_grp getvariable ["UPSMON_lastOpfknowval",0] < _opfknowval) then + { + _timeontarget = (_grp getvariable ["UPSMON_TIMEONTARGET",time]) - 10; + _grp setvariable ["UPSMON_TIMEONTARGET",_timeontarget]; + }; + }; +//********************************************************************************************************************* +// Reactions +//********************************************************************************************************************* + + _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; + + If (!IsNull _target) then + { + _grp setvariable ["UPSMON_Grpstatus","RED"]; + + _haslos = [_npc,_target,_weaponrange,130] call UPSMON_Haslos; + + //Analyse Targets && Allies + _Situation = [_grp,_Allies,_Enemies] call UPSMON_Checkratio; + _ratio = _Situation select 0; + _enicapacity = _Situation select 1; + _typeofeni = _Situation select 2; + + //Retreat + [_grp,_dist,_ratio,_supstatus,_unitsneedammo,_typeofgrp,_attackpos,_assignedvehicle] call UPSMON_IsRetreating; + + //Surrender + [_grp,_dist,_ratio,_supstatus,_unitsneedammo,_typeofgrp,_haslos] call UPSMON_IsSurrending; + + If (_grp getvariable ["UPSMON_Grpmission",""] == "SURRENDER") exitwith {[_grp] call UPSMON_surrended;}; + + // Artillery Support + _artillery = [_grp] call UPSMON_ArtiChk; + If (_artillery) then + { + [_grp,_currpos,_attackpos,_dist,_enies] call UPSMON_FO; + }; + + // Reinforcement Support + _reinf = [_grp,_ratio,_typeofgrp] call UPSMON_ReinfChk; + If (_reinf) then + { + [_grp,_currpos,_attackpos,_radiorange,_enicapacity] spawn UPSMON_CallRenf; + }; + }; + + if (_supstatus == "SUPRESSED") then + { + _timeontarget = (_grp getvariable ["UPSMON_TIMEONTARGET",time]) + 30; + _grp setvariable ["UPSMON_TIMEONTARGET",_timeontarget]; + }; + + _nowp = [_grp,_target,_supstatus] call UPSMON_NOWP; + _maneuver = [_grp,_nowp,_attackpos,_typeofgrp] call UPSMON_Cangrpmaneuver; + + If (_maneuver) then + { + If ("air" in _typeofgrp) then + { + [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; + _grp setvariable ["UPSMON_Grpmission","ASSAULT"]; + _grpstatus = "PURPLE"; + } + else + { + If ("ship" in _typeofgrp) then + { + If (_dist < 300 && (surfaceIsWater _attackpos)) then + { + [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; + _grp setvariable ["UPSMON_Grpstatus","BLACK"]; + } + else + { + [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos] call UPSMON_PLANFLANK; + }; + } + else + { + If (_ratio < 1.2 && (_supstatus != "SUPRESSED")) then + { + _inmarker = [_attackpos,_areamarker] call UPSMON_pos_fnc_isBlacklisted; + // Offensive Behaviour + If (_dist <= 300 && ({alive _x && !(captive _x)} count units _grp) >= 4 && !("arti" in _typeofgrp) && (!(_grp getvariable ["UPSMON_NOFOLLOW",false]) || !_inmarker)) then + { + //Assault + If ("car" in _typeofgrp && !("infantry" in _typeofgrp)) then + { + _terrainscantarget = _attackpos call UPSMON_sample_terrain; + + If (((_terrainscantarget) select 0 == "inhabited" || (_terrainscantarget) select 0 == "forest") && (_terrainscantarget) select 1 > 100) then + { + [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos] call UPSMON_PLANFLANK; + } + else + { + [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist] call UPSMON_PLANASSLT; + _grp setvariable ["UPSMON_Grpstatus","BLACK"]; + }; + } + else + { + [_grp,_attackpos,_lastattackpos,_typeofgrp,_dist,_targetdist] call UPSMON_PLANASSLT; + _grp setvariable ["UPSMON_Grpstatus","BLACK"]; + }; + } + else + { + If (("staticbag" in _typeofgrp) || (_grp getvariable ["UPSMON_NOFOLLOW",false] && _inmarker)) then + { + If ((_haslos && _dist <= _weaponrange && _dist > 300) || (_grp getvariable ["UPSMON_NOFOLLOW",false] && _inmarker)) then + { + //SUPPORT + //[_grp] call UPSMON_PLANSPT; + if (_wptype != "HOLD") then + { + _timeorder = time + 15; + _grp setvariable ["UPSMON_TIMEORDER",_timeorder]; + [_grp,_currpos,"HOLD","LINE","LIMITED","STEALTH","YELLOW",1] call UPSMON_DocreateWP; + }; + _grp setvariable ["UPSMON_Grpmission","SUPPORT"]; + _grp setvariable ["UPSMON_Grpstatus","PURPLE"]; + } + else + { + //FLANK + [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos,_targetpos,_currpos] call UPSMON_PLANFLANK; + }; + } + else + { + //FLANK + [_grp,_attackpos,_lastattackpos,_dist,_typeofgrp,_terrainscan,_areamarker,_haslos,_targetpos,_currpos] call UPSMON_PLANFLANK; + }; + }; + } + else + { + //Defensive Behaviour + if (_wptype != "HOLD") then + { + [_grp,_dist,_target,_supstatus,_terrainscan] spawn UPSMON_DODEFEND; + _timeorder = time + 5; + _grp setvariable ["UPSMON_TIMEORDER",_timeorder]; + }; + _grp setvariable ["UPSMON_Grpmission","DEFEND"]; + }; + }; + }; + }; + + If (IsNull _target) then + { + If ((_grp getvariable ["UPSMON_attackpos",[]]) isEqualTo []) then + { + If (count _suspectenies > 0) then + { + _suspectenies = [_suspectenies, [], { _currpos distance ((_x getvariable "UPSMON_TargetInfos") select 0)}, "ASCEND"] call BIS_fnc_sortBy; + _suspectpos = ((_suspectenies select 0) getvariable "UPSMON_TargetInfos") select 0; + _grp setvariable ["UPSMON_SuspectPos",_suspectpos]; + }; + }; + + If (_supstatus != "" || count (_grp getvariable ["UPSMON_SuspectPos",[]]) > 0) then + { + _artipos = _grp getvariable ["UPSMON_SuspectPos",[]]; + + If (count _artipos > 0) then + { + [_grp,(_grp getvariable "UPSMON_SuspectPos"),_currpos] call UPSMON_GETINPATROLSRCH; + }; + If ([] call UPSMON_Nighttime) then + { + If (!(UPSMON_FlareInTheAir)) then + { + + If (_artipos isEqualTo []) then + { + _artipos = [_currpos,[100,200],[0,360],0,[0,100],0] call UPSMON_pos; + }; + + If !(_artipos isEqualTo []) then + { + _artillery = [_grp] call UPSMON_ArtiChk; + If (_artillery) then + { + [_grp,_currpos,_artipos,_dist,_enies,"ILLUM"] call UPSMON_FO; + } + else + { + If (_supstatus != "SUPRESSED") then + { + //Fire Flare + [_grp,_artipos] call UPSMON_FireFlare; + }; + }; + }; + }; + } + else + { + If (_supstatus == "SUPRESSED") then + { + _smokepos = _grp getvariable ["UPSMON_SuspectPos",[]]; + If (_smokepos isEqualTo []) then + { + _smokepos = [_currpos,[30,100],[0,360],0,[0,100],0] call UPSMON_pos; + }; + + If !(_smokepos isEqualTo []) then + { + _nosmoke = [_grp] call UPSMON_NOSMOKE; + If (!_nosmoke) then {[units _grp,_smokepos] spawn UPSMON_CreateSmokeCover;}; + }; + }; + }; + }; + }; + + _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; + + [_grp,_supstatus,_attackpos,_dist,_terrainscan,_haslos,_typeofgrp] call UPSMON_ChangeFormation; + + If ("arti" in _typeofgrp) then + { + If (_grp getvariable ["UPSMON_Grpmission",""] != "RETREAT") then + { + If (!(_grp getvariable ["UPSMON_OnBattery",false])) then + { + If (count _attackpos > 0 || count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then + { + _artitarget = _attackpos; + If (count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then {_artitarget = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 0;}; + [_grp,_typeofgrp,_nowp,_artitarget] spawn UPSMON_artillerysetbattery; + if (_grp getvariable ["UPSMON_Grpmission",""] != "FIREMISSION") then + { + _grp setvariable ["UPSMON_Grpmission","FIREMISSION"]; + }; + }; + }; + }; + }; + + If (_grp getvariable ["UPSMON_TRANSPORT",false]) then + { + If (!(_grp getvariable ["UPSMON_GrpInAction",false])) then + { + If (count (_grp getvariable ["UPSMON_Transportmission",[]]) > 0) then + { + _grp setvariable ["UPSMON_Grpmission","TRANSPORT"]; + }; + }; + }; + + If (_grp getvariable ["UPSMON_Supply",false]) then + { + If (!(_grp getvariable ["UPSMON_GrpInAction",false])) then + { + If (count (_grp getvariable ["UPSMON_Supplymission",[]]) > 0) then + { + _grp setvariable ["UPSMON_Grpmission","SUPPLY"]; + }; + }; + }; + + If (_grpstatus == "GREEN") then + { + _dead = ObjNull; + //If in safe mode if find dead bodies change behaviour + if (UPSMON_deadBodiesReact)then + { + { + if (alive _x) then + { + if (vehicle _x == _x) then + { + _dead = [_x,_buildingdist] call UPSMON_deadbodies; + if (!IsNull _dead) exitwith + { + _deadbodiesnear = true; + _grp setvariable ["UPSMON_Grpstatus","YELLOW"]; + }; + }; + }; + } foreach units _grp; + + If (_deadbodiesnear) then + { + [_grp,getposATL _dead,_currpos] call UPSMON_GETINPATROLSRCH; + }; + }; + + //Stuck control + _stuck = [_npc,_lastcurrpos,_currpos] call UPSMON_Isgrpstuck; + } + else + { + If (IsNull _target) then + { + _grpstatus = "YELLOW"; + }; + }; + +}; // End NOAI + +If ("air" in _typeofgrp || "car" in _typeofgrp || "tank" in _typeofgrp) then +{ + If (_grp getvariable ["UPSMON_Grpmission",""] != "RESSUPLY") then + { + If ((_grp getvariable ["UPSMON_Grpstatus","GREEN"] == "GREEN") || (_grp getvariable ["UPSMON_Grpmission",""] == "DEFEND") || ("air" in _typeofgrp)) then + { + If (_dist > 800) then + { + //_supplyunit = [_grp] call UPSMON_getsupply; + //If (!IsNull _supplyunit) then + //{ + //_grp setvariable ["UPSMON_Grpmission","RESSUPLY"]; + //_grp setvariable ["UPSMON_SupplyGrp",_supplyunit]; + //_supplypos = [_grp] call UPSMON_GetSupplyPos; + //_supplyunit setvariable ["UPSMON_Supplymission",[_grp,_vehiclesneedsupply,_supplypos]]; + //} + //else + //{ + //If ("air" in _typeofgrp) then + //{ + //_basepos = (_grp getvariable "UPSMON_Origin") select 0; + //[_grp,_basepos,"MOVE","COLUMN","FULL","CARELESS","YELLOW",1,UPSMON_flyInHeight] call UPSMON_DocreateWP; + //_grp setvariable ["UPSMON_Grpmission","RESSUPLY"]; + //} + //}; + }; + }; + }; +}; + +//********************************************************************************************************************* +// ORDERS +//********************************************************************************************************************* + +switch (_grp getvariable "UPSMON_GrpMission") do +{ + case "ASSAULT": + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (!(_grp getvariable ["UPSMON_GrpinAction",false])) then + { + If (_targetdist <= 300) then + { + If (IsNull _target) then + { + If (_targetdist <= 100) then + { + [_grp,_grp getvariable ["UPSMON_attackpos",_currpos],_currpos] call UPSMON_GETINPATROLSRCH; + }; + } + else + { + If (vehicle _target == _target) then + { + If ([_target] call UPSMON_Inbuilding) then + { + If ((_target getvariable "UPSMON_TargetInfos") select 1 <= 10) then + { + If (_dist <= 100) then + { + //The target is in a building, what do we do ? + [_grp,_target,_currpos] spawn UPSMON_AssltBld; + }; + }; + } + else + { + if (_dist > 50) then + { + If (_haslos) then + { + //[_grp,_target] spawn UPSMON_Assltposition; + }; + }; + }; + }; + }; + }; + }; + }; + }; + + case "FLANK": + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (_targetdist <= 20) then + { + If (IsNull _target) then + { + [_grp,_grp getvariable ["UPSMON_attackpos",_currpos],_currpos] call UPSMON_GETINPATROLSRCH; + }; + }; + }; + }; + + case "SUPPORT": + { + If (_targetdist <= 10) then + { + If (!IsNull _target) then + { + If (!(_grp setvariable ["UPSMON_GrpinAction",false])) then + { + If ("staticbag" in _typeofgrp) then + { + //Deploy static + [_grp,_currpos,_attackpos] call UPSMON_DeployStatic; + }; + }; + } + else + { + [_grp,(_grp getvariable "UPSMON_Attackpos"),_currpos] call UPSMON_GETINPATROLSRCH; + }; + }; + }; + + case "DEFEND": + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (_wptype == "HOLD") then + { + If (!(_grp getvariable ["UPSMON_GrpinAction",false])) then + { + If (_supstatus != "SUPRESSED") then + { + If (_targetdist <= 100) then + { + If (_dist > 500) then + { + If ("heavy" in _typeofeni || "medium" in _typeofeni) then + { + //Put minefield + [_grp,_attackpos] call UPSMON_SetMinefield; + }; + }; + + [_grp,_attackpos] spawn UPSMON_FORTIFY; + }; + }; + }; + }; + }; + }; + + case "PATROLSRCH": + { + If (count (_grp getvariable ["UPSMON_Alertpos",[]]) > 0) then + { + If (_grp getvariable ["UPSMON_SRCHTIME",time] > time) then + { + if (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + if (!(_grp getvariable ["UPSMON_Disembarking",false])) then + { + If ((_targetpos select 0 == (_grp getvariable "UPSMON_Alertpos") select 0 && _targetpos select 1 == (_grp getvariable "UPSMON_Alertpos") select 1) + || _targetdist <= 5 + //|| _stuck + || moveToFailed _npc + || moveToCompleted _npc + || (_grp getvariable ["UPSMON_TIMEONTARGET",0] < time && !("air" in _typeofgrp)) + //|| (("air" in _typeofgrp && !(_grp getVariable ["UPSMON_landing",false])) && (_targetdist <= (30 + (_currpos select 2)))) + || ("air" in _typeofgrp && _wptype != "LOITER")) then + { + [_grp,_grp getvariable ["UPSMON_Alertpos", _currPos],_typeofgrp,_areamarker] spawn UPSMON_DOPATROLSRCH; + }; + }; + }; + } + else + { + [_grp] spawn UPSMON_BackToNormal; + _grp setvariable ["UPSMON_Alertpos",[]]; + }; + }; + }; + + case "PATROLINBLD": + { + If (_targetdist <= 100) then + { + If (count (_grp getvariable ["UPSMON_bldposToCheck",[]]) > 0) then + { + {_x forceSpeed -1; _x doMove getPos _x;}count units _grp; + If (!(_grp getvariable ["UPSMON_InBuilding",false])) then + { + [units _grp, _grp getvariable ["UPSMON_bldposToCheck",[]], _grp, time+300] spawn UPSMON_patrolBuilding; + }; + } + else + { + [_grp, _currpos getPos [100, random 360], _currpos] call UPSMON_GETINPATROLSRCH; + }; + }; + }; + + case "REINFORCEMENT": + { + If (_targetdist <= UPSMON_Closeenough) then + { + [_grp,_targetpos,_currpos] call UPSMON_GETINPATROLSRCH; + _grpstatus = "YELLOW" + }; + }; + + case "AMBUSH": + { + _ambush2 = if ("AMBUSH2:" in _UCthis || "AMBUSH2" in _UCthis || "AMBUSHDIR2:" in _UCthis) then {true} else {false}; + _ambushdistance = [_currpos,(_grp getvariable "UPSMON_Positiontoambush")] call UPSMON_distancePosSqr; + _targetdistance = 1000; + _targetknowaboutyou = 0; + _linkactivate = false; + + if (!isnull _target) then {_targetdistance = [_currpos,getposATL _target] call UPSMON_distancePosSqr;_targetknowaboutyou = _target knowsabout _npc;}; + //Ambush enemy is nearly aproach + //_ambushdist = 50; + // replaced _target by _NearestEnemy + + If (_grp getvariable ["UPSMON_LINKED",0] > 0) then + { + { + If (side _x == _side) then + { + If (round ([_currpos,getposATL (leader _x)] call UPSMON_distancePosSqr) <= (_grp getvariable ["UPSMON_LINKED",0])) then + { + If (_x getvariable "UPSMON_AMBUSHFIRE") + exitwith {_linkactivate = true}; + }; + }; + } foreach UPSMON_NPCs + }; + + If (((_supstatus != "") || _linkactivate || (_grp getvariable ["UPSMON_AMBUSHWAIT",time]) < time) + || ((!isNull _target && "Air" countType [_target] == 0) + && ((_targetdistance <= _ambushdistance) + ||(round ([getposATL _target,(_grp getvariable "UPSMON_Positiontoambush")] call UPSMON_distancePosSqr) < 10) + || (_npc knowsabout _target > 3 && _ambush2)))) then + { + sleep ((random 0.5) + 1); // let the enemy then get in the area + + if (UPSMON_Debug>0) then {diag_log format["%1: FIREEEEEEEEE!!! Gothit: %2 linkactivate: %3 Distance: %4 PositionToAmbush: %5 AmbushWait:%6 %7",_grpid,_supstatus,_linkactivate,(_targetdistance <= _ambushdistance),_target distance (_grp getvariable "UPSMON_Positiontoambush") < 20,_grp getvariable ["UPSMON_AMBUSHWAIT",time] < time,(_npc knowsabout _target > 3 && _ambush2)]}; + + _npc setBehaviour "COMBAT"; + _npc setcombatmode "YELLOW"; + _grpstatus = "PURPLE"; + + { + If !(isNil "bdetect_enable") then {_x setVariable ["bcombat_task", nil];}; + } foreach units _grp; + + _grp setvariable ["UPSMON_AMBUSHFIRE",true]; + + //No engage yet + _grp setvariable ["UPSMON_grpmission","SUPPORT"]; + }; + }; + + case "FORTIFY": + { + If (!(IsNull _target)) then + { + If (!(_grp getvariable ["UPSMON_Checkbuild",false])) then + { + if (behaviour _npc != "COMBAT") then {_npc setbehaviour "COMBAT"}; + [_grp,_dist] call UPSMON_unitdefend; + + If (_grp getvariable ["UPSMON_OrgGrpMission",""] != "FORTIFY") then + { + If (_ratio > 1.2) then + { + _grp setvariable ["UPSMON_Grpmission","SUPPORT"]; + } + }; + }; + } + else + { + If (_grp getvariable ["UPSMON_OrgGrpMission",""] != "FORTIFY") then + { + [_grp,(_grp getvariable "UPSMON_Attackpos"),_currpos] call UPSMON_GETINPATROLSRCH; + _grpstatus = "YELLOW" + }; + }; + }; + + case "RETREAT": + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (_targetdist <= 50) then + { + _grp setvariable ["UPSMON_Grpmission","DEFEND"]; + }; + }; + }; + + case "TRANSPORT": + { + If (count _assignedvehicle > 0) then + { + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "MoveToRP" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then + { + _grouptransported = [_grp] call UPSMON_CheckTransported; + + If (!IsNull _grouptransported) then + { + If (!(_grp getvariable ["UPSMON_embarking",false])) then + { + If (_targetdist <= 50) then + { + _destination = (_grp getvariable ["UPSMON_Transportmission",[]]) select 1; + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "MoveToRP") then + { + //Embark group in transport (LAND) + [_grouptransported,_assignedvehicle,_destination] spawn UPSMON_getinassignedveh; + }; + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then + { + if (_currpos select 2 <= 3) then + { + //Embark group in transport (HELI) + [_grouptransported,_assignedvehicle,_destination] spawn UPSMON_getinassignedveh; + }; + }; + }; + }; + } + else + { + //If there are nobody anymore to transport then return to base + [_assignedvehicle select 0] call UPSMON_Returnbase; + }; + }; + + If (_targetdist <= 100) then + { + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDING" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDBASE" || ((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDPZ") then + { + If (unitReady (driver (_assignedvehicle select 0)) || toUpper(landResult (_assignedvehicle select 0)) != "NOTREADY" || (landResult (_assignedvehicle select 0)) == "") then + { + //Make heli land and stop or land and be ready to move :) + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDING") then {If (((getposATL (_assignedvehicle select 0)) select 2) > 20) then {(_assignedvehicle select 0) land "GET OUT";}}; + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDRP") then {If (((getposATL (_assignedvehicle select 0)) select 2) > 20) then {(_assignedvehicle select 0) land "GET IN";}}; + If (((_grp getvariable ["UPSMON_Transportmission",[]]) select 0) == "LANDBASE") then {(_assignedvehicle select 0) land "LAND";}; + }; + }; + }; + } + else + { + _grp setvariable ["UPSMON_Transport",false]; + _grp setvariable ["UPSMON_Transportmission",[]] + }; + }; + + case "WAITTRANSPORT": + { + _grouptransported = [_grp] call UPSMON_CheckTransported; + If (IsNull _grouptransported) then + { + [_grp,_grp getvariable ["UPSMON_TransportDest",[]],"MOVE",_formation,_speedmode,_behaviour,"YELLOW",1] spawn UPSMON_DocreateWP; + }; + }; + + case "SUPPLY": + { + If (true) then + { + + }; + }; + + case "RESUPPLY": + { + + }; + + case "PATROL": + { + _speedmode = Speedmode _npc; + _behaviour = Behaviour _npc; + _wpformation = Formation _npc; + + If (!(_grp getvariable ["UPSMON_InTransport",false])) then + { + + If ("arti" in _typeofgrp) then + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (_targetdist <= 10 && (_grp getvariable ["UPSMON_TIMEONTARGET",time] <= time)) then + { + _makenewtarget=true; + }; + }; + } + else + { + + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (!(_grp getvariable ["UPSMON_embarking",false])) then + { + If (!(_grp getvariable ["UPSMON_Disembarking",false])) then + { + If (!([_targetpos,_areamarker] call UPSMON_pos_fnc_isBlacklisted) + || _stuck + || _targetdist <= 5 + //|| moveToFailed _driver + //|| Unitready _driver + //|| moveToCompleted _driver + || count(waypoints _grp) == 0 + || ((("tank" in _typeofgrp) || ("ship" in _typeofgrp) || ("apc" in _typeofgrp) ||("car" in _typeofgrp)) && _targetdist <= 25) + || (("air" in _typeofgrp && !(_grp getVariable ["UPSMON_landing",false])) && (_targetdist <= 70 || Unitready _driver))) then + { + _makenewtarget=true; + private _leader = leader _grp; + {_x forceSpeed -1; _x doFollow _leader;}count units _grp; + }; + }; + }; + }; + }; + }; + + // Search new patrol pos + if (_makenewtarget) then + { + if (UPSMON_Debug > 0) then {diag_log format ["Grp%1 search newpos",_grp getvariable ["UPSMON_grpid",0]];}; + [_grp,_wpformation,_speedmode,_areamarker,_Behaviour,_combatmode,_typeofgrp] spawn UPSMON_DOPATROL; + }; + }; + + case "FIREMISSION": + { + If (count _attackpos > 0 || count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then + { + If (_grp getvariable ["UPSMON_OnBattery",false]) then + { + //_area = (_attackpos distance (leader _grp))/10;//modified by Barbolani to make the dispersion distance dependant. + If ((!(_grp getvariable ["UPSMON_Batteryfire",false])) and ({((side _x == civilian) and (_x distance _attackpos < (200))) or ((side _x == side (leader _grp)) and (_x distance _attackPos < 100))} count allUnits == 0)/* and (_area > 5)*/) then //modified by Barbolani for Antistasi + { + _artitarget = _attackpos; + _firemission = "HE"; + _roundsask = 1; + _area = 10; + If (count (_grp getvariable ["UPSMON_Artifiremission",[]]) > 0) then + { + _artitarget = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 0; + _firemission = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 1; + _roundsask = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 2; + _area = (_grp getvariable ["UPSMON_Artifiremission",[]]) select 2; + }; + + [_grp,_artitarget,_area,_roundsask,_firemission] spawn UPSMON_artillerydofire; + } + else + { + If (_grp getvariable ["UPSMON_RoundsComplete",false]) then + { + [_grp] call UPSMON_BackToNormal; + _grp setvariable ["UPSMON_OnBattery",false]; + _grp setvariable ["UPSMON_RoundsComplete",false]; + }; + }; + }; + } + else + { + If (_grp getvariable ["UPSMON_RoundsComplete",false]) then + { + [_grp] call UPSMON_BackToNormal; + _grp setvariable ["UPSMON_OnBattery",false]; + _grp setvariable ["UPSMON_RoundsComplete",false]; + }; + }; + }; + + case "RELAX": + { + [_grp,_areamarker] call UPSMON_DORELAX; + }; + + case "STATIC": + { + + }; + +}; + +If (count(waypoints _grp) != 0) then +{ + _wppos = waypointPosition [_grp,count(waypoints _grp)-1]; + _targetpos = _wppos; + _wptype = waypointType [_grp,count(waypoints _grp)-1]; + _targetdist = [_currpos,_targetpos] call UPSMON_distancePosSqr; +}; + +if (!_nowp) then +{ +/////////////////////////////////////////////////////////////////////////// +/////////// Disembarking ////////////////// +////////////////////////////////////////////////////////////////////////// + + If (!(_grp getvariable ["UPSMON_disembarking",false])) then + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (_targetpos select 0 != 0 && _targetpos select 1 != 0) then + { + If (count _assignedvehicle > 0) then + { + [_grp,_assignedvehicle,_dist,_targetdist,_supstatus] call UPSMON_Disembarkment; + }; + }; + }; + }; +/////////////////////////////////////////////////////////////////////////// +/////////// Embarking ////////////////// +////////////////////////////////////////////////////////////////////////// + + If (!(_grp getvariable ["UPSMON_embarking",false])) then + { + if (!(_grp getvariable ["UPSMON_Disembarking",false])) then + { + If (!(_grp getvariable ["UPSMON_searchingpos",false])) then + { + If (!(_grp getVariable ["UPSMON_landing",false])) then + { + [_grp,_typeofgrp,_targetpos,_dist,_targetdist,_assignedvehicle,_supstatus,_speedmode,_behaviour] call UPSMON_Embarkment; + }; + }; + }; + }; + };// !NOWP + + if (({alive _x && !(captive _x)} count units _grp) == 0 || _grp getvariable ["UPSMON_Removegroup",false]) exitwith + { + [_grp,_UCthis] call UPSMON_RESPAWN; + }; + + _grp setvariable ["UPSMON_Lastinfos",[_currpos,_targetpos]]; + _grp setvariable ["UPSMON_lastOpfknowval",_opfknowval]; + _grp setvariable ["UPSMON_LastGrpmission",_grp getvariable ["UPSMON_Grpmission",""]]; + + sleep 0.1; +} \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Scripts/fn_advancedTowingInit.sqf b/AntistasiOfficial.Altis/Scripts/fn_advancedTowingInit.sqf index 7bea8547..1c0ee581 100644 --- a/AntistasiOfficial.Altis/Scripts/fn_advancedTowingInit.sqf +++ b/AntistasiOfficial.Altis/Scripts/fn_advancedTowingInit.sqf @@ -1,8 +1,12 @@ /* The MIT License (MIT) + Copyright (c) 2016 Seth Duda + Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @@ -13,38 +17,39 @@ _surfaceIntersectEndASL = [_positionAGL select 0, _positionAGL select 1, (_objec _surfaces = lineIntersectsSurfaces [_surfaceIntersectStartASL, _surfaceIntersectEndASL, _object, objNull, true, 5]; \ _returnSurfaceASL = AGLToASL _positionAGL; \ { \ - scopeName "surfaceLoop"; \ - if( isNull (_x select 2) ) then { \ - _returnSurfaceASL = _x select 0; \ - breakOut "surfaceLoop"; \ - } else { \ - if!((_x select 2) isKindOf "RopeSegment") then { \ - _objectFileName = str (_x select 2); \ - if((_objectFileName find " t_") == -1 && (_objectFileName find " b_") == -1) then { \ - _returnSurfaceASL = _x select 0; \ - breakOut "surfaceLoop"; \ - }; \ - }; \ - }; \ + scopeName "surfaceLoop"; \ + if( isNull (_x select 2) ) then { \ + _returnSurfaceASL = _x select 0; \ + breakOut "surfaceLoop"; \ + } else { \ + if!((_x select 2) isKindOf "RopeSegment") then { \ + _objectFileName = str (_x select 2); \ + if((_objectFileName find " t_") == -1 && (_objectFileName find " b_") == -1) then { \ + _returnSurfaceASL = _x select 0; \ + breakOut "surfaceLoop"; \ + }; \ + }; \ + }; \ } forEach _surfaces; \ if(_canFloat && (_returnSurfaceASL select 2) < 0) then { \ - _returnSurfaceASL set [2,0]; \ + _returnSurfaceASL set [2,0]; \ }; \ #define SA_Find_Surface_ASL_Under_Model(_object,_modelOffset,_returnSurfaceASL,_canFloat) \ SA_Find_Surface_ASL_Under_Position(_object, (_object modelToWorldVisual _modelOffset), _returnSurfaceASL,_canFloat); - + #define SA_Find_Surface_AGL_Under_Model(_object,_modelOffset,_returnSurfaceAGL,_canFloat) \ SA_Find_Surface_ASL_Under_Model(_object,_modelOffset,_returnSurfaceAGL,_canFloat); \ _returnSurfaceAGL = ASLtoAGL _returnSurfaceAGL; #define SA_Get_Cargo(_vehicle,_cargo) \ if( count (ropeAttachedObjects _vehicle) == 0 ) then { \ - _cargo = objNull; \ + _cargo = objNull; \ } else { \ - _cargo = ((ropeAttachedObjects _vehicle) select 0) getVariable ["SA_Cargo",objNull]; \ + _cargo = ((ropeAttachedObjects _vehicle) select 0) getVariable ["SA_Cargo",objNull]; \ }; - + +SA_Advanced_Towing_Install = { // Prevent advanced towing from installing twice if(!isNil "SA_TOW_INIT") exitWith {}; @@ -53,769 +58,815 @@ SA_TOW_INIT = true; diag_log "Advanced Towing Loading..."; SA_Simulate_Towing_Speed = { - - params ["_vehicle"]; - - private ["_runSimulation","_currentCargo","_maxVehicleSpeed","_maxTowedVehicles","_vehicleMass"]; - - _maxVehicleSpeed = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "maxSpeed"); - _vehicleMass = 1000 max (getMass _vehicle); - _maxTowedCargo = missionNamespace getVariable ["SA_MAX_TOWED_CARGO",2]; - _runSimulation = true; - - private ["_currentVehicle","_totalCargoMass","_totalCargoCount","_findNextCargo","_towRopes","_ropeLength"]; - private ["_ends","_endsDistance","_currentMaxSpeed","_newMaxSpeed"]; - - while {_runSimulation} do { - - // Calculate total mass and count of cargo being towed (only takes into account - // cargo that's actively being towed (e.g. there's no slack in the rope) - - _currentVehicle = _vehicle; - _totalCargoMass = 0; - _totalCargoCount = 0; - _findNextCargo = true; - while {_findNextCargo} do { - _findNextCargo = false; - SA_Get_Cargo(_currentVehicle,_currentCargo); - if(!isNull _currentCargo) then { - _towRopes = _currentVehicle getVariable ["SA_Tow_Ropes",[]]; - if(count _towRopes > 0) then { - _ropeLength = ropeLength (_towRopes select 0); - _ends = ropeEndPosition (_towRopes select 0); - _endsDistance = (_ends select 0) distance (_ends select 1); - if( _endsDistance >= _ropeLength - 2 ) then { - _totalCargoMass = _totalCargoMass + (1000 max (getMass _currentCargo)); - _totalCargoCount = _totalCargoCount + 1; - _currentVehicle = _currentCargo; - _findNextCargo = true; - }; - }; - }; - }; - - _newMaxSpeed = _maxVehicleSpeed / (1 max ((_totalCargoMass / _vehicleMass) * 2)); - _newMaxSpeed = (_maxVehicleSpeed * 0.75) min _newMaxSpeed; - - // Prevent vehicle from moving if trying to move more cargo than pre-defined max - if(_totalCargoCount > _maxTowedCargo) then { - _newMaxSpeed = 0; - }; - - _currentMaxSpeed = _vehicle getVariable ["SA_Max_Tow_Speed",_maxVehicleSpeed]; - - if(_currentMaxSpeed != _newMaxSpeed) then { - _vehicle setVariable ["SA_Max_Tow_Speed",_newMaxSpeed]; - }; - - sleep 0.1; - - }; + + params ["_vehicle"]; + + private ["_runSimulation","_currentCargo","_maxVehicleSpeed","_maxTowedVehicles","_vehicleMass"]; + + _maxVehicleSpeed = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "maxSpeed"); + _vehicleMass = 1000 max (getMass _vehicle); + _maxTowedCargo = missionNamespace getVariable ["SA_MAX_TOWED_CARGO",2]; + _runSimulation = true; + + private ["_currentVehicle","_totalCargoMass","_totalCargoCount","_findNextCargo","_towRopes","_ropeLength"]; + private ["_ends","_endsDistance","_currentMaxSpeed","_newMaxSpeed"]; + + while {_runSimulation} do { + + // Calculate total mass and count of cargo being towed (only takes into account + // cargo that's actively being towed (e.g. there's no slack in the rope) + + _currentVehicle = _vehicle; + _totalCargoMass = 0; + _totalCargoCount = 0; + _findNextCargo = true; + while {_findNextCargo} do { + _findNextCargo = false; + SA_Get_Cargo(_currentVehicle,_currentCargo); + if(!isNull _currentCargo) then { + _towRopes = _currentVehicle getVariable ["SA_Tow_Ropes",[]]; + if(count _towRopes > 0) then { + _ropeLength = ropeLength (_towRopes select 0); + _ends = ropeEndPosition (_towRopes select 0); + _endsDistance = (_ends select 0) distance (_ends select 1); + if( _endsDistance >= _ropeLength - 2 ) then { + _totalCargoMass = _totalCargoMass + (1000 max (getMass _currentCargo)); + _totalCargoCount = _totalCargoCount + 1; + _currentVehicle = _currentCargo; + _findNextCargo = true; + }; + }; + }; + }; + + _newMaxSpeed = _maxVehicleSpeed / (1 max ((_totalCargoMass / _vehicleMass) * 2)); + _newMaxSpeed = (_maxVehicleSpeed * 0.75) min _newMaxSpeed; + + // Prevent vehicle from moving if trying to move more cargo than pre-defined max + if(_totalCargoCount > _maxTowedCargo) then { + _newMaxSpeed = 0; + }; + + _currentMaxSpeed = _vehicle getVariable ["SA_Max_Tow_Speed",_maxVehicleSpeed]; + + if(_currentMaxSpeed != _newMaxSpeed) then { + _vehicle setVariable ["SA_Max_Tow_Speed",_newMaxSpeed]; + }; + + sleep 0.1; + + }; }; SA_Simulate_Towing = { - params ["_vehicle","_vehicleHitchModelPos","_cargo","_cargoHitchModelPos","_ropeLength"]; - - private ["_lastCargoHitchPosition","_lastCargoVectorDir","_cargoLength","_maxDistanceToCargo","_lastMovedCargoPosition","_cargoHitchPoints"]; - private ["_vehicleHitchPosition","_cargoHitchPosition","_newCargoHitchPosition","_cargoVector","_movedCargoVector","_attachedObjects","_currentCargo"]; - private ["_newCargoDir","_lastCargoVectorDir","_newCargoPosition","_doExit","_cargoPosition","_vehiclePosition","_maxVehicleSpeed","_vehicleMass","_cargoMass","_cargoCanFloat"]; - private ["_cargoCorner1AGL","_cargoCorner1ASL","_cargoCorner2AGL","_cargoCorner2ASL","_cargoCorner3AGL","_cargoCorner3ASL","_cargoCorner4AGL","_cargoCorner4ASL","_surfaceNormal1","_surfaceNormal2","_surfaceNormal"]; - private ["_cargoCenterASL","_surfaceHeight","_surfaceHeight2","_maxSurfaceHeight"]; - - _maxVehicleSpeed = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "maxSpeed"); - _cargoCanFloat = if( getNumber (configFile >> "CfgVehicles" >> typeOf _cargo >> "canFloat") == 1 ) then { true } else { false }; - - private ["_cargoCenterOfMassAGL","_cargoModelCenterGroundPosition"]; - SA_Find_Surface_AGL_Under_Model(_cargo,getCenterOfMass _cargo,_cargoCenterOfMassAGL,_cargoCanFloat); - _cargoModelCenterGroundPosition = _cargo worldToModelVisual _cargoCenterOfMassAGL; - _cargoModelCenterGroundPosition set [0,0]; - _cargoModelCenterGroundPosition set [1,0]; - _cargoModelCenterGroundPosition set [2, (_cargoModelCenterGroundPosition select 2) - 0.05]; // Adjust height so that it doesn't ride directly on ground - - // Calculate cargo model corner points - private ["_cargoCornerPoints"]; - _cargoCornerPoints = [_cargo] call SA_Get_Corner_Points; - _corner1 = _cargoCornerPoints select 0; - _corner2 = _cargoCornerPoints select 1; - _corner3 = _cargoCornerPoints select 2; - _corner4 = _cargoCornerPoints select 3; - - - // Try to set cargo owner if the towing client doesn't own the cargo - if(local _vehicle && !local _cargo) then { - [[_cargo, clientOwner],"SA_Set_Owner"] call SA_RemoteExecServer; - }; - - _vehicleHitchModelPos set [2,0]; - _cargoHitchModelPos set [2,0]; - - _lastCargoHitchPosition = _cargo modelToWorld _cargoHitchModelPos; - _lastCargoVectorDir = vectorDir _cargo; - _lastMovedCargoPosition = getPos _cargo; - - _cargoHitchPoints = [_cargo] call SA_Get_Hitch_Points; - _cargoLength = (_cargoHitchPoints select 0) distance (_cargoHitchPoints select 1); - - _vehicleMass = 1 max (getMass _vehicle); - _cargoMass = getMass _cargo; - if(_cargoMass == 0) then { - _cargoMass = _vehicleMass; - }; - - _maxDistanceToCargo = _ropeLength; - - _doExit = false; - - // Start vehicle speed simulation - [_vehicle] spawn SA_Simulate_Towing_Speed; - - while {!_doExit} do { - - _vehicleHitchPosition = _vehicle modelToWorld _vehicleHitchModelPos; - _vehicleHitchPosition set [2,0]; - _cargoHitchPosition = _lastCargoHitchPosition; - _cargoHitchPosition set [2,0]; - - _cargoPosition = getPos _cargo; - _vehiclePosition = getPos _vehicle; - - if(_vehicleHitchPosition distance _cargoHitchPosition > _maxDistanceToCargo) then { - - // Calculated simulated towing position + direction - _newCargoHitchPosition = _vehicleHitchPosition vectorAdd ((_vehicleHitchPosition vectorFromTo _cargoHitchPosition) vectorMultiply _ropeLength); - _cargoVector = _lastCargoVectorDir vectorMultiply _cargoLength; - _movedCargoVector = _newCargoHitchPosition vectorDiff _lastCargoHitchPosition; - _newCargoDir = vectorNormalized (_cargoVector vectorAdd _movedCargoVector); - //if(_isRearCargoHitch) then { - // _newCargoDir = _newCargoDir vectorMultiply -1; - //}; - _lastCargoVectorDir = _newCargoDir; - _newCargoPosition = _newCargoHitchPosition vectorAdd (_newCargoDir vectorMultiply -(vectorMagnitude (_cargoHitchModelPos))); - - SA_Find_Surface_ASL_Under_Position(_cargo,_newCargoPosition,_newCargoPosition,_cargoCanFloat); - - // Calculate surface normal (up) (more realistic than surfaceNormal function) - SA_Find_Surface_ASL_Under_Model(_cargo,_corner1,_cargoCorner1ASL,_cargoCanFloat); - SA_Find_Surface_ASL_Under_Model(_cargo,_corner2,_cargoCorner2ASL,_cargoCanFloat); - SA_Find_Surface_ASL_Under_Model(_cargo,_corner3,_cargoCorner3ASL,_cargoCanFloat); - SA_Find_Surface_ASL_Under_Model(_cargo,_corner4,_cargoCorner4ASL,_cargoCanFloat); - _surfaceNormal1 = (_cargoCorner1ASL vectorFromTo _cargoCorner3ASL) vectorCrossProduct (_cargoCorner1ASL vectorFromTo _cargoCorner2ASL); - _surfaceNormal2 = (_cargoCorner4ASL vectorFromTo _cargoCorner2ASL) vectorCrossProduct (_cargoCorner4ASL vectorFromTo _cargoCorner3ASL); - _surfaceNormal = _surfaceNormal1 vectorAdd _surfaceNormal2; - - if(missionNamespace getVariable ["SA_TOW_DEBUG_ENABLED", false]) then { - if(isNil "sa_tow_debug_arrow_1") then { - sa_tow_debug_arrow_1 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_2 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_3 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_4 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - }; - sa_tow_debug_arrow_1 setPosASL _cargoCorner1ASL; - sa_tow_debug_arrow_1 setVectorUp _surfaceNormal; - sa_tow_debug_arrow_2 setPosASL _cargoCorner2ASL; - sa_tow_debug_arrow_2 setVectorUp _surfaceNormal; - sa_tow_debug_arrow_3 setPosASL _cargoCorner3ASL; - sa_tow_debug_arrow_3 setVectorUp _surfaceNormal; - sa_tow_debug_arrow_4 setPosASL _cargoCorner4ASL; - sa_tow_debug_arrow_4 setVectorUp _surfaceNormal; - }; - - // Calculate adjusted surface height based on surface normal (prevents vehicle from clipping into ground) - _cargoCenterASL = AGLtoASL (_cargo modelToWorldVisual [0,0,0]); - _cargoCenterASL set [2,0]; - _surfaceHeight = ((_cargoCorner1ASL vectorAdd ( _cargoCenterASL vectorMultiply -1)) vectorDotProduct _surfaceNormal1) / ([0,0,1] vectorDotProduct _surfaceNormal1); - _surfaceHeight2 = ((_cargoCorner1ASL vectorAdd ( _cargoCenterASL vectorMultiply -1)) vectorDotProduct _surfaceNormal2) / ([0,0,1] vectorDotProduct _surfaceNormal2); - _maxSurfaceHeight = (_newCargoPosition select 2) max _surfaceHeight max _surfaceHeight2; - _newCargoPosition set [2, _maxSurfaceHeight ]; - - _newCargoPosition = _newCargoPosition vectorAdd ( _cargoModelCenterGroundPosition vectorMultiply -1 ); - - _cargo setVectorDir _newCargoDir; - _cargo setVectorUp _surfaceNormal; - _cargo setPosWorld _newCargoPosition; - - _lastCargoHitchPosition = _newCargoHitchPosition; - _maxDistanceToCargo = _vehicleHitchPosition distance _newCargoHitchPosition; - _lastMovedCargoPosition = _cargoPosition; - - _massAdjustedMaxSpeed = _vehicle getVariable ["SA_Max_Tow_Speed",_maxVehicleSpeed]; - if(speed _vehicle > (_massAdjustedMaxSpeed)+0.1) then { - _vehicle setVelocity ((vectorNormalized (velocity _vehicle)) vectorMultiply (_massAdjustedMaxSpeed/3.6)); - }; - - } else { - - if(_lastMovedCargoPosition distance _cargoPosition > 2) then { - _lastCargoHitchPosition = _cargo modelToWorld _cargoHitchModelPos; - _lastCargoVectorDir = vectorDir _cargo; - }; - - }; - - // If vehicle isn't local to the client, switch client running towing simulation - if(!local _vehicle) then { - [_this,"SA_Simulate_Towing",_vehicle] call SA_RemoteExec; - _doExit = true; - }; - - // If the vehicle isn't towing anything, stop the towing simulation - SA_Get_Cargo(_vehicle,_currentCargo); - if(isNull _currentCargo) then { - _doExit = true; - }; - - sleep 0.01; - - }; + params ["_vehicle","_vehicleHitchModelPos","_cargo","_cargoHitchModelPos","_ropeLength"]; + + private ["_lastCargoHitchPosition","_lastCargoVectorDir","_cargoLength","_maxDistanceToCargo","_lastMovedCargoPosition","_cargoHitchPoints"]; + private ["_vehicleHitchPosition","_cargoHitchPosition","_newCargoHitchPosition","_cargoVector","_movedCargoVector","_attachedObjects","_currentCargo"]; + private ["_newCargoDir","_lastCargoVectorDir","_newCargoPosition","_doExit","_cargoPosition","_vehiclePosition","_maxVehicleSpeed","_vehicleMass","_cargoMass","_cargoCanFloat"]; + private ["_cargoCorner1AGL","_cargoCorner1ASL","_cargoCorner2AGL","_cargoCorner2ASL","_cargoCorner3AGL","_cargoCorner3ASL","_cargoCorner4AGL","_cargoCorner4ASL","_surfaceNormal1","_surfaceNormal2","_surfaceNormal"]; + private ["_cargoCenterASL","_surfaceHeight","_surfaceHeight2","_maxSurfaceHeight"]; + + _maxVehicleSpeed = getNumber (configFile >> "CfgVehicles" >> typeOf _vehicle >> "maxSpeed"); + _cargoCanFloat = if( getNumber (configFile >> "CfgVehicles" >> typeOf _cargo >> "canFloat") == 1 ) then { true } else { false }; + + private ["_cargoCenterOfMassAGL","_cargoModelCenterGroundPosition"]; + SA_Find_Surface_AGL_Under_Model(_cargo,getCenterOfMass _cargo,_cargoCenterOfMassAGL,_cargoCanFloat); + _cargoModelCenterGroundPosition = _cargo worldToModelVisual _cargoCenterOfMassAGL; + _cargoModelCenterGroundPosition set [0,0]; + _cargoModelCenterGroundPosition set [1,0]; + _cargoModelCenterGroundPosition set [2, (_cargoModelCenterGroundPosition select 2) - 0.05]; // Adjust height so that it doesn't ride directly on ground + + // Calculate cargo model corner points + private ["_cargoCornerPoints"]; + _cargoCornerPoints = [_cargo] call SA_Get_Corner_Points; + _corner1 = _cargoCornerPoints select 0; + _corner2 = _cargoCornerPoints select 1; + _corner3 = _cargoCornerPoints select 2; + _corner4 = _cargoCornerPoints select 3; + + + // Try to set cargo owner if the towing client doesn't own the cargo + if(local _vehicle && !local _cargo) then { + [[_cargo, clientOwner],"SA_Set_Owner"] call SA_RemoteExecServer; + }; + + _vehicleHitchModelPos set [2,0]; + _cargoHitchModelPos set [2,0]; + + _lastCargoHitchPosition = _cargo modelToWorld _cargoHitchModelPos; + _lastCargoVectorDir = vectorDir _cargo; + _lastMovedCargoPosition = getPos _cargo; + + _cargoHitchPoints = [_cargo] call SA_Get_Hitch_Points; + _cargoLength = (_cargoHitchPoints select 0) distance (_cargoHitchPoints select 1); + + _vehicleMass = 1 max (getMass _vehicle); + _cargoMass = getMass _cargo; + if(_cargoMass == 0) then { + _cargoMass = _vehicleMass; + }; + + _maxDistanceToCargo = _ropeLength; + + _doExit = false; + + // Start vehicle speed simulation + [_vehicle] spawn SA_Simulate_Towing_Speed; + + while {!_doExit} do { + + _vehicleHitchPosition = _vehicle modelToWorld _vehicleHitchModelPos; + _vehicleHitchPosition set [2,0]; + _cargoHitchPosition = _lastCargoHitchPosition; + _cargoHitchPosition set [2,0]; + + _cargoPosition = getPos _cargo; + _vehiclePosition = getPos _vehicle; + + if(_vehicleHitchPosition distance _cargoHitchPosition > _maxDistanceToCargo) then { + + // Calculated simulated towing position + direction + _newCargoHitchPosition = _vehicleHitchPosition vectorAdd ((_vehicleHitchPosition vectorFromTo _cargoHitchPosition) vectorMultiply _ropeLength); + _cargoVector = _lastCargoVectorDir vectorMultiply _cargoLength; + _movedCargoVector = _newCargoHitchPosition vectorDiff _lastCargoHitchPosition; + _newCargoDir = vectorNormalized (_cargoVector vectorAdd _movedCargoVector); + //if(_isRearCargoHitch) then { + // _newCargoDir = _newCargoDir vectorMultiply -1; + //}; + _lastCargoVectorDir = _newCargoDir; + _newCargoPosition = _newCargoHitchPosition vectorAdd (_newCargoDir vectorMultiply -(vectorMagnitude (_cargoHitchModelPos))); + + SA_Find_Surface_ASL_Under_Position(_cargo,_newCargoPosition,_newCargoPosition,_cargoCanFloat); + + // Calculate surface normal (up) (more realistic than surfaceNormal function) + SA_Find_Surface_ASL_Under_Model(_cargo,_corner1,_cargoCorner1ASL,_cargoCanFloat); + SA_Find_Surface_ASL_Under_Model(_cargo,_corner2,_cargoCorner2ASL,_cargoCanFloat); + SA_Find_Surface_ASL_Under_Model(_cargo,_corner3,_cargoCorner3ASL,_cargoCanFloat); + SA_Find_Surface_ASL_Under_Model(_cargo,_corner4,_cargoCorner4ASL,_cargoCanFloat); + _surfaceNormal1 = (_cargoCorner1ASL vectorFromTo _cargoCorner3ASL) vectorCrossProduct (_cargoCorner1ASL vectorFromTo _cargoCorner2ASL); + _surfaceNormal2 = (_cargoCorner4ASL vectorFromTo _cargoCorner2ASL) vectorCrossProduct (_cargoCorner4ASL vectorFromTo _cargoCorner3ASL); + _surfaceNormal = _surfaceNormal1 vectorAdd _surfaceNormal2; + + if(missionNamespace getVariable ["SA_TOW_DEBUG_ENABLED", false]) then { + if(isNil "sa_tow_debug_arrow_1") then { + sa_tow_debug_arrow_1 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_2 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_3 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_4 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + }; + sa_tow_debug_arrow_1 setPosASL _cargoCorner1ASL; + sa_tow_debug_arrow_1 setVectorUp _surfaceNormal; + sa_tow_debug_arrow_2 setPosASL _cargoCorner2ASL; + sa_tow_debug_arrow_2 setVectorUp _surfaceNormal; + sa_tow_debug_arrow_3 setPosASL _cargoCorner3ASL; + sa_tow_debug_arrow_3 setVectorUp _surfaceNormal; + sa_tow_debug_arrow_4 setPosASL _cargoCorner4ASL; + sa_tow_debug_arrow_4 setVectorUp _surfaceNormal; + }; + + // Calculate adjusted surface height based on surface normal (prevents vehicle from clipping into ground) + _cargoCenterASL = AGLtoASL (_cargo modelToWorldVisual [0,0,0]); + _cargoCenterASL set [2,0]; + _surfaceHeight = ((_cargoCorner1ASL vectorAdd ( _cargoCenterASL vectorMultiply -1)) vectorDotProduct _surfaceNormal1) / ([0,0,1] vectorDotProduct _surfaceNormal1); + _surfaceHeight2 = ((_cargoCorner1ASL vectorAdd ( _cargoCenterASL vectorMultiply -1)) vectorDotProduct _surfaceNormal2) / ([0,0,1] vectorDotProduct _surfaceNormal2); + _maxSurfaceHeight = (_newCargoPosition select 2) max _surfaceHeight max _surfaceHeight2; + _newCargoPosition set [2, _maxSurfaceHeight ]; + + _newCargoPosition = _newCargoPosition vectorAdd ( _cargoModelCenterGroundPosition vectorMultiply -1 ); + + _cargo setVectorDir _newCargoDir; + _cargo setVectorUp _surfaceNormal; + _cargo setPosWorld _newCargoPosition; + + _lastCargoHitchPosition = _newCargoHitchPosition; + _maxDistanceToCargo = _vehicleHitchPosition distance _newCargoHitchPosition; + _lastMovedCargoPosition = _cargoPosition; + + _massAdjustedMaxSpeed = _vehicle getVariable ["SA_Max_Tow_Speed",_maxVehicleSpeed]; + if(speed _vehicle > (_massAdjustedMaxSpeed)+0.1) then { + _vehicle setVelocity ((vectorNormalized (velocity _vehicle)) vectorMultiply (_massAdjustedMaxSpeed/3.6)); + }; + + } else { + + if(_lastMovedCargoPosition distance _cargoPosition > 2) then { + _lastCargoHitchPosition = _cargo modelToWorld _cargoHitchModelPos; + _lastCargoVectorDir = vectorDir _cargo; + }; + + }; + + // If vehicle isn't local to the client, switch client running towing simulation + if(!local _vehicle) then { + [_this,"SA_Simulate_Towing",_vehicle] call SA_RemoteExec; + _doExit = true; + }; + + // If the vehicle isn't towing anything, stop the towing simulation + SA_Get_Cargo(_vehicle,_currentCargo); + if(isNull _currentCargo) then { + _doExit = true; + }; + + sleep 0.01; + + }; }; SA_Get_Corner_Points = { - params ["_vehicle"]; - private ["_centerOfMass","_bbr","_p1","_p2","_rearCorner","_rearCorner2","_frontCorner","_frontCorner2"]; - private ["_maxWidth","_widthOffset","_maxLength","_lengthOffset","_widthFactor","_lengthFactor"]; - - // Correct width and length factor for air - _widthFactor = 0.75; - _lengthFactor = 0.75; - if(_vehicle isKindOf "Air") then { - _widthFactor = 0.3; - }; - if(_vehicle isKindOf "Helicopter") then { - _widthFactor = 0.2; - _lengthFactor = 0.45; - }; - - _centerOfMass = getCenterOfMass _vehicle; - _bbr = boundingBoxReal _vehicle; - _p1 = _bbr select 0; - _p2 = _bbr select 1; - _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); - _widthOffset = ((_maxWidth / 2) - abs ( _centerOfMass select 0 )) * _widthFactor; - _maxLength = abs ((_p2 select 1) - (_p1 select 1)); - _lengthOffset = ((_maxLength / 2) - abs (_centerOfMass select 1 )) * _lengthFactor; - _rearCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) - _lengthOffset, _centerOfMass select 2]; - _rearCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) - _lengthOffset, _centerOfMass select 2]; - _frontCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) + _lengthOffset, _centerOfMass select 2]; - _frontCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) + _lengthOffset, _centerOfMass select 2]; - - if(missionNamespace getVariable ["SA_TOW_DEBUG_ENABLED", false]) then { - if(isNil "sa_tow_debug_arrow_1") then { - sa_tow_debug_arrow_1 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_2 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_3 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - sa_tow_debug_arrow_4 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; - }; - sa_tow_debug_arrow_1 setPosASL AGLtoASL (_vehicle modelToWorldVisual _rearCorner); - sa_tow_debug_arrow_2 setPosASL AGLtoASL (_vehicle modelToWorldVisual _rearCorner2); - sa_tow_debug_arrow_3 setPosASL AGLtoASL (_vehicle modelToWorldVisual _frontCorner); - sa_tow_debug_arrow_4 setPosASL AGLtoASL (_vehicle modelToWorldVisual _frontCorner2); - }; - - [_rearCorner,_rearCorner2,_frontCorner,_frontCorner2]; + params ["_vehicle"]; + private ["_centerOfMass","_bbr","_p1","_p2","_rearCorner","_rearCorner2","_frontCorner","_frontCorner2"]; + private ["_maxWidth","_widthOffset","_maxLength","_lengthOffset","_widthFactor","_lengthFactor"]; + + // Correct width and length factor for air + _widthFactor = 0.75; + _lengthFactor = 0.75; + if(_vehicle isKindOf "Air") then { + _widthFactor = 0.3; + }; + if(_vehicle isKindOf "Helicopter") then { + _widthFactor = 0.2; + _lengthFactor = 0.45; + }; + + _centerOfMass = getCenterOfMass _vehicle; + _bbr = boundingBoxReal _vehicle; + _p1 = _bbr select 0; + _p2 = _bbr select 1; + _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); + _widthOffset = ((_maxWidth / 2) - abs ( _centerOfMass select 0 )) * _widthFactor; + _maxLength = abs ((_p2 select 1) - (_p1 select 1)); + _lengthOffset = ((_maxLength / 2) - abs (_centerOfMass select 1 )) * _lengthFactor; + _rearCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) - _lengthOffset, _centerOfMass select 2]; + _rearCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) - _lengthOffset, _centerOfMass select 2]; + _frontCorner = [(_centerOfMass select 0) + _widthOffset, (_centerOfMass select 1) + _lengthOffset, _centerOfMass select 2]; + _frontCorner2 = [(_centerOfMass select 0) - _widthOffset, (_centerOfMass select 1) + _lengthOffset, _centerOfMass select 2]; + + if(missionNamespace getVariable ["SA_TOW_DEBUG_ENABLED", false]) then { + if(isNil "sa_tow_debug_arrow_1") then { + sa_tow_debug_arrow_1 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_2 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_3 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + sa_tow_debug_arrow_4 = "Sign_Arrow_F" createVehicleLocal [0,0,0]; + }; + sa_tow_debug_arrow_1 setPosASL AGLtoASL (_vehicle modelToWorldVisual _rearCorner); + sa_tow_debug_arrow_2 setPosASL AGLtoASL (_vehicle modelToWorldVisual _rearCorner2); + sa_tow_debug_arrow_3 setPosASL AGLtoASL (_vehicle modelToWorldVisual _frontCorner); + sa_tow_debug_arrow_4 setPosASL AGLtoASL (_vehicle modelToWorldVisual _frontCorner2); + }; + + [_rearCorner,_rearCorner2,_frontCorner,_frontCorner2]; }; SA_Get_Hitch_Points = { - params ["_vehicle"]; - private ["_cornerPoints","_rearCorner","_rearCorner2","_frontCorner","_frontCorner2","_rearHitchPoint"]; - private ["_frontHitchPoint","_sideLeftPoint","_sideRightPoint"]; - _cornerPoints = [_vehicle] call SA_Get_Corner_Points; - _rearCorner = _cornerPoints select 0; - _rearCorner2 = _cornerPoints select 1; - _frontCorner = _cornerPoints select 2; - _frontCorner2 = _cornerPoints select 3; - _rearHitchPoint = ((_rearCorner vectorDiff _rearCorner2) vectorMultiply 0.5) vectorAdd _rearCorner2; - _frontHitchPoint = ((_frontCorner vectorDiff _frontCorner2) vectorMultiply 0.5) vectorAdd _frontCorner2; - //_sideLeftPoint = ((_frontCorner vectorDiff _rearCorner) vectorMultiply 0.5) vectorAdd _frontCorner; - //_sideRightPoint = ((_frontCorner2 vectorDiff _rearCorner2) vectorMultiply 0.5) vectorAdd _frontCorner2; - [_frontHitchPoint,_rearHitchPoint]; + params ["_vehicle"]; + private ["_cornerPoints","_rearCorner","_rearCorner2","_frontCorner","_frontCorner2","_rearHitchPoint"]; + private ["_frontHitchPoint","_sideLeftPoint","_sideRightPoint"]; + _cornerPoints = [_vehicle] call SA_Get_Corner_Points; + _rearCorner = _cornerPoints select 0; + _rearCorner2 = _cornerPoints select 1; + _frontCorner = _cornerPoints select 2; + _frontCorner2 = _cornerPoints select 3; + _rearHitchPoint = ((_rearCorner vectorDiff _rearCorner2) vectorMultiply 0.5) vectorAdd _rearCorner2; + _frontHitchPoint = ((_frontCorner vectorDiff _frontCorner2) vectorMultiply 0.5) vectorAdd _frontCorner2; + //_sideLeftPoint = ((_frontCorner vectorDiff _rearCorner) vectorMultiply 0.5) vectorAdd _frontCorner; + //_sideRightPoint = ((_frontCorner2 vectorDiff _rearCorner2) vectorMultiply 0.5) vectorAdd _frontCorner2; + [_frontHitchPoint,_rearHitchPoint]; }; SA_Attach_Tow_Ropes = { - params ["_cargo","_player"]; - _vehicle = _player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; - if(!isNull _vehicle) then { - if(local _vehicle) then { - private ["_towRopes","_vehicleHitch","_cargoHitch","_objDistance","_ropeLength"]; - _towRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; - if(count _towRopes == 1) then { - - /* - private ["_cargoHitchPoints","_distanceToFrontHitch","_distanceToRearHitch","_isRearCargoHitch"]; - _cargoHitchPoints = [_cargo] call SA_Get_Hitch_Points; - _distanceToFrontHitch = player distance (_cargo modelToWorld (_cargoHitchPoints select 0)); - _distanceToRearHitch = player distance (_cargo modelToWorld (_cargoHitchPoints select 1)); - if( _distanceToFrontHitch < _distanceToRearHitch ) then { - _cargoHitch = _cargoHitchPoints select 0; - _isRearCargoHitch = false; - } else { - _cargoHitch = _cargoHitchPoints select 1; - _isRearCargoHitch = true; - }; - */ - - _cargoHitch = ([_cargo] call SA_Get_Hitch_Points) select 0; - - _vehicleHitch = ([_vehicle] call SA_Get_Hitch_Points) select 1; - _ropeLength = (ropeLength (_towRopes select 0)); - _objDistance = ((_vehicle modelToWorld _vehicleHitch) distance (_cargo modelToWorld _cargoHitch)); - if( _objDistance > _ropeLength ) then { - [["The tow ropes are too short. Move vehicle closer.", false],"SA_Hint",_player] call SA_RemoteExec; - } else { - [_vehicle,_player] call SA_Drop_Tow_Ropes; - _helper = "Land_Can_V2_F" createVehicle position _cargo; - _helper attachTo [_cargo, _cargoHitch]; - _helper setVariable ["SA_Cargo",_cargo,true]; - hideObject _helper; - [[_helper],"SA_Hide_Object_Global"] call SA_RemoteExecServer; - [_helper, [0,0,0], [0,0,-1]] ropeAttachTo (_towRopes select 0); - [_vehicle,_vehicleHitch,_cargo,_cargoHitch,_ropeLength] spawn SA_Simulate_Towing; - }; - }; - } else { - [_this,"SA_Attach_Tow_Ropes",_vehicle,true] call SA_RemoteExec; - }; - }; + params ["_cargo","_player"]; + _vehicle = _player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; + if(!isNull _vehicle) then { + if(local _vehicle) then { + private ["_towRopes","_vehicleHitch","_cargoHitch","_objDistance","_ropeLength"]; + _towRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; + if(count _towRopes == 1) then { + + /* + private ["_cargoHitchPoints","_distanceToFrontHitch","_distanceToRearHitch","_isRearCargoHitch"]; + _cargoHitchPoints = [_cargo] call SA_Get_Hitch_Points; + _distanceToFrontHitch = player distance (_cargo modelToWorld (_cargoHitchPoints select 0)); + _distanceToRearHitch = player distance (_cargo modelToWorld (_cargoHitchPoints select 1)); + if( _distanceToFrontHitch < _distanceToRearHitch ) then { + _cargoHitch = _cargoHitchPoints select 0; + _isRearCargoHitch = false; + } else { + _cargoHitch = _cargoHitchPoints select 1; + _isRearCargoHitch = true; + }; + */ + + _cargoHitch = ([_cargo] call SA_Get_Hitch_Points) select 0; + + _vehicleHitch = ([_vehicle] call SA_Get_Hitch_Points) select 1; + _ropeLength = (ropeLength (_towRopes select 0)); + _objDistance = ((_vehicle modelToWorld _vehicleHitch) distance (_cargo modelToWorld _cargoHitch)); + if( _objDistance > _ropeLength ) then { + [["The tow ropes are too short. Move vehicle closer.", false],"SA_Hint",_player] call SA_RemoteExec; + } else { + [_vehicle,_player] call SA_Drop_Tow_Ropes; + _helper = "Land_Can_V2_F" createVehicle position _cargo; + _helper attachTo [_cargo, _cargoHitch]; + _helper setVariable ["SA_Cargo",_cargo,true]; + hideObject _helper; + [[_helper],"SA_Hide_Object_Global"] call SA_RemoteExecServer; + [_helper, [0,0,0], [0,0,-1]] ropeAttachTo (_towRopes select 0); + [_vehicle,_vehicleHitch,_cargo,_cargoHitch,_ropeLength] spawn SA_Simulate_Towing; + }; + }; + } else { + [_this,"SA_Attach_Tow_Ropes",_vehicle,true] call SA_RemoteExec; + }; + }; }; SA_Take_Tow_Ropes = { - params ["_vehicle","_player"]; - if(local _vehicle) then { - private ["_existingTowRopes","_hitchPoint","_rope"]; - _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; - if(count _existingTowRopes == 0) then { - _hitchPoint = [_vehicle] call SA_Get_Hitch_Points select 1; - _rope = ropeCreate [_vehicle, _hitchPoint, 10]; - _vehicle setVariable ["SA_Tow_Ropes",[_rope],true]; - _this call SA_Pickup_Tow_Ropes; - }; - } else { - [_this,"SA_Take_Tow_Ropes",_vehicle,true] call SA_RemoteExec; - }; + params ["_vehicle","_player"]; + if(local _vehicle) then { + diag_log format ["Take Tow Ropes Called %1", _this]; + private ["_existingTowRopes","_hitchPoint","_rope"]; + _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; + if(count _existingTowRopes == 0) then { + _hitchPoint = [_vehicle] call SA_Get_Hitch_Points select 1; + _rope = ropeCreate [_vehicle, _hitchPoint, 10]; + _vehicle setVariable ["SA_Tow_Ropes",[_rope],true]; + _this call SA_Pickup_Tow_Ropes; + }; + } else { + [_this,"SA_Take_Tow_Ropes",_vehicle,true] call SA_RemoteExec; + }; }; SA_Pickup_Tow_Ropes = { - params ["_vehicle","_player"]; - if(local _vehicle) then { - private ["_attachedObj","_helper"]; - { - _attachedObj = _x; - { - _attachedObj ropeDetach _x; - } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); - deleteVehicle _attachedObj; - } forEach ropeAttachedObjects _vehicle; - _helper = "Land_Can_V2_F" createVehicle position _player; - { - [_helper, [0, 0, 0], [0,0,-1]] ropeAttachTo _x; - _helper attachTo [_player, [-0.1, 0.1, 0.15], "Pelvis"]; - } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); - hideObject _helper; - [[_helper],"SA_Hide_Object_Global"] call SA_RemoteExecServer; - _player setVariable ["SA_Tow_Ropes_Vehicle", _vehicle,true]; - _player setVariable ["SA_Tow_Ropes_Pick_Up_Helper", _helper,true]; - } else { - [_this,"SA_Pickup_Tow_Ropes",_vehicle,true] call SA_RemoteExec; - }; + params ["_vehicle","_player"]; + if(local _vehicle) then { + private ["_attachedObj","_helper"]; + { + _attachedObj = _x; + { + _attachedObj ropeDetach _x; + } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); + deleteVehicle _attachedObj; + } forEach ropeAttachedObjects _vehicle; + _helper = "Land_Can_V2_F" createVehicle position _player; + { + [_helper, [0, 0, 0], [0,0,-1]] ropeAttachTo _x; + _helper attachTo [_player, [-0.1, 0.1, 0.15], "Pelvis"]; + } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); + hideObject _helper; + [[_helper],"SA_Hide_Object_Global"] call SA_RemoteExecServer; + _player setVariable ["SA_Tow_Ropes_Vehicle", _vehicle,true]; + _player setVariable ["SA_Tow_Ropes_Pick_Up_Helper", _helper,true]; + } else { + [_this,"SA_Pickup_Tow_Ropes",_vehicle,true] call SA_RemoteExec; + }; }; SA_Drop_Tow_Ropes = { - params ["_vehicle","_player"]; - if(local _vehicle) then { - private ["_helper"]; - _helper = (_player getVariable ["SA_Tow_Ropes_Pick_Up_Helper", objNull]); - if(!isNull _helper) then { - { - _helper ropeDetach _x; - } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); - detach _helper; - deleteVehicle _helper; - }; - _player setVariable ["SA_Tow_Ropes_Vehicle", nil,true]; - _player setVariable ["SA_Tow_Ropes_Pick_Up_Helper", nil,true]; - } else { - [_this,"SA_Drop_Tow_Ropes",_vehicle,true] call SA_RemoteExec; - }; + params ["_vehicle","_player"]; + if(local _vehicle) then { + private ["_helper"]; + _helper = (_player getVariable ["SA_Tow_Ropes_Pick_Up_Helper", objNull]); + if(!isNull _helper) then { + { + _helper ropeDetach _x; + } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); + detach _helper; + deleteVehicle _helper; + }; + _player setVariable ["SA_Tow_Ropes_Vehicle", nil,true]; + _player setVariable ["SA_Tow_Ropes_Pick_Up_Helper", nil,true]; + } else { + [_this,"SA_Drop_Tow_Ropes",_vehicle,true] call SA_RemoteExec; + }; }; SA_Put_Away_Tow_Ropes = { - params ["_vehicle","_player"]; - if(local _vehicle) then { - private ["_existingTowRopes","_hitchPoint","_rope"]; - _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; - if(count _existingTowRopes > 0) then { - _this call SA_Pickup_Tow_Ropes; - _this call SA_Drop_Tow_Ropes; - { - ropeDestroy _x; - } forEach _existingTowRopes; - _vehicle setVariable ["SA_Tow_Ropes",nil,true]; - }; - } else { - [_this,"SA_Put_Away_Tow_Ropes",_vehicle,true] call SA_RemoteExec; - }; + params ["_vehicle","_player"]; + if(local _vehicle) then { + private ["_existingTowRopes","_hitchPoint","_rope"]; + _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; + if(count _existingTowRopes > 0) then { + _this call SA_Pickup_Tow_Ropes; + _this call SA_Drop_Tow_Ropes; + { + ropeDestroy _x; + } forEach _existingTowRopes; + _vehicle setVariable ["SA_Tow_Ropes",nil,true]; + }; + } else { + [_this,"SA_Put_Away_Tow_Ropes",_vehicle,true] call SA_RemoteExec; + }; }; SA_Attach_Tow_Ropes_Action = { - private ["_vehicle","_cargo","_canBeTowed"]; - _cargo = cursorTarget; - _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; - if([_vehicle,_cargo] call SA_Can_Attach_Tow_Ropes) then { - - _canBeTowed = true; - - if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { - if( locked _cargo > 1 ) then { - ["Cannot attach tow ropes to locked vehicle",false] call SA_Hint; - _canBeTowed = false; - }; - }; - - if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { - if(!isNil "ExilePlayerInSafezone") then { - if( ExilePlayerInSafezone ) then { - ["Cannot attach tow ropes in safe zone",false] call SA_Hint; - _canBeTowed = false; - }; - }; - }; - - if(_canBeTowed) then { - [_cargo,player] call SA_Attach_Tow_Ropes; - }; - - }; + private ["_vehicle","_cargo","_canBeTowed"]; + _cargo = cursorTarget; + _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; + if([_vehicle,_cargo] call SA_Can_Attach_Tow_Ropes) then { + + _canBeTowed = true; + + if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { + if( locked _cargo > 1 ) then { + ["Cannot attach tow ropes to locked vehicle",false] call SA_Hint; + _canBeTowed = false; + }; + }; + + if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { + if(!isNil "ExilePlayerInSafezone") then { + if( ExilePlayerInSafezone ) then { + ["Cannot attach tow ropes in safe zone",false] call SA_Hint; + _canBeTowed = false; + }; + }; + }; + + if(_canBeTowed) then { + [_cargo,player] call SA_Attach_Tow_Ropes; + }; + + }; }; SA_Attach_Tow_Ropes_Action_Check = { - private ["_vehicle","_cargo"]; - _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; - _cargo = cursorTarget; - [_vehicle,_cargo] call SA_Can_Attach_Tow_Ropes; + private ["_vehicle","_cargo"]; + _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; + _cargo = cursorTarget; + [_vehicle,_cargo] call SA_Can_Attach_Tow_Ropes; }; SA_Can_Attach_Tow_Ropes = { - params ["_vehicle","_cargo"]; - if(!isNull _vehicle && !isNull _cargo) then { - [_vehicle,_cargo] call SA_Is_Supported_Cargo && vehicle player == player && player distance _cargo < 10 && _vehicle != _cargo; - } else { - false; - }; + params ["_vehicle","_cargo"]; + if(!isNull _vehicle && !isNull _cargo) then { + [_vehicle,_cargo] call SA_Is_Supported_Cargo && vehicle player == player && player distance _cargo < 10 && _vehicle != _cargo; + } else { + false; + }; }; SA_Take_Tow_Ropes_Action = { - private ["_vehicle","_canTakeTowRopes"]; - _vehicle = cursorTarget; - if([_vehicle] call SA_Can_Take_Tow_Ropes) then { - - _canTakeTowRopes = true; - - if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { - if( locked _vehicle > 1 ) then { - ["Cannot take tow ropes from locked vehicle",false] call SA_Hint; - _canTakeTowRopes = false; - }; - }; - - if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { - if(!isNil "ExilePlayerInSafezone") then { - if( ExilePlayerInSafezone ) then { - ["Cannot take tow ropes in safe zone",false] call SA_Hint; - _canTakeTowRopes = false; - }; - }; - }; - - if(_canTakeTowRopes) then { - [_vehicle,player] call SA_Take_Tow_Ropes; - }; - - }; + private ["_vehicle","_canTakeTowRopes"]; + _vehicle = cursorTarget; + if([_vehicle] call SA_Can_Take_Tow_Ropes) then { + + _canTakeTowRopes = true; + + if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { + if( locked _vehicle > 1 ) then { + ["Cannot take tow ropes from locked vehicle",false] call SA_Hint; + _canTakeTowRopes = false; + }; + }; + + if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { + if(!isNil "ExilePlayerInSafezone") then { + if( ExilePlayerInSafezone ) then { + ["Cannot take tow ropes in safe zone",false] call SA_Hint; + _canTakeTowRopes = false; + }; + }; + }; + + if(_canTakeTowRopes) then { + [_vehicle,player] call SA_Take_Tow_Ropes; + }; + + }; }; SA_Take_Tow_Ropes_Action_Check = { - [cursorTarget] call SA_Can_Take_Tow_Ropes; + [cursorTarget] call SA_Can_Take_Tow_Ropes; }; SA_Can_Take_Tow_Ropes = { - params ["_vehicle"]; - if([_vehicle] call SA_Is_Supported_Vehicle) then { - private ["_existingVehicle","_existingTowRopes"]; - _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; - _existingVehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; - vehicle player == player && player distance _vehicle < 10 && (count _existingTowRopes) == 0 && isNull _existingVehicle; - } else { - false; - }; + params ["_vehicle"]; + if([_vehicle] call SA_Is_Supported_Vehicle) then { + private ["_existingVehicle","_existingTowRopes"]; + _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; + _existingVehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; + vehicle player == player && player distance _vehicle < 10 && (count _existingTowRopes) == 0 && isNull _existingVehicle; + } else { + false; + }; }; SA_Put_Away_Tow_Ropes_Action = { - private ["_vehicle","_canPutAwayTowRopes"]; - _vehicle = cursorTarget; - if([_vehicle] call SA_Can_Put_Away_Tow_Ropes) then { - - _canPutAwayTowRopes = true; - - if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { - if( locked _vehicle > 1 ) then { - ["Cannot put away tow ropes in locked vehicle",false] call SA_Hint; - _canPutAwayTowRopes = false; - }; - }; - - if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { - if(!isNil "ExilePlayerInSafezone") then { - if( ExilePlayerInSafezone ) then { - ["Cannot put away tow ropes in safe zone",false] call SA_Hint; - _canPutAwayTowRopes = false; - }; - }; - }; - - if(_canPutAwayTowRopes) then { - [_vehicle,player] call SA_Put_Away_Tow_Ropes; - }; - - }; + private ["_vehicle","_canPutAwayTowRopes"]; + _vehicle = cursorTarget; + if([_vehicle] call SA_Can_Put_Away_Tow_Ropes) then { + + _canPutAwayTowRopes = true; + + if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { + if( locked _vehicle > 1 ) then { + ["Cannot put away tow ropes in locked vehicle",false] call SA_Hint; + _canPutAwayTowRopes = false; + }; + }; + + if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { + if(!isNil "ExilePlayerInSafezone") then { + if( ExilePlayerInSafezone ) then { + ["Cannot put away tow ropes in safe zone",false] call SA_Hint; + _canPutAwayTowRopes = false; + }; + }; + }; + + if(_canPutAwayTowRopes) then { + [_vehicle,player] call SA_Put_Away_Tow_Ropes; + }; + + }; }; SA_Put_Away_Tow_Ropes_Action_Check = { - [cursorTarget] call SA_Can_Put_Away_Tow_Ropes; + [cursorTarget] call SA_Can_Put_Away_Tow_Ropes; }; SA_Can_Put_Away_Tow_Ropes = { - params ["_vehicle"]; - private ["_existingTowRopes"]; - if([_vehicle] call SA_Is_Supported_Vehicle) then { - _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; - vehicle player == player && player distance _vehicle < 10 && (count _existingTowRopes) > 0; - } else { - false; - }; + params ["_vehicle"]; + private ["_existingTowRopes"]; + if([_vehicle] call SA_Is_Supported_Vehicle) then { + _existingTowRopes = _vehicle getVariable ["SA_Tow_Ropes",[]]; + vehicle player == player && player distance _vehicle < 10 && (count _existingTowRopes) > 0; + } else { + false; + }; }; SA_Drop_Tow_Ropes_Action = { - private ["_vehicle"]; - _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; - if([] call SA_Can_Drop_Tow_Ropes) then { - [_vehicle, player] call SA_Drop_Tow_Ropes; - }; + private ["_vehicle"]; + _vehicle = player getVariable ["SA_Tow_Ropes_Vehicle", objNull]; + if([] call SA_Can_Drop_Tow_Ropes) then { + [_vehicle, player] call SA_Drop_Tow_Ropes; + }; }; SA_Drop_Tow_Ropes_Action_Check = { - [] call SA_Can_Drop_Tow_Ropes; + [] call SA_Can_Drop_Tow_Ropes; }; SA_Can_Drop_Tow_Ropes = { - !isNull (player getVariable ["SA_Tow_Ropes_Vehicle", objNull]) && vehicle player == player; + !isNull (player getVariable ["SA_Tow_Ropes_Vehicle", objNull]) && vehicle player == player; }; SA_Pickup_Tow_Ropes_Action = { - private ["_nearbyTowVehicles","_canPickupTowRopes","_vehicle"]; - _nearbyTowVehicles = missionNamespace getVariable ["SA_Nearby_Tow_Vehicles",[]]; - if([] call SA_Can_Pickup_Tow_Ropes) then { - - _vehicle = _nearbyTowVehicles select 0; - _canPickupTowRopes = true; - - if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { - if( locked _vehicle > 1 ) then { - ["Cannot pick up tow ropes from locked vehicle",false] call SA_Hint; - _canPickupTowRopes = false; - }; - }; - - if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { - if(!isNil "ExilePlayerInSafezone") then { - if( ExilePlayerInSafezone ) then { - ["Cannot pick up tow ropes in safe zone",false] call SA_Hint; - _canPickupTowRopes = false; - }; - }; - }; - - if(_canPickupTowRopes) then { - [_nearbyTowVehicles select 0, player] call SA_Pickup_Tow_Ropes; - }; - - }; + private ["_nearbyTowVehicles","_canPickupTowRopes","_vehicle"]; + _nearbyTowVehicles = missionNamespace getVariable ["SA_Nearby_Tow_Vehicles",[]]; + if([] call SA_Can_Pickup_Tow_Ropes) then { + + _vehicle = _nearbyTowVehicles select 0; + _canPickupTowRopes = true; + + if!(missionNamespace getVariable ["SA_TOW_LOCKED_VEHICLES_ENABLED",false]) then { + if( locked _vehicle > 1 ) then { + ["Cannot pick up tow ropes from locked vehicle",false] call SA_Hint; + _canPickupTowRopes = false; + }; + }; + + if!(missionNamespace getVariable ["SA_TOW_IN_EXILE_SAFEZONE_ENABLED",false]) then { + if(!isNil "ExilePlayerInSafezone") then { + if( ExilePlayerInSafezone ) then { + ["Cannot pick up tow ropes in safe zone",false] call SA_Hint; + _canPickupTowRopes = false; + }; + }; + }; + + if(_canPickupTowRopes) then { + [_nearbyTowVehicles select 0, player] call SA_Pickup_Tow_Ropes; + }; + + }; }; SA_Pickup_Tow_Ropes_Action_Check = { - [] call SA_Can_Pickup_Tow_Ropes; + [] call SA_Can_Pickup_Tow_Ropes; }; SA_Can_Pickup_Tow_Ropes = { - isNull (player getVariable ["SA_Tow_Ropes_Vehicle", objNull]) && count (missionNamespace getVariable ["SA_Nearby_Tow_Vehicles",[]]) > 0 && vehicle player == player; + isNull (player getVariable ["SA_Tow_Ropes_Vehicle", objNull]) && count (missionNamespace getVariable ["SA_Nearby_Tow_Vehicles",[]]) > 0 && vehicle player == player; }; SA_TOW_SUPPORTED_VEHICLES = [ - "Tank", "Car", "Ship" + "Tank", "Car", "Ship" ]; SA_Is_Supported_Vehicle = { - params ["_vehicle","_isSupported"]; - _isSupported = false; - if(not isNull _vehicle) then { - { - if(_vehicle isKindOf _x) then { - _isSupported = true; - }; - } forEach (missionNamespace getVariable ["SA_TOW_SUPPORTED_VEHICLES_OVERRIDE",SA_TOW_SUPPORTED_VEHICLES]); - }; - _isSupported; + params ["_vehicle","_isSupported"]; + _isSupported = false; + if(not isNull _vehicle) then { + { + if(_vehicle isKindOf _x) then { + _isSupported = true; + }; + } forEach (missionNamespace getVariable ["SA_TOW_SUPPORTED_VEHICLES_OVERRIDE",SA_TOW_SUPPORTED_VEHICLES]); + }; + _isSupported; }; SA_TOW_RULES = [ - ["Tank","CAN_TOW","Tank"], - ["Tank","CAN_TOW","Car"], - ["Tank","CAN_TOW","Ship"], - ["Tank","CAN_TOW","Air"], - ["Car","CAN_TOW","Tank"], - ["Car","CAN_TOW","Car"], - ["Car","CAN_TOW","Ship"], - ["Car","CAN_TOW","Air"], - ["Ship","CAN_TOW","Ship"] + ["Tank","CAN_TOW","Tank"], + ["Tank","CAN_TOW","Car"], + ["Tank","CAN_TOW","Ship"], + ["Tank","CAN_TOW","Air"], + ["Car","CAN_TOW","Tank"], + ["Car","CAN_TOW","Car"], + ["Car","CAN_TOW","Ship"], + ["Car","CAN_TOW","Air"], + ["Ship","CAN_TOW","Ship"] ]; SA_Is_Supported_Cargo = { - params ["_vehicle","_cargo"]; - private ["_canTow"]; - _canTow = false; - if(not isNull _vehicle && not isNull _cargo) then { - { - if(_vehicle isKindOf (_x select 0)) then { - if(_cargo isKindOf (_x select 2)) then { - if( (toUpper (_x select 1)) == "CAN_TOW" ) then { - _canTow = true; - } else { - _canTow = false; - }; - }; - }; - } forEach (missionNamespace getVariable ["SA_TOW_RULES_OVERRIDE",SA_TOW_RULES]); - }; - _canTow; + params ["_vehicle","_cargo"]; + private ["_canTow"]; + _canTow = false; + if(not isNull _vehicle && not isNull _cargo) then { + { + if(_vehicle isKindOf (_x select 0)) then { + if(_cargo isKindOf (_x select 2)) then { + if( (toUpper (_x select 1)) == "CAN_TOW" ) then { + _canTow = true; + } else { + _canTow = false; + }; + }; + }; + } forEach (missionNamespace getVariable ["SA_TOW_RULES_OVERRIDE",SA_TOW_RULES]); + }; + _canTow; }; SA_Hint = { params ["_msg",["_isSuccess",true]]; if(!isNil "ExileClient_gui_notification_event_addNotification") then { - if(_isSuccess) then { - ["Success", [_msg]] call ExileClient_gui_notification_event_addNotification; - } else { - ["Whoops", [_msg]] call ExileClient_gui_notification_event_addNotification; - }; + if(_isSuccess) then { + ["Success", [_msg]] call ExileClient_gui_notification_event_addNotification; + } else { + ["Whoops", [_msg]] call ExileClient_gui_notification_event_addNotification; + }; } else { hint _msg; }; }; SA_Hide_Object_Global = { - params ["_obj"]; - if( _obj isKindOf "Land_Can_V2_F" ) then { - hideObjectGlobal _obj; - }; + params ["_obj"]; + if( _obj isKindOf "Land_Can_V2_F" ) then { + hideObjectGlobal _obj; + }; }; SA_Set_Owner = { - params ["_obj","_client"]; - _obj setOwner _client; + params ["_obj","_client"]; + _obj setOwner _client; }; SA_Add_Player_Tow_Actions = { + + player addAction ["Deploy Tow Ropes", { + [] call SA_Take_Tow_Ropes_Action; + }, nil, 0, false, true, "", "call SA_Take_Tow_Ropes_Action_Check"]; - player addAction [localize "Str_act_deployTowRopes", { - [] call SA_Take_Tow_Ropes_Action; - }, nil, 4, false, true, "", "call SA_Take_Tow_Ropes_Action_Check"]; - - player addAction [localize "Str_act_putAwayTowRopes", { - [] call SA_Put_Away_Tow_Ropes_Action; - }, nil, 4, false, true, "", "call SA_Put_Away_Tow_Ropes_Action_Check"]; - - player addAction [localize "Str_act_attachTowRopes", { - [] call SA_Attach_Tow_Ropes_Action; - }, nil, 4, false, true, "", "call SA_Attach_Tow_Ropes_Action_Check"]; + player addAction ["Put Away Tow Ropes", { + [] call SA_Put_Away_Tow_Ropes_Action; + }, nil, 0, false, true, "", "call SA_Put_Away_Tow_Ropes_Action_Check"]; - player addAction [localize "Str_act_dropTowRopes", { - [] call SA_Drop_Tow_Ropes_Action; - }, nil, 4, false, true, "", "call SA_Drop_Tow_Ropes_Action_Check"]; + player addAction ["Attach To Tow Ropes", { + [] call SA_Attach_Tow_Ropes_Action; + }, nil, 0, false, true, "", "call SA_Attach_Tow_Ropes_Action_Check"]; - player addAction [localize "Str_act_pickUpTowRopes", { - [] call SA_Pickup_Tow_Ropes_Action; - }, nil, 4, false, true, "", "call SA_Pickup_Tow_Ropes_Action_Check"]; + player addAction ["Drop Tow Ropes", { + [] call SA_Drop_Tow_Ropes_Action; + }, nil, 0, false, true, "", "call SA_Drop_Tow_Ropes_Action_Check"]; - player addEventHandler ["Respawn", { - player setVariable ["SA_Tow_Actions_Loaded",false]; - }]; + player addAction ["Pickup Tow Ropes", { + [] call SA_Pickup_Tow_Ropes_Action; + }, nil, 0, false, true, "", "call SA_Pickup_Tow_Ropes_Action_Check"]; + player addEventHandler ["Respawn", { + player setVariable ["SA_Tow_Actions_Loaded",false]; + }]; + }; SA_Find_Nearby_Tow_Vehicles = { - private ["_nearVehicles","_nearVehiclesWithTowRopes","_vehicle","_ends","_end1","_end2"]; - _nearVehicles = []; - { - _nearVehicles append (position player nearObjects [_x, 30]); - } forEach (missionNamespace getVariable ["SA_TOW_SUPPORTED_VEHICLES_OVERRIDE",SA_TOW_SUPPORTED_VEHICLES]); - _nearVehiclesWithTowRopes = []; - { - _vehicle = _x; - { - _ends = ropeEndPosition _x; - if(count _ends == 2) then { - _end1 = _ends select 0; - _end2 = _ends select 1; - if(((position player) distance _end1) < 5 || ((position player) distance _end2) < 5 ) then { - _nearVehiclesWithTowRopes pushBack _vehicle; - } - }; - } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); - } forEach _nearVehicles; - _nearVehiclesWithTowRopes; + private ["_nearVehicles","_nearVehiclesWithTowRopes","_vehicle","_ends","_end1","_end2"]; + _nearVehicles = []; + { + _nearVehicles append (position player nearObjects [_x, 30]); + } forEach (missionNamespace getVariable ["SA_TOW_SUPPORTED_VEHICLES_OVERRIDE",SA_TOW_SUPPORTED_VEHICLES]); + _nearVehiclesWithTowRopes = []; + { + _vehicle = _x; + { + _ends = ropeEndPosition _x; + if(count _ends == 2) then { + _end1 = _ends select 0; + _end2 = _ends select 1; + if(((position player) distance _end1) < 5 || ((position player) distance _end2) < 5 ) then { + _nearVehiclesWithTowRopes pushBack _vehicle; + } + }; + } forEach (_vehicle getVariable ["SA_Tow_Ropes",[]]); + } forEach _nearVehicles; + _nearVehiclesWithTowRopes; }; if(!isDedicated) then { - [] spawn { - while {true} do { - if(!isNull player && isPlayer player) then { - if!( player getVariable ["SA_Tow_Actions_Loaded",false] ) then { - [] call SA_Add_Player_Tow_Actions; - player setVariable ["SA_Tow_Actions_Loaded",true]; - }; - }; - missionNamespace setVariable ["SA_Nearby_Tow_Vehicles", (call SA_Find_Nearby_Tow_Vehicles)]; - sleep 2; - }; - }; + [] spawn { + while {true} do { + if(!isNull player && isPlayer player) then { + if!( player getVariable ["SA_Tow_Actions_Loaded",false] ) then { + [] call SA_Add_Player_Tow_Actions; + player setVariable ["SA_Tow_Actions_Loaded",true]; + }; + }; + missionNamespace setVariable ["SA_Nearby_Tow_Vehicles", (call SA_Find_Nearby_Tow_Vehicles)]; + sleep 2; + }; + }; }; SA_RemoteExec = { - params ["_params","_functionName","_target",["_isCall",false]]; - if(!isNil "ExileClient_system_network_send") then { - ["AdvancedTowingRemoteExecClient",[_params,_functionName,_target,_isCall]] call ExileClient_system_network_send; - } else { - if(_isCall) then { - _params remoteExecCall [_functionName, _target]; - } else { - _params remoteExec [_functionName, _target]; - }; - }; + params ["_params","_functionName","_target",["_isCall",false]]; + if(!isNil "ExileClient_system_network_send") then { + ["AdvancedTowingRemoteExecClient",[_params,_functionName,_target,_isCall]] call ExileClient_system_network_send; + } else { + if(_isCall) then { + _params remoteExecCall [_functionName, _target]; + } else { + _params remoteExec [_functionName, _target]; + }; + }; }; SA_RemoteExecServer = { - params ["_params","_functionName",["_isCall",false]]; - if(!isNil "ExileClient_system_network_send") then { - ["AdvancedTowingRemoteExecServer",[_params,_functionName,_isCall]] call ExileClient_system_network_send; - } else { - if(_isCall) then { - _params remoteExecCall [_functionName, 2]; - } else { - _params remoteExec [_functionName, 2]; - }; - }; + params ["_params","_functionName",["_isCall",false]]; + if(!isNil "ExileClient_system_network_send") then { + ["AdvancedTowingRemoteExecServer",[_params,_functionName,_isCall]] call ExileClient_system_network_send; + } else { + if(_isCall) then { + _params remoteExecCall [_functionName, 2]; + } else { + _params remoteExec [_functionName, 2]; + }; + }; +}; + +if(isServer) then { + + // Adds support for exile network calls (Only used when running exile) // + + SA_SUPPORTED_REMOTEEXECSERVER_FUNCTIONS = ["SA_Set_Owner","SA_Hide_Object_Global"]; + + ExileServer_AdvancedTowing_network_AdvancedTowingRemoteExecServer = { + params ["_sessionId", "_messageParameters",["_isCall",false]]; + _messageParameters params ["_params","_functionName"]; + if(_functionName in SA_SUPPORTED_REMOTEEXECSERVER_FUNCTIONS) then { + if(_isCall) then { + _params call (missionNamespace getVariable [_functionName,{}]); + } else { + _params spawn (missionNamespace getVariable [_functionName,{}]); + }; + }; + }; + + SA_SUPPORTED_REMOTEEXECCLIENT_FUNCTIONS = ["SA_Simulate_Towing","SA_Attach_Tow_Ropes","SA_Take_Tow_Ropes","SA_Put_Away_Tow_Ropes","SA_Pickup_Tow_Ropes","SA_Drop_Tow_Ropes","SA_Hint"]; + + ExileServer_AdvancedTowing_network_AdvancedTowingRemoteExecClient = { + params ["_sessionId", "_messageParameters"]; + _messageParameters params ["_params","_functionName","_target",["_isCall",false]]; + if(_functionName in SA_SUPPORTED_REMOTEEXECCLIENT_FUNCTIONS) then { + if(_isCall) then { + _params remoteExecCall [_functionName, _target]; + } else { + _params remoteExec [_functionName, _target]; + }; + }; + }; + + // Install Advanced Towing on all clients (plus JIP) // + + publicVariable "SA_Advanced_Towing_Install"; + remoteExecCall ["SA_Advanced_Towing_Install", -2,true]; + +}; + +diag_log "Advanced Towing Loaded"; + +}; + +if(isServer) then { + [] call SA_Advanced_Towing_Install; }; - -diag_log "Advanced Towing Loaded"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Stringtable.xml b/AntistasiOfficial.Altis/Stringtable.xml index e6dc6457..0d52cdb5 100644 --- a/AntistasiOfficial.Altis/Stringtable.xml +++ b/AntistasiOfficial.Altis/Stringtable.xml @@ -1,1471 +1,6034 @@ - - - - - + + + + + [SP/CO]- Antistasi 1.8 Altis Blufor + + + v 1.8 + + + Antistasi 1.8 + + + + + + + Antistasi: ability to start a fresh campaign + Antistasi: возможность начать новую кампанию + Antistasi: empezar una nueva campaña + + + Antistasi: enable Switch Commander + Antistasi: включить смену Командира + Antistasi: activar cambio de Comandante + + + Antistasi: enable Server Membership + Antistasi: включить список игроков сервера + Antistasi: activar membresía del Servidor + + + Antistasi: use customized arsenal by Jeroen Not + Antistasi: использовать изменённый Арсенал + Antistasi: usar arsenal personalizado por Jeroen Not + + + Antistasi: punish people for teamkilling + Antistasi: наказывать за убийство своих игроков + Antistasi: castigo por matar compañeros de equipo + + + Antistasi: only permanent members are eligible for commandership at start + Antistasi: только игроки из списка могут командовать после старта + Antistasi: solo los miembros permanentes son electos como Comandante al inicio + + + Antistasi: enable VCOM AI for server/headless client + Antistasi: включить VCOM AI + Antistasi: activar VCOM IA en server/cliente headless + + + Autosave every 60 min + Autosave every 60 min + Autoguardar cada 60 min + + + INIDIBI2: Load the game from standard profile.vars == Export from standard Antistasi save + INIDIBI2: Load the game from profile.vars + INIDIBI2: Cargar el juego desde profile.vars == Exportar desde Grabar de Antistasi + + + INIDIBI2: Save the game into standard profile.vars == Import from INIDIBI2 save + INIDIBI2: Load the game from profile.vars + INIDIBI2: Grabar en profile.vars == Importar a Grabar de INIDIBI2 + + + On + Вкл + Si + + + Off + Выкл + No + + + + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Offer to Join + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' />Предложить присоединиться + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Ofrecer unirse <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Talk + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Говорить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Hablar <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Buy + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Купить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\talk_ca.paa' /> Comprar <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Interrogate + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Допросить + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Interrogar <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Liberate POW + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Освободить в/пленного + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Liberar Prisionero <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Order refugee to follow + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Приказать следовать за собой + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Ordenar seguirte <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Turn Device On/Off + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Репродуктор Вкл/Выкл + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Habilitar/Deshabilitar Dispositivo <img size='1.75' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\attack_ca.paa' /> Mission Request + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\attack_ca.paa' /> Взять задание + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\attack_ca.paa' /> Solicitar Misión <img size='1.75' image='\A3\ui_f\data\IGUI\RscTitles\MPProgress\respawn_ca.paa' /> Heal, Repair and Rearm + <img size='1.75' image='\A3\ui_f\data\IGUI\RscTitles\MPProgress\respawn_ca.paa' /> Лечить, чинить и перевооружить + <img size='1.75' image='\A3\ui_f\data\IGUI\RscTitles\MPProgress\respawn_ca.paa' /> Curar, Reparar y Rearmar <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\heal_ca.paa' /> Use Medical Supplies + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\heal_ca.paa' /> Лечить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\heal_ca.paa' /> Usar Suministros Médicos <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Unit Recruitment + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Набрать отряд + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Reclutar Unidad <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Return Control to AI + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Вернуть управление ИИ + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\MPTable\infantry_ca.paa' /> Devolver Control a la IA <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\soft_ca.paa' /> Buy Vehicle + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\soft_ca.paa' /> Купить технику + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\MPTable\soft_ca.paa' /> Comprar Vehículo <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn2_ca.paa' /> Load Ammobox to Truck + <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn2_ca.paa' /> Загрузить Ящик в грузовик + <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn2_ca.paa' /> Cargar Caja al Camión <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn_ca.paa' /> Unload Vehicle Cargo to Ammobox + <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn_ca.paa' /> Выгрузить из техники в Ящик + <img size='1.2' image='\A3\ui_f\data\igui\cfg\VehicleToggles\VehicleCargoIconOn_ca.paa' /> Descargar Contenido Vehículo al Arsenal <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceArsenal_ca.paa' /> Arsenal + <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceArsenal_ca.paa' /> Арсенал + <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceArsenal_ca.paa' /> Arsenal <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceGarage_ca.paa' /> Garage + <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceGarage_ca.paa' /> Гараж + <img size='1.75' image='\A3\ui_f\data\GUI\Rsc\RscDisplayArsenal\spaceGarage_ca.paa' /> Garaje <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Take the Flag + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Захватить флаг + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Tomar la Bandera - + <img size='1.75' image='\A3\ui_f\data\GUI\rsc\rscdisplaysinglemission\source\backup\large_64x64\locked_ca.paa' /> Personal Garage + <img size='1.75' image='\A3\ui_f\data\GUI\rsc\rscdisplaysinglemission\source\backup\large_64x64\locked_ca.paa' /> Персональный гараж + <img size='1.75' image='\A3\ui_f\data\GUI\rsc\rscdisplaysinglemission\source\backup\large_64x64\locked_ca.paa' /> Garaje Personal <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\refuel_ca.paa' /> Refuel Vehicle + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\refuel_ca.paa' /> Заправить технику + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\refuel_ca.paa' /> Repostar Vehículo <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Move this Asset + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Переместить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Mover este Activo - <img size='1.2' image='' /> Change Class + <img size='1.2' image='A3\ui_f\data\GUI\Cfg\Ranks\private_gs.paa' /> Change Class + <img size='1.2' image='A3\ui_f\data\GUI\Cfg\Ranks\private_gs.paa' /> Изменить Класс + <img size='1.2' image='A3\ui_f\data\GUI\Cfg\Ranks\private_gs.paa' /> Cambiar Clase <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Revive\overlayIcons\f100_ca.paa' /> Remove this Object + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Revive\overlayIcons\f100_ca.paa' /> Удалить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Revive\overlayIcons\f100_ca.paa' /> Quitar este Objeto <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Drop Here + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Поставить + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\VTOLVectoring_ca.paa' /> Soltar Aquí <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Deploy Tow Ropes + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Достать трос + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Sacar Cuerdas Remolque <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Put Away Tow Ropes + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Убрать трос + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn_ca.paa' /> Guardar Cuerdas Remolque <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn2_ca.paa' /> Attatch To Tow Ropes + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn2_ca.paa' /> Прицепить к тросу + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\VehicleToggles\SlingLoadRopeIconOn2_ca.paa' /> Enganchar Cuerdas Remolque <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Drop Ropes + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Бросить трос + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Soltar Cuerdas <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Pick Up Ropes + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Поднять трос + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\take_ca.paa' /> Recoger Cuerdas <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\call_ca.paa' /> Jam CSAT - - - <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\SimpleTasks\types\use_ca.paa' /> Clear Nearby Jungle + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\call_ca.paa' /> Включить глушилку + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\call_ca.paa' /> Interferir CSAT <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Cursors\wait_gs.paa' /> Rest for 8 Hours + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Cursors\wait_gs.paa' /> Отдыхать 8 часов + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Cursors\wait_gs.paa' /> Descansar 8 Horas <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Ranks\colonel_gs.paa' /> HQ Options + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Ranks\colonel_gs.paa' /> Штаб + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Ranks\colonel_gs.paa' /> Opciones HQ <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\SimpleTasks\types\use_ca.paa' /> Game Options + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\SimpleTasks\types\use_ca.paa' /> Игровые настройки + <img size='1.75' image='\A3\ui_f\data\IGUI\Cfg\SimpleTasks\types\use_ca.paa' /> Opciones Juego <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Hints\Map_ca.paa' /> Map Info + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Hints\Map_ca.paa' /> Информация на карте + <img size='1.75' image='\A3\ui_f\data\GUI\cfg\Hints\Map_ca.paa' /> Info Mapa <img size='1.75' image='\A3\ui_f\data\Map\markers\military\objective_ca.paa' /> Build Vehicle Zone + <img size='1.75' image='\A3\ui_f\data\Map\markers\military\objective_ca.paa' /> Создать площадку для техники + <img size='1.75' image='\A3\ui_f\data\Map\markers\military\objective_ca.paa' /> Construir Zona Vehículos <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Build HQ + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Построить Штаб + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\Actions\takeFlag_ca.paa' /> Construir HQ <img size='1.2' image='\A3\ui_f\data\IGUI\cfg\simpletasks\types\documents_ca.paa' /> Box 'o Pams + <img size='1.2' image='\A3\ui_f\data\IGUI\cfg\simpletasks\types\documents_ca.paa' /> Выгрузить листовки + <img size='1.2' image='\A3\ui_f\data\IGUI\cfg\simpletasks\types\documents_ca.paa' /> Entregar Panfletos <img size='1.2' image='\A3\ui_f\data\Map\VehicleIcons\iconVirtual_ca.paa' /> TFAR Radio Menu + <img size='1.2' image='\A3\ui_f\data\Map\VehicleIcons\iconVirtual_ca.paa' /> TFAR меню радио + <img size='1.2' image='\A3\ui_f\data\Map\VehicleIcons\iconVirtual_ca.paa' /> Menú TFAR Radio <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\HoldActions\holdAction_hack_ca.paa' /> Bobby Ray's + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\HoldActions\holdAction_hack_ca.paa' /> Оружейная лавка + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\HoldActions\holdAction_hack_ca.paa' /> Bobby Ray's <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Capture the HVT + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Захват важной персоны + <img size='1.2' image='\A3\ui_f\data\GUI\cfg\CommunicationMenu\instructor_ca.paa' /> Capturar HVT + + + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\boat_ca.paa' /> Buy Boat + < img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\boat_ca.paa' />Купить Лодку + <img size='1.2' image='\A3\ui_f\data\IGUI\Cfg\simpleTasks\types\boat_ca.paa' /> Comprar Bote - - - - AAF - - - CSAT - - - NATO - - - AFRF - - - VMF - - - USAF - - - USMC - - - FIA - - - Resistance - - - MARSOC - - - NATO SF - - - KSK - - - Bundeswehr - - - British Army - - - SBS - - + + AAF + AAF + AAF + + + CSAT + CSAT + CSAT + + + NATO + NATO + OTAN + + + AFRF + МО РФ + AFRF + + + VMF + ВМФ РФ + VMF + + + USAF + USAF + USAF + + + USMC + USMC + USMC + + + FIA + FIA + FIA + + + Resistance + Сопротивление + Resistencia + + + MARSOC + MARSOC + MARSOC + + + NATO SF + NATO SF + OTAN SF + + + KSK + KSK + KSK + + + Bundeswehr + Bundeswehr + Ejército Alemán + + + British Army + British Army + Ejército Británico + + + SBS + SBS + SBS + - Local Support + Поддержка населения + Apoyo Local <t color='#f59900' size='.45' align='center'>Warning! You lack the proficiency to effectively operate this weapon.</t> + <t color='#f59900' size='.45' align='center'>Внимание! Вам не хватает навыка эффективно управлять этим оружием.</t> + <t color='#f59900' size='.45' align='center'>Atención! Te falta habilidad para usar con eficacia este arma.</t> Zones initialized. + Зоны инициализированы. + Zonas iniciadas. + + + Server Init Completed + Инициализация сервера завершена + Inicio Servidor Completado + + + + + Power Plant + ЭС + Central Eléctrica + + + %1 Airport + А/база %1 + Aeropuerto %1 + + + %1 Base + В/база %1 + Base %1 + + + Resources + Ресурс + Recursos + + + Factory + Фабрика + Fábrica + + + %1 AA OP + ОП ПВО %1 + Puesto AA %1 + + + %1 Outpost + ОП %1 + Puesto %1 + + + Sea Port + Порт + Puerto + + + %1 Carrier + Авианосец %1 + Portaaviones %1 + + + Radio Tower + Р/вышка + Torre de Radio + + + %2 Outpost: %1 + ОП %2: %1 + Puesto %2: %1 + + + %2 Base: %1 + В/база %2: %1 + Base %2: %1 + + + %2 Airport: %1 + А/база %2: %1 + Aeropuerto %2: %1 + + + AAF Outpost + ОП AAF + + + AAF Base + В/база AAF + + + AAF Airport + А/база AAF + + + FIA Roadblock + БП FIA + + + FIA Watchpost + НП FIA + + + NATO Roadblock + БП НАТО - + + Start Mission + Начать + Iniciar Misión + Game Settings + Игровые настройки + Ajustes Juego Detected Mods + Найденные моды + Mods Detectados - ComSwitch Disabled + Смена Командира Выкл + ComSwitch Desactivado ComSwitch Enabled + Смена Командира Вкл + ComSwitch Activado Automatic Commander Switching<br/>In regular intervals, the highest ranking player will be assigned the role of Commander. + Смена Командира<br/>Через равные промежутки времени статус Командира получает игрок более высокого ранга. + Cambiar Comandante Automático<br/>En intervalos regulares, al jugador de mayor rango se le asignará el puesto de comandante. - Membership Enabled + Список игроков Вкл. + Membresía Activada Membership Disabled + Список игроков Выкл. + Membresía Desactivada Only players on the members list are eligible to become Commander, can access the arsenal inventory and have their rank saved. + Только игроки из списка игроков могут быть Командирами, иметь доступ к Арсеналу. Их ранг сохраняется. + Sólo los jugadores de la lista de miembros pueden ser elegidos como Comandante, tienen acceso al Arsenal y su rango será guardado. - Continuing Campaign + Из сохранения + Continuar Campaña Restarting Campaign + Перезапуск кампании + Reiniciar Campaña Continue your previous campaign or start a fresh one. + Продолжите предыдущую кампанию или начните новую. + Continua tu campaña anterior o empieza una nueva. - Regular Conditions + Обычные условия + Condiciones Regulares Easier Conditions + Облегчённые условия + Condiciones Fáciles Easier conditions include more starting funds and additional gear available from the start. + При облегчённых условиях в начале игры даётся больше средств и снаряжения. + Las condiciones fáciles incluyen más fondos iniciales y equipo adicional habilitado desde el inicio. - Please adjust the campaign settings.<br/>Press 'Start Mission' to continue. + Настройте параметры кампании.<br/>Нажмите 'Старт' для продолжения. + Por favor, ajusta las opciones de campaña.<br/>Pulsa 'Iniciar Misión' para continuar. <br/>Loading previous save... + <br/>Загрузка предыдущего сохранения... + <br/>Cargando partida anterior... <br/>Save successfully loaded. + <br/>Сохранение успешно загружено. + <br/>Partida cargada correctamente. - Funky ACE info here.<br/>More funky ACE info.<br/>Funky town. + Подробная Информация об ACE здесь.<br/>Больше подробной информации об ACE. + Información detallada sobre ACE aquí.<br/>Información más detallada sobre ACE. Funky AFRF info here.<br/>More funky AFRF info.<br/>Funky town. + Подробная Информация об AFRF здесь.<br/>Больше подробной информации об AFRF. + Información detallada acerca de AFRF aquí.<br/>Información más detallada acerca de AFRF. Funky USAF info here.<br/>More funky USAF info.<br/>Funky town. + Подробная Информация об USAF здесь.<br/>Больше подробной информации об USAF. + Información detallada acerca de USAF aquí.<br/>Información más detallada acerca de USAF. Your guerilla movement fights against USAF/USMC.<br/>Russian VDV forces will assist you. + Ваше партизанское движение борется против USAF/USMC.<br/>Вам помогут Российские войска ВДВ. + Tu movimiento de guerrilla lucha contra USAF/USMC.<br/>Las fuerzas rusas VDV te apoyarán. Funky TFAR info here.<br/>More funky TFAR info.<br/>Funky town. + Подробная Информация о TFAR Здесь.<br/>Больше подробной информации о TFAR. + Información detallada acerca de TFAR aquí.<br/>Información más detallada acerca de TFAR. - Commander Menu + Меню Командира + Menú Comandante Player Menu + Меню игрока + Menú Jugador Admin Menu + Меню Админа + Menú Admin + + + Back + Назад + Volver - Battle Menu + Боевое меню + Menú Batalla Current Options + Текущие параметры + Opciones Actuales - Fast Travel + Телепорт + Viaje Rápido Select Camp or HQ when no enemies nearby + Выберите лагерь или Штаб когда рядом нет противника + Selecciona un Campamento o HQ sin enemigos cercanos Undercover + Маскировка + Incógnito Look like a civilian and be ignored by enemies, don't get revealed! + Вы будете выглядеть как гражданский, и противник не будет Вас замечать + Pareces un civil y serás ignorado por el enemigo, que no te detecten! Vehicle Mgmt + Техника + Admin. Vehículos Garage and Lock/Unlock vehicles + Поставить технику в гараж, закрыть/открыть, продать технику + Garaje y Bloq./Desbl. Vehículos AI Management + Контроль ИИ + Admin. IA Make your group benefit of Antistasi features + Расширенные возможности Antistasi по управлению ИИ, отрядами ИИ + Haz que tu grupo se beneficie de las características de Antistasi - Player & Money + Player & Money + Деньги + Jugador & Dinero Give money to FIA or to your mates + Передать деньги в FIA или товарищу + Dar dinero al FIA o a tus compañeros Resign + Отставка + Renunciar Let another member command FIA. + Позволить другим игрокам возглавить FIA. + Deja que otro miembro comande el FIA. - - Temp AI Control + Времен. контроль ИИ + Control Temp. IA Temporarily take control of selected AI.<br/>Disabled when ACE is active. + Временный контроль выбранного ИИ.<br/>Отключено, если мод ACE активен. + Temporalmente tomas el control de la IA seleccionada.<br/>Deshabilitado con ACE activo. Autoheal + Автолечение + AutoCurar AI will take care of their wounds and also other mates ones + ИИ будет лечить себя, а также раненых товарищей + IA se hará cargo de sus heridas y también de las de los compañeros AutoHeal deactivated + Автолечение Выкл. + AutoCurar desactivado AutoHeal activated + Автолечение Вкл. + AutoCurar activado Auto-Rearm + Автовооружение + Auto-Rearmar AI actively scavenge what they need according to their class + ИИ ищет и подбирает снаряжение в соответствии со своим классом + La IA recolectará lo que necesite según su clase + + + Add Garrison + Добавить гарнизон + Añadir guarnición + + + Selected units move and garrison selected marker + Выбранные единицы перемещения и выбранный маркер гарнизона + Las unidades seleccionadas se mueven y guardan el marcador seleccionado Dismiss + Распустить + Despedir Dismisses currently selected AI or group. + Выбрать ИИ или группу, отправить бойцов по домам. + Despide la IA o grupo seleccionado. Scavenge + Собирать + Saquear Work in progress™. + В разработке™ + En proceso™. Store Gear + Снять снаряжение + Almacenar Equipo Have currently selected units store their gear. Point at vehicle to use for storage. + Выбранные бойцы готовы сдать снаряжение. Выберите транспорт для хранения. + Las unidades seleccionadas almacenan su equipo. Apunta al vehículo para usarlo como almacen. Reset AI + Перезапуск ИИ + Reiniciar IA If AI gets stuck in an activity... + Если ИИ зависает... + Si la IA se bloquea en una acción... - Garage / Store inventory + В Гараж + Garaje / Almacenar inventario Store the vehicle you are looking at and its inventory. + Ставит в Гараж технику, на которую Вы смотрите и её инвентарь. + Guarda el vehículo que estás mirando y su inventario. (Un)lock Vehicle + Открыть/Закрыть + (Des)Bloquear Vehículo Lock or unlock the vehicle. + Открывает или закрывает технику на замок. + Bloq. o desbl. el vehículo. Sell Vehicle + Продать технику + Vender Vehículo Sell the vehicle you are looking at. + Продаёт технику, на которую Вы смотрите. + Vende el vehículo que estás mirando. - - Donate 100€ to Player + Donate 100€ to Player + Передать 100€ игроку + Donar 100€ a un Jugador - Donate 100€ to the player you're looking at. + Donate 100€ to the player you're looking at. + Передаёт 100€ игроку, на которого Вы смотрите. + Dona 100€ al jugador que estás mirando. - Donate 100€ to FIA + Donate 100€ to FIA + Передать 100€ в FIA + Donar 100€ al FIA Support the cause by donating some of your illegally acquired currency. + Поддержите общее дело! Пожертвуйте часть Ваших денег в Фонд FIA. + Apoya la causa donando parte del dinero que has conseguido ilegalmente. - %1 Call in %1 support. + Запрос поддержки %1 + Solicitar apoyo %1. Recruit Squad + Отряды + Reclutar Escuadrón Recruit squads to support your effort, including fireteams and mounted units. + Открывает меню отрядов FIA. + Recluta escuadrones para apoyar tu misión, incluye equipos de fuego y unidades motorizadas. Squad Mgmt + Упр. отрядами + Admin. Escuadrón Supply squads with vehicles, check their current state. + Открывает меню управления отрядом. + Suministra escuadrones con vehículos, verifica el estado actual. Emplacements + Позиции FIA + Emplazamientos Setup or take down camps, roadblocks and watchposts. + Развертывание и сворачивание лагерей, БП и т.д. + Montar o quitar campamentos, controles y puestos de observación. Details + Сводка + Detalles Display additional details about the current state of your forces (arms, vehicles, etc). + Дополнительные сведения о текущем состоянии Ваших сил (оружие, транспорт и т.д.). + Muestra detalles adicionales sobre el estado actual de tu fuerzas (armas, vehículos, etc). Maintenance + Сервис + Mantenimiento Additonal maintenance functions. + Дополнительные функции для решения проблем. + Funciones adicionales de mantenimiento. - - - + + Air Assault + Десант + Asalto Aéreo - + Price: 20 Points -- Air cavalry will assault the target location. + Цена: 20 очков - Авиация высаживает десант и атакует выбранную позицию. + Coste: 20 Puntos -- La caballería aérea asaltará la posición objetivo. - + Armoured Assault + Бронетехника + Asalto Blindados - + Price: 20 Points -- Armoured cavalry will assault the target location. + Цена: 20 очков - Взвод бронетехники атакует выбранную позицию. + Coste: 20 Puntos -- La caballería blindada asaltará la posición objetivo. - + Artillery + Артиллерия + Artillería - + Price: 10 Points -- A deployed battery will be at your command at a base of your choice. + Цена: 10 очков - Артиллерийская батарея на выбранной военной базе под Вашим командованием. + Coste: 10 Puntos -- despliega una batería que estará bajo tu mando en la base elegida. - + Roadblock + Блокпост + Control Carretera - + Price: 10 Points -- Mounted units will depart to the chosen location and setup a roadblock. + Цена: 10 очков - Моторизированная группа отправится в выбранное место для установки БП. + Coste: 10 Puntos -- Unidades motorizadas irán a la zona elegida y montarán un control de carretera. - + UAV + БПЛА + Dron - + Price: 10 Points -- An armed UAV will be placed under your command. + Цена: 10 очков - Ударный БПЛА под Вашим командованием. + Coste: 10 Puntos -- Un dron armado se pondrá bajo tu mando. - + Resupply + Снабжение + Reabastecer - + Price: 5 Points -- A basic resupply kit will be para-dropped at the chosen location. + Цена: 5 очков - Вертолёт сбросит на парашюте базовый комплект снаряжения в выбранное место. + Coste: 5 Puntos -- Suministros básicos lanzados en paracaídas a la zona elegida. - + CAS + Авиаподдержка + Apoyo aéreo - + Price: 10 Points -- A Vic formation of CAS aircraft will be placed under your command. + Цена: 10 очков - Звено авиаподдержки под Вашим командованием. + Coste: 10 Puntos -- Se pondrá bajo su mando un equipo de aeronaves en formación V para darle apoyo. - + Bomb Run + Бомбардировка + Bombardeo - + Price: 10 Points -- A bomb run will be performed along the specified vector. + Цена: 10 очков - Бомбардировка по выбранному направлению. + Coste: 10 Puntos -- Se realizará un bombardeo a lo largo de los vectores especificados. - + QRF + ОБР + QRF - + Price: 10 Points -- A QRF will be dispatched from the chosen base/airport. + Цена: 10 очков - Отряд быстрого реагирования отправится из базы/авиабазы в выбранное место. + Coste: 10 Puntos -- Un equipo de reacción rápida irá hacia la base/aeropuerto escogido. - - - + Reduce Opfor support + Дипломатия + Reducir Apoyo Enemigo - + Price: 100 Points -- Weaken the enemy supporting faction by 10 points + Цена: 100 очков - Ослабить поддержку противника на 10 очков + Coste: 100 Puntos -- Debilita el apoyo enemigo en 10 puntos - - Inf. Squad + Отряд + Escuadrón Infantería HR=8 money=950 - 8 man squad + optional truck which costs 200 + HR=8 денег=950 - 8 бойцов + дополнительно грузовик стоимостью 200 + HR=8 dinero=950 - 8 hombres + camión opcional con un coste de 200 Inf. Team + Звено + Equipo Infantería HR=4 money=450 - 4 man team + optional truck wbich costs 200 + HR=4 денег=450 - 4 бойца + дополнительно грузовик стоимостью 200 + HR=4 dinero=450 - 4 hombres + camion opcional con un coste de 200 AT Team + Звено ПТ + Equipo AT HR=4 money=550 - 4 man with 2 AT + optional offroad which costs 200 + HR=4 денег=550 - 4 бойца с 2 ПТ + дополнительно внедорожник стоимостью 200 + HR=4 dinero=550 - 4 hombres con 2 AT + offroad opcional con un coste de 200 AA Truck + Грузовик ПВО + Camión AA HR=3 money=1350 - A truck with a static AA attatched + HR=3 денег=1350 - Грузовик с зенитной установкой или ПЗРК + HR=3 dinero=1350 - Un camión con un AA estático acoplado Sniper Team + Снайп. пара + Equipo Tirador HR=2 money=300 - 2 man, one sniper and a spotter + optional quadbike which cost 50 + HR=2 денег=300 - 2 бойца - снайпер и наводчик + дополнительно квадроцикл стоимостью 50 + HR=2 dinero=300 - 2 hombres, un francotirador y un observador + quad opcional con coste 50 AT Truck + Грузовик ПТ + Camión AT - HR= money=1300 - A truck with a static AT attatched, might benefit of AI management section "Static Autotarget" + HR= money=1300 - A truck with a static AT attached, might benefit of AI management section "Static Autotarget" + HR= денег=1300 - Грузовик с противотанк. оружием, лучше включить «Автоприцел. станк. оружия» в пункте меню «Упр. отрядами». + HR= dinero=1300 - Un camión con un AT estático acoplado, revisar la sección de administración de IA 'Autoapuntado de Estáticas' Sentry + Патруль + Patrulla HR=2 money=150 - 2 militiaman + a + HR=2 денег=150 - 2 бойца + HR=2 dinero=150 - 2 milicianos + quad opcional con coste 50 Mortar + Миномет + Mortero - HR=2 money=1300 A truck with a mortar attatched, give it time to deploy then shift+ctrl+Y to bombard + HR=2 money=1300 A truck with a mortar attached, give it time to deploy then shift+ctrl+Y to bombard + HR=2 денег=1300 - Грузовик с миномётом, подождите пока развернется, затем через «Shift + Ctrl + Y» управляйте огнем + HR=2 dinero=1300 - Un camión con un mortero acoplado, dale tiempo para desplegar, luego shift+ctrl+Y para bombardear Engineers + Инженер + Ingenieros HR=1 money=500 - A repair offroad which works as repairstation overtime, the engineer can also remove minefields + HR=1 денег=500 - Ремонтный внедорожник, выполняет роль ремонтной станции, инженер может разминировать минные поля + HR=1 dinero=500 - Un offroad que funciona como estación de reparaciones, los ingenieros pueden limpiar campos minados - Add Vehicle + Закрепить транспорт + Añadir Vehículo Look to the vehicle you want to assign to selected team + Посмотрите на транспортное средство, которое хотите закрепить за выбранной группой + Mira el vehículo que deseas asignar al equipo seleccionado. Vehicle Stats + Состояние техники + Estad. Vehículo Ask status informations about squad assigned vehicle + Запросить информацию о состоянии закрепленного за отрядом транспортного средства + Solicita el estado del vehículo asignado al escuadrón Mount/Dismount + Посадка/Высадка + Montar/Desmontar Order squad to mount or dismount their assigned vehicle if they have one + Приказать отряду сесть или высадиться из закрепленного транспортного средства, если оно есть + Ordena al escuadrón montar o desmontar del vehículo asignado si lo tuvieran Static Autotarget + Автоприцел станк. оружия + Autoapuntado Estáticas - Static gun attatched to vehicles can benefit by rotating for a better target acquisition + Static gun attached to vehicles can benefit by rotating for a better target acquisition + Станковое оружие на транспорте сможет поворачиваться - для лучшего контроля цели + Las estáticas conectadas a vehículos pueden beneficiarse de rotación para mejorar la selección de objetivos. - Create Roadblock/OP + Развернуть БП/НП + Crear Control/P.Obs. Roadblock are effective against ground vehicle and some aircraft, if selecting outside roads build an Observation Post + Развертывает Блокпост (БП) на дороге, вне дороги - наблюдательный пункт (НП) + El control de carretera es efectivo contra vehículos terrestres y algunos aéreos, si seleccionas fuera de una carretera se construirá un punto de observación. Remove Roadblock/OP + Свернуть БП/НП + Quitar Control/P.Obs. Get HR refounded back if units are still operational + Возврат очков HR, если бойцы целы + Recupera HR si las unidades siguen operativas. Deploy Minefield (AP) + Минное поле (ПП) + Desplegar Minas (AP) Dangerous, it require mines in the arsenal, not tested yet with RHS and JAS + Опасно, требует наличия противопехотных мин в Арсенале, еще не испытано с RHS и JAS + Peligroso, requiere minas AP en el Arsenal, no se ha probado aún con RHS y JAS Deploy Minefield (AT) + Минное поле (ПТ) + Desplegar Minas (AT) Dangerous, it require mines in the arsenal, not tested yet with RHS and JAS + Опасно, требует наличия противотанковых мин в Арсенале + Peligroso, requiere minas AT en el Arsenal, no se ha probado aún con RHS y JAS Establish Camp + Разбить лагерь + Establecer Campamento Spawn a truck with 2 man crew, only the driver has to arrive in selected area to build + Появляется грузовик с экипажем из 2 бойцов, добраться в выбранное место должен водитель + Crea un Camión con 2 tripulantes, solo el conductor tiene que llegar al área seleccionada para construir Remove Camp + Свернуть Лагерь + Quitar Campamento Get money and HR refounded + Возвращаются деньги и очки HR + Reembolsa dinero y RH Rename Camp + Назвать лагерь + Renombrar Campamento Possibility to change name for easier communications with the team + Возможность изменить название для более удобного общения в команде + Permite cambiar el nombre para facilitar las comunicaciones entre el equipo HQ Fortifications + Объекты Штаба + Fortificaciones HQ Add objects to make HQ look better, watch out collision with spawning vehicles + Добавление объектов для улучшения Штаба, следите чтобы они не сталкивались с появляющейся техникой + Añade objetos para que el HQ se vea mejor, vigila las colisiones con los vehículos generados - Status + Статус + Estado placeholder + пусто + marcador de posición + + + Arsenal Membership + Arsenal Membership + Arsenal Membership + + + When enabled, non members can't pick items below a threshold + When enabled, non members can't pick items below a threshold + When enabled, non members can't pick items below a threshold + + + Arsenal ACE Medical + Arsenal ACE Medical + Arsenal ACE Medicall + + + Reset ACE items according to basic or advanced + Reset ACE items according to basic or advanced + Reset ACE items according to basic or advanced Current Restrictions + Текущие ограничения + Restricciones Actuales Display limitations according to FIA Army XP Level + Отобразить ограничения соответствующие уровню навыка войск (Army XP) FIA + Muestra las limitaciones acorde al nivel XP del Ejército FIA Current Progress + Текущий прогресс + Progreso Actual Check your progress and what's missing to upgrade to next Level + Проверяет, чего не хватает для перехода на следующий уровень + Revisa tu progreso y que falta para llegar al siguiente nivel - - + Garbage Clean + Очистка мусора + Quitar Basura - + Delete on ground items, corpses, destroyed vehicle. Might freeze a bit + Удаляются предметы на земле, трупы, уничтоженный транспорт. Может немного подвиснуть + Borra objetos en el suelo, cuerpos, vehículos destruidos. Puede ralentizar un poco Reset Petros' position + Сброс позиции Петроса + Reiniciar posición de Petros Terminate Petros' animation, move him next to the campfire at HQ. + Прекращает анимацию Петроса и помещает его рядом с Костром в Штабе + Acaba con la animación de Petros, lo mueve cerca de la hoguera del HQ. Move Statics/HQ Items + Перемещение Предметов + Mover Estáticas/Objetos HQ Reinitialize your ability to move statics and HQ assets. + Перезапустить свою способность переносить станковое оружие и Предметы Штаба. + Reinicia tu capacidad de mover estáticas y activos del HQ. Reset HQ + Сброс Штаба + Reiniciar HQ If you managed to lose one of your HQ items, this will reset all of them near Petros. + Помещает все Предметы Штаба рядом с Петросом. + Si al administrar los objetos del HQ pierdes alguno, esto los dejará todos cerca de Petros. - Map names + Имена на карте + Nombres en el mapa - Toggle player names displayed on map + Toggle player names displayed on map. + Переключает видимость имён игроков на карте. + Muestra el nombre de los jugadores en el mapa. Add Server Member + Добавить в список + Añadir Miembro al Server Look at a player, Members are eligible to be commander and can recruit AI + Игроки из списка игроков могут быть Командиром и набирать отряды. + Mira al Jugador, los miembros pueden ser elegidos Comandante y pueden reclutar IA Remove S. Member + Удалить из списка + Quitar Miembro del Server Look at a player to remove him from the member list + Взглядом выберите игрока для удаления его из списка игроков сервера + Mira al Jugador para eliminarlo de la lista de miembros Gear Reset + Сброс Арсенала + Reiniciar Equipamiento No longer required/working, JAS is bulletproof. + Не требуется, JAS Арсенал работает как надо. + Ya no es necesario, JAS es a prueba de balas. Army XP System + Система Army XP + Sistema XP Ejército If disabled there won't be any gated progression nor the benefit like enhanced roadblocks + Если Выкл., то не будет постепенного роста навыка войск и соответствующих преимуществ, таких как усиленные блокпосты + Si está deshabilitado, no habrá ninguna progresión ni beneficio, como controles de carretera mejorados. Old Fast Travel + Старый Телепорт + Antiguo Viaje Rápido Fastravel to all friendly locations, roadblocks included + Быстрое перемещение во все дружественные точки на карте + Viaje rápido a todas las zonas aliadas, controles incluidos Garbage Clean + Очистить мусор + Quitar Basura Clear Garbage, might freeze a bit + Очистка мусора, может немного подвиснуть + Limpiar basura, puede ralentizar un poco Weapon Proficiency + Владение оружием + Pericia en Armas When enabled, weapons have increased sway if not belonging to your class + Когда Вкл., уровень отдачи оружия увеличивается, если оно не относится к Вашему классу + Cuando está activo, las armas aumentan su balanceo si no pertenecen a tu clase Test Mode + Тестовый режим + Modo Pruebas add test functions, usage in normal campaign will have bad and evident effects + Добавляет тестовые функции, может работать нестабильно + Añade funciones de prueba, el uso en campaña normal tendrá efectos negativos y evidentes Disable 3rd Person + Выкл. вид от 3го лица + Desactivar 3a Persona The script is not optimized for Join in Progress, not all the player might retain the effect. + Скрипт не оптимизирован, может подействовать не на всех игроков. + El script no está optimizado para añadirlo en progreso, no a todos los jugadores puede afectarles - Sell Gear + Продать Снаряжение + Vender Equipo Weapons + Оружие + Armas Ordnance + Боеприпасы + Munición Items + Предметы + Objetos Backpacks + Рюкзаки + Mochilas + + + + + Commander: %3 | %2 | HR: %1 | Your Money: %4 € | %9 Support: %5 | %10 Support: %6 | %7 | %8 + Командир: %3 | %2 | HR: %1 | Ваши Деньги: %4 € | Поддержка %9: %5 | Поддержка %10: %6 | %7 | %8 + Comandante: %3 | %2 | HR: %1 | Tu Dinero: %4 € | Apoyo %9: %5 | Apoyo %10: %6 | %7 | %8 + + + Commander: %3 | %2 | HR: %1 | Your Money: %4 € | %8 Support: %5 | %9 Support: %6 | %7 + Командир: %3 | %2 | HR: %1 | Ваши Деньги: %4 € | Поддержка %8: %5 | Поддержка %9: %6 | %7 + Comandante: %3 | %2 | HR: %1 | Tu Dinero: %4 € | Apoyo %8: %5 | Apoyo %9: %6 | %7 + + + %5 | HR: %1 | Your Money: %6 € | FIA Money: %2 € | %9 Support: %3 | %10 Support: %4 | %7 | %8 + %5 | HR: %1 | Ваши Деньги: %6 € | Деньги FIA: %2 € | Поддержка %9: %3 | Поддержка %10: %4 | %7 | %8 + %5 | HR: %1 | Tu Dinero: %6 € | Dinero FIA: %2 € | Apoyo %9: %3 | Apoyo %10: %4 | %7 | %8 + + + %5 | HR: %1 | Your Money: %6 € | FIA Money: %2 € | %8 Support: %3 | %9 Support: %4 | %7 + %5 | HR: %1 | Ваши Деньги: %6 € | Деньги FIA: %2 € | Поддержка %8: %3 | Поддержка %9: %4 | %7 + %5 | HR: %1 | Tu Dinero: %6 € | Dinero FIA: %2 € | Apoyo %8: %3 | Apoyo %9: %4 | %7 + + + HR: %1 | FIA Money: %2 € | %7 Support: %3 | %8 Support: %4 | %5 | %6 + HR: %1 | Деньги FIA: %2 € | Поддержка %7: %3 | Поддержка %8: %4 | %5 | %6 + HR: %1 | Dinero FIA: %2 € | Apoyo %7: %3 | Apoyo %8: %4 | %5 | %6 + + + HR: %1 | FIA Money: %2 € | %6 Support: %3 | %7 Support: %4 | %5 + HR: %1 | Деньги FIA: %2 € | Поддержка %6: %3 | Поддержка %7: %4 | %5 + HR: %1 | Dinero FIA: %2 € | Apoyo %6: %3 | Apoyo %7: %4 | %5 + + + Overt + <t color='#D8480A'>Военный</t> + <t color='#D8480A'>Descubierto</t> + + + <t color='#D8480A'>Overt</t> + <t color='#D8480A'>Военный</t> + <t color='#D8480A'>Descubierto</t> + + + <t color='#1DA81D'>Incognito</t> + <t color='#1DA81D'>Гражданский</t> + <t color='#1DA81D'>Incógnito</t> - - + Kill the Officer + Убить офицера + Matar al Oficial - + Our Spies have reported that a CSAT officer is inspecting %1. Now is the time to Strike! Make sure he is eliminated by any means possible before %2:%3. + Наши агенты сообщили, что вражеский офицер инспектирует %1. Настало время для удара возмездия! Устраните его до %2:%3 любыми возможными средствами. + Nuestros espías informan que un oficial del CSAT está inspeccionando %1. Es el momento de atacar! Asegúrate de que sea eliminado por cualquier medio posible antes de las %2:%3. - - + CSAT SpecOps + Уничтожить спецназ + Operaciones Especiales CSAT - + Reports have come in that a CSAT SpecOps ground team is currently patrolling near %1. From what we know, these are tough soldiers who usually make use of airial un-manned drones. A well executed strike will gain us some of their high tech equipment. Do this before %2:%3. + Мы получаем донесения, что отряд CSAT действует сейчас рядом с %1. Из того что мы знаем - это серьезный противник, может использовать БПЛА. Выполнение задания позволит захватить их высокотехнологичное оборудование и снаряжение. Разберитесь с ними до %2:%3. + Nos informan que un equipo de op. especiales del CSAT está patrullando cerca de %1. Hasta donde sabemos, son soldados experimentados que utilizan drones. Un ataque bien ejecutado nos haría conseguir parte de su equipo tecnológico. Hazlo antes de las %2:%3. - - + Kill the Traitor + Убить предателя + Matar al Traidor - + Bad news, one of our very own is planning to defect. We have tracked his movements to the nearby town of %1. We are not taking any chancs. Kill him before he provides the enemy with intel of the location of our soldiers homes and FIA cash stockpiles. Do this before %2:%3. We don't where exactly this meeting will happen. You will recognise the building by the nearby MRAP and CSAT presence. + Плохие новости, один из наших планирует предать нас. Мы отследили его движение в соседний город %1. У нас не будет второго шанса. Убейте его, прежде чем он передаст противнику информацию, которую он знает о домашних адресах наших солдат и схронах боеприпасов. Сделайте это до %2:%3. Мы не знаем в каком доме будет место встречи. Найдите это место по присутствию MRAP и CSAT. + Malas noticias, uno de los nuestros está planeando desertar. Hemos seguido sus movimentos hasta cerca de la ciudad de %1. No tenemos otra opción. Mátalo antes de que facilite al enemigo información de la posición de nuestros soldados y activos de la FIA. Hazlo antes de las %2:%3. No sabemos exactamente dónde sera la reunión. Reconoceras el edificio por estar cerca un MRAP y presencia del CSAT. - - - Kidnap the Mayor - - - The mayor of %1 is having a meeting with an enemy representetive, this is our chance to kidnap him and take him to our HQ for a much needed chat. The mayor must not die! Do this before %2:%3. - - - + + Kidnap the Mayor + Похитить Мэра + Secuestrar al Alcalde + + + The mayor of %1 is having a meeting with an enemy representetive, this is our chance to kidnap him and take him to our HQ for a much needed chat. The mayor must not die! Do this before %2:%3. + Мэра населённого пункта %1 видели на военной базе противника, похитьте его и заберите в наш Штаб для допроса. Мэр не должен умереть! Сделайте это до %2:%3. + El alcalde de %1 tiene una reunión con representantes enemigos, es nuestra oportunidad de secuestrarle y traerlo al HQ para una charla muy necesaria. El alcalde no debe morir! Hazlo antes de las %2:%3. + + Defend Petros + Защитить Петроса + Defiende a Petros - + CSAT knows the location of our HQ. We suspect that they have sent a SpecOps Air Squad in order to kill Petros. We have two choices - Either retreat and move HQ further than 1km away, or defend with all we have. + Противник узнал позицию нашего Штаба. Они вышлют спецназ на вертолётах, чтобы убить Петроса. У нас есть два варианта - отступить и перенести Штаб более чем на 1 км от старой позиции, или обороняться всем чем можем. + El CSAT conoce la ubicación del HQ. Creemos que han enviado un equipo aéreo de op. especiales para matar a Petros. Tenemos dos opciones - Retirarnos y desplegar el HQ a más de un 1km, o defenderlo con todo lo que tenemos. - - + Clear the Outpost + Зачистить ОП + Despeja el Puesto Avanzado - + A CSAT %1 is disturbing our operations in the area. This heavily defended outpost has Mortar and UAV, from what our spies tell us. We advise the destruction of the Drone before engaging and elimination the majority of ground troops. If there is an AA tank, this is also a priorty target. The operation must be completed before %2:%3. + Спецназ %1 срывает наши операции в этом районе. Наши агенты выяснили, что опорный пункт спецназа хорошо защищён, имеет миномёт и БПЛА. Мы советуем уничтожить БПЛА перед наземной атакой. Если у них есть зенитная установка - уничтожьте её в первую очередь. Задание должно быть выполнено до %2:%3. + Un %1 del CSAT interrumpe nuestras operaciones en la zona. Este puesto fuertemente defendido cuenta con morteros y UAV, según nuestros espías. Aconsejamos la destrucción del dron antes de atacar y eliminar a la mayoría de las tropas de tierra. Si hay un tanque AA, será el objetivo prioritario. La operación debe estar completada antes de las %2:%3. - - + Take the Power Plant + Захватить электростанцию + Captura la Central Energética - + A %1 has a monopoly over the power supply to nearby towns. Nato might not like this, but we have no choice- We need the Towns on our side and to achieve this we will need the Powerplant. Capture it before %2:%3. + ЭС в %1 монопольно снабжает электроэнергией близлежащие населённые пункты. Захватите её до %2:%3. Союзникам это может не понравиться, но у нас нет другого выбора - населённые пункты перейдут на нашу сторону если мы будем контролировать электростанцию. + El %1 tiene el monopolio del suministro de energía en las ciudades cercanas. A la OTAN no le gustará, pero no tenemos opción- Necesitamos las ciudades de nuestro lado y para lograrlo necesitamos la Central Eléctrica. Capturala antes de las %2:%3. - - + Take the Outpost + Захватить ОП + Captura el Puesto Avanzado - + A %1 is disturbing our operations in the area. Go there and capture it before %2:%3. + %1 срывает наши операции в этом районе. Идите и захватите опорный пункт противника до %2:%3. + El %1 está interrumpiendo nuestras operaciones en la zona. Ve y capturalo antes de las %2:%3. - - + %1 Ammo Convoy + Конвой с боеприпасами + %1 - Convoy de Munición - + A convoy from %1 is about to depart at %2:%3. It will provide ammunition to %4. Try to intercept it. Steal or destroy that truck before it reaches it's destination. Be careful, the enemy may provide an armoured escort. + Конвой противника в %2:%3 отправляется из %1. Он везёт боеприпасы в %4. Попытайтесь его перехватить. Захватите или уничтожьте грузовик с боеприпасами, прежде чем он достигнет места назначения. Будьте осторожны, конвой может сопровождать бронетехника. + Un convoy desde %1 ha salido a las %2:%3. Va a llevar munición a %4. trata de interceptarlo. Roba o destruye el camión antes de que llegue a su destino. Ten cuidado, el enemigo le habrá dispuesto un blindado de escolta. - - + %1 Armored Convoy + Конвой бронетехники + %1 - Convoy Blindado - + A convoy from %1 is about to depart at %2:%3. It will reinforce %4 with armored vehicles. Try to intercept it. Steal or destroy the main Armoured Vehicle before it reaches it's destination. + Конвой противника в %2:%3 отправляется из %1. Он перегоняет бронетехнику в %4. Попытайтесь его перехватить. Захватите или уничтожьте перегоняемую бронетехнику, прежде чем она достигнет места назначения. + Un convoy desde %1 ha salido a las %2:%3. Van a reforzar %4 con vehículos blindados. Trata de interceptarlo. Roba o destruye el blindado principal antes de que llegue a su destino. - - + %1 Prisoner Convoy + %1 Конвой с пленными + %1 - Convoy de Prisioneros - + A group of POW's is being transported from %1 to %4, departing at %2:%3. Sadly, it seems the enemy are planning their execution. We must intercept it and rescue them. Kill the driver or capture the truck to make them join you and bring them to HQ. + Конвой противника в %2:%3 отправляется из %1. Он перевозит военнопленных в %4, чтобы потом их публично казнили. У нас есть единственный шанс перехватить конвой и спасти их. Захватите грузовик и доставьте военнопленных в Штаб. + Un grupo de prisioneros está siendo transportado desde %1 a %4, saliendo a las %2:%3. Por desgracia, el enemigo planea su ejecución. Debemos interceptarlo y rescatarlos. Mata al conductor o captura el camión para que se unan a nosotros y traelos al HQ. - - + %1 Money Convoy + %1 Конвой с деньгами + %1 - Convoy de Dinero - + The enemy have been spotted moving large amounts of money from %1 to %4 departing at %2:%3. Steal that truck and bring it to HQ. There aren't many better opportunities to acquire the funds we will need to build up our army, don't screw up! + Конвой противника в %2:%3 отправляется из %1. Он перевозит деньги в %4. Захватите грузовик и привезите его в Штаб. Другого способа добыть такую большую сумму денег у нас нет, эти деньги пойдут для увеличения наших войск, не облажайтесь! + El enemigo ha sido avistado moviendo grandes sumas de dinero desde %1 a %4 a las %2:%3. Roba el camión y traelo al HQ. No hay muchas oportunidades para adquirir los fondos que necesitaremos para construir nuestro ejército, no la cagues! - - + %1 Supply Convoy + %1 Конвой снабжения + %1 - Convoy de Suministros - + A truck with medical supplies is about to depart from %1 to %4 at %2:%3. Steal the truck and bring it to %4 . Let the people there know of the FIA's 'benevolence' . + Конвой противника в %2:%3 отправляется из %1. Он перевозит медикаменты в %4. Захватите грузовик и сами привезите его в %4. Люди будут больше доверять FIA когда мы им помогаем, а не противник. + Un camión con suministros médicos ha salido de %1 a %4 a las %2:%3. Roba el camión y llevalo a %4. Haz que la gente conozca la 'benevolencia' de la FIA. - - + %1 HVT Convoy + %1 Конвой высокого ранга + %1 - Convoy Alto Rango - + From what we know, a high-value target will travel from %1 to %4. His departure is scheduled for %2:%3. Seize the opportunity and take him out! We believe he will use a decoy to obscure his exact vehicle. + Конвой противника в %2:%3 отправляется из %1. Он сопровождает генерала в %4. Не упустите возможность уничтожить такого важного противника! Мы считаем, что он будет использовать приманку, чтобы скрыть свой настоящий транспорт. + Por lo que sabemos, un objetivo de alto valor viaja desde %1 a %4. Su salida está programada para las %2:%3. Aprovecha la oportunidad y captúralo! Creemos que usaran un señuelo para ocultar el vehículo exacto. - - + Defend %1 + Защитите %1 + Defender %1 - + A QRF has just been spotted taking off from %2. Their initial heading suggests that %1 is their target. We have no choice, assume defensive positions + Только что был замечен взлет десантного вертолёта ОБР из %2. Мы предполагаем, что их целью является %1. У нас нет выбора, займите оборонительные позиции. + Fuerzas de acción rápida han sido avistadas cerca de %2. Su avance inicial sugiere que %1 es su objetivo. No hay opción, asuman posiciones defensivas. - - + Destroy Radio Tower + Уничтожить радиовышку + Destruye la Torre de Radio - - An opportunity to strike a Radio Tower in %1 presents its self. If we manage this it will interrupt %4 Comms Nework in the AO. We can destroy the antenna or capture the outpost but must complete it before %2:%3. + + An opportunity to strike a Radio Tower in %1 presents its self. If we manage this it will interrupt %4 Comms Nework in the AO. We can destroy the antenna or capture the outpost but must complete it before %2:%3. + Представилась возможность нанести удар по радиовышке в %1. Если нам это удастся, это нарушит сеть связи %4 на части оккупированной территории. Уничтожьте антенну или захватите опорный пункт, задание должно быть выполнено до %2:%3. + Se nos ha presentado la oportunidad de atacar la Torre de Radio de %1. Si lo logramos, interrumpira la red de comunicaciones en el área de operaciones %4. Podemos destruir la antena o capturar el puesto pero debemos hacerlo antes de las %2:%3. - - + Destroy Air + Уничтожить авиатехнику + Destruir Aeronave - + We have downed air vehicle. This is a great chance to destroy it before it is recovered by a recovery team from %1 reaches the crash site + Мы посадили летательный аппарат противника. Необходимо его уничтожить, прежде чем ремонтно-спасательная группа из %1 достигнет места катастрофы и починит его. + Hemos derribado un vehículo aéreo. Es una gran oportunidad para destruirlo antes de que lo recupere un equipo de reconocimiento enviado desde %1 al lugar del accidente. - - + Steal or Destroy Armor + Угнать или уничтожить бронетехнику + Roba o Destruye el Blindado - + We know an %4 is stationed in %1. This is a good chance to steal or destroy it before it causes more damage. Do it before %2:%3. + Мы узнали, что %4 дислоцируется в %1. Сейчас самое время, чтобы захватить или уничтожить его, прежде чем он сможет наделать бед. Задание должно быть выполнено до %2:%3. + Sabemos que %4 está ubicado en %1. Es nuestra oportunidad de robar o destruirlo antes de que cause más daños. Hazlo antes de las %2:%3. - - + Contact the Corrupt Politician + Контакт с политиком + Contactar con el Político Corrupto - + A local politician who is sympathetic to our cause is willing to meet us near %1 until %2:%3. As it happens, he has a couple of jobs he's offering to undermine %4 control in this AO. He has stated that he is willing to speak to us only on the condition that none of our agents are overt within that town. In other words, put on your sunday-best and meet him disguised. + Местный политик, симпатизирующий нам, готов встретиться с нами рядом с %1 до %2:%3. Как это бывает, у него есть несколько заданий, которые, как он предполагает, смогут лишить %4 контроля в этом районе. Он заявил, что готов говорить с нами, если ни один из наших агентов не будет обнаружен противником в районе места встречи. Другими словами, оденьте свой лучший воскресный костюм и встретьтесь с ним замаскированным. + Un político local simpatizante de la causa se reunirá con nosotros cerca de %1 hasta las %2:%3. Tiene un par de trabajos que ofrecernos para bajar el control de %4 en el área de operaciones. Ha declarado que está dispuesto a hablar con nosotros sólo si ninguno de nuestros agentes es descubierto dentro de la ciudad. Ya sabes, ponte de domingo y ve hasta él disfrazado. - - + Find the Crazy Irishman + Безумный Ирландец + Encuentra al Irlandés Loco - + Black Market dealer Devin Connell has been spotted near %1. He's scheduled for a flight to Metavira or Arulco at %2:%3, so you better hurry up if you wish to acquire some of his fine products. From our recent meetings with him, he has agreed to meet with FIA overt soldiers only, apparently he doesnt like civilians all that much. + Дилер черного рынка Девин Коннелл торгует оружием рядом с %1. У него в кармане билет на самолёт, улетающий в %2:%3, так что Вам лучше поторопиться, если Вы хотите приобрести что-то из его отличного товара. Судя по последним встречам с ним, он будет разговаривать только с солдатами FIA без прикрытия, по видимому, непонятных гражданских он не очень любит. + El contrabandista Devin Connell ha sido visto cerca de %1. Tiene planeado un vuelo para Metavira o Arulco a las %2:%3, será mejor que te des prisa si quieres adquirir equipo de calidad. Por nuestras últimas reuniones con él, ha aceptado reunirse con los soldados de la FIA solamente, por lo visto no le gustan los civiles demasiado. - - + Contact the Corrupt Officer + Контакт с офицером + Contactar con el Oficial Corrupto - + A disgruntled %4 officer is trying to leave Altis. His departure is scheduled for %2:%3. If you manage to get to him in time, you might be able to convince him to stay and support our case. He was spotted near %1 and has stated that he is willing to speak to us only on the condition that none of our agents are overt within that town. In other words, put on your sunday-best and meet him disguised. + Недовольный %4 офицер, пытается покинуть Альтис. Его отъезд запланирован на %2:%3. Если вам удастся успеть добраться до него, Вы могли бы убедить его остаться и поддержать нас. Его видели возле %1, он заявил, что готов говорить с нами, если ни один из наших агентов не будет обнаружен противником в районе места встречи. Другими словами, оденьте свой лучший воскресный костюм и встретьтесь с ним замаскированным. + Un oficial descontento del %4 trata de abandonar Altis. Su marcha está planificada para las %2:%3. Si te las arreglas para llegar a tiempo, es posible que puedas convencerlo de quedarse y apoyar nuestra causa. Ha sido visto cerca de %1 y comenta estar dispuesto a hablar con nosotros sólo si ninguno de nuestros agentes es descubierto dentro de la ciudad. Ya sabes, ponte de domingo y ve hasta él disfrazado. - + Steal or Destroy Ammotruck + Угнать или уничтожить грузовик боеприпасов + Roba o Destruye el Camión de Munición - + We've spotted an enemy Ammotruck in an %1. This is a great opportunity to scavange some well-needed gear from the enemy. We have until %2:%3. + В %1 был замечен вражеский грузовик с боеприпасами. Это отличная возможность захватить боеприпасы противника. Мы должны успеть до %2:%3. + Hemos localizado un camión con munición cerca de %1. es una gran oportunidad para saquear algo de equipamiento enemigo. Tenemos hasta las %2:%3. - - + Bank Robbery + Ограбление банка + Robar el Banco - + We know %4 is guarding a large amount of money in the bank of %1. Take this getaway vehicle and go there before %2:%3, hold the truck close to thw bank's main entrance for 2 minutes and the money will be transferred to the truck. Bring it back to HQ and the money will be ours. + Мы знаем, что силы %4 охраняют сейчас большую сумму денег в банке %1. Возьмите этот фургон для денег и успейте туда до %2:%3, подгоните фургон вплотную к главному входу банка на 2 минуты, и деньги будут погружены на грузовик. Пригоните его обратно в Штаб и деньги будут наши. + Sabemos que %4 está protegiendo una gran cantidad de dinero en el banco de %1. Toma el vehículo de huida y ve antes de las %2:%3, manten el camión cerca de la entrada principal del banco durante 2 minutos y el dinero será introducido al camión. Tráelo de vuelta al HQ y el dinero será nuestro. - - + Supply Recovery + Вернуть груз + Recuperar Suministros - + We've had word from our informant that a sympathetic cell has sent supplies to %1. They ran into an %5 patrol and the crate felt down from their truck while fleeing. Find and secure the goods, then deliver them to the people in %1 before %2:%3. %5 command has probably dispatched reinforcements from %4 to retrieve the goods, so you better hurry. + Наш осведомитель сообщил, что дружественная подпольная ячейка отправила груз медикаментов в %1. Они столкнулись с патрулем в %5, контейнер с грузом выпал из грузовика во время бегства. Найдите и соберите груз, затем доставьте его людям в %1 до %2:%3. Командование %5, вероятно, отправило подкрепление из %4, забрать груз, поэтому Вам лучше поторопиться. + Según nos comenta un informante, una célula simpatizante ha enviado suministros a %1. Se encontraron con una patrulla de %5 y tuvieron que abandonar el camión. Encuentra y asegura el vehículo, luego entrega los suministros a las gentes de %1 antes de las %2:%3. %5 puede haber enviado patrullas desde %4 para recuperar los suministros, date prisa. - - + City Supplies + Гуманитарная помощь + Suministros a la Ciudad - + %1 population is in need of supplies. Load this box on a car and unload it where the marker indicate you. Keep the area secure for 2 minutes to let the population grab what they need. Do it before %2:%3. + Население %1 нуждается в гуманитарной помощи. Загрузите ящик с гуманитарной помощью в автомобиль и доставьте на место, помеченное на карте. Обеспечьте безопасность этого места в течение 2 минут, чтобы население успело получить продукты и медикаменты. Сделайте это до %2:%3. + La gente de %1 necesita suministros. Tenemos justo lo que necesitan y puede mejorar nuestra relación con ellos. Reservé un camión de transporte con suministros cerca de nuestro HQ. Conduce el camión hasta el centro de la ciudad de %1. Mantente allí durante 2 minutos antes de las %2:%3. - - + %1 Ammodrop + Сброс снаряжения %1 + %1 - Envio de Munición - + Our Commander has asked %1 for a supply drop. Command the transport with your HC module and bring it to the designated position. Once it has landed you are free to use the equipment or bring it back to HQ. We dont think they will be able to supply us again for some time. + Наш Командир запросил у %1 воздушную доставку снаряжения. Проведите транспорт до указанной точки, управляя им в режиме управления группами. После того, как груз приземлится, заберите снаряжение с собой или доставьте его в Штаб. Повтор воздушной доставки силы %1 сделают лишь через некоторое время. + Nuestro Comandante ha pedido a %1 que nos envien suministros. Lleva el transporte de carga usando el módulo HC y tráelo a la posición designada. Una vez en tierra, eres libre de usar el equipo o traerlo al HQ. No creemos que puedan suministrarnos de nuevo en un tiempo. - - + Establish Propaganda Station + Точка пропаганды + Establecer Estación de Propaganda - + We have noticed that the town of %1 is sympathetic to our cause. Travel there with this Truck and establish a semi-permanent propaganda station in order to spread the word. Once established, stay with and guard the station for as long as you deem necessary to raise town support. It would be wise to expect a number of enemy military responses to this action. You have until %2:%3 to arrive and set it up. + Мы заметили, что в %1 многие жители нам симпатизируют. Отправляйтесь туда на этом грузовике, временно разверните там точку пропаганды и начните вещание. После ее включения оставайтесь рядом и охраняйте сколько сможете и считаете необходимым. Все это время будет расти уровень нашей поддержки населения в %1. Враг будет оказывать сопротивление. Вы должны успеть приехать и развернуть точку до %2:%3. + Nos informan que la ciudad de %1 es simpatizante de la causa. Viaja allí con este Camión y establece una estación de propaganda semipermanente para hacer llegar nuestro mensaje. Una vez establecida, permanece y protege la estación el tiempo que consideres necesario para aumentar el apoyo de la ciudad. Esperamos una serie de respuestas militares enemigas a esta acción. Tienes hasta las %2:%3 para llegar y montarla. - + You failed to set up the gear before %2:%3. + Вы не успели начать вещание до %2:%3. + No has podido desplegar el equipo antes de las %2:%3. - + Protect the station for as long as you can. We have enough battery capacity to run this station until %2:%3, so don't drag this out. + Защищайте точку как можно дольше. Заряда батарей точки достаточно, чтобы она проработала до %2:%3, не дайте противнику её отключить. + Protege la estación todo el tiempo que puedas. Tenemos suficiente capacidad de batería para mantener la estación hasta las %2:%3, así que no la muevas. - + You held the position for less than 10 minutes. + Вы смогли удерживать позицию менее 10 минут. + Mantuviste la posición menos de 10 minutos. - + You managed to hold the position long enough to inspire the population. + Вы смогли удерживать позицию достаточно долго, чтобы вдохновить население. + Has logrado mantener la posición el tiempo suficiente para inspirar a la población. - - + Leaflet Drop + Доставить листовки + Entregar Panfletos - + Supporters of our cause have been working hard to bring the population of %1 over to our side. Help these brave volunteers by delivering these leaflets to safe drop locations. Pick up will take place at %2:%3, so you better have them in place by then. This might be easier if you manage to remain undetected for as long as possible. + Наши добровольцы стараются убедить население %1 стать нашими сторонниками. Помогите им, доставьте эти листовки по адресам, которые они укажут. Ящики заберут в %2:%3, так что лучше их уже доставить к этому времени. Вам будет проще, если удастся остаться незамеченными как можно дольше. + Partidarios de la causa han estado trabajando duro para traer a la población de %1 a nuestro bando. Ayuda a estos valientes voluntarios entregando estos panfletos en las zonas seguras. La recogida se hará a las %2:%3, así que es mejor que esten entregados para entonces. Facilitaria las cosas que permanezca sin ser detectado el mayor tiempo posible. - + You failed to provide leaflets for our volunteers in %1. + Вы не доставили листовки для наших добровольцев в %1 + Has fallado al entregar los folletos para nuestros voluntarios en %1. - + Drop a crate within 20m of the marked position, do this before %2:%3. + Сбросьте ящик в пределах 20 м от указанной на карте позиции, сделайте это до %2:%3. + Deja la caja dentro de los 20m de la posición marcada, hazlo antes de las %2:%3. - + Well done. Our volunteers in %1 are now spreading the word. + Отлично сработано. Наши добровольцы в %1 теперь смогут агитировать за нас. + Bien hecho. Nuestros voluntarios de %1 expanden nuestras consignas. - - + Tower Rebuild Disrupt + Помешать восстановлению радиовышки + Impedir la Reconstrucción de la Torre - + %4 is rebuilding a radio tower in %1. If we want to keep up the enemy comms breakdown, the work must be stopped. Destroy the repair truck parked nearby or capture the zone. Work will be finished at %2:%3. + %4 восстанавливает радиовышку в %1. Если мы хотим, чтобы сеть связи противника не работала, мы должны помешать восстановлению. Уничтожьте ремонтную машину, припаркованную поблизости, или захватите зону. Работа будет закончена в %2:%3. + %4 está reconstruyendo la torre de radio en %1. Si queremos mantener cortadas las comunicaciones enemigas, el trabajo debe deternerse. Destruye el camión de reparación aparcado cerca o captura la zona. El trabajo debe acabar antes de las %2:%3. - - + POW Rescue + Спасти в/пленных + Rescate de Prisioneros - + A group of POWs is awaiting execution at %1. We must rescue them before %2:%3 and bring them to HQ. It would be wise to avoid using anything explosive in your rescue attempt for fear of collateral damage. + Группа военнопленных ожидает казни в %1. Мы должны спасти их, до %2:%3 и привести в наш Штаб. Не рекомендуется использовать взрывчатку во время спасательной операции из-за серьезного риска нанести вред военнопленным. + Un grupo de prisioneros espera su ejecución en %1. Debemos rescatarles antes de las %2:%3 y traerlos al HQ. Sería prudente evitar el uso de explosivos durante el rescate para evitar daños colaterales. - - + Refugees Evac + Эвакуация беженцев + Evacuar Refugiados - + A group of FIA supportes are hidden in a house in %1. We have to get there and find them before %2 does and bring them back to base. + Группа сторонников FIA спрятались от противника в доме в %1. Мы должны добраться туда, найти их раньше %2 и вернуть их обратно в Штаб. + Un grupo de partidarios del FIA están escondidos en una casa en %1. Tenemos que llegar allí y encontrarlos antes de que %2 lo haga y traerlos de vuelta a la base. - - + Intercept Reinforcements + Перехват подкрепления + Interceptar Refuerzos - + In response to the casualties suffered by the garrison at the %2, %1 are preparing to send reinforcements from %3. They will be ready to roll out within minutes. Try to catch them on the move! + В ответ на потери, понесенные гарнизоном в %2, %1 готовятся отправить подкрепление из %3. Они будут готовы к отправке в течение нескольких минут. Попытайтесь перехватить подкрепление до того, как они доберутся до места! + En respuesta a las bajas sufridas en la guarnición de %2, %1 está preparando un envío de refuerzos desde %3. Estarán listos para desplegarse en cuestión de minutos. Trata de atraparlos en el trayecto! - - + Destroy the enemy taskforce. + Уничтожить группу противника. + Destruir Escuadrón Enemigo - - We have received word that the enemy are supressing a community at their local church. If we wipe them out we will surely bring some support to our cause. Go to the location and kill the squad. + + We have received word that the enemy are suppressing a community at their local church. If we wipe them out we will surely bring some support to our cause. Go to the location and kill the squad. + Мы получили донесение о том, что группа спецназа удерживает жителей в местной церкви. Если мы уничтожим эту группу, мы, безусловно, поддержим наше дело. Идите в указанное место и устраните группу противника. + Hemos recibido noticias de que el enemigo está reteniendo a una comunidad en su iglesia local. Si los eliminamos, seguramente traeremos algo de apoyo a nuestra causa. Ve a la localización y acaba con el escuadrón. - - - Steal or destroy Fuel Truck. + + Steal or destroy Fuel Truck. + Угнать или уничтожить Бензовоз. + Robar o Destruir el Camión de Combustible - + The enemy is taking fuel from the civilians to supply their war machine. The truck is leaving from %1 and will return there once it is full. We have a contact who will let us know when the truck is at the fuel station. Destroy the fuel truck or take its control. + Противник закупает топливо у гражданских для своих военных нужд. Топливозаправщик покинул %1 и вернется туда, как только заправится. У нас есть контакт, который должен сообщить нам, когда грузовик будет на АЗС. Уничтожьте или захватите этот топливозаправщик. + El enemigo está cogiendo el combustible de los civiles para abastecer su maquinaria de guerra. El camión está yendo de %1 y regresará allí una vez que esté lleno. Tenemos un contacto que nos avisará cuando el camión esté en la estación de servicio. Destruye el camión de combustible para mostrar al enemigo y a la población que no apoyaremos la colaboración. - - + Forest Patrol + Лесной патруль + Patrulla Forestal - + Reports have come in that a patrol is being dispatched from the %1 to this location. There will be a CSAT SpecOps ground team in the patrol training them in Forest warfare. We know they are patrolling within approximately 150 meters of this point. Go there and assassinate them. Do this before %2:%3. + Появились сведения о том, что из %1 в это место отправился патруль противника. В патруле будет группа спецназа, которая будет отрабатывать ведение боевых действий в лесу. Мы знаем, что они патрулируют примерно в 150 метрах от этого пункта. Следуйте туда и уничтожьте их. Сделайте это до %2:%3. + Nos llegan informes sobre una patrulla que ha sido enviada desde %1 a esta ubicación. Habrá un equipo de op. especiales del CSAT en unas maniobras por el bosque. Sabemos que están patrullando un radio de 150 metros desde este punto. Ve allí y elimínalos. Hazlo antes de las %2:%3. - - + + Post \ Roadblock Deploy + Развернуть БП/НП + + + We are sending a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination. + Мы посылаем группу, чтобы развернуть блокпост или наблюдательный пост. Сопровождайте группу, пока она не достигнет места назначения. + + + Camp Setup + Развернуть лагерь + + + We are sending a team to establish a camp. Send and cover the team until reaches it's destination. + Мы посылаем группу, чтобы развернуть лагерь. Сопровождайте группу, пока она не достигнет места назначения. + + Radio Tower Destroyed + Радиовышка разрушена + Torre de Radio Destruida - - Roadblock cleansed. + + Roadblock Cleansed. + Блокпост зачищен + Control de Carretera Despejado - + Observation Camp Cleansed. + Наблюдательный пункт зачищен. + Puesto de Observación Despejado. - + %1 emplacement destroyed. + Огневая позиция %1 уничтожена. + Emplazamiento %1 destruido. - + Camp %1 was destroyed by hostile forces. + Лагерь %1 был уничтожен врагом. + El campamento %1 ha sido destruido por fuerzas hostiles. - - + Significant activity is being reported at %2. %1 appear to be preparing a major assault. Get ready. + Сообщение о значительной активности в %2. Похоже силы %1 готовят наступление. Приготовьтесь! + Se informa sobre actividad significativa en %2. %1 parece estar preparando un gran asalto. Prepárese! - + Sources near %4 report of an imminent attack by %1 and %2 on %3. Setup defences immediatly! + Источники около %4 сообщают о неминуемой атаке %1 и %2 на %3. Займитесь обороной немедленно! + Fuentes cercanas a %4 informan de un ataque inminente de %1 y %2 sobre %3. Monten defensas inmendiatamente! - + %1 is under attack! + %1 подвергся нападению! + %1 está bajo ataque! - + %1 Armor + Броня %1 + + Our Commander asked %5 for an armored column departing from %2 with destination %1. Provide whatever support you can. They are scheduled to leave the AO at %3:%4. + Наш Командир попросил %5 организовать бронированную колонну, из %2 в %1. Предоставьте любую поддержку. Они планируют покинуть расположение в %3:%4. + Nuestro comandante solicitó a %5 una columna de blindados que sale desde %2 con destino a %1. Proporcione todo el apoyo que pueda. Se espera su llega en la zona a las %3:%4. - - + + %1 Attack + Атака %1 + + + Our Commander asked %3 for an attack on %1. Help them in order to have success in this operation. Their attack will depart from %2 + Наш Командир запросил у %3 атаковать %1. Помогите им добиться успеха в этой операции. Их атака начнётся в %2 + + We can only deploy\delete one emplacement at a time. + Мы можем развернуть\убрать только одну позицию за раз. + Solo podemos desplegar\borrar un emplazamiento a la vez. - + You need a radio in your inventory to be able to give orders to other squads. + Вам нужна радиостанция, чтобы отдавать приказы другим отрядам. + Necesitas una radio en el inventario para dar ordenes a otros escuadrones. - + We currently have no roadblocks or watchposts. + В настоящее время у нас нет блокпостов или наблюдательных пунктов. + Actualmente no tenemos controles o observatorios. - + You cannot delete an emplacement while there are enemies near it. + Вы не можете убрать позицию, пока поблизости есть противник. + No puedes borrar un emplazamiento mientras hay enemigos cerca. - + Click on the position you wish to build the wachpost or roadblock. \n Remember: to build roadblocks, you must click exactly on a road map section. + Кликните по позиции, где Вы хотите построить наблюдательный пункт или блокпост. \n Запомните: для создания БП нужно кликнуть точно на дороге на карте. + Click en la posición donde deseas construir el observatorio o control. \n Recuerda: para construir controles, debes hacer click en una sección de mapa con carretera. - + You lack of resources to build this emplacement. \n %1 HR and %2€ required. + Недостаточно ресурсов для создания этой огневой позиции. \n Требуется %1 HR И %2€. + Careces de recursos para construir este emplazamiento. \n %1 HR y %2€ requeridos. - + Click on the watchpost or roadblock you wish to delete. + Нажмите на БП/НП, который Вы хотите удалить. + Click en el puesto de observación o control que quieras borrar. - + No emplacement nearby. + Поблизости нет места. + No hay emplazamientos cercanos. + + + + + %1 UAV + Ударный БПЛА %1 + + + %4 is providing Air support from %1. They will be under our command until %2:%3. + %4 обеспечивает авиаподдержку из %1. Он будет под нашим командованием до %2:%3 + + + %1 UAV will be available on HC module in a few seconds. + Ударный БПЛА будет доступен для управления из панели командира через несколько секунд + + + %1 Artillery + Артиллерия %1 + + + We have %4 Artillery support from %1. They will be under our command until %2:%3. + У нас есть %4 артиллерийской поддержки от %1. Они будут под нашим командованием до %2:%3. + + + + + Minefield deploy + Минирование + + + An Engineer Team has been deployed at your command with High Command Option. Once they reach the position, they will start to deploy %1 mines in the area. Cover them in the meantime. + Команда инженеров выдвинулась по Вашей команде. Как только они достигнут позиции, они начнут закладку %1 мин в этом районе. Прикрывайте их тем временем. + + + Engineer Team deploying mines. + Команда инженеров закладывает мины + + + + + + + Airport Taken + Авиабаза захвачена + + + Base Taken + Военная база захвачена + + + Powerplant Taken + Электростанция захвачена + + + Outpost Taken + Опорный пункт захвачен + + + Seaport Taken + Порт захвачен + + + Factory Taken + Фабрика захвачена + + + Resource Taken + Ресурс захвачен + + + %1 joined FIA + %1 перешел на сторону FIA + + + %1 UAV finished + УБПЛА %1 + + + + + Resource out of Power + Ресурс обесточен + + + %1 rebuilt by AAF + Противник восстановил %1 + + + %1 Destroyed + %1 уничтожен + + + Outpost Lost + Опорный пункт потерян + + + Sea Port Lost + Порт потерян + + + Powerplant Lost + Электростанция потеряна + + + Resource Lost + Ресурс потерян + + + Factory Lost + Фабрика потеряна + + + Base Lost + Военная база потеряна + + + Airport Lost + Авиабаза потеряна + + + %1 перешел на сторону AAF + %1 перешел на сторону AAF + + + Roadblock Lost + Блокпост потерян + + + Watchpost Lost + Наблюдательный пост потерян - Only the Commander may move assets. + Только Командир может перемещать Предметы. + Sólo el Comandante puede mover activos. You need to be on foot and not controlling AI to move assets. + Для того чтобы перемещать Предметы Вам нужно спешиться и перестать управлять ИИ + Necesitas estar de pie y sin controlar IA para mover activos. This asset is too far from the zone. + Этот Предмет слишком далеко от зоны. + Este activo está demasiado lejos de la zona. You cannot move assets farther than %1m from the zone. + Вы не можете перемещать Предметы дальше %1м от зоны. + No puedes mover activos más lejos de %1m de la zona. - You have one chance, join us and help us liberate %1 from tyranny! + У Вас есть единственный шанс, присоединяйтесь к нам и помогите нам освободить %1 от тирании! + Tienes una oportunidad, únete a nosotros y ayudanos a liberar %1 de la tiranía! Okay, thank you. I wasn't expecting this. See you at HQ. + Хорошо, спасибо. Я этого не ожидал. До встречи в Штабе. + Ok, gracias. No me lo esperaba. Te veo en el HQ. Sod off! + Пошёл ты! + Que te jodan! - - + + + %6\n\nTotal pop: %1\nFIA Support: %2\nAAF Support: %3 \n\nDestroyed Cities: %4\n\nClick on the zone \n\n Current active units = %5 \n With more than 175 AI their performances drops a lot! + %6\n\nВсего населения: %1\nПоддерживают FIA: %2\nПоддерживают противника: %3 \n\nУничтоженных Городов: %4\n\nКликните по интересующей Вас зоне \n\n Юнитов активно = %5 \n Если активно более 175 AI это сильно влияет на производительность! + %6\n\nTotal pop: %1\nApoyo FIA: %2\nApoyo AAF: %3 \n\nCiudades Destruidas: %4\n\nClick en la zona \n\n Unidades activas actuales = %5 \n Con mas de 175 IA el rendimiento cae mucho! + + + Initial HQ Placement Selection + Выбор позиции Штаба + Selección inicial de ubicación del HQ Click on a map position to select your starting location + Кликните по месту на карте, где будет расположен Штаб + Click en la posición del mapa para seleccionar tu ubicación inicial Close the map with M or ESC to start in the default position + Закройте карту с помощью клавиш M или ESC, чтобы начать на позиции по умолчанию + Cierra el mapa con M o ESC para empezar en el sitio por defecto Try not to select areas with nearby enemies\n\nGameplay and difficulty change with different starting locations. + Старайтесь не выбирать позицию рядом с противником\n\nВыбор позиции на старте влияет на сложность и процесс игры. + Trata de no seleccionar áreas con enemigos cercanos\n\nLa experiencia y dificultad varia según el punto de inicio. - Petros is Dead + Петрос мертв + Petros ha muerto Petros has been killed. You lost part of your assets and need to select a new HQ position. + Петрос был убит. Вы потеряли часть своих военных запасов, придётся выбрать новую позицию Штаба. + Petros ha sido asesinado. Pierdes parte de tus activos y necesitas seleccionar una nueva localización para el HQ. - The selected position is too close to enemy zones, please select another. + Выбранная позиция находится слишком близко к зонам противника, выберите другую. + La posición seleccionada está muy cerca de zonas enemigas, por favor, selecciona otra. You cannot place your HQ in the water. Please select another position. + Вы не можете разместить Штаб в воде. Выберите другую позицию. + No puedes montar el HQ en el agua. Por favor, selecciona otra ubicación. There are enemies nearby, please select another position. + Рядом есть противник, выберите другую позицию. + Hay enemigos cerca, por favor, selecciona otra ubicación. Please wait while your assets are being moved to the selected location. + Подождите, пока Ваши Предметы будут размещены на выбранной позиции. + Espera mientras tus activos son movidos a la localización escogida. - - + Progress Saved + Прогресс сохранён + Progreso Guardado You won't lose your stats in the event of a game update. + Вы не потеряете свой прогресс после обновления игры. + No perderás tus estadísticas en caso de actualización del juego. Vehicles outside of your garage will only be saved if they are within 50m of your HQ flag, with no AI inside. + Техника вне Вашего гаража будет сохранена только в том случае, если она находится в пределах 50м от Флага Штаба, без ИИ внутри. + Los vehículos fuera del garaje sólo se guardaran si están dentro de 50m de la bandera del HQ, sin IA dentro. AI units and squads will not be saved, but you will be reimbursed. + Одиночные ИИ и группы ИИ не будут сохранены, но будут компенсированы. + Las unidades IA y escuadrones no se salvarán, pero serán reembolsados. Static weapons need to be within 50m of a friendly flag, and they need to be assembled, otherwise they will not be saved. + Станковое оружие должно находиться в пределах 50м от дружественного флага, и должно быть в сборе, иначе оно не будет сохранено. + Las armas estáticas necesitan estar a menos de 50m de una bandera aliada y deben estar montadas, sino no se guardaran. - + + You're building HQ 500m away from any road \n\n some FIA reinforcements might not be available. + Вы установили Штаб более чем в 500м от дорог. Некоторые отряды FIA будет невозможно использовать. + Estás construyendo el HQ a 500m de cualquier carretera \n\n algunos refuerzos del FIA podrían no estar disponibles. + + + HQ is further than 500m from any road, FIA reinforcements can't reach you! + Штаб находится на расстоянии более 500 м от любой дороги, подкреплений FIA не будет! + El HQ está a más de 500m de una carretera, los refuerzos del FIA no pueden alcanzarlo! + Player Commander disconnected or retired. %1 is our new leader. Greet him! + Командир отключился или в отставке. Наш новый лидер - %1. + El Comandante se ha desconectado o retirado. %1 es nuestro nuevo líder. Saluden! %2 replaced %1 as the leader of our forces. Greet him! + Вместо %1 наш новый лидер - %2. + %2 reemplaza a %1 como líder de nuestras fuerzas. Saluden! You step down from being Commander. Others will take your place. + Вы ушли в отставку с поста Командира. Другие займут Ваше место. + Has dejado de ser Comandante. Otro ha tomado tu puesto. You are no longer eligible to command our forces. + Вы больше не будете командовать нашими силами. + No puedes ser Comandante electo de nuestras fuerzas. You are now eligible to command our forces. + Теперь Вы снова сможете командовать нашими силами. + Ahora eres electo para comandar nuestras fuerzas. - You have less than 100€ to donate. + У Вас менее 100€. + Tienes menos de 100€ para donar. You have donated 100€ to the cause. This will raise your status among FIA forces. + Вы отдали 100€ в фонд. Это повышает Ваш статус в FIA. + Has donado 100€ a la causa. Esto aumentará tu estatus entre las fuerzas del FIA. You must be looking at a player in order to donate money. + Вы должны смотреть на игрока, чтобы передать ему деньги. + Debes mirar a un jugador para poder donarle dinero. You have donated 100€ to %1. + Вы передали 100€ товарищу %1. + Has donado 100€ a %1. Only the Commander has access to this function. + Только Командир имеет доступ к этой функции. + Sólo el Comandante tiene acceso a esta función. Only an admin has access to this function. + Доступ к этой функции имеет только администратор. + Sólo el Admin tiene acceso a esta función. There are not enough funds for you to borrow anything. + Недостаточно средств, чтобы Вы взяли что-либо. + No hay fondos suficientes para pedir prestado. You've taken 100€ from the general budget. Invest it wisely. + Вы взяли 100€ из общего бюджета. Потратьте их с умом. + Has cogido 100€ del presupuesto general. Inviertelos sabiamente. - Server membership is disabled. + Список игроков отключён. + La membresía del server está deshabilitada. You are not looking at a player. + Вы не смотрите на игрока. + No estás mirando a un jugador. The player is already a member on this server. + Игрок уже в списке игроков. + Este jugador ya es miembro del server. The player is already not a member on this server. + Игрок не в списке игроков. + El jugador ya no es miembro de este server. %1 has been added to this server's members list. + %1 был добавлен в список игроков сервера. + %1 ha sido añadido a la lista de miembros del server. %1 has been removed from this server's members list. + %1 был удален из списка игроков сервера. + %1 ha sido eliminado de la lista de miembros del server. - - + You've cleared the surroundings of trees and bushes. + Вы почистили ближайшие деревья и кусты. + Ha despejado el entorno de árboles y arbustos. - - + You are not on the members list of this Server.\n\nAsk the Commander in order to be allowed to access the HQ Ammobox.\n\nIn the meantime you may use the other box to store equipment and share it with others.\n\nArsenal Unlocking Requirements\nWeapons: %1\nBackpacks: %5\nMagazines/Usables: %2\nOptics: %3\nVests: %3\nOther Items: %4\nImported Items: %6 + Вы не находитесь в списке игроков этого сервера.\n\nСпросите Командира, чтобы получить доступ к Арсеналу Штаба.\n\nТем временем Вы можете использовать другое место для хранения оборудования и совместного использования его с другими.\n\nТребования к разблокировке Арсенала\nОружие: %1\nРюкзаки: %5\nМагазины/Расходники: %2\nОптика: %3\nЖилеты: %3\nДругое: %4\nИмпортированные предметы: %6 + No estás en la lista de miembros de este server.\n\nPregunta al Comandante para poder acceder al Arsenal del HQ.\n\nMientras tanto, puede usar la otra caja para almacenar equipos y compartirlos con los demás.\n\nRequisitos Desbloqueo Arsenal\nArmas: %1\nMochilas: %5\nMunición/Utiles: %2\nOpticas: %3\nChalecos: %3\nOtros: %4\nImportados: %6 - + Arsenal Unlocking Requirements\nWeapons: %1\nBackpacks: %5\nMagazines/Usables: %2\nOptics: %3\nVests: %3\nOther Items: %4\nImported Items: %6 + Требования к разблокировке Арсенала\nОружие: %1\nРюкзаки: %5\nМагазины/Расходники: %2\nОптика: %3\nЖилеты: %3\nДругое: %4\nИмпортированные предметы: %6 + Requisitos Desbloqueo Arsenal\nArmas: %1\nMochilas: %5\nMunición/Utiles: %2\nOpticas: %3\nChalecos: %3\nOtros: %4\nImportados: %6 - - You are not in the members list of this Server.\n\nAsk the Commander in order to be allowed to access the HQ Ammobox.\n\nIn the meantime, you may use the other box to store equipment and share it with others. - - + You are not in the members list, but you have been added automatically due to your status as admin. + Вы не находитесь в списке игроков сервера, но Вы были добавлены автоматически из-за Вашего статуса администратора. + No estas en la lista de miembros, pero te han agregado automáticamente debido a tu estado como administrador. - + Welcome, %1. You are a guest on this server. + Добро пожаловать, %1. Вы гость на этом сервере. + Bienvenido, %1. Eres invitado del server. - + Welcome back, %1 + С возвращением, %1 + Bienvenido, %1 - - + You cannot board another player's private vehicle if you are not in the same group. + Вы не можете пользоваться личной техникой другого игрока, если Вы не в одной группе с ним. + No puedes montar en el vehículo privado de otro jugador si no estás en su mismo grupo. - - + You died while remote-controlling AI. + Вы умерли во время управления ИИ. + Has muerto mientras controlabas a la IA en remoto. - - + You already have an active mission of this type. + У Вас уже активно задание этого типа. + Ya tienes activa una misión de ese tipo. I have a mission for you. + У меня есть для Вас задание. + Tengo una misión para ti. - I have no destroy missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Двигайте наш Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Destruir para ti. Mueve el HQ cerca del enemigo o acaba algunas misiones para mejorar la inteligencia. Destroy missions require radio towers or enemy cities within 4km of your HQ. + Уничтожение требует наличия радиовышки или враждебного населённого пункта в пределах 4км от Штаба. + Las Misiones de Destruir requieren Torres de Radio o ciudades enemigas a menos de 4km del HQ. - I have no logistics missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Двигайте наш Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Logística para ti. Mueve el HQ cerca del enemigo o termina algunas misiones para mejorar la inteligencia. Logistics missions require enemy outposts, cities or banks within 4km of your HQ. + Снабжение требует наличия опорных пунктов противника, враждебных населённых пунктов или банков в пределах 4км от Штаба. + Las misiones de Logística requieren puestos enemigos, ciudades o bancos a menos de 4km del HQ. - I have no rescue missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Двигайте наш Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Rescate para ti. Mueve el HQ cerca del enemigo o termina algunas misiones para mejorar la inteligencia. Rescue missions require enemy cities or bases within 4km of your HQ. + Спасение требует наличия опорных пунктов противника, враждебных населённых пунктов или военных баз в пределах 4км от Штаба. + Las misiones de Rescate requieren ciudades enemigas o bases a menos de 4km del HQ. - I have no contact missions right now. + Сейчас у меня нет для Вас такого задания. + No tengo misiones de Contactar por ahora. Contact missions require enemy cities within 4km of your HQ. + Контакт требует наличия враждебного населённого пункта в пределах 4км от Штаба. + Las misiones de Contactar requieren ciudades enemigas a menos de 4km del HQ. - I have no contact missions right now. + Сейчас у меня нет для Вас такого задания. + No tengo misiones de Contactar por ahora. Contact missions require cities within 4km of your HQ. + Контакт требует наличия враждебного населённого пункта в пределах 4км от Штаба. + Las misiones de Contactar requieren ciudades a menos de 4km del HQ. - I have no convoy missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Перенесите Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Convoy para ti. Mueve el HQ cerca del enemigo o termina algunas misiones para mejorar la inteligencia. Convoy missions require enemy cities within 4km of your HQ, and they must have an idle base in their surroundings. + Засада на конвой требует наличия враждебного населённого пункта в пределах 4км от Штаба, и военной базы противника в режиме бездействия, рядом с этим населённым пунктом. + Las misiones de Convoy requieren ciudades enemigas a menos de 4km del HQ y deben tener una base inactiva cerca. - I have no assassination missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Перенесите Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Asesinato para ti. Mueve el HQ cerca del enemigo o termina algunas misiones para mejorar la inteligencia. Assassination missions require enemy cities or outposts within 4km of your HQ. + Устранение требует наличия враждебного населённого пункта или опорного пункта противника в пределах 4 км от Штаба. + Las misiones de Asesinato requieren ciudades o puestos enemigos a menos de 4km del HQ. - I have no PR missions for you. Move our HQ closer to the enemy or finish some other missions in order to have better intel. + У меня нет для Вас такого задания. Перенесите Штаб ближе к противнику или завершите другие задания, чтобы получить больше разведданных. + No tengo misiones de Propaganda para ti. Mueve el HQ cerca del enemigo o termina algunas misiones para mejorar la inteligencia. PR missions require enemy cities within 4km of your HQ. + Пропаганда требует наличия враждебного населённого пункта в пределах 4км от Штаба. + Las misiones de Propaganda requieren ciudades enemigas a menos de 4km del HQ. - - + You can only fast-travel one group at a time. + Вы можете телепортировать только одну группу за раз. + Sólo puede hacer viaje rápido un grupo a la vez. You cannot fast-travel while you are controlling AI. + Вы не можете телепортироваться, пока Вы управляете ИИ. + No puedes hacer viaje rápido mientras controlas a la IA. This group cannot fast-travel with enemies nearby. + Эта группа не может телепортироваться из-за находящегося рядом с ней противника. + Este grupo no puede hacer viaje rápido al haber enemigos cerca. You cannot fast-travel with enemies nearby. + Вы не можете телепортироваться, когда рядом противник. + No puedes hacer viaje rápido con enemigos cerca. You cannot fast-travel if one of your vehicles is damaged or doesn't have a driver. + Вы не можете телепортироваться, если один из Ваших автомобилей поврежден или у него нет водителя. + No puedes hacer viaje rápido si uno de tus vehículos está dañado o no tiene conductor. You cannot fast-travel to an enemy-controlled zone. + Вы не можете телепортироваться в зону контролируемую противником. + No puedes hacer viaje rápido a una zona controlada por el enemigo. You cannot fast-travel to an area under attack or with enemies in the surrounding. + Вы не можете телепортироваться в зону атакованную или окружённую противником. + No puedes hacer viaje rápido a un área bajo ataque o con enemigos en los alrededores. Click on the zone you want to travel to. + Кликните на базу или лагерь, куда хотите телепортироваться. + Click en la zona a la que quieres viajar. You must click near a camp or HQ. + Вы должны кликнуть на лагерь или Штаб. + Debes hacer click cerca de un campamento o el HQ. - You cannot disguise yourself while you are controlling AI. + Вы не можете быть в гражданском статусе, когда управляете ИИ от первого лица. + No puedes pasar a incógnito mientras controlas a la IA. You are incognito already. + Вы уже в гражданском статусе. + Estás de incógnito. You are not in a civilian vehicle. + Вы не в гражданской машине. + No estás en un vehículo civil. The vehicle you are in has been reported to the enemy. Switch to another vehicle or change its plates at HQ to become incognito. + Вы сидите в транспорте, который разыскивает противник. Смените транспортное средство или езжайте в Штаб за новыми номерами. + El vehículo en el vas ha sido reportado al enemigo. Cambia a otro vehículo o cambia las matrículas en el HQ para pasar a incógnito. You have been reported in the last 30 minutes and cannot go incognito. + Вы не можете быть в гражданском статусе, Вы попали в розыск за последние 30 минут. + Has sido detectado en los últimos 30 minutos y no puedes pasar a incognito. You cannot become incognito with enemies less than %1m from you. + Вы не можете быть в гражданском статусе, противник ближе %1 м. + No puedes pasar a incognito con enemigos a menos de %1m de ti. You cannot become incognito while enemies are still on the lookout for you nearby. + Вы не можете быть в гражданском статусе, Вас ищут. + No puedes pasar a incógnito mientras los enemigos aún te vigilan. You cannot become incognito near bases, outposts, or roadblocks. + Вы не можете быть в гражданском статусе вблизи баз, опорных пунктов или блокпостов. + No puedes pasar a incognito cerca de bases, puestos, o controles. - You cannot disguise yourself while wearing suspicious-looking gear.\n + Вы не можете быть в гражданском статусе, если на Вас одето подозрительное снаряжение.\n + No puedes disfrazarte mientras llevas ropa que parece sospechosa.\n %1\nPrimary Weapon: %2 + %1\nОсновное Оружие: %2 + %1\nArma Principal: %2 %1\nSecondary Weapon: %2 + %1\nВторичное Оружие: %2 + %1\nArma Secundaria: %2 %1\nSidearm: %2 + %1\nПистолет: %2 + %1\nPistola: %2 %1\nVest: %2 + %1\nЖилет: %2 + %1\nChaleco: %2 %1\nHeadgear: %2 + %1\nГоловной убор: %2 + %1\nCabeza: %2 %1\nHMD: %2 + %1\nНаголовной дисплей: %2 + %1\nVisor: %2 %1\nClothing: %2 + %1\nОдежда: %2 + %1\nRopa: %2 - Careful! + Осторожней! + Cuidado! You entered a non-civilian vehicle. + Вы сели в военную технику. + Has entrado en un vehículo no civil. You entered a reported vehicle. + Вы сели в разыскиваемый транспорт. + Has entrado en un vehículo reportado. You have gotten too close to an enemy facility and have been spotted. + Вы слишком близко подошли к вражескому объекту и были замечены. + Te has acercado demasiado a una instalación enemiga y te han visto. You went far from roads and have been spotted. + Вы ушли далеко от дорог и были замечены. + Te has alejado de la carretera y te han detectado. Explosives have been spotted on your vehicle. + Взрывоопасные вещества были обнаружены в Вашем транспорте. + Han detectado los explosivos de tu vehículo. You left your vehicle and you are still in the wanted list. + Вы покинули свой транспорт, и Вы все еще находитесь в розыске. + Dejaste tu vehículo y todavía estás en la lista de buscados. You have been made, enemies are on the lookout for you! + Вы раскрыты, противник ищет Вас! + Has sido detectado, los enemigos te buscan! Your gear is arousing suspicion, you are no longer incognito.\n + Ваше снаряжение вызывает подозрение, Вы больше не в гражданском статусе.\n + Tu equipo está suscitando sospechas, ya no estas de incógnito. + + + + + You can select one group only to Fast Travel + Вы можете выбрать только одну группу для телепорта + Sólo puedes seleccionar un grupo para hacer Viaje Rápido + + + Only a group leader can ask for Fast Travel + Только руководитель группы может запросить телепорт + Sólo el líder de grupo puede solicitar Viaje Rápido + + + You cannot Fast Travel with other players in your group + Вы не можете телепортироваться когда в Вашей группе другие игроки + No puedes hacer Viaje Rápido con otros jugadores en tu grupo + + + You cannot Fast Travel while you are controlling AI + Вы не можете быстро перемещаться во время управления AI + No puedes hacer Viaje Rápido mientras controlas a la IA + + + You cannot Fast Travel with enemies near the group + Вы не можете быстро перемещаться когда противник рядом с группой + No puedes hacer Viaje Rápido con enemigos cerca del grupo + + + You cannot Fast Travel if you don't have a driver in all your vehicles or your vehicles are damage and cannot move + Вы не можете использовать телепорт, если у Вас нет водителей на всех Ваших транспортных средствах или Ваши транспортные средства повреждены и не могут двигаться + No puedes hacer Viaje Rápido si no hay conductor en todos tus vehículos o si están dañados y no pueden moverse + + + Click on the zone you want to travel + Нажмите на зону, в которую Вы хотите переместиться + Click en la zona a la que quieres viajar + + + You cannot Fast Travel to roadblocks and watchposts + Вы не можете телепортироваться на БП/НП + No puedes hacer Viaje Rápido a controles ni puestos de observación + + + You cannot Fast Travel to an enemy controlled zone + Вы не можете быстро переместиться в зону, контролируемую противником + No puedes hacer Viaje Rápido a zonas controladas por el enemigo + + + You cannot Fast Travel to camps. + Вы не можете быстро переместиться в лагеря. + No puedes hacer Viaje Rápido a campamentos + + + You cannot Fast Travel to an area under attack or with enemies in the surrounding + Вы не можете быстро переместиться в область, находящуюся под атакой, или в окружении врагов + No puedes hacer Viaje Rápido a un área bajo ataque o con enemigos en los alrededores + + + Moving group %1 to destination + Перемещение группы %1 в пункт назначения + Moviendo grupo %1 a destino + + + Group %1 arrived to destination + Группа %1 прибыла в пункт назначения + Grupo %1 ha llegado a su destino + + + You must click near marker under your control + Вы должны кликнуть возле зоны, находящейся под Вашим контролем + Debes hacer click cerca de la marca bajo tu control + + + + + You need a radio in your inventory to be able to give orders to other squads + Вам нужно иметь радиостанцию, чтобы иметь возможность отдавать приказы другим отрядам + Necesitas una radio en tu inventario para dar ordenes a otros escuadrones + + + Click on the position you wish to establish the camp. + Кликните на позицию где Вы хотите развернуть лагерь + Click en la posición en la que deseas establecer el campamento + + + Click on the camp to abandon a camp. + Кликните на лагерь, чтобы его свернуть + Click en el campamento que quieres abandonar + + + Click on the camp to rename a camp. + Кликните на лагерь, чтобы его переименовать + Click en el campamento para renombrarlo + + + Location is too close to base + Место слишком близко к базе + La ubicación está cerca de la base + + + No camps to abandon. + Нет лагерей, которые можно свернуть + No hay campamentos para abandonar + + + You cannot delete a camp while enemies are near it. + Вы не можете свернуть лагерь пока противник находится рядом с ним + No puedes borrar un campamento con enemigos cerca de él + + + You can only sustain a maximum of four camps. + Вы можете развернуть максимум четыре лагеря + Sólo puedes tener un máximo de cuatro campamentos + + + Camp renamed + Лагерь переименован + Campamento renombrado + + + You lack of resources to build this camp. \n %1 HR and %2 € needed + Вам не хватает ресурсов для создания этого лагеря. \ n %1 HR и %2 € необходимо + Te faltan recursos para construir un campamento. \n necesitas %1 HR y %2 € + + + + + All nearby units and vehicles have been healed or repaired. Near vehicles have been rearmed at full load and no longer in reported list. + Все находящиеся рядом бойцы и техника вылечены/отремонтированы. Техника перевооружена, заправлена и больше не находится в розыске. + Todas las unidades y vehículos cercanos han sido curados o reparados. Los vehículos han sido rearmados al máximo y ya no están en la lista de buscados. + + + + + Only Commander Slowhand has access to this function + Только Командир имеет доступ к этой функции + Sólo el Comandante tiene acceso a esta función + + + You must first empty your Ammobox in order to move the HQ + Вы должны сначала опустошить Ящик Арсенала, чтобы переместить Штаб + Primero debes vaciar la caja de munición para poder mover el HQ + + + Move the Arsenal ammo crate and the Vehicle ammo crate and Petros to the new location + Переместите Петроса, Ящик лечения и восстановления транспорта и Ящик Арсенала на новое место + Mueve la caja de Arsenal, la caja de Vehículo y a Petros a la nueva ubicación + + + HQ Garrison will stay here and hold the enemy + Гарнизон Штаба останется здесь и будет удерживать врага + La Guarnición del HQ se quedará aquí y repelerá al enemigo + + + + + You cannot Capture the Flag while in Undercover Mode + Вы не можете захватить флаг в гражданском статусе + No puedes Capturar la Bandera mientras estás en Modo Incógnito + + + + + Only Commander can ask for NATO support + Только Командир может запросить поддержку союзников + Sólo el Comandante puede solicitar apoyo a la OTAN + + + Server is very loaded. \nWait one minute or change FPS settings in order to fulfill this request + Сервер очень загружен. \nПодождите одну минуту или измените настройки FPS, чтобы выполнить этот запрос. + El servidor está muy cargado. \nEspera un minuto o cambia las opciones de FPS para solucionarlo + + + NATO is already busy with this kind of mission + Союзники уже выполняют такую миссию + La OTAN ya está ocupada con este tipo de misión + + + You need a radio in your inventory to be able to give orders to other squads + Вы должны иметь радиостанцию, чтобы отдавать приказы другим отрядам + Necesitas una radio en tu inventario para poder dar ordenes a otros escuadrones + + + You need to conquer at least one base to perform this action + Чтобы выполнить это действие, Вам нужно захватить хотя бы одну базу + Necesitas al menos una base conquistada para realizar esta acción + + + Click on the base or airport you want NATO to attack + Укажите базу/авиабазу, которую будут атаковать союзники + Click en la base o aeropuerto que quieres que la OTAN ataque + + + Click on the base from which you want NATO to attack + Укажите базу, откуда союзники совершат атаку + Click en la base desde donde quieres que la OTAN ataque + + + Click on the spot where you want the Ammodrop + Укажите место, куда необходимо сбросить боеприпасы + Click en el punto donde quieres que lanzen los suministros + + + Click on the base from which you want Artillery Support + Укажите базу откуда будет произведена артиллерийская поддержка + Click en la base desde la que quieres el Apoyo de Artillería + + + Click on the airport from which you want NATO to attack + Укажите авиабазу, с которой союзники совершат атаку + Click en el aeropuerto desde el que quieres que la OTAN ataque + + + Click on the spot where you want NATO to setup a roadblock + Укажите место, где необходимо установить союзный блокпост + Click en el punto donde quieres que la OTAN monte un control + + + Click on the base or airport/carrier from which you want NATO to dispatch a QRF + Укажите базу/авиабазу/авианосец, откуда необходимо отправить ОБР союзников + Click en la base o aeropuerto/portaaviones desde el que quieres que la OTAN envíe una equipo de respuesta rápida + + + You informed about supporting enemy faction emplacement, its destruction will reduce their concern about the island + Вы сообщили о поддержке размещения вражеской фракции, ее уничтожение уменьшит их беспокойство по поводу острова + Has sido informado de un emplazamiento que da apoyo a la facción enemiga, su destrucción reducirá la preocupación en la isla + + + We lack of enough NATO Support in order to proceed with this request (%1 needed) + Нам недостаточно очков поддержки, чтобы запросить это (%1 необходимо) + Carecemos del suficiente Apoyo de la OTAN para esta petición (necesitamos %1) + + + Roadblocks can only be placed on roads. + Блокпост можно разместить только на дороге. + Los controles sólo pueden colocarse en carreteras. + + + QRF departing from %1. Mark the target for the QRF. + ОБР отправляется из %1. Отметьте цель для ОБР. + QFR saliendo de %1. Marque el objetivo en el mapa. + + + No LCS available this decade, QRF is restricted to land. + Десантные корабли недоступны, ОБР может действовать только на суше. + No disponemos de embarcaciones, QFR restringido a tierra. + + + QRF inbound. + ОБР на подходе + QFR entrando + + + You must click near a map marker + Вы должны нажать возле маркера карты + Debes hacer click cerca de una marca del mapa + + + Artillery support can only be obtained from bases. + Артиллерийскую поддержку можно получить только с баз. + Apoyo de Artillería sólo disponible desde las bases. + + + You must click near a friendly base + Вы должны указать дружественную базу + Debes hacer click cerca de una base aliada + + + Click on the Armored Column destination + Укажите пункт назначения колонны бронетехники + Click en el destino de la Columna de Blindados + + + You must click near a map marker + Вы должны кликнуть рядом с маркером на карте + Debes hacer click cerca de una marca del mapa + + + NATO won't attack this kind of zone. + Союзники не будут атаковать эту зону. + La OTAN no atacará este tipo de zona. + + + NATO Attacks may be only ordered on AAF controlled zones + Атаки союзников могут осуществлены только на зоны, контролируемые противником + Los ataques de la OTAN deben ordenarse únicamente a zonas controladas por las AAF + + + + + You do not have enough money to rebuild any Asset. You need 5.000 € + У Вас недостаточно средств для восстановления активов. Вам нужно 5.000 € + No tienes suficiente dinero para reconstruir este activo. Necesitas 5.000 € + + + Click on the zone you want to rebuild. + Кликните на зону, которую хотите восстановить. + Click en la zona que quieres reconstruir. + + + You must click near a map marker + Вы должны кликнуть возле маркера на карте + Debes hacer click cerca de una marca del mapa + + + You cannot rebuild that + Вы не можете это восстановить + No puedes reconstruir eso + + + %1 Rebuilt + Зона %1 восстановлена + %1 Reconstruido + + + + + Reinitialised:\n\nSpecial Keys\n\nStatistics Report + Переинициализировано:\n\Специальные клавиши\n\n Отчет о статистике + Reinicializado:\n\nTeclas Especiales\n\nInforme Estadísticas + + + + + A critical failure has been detected in Antistasi. Please contact Admin and ask for a diagnose + server restart. Apologies. + В Antistasi обнаружен критический сбой. Пожалуйста, свяжитесь с администратором и попросите диагностировать + перезапустить сервер. Простите за неудобство. + Se ha detectado un fallo crítico en Antistasi. Por favor, contacte con el Admin y pregunte por un diagnóstico + reiniciar. Disculpas. + + + + + Only the Commander can order to rest + Только Командир может отдать приказ отдыхать + Sólo el Comandante puede ordenar descanso + + + You cannot rest with enemies near our units + Вы не можете отдыхать когда противник находится рядом с Вашим отрядом + No puedes descansar con enemigos cerca de nuestras unidades + + + You cannot rest while AAF or CSAT is counterattacking + Вы не можете отдыхать, когда AAF или CSAT контратакуют + No puedes descansar mientras las AAF o el CSAT están contraatacando + + + You cannot rest while your HQ is under attack + Вы не можете отдыхать, пока Штаб атакуют + No puedes descansar mientras el HQ está bajo ataque + + + All player must be in a 100mts radius from HQ to be able to rest + Все игроки должны находиться в радиусе 100 м от Штаба, чтобы иметь возможность отдыхать + Todos los jugadores deben estar en un radio de 100m del HQ para Descansar + + + + + Click on the position you wish to teleport to. + Кликните по зоне, куда Вы хотите телепортироваться. + Click en la posición a la que deseas ser teletransportado. + + + + + Deleting Garbage. Please wait + Удаление мусора. Пожалуйста, ждите + Borrando Basura. Por favor, espere + + + Garbage deleted + Мусор удалён + Basura borrada + + + + + Functions Init Completed + Funciones Iniciales Completadas + + + + + Variables Init Completed + Variables Iniciales Completadas + + + + + empty + пусто + vacío + + + + + The player is in this stance: %1 + Игрок находится в этой позиции: %1 + El jugador está en esta stance: %1 - + + + + FIA HQ Options - Commander Only + Штаб - только для Командира + Opciones HQ FIA- Sólo Comandante + + + Grab 100 € from Pool + Взять 100€ из Фонда + Coger 100€ del fondo + + + Manage Garrisons + Гарнизоны + Admin. Guarnición + + + Move HQ to another Zone + Переезд Штаба + Mover HQ a otra zona + + + Ingame Member's List + Список игроков сервера + Lista de Miembros Jugando + + + Train FIA + Тренировать FIA + Entrenar FIA + + + Rebuild Assets + Восстановить оборону + Reconstruir Activo + + + Recruitment Options + Набрать отряд + Opc. Reclutamiento + + + Recruit Militiaman + Стрелок + Milicia + + + Recruit Autorifleman + Пулемётчик + Fusil. Automático + + + Recruit Medic + Медик + Médico + + + Recruit Marksman + Снайпер + Tirador + + + Recruit Engineer + Инженер + Ingeniero + + + Recruit Grenadier + Стрелок ГП + Granadero + + + Recruit Bomb Specialist + Сапёр + Esp. en Explosivos + + + Recruit AT + Гранатометчик + Soldado AT + + + Recruit AA + Стрелок ПЗРК + Soldado AA + + + Squad Recruitment Options + Опции отрядов + Opc. Reclutamiento Escuadron + + + Recruit Inf. Squad + Отделение + Esc. Infantería + + + Recruit Inf. Team + Звено + Equipo Infantería + + + Recruit AT Squad + ПТ звено + Esc. AT + + + Recruit AA Truck + Грузовик ПВО + Camión AA + + + Recruit Sniper Team + Снайп. расчёт + Equipo Tiradores + + + Recruit AT Truck + Грузовик ПТ + Camión AT + + + Recruit Sentry + Патруль + Patrulla + + + Recruit Mortar Team + Миномёт. расчёт + Equipo Mortero + + + Recruit Engineers + Инженер. расчёт + Eq. Ingenieros + + + Purchase Military Vehicle + Покупка военной техники + Comprar Vehículo Militar + + + Buy Quadbike + Квадроцикл + Quad + + + Buy Offroad/UAZ + Внедорожник/Уаз + Offroad/UAZ + + + Buy Truck + Грузовик + Camión + + + Buy Static AT + Станк. ПТУР + AT Estático + + + Buy Armed Offroad + Внедорожник с пулемётом + Offroad Armado + + + Buy Mortar + Миномёт + Mortero + + + Buy MG + Станк. пулемет + MG + + + Buy Static AA + Станк. ЗУ + AA Estático + + + Buy APC + БМД + APC + + + Load previous session? + Загрузить предыдущую сессию? + Cargar sesión anterior? + + + Enable Switch Commander? + Вкл. смену Командира? + Usar Cambio de Comandante? + + + Building Options + Настройки строительства + Opc. Construcción + + + O.Post - Roadblock + НП - БП + Puesto Obs. - Control + + + Build Minefield + Разв. минное поле + Campo Minado + + + O.Post-Roadblock Delete + НП - БП Удалить + Borrar P. Obs. - Control + + + Manage Camps", "Establish/Abandon Camps + Упр. лагерем + Adm. Campamentos", "Establecer/Abandonar + + + HQ Fortifications + Объекты Штаба + Fortificaciones HQ + + + Available Missions + Доступные задания + Misiones Disponibles + + + Military Contact + Контакт с офицером + Contacto Militar + + + Civilian Contact + Контакт с политиком + Contacto Civil + + + Sketchy Irishman + Безумный Ирландец + Irlandés Loco + + + Logistics Mission + Снабжение + Misión Logísitca + + + Destroy Mission + Уничтожение + Misión Destruir + + + Rescue Mission + Спасение + Misión Rescate + + + Propaganda + Пропаганда + Propaganda + + + Ask NATO for + Запросить у НАТО + Pedir a la OTAN + + + Attack Mission + Атака + Misión de Ataque + + + Armored Column + Колонна бронетехники + Columna Blindados + + + Artillery + Артиллерия + Artillería + + + Roadblock + БП + Control + + + NATO QRF + НАТО ОБР + QFR OTAN + + + NATO UAV + NATO БПЛА + Dron OTAN + + + Ammodrop + Сброс б/припасов + Envío Munición + + + CAS Support + Авиаподдержка + Apoyo CAS + + + Bomb Run + Бомбардировка + Bombardeo + + + Weaken OPFOR + Ослабить противника + Debilitar OPFOR + + + Garrison Menu + Управление гарнизонами + Menú Guarnición + + + Recruit Garrison + Комплектовать гарнизон + Reclutar Guarnición + + + Remove Garrison + Убрать гарнизон + Quitar Guarnición + + + Garrison Recruitment Options + Комплектовать гарнизон + Opc. Reclutar Guarnición + + + Recruit Militiaman + Ополченец + Milicia + + + Recruit Autorifleman + Пулемётчик + Fusil. Automático + + + Recruit Medic + Медик + Médico + + + Recruit Marksman + Снайпер + Tirador + + + Recruit Squad Leader + Командир отряда + Líder de Escuadrón + + + Recruit Grenadier + Стрелок ГП + Granadero + + + Recruit Mortar + Миномёт + Mortero + + + Recruit AT + Гранатометчик + Soldado AT + + + YES + Да + SI + + + No + Нет + No + + + Done + Готово + Hecho + + + FPS Limiter + Ограничитель FPS + Limitar FPS + + + +1 FPS Limit + +1 FPS к лимиту + Limitar +1 FPS + + + -1 FPS Limit + -1 FPS к лимиту + Limitar -1 FPS + + + Spawn Distance Config + Настройки дистанции симуляции + Config. Distancia Spawn + + + +100 Spawn Dist. + +100 метров + Dist. Spawn +100 + + + -100 Spawn Dist. + -100 метров + Dist. Spawn -100 + + + Civ Presence Config + Настройки количества гражданских + Config. Presencia Civil + + + +1% Civ Spawn. + +1% гражданских + +1% Civiles + + + -1% Civ Spawn. + -1% гражданских + -1% Civiles + + + HC Squad Options + HC настройки отряда + Opc. Escuadrones HC + + + Squad Add Vehicle + Закрепить за отрядом технику + Añadir Vehículo Es. + + + Squad Vehicle Stats + Расчет станк. оружия + Estado Vehículo Es. + + + Mount / Dismount + Установить / Разобрать + Montar / Desmontar + + + Static Autotarget + Автоприцел станк. оружия + Autoapuntado Estáticas + + + Add Vehicle to Squad? + Добавить транспорт отряду? + Añadir Vehículo al Es.? + + + Player and Money Interaction + Игрок и деньги взаимодействие + Interacción Jugador y Dinero + + + Add Server Member + Добавить в список + Añadir Miembro al Server + + + Remove Server Member + Удалить из списка + Quitar Miembro del Server + + + Donate 100 € to player + Подарить 100 € игроку + Donar 100 € a jugador + + + Donate 100 € to FIA + Жертвовать 100 € FIA + Donar 100 € al FIA + + + Enable Server Membership? + Включить список игроков? + Habilitar Membresía Server? + + + Vehicle Manager + Техника + Admin. Vehículos + + + Garage\Sell Vehicle + В гараж\продать технику + Guardar\Vender Vehículo + + + Vehicles and Squads + Техника и отряды + Vehículos y Escuadrones + + + Unlock Vehicle + Открыть технику + Desbl. Vehículo + + + Sell or Garage Vehicle + Продажа/в гараж технику + Vender o Guardar Vehículo + + + Garage Vehicle + В гараж + Almacenar Vehículo + + + Sell Vehicle + Продать + Vender Vehículo + + + Personal or FIA Garage? + Личный или FIA гараж? + Garaje Personal o FIA + + + Personal Garage + Личный гараж + Garaje Personal + + + FIA Garage + FIA гараж + Garaje FIA + + + Buy Vehicle + Купить технику + Comprar Vehículo + + + Civilian Vehicle + Гражд. техника + Vehículo Civil + + + Military Vehicle + Военная техника + Vehículo Militar + + + Buy Civilian Vehicle + Купить гражд. технику + Comprar Vehículo Civil + + + Offroad + Внедорожник + Offroad + + + Truck + Грузовик + Camión + + + Helicopter + Вертолёт + Helicóptero + + + Carpet Bombing Strike + Ковровая бомбардировка + Lanzar Bombardeo en Área + + + HE Bombs + Фугасные бомбы + Bombas HE + + + Carpet Bombing + Ковровая бомбардировка + Bombardeo en Área + + + NAPALM Bomb + НАПАЛМ + NAPALM + + + AI Management + Контроль ИИ + Admin. IA + + + Temp. AI Control + Врем. ИИ контроль + Controlar IA Temp. + + + Auto Heal + Автолечение + Autocurar + + + Auto Rearm + Автоперевооруж. + Autorearmar + + + Dismiss Units/Squads + Уволить бойцов/отряды + Despedir Unid./Escua. + + + Select No. Rounds to be fired + Выберете количество залпов + Número de rondas a disparar + + + Select type of strike + Выберите тип удара + Selecciona tipo de ataque + + + Single Point Strike + Точечный удар + Atacar un punto + + + Barrage Strike + Заград. огонь + Atacar una zona + + + Select type ammo for the strike + Выберите тип боеприпасов для удара + Selecciona el tipo de munición + + + HE + Фугас + HE + + + Laser Guided + С лазерным наведением + Guiada por Láser + + + Smoke + Дым + Humo + + + Select Mortar Ammo + Тип миномётных снарядов + Selecciona Munición de Mortero + + + Build Minefield + Развернуть мин. поле + Construir Campo Minado + + + APERS Mines + ПП мины + Minas Anti-Per. + + + AT Mines + ПТ мины + Minas AT + + + Fast Travel + Телепорт + Viaje Rápido + + + Fast Travel (old) + Телепорт (старый) + Viaje Rápido (Antiguo) + + + Fast Travel (new) + Телепорт (новый) + Viaje Rápido (nuevo) + + + ??? lost text + Цели: все зоны контролируемые FIA + Todas las áreas controladas por FIA + + + Only FIA camps and HQ + Только лагеря FIA и Штаб + Sólo Campamentos FIA y HQ + + + Camp Management + Упр. лагерем + Admin. Campamentos + + + Establish Camp + Развернуть лагерь + Desplegar Campamento + + + Delete Camp + Свернуть лагерь + Quitar Campamento + + + Rename Camp + Переименовать лагерь + Renombrar Campamento + + + Is the start too hard for you? + Начало слишком трудно для Вас? + Comenzar es demasiado duro para ti? + + + You'll get some resources, and basic gear will be unlocked + Вы получите немного ресурсов и начальное снаряжение + Obtendrás algunos recursos extra y se ha desbloqueado equipamiento básico + + + Pea shooters, iron sights and plain clothes it is + Пукалка со штатным прицелом и простая одежда - Ваш выбор! + Armas débiles, miras metálicas y ropa sencilla + + + Assassination Mission + Убийство + Misión Asesinato + + + Convoy Ambush + Засада + Emboscar Convoy + + + Conquest Missions + Захват + Misiones Conquista + + + Buy Ordnance + Купить артиллерию + Comprar Munición + + + Some Charges + Немного зарядов + Algunas Cargas + + + Spend 300 Euros on a small bag of explosives. + Потратить 300 евро на взрывчатку. + Gastar 300 € en una pequeña bolsa de explosivos. + + + Many Charges + Много зарядов + Muchas Cargas + + + Spend 800 Euros on a large bag of explosives. + Потратить 800 евро на взрывчатку. + Gastar 800 € en una gran bolsa de explosivos. + + + Some Weapons + Немного оружия + Algunas Armas + + + Spend 1000 Euros on a small cache of weapons. + Потратить 1000 евро на оружие. + Gastar 1000€ en una caja pequeña de armas. + + + Many Weapons + Много оружия + Muchas Armas + + + Spend 2500 Euros on a large cache of weapons. + Потратить 2500 евро на большое количество оружия. + Gastar 2500€ en una gran caja de armas. + + + Some Mines + Несколько мин + Algunas Minas + + + Spend 300 Euros on a small bag of mines. + Потратить 300 евро на покупку мин. + Gastar 300€ en una bolsa pequeña de minas. + + + Many Mines + Много мин + Muchas Minas + + + Spend 800 Euros on a large bag of mines. + Потратить 800 евро на покупку мин. + Gastar 800€ en una bolsa grande de minas. + + + Some Accessories + Немного аксессуаров + Algunos accesorios + + + Spend 500 Euros on a small cache of weapon accessories. + Потратить 500 евро на покупку аксессуаров для оружия. + Gastar 500€ en una caja pequeña de accesorios para armas. + + + Many Accessories + Много аксессуаров + Muchos Accesorios + + + Spend 5000 Euros on a large cache of weapon accessories. + Потратить 5000 евро на покупку аксессуаров для оружия. + Gastar 5000€ en una caja grande de accesorios para armas. + + + Some Ammo + Немного боеприпасов + Algo de Munición + + + Currently not available + В данный момент недоступно + Actualmente no disponible + + + Weapon Options + Настройки оружия + Opc. Armas + + + Assault Rifles + Штурмовые винтовки + Rifles de Asalto + + + Machineguns + Пулеметы + Ametralladoras + + + Launchers + Пусковые установки + Lanzadores + + + Pistols + Пистолеты + Pistolas + + + Sniper Rifles + Снайперские винтовки + Rifles de Tirador + + + Random + Случайное + Aleatorio + + + Camo Net + Маск. сеть + Red de Camuflaje + + + Lantern + Фонарь + Linterna + + + Sandbag + Мешки с песком + Saco de Arena + + + Vehicle Spawn Pad + Площадка появления техники + Zona Spawn Vehículo + + + Create/Delete the vehicle spawn pad. Deploy at intended position. + Создать/Удалить площадку появления техники. Развернуть в заданной позиции. + Crear/Borrar zona spawn vehículo. Desplegar en la posición marcada. + + + Delete All + Удалить всё + Borrar Todo + + + Civ Config + Гражданские + Config. Civil + + + Spawn Dist. Config + Дистанция симуляции + Config. Distancia Spawn + + + FPS Limiter + FPS Ограничитель + Limitador FPS + + + Garbage Clean + Удаление мусора + Limpiar Basura + + + Persistent Save + Сохранение игры + Guardado Persistente + + + + Music ON/OFF + Музыка Вкл/Выкл + Música SI/NO + + + Ingame Member's List + Список игроков + Lista Miembros Jugando + + + Delete corpses, destroyed vehicles, on ground items, might freeze + Удалить трупы, уничтоженную технику, валяющиеся предметы, игра может тормознуть + Borrar cadáveres, vehículos destruidos, objetos en el suelo, puede ralentizar + + + Toggle Petros' animations + Переключить анимацию Петроса + Alternar la animación de Petros + + + Turn the idle animation of Petros on/off. + Анимация стоящего Петроса вкл/выкл. + Cambiar la animación ociosa de Petros si/no. + + + Toggle Army XP System + Переключение системы Army XP + Alternar Sistema XP Ejército + + + Turn the extended Army XP system on/off, including all restrictions. + Включите расширенную систему Army XP вкл/выкл, включая все ограничени. + Cambiar el sistema extendido de XP del ejercito si/no, incluye todas las restricciones. + + + Reset HQ + Сброс Штаба + Reiniciar HQ + + + If you managed to lose one of your HQ items, this will reset all of them near Petros. + Если Вы потеряли один из Ваших Предметов Штаба, это заново разместит их рядом с Петросом. + Si al manipular objetos del HQ has perdido uno, esto hará que aparezcan todos cerca de Petros + + + Reset Petros' position + Сброс позиции Петроса + Reiniciar Posición de Petros + + + Terminate Petros' animation, move him next to the campfire at HQ. + Прекратить анимацию Петроса и переместить его рядом с костром в Штабе. + Finaliza la animación de Petros, lo mueve cerca de la hoguera del HQ. + + + Move statics/HQ items + Перемещение станк.оружия/Предметов Штаба + Mover Estáticas/Objetos del HQ + + + Reset your ability to move statics and HQ assets. + Сброс настроек переноса станк.оружия и предметов Штаба. + Reinicia la posibilidad de mover estáticas y activos del HQ. + + + Options Menu + Меню опций + Menú Opciones + + + FT On/Off + Телепорт Вкл/Выкл + Viaje Rápido On/Off + + + Toggle the old Fast Travel system on/off + Вкл/Выкл старой системы телепорта + Alternar al sistema antiguo de Viaje Rápido si/no. + + + Toggle Increased Income + Вкл/Выкл повышенный доход + Aumentar Ingresos + + + Arsenal Access On/Off + Арсенал доступ Вкл/Выкл + Acceso al Arsenal Si/No + + + Simplified: members are exempt from gear-removal upon accessing the arsenal. + Упрощенные: Участники освобождаются от сброса снаряжения при доступе к Арсеналу. + Simplificado: los miembros están exentos de quitar equipo al acceder al Arsenal + + + Toggle Army XP System + Переключение системы Army XP + Alternar Sistema XP Ejército + + + Turn the extended Army XP system on/off, including all restrictions. + Вкл/Выкл расширенную систему Army XP, включая все ограничения. + Cambiar el sistema extendido de XP del ejercito si/no, incluye todas las restricciones. + + + Weapon Proficiencies + Боевая специализация + Competecias en Armas + + + Turn the extended weapon proficiencies system on/off (MP exclusive) + Вкл/Выкл расширенную систему боевой специализации (только для МП) + Cambiar el sistema de competencia en armas si/no (exclusivo MP) + + + TFAR Menu + TFAR Меню + Menú TFAR + + + Save Radio Settings + Сохранить настройки радио + Grabar Ajustes de Radio + + + Save TFAR radio settings. + Сохранить TFAR настройки радио + Grabar ajustes de TFAR radio + + + Load Radio Settings + Загрузить настройки радио + Cargar Ajustes de Radio + + + Load previously saved TFAR radio settings. + Загрузить ранее сохраненные TFAR настройки радио. + Cargar ajustes de TFAR radio + + + Role Change + Изм. специализацию + Cambiar Clase + + + Back + Назад + Volver + + + Officer + Офицер + Oficial + + + Autorifleman + Пулемётчик + Fusil. Automático + + + Medic + Медик + Médico + + + Engineer + Инженер + Ingeniero + + + Ammobearer + Подносчик боеприпасов + Amunicionador + + + Marksman + Снайпер + Tirador + + + Cost: 20 points + Стоимость: 20 Очков + Coste: 20 puntos + + + Cost: 10 points + Стоимость: 10 Очков + Coste: 10 puntos + + + Cost: 5 points + Стоимость: 5 Очков + Coste: 5 puntos + + + Cost: 100 points + Стоимость: 100 Очков + Coste: 100 puntos + + + This function is MP only + Эта функция только для МП + Esta función es sólo para MP + + + Only Player Commander has access to this function + Доступ к этой функции имеет только Командир + Sólo el Comandante puede acceder a esta función + + + RHS exclusive for now + Эксклюзивно для RHS + RHS exclusivo por ahora + + + Switch Commander Enabled\n\nGame will auto assign Commander position to the highest ranked player + Включна смена Командира\n\nИгра автоматически назначит Командиром игрока с наивысшим рангом + Cambiar Comandante Activado\n\nEl juego asignará el puesto de Comandante al jugador de mayor rango + + + Switch Commander Disabled\n\nGame will only assign Commander position upon Commander disconnection + Смена Командира выключена\n\nИгра назначит нового Командира только после отключения нынешнего Командира + Cambiar Comandante Desac.\n\nEl juego sólo asignará Comandante si este se desconecta + + + Select an option first + Сначала выберите вариант + Seleccione una opción primero + + + Establish/Abandon Camps + Развернуть/свернуть лагерь + Desplegar/Abandonar Campamentos + + + Spawn Distance Set to %1 meters. Be careful, this may affect game performance + Расстояние от места появления %1 метров. Будьте осторожны, это может повлиять на производительность игры + Distancia Spawn establecida a %1 m. Ten cuidado, esto podría afectar al rendimiento del juego + + + Civilian Percentage Set to %1 percent + Процент гражданских установлен на %1 процентов + Porcentaje civil establecido en %1 + + + Server Membership Enabled.\n\nAll the present players have been added to the Member's List.\n\nNon-members cannot use the HQ Ammobox and cannot be commanders, even with Switch Commander enabled.\n\nIf you load a session with this feature disabled, it will change to disabled.\n\nUse this option for Open Server Environments + Список Участников Включён.\n\nВсе нынешние игроки были добавлены в список Участников.\n\nНе Участники не могут использовать Арсенал и не могут стать Командиром\n\nЕсли Вы загрузите сессию с отключенной функцией, она будет отключена.\n\nИспользуйте этот параметр для отрытого сервера + Membresía Server Activada.\n\nLos jugadores actuales han sido añadidos a la lista de miembros.\n\nLos que no sean miembros, no pueden usar la caja de munición del HQ ni ser elegidos Comandante, incluso si Cambiar Comandante esta activo.\n\nSi cargas una sesión con esta función desactivada, esta cambiará a descativa.\n\nUsa esta opción para Servidores Abiertos + + + Server Membership Disabled.\n\nAnyone can use the HQ Ammobox and become Commander (if Switch Commander is enabled).\n\nIf you load a session with this feature enabled, it will become enabled.\n\nUse this option for Private Server environments. + Список Участинков Выключён\n\nЛюбой может использовать Арсенал и стать Командиром(если включен переключатель Командира).\n\nЕсли Вы загрузите сеанс с включенной функцией, она станет включенной.\n\nИспользуйте этот параметр для закрытых серверов + Membresía Server Desac.\n\nCualquiera puede usar las cajas de munición del HQ y ser Comandante (si Cambiar Comandante esta activo).\n\nSi cargas una sesión con esta función activa, pasará a estar activada.\n\nUsa esta opción para Servidores Privados. + + + It's unlocked already. + Он уже разблокирован. + Esto ya está desbloqueado. + + + Only the Commander can sell vehicles + Только Командир может продавать технику + Sólo el Comandante puede vender vehículos + + + You must select from HC or Squad Bars, not both + Вы должны выбрать либо из панели Командира, либо из панели отрядов, а не одновременно + Debes seleccionar desde la barra de HC o Escuadrones, no en ambas + + + Auto Healing disabled + Автолечение Выкл. + Autocurar desactivado + + + Auto Heal enabled + Автолечение Вкл. + Autocurar activado + + + No units or squads selected + Единицы или отряды не выбраны + No hay unidades o escuadrones seleccionados + + + Stranger does not trust you. + Незнакомец не доверяет тебе + El extraño no confía en ti + + + Nomad does not trust you. + Странник не доверяет Вам + El viajero no confía en ti + + + Music turned OFF + Музыка Выкл. + Música Desactivada + + + Music turned ON + Музыка Вкл. + Música Activada + + + Fast Travel limited to camps and HQ + Телепорт ограничен лагерями и Штабом + Viaje Rápido limitado a campamentos y HQ + + + Extended Fast Travel system enabled + Расширенная система телепорта Вкл. + Sistema extendido de Viaje Rápido activado + + + Easy Mode disabled + Легкий режим Выкл. + Modo Fácil desactivado. + + + FIA income permanently increased. + Доход FIA постоянно растёт. + Los ingresos del FIA aumentan permanentemente. + + + Arsenal access set to default. + Доступ к Арсеналу установлен по умолчанию. + Acceso a Arsenal por defecto. + + + Members now get to keep their gear. + Игроки из списка могут сохранять своё снаряжение + Los miembros ahora pueden guardar su equipo. + + + + + + + 6 Compatible mods + 6 Совместимые моды + 6 Mods Compatibles + + + + Antistasi can be enjoyed running a vanilla ArmA 3 version, or with compatible mods, as long as they don’t affect the AI.<br/> + Some mods are fully integrated in Antistasi; when loaded, these mods will change the warring factions as a whole, complete with different vehicles, gear and mechanics.<br/> + At the moment, these are: RHS: (AFRF, USAF, GREF), TFAR and ACE3.<br/><br/> + + ACE settings are given by default however they can be changed by server admin or singleplayer by pressing escape, config, addons options. There you can change even medical system mode, ACE view distance etc. <br/><br/> + + Items from these integrated mods are also included in Supply Drops and Ammoboxes.<br/> + Other mods, adding new weapons or other gear for instance, will only be available in game by buying them at the Sketchy Irishman.<br/><br/> + + The Sketchy Irishman, also known as Devin, can be found by asking Petros for the Sketchy Irishman mission. At his shop, you can randomly purchase all items from installed mods. Do you want to play with that rusty WWII era mp40 or predator style minigun? You’ve got a chance to pick it up at the Sketchy Irishman’s shop! (No refunds.)<br/><br/> + + The official Antistasi community server runs a small list of high-end mods. Visit a3antistasi.com or the community Teamspeak server to get the link to the steam collection and download them easily.<br/><br/> + + IMPORTANT: Persistent Saving with a mod will make the save incompatible if you wish to revert back to playing without the installed mod. This won’t apply to client-side mods.<br/><br/> + + Avoid mods that control or affect AI as these might break Antistasi AI mechanics.<br/> + You can check a3.antistasi.com for further information. + + + Antistasi можно проходить как на оригинальной Arma 3, так и с установленными модами, главное чтобы они не влияли на поведение ИИ.<br/> + Некоторые моды полностью интегрированы в Antistasi. При загрузке эти моды изменят противоборствующие стороны - изменится транспорт, техника и снаряжение.<br/> + На данный момент это: RHS: (AFRF, USAF, GREF), TFAR И ACE3.<br/><br/> + + Настройки ACE задаются по умолчанию, однако их можно изменять на выделенном сервере, добавив класс в profile.arma3profile. Синхронизация частоты TFAR может быть установлена до запуска миссии в настройках аддонов проверьте github для получения дополнительной информации.<br/><br/> + + Элементы из этих модов также включены в игровой процесс - в снаряжение союзнической поддержки вооружением и содержимое ящиков с амуницией на базах.<br/> + Оружие и снаряжение из других модов, возможно использовать только в случае если получится его купить у Безумного Ирландца (торговец оружием).<br/><br/> + + Безумный Ирландец - торговец оружием, известный как Девин, его можно найти запросив миссию "Безумный Ирландец" у Петроса. В его магазине Вы можете приобрести в случайном порядке все предметы из установленных модов. Вы хотите играть со старым mp40 времен Второй мировой или с миниганом Хишника? У Вас есть шанс купить его в магазине Безумного Ирландца! (Возврату не подлежит)<br/><br/> + + Официальный сервер сообщества Antistasi запускается с небольшим списком модов. Посетите сайт a3antistasi.com или сообщество Teamspeak, чтобы получить ссылку на steam сборку и скачайте их.<br/><br/> + + ВАЖНО: сохранение прогресса с модом сделает сохранение несовместимым, если Вы захотите вернуться в игру без установленного мода. Это не относится к модам на стороне клиента.<br/><br/> + + Избегайте модов, которые влияют на ИИ, поскольку они могут нарушить работу механики Antistasi ИИ.<br/> + Вы можете посетить a3.antistasi.com для получения дополнительной информации. + + Antistasi se puede disfrutar con la versión vanilla de ArmA 3, o con modificaciones compatibles, siempre y cuando no afecten a la IA.<br/>Algunos mods están completamente integrados en Antistasi; cuando se cargan, estos mods cambiarán las facciones enfrentadas, usará diferentes vehículos, equipo y mecánicas. <br/>Por el momento son estos: RHS: (AFRF, USAF, GREF), TFAR y ACE3.<br/> <br/> + + Los ajustes de ACE están puestos por defecto, sin embargo, pueden ser cambiados por el admin del servidor o en el modo un jugador pulsando la tecla Esc, entrando en configuración, opciones addons.Ahí puedes cambiar otras opciones como el modo del sistema médico, distancia de visión en ACE, etc.<br/><br/> + + Los objetos de los mods integrados se incluiran en las entregas de suministros y las cajas de munición.<br/>Otros mods, añaden nuevas armas o otros equipos por ejemplo, pero sólo estaran disponibles si se los comprar al Irlandés Loco.<br/><br/> + + El Irlandés Loco, también conocido como Devin, puedes encontrarlo preguntandole a Petros por la misión del Irlandés Loco. En su tienda, puedes hacer una compra aleatoria de todos los objetos de los mods instalados. Quieres jugar con una oxidada mp40 de la WWII o una ametralladora estilo depredador? Tienes la oportunidad de conseguirla en la tienda del Irlandés Loco! (No admite devoluciones.)<br/><br/> + + El servidor de la comunidad oficial de Antistasi utiliza una pequeña lista de mods cerrados. Visita a3antistasi.com o el servidor de Teamspeak de la comunidad para acceder al link en steam con la lista completa y descargarlos fácilmente.<br/><br/> + + IMPORTANTE: El Grabado Persistente con un mod lo hará inservible si tratas de jugar sin ese mod instalado. Esto no se aplica a los mods del cliente.<br/><br/> + + Evite los mods que controlan o afectan a la IA, esto rompería las mecánicas de la IA en Antistasi.<br/> + Puedes visitar a3.antistasi.com para más información. + + + + 5 Antistasi Options + 5 Настройки Antistasi + 5 Opciones Antistasi + + + + By interacting with the physical Map asset at HQ you can set:<br/><br/> + + Civilian spawn rate: we suggest a value between 1% and 10% (5% is default); they count as AI and as such, reduce performance. Keep in mind that civilian vehicles amount can't be controlled so far, maybe future updates.<br/><br/> + + Spawn distance: 1 km is optimal, higher values might let you long range snipe, but game performance will suffer. <br/><br/> + + Garbage clean: corpses and items on the ground consume memory, clearing these instantly will improve performances, consider people might dislike unexpected clean especially if they're looting. (Some garbage already has an auto-delete timer.)<br/><br/> + + FPS limiter: below the threshold civilians will minimally spawn. This function is not much reliable <br/><br/> + + + Взаимодействуя с Картой в Штабе, Вы можете установить:<br/><br/> + + Коэффициент появления гражданских: мы предлагаем значение от 1% до 10% (по умолчанию 5%); Это количество ИИ, его увеличение снижает производительность. Имейте в виду, что значение менее 1% останавливает появление гражданских на машинах, поэтому не будет возможности получить транспорт бесплатно.<br/><br/> + + Дистанция появления: 1 км оптимальное значение, более высокие значения дадут возможность более эффективно использовать снайперское оружие, но производительность игры может снизиться. <br/><br/> + + Очистка мусора: трупы и валяющиеся на земле предметы занимают память, во время их очистки игра может притормаживать на короткое время, но после очистки FPS должен увеличиться. (У некоторого мусора уже есть таймер автоматического удаления.)<br/><br/> + + FPS Ограничитель: Чем меньше порог, тем меньше спавн (появление) гражданских лиц. <br/><br/> + FPS Ограничитель: Чем меньше порог, тем меньше спавн гражданских лиц. <br/><br/> + + FPS Ограничитель: Чем меньше порог, тем меньше спавн гражданских лиц. <br/><br/> + Al interactuar con el Mapa físico del HQ puedes establecer:<br/><br/> + + Porcentaje Spawn de Civiles: aconsejamos un valor entre 1% y 10% (5% por defecto); cuentan como IA y como tal, aumenta el rendimiento. Ten en cuenta que la cantidad de vehículos civiles no puede controlarse de mommento, puede que en futuras actualizaciones.<br/><br/> + + Distancia Spawn: 1 km es lo optimo, valores mayores podrían permitirle disparar a larga distancia, pero el rendimiento del juego podría sufrir. <br/><br/> + + Limpiar Basura: los cadávares y objetos en el suelo consumen memoria, limpiar es un proceso instantaneo que mejorará el rendimiento, ten en cuenta al resto de jugadores cuando lo uses, sobretodo si estaban saqueando. (Algunos objetos ya tienen un temporizador de eliminación automático.)<br/><br/> + + Limitador FPS: por debajo del umbral, se generarán muy pocos civiles. Esta función no es demasiado fiable.<br/><br/> + + + + 4 Game difficulty + 4 Сложность игры + 4 Dificultad del Juego + + + + Antistasi sets a unique ‘Skill’ and ‘Precision’ for AI, which increases based on Army XP Level and enemy resource management.<br/> + These parameters are influenced by the ArmA 3 game difficulty settings, which you can adjust (in singleplayer) from the options menu and on a server on #missions boot. <br/><br/> + + ‘Skill’ primarily modulates AI movement (i.e. flanking and seeking cover).<br/> + ‘Precision’ is the main parameter you want to adjust if you want to increase or decrease game difficulty. <br/><br/> + + Important to note is that Arma 3 AI-skill level is also dependent on the game engine: if the PC / Server is overloaded many actions in queue will be cancelled and AI will perform badly.<br/><br/> + + + Antistasi устанавливает уникальные показатели «умения» и «точности» для ИИ, которые увеличиваются в зависимости от уровня навыка войск (Army XP) и поведения противника.<br/> + На эти параметры влияют параметры сложности ArmA 3, которые Вы можете настроить (в одиночном режиме) из меню опций и на сервере при загрузке миссии. <br/><br/> + + «Умение» - моделирует поведение ИИ (защита флангов, поиск укрытия). <br/> + «Точность» - навык точной стрельбы - это основной параметр, который Вы можете настроить в меню ArmA 3, если хотите увеличить или уменьшить сложность игры. <br/><br/> + + Важно отметить, что уровень мастерства ИИ в Arma 3 также зависит от доступной вычислительной мощности: если компьютер/сервер перегружен, многие расчеты поведения ИИ будут отключены/упрощены, и ИИ будет туповат.<br/><br/> + + + Antistasi establece una 'Habilidad' y 'Precisión' únicas para la IA, que aumentan en función del nivel de XP del Ejército y la gestión de recursos enemigos.<br/> + Estos parámetros están influenciados por la configuración de dificultad del juego ArmA 3, que puede ajustar (en un solo jugador) desde el menú de opciones y en un servidor al inicio de la misión.<br/><br/> + + La ‘Habilidad’ principalmente afecta al movimiento de la IA (p.e. flanquear y buscar cobertura).<br/> + ‘Precisión’ es el parámetro principal que debes ajustar si quieres aumentar o disminuir la dificultad del juego. <br/><br/> + + Es importante tener en cuenta que el nivel de habilidad de la IA en Arma 3 depende del motor del juego: Si el PC / Servidor está sobrecargado de acciones en cola se cancelarán y la IA tendrá un mal rendimiento.<br/><br/> + + + + 3 Spawn system and Performance + 3 Система спавна, производительность + 3 Sistema de Spawn y Rendimiento + + + + Petros, Players, Controlled AI (i.e. freed refugees, recruited soldiers, squads and NATO/VMF ground units) trigger the spawn of enemies and civilians in a radius of 1km - the caching radius. NATO air vehicle won’t spawn in enemies to save performance there is a plan to add a chance of destroying the aircraft when flying by enemy territories. <br/><br/> + + Most enemies outside the caching radius will despawn and if you/your AI move in close again, they will respawn in a different position and at full strength.<br/> + Enemy MRAPs, patrol helicopters, refugees/POWs before liberation, convoys, AAF attack forces will be active regardless of the spawn range. <br/> + AAF attack forces only cache-in the friendly garrison of the objective and FIA roadblocks on the way. <br/><br/> + + Arma 3 is badly optimized and can have game-breaking issues with more than 150 AI on the field. <br/> + Because of this, try to converge people to the same AO and avoid caching in too many enemies at once, as this will result in a poor game experience with low FPS or AI not reacting as they should.<br/> + Also, try to place HQ and Camps outside the spawning radius of towns and emplacements so they won't be cached-in permanently.<br/><br/> + + Note that servers can add a Headless Client which will dramatically increase the handling of AI. There are 3 HC slots available AI will be assigned proportionally giving more priority to HC than the main server. + + + Петрос, игроки, контролируемые ИИ (также освобожденные беженцы, бойцы, отряды и подразделения НАТО/ВМФ) вызывают появление (спавн) врагов и гражданских лиц в радиусе 1 км - это радиус кеширования. Воздушный транспорт НАТО не вызывает спавна врагов, чтобы сохранить производительность. (В планах добавить возможность уничтожения самолета при полете над вражеской территорией) <br/><br/> + + Большинство врагов, находящихся за пределами радиуса кеширования, будут исчезать, и если Вы/Ваш ИИ перемещаетесь, они будут появляться вдоль пути полные сил.<br/> + Вражеские MRAP (бронемашины), патрульные вертолеты, беженцы/военнопленные до освобождения, конвои, атакующие силы AAF будут активны независимо от диапазона появления. <br/> + Атака AAF вызывает кеширование только дружественных объектов гарнизонов и блокпостов FIA на своём пути.<br/><br/> + + Arma 3 плохо оптимизирована и могут быть проблемы с производительностью при более чем 150 ИИ в игре. <br/> + Поэтому старайтесь собрать людей на одном объекте атаки и избегать кэширования слишком большого количества врагов одновременно, так как это приведет к игре с низким уровнем FPS или тормозам в поведении ИИ.<br/> + Кроме того, постарайтесь разместить базы и лагеря за пределами радиуса городов и позиций, чтобы они не попадали в кэш.<br/><br/> + + Обратите внимание, что серверы могут добавлять Headless клиента, что значительно увеличит обработку ИИ. Доступны 3 Слота HC. + + + Petros, Jugadores, IA Controlada (p.e. refugiados liberados, soldados reclutados, escuadrones y unidades terrestres de OTAN/VMF) desencadenan la generación de enemigos y civiles en un radio de 1km - el radio de caché. Los vehículos aéreos de la OTAN no generarán enemigos para salvar el rendimiento. Existe un plan para agregar una posibilidad de destruir el avión cuando se vuela por territorios enemigos. <br/><br/> + + La mayoría de los enemigos que se encuentran fuera del radio de caché desaparecerán y si tu o tu IA vuelven a acercarse, reaparecerán en una posición diferente y con toda su fuerza.<br/> + MRAPs enemigos, helicopteros de patrulla, refugiados/prisioneros tras la liberación, convoys, fuerzas de ataque de las AAF estarán activos independientemente del rango de generación. <br/> + Las fuerzas de ataque de las AAF solo almacenan en caché la guarnición aliada de su objetivo y los controles de la FIA en el camino. <br/><br/> + + Arma 3 está mal optimizado y puede provocar fallos en el juego con más de 150 IA desplegadas. <br/>Por eso, intenta unir a las personas en el mismo Área de Operaciones y evita almacenar en caché demasiados enemigos a la vez, ya que esto provocará una experiencia de juego pobre con niveles bajos de FPS o IA sin reaccionar como deberían.<br/> + Además, trata de ubicar el HQ y los campamentos fuera del radio de spawn de las ciudades y emplazamientos para que no se almacenen en caché de forma permanente.<br/><br/> + + Tenga en cuenta que los servidores pueden agregar un cliente headless que aumentará drásticamente el manejo de la inteligencia artificial. Hay 3 ranuras HC disponibles que se le asignará proporcionalmente a la IA, dando mayor prioridad al HC que al servidor principal. + + + + 2 Save Load Restart + 2 Сохранение, загрузка, рестарт + 2 Guardar Cargar Reiniciar + + + + Vanilla saving option is disabled because it breaks the mission. In order to save progress, the Commander has to Persistent Save by interacting with the in-game Map at HQ and, upon restart, Antistasi asks if you want to load Previous Session.<br/> + If you’re a normal player your equipment, money and rank will be saved automatically upon disconnect.<br/><br/> + + Saved data is stored in documents/Arma 3/user.vars.Arma3Profile and is saved separately for each island and respective blufor and greenfor version. <br/><br/> + + What is saved:<br/> + - HQ location with static guns and vehicle within 50m without their inventory.<br/> + - deployed static guns in garrisoned territories.<br/> + - roablocks, garrisons, money, HR, garage, support.<br/> + - Arsenal items and Garage vehicles.<br/> + What isn’t saved: AI positions, items inside vehicle crates, recruited AI (part of their cost is refunded).<br/> + To have multiple saves and keep your gear when disconnecting within 100m from HQ, run the mod inidbi2 by code34. + + + Стандартное сохранение отключено, так как оно некорректно сохраняет миссию. Чтобы сохранить прогресс, Командир должен использовать Карту в Штабе. После загрузки Antistasi спрашивает, хотите ли Вы загрузить предыдущую сессию.<br/> + Если Вы обычный игрок, Ваше снаряжение, деньги и звание (ранг) будут автоматически сохранены после выхода.<br/><br/> + + Сохраненные данные сохраняются в документах/Arma 3/user.vars.Arma3Profile и сохраняются отдельно для каждого острова и соответствующих blufor и greenfor версиий. <br/><br/> + + Что сохраняется:<br/> + - расположение Штаба со станковым оружием и транспортные средства в пределах 50 м без снаряжения внутри них<br/> + - развернутые станковые орудия на гарнизонных территориях.<br/> + - блокпосты, гарнизоны, деньги, HR, гараж, поддержка.<br/> + - Предметы Арсенала и транспортные средства в Гараже.<br/> + Что не сохраняется: позиции ИИ, предметы внутри транспортных средств, ИИ, отряды ИИ (часть их стоимости компенсируется).<br/> + Чтобы иметь несколько сохранений и сохранить свое снаряжение при отключении в пределах 100 м от Штаба, запустите modid inidbi2 с помощью кода 34. + + + La opción de guardado de Vanilla está deshabilitado porque hace fallar la misión. Para guardar el progreso, el Comandante tiene el Guardar Persistente al interactuar en el juego con el Mapa del HQ y, al reiniciar, Antistasi pregunta si quieres cargar una Sesión Previa.<br/> + Si eres un jugador normal, tu equipo, dinero y rango será guardado automáticamente al desconectar.<br/><br/> + + Los datos de guardado se almacena en documentos/Arma 3/user.vars.Arma3Profile y se guarda por separado para cada isla y respectiva versión blufor y greenfor. <br/><br/> + + Qué se graba:<br/> + - Localización del HQ con armas estáticas y vehículos dentro de 50m de la bandera sin nada en sus inventarios.<br/> + - armas estáticas desplegadas en zonas con guarnición.<br/> + - controles, guarniciones, dinero, HR, garaje, apoyo.<br/> + - Objetos en Arsenal y vehículos del Garaje.<br/> + Qué NO se graba: posiciones de la IA, objetos dentro de vehículos, IA reclutada (parte de su coste es reembolsado).<br/> Para tener múltiples guardados y mantener tu equipo al desconectarte dentro de 100m desde el HQ, ejecuta el mod inidbi2 de code34. + + + + 1 Welcome + 1 Добро пожаловать + 1 Bienvenido + + + + This campaign is a long lasting scenario which simulates guerrilla combat in an asymmetric warfare situation. It might take weeks to complete, however the fun comes from playing it step by step.<br/><br/> + + There are several ways of playing Antistasi to complete the main objective.<br/> + The goal is to gain the support of more than 50% of the civilian population on the island. <br/> + The campaign is lost if CSAT destroys 8 towns by bombardment. <br/><br/> + + Multiplayer notes:<br/> + - Parameters are accessible after selecting the mission in the role selection screen top right before the mission is started.<br/> + - The previous save is automatically loaded unless admin/host change Parameters enabling the fresh start<br/> + - Parameters are very important, check them out, there will be useful settings<br/> + + Special keys:<br/> + US keyboard = press‘Y’, ‘shift+Y’, ‘Delete’, and ‘U’ to access vital functions, be sure to unbind those keys from your custom controls otherwise they won’t work.<br/><br/> + German keyboard = press Z, shift+Z … instead.<br/> + + For more info and tips check categories on the left side.<br/> + + + Antistasi - это длительная кампания-симулятор партизанской войны в неравных условиях. Возможно что потребуется не одна неделя, чтобы закончить кампанию, однако именно это и доставляет удовольствие от игры - маленькими шагами прийти к большой победе.<br/><br/> + + Существует несколько различных вариантов игры в Antistasi для успешного выполнения основной задачи.<br/> + Цель кампании состоит в том, чтобы получить поддержку более 50% гражданского населения на острове. <br/> + Кампания будет проиграна, если CSAT разбомбит 8 городов. <br/><br/> + + Для мультиплеера:<br/> + - Параметры доступны после выбора миссии на экране выбора роли справа перед началом миссии.<br/> + - Предыдущее сохранение автоматически загружается, пока администратор/хост не изменит параметры и перезапустится.<br/> + + Специальные клавиши:<br/> + Клавиатура США: нажмите «Y», «shift + Y», «Delete» и «U», чтобы получить доступ к нужным функциям, обязательно отвяжите эти кнопки от своих пользовательских настроек управления, иначе они не будут работать.<br/><br/> + Немецкая клавиатура = нажмите «Z», вместо «shift+Z».<br/> + + Для получения дополнительной информации и советов просмотрите все категории Справки с левой стороны. + + + Esta campaña es un escenario de larga duración que simula el combate de la guerrilla en una situación de guerra asimétrica. Puede llevar semanas completarlo, sin embargo, la diversión está en jugarlo paso a paso.<br/><br/> + + Hay varias formas de jugar Antistasi para completar el objetivo principal.<br/> + El objetivo es ganar el apoyo de más del 50% de la población civil de la isla. <br/> + Pierdes la campaña si el CSAT destruye 8 ciudades por bombardeos. <br/><br/> + + Notas Multijugador:<br/> + - Se puede acceder a los Parámetros después de seleccionar la misión en la pantalla de selección en el lado superior derecho antes de iniciar la misión.<br/> + - El guardado previo se cargará automáticamente a menos que el admin/host habilite en Parametros la opción de comenzar una campaña nueva<br/> + - Los parámetros son muy importantes, compruébalos para hacer la configuración más util.<br/> + + Teclas Especiales:<br/> + Teclado US = pulsa ‘Y’, ‘shift+Y’, ‘Delete’, y ‘U’ para acceder a funciones vitales, asegúrese de desvincular esas teclas de sus controles personalizados, de lo contrario no funcionarán.<br/><br/> + Teclado Alemán = pulse Z, shift+Z … en su lugar.<br/> + + Para más información y consejos revise las categorías en el lado izquierdo.<br/> + + + + Begin Tutorial + Начало обучения + Comenzar Tutorial + + + HQ + Штаб + HQ + + + + Place the HQ safely away from main roads, but possibly close to a small one.<br/> + DON'T set HQ inside of a building to avoid major collision bugs.<br/><br/> + + Consider that mission vehicles spawn around the Campfire, purchased vehicles spawn around the Flag, reinforcements spawn at the closest road as do vehicles of players/AI when Fast Travelling.<br/><br/> + + As said in ‘Spawn System’, Petros will keep an area of 1km cached in, so avoid placing the HQ where he will cache-in civilians or town patrols. (Even in friendly territory to save game performance.) Enemies might just stumble into Petros and kill him while you’re operating far away.<br/><br/> + + Once you safely placed your new HQ, interact with Petros, the Flag, Arsenal, Campfire and the Heal and Repair box to discover their unique functions.<br/><br/> + + - Map: edit Antistasi Options and Persistent Save your progress, inspect detailed town/garrison info.<br/><br/> + + - Flagpole: recruit AI, buy vehicles and static weapons, manage HQ.<br/><br/> + + - Campfire: fast forward time by 8 hours and burn your feet. (Current missions will fail, and you can’t skip time when AAF attack is going on.)<br/><br/> + + - Arsenal Crate: store loot and edit your loadout.<br/><br/> + + - Heal and Repair box: heal, repair yourself and rearm AI. Reset undercover status and change vehicle plates, automatically resupply nearby HC units and static guns.<br/><br/> + + - Petros: ask for missions.<br/><br/> + + HQ location is revealed to CSAT only if you scary a traitor and he manage to flee to an enemy base. Also, mortar fire is an easy way to get triangulated, expect aggressive enemies in both cases. + + + Место Штаба безопасно и находится далеко от основных дорог. В тоже время есть местные подъездные дороги.<br/> + НЕ устанавливайте Штаб внутри строений чтобы избежать багов при столкновении объектов.<br/><br/> + + Помните о том, что Транспортные средства для миссий появляются у Костра, купленный транспорт - у Флага, подкрепление - на самой близкой дороге, как и транспортные средства игроков/ИИ при телепорте.<br/><br/> + + Как сказано в разделе «Система спавна», Петрос сохранит область в 1 км в кэше, поэтому избегайте размещения Штаба, там где он будет кэшировать гражданские или городские патрули. (Даже на дружественной территории, чтобы сохранить игру.) Враги могут просто наткнуться на Петроса и убить его, пока Вы находитесь далеко.<br/><br/> + + После того, как Вы благополучно разместили свой новый Штаб, взаимодействуйте с Петросом, Флагом, Арсеналом, Костром и Ящиком лечения и восстановления транспорта, чтобы узнать их функции и назначение.<br/><br/> + + - Карта: редактируйте параметры Antistasi и сохраняйте игру, проверьте подробную информацию о городе/гарнизоне.<br/><br/> + + - Флаг: набирайте отряд, покупайте транспортные средства и станковое оружие, управляйте Штабом.<br/><br/> + + - Костер: пропустите время вперед на 8 часов и отдохните (сон). Текущие незаконченные миссии будут провалены. Вы не сможете пропустить время, когда Вас атакуют. Боль;)<br/><br/> + + - Ящик Арсенала: храните захваченное снаряжение и редактируйте свою экипировку.<br/><br/> + + - Ящик лечения и восстановления транспорта: вылечить себя и ИИ, сбросить гражданский статус и сменить номера на автомобилях, пополнение боезапаса техники и станковых орудий.<br/><br/> + + - Петрос: запросите миссию.<br/><br/> + + Расположение Штаба обнаруживается противником только в том случае, если Вы раскрыли предателя и ему удается бежать на базу противника. Минометный огонь - это простой способ раскрыть свое местоположение противнику. Ждите ответных действий врага в обоих случаях. + + + + Coloca el HQ en lugar seguro lejos de carreteras principales, pero cerca al menos de una pequeña.<br/> + NO coloque el HQ dentro de un edificio para evitar fallos por colisión.<br/><br/> + + Ten en cuenta que los vehículos de misión aparecen alrededor de la hoguera, los vehículos comprados aparecen alrededor de la bandera, los refuerzos aparecen cerca de la carretera así como los vehículos de jugadores/IA cuando hacen Viaje Rápido.<br/><br/> + + Como se dijo en 'Sistema Spawn', Petros mantendrá un área de 1km en caché, así que evite ubicar el HQ evitando zonas civiles o patrullas de la ciudad (Incluso en territorio aliado para salvar el rendimiento del juego.) Los enemigos pueden tropezar con Petros y matarlo mientras estás operando lejos del HQ.<br/><br/> + + Una vez que hayas colocado con seguridad tu nuevo HQ, interactúa con Petros, la Bandera, Arsenal, Hoguera y la caja Curar y Reparar para descubrir sus funciones únicas.<br/><br/> + + - Mapa: edita Opciones de Antistasi y hace Guardado Persistente de tu progreso, información detallada de ciudades/guarniciones.<br/><br/> + + - Bandera: reclutar IA, comprar vehículos y armas estáticas, administrar el HQ.<br/><br/> + + - Hoguera: acelerar el tiempo 8 horas y quemar tus pies. (Si se usa, Las misiones actuales fallarán, no se puede usar cuando hay un ataque AAF en marcha.)<br/><br/> + + - Arsenal: almacenar equipo y editar tu equipamiento.<br/><br/> + + - Caja Curar y Reparar: curar, reparar y rearmar a ti y a la IA. Devuelve el estado de Incógnito y cambia las matrículas de los vehículos, reabastece automáticamente a las unidades y estáticas cercanas.<br/><br/> + + - Petros: solicitar misiones.<br/><br/> + + La ubicación de la sede se revela al CSAT sólo si un traidor logra huir a una base enemiga. Además, el fuego de mortero es una forma fácil de triangularla, espera asaltos agresivos en ambos casos. + + + + Top Info Bar + Верхняя панель информации + Barra Superior de Información + + + + The Info Bar displays campaign info, resources and undercover status.<br/><br/> + + -Commander: the current Commander. ‘None’ is displayed when membership is enabled and there isn’t any member online who is eligible to command. In this case, the following features will be frozen: economy per tick, main enemy response such as QRFs and Attacks and random mission spawns.<br/><br/> + Press resign on Y (US-keyboard layout) menu when commander ‘none’ will check for a new commander.<br/> + + -Rank: affects the courage of your AI and how precisely they will execute orders. Progress rank by killing enemies and, more effectively, by completing missions. In multiplayer you can also donate your money to FIA to gain ranks.<br/> + Player Rank is saved automatically in multiplayer upon disconnect<br/><br/> + + - HR: Human Resources are used to recruit AI, add garrison troops to conquered emplacements and, in singleplayer only, 10% of HR and 5% of money is subtracted every time you die. <br/> + Gain HR by escorting refugees or POWs to HQ, or controlling towns and cities.<br/> + Game ticks every 10 minutes add HR depending on amount of civilian supporting FIA.<br/><br/> + + - Money: in singleplayer, only 'FIA money' is available. Useful for buying vehicles, recruit AI, add garrisons and increase Army Xp Level. <br/> + In multiplayer the player’s and FIA accounts are separated; if you die you lose a percentage of your personal account.<br/> + Game ticks every 10 minutes add money to the FIA account depending on controlled territories.<br/> + Player Money are saved automatically in multiplayer upon disconnect<br/><br/> + + - NATO support: Commander can call-in the friendly faction to assist in overwhelming fights (the friendly-faction is different depending on mod/vanilla blufor/greenfor). Check Commander Options diary entry and Antistasi Features - Support entry. <br/><br/> + + - CSAT support: enemy-faction (again, different depending on mod/vanilla blufor/greenfor) will help the enemy and when this value is very high, they’ll start bombarding towns. <br/> + After 8 destroyed towns the campaign is lost. CSAT support grows if you conquer enemy bases and airports, also if you destroy AA emplacements on named Hilltops. <br/><br/> + + - Army Xp: indicator of Army Xp Level, check the relative diary section for a detailed explanation, the arrows let you know when you’re close to the next tier and, if they’re red, it means you haven’t matched the requirement for the next tier upgrade.<br/><br/> + + - Overt / Incognito: indicator of your undercover status, when it displays Incognito, enemies will think you’re a civilian and ignore you. <br/> + Get undercover status by selecting it in the Y menu or by entering a civilian car. This is only possible if you match all the conditions. <br/> + Check relative diary section for a more detailed explanation. + + + В информационной строке отображается информация о кампании, ресурсах и секретном статусе.<br/><br/> + + - Командир: текущий Командир. Отображается «Нет», если членство включено, но нет ни одного члена онлайн, который имеет право на командование. В этом случае будут заморожены следующие функции: экономика (начисление HR и денег), реакция врага в виде направления отрядов быстрого реагирования (ОБР), атаки противника и появление случайных миссий.<br/><br/> + Нажмите кнопку «Y» (раскладка клавиатуры США), когда Командир «Отсутствует», будет проведена проверка на нового Командира.<br/> + - Ранг: влияет на отвагу Ваших ИИ и то, насколько эффективно они будут выполнять приказы. Ранг возрастает от убийства противников, но больший рост ранга обеспечивается успешным выполнением миссий.<br/> + В мультиплеере можно тратить свои деньги FIA для повышения ранга.<br/><br/> + + - HR: ресурсы живой силы сопротивления, используются для набора ИИ, добавления войск гарнизона на захваченных объектах, и только в одиночном режиме, 10% HR и 5% денег вычитаются каждый раз когда Вы умираете. <br/> + Зарабатывайте очки HR, сопроводив беженцев или военнопленных на базу или контролируемые города и деревни<br/> + Игровой счётчик каждые 10 минут добавляет HR в зависимости от количества гражданских лиц, поддерживающих в текущий момент FIA.<br/><br/> + + - Деньги: в одиночном режиме доступно только «FIA деньги». На них можно покупать автомобили, военную технику, набирать ИИ, отряды ИИ, добавлять гарнизоны и повышать уровень навыка войск (Army XP) с помощью тренировок. <br/> + В мультиплеере счета игроков и FIA разделяются; если Вы умрете, Вы потеряете часть своего личного счета.<br/> + Игровой Счётчик каждые 10 минут добавляют деньги на счет FIA в зависимости от контролируемых территорий.<br/> + Деньги игрока автоматически сохраняются в мультиплеере при отключении<br/><br/> + + - Поддержка Союзников: Командир может вызвать дружественную фракцию, чтобы помочь в подавлении врага (дружественная фракция отличается в зависимости от наличия установленных модов, например RHS, и модификации Antistasi - blufor/greenfor). См. вкладки Справки «Командование» и «Функции Antistasi». <br/><br/> + + - Поддержка Врага: показатель, отражающий уровень агрессии на Вас вражеской фракции (которая опять же зависит от модов и модификации Antistasi blufor/greenfor ). Когда это значение будет очень высоким, враг начнет бомбить города. <br/> + После 8 разрушенных городов кампания будет провалена. Показатель поддержки противника растет, когда Вы захватываете вражеские базы и авиабазы, уничтожаете системы ПВО на высотах. <br/><br/> + + - Army XP: индикатор уровня навыка войск, проверьте раздел Справки для подробного объяснения, стрелки (>>>>) сообщают Вам, как близко Вы находитесь к следующему уровню, и, если они красные, это означает, что Вы не соответствуете условиям для перехода на следующий уровень.<br/><br/> + + - Военный/Гражданский: индикатор Вашего тайного статуса, когда он отображает «Гражданский», враги будут думать, что Вы гражданский и будут игнорировать Вас. <br/> + Получите гражданский статус, выбрав в меню «Y» пункт «Маскировка» или взяв гражданский автомобиль. Это возможно только в том случае, если Вы соответствуете всем условиям. <br/> + Проверьте более подробное объяснение в разделе Справки. + + La Barra de Información muestra detalles de la campaña, recursos y estado de Incógnito.<br/><br/> + + -Comandante: El Comandante actual. Se mostrará ‘Ninguno’ cuando la membresía esté activada y no haya ningún miembro online electo para el puesto. En este caso, las siguientes características se detendrán: economía por ronda, respuesta principal del enemigo, como QRF, ataques y generación de misiones aleatorias.<br/><br/> + Pulsa Renunciar en el menú Y (Teclado-US) cuando se muestre 'Ninguno' para buscar un nuevo Comandante.<br/> + + -Rango: afecta el valor de tu IA y con qué efectividad ejecutarán las órdenes. Aumenta tu rango matando enemigos y, mas efectivo, completando misiones. En multijugador también puedes donar tu dinero a la FIA para ganar Rango.<br/> + El Rango del jugador se guarda automáticamente en multijugador al desconectar.<br/><br/> + + - HR: Recursos Humanos se usa para reclutar IA, añadir tropas a las guarniciones, conquistar emplazamientos y, sólo en un jugador, el 10% de los HR y el 5% del dinero se perderá cada vez que mueras. <br/> + Gana HR escoltando refugiados o prisioneros al HQ, o controlando pueblos y ciudades.<br/> + El juego evalua cada 10 minutos y añade HR dependiendo del número de civiles que apoyen al FIA.<br/><br/> + + - Dinero: en un jugador, sólo estará disponible el 'Dinero FIA'. utilizalo para comprar vehículos, reclutar IA, añadir guarniciones e incrementar el nivel de tu Ejército. <br/> + En multijugador, la cuenta del FIA y la del jugador están separadas; si mueres pierdes un porcentaje de tu cuenta personal.<br/> + El juego revisa cada 10 minutos y añade dinero a la cuenta del FIA dependiendo de los territorios controlados.<br/> + El dinero del Jugador se guarda automáticamente en multijugador cuando este se desconecta.<br/><br/> + + - Apoyo OTAN: El Comandante puede solicitar a la facción aliada un apoyo contundente en la batalla (la facción aliada será diferente dependiendo del mod/vanilla blufor/greenfor). Comprueba las entradas de diario de las Opciones de Comandante y de las Características Antistasi - Apoyo. <br/><br/> + + - Apoyo CSAT: la facción enemiga (de nuevo, será diferente dependiendo del mod/vanilla blufor/greenfor) ayudará al enemigo y cuando este valor sea muy alto, empezarán a bombardear ciudades. <br/> + Tras destruir 8 ciudades, la campaña se habrá perdido. El apoyo CSAT crece si conquistas bases y aeropuertos enemigos, también si destruyes emplazamientos AA en cimas de colina con nombre. <br/><br/> + + - XP Ejército: indica el nivel XP del Ejército, consulta la sección relativa en el diario para una explicación detallada, las flechas muestran lo cerca que estás del siguiente nivel y, si están en rojo, significa que no has cumplido el requisito para la próxima actualización de nivel.<br/><br/> + + - Descubierto / Incógnito: indicador de tu estado de Incógnito, cuando muestra Incógnito, los enemigos pensarán que eres un civil y te ignoraran. <br/> + Obten el estado incógnito seleccionándolo en el menú Y o entrando en un vehículo civil. Solo es posible si cumples todas las condiciones. <br/> + Revisa la sección del diario para una explicación más detallada. + + + + Y menu + «Y» меню + Menú Y + + + + Hitting ‘Y’ will open the PDA, with 3 buttons on the far right which respectively correspond from top to bottom to:<br/> + Player <br/> + Commander <br/> + Admin.<br/><br/> + + Move the cursor over the options to get a description. + + + Нажатие «Y» откроет КПК с тремя кнопками справа, которые соответственно соответствуют сверху вниз:<br/> + Игрок <br/> + Командир <br/> + Админ.<br/><br/> + + Переместите курсор на параметр, чтобы получить описание. + + + Pulsar ‘Y’ abrirá la PDA, con 3 botones en el lado derecho que corresponden respectivamente de arriba a abajo a:<br/> + Jugador <br/> + Comandante <br/> + Admin.<br/><br/> + + + + What to do + Что делать + Qué hacer? + + + + The Arsenal is empty, with money barely enough to fund your first missions...<br/> + First goal is to gain money and scavenge gear. Ask Petros for missions and decide for yourself to go for them or not.<br/> + Missions aren’t the real goal of the game, just options that sometimes you might even have to ignore. Look at the map or scout ahead, because some missions might just be impossible for your current capabilities. Binoculars and the Undercover system will be your friends. <br/><br/> + + Missions are triggered within 4 km of your HQ. Don’t try them alone, gather friends or recruit AI at the flag, they aren’t good as the enemy army soldiers however they can be useful in diversion and covering fire. Some objectives might be very remote, or are too risky to reach from HQ directly. If so, the Commander can set up a Camp where you can Fast Travel (teleport) to, speeding up your movement or giving you a safer approach.<br/><br/> + + Scavenge gear, load it in a vehicle, go back to HQ, interact with the Arsenal, choose Transfer Vehicle Cargo to Ammobox to load all the gear into the Arsenal Crate. Check relative section Arsenal, Inventory and Unlocking below for more info.<br/><br/> + + Enemies react to your moves by sending reinforcements or patrols departing physically from a base, so, reaction time is different depending on range from the base, what mode of transport the enemy uses and if they can reach you at all. <br/> + Try to eliminate the enemy quickly if you want to have a chance of looting and running away safely. <br/><br/> + + Playing alone might be difficult unless you properly scout and know the territory. Try to recruit AI (1 or 2 can do the job, they aren’t trained enough to kill enemies, however they’re a great diversion or can provide covering fire if smartly placed). AI will try to revive you if you are downed and they aren’t engaged by enemies. <br/><br/> + + However, Antistasi really shines if you play with friends, so join Antistasi Official Servers and make some new ones! + + + Арсенал пуст, а денег недостаточно для выполнения первых миссий ...<br/> + Первая цель - заработать деньги и получить снаряжение. Запросите у Петроса миссию и подумайте выполнять ее или нет.<br/> + Миссии - это не главная цель игры, а просто дополнительные возможности, которые иногда можно и игнорировать. Изучите карту, осуществите предварительную разведку местности. Некоторые миссии могут быть просто невыполнимы с Вашим текущим уровнем. Используйте бинокль и оставайтесь в гражданском статусе для эффективной разведки. <br/><br/> + + Миссии запускаются в пределах 4 км от Штаба. Не пробуйте пройти их в одиночку, собирайте Участников или набирайте отряд ИИ у Флага, они не так опытны, как солдаты вражеской армии, однако они могут быть полезны при грамотном их размещении, например для прикрытия огнём. Некоторые цели могут быть очень отдаленными или слишком рискованными для выдвижения к ним непосредственно с места дисклокации Штаба. В таких случаях Командир может создать лагерь, куда можно перемещаться, используя систему быстрого перемещения (телепорт).<br/><br/> + + Захватите вражеское снаряжение, загрузите его в транспортное средство, вернитесь к Штабу, взаимодействуйте с Арсеналом, выберите «Выгрузить из транспорта в Ящик», чтобы загрузить всю экипировку в Ящик Арсенала. Для получения дополнительной информации см. раздел «Арсенал», «Инвентаризация и разблокировка» ниже.<br/><br/> + + Враги реагируют на Ваши действия, отправляя подкрепление или патрули, поэтому время их реакции различается в зависимости от расстояния до базы, вида используемого противником транспорта и возможности добраться к Вам. <br/> + Попытайтесь быстро устранить противника, если хотите, чтобы у Вас осталось время собрать трофеи и спокойно слинять до их прихода. <br/><br/> + + Игра в одиночку может быть тяжелой, если Вы не будете разведывать и изучать территорию. Попытайтесь взять ИИ в помощь (1 или 2 бойца могут выполнять некоторую работу, они недостаточно опытны, чтобы эффективно убивать врагов, однако они могут обеспечить прикрытие огнем, если их грамотно расположить). Кроме того, ИИ будет стараться оказать Вам медпомощь если Вы будете ранены, и поблизости не будет врагов. <br/><br/> + + Но свой полный потенциал Antistasi раскрывает если Вы играете с друзьями, поэтому присоединяйтесь к официальным серверам Antistasi и создавайте новые! + + + El Arsenal está vacío, con fondos apenas suficientes para fianciar tus primeras misiones...<br/> + Tu primer objetivo es ganar dinero y recolectar equipo. Solicita a Petros misiones y decide si hacerlas o no.<br/> + Las misione no son el objetivo real del juego, sólo opciones que a veces deberás ignorar. Mira el mapa o explora la zona, porque algunas misiones pueden ser imposibles para tu capacidad actual. Los prismáticos y el sistema de Incógnito serán tus amigos. <br/><br/> + + Las misiones se activarán en un rango de 4 km desde tu HQ. No trates de hacerlas sólo, reúne amigos o recluta a IA en la bandera, no son buenos como los soldados del ejército enemigo, sin embargo, pueden ser útiles para distraer y para el fuego de cobertura. Algunos objetivos pueden estar muy lejos, o ser demasiado arriesgados para llegar desde el HQ directamente. Si es el caso, el Comandante puede montar un Campamento dónde hacer Viaje Rápido (teletransporte) para acelerar tus movimientos o hacer una aproximación segura.<br/><br/> + + Recoge equipo, cárgalo en un vehículo, vuelve al HQ, interactua con el Arsenal, elige Descargar Contenido Vehículo al Arsenal para dejar todo el equipo en la caja del Arsenal. Comprueba la entrada Arsenal, Inventorio y Desbloquear para más información.<br/><br/> + + Los enemigos reaccionan a tus movimientos ya sea enviando refuerzos o patrullas saliendo físicamente desde una base, por lo que, el tiempo de reacción es diferente dependiendo del rango de la base, qué modo de transporte utiliza el enemigo y si pueden llegar hasta allí. <br/> + Trata de eliminar al enemigo rápidamente si quieres quieres tener una oportunidad de saquear y escapar de forma segura. <br/><br/> + + Jugar solo puede ser difícil sino exploras apropiadamente y conoces el territorio. Prueba a reclutar IA (1 o 2 pueden hacer el trabajo, no están entrenados para matar enemigos, aun así pueden ser una gran distracción o proporcionar fuego de cobertura si los has colocado inteligentemente). LA IA intentará revivirte si caes y no están en combate con el enemigo. <br/><br/> + + Sin embargo, Antistasi realmente brilla si juegas con amigos, ¡así que únete a Servidores Oficiales Antistasi o crea otros nuevos! + + + + Jeroen Arsenal System + Арсенал JAS + Jeroen Arsenal System + + + + The inventory system in Antistasi is unique: Loading Previous Session will empty all the inventories from vehicles. Only the contents of the Virtual Arsenal and the inventory of the Arsenal Crate are saved. <br/><br/> + + You can use them as follows:<br/> + - Arsenal Crate inventory = temporary storage for items. Gear transferred by the ‘Transfer Vehicle Cargo to Ammobox’ function will end up here. <br/> + - Virtual Arsenal = main gear storage. Move items from the Arsenal Crate into the Arsenal by pressing ‘To Crate’ in the Virtual Arsenal environment.<br/><br/> + + By opening the Arsenal you will see JAS’s modified Arsenal interface. On the left hand side the item categories are displayed. Red categories indicate items not yet equipped.<br/><br/> + + The number between brackets in front of each item is the actual number of copies in the Arsenal.<br/> + The same goes for the magazines (which are counted separately in single bullets), grenades and other consumables, displayed in the right hand side window.<br/><br/> + + Unlike previous Antistasi versions, there is no way to unlock an item permanently and in unlimited amount. Everything is limited to what you actually scavenge and bring back to HQ.<br/><br/> + + Accessing the Arsenal from the driver seat of a vehicle lets you add items into the vehicle itself.<br/><br/> + + The custom buttons at the bottom are:<br/> + - Default gear: adds stuff that you’ll always need according to the modset.<br/><br/> + + - To Crate: Moves all the items in the Arsenal Crate to the JAS inventory.<br/><br/> + + AI Gear: recruited AI spawn with gears available above a threshold in the Arsenal depending on their class. This won’t reduce the actual amount of stored items. Clothes depends on FIA Army Level. + + + Antistasi имеет собственную уникальную систему - Арсенал JAS. Загрузка предыдущей сессии удалит весь инвентарь внутри транспортных средств. Сохраняется только содержимое виртуального Арсенала и инвентарь Ящика Арсенала. <br/><br/> + + Вы можете использовать их следующим образом:<br/> + - Ящик Арсенала = временное хранение предметов. При передаче предметов из транспорта в Арсенал с помощью функции в меню взаимодействия «Выгрузить из транспорта в Ящик», выгрузка осуществляется в Ящик Арсенала. <br/> + - Виртуальный Арсенал = постоянное хранение предметов. Переместите предметы из Ящика Арсенала в виртуальный Арсенал, нажав «To Crate» находясь внутри Виртуального Арсенала.<br/><br/> + + Открыв Арсенал, Вы увидите модифицированный интерфейс Арсенала JAS. С левой стороны отображаются категории предметов. Красные категории указывают на категории, внутри которых еще нет предметов.<br/><br/> + + Число между скобками перед каждым элементом - это фактическое количество предметов в Арсенале.<br/> + То же самое касается патронов (их количество показывается в штуках), гранат, других боеприпасов и предметов инвентря, которые отображаются в правом окне.<br/><br/> + + В отличие от предыдущих версий Antistasi, сейчас отсутствует возможность разблокировать предмет (иметь его в неограниченном количестве). Все количество оружия, боеприпасов, предметов инвентаря строго ограничено тем, сколько Вы фактически захватили и привезли в Штаб.<br/><br/> + + Доступ к Арсеналу с места водителя транспортного средства позволяет добавлять предметы в автомобиль.<br/><br/> + + В Арсенале пользовательские кнопки внизу:<br/> + - Default gear: добавляет вещи, которые Вам всегда понадобятся в соответствии с классом.<br/><br/> + + - To Crate: перемещает все предметы из Ящика Арсенала в виртуальный Арсенал JAS.<br/><br/> + + ИИ Снаряжение (WiP): ИИ может пользоваться снаряжением, доступным в Арсенале, в зависимости от их класса. Это не уменьшит количество единиц предметов. + + + El sistema de invetario en Antistasi es único: Cargar una sesión anterior vaciará todos los inventarios de los vehículos. Sólo el contenido del Arsenal Virtual y el invetario de la Caja de Arsenal se guardan. <br/><br/> + + Puedes usarlos de la siguiente manera:<br/> + - Invetario de la Caja de Arsenal = almacena temporalmente objetos. El equipo transferido con la función ‘Descargar Contenido Vehículo al Arsenal’ acaba aquí. <br/> + - Arsenal Virtual = Almacena el equipo principal. Mueve los objetos de la Caja del Arsenal al propio Arsenal presionando ‘A la Caja’ en el entorno del Arsenal Virtual.<br/><br/> + + Al abrir el Arsenal, veras la interfaz modificada del Arsenal por JAS. En el lado izquierdo se visualizan los objetos por categorías. Las categorías marcadas en rojo significan que no hay ningún objeto equipado de ese tipo.<br/><br/> + + El número entre parentesis delante de cada objeto, es la cantidad disponible en el Arsenal de dicho objeto.<br/> + Lo mismo ocurre con la munición (que se cuentan por separado en número de proyectiles), grenadas y otros consumibles, mostrados en el lado derecho.<br/><br/> + + A diferencia de las versiones anteriores de Antistasi, no hay manera de desbloquear un elemento de forma permanente y en cantidades ilimitadas. Todo está limitado a lo que en encuentres y lleves al HQ.<br/><br/> + + Acceder al Arsenal desde el asiento del conductor de un vehículo permite cargar objetos al invetario del vehículo.<br/><br/> + + Los botones personalizados en la parte inferior son:<br/> + - Equipo por Defecto: agrega cosas que siempre necesitarás según los mods instalados.<br/><br/> + + - A la Caja: Mueve todos los objetos de la Caja del Arsenal al invetario de JAS.<br/><br/> + + Equipo IA: La IA reclutada usará el equipamiento por encima del límite del Arsenal dependiendo de su clase. Esto no reducirá la cantidad real de elementos almacenados. La ropa dependerá del nivel del Ejército FIA. + + + + Town allegiance + Уровень поддержки населения + Lealtad de las Ciudades + + + + The civilian population on the island has to be convinced that your cause is the right one. This is the goal of Antistasi. As you build up support in a town, the enemy tries to do the same.<br/><br/> + + Each town has a number of inhabitants, that can either support you, the enemy or be neutral.<br/> + You can check the current Town Support value on the Map at HQ, and when in a town, it is displayed in the bottom right corner.<br/><br/> + + Increase Town Support by killing enemy soldiers, bringing supplies, by leaflet drops, capturing the nearby power plant or establishing a propaganda station. <br/> + A successful mission nets the favor of a relative number of people which means not every mission gains the same % amount across different towns.<br/> + Town Support will drop if civilians get killed, the enemy bring supplies or if the town is without electricity.<br/><br/> + + Towns will only be powered if they support the faction which controls the nearby power plant.<br/> + If the town supports the rebels, the enemy will cut their power and you will lose Town Support over time, same goes for towns that support the enemy and power plants you control.<br/>.<br/> + + Towns supporting the enemy will have enemy patrols around, and towns supporting your faction will have a small friendly patrol around. + + + Гражданское население острова должно быть убеждено в том, что Ваше дело правое. Это цель Antistasi. Когда Вы начинаете поддерживать город, враг пытается сделать то же самое.<br/><br/> + + В каждом городе есть множество жителей, которые могут поддерживать Вас, поддерживать врага или быть нейтральными.<br/> + Вы можете проверить текущее значение поддержки города на Карте в Штабе, или когда находитесь в городе - в правом нижнем углу экрана.<br/><br/> + + Увеличивайте поддержку города, уничтожая вражеских солдат, доставляя предметы снабжения, разбрасывая листовки, захватывая близлежащую электростанцию или устанавливая точку пропаганды. <br/> + Успех миссий увеличивает поддержку населения, но каждая миссия по-разному влияет на поддержку в разных городах.<br/> + Поддержка гражданских будет уменьшаться в случае гибели по Вашей вине гражданских лиц, если враг успешно осуществит миссию поддержки города или если в городе нет электричества.<br/><br/> + + Город будет хорошо себя чувствовать только в том случае, если он поддерживает фракцию, которая контролирует ближайшую электростанцию.<br/> + Если город поддерживает повстанцев, противник теряет поддержку населения, но Вы можете потерять поддержку города со временем, если враг начнет контролировать ближайшую к городу электростанцию.<br/>.<br/> + + В городах, поддерживающих врага, будут встречаться вражеские патрули, а в городах, поддерживающих партизан, будут время от времени курсировать Ваши патрули. + + + La población civil en la isla debe estar convencida de que tu causa es la correcta. Esa es la meta de Antistasi. A medida que subes el apoyo en una ciudad, el enemigo tratará de hacer lo mismo.<br/><br/> + + Cada ciudad tiene un número de habitantes que pueden apoyarte a ti, al enemigo o ser neutrales.<br/> + Puede verificar el valor actual de Apoyo en una ciudad en el Mapa del HQ o cuando estás en una ciudad, se muestra en la esquina inferior derecha.<br/><br/> + + Aumenta el apoyo de la ciudad matando a los soldados enemigos, llevando suministros, mediante la entrega de panfletos, capturando la planta de energía cercana o estableciendo una estación de propaganda.<br/> + Una misión completada con éxito obtiene el favor de un número relativo de personas, lo que significa que no todas las misiones obtienen la misma cantidad % en diferentes ciudades.<br/> + El apoyo del pueblo disminuirá si se mata a civiles, si el enemigo trae suministros o si la ciudad no tiene electricidad.<br/><br/> + + Las ciudades solo recibirán energía si apoyan a la facción que controla la planta de energía cercana.<br/> + Si la ciudad apoya a los rebeldes, el enemigo cortará el suministro y perderás el apoyo de la ciudad con el tiempo, lo mismo ocurre con las ciudades que apoyan al enemigo si las centrales eléctricas las controlas tu.<br/>.<br/> + + Las ciudades que apoyan al enemigo tendrán patrullas enemigas a su alrededor, y las ciudades que te apoyan tendrán una pequeña patrulla aliada en la zona. + + + + Holding territories + Удержание территории + Mantener territorios + + + + Everytime you conquest or kill some special targets, enemy will dispatch a QRF from the available base or airport, the first step to secure an area is to wait and defend it from that first attack.<br/> + Overtime, enemies will check the garrison amount and can decide to send a patrol to take it back in case it’s abbandoned.<br/> + ack or simply send a patrol to take it back in case it’s abandoned.<br/> + That said, you need HR to garrison the position and increase the ArmyXPLevel to make your garrison good enough to resist an Attack which is a mission where massive amount of forces are sent to recapture an objective. Note that NATO is very handy in this case.<br/> + The Commander can set up a roadblock from the Y menu. Roadblocks are very effective in taking out one or two enemy vehicles thanks to their AT capabilities and .50 cal machine guns.<br/><br/> + + + Каждый раз, когда Вы захватываете или уничтожаете цели (базы/ОП/авиабазы), враг отправляет ОБР (отряд быстрого реагирования) из ближайшей базы или авиабазы. Чтобы защитить зону, нужно приготовиться и отразить эту первую атаку. <br/> + Враг будет проверять укомплектованность своих гарнизонов и может решить отправить патруль, чтобы отбить захваченный Вами объект.<br/> + Атакуйте сами или отправьте отряды, чтобы вернуть потерянный объект.<br/> + Именно поэтому Вам нужны очки HR - они дают возможность комплектовать бойцами гарнизоны, увеличивать уровень навыка войск (Army XP), повышать боеспособность гарнизонов, чтобы они могли противостоять атакам серьезных сил врага. Также для этого можно пользоваться поддержкой союзников.<br/> + Командир может развернуть БП (Блокпост) из меню «Y». Блокпосты очень эффективны для того, чтобы остановить/уничтожить одно-два вражеских транспортных средства, так как бойцы на блокпосту вооружены противотанковым (ПТ) оружием и крупнокалиберными пулемётами на автомобилях.<br/><br/> + + + Cada vez que conquistes o mates algunos objetivos especiales, el enemigo enviará una fuerza de acción rápida desde la base o el aeropuerto disponible, el primer paso para asegurar un área es esperar y defender ese primer ataque.<br/> + Más adelante, el enemigo comprobará la cantidad de guarnición y puede decidir enviar una patrulla para retormar el territorio en caso de que esté abandonado.<br/> + Dicho esto, necesitas HR para guarnecer la posición e incrementar el nivel XP del Ejército para hacer que tu guarnición sea lo suficientemente buena como para resistir un ataque, que es una misión donde se envía una cantidad masiva de fuerzas para recuperar un objetivo. Tenga en cuenta que la OTAN es muy útil en este caso.<br/> + El Comandante puede desplegar un control con el menú Y. Los controles de carretera son muy efectivos para eliminar uno o dos vehículos enemigos gracias a sus capacidades AT y ametralladoras del calibre .50.<br/><br/> + + + + Missions + Миссии + Misiones + + + + Missions can be requested at Petros, as side missions at the Corrupted Politician/Officer, or they can appear spontaneously. <br/> + Most of them are scheduled by time and can be can tracked by checking the tasks on your map. There might be many active missions at same time; it’s your choice which one you want to complete.<br/><br/> + + There are around 18 missions in Antistasi, but some missions might not be available in your HQ area (4 km radius), depending on surrounding towns, cities and base types.<br/><br/> + + The missions will vary in difficulty depending on nearby enemy positions (roadblocks, mortar positions and AA hilltops), the gear you equip, the manpower you bring and the amount of time you spend.<br/> + All these factors should be considered when choosing one mission over the other, and completion times can differ greatly depending on planning.<br/><br/> + + Ignoring missions is also a valid option, though ignoring missions may have repercussions, such as:<br/> + Kill the Traitor: lose a percentage of money and HR and attacks on your territories will be more frequent. <br/> + Supply Convoy: towns that are successfully supplied by the enemy convoy will gain support in their favor.<br/><br/> + + Petros gives you 1 mission per type with a cooldown of 30 minutes real time, so skipping time won’t let you have another mission faster. On the other hand, mission time is based on in-game time, so if you skip time when missions are active, they will be considered failed.<br/><br/> + + Note that requesting Propaganda on a town which has less than 12% FIA support will spawn a Leaflett Drop mission instead. The real propaganda spawns a custom propaganda truck. + + + Миссии могут быть запрошены у Петроса, как дополнительные миссии «Коррумпированный политик/Офицер», или они могут появляться спонтанно. <br/> + Большинство из них имеют ограничения по времени, это можно проверить, посмотрев в задачи на карте. Одновременно может быть активно несколько миссий, Вам решать какие выполнять, а какие игнорировать.<br/><br/> + + В Игре около 18 миссий, но некоторые миссии могут быть недоступны в радиусе расположения Вашего Штаба (4 км), зависит от окружающих городов, деревень и баз разных типов.<br/><br/> + + Миссии различаются по сложности в зависимости от ближайших позиций противника (блокпосты, опорные пункты, минометные позиции и системы ПВО на высотах), снаряжения, которое у Вас есть, ресурсов живой силы и времени, которое Вы потратите на их выполнение.<br/> + Все эти факторы следует учитывать при выборе одной миссии, а время выполнения может сильно различаться в зависимости от вариантов планирования.<br/><br/> + + Вы можете игнорировать миссии, но игнорирование следующих миссий будет иметь последствия:<br/> + Убейте предателя: Вы потеряете определенный процент денег и очков HR, а атаки на Ваши территории могут стать более частыми. <br/> + Конвои поставки: города, которые успешно снабжены конвоем противника, увеличат поддержку населения в пользу противника.<br/><br/> + + Петрос дает Вам 1 миссию определенного типа, с интервалом 30 минут реального времени, поэтому пропустить время (отдых у костра в Штабе) не поможет Вам быстрее выполнить еще одну миссию. С другой стороны, время миссии основано на внутриигровом времени, поэтому, если Вы пропустите время, когда миссии активны, они будут считаться проваленными.<br/><br/> + + Обратите внимание, что запрос миссии «Установка точки пропаганды» в городе, который имеет поддержку FIA менее чем 12%, создаёт миссию «Разброс листовок». При начале миссии «Установка точки пропаганды» возле Штаба появится специальный грузовик. + + + Las misiones se le solicitan a Petros, así cómo misiones secundarias cómo el Político/Oficial corrupto, o pueden aparecer espontáneamente. <br/> + La mayoría de ellas están programadas por tiempo y se pueden comprobar al revisar las tareas en su mapa. Puede haber muchas misiones activas al mismo tiempo; tu eliges cuál quieres completar.<br/><br/> + + Hay alrededor de 18 misiones en Antistasi, pero es posible que algunas misiones no aparezcan en el área del HQ (4 km de radio), dependerá de los pueblos, ciudades y tipos de bases de los alrededores.<br/><br/> + + Las misiones variarán en dificultad dependiendo de las posiciones enemigas cercanas (controles, posiciones de mortero y cimas AA), el equipo que lleves, los efectivos que te acompañen y la cantidad de tiempo que pasas.<br/> + Todos estos factores deben ser considerados al elegir una misión u otra, y los tiempos de finalización pueden cambiar dependiendo de la planificación.<br/><br/> + + Ignorar misiones también es una opción válida, aunque ignorar las misiones puede tener repercusiones, como por ejemplo:<br/> + Matar al Traidor: perderá un porcentaje de dinero y recursos humanos y los ataques a sus territorios serán más frecuentes. <br/> + Convoy de Suministros: las ciudades que sean abastecidas con éxito por el convoy enemigo obtendrán apoyo a su favor.<br/><br/> + + Petros te da 1 misión de cada tipo con un tiempo de reutilización de 30 minutos en tiempo real, por lo que saltarte el tiempo no te permitirá tener otra misión más rápido. Por otro lado, el tiempo de la misión se basa en el tiempo en el juego, por lo que si omites el tiempo cuando las misiones están activas, se considerarán fallidas.<br/><br/> + + Ten en cuenta que solicitar Propaganda en una ciudad que tiene menos del 12% de apoyo al FIA generará una misión de Entrega de Panfletos. La verdadera Propaganda genera un camión de propaganda con una estación. + + + + Antistasi features + Функции Antistasi + Características Antistasi + + + Class System + Система классов + Sistema de Clases + + + + Most of the playable classes have special abilities, and/or weapon proficiencies.<br/> + A class which doesn’t have a proficiency for a specific type can still use the weapon but with handling difficulties, everyone can use AT weapons without any malus.<br/> + Class affects: <br/> + - Officer: sneaky steps and harder to be spotted, less carrying capacity<br/> + - Teamleader: standard<br/> + - Soldier: sneaky steps, less carrying capacity.<br/> + - Medic: can use medikit, can give blood (ACE basic), can use Surgical Kit (ACE advanced)<br/> + - Engineer: can use toolkit, with ACE can repair (everyone can change wheels if they have a toolkit)<br/> + - Autorifleman: loud steps, more carrying capacity, has proficiency for machineguns<br/> + - Marksman: harder to be spotted, less carrying capacity, has proficiency for sniper rifles<br/> + - Ammobearer: loud steps, more easily spotted, way more carrying capacity<br/> + - AT rifleman: more easily spotted, more carry capacity.<br/><br/> + + Choosing your class is important just as balancing the roles among your group is.<br/><br/> + + In Singleplayer you can interact with the Arsenal Crate and Change Role anytime you want. Note that it won’t Persistent Save, so upon restart you will have to Change Role again.<br/><br/> + + In Multiplayer you select your class upon login and you can change it by logging out and in again. + + + Большинство игровых классов обладают особыми способностями и/или навыками оружия.<br/> + Игровой класс, который не обладает навыками владения определенным видом оружия, может использовать его, но с трудностями (увеличенная отдача). Каждый может использовать противотанковое (ПТ) оружие без автонаведения.<br/> + Особенности классов: <br/> + - Офицер: тише шаги, более заметен, меньше снаряжения может нести. <br/> + - Лидер группы: стандартно.<br/> + - Солдат: тише шаги, меньше снаряжения может нести.<br/> + - Медик: может использовать аптечку, может переливать кровь (ACE базовый), может использовать хирургический комплект (ACE продвинутый).<br/> + - Инженер: может использовать набор инструментов, с ACE модом может ремонтировать технику (каждый может менять колеса, если есть набор инструментов).<br/> + - Пулеметчик: громче шаги, больше снаряжения может нести, обладает навыками владения пулеметами.<br/> + - Снайпер: меньше заметен, меньше снаряжения может нести, обладает навыками владения снайперскими винтовками.<br/> + - Подносчик боеприпасов: громче шаги, более заметен, больше снаряжения может нести. <br/> + - Гранатометчик: более заметен, больше снаряжения может нести. <br/><br/> + + Выбор Вами класса (специализации) важен так же, как и баланс ролей в Вашей группе. <br/><br/> + + В одиночном режиме можно взаимодействовать с Ящиком Арсенала и изменять класс (специализацию) в любое время. Обратите внимание, что это не будет сохранено в прогрессе, поэтому при перезагрузке нужно снова изменить роль. <br/><br/> + + В мультиплеере Вы выбираете свой класс при входе в систему, и можно изменить его, выйдя из системы и снова зайдя. + + + La mayoría de las clases jugables tienen habilidades especiales y/o pericia en armas.<br/> + Una clase que no tiene competencia para un tipo específico de arma puede usarla, pero con dificultades de manejo, todos pueden usar armas AT sin ninguna penalización.<br/> + Clases disponibles: <br/> + - Oficial: silenciosos y más difíciles de detectar, menos capacidad de carga.<br/> + - Líder de Equipo: Estandar.<br/> + - Soldados: silenciosos, menos capacidad de carga.<br/> + - Médico: pueden usar botiquín, pueden hacer transfusiones de sangre (ACE básico), pueden usar el Kit Quirúrgico (ACE avanzado)<br/> + - Ingeniero: pueden usar Herramientas, con ACE pueden reparar (todo el mundo puede cambiar ruedas si tiene herramientas)<br/> + - Fusilero Automático: ruidosos, mayor capacidad de carga, tienen pericia con ametralladoras.<br/> + - Tirador: difíciles de detectar, poca capacidad de carga, tienen pericia con los rifles de francotirador.<br/> + - Amunicionador: ruidosos, fáciles de detectar, muchísima capacidad de carga.<br/> + - Soldado AT: muy fáciles de detectar, mayor capacidad de carga.<br/><br/> + + Elegir clase es importante así como equilibrar los roles dentro de tu grupo.<br/><br/> + + En un jugador, puedes interactuar con la caja del Arsenal y Cambiar de Clase cuando quieras. Tenga en cuenta que no se guardará de una sesión a otra, por lo que al reiniciar deberás volver a cambiarla.<br/><br/> + + En multijugador eliges la clase al iniciar sesión y puedes cambiarla cerrando sesión y abriendola de nuevo. + + + + AI Management / Enhancements + Контроль ИИ + Administrar IA / Mejoras + + + + Commander and server members can recruit AI at the Flag or add garrison to conquered objectives. Those guys starts with civilian clothes and their weapons correspond to a random choice between their class weapons present into the Arsenal, at this modding stage they don’t substract the weapon from it nor they require a threshold amount like it was with original Arsenal system. <br/><br/> + + However, in the current version they don’t subtract the weapon from the Arsenal nor do they require a threshold amount to unlock them (Antistasi 1.7.5 and before). <br/><br/> + + Advancing Army XP level is the way to make them better both in fighting skill and clothing choices.<br/><br/> + + Commanding AI is Vanilla feature, check on BIS wiki to learn more about it. Hold fire, form line or file and regroup are very important expecially when driving in undercover truck with AI riding as passengers, if not told to hold fire they might blow up your sneaky actions.<br/><br/> + + Without a radio equipped you can’t control them if you go 500m away, in that case, they disappear temporanely from the bottom bar and start moving towards your position. <br/><br/> + + The Y menu give options to tell selected friendly AI to:<br/><br/> + + - Auto Heal: set this for each recruited AI to let them heal teammates and themselves automatically. <br/><br/> + + - Auto Ream: send AI to scavenge ammo and weapons from enemy bodies or resupply at crates according to their class.<br/><br/> + + - Remote control: if not undercover and no enemies nearby, lets you control the AI to fix some pathfinding issues or simply manage their inventory. You will lose control after 60 seconds or if the AI takes damage. You can access the arsenal and equip them how you wish to.<br/><br/> + + - Add Garrison: the AI will be assigned to the garrison, they walk to the place and become part of the garrison.<br/><br/> + + - Dismiss: send the unit back to HQ. Upon arrival their cost in money and HR is refunded. + + + Командир и члены сервера могут набирать отряд у Флага или комплектовать гарнизон на завоеванных объектах. Вначале они будут одеты в гражданскую одежду, оружие выдается случайным образом из оружия, соответствующего их классу, которое имеется в наличии в Арсенале. <br/><br/> + + В текущей версии количество оружия в Арсенале не требуют порогового значения для разблокировки (Antistasi 1.7.5 и ранее). <br/><br/> + + С повышением уровня навыка войск (Army XP) повышается боеспособность Ваших отрядов, экипировка отрядов становится более профессиональной (бронежилеты, каски, форма)<br/><br/> + + Управление ИИ осуществляется стандартными командами Arma3, проверьте wiki BIS, чтобы узнать больше об управлении отрядами. Вовремя приказать подавлять врага огнем, формировать линию или колонну, перегруппироваться - очень важно. Особенно когда Вы едете в грузовике в гражданском статусе с ИИ, который едет как пассажир - если вовремя не запретить им открывать огонь, то они могут раскрыть Вас. <br/><br/> + + Без радиостанции Вы не сможете контролировать ИИ. Если Вы отдалитесь от них более чем на 500 метров, то потеряете контроль (иконки исчезнут из нижней панели, ИИ будет двигаться в Вашем направлении). <br/><br/> + + Меню «Y» позволяет выбрать опции для выбранного дружественного ИИ: <br/><br/> + + - Автолечение: устанавливается для каждого ИИ, чтобы они могли лечить товарищей по команде и себя автоматически. <br/><br/> + + - Автоперевооружение: дает команду ИИ обыскать находящихся поблизости убитых врагов или ящики, на предмет более лучшего оружия и боеприпасов, пополнить боезапас и перевооружиться в соответствии с их классом.<br/><br/> + + - Временное управление ИИ: если Вы не в гражданском статусе, и поблизости нет врагов, Вы можете управлять ИИ, чтобы исправить сложные ситуации (например когда ИИ не может найти дорогу и др.) или управлять их инвентарем. Вы потеряете контроль через 60 секунд или при ранении/гибели ИИ. Управляя ИИ, Вы можете получить доступ к Арсеналу и экипировать их, как Вы хотите. <br/><br/> + + - Распустить: отправить бойцов по домам. При этом возвращается их стоимость в деньгах и очки HR. + + + El Comandante y los miembros del servidor pueden reclutar IA en la Bandera o añadir guarniciones a los objetivos conquistados. Estos comienzan con ropa civil y sus armas corresponden a una elección aleatoria entre las armas de su clase presentes en el Arsenal, en esta versión ya no extraen el arma de él ni necesitan una cantidad tope como con el sistema original de Arsenal.<br/><br/> + + Sin embargo, en la versión actual no restan el arma del Arsenal ni requieren una cantidad para desbloquearlas (Antistasi 1.7.5 y anteriores).<br/><br/> + + Avanzar el nivel de XP del Ejército es la forma de mejorarlos tanto en las habilidades de combate como en las ropas que lleven.<br/><br/> + + Comandar a la IA se hace como en la versión estandar del juego, revisa la wiki de BIS para aprender mar sobre ello. Alto el fuego, formar una línea o fila y reagrupar son muy importantes, especialmente cuando conduces un camión de incógnito con la IA como pasajera, si no les ordenas alto el fuego pueden cargarse tus acciones de sigilo.<br/><br/> + + Sin una radio equipada, no podrás controlarlos si están a más de 500m, en ese caso, desaparecen temporalmente de la barra inferior y comenzarán a moverse hacia tu posición.<br/><br/> + + El menú Y da opciones sobre la IA aliada seleccionada:<br/><br/> + + - Autocurar: actívalo para que la IA ​​reclutada pueda curar a sus compañeros de equipo y a sí mismos automáticamente.<br/><br/> + + - AutoRearmar: envía a la IA a recoger munición y armas para su clase de los cadáveres del enemigo o de las cajas de suministros.<br/><br/> + + - Control Remoto: si no estás de incógnito y no hay enemigos cerca, permite controlar una IA para solucionar problemas con el entorno o simplemente administrar su inventario. Perderás el control pasados 60 segundos o si la IA recibe daño. Puedes acceder al Arsenal y equiparlo como desees.<br/><br/> + + - Despedir: envía a la IA de vuelta al HQ. Cuando llegue, su inversión en dinero y HR serán reeembolsados. + + + + Army Xp and Level + Навык войск (Army Xp) + XP del Ejército y Nivel + + + + Army Experience affects the skill of FIA recruited troops, reinforcements and garrisons. Gain Experience by fighting, completing missions and capturing objectives.<br/><br/> + + Army Level:<br/> + 0) XP cap at 4, Recruits wear civilian clothing, Garage slots = 10 FIA and 3 Personal, can store basic vehicles and MRAPs only, HR cap at 50, Camps 2, normal Roadblocks 2, normal Watchposts 2.<br/><br/> + + 1) XP cap at 8, 25% Recruits wear guerrilla uniforms, Garage slots = 15 FIA and 5 Personal, can store APC, HR cap at 75, Camps 3, normal Roadblocks 4 , normal Watchposts 3, one-off NATO boost +10.<br/><br/> + + 2) XP cap at 12, 50% Recruits wear guerrilla uniforms, Garage slots = 20 FIA and 10 Personal, can store also Helicopters, HR cap at 100, Camps 4, enhanced Roadblocks 6 , enhanced Watchposts 4, one-off NATO boost +20<br/><br/> + + 3) XP cap at 20h for both FIA and personal, all vehicles can be stored, HR cap at 150, Camps 5, enhanced Roadblocks 10, enhanced Watchposts 6, one-off NATO boost +30. + + + Уровень навыка войск влияет на боеспособность бойцов FIA в отрядах и гарнизонах. Увеличивайте навык сражаясь, выполняя миссии и захватывая объекты.<br/><br/> + + Значение уровня навыка войск:<br/> + 0) до 4 - новобранцы носят гражданскую одежду, места в гараже = 10 FIA и 3 персональных, можно хранить только базовые транспортные средства и MRAP, максимум HR=50, количество бойцов: лагерь=2, обычные БП=2, обычные НП=2.<br/><br/> + + 1) до 8 - 25% новобранцев носят форму повстанцев, места в гараже = 15 FIA и 5 персональных, можно хранить бронетранспортер, максимум HR=75, количество бойцов: лагерь=3, обычные БП=4, обычные НП=3, единоразовая поддержка НАТО +10.<br/><br/> + + 2) до 12 - 50% новобранцев носят форму повстанцев, места в гараже = 20 FIA и 10 персональных, можно хранить +вертолеты, максимум HR=100, количество бойцов: лагерь=4, улучшенные БП=6, улучшенные НП=4, единоразовая поддержка НАТО + 20<br/><br/> + + 3) до 20 - все транспортные средства могут быть сохранены, максимум HR=150, количество бойцов: лагерь=5, улучшенные БП=10, улучшенные НП=6, единоразовая поддержка НАТО +30. + + + La Experiencia del Ejército afecta a las habilidades de las tropas reclutadas del FIA, refuerzos y guarniciones. Gana Experiencia luchando, completando misiones y capturando objetivos.<br/><br/> + + Nivel del Ejército:<br/> + 0) XP tope en 4, los reclutados llevan ropa civil, Huecos del Garaje = 10 FIA y 3 Personal, sólo puede almacenar vehículos básicos y MRAPs, tope de HR en 50, 2 Campamentos, 2 controles de carretera normales, 2 puestos de observación normales.<br/><br/> + + 1) XP tope en 8, el 25% de los reclutados visten uniforme de la guerrilla, Huecos del Garaje = 15 FIA y 5 Personal, puede almacenar APCs, tope de HR en 75, 3 Campamentos, 4 controles de carretera normales, 3 puestos de observación normales, aumento único de +10 en apoyo OTAN.<br/><br/> + + 2) XP tope en 12, el 50% de los reclutados visten uniforme de la guerrilla, Huecos del Garaje = 20 FIA y 10 Personal, puede almacenar algunos Helicópteros, tope de HR en 100, 4 Campamentos, 6 controles de carretera mejorados, 4 puestos de observación mejorados, aumento único de +20 en apoyo OTAN.<br/><br/> + + 3) XP tope 20 para FIA y personal, todos los vehículos pueden ser guardados, tope de HR en 150, 5 Campamentos, 10 controles de carretera mejorados, 6 puestos de observación mejorados, aumento único de +30 en apoyo OTAN. + + + + Jeroen Arsenal Garage + Гараж JAG + Jeroen Arsenal Garage + + + + Accessing the Garage opens a custom interface which lets you select the vehicle on the left side, and interact with the vehicle on the right.<br/><br/> + + The camera can be tricky, so place the box in open field without obstacles around, the vehicle preview will spawn opposite your position at same distance you are from the crate. Keep some distance from the box to spawn the vehicle a little further. <br/><br/> + + Vehicles can be repaired piece by piece, glass included, through JAG and also reskinned.<br/><br/> + + Stored vehicles are visible for everyone in the Garage. Green vehicles are yours, white ones are retrievable by everyone and red vehicles are locked. Only the owner of a vehicle can unlock a vehicle.<br/><br/> + + Note: Static Weapons can be garaged like other vehicles and, found under their respective tab, can be attached to off-roads, trucks or other vehicles with a weapon hardpoint. + + + Доступ к гаражу открывает пользовательский интерфейс, который позволяет выбрать автомобиль (с левой стороны) и взаимодействовать с автомобилем (справа).<br/><br/> + + Старайтесь размещать Ящик лечения и восстановления техники в открытом поле без препятствий вокруг, предварительный просмотр автомобиля будет появляться напротив Вашей позиции на том же расстоянии, что и Вы от Ящика. Держитесь на некотором расстоянии от него. <br/><br/> + + Транспортные средства могут быть отремонтированы по частям, включая стекла, через JAG, также можно поменять внешний вид транспорта.<br/><br/> + + Сохраненные автомобили видны для всех в Гараже. Зеленые транспортные средства - Ваши, белые - общие, красные транспортные средства заблокированы. Только владелец транспортного средства может разблокировать его.<br/><br/> + + Примечание. Станковое оружие можно сохранять, как и другой транспорт, и, находясь на соответствующей вкладке, его можно прикрепить к внедорожникам, грузовикам или другому транспорту, которое имеет возможность такого крепления. + + + Al acceder al Garaje se abre una interfaz personalizada que le permite seleccionar el vehículo en el lado izquierdo e interactuar con él en el lado derecho.<br/><br/> + + La cámara puede ser complicada, por lo tanto, coloque la caja en campo abierto sin obstáculos cerca, la vista previa del vehículo aparecerá frente a su posición a la misma distancia de la caja. Manten un poco de distancia con la caja para generar el vehículo de forma segura.<br/><br/> + + Los vehículos pueden repararse pieza a pieza, cristales incluidoa, a través de JAG también puedes cambiarle la apariencia.<br/><br/> + + Los vehículos almacenados en el Garaje serán visibles para todo el mundo. Los vehículos en verde son los tuyos, los blancos pueden ser usados por cualquiera y los rojos están bloqueados. Sólo el dueño de un vehículo puede desbloquearlo.<br/><br/> + + Nota: Las armás estáticas pueden ser almacenadas como otro vehículo y, bajo su respectiva pestaña, pueden ser acoplados a offroads, camiones o vehículos que disponga de un puesto para montar un arma. + + + + Jeroen and Sparker Logistic + Jeroen и Sparker Логистика + Logística de Jeroen y Sparker + + + + Crates, ammoboxes and several others can be interacted and Load to vehicle, an animation will move the object into the vehicle locking up some seats if necessary.<br/><br/> + + Bring supplies, steal enemy ammobox, move Arsenal and Garage when relocating HQ thanks to this function without using any additional mod.<br/><br/> + + Note that supplies have to be unloaded to properly start the delivery, boats can be loaded too. + + + Ящики, боеприпасы и некоторые другие объекты, которые можно загружать в автомобиль могут блокировать посадочные места в транспорте - ящик с боеприпасами в грузовике заблокирует посадочные места в кузове.<br/><br/> + + Теперь возможен перенос припасов, кража вражеских боеприпасов, перемещение Арсенала и Гаража при перемещении Штаба благодаря этой функции без использования какого-либо дополнительного мода.<br/><br/> + + Работа в процессе + + + Cajones, cajas de munición y algunas objetos más pueden cargarse en los vehículos, una animación moverá el objeto dentro del vehículo ocupando algunos asientos si es necesario.<br/><br/> + + Gracias a esta función, podrás traer suministros, robar cajas de munición enemigas, mover el Arsenal y Garaje cuando reposicionemos el HQ sin necesidad de instalar ningún mod.<br/><br/> + + Ten en cuenta que los suministros deben descargarse para comenzar correctamente la entrega, también se pueden cargar los botes. + + + + Fast Travel + Быстрое перемещение + Viaje Rápido + + + + Fast Travel lets you skip journeys which might be considered a waste of time, it is a teleport with variable travel time (black screen) scaled to destination distance. <br/> + On foot, you are teleported directly to the map marker location, along with any AI in your group.<br/> + If you are the driver of a vehicle, the whole crew will travel with you. Vehicles will end up on the road closest to the map marker location. <br/><br/> + + Conditions:<br/> + - Allowed destinations are the HQ or Camps.<br/> + - No enemies must be present within 350m around both the place of departure and destination.<br/><br/> + + Warning:<br/> + - Each Fast Travel to a Camp has a chance of being intercepted; enemies will send a helicopter and an infantry squad will fast-rope down and attack the Camp. Travel to HQ is always safe.<br/> + - Avoid Fast Travelling vehicles while towing other vehicles, the latter have a high chance of exploding, or disappearing.<br/> + - Avoid Fast Travelling with air vehicles or boats, again, a high chance of exploding.<br/> + - In multiplayer you won’t notice other players are Fast Travelling (if you’re all in a car, only the driver will have the black Fast Travelling screen).<br/> + - Be sure you’re not doing it at same time AND to the same location when driving vehicles, as they -you guessed it- might explode. + + + Быстрое перемещение (телепорт) позволяет не тратить время на поездки, которые могут быть достаточно длительными. <br/> + Если Вы пешком, то Вы телепортируетесь непосредственно в место указанное на карте вместе с ИИ в своей группе.<br/> + Если Вы водитель транспортного средства, весь экипаж переместится с Вами. Транспортные средства окажутся на дороге, ближайшей к месту, указанному на карте. <br/><br/> + + Условия:<br/> + - Разрешенные пункты назначения - Штаб или лагеря. <br/> + - Враги не должны находиться в пределах 350м вокруг места отправления и назначения.<br/><br/> + + Предупреждение: <br/> + - Каждое быстрое перемещение в лагерь могут засечь; враги отправят вертолет, отряды пехоты, которые будут быстро прибывать и атаковать лагерь. Перемещение в Штаб всегда безопасно.<br/> + - Избегайте быстрого перемещения транспортных средств при буксировке других транспортных средств, последние имеют высокую вероятность взрыва или исчезновения.<br/> + - Избегайте быстрого перемещения на воздушных судах или лодках, опять же, из-за большой вероятности их взрыва в точке прибытия.<br/> + - В мультиплеере Вы не заметите, что другие игроки телепортируются (если Вы все в машине, только у водителя будет черный экран быстрого перемещения).<br/> + - Убедитесь, что Вы не делаете это в одно и то же время и в то же самое место, когда ведете транспортные средства, поскольку они, как Вы догадались, могут взорваться. + + + Con el Viaje Rápido puedes saltarte las rutas que te parezcan una perdida de tiempo, es un teletransporte con tiempo variable en relación a la distancia de destino (pantalla en negro). <br/> + A pie, serás transportado directamente a la marca de localización del mapa, junto a la IA que esté en tu grupo.<br/> + Si eres el conductor de un vehículo, el resto de la tripulación viajará contigo. Los vehículos aparecerán en la carretera más cercana a la ubicación del marcador del mapa.<br/><br/> + + Condiciones:<br/> + - Los destinos permitidos son el HQ o Campamentos.<br/> + - No debe haber presencia enemiga a menos de un radio de 350m ni en la posición de salida ni en la de destino.<br/><br/> + + Cuidado:<br/> + - Cada Viaje Rápido a un Campamento tiene posibilidad de ser interceptado; el enemigo enviará un helicóptero y un escuadrón de infantería desplegará en rappel para atacar el Campamento. Viajar al HQ es siempre seguro.<br/> + - Evita hacer Viaje Rápido con un vehículo mientras remolcas a otro, estos tienen una alta probabilidad de volar por los aires o desaparecer.<br/> + - Evita el Viaje Rápido con vehículos aéreos o botes, de nuevo, hay altas posibilidades de explosión.<br/> + - En multijugador no sabrás si otros jugadores hacen Viaje Rápido (si estáis todos en un coche, sólo el conductorpodrá solicitar el Viaje Rápido).<br/> + - Aseguraos de no hacer Viaje Rápido a la misma ubicación a la vez mientras llevéis más de un vehículo porque, ya lo habrás adivinado, podrían explotar. + + + + NATO and CSAT Support + Поддержка союзников и врага + Apoyo OTAN y CSAT + + + + Friendly Faction support is gained by helping civilians, capturing bases and eliminating enemy support units.<br/> + It is decreased when civilians are hurt (killed, or angry for loss of power) or prisoners are killed.<br/> + The Commander can use Friendly Faction support for support actions (check relative section).<br/><br/> + + Enemy support is accrued by conquering Bases, Airports and Hilltops.<br/> + It can be reduced by asking friendly support faction to raid their military emplacements away from Altis.<br/> + If Enemy support gets too high, the Enemy Faction starts bombarding towns. If they destroy 8 towns the campaign is lost. + + + Поддержка союзников растет при оказании помощи мирным жителям, захвате баз и уничтожении подразделений противника.<br/> + Она уменьшается, когда гражданские лица страдают (убиты или недовольны отсутствием электроэнергии), или при гибели заключенных.<br/> + Командующий может использовать очки поддержки союзников для вызова действий поддержки (см. соответствующий раздел).<br/><br/> + + Очки поддержки вражеской фракции растут когда Вы захватываете объекты врага (базы, авиабазы и др.).<br/> + Они снижаются когда Вы или союзники сдают (оставляют) объекты врагу. Также вражеская поддержка может быть ослаблена с помощью дипломатии.<br/> + Если поддержка врага становится слишком высокой, вражеская фракция может начать бомбить города. Если они уничтожат 8 городов, кампания будет провалена. + + + El apoyo de la facción aliada se gana ayudando a civiles, capturando bases y eliminando unidades de apoyo enemigas.<br/> + El apoyo disminuye cuando los civiles resultan heridos (muertos, o se enfadan por perder la electricidad) o si ejecutan prisoneros.<br/> + El Comandante puede usar el apoyo de la Facción Aliada de diversas formas (comprueba la sección correspondiente).<br/><br/> + + El apoyo enemigo se acumula cuando conquistas Bases, Aeropuertos o Cimas AA.<br/> + Se puede reducir pidiendo a la facción aliada que asalte los emplazamientos militares enemigos lejos de Altis.<br/> + Si el apoyo enemigo es muy alto, su Facción de apoyo empezará a bombardear ciudades. Si destruyen 8 ciudades habrás perdido la campaña. + + + + Frontline system + Система Передовой + Sistema de frente + + + + Depending on controlled objectives, towns excluded, the enemy will build roadblocks and reinforce more outposts.<br/> + WiP + + + Зависит от контролируемых объектов, за исключением городов - противник будет строить БП и разворачивать новые ОП (опорные пункты).<br/> + Работа в процессе + + + Dependiendo de los objetivos controlados, sin contar ciudades, el enemigo desplegará controles de carretera y reforzará más sus puestos avanzados.<br/> + En proceso. + + + + Server Membership + Членство на сервере + Membresía de Servidor + + + + In multiplayer, the Server Admin can give membership to players by using the Y menu and looking directly at the player.<br/><br/> + + Server membership is the best way to prevent random people from interfering with the Antistasi campaign in an open server, but lets people still enjoy Antistasi, with some options frozen;<br/><br/> + + if no members are online, the commander slot will be empty, so no economy per tick, no main enemy response and no random mission spawns.<br/><br/> + + Member privileges:<br/> + - Eligible to be Commander. <br/> + - Recruit AI.<br/> + + + В многопользовательском режиме Администратор сервера может давать членство (добавить в Список) игрокам с помощью меню «Y» когда смотрит на игрока.<br/><br/> + + Членство на сервере - лучший способ помешать случайным людям вмешиваться в кампанию Antistasi на открытом сервере, но позволяет людям по-прежнему наслаждаться Antistasi, заморозив некоторые опции;<br/><br/> + + Если ни один из Участников не находится в режиме онлайн, слот Командира будет пустым, регулярные начисления денег остановятся, враг не будет атаковать, случайные миссии не появятся.<br/><br/> + + Права Участников:<br/> + - Право быть Командиром. <br/> + - Набирать отряды ИИ.<br/> + + + En multijugador, el Administrador del Servidor puede darle el estatus de miembros a los jugadores usando el menú Y mientras mirá directamente al jugador.<br/><br/> + + La membresía del Servidor es la mejor manera de prevenir que cualquier usuario pueda interferir en la campaña de Antistasi en un servidor abierto, pero deja que la gente siga disfrutando de Antistasi, con algunas opciones desactivadas.;<br/><br/> + + Si no hay miembros online, el hueco de Comandante quedará vacío, no se actualizará la economía, no habrá respuestas principales del enemigo ni se generarán misiones aleatorias.<br/><br/> + + Privilegios de los Miembros:<br/> + - Ser Comandante electo.<br/> + - Reclutar IA.<br/> + + + + Undercover + Гражданский статус + Incógnito + + + + When Undercover is enabled you will see the word ‘Incognito’ in green on the Info Bar and enemies will ignore you.<br/><br/> + + Conditions to satisfy to become undercover:<br/> + - not being reported in the last 30 minutes. If reported, hitting the Heal, Repair and Rearm option at HQ will allow becoming undercover again immediately. Respawning also reenables it.<br/> + - no enemies present within a 350 m radius.<br/> + - wearing civilian clothes and no military gear equipped. A hint screen on the top right will list what items are preventing you from going undercover.<br/><br/> + + If you meet the above conditions you can get Undercover by:<br/> + - enabling Undercover from Y menu.<br/> + - getting into an unreported civilian vehicle. In this case, you can even have military gear equipped.<br/><br/> + + You will always lose undercover when you are:<br/> + - within ~150m from, Outpost, Base or Airport.<br/> + - within ~50m from a patrol with a dog.<br/> + - spotted treating yourself or someone else<br/> + - spotted placing explosives.<br/> + - spotted repairing vehicles.<br/><br/> + + In a vehicle, undercover is lost if you are:<br/> + - spotted driving ~25m off road.<br/> + - driving over an enemy soldier.<br/> + - if you disembarking without matching the equipment conditions.<br/> + - if someone who isn’t undercover enters your vehicle with enemies around.<br/> + On foot, undercover is lost when:<br/> + - equipping military gear or dropping your civilian clothes (you can’t be undercover when naked).<br/><br/> + + Note: ‘being spotted’ doesn’t require line of sight, it’s a radius around enemy units. + + + Когда гражданский статус активен, Вы видите слово «Гражданский» зеленым цветом на верхней информационной панели, и враги не будут замечать Вас.<br/><br/> + + Условия, необходимые для того, чтобы активировать гражданский статус:<br/> + - не быть замеченным за последние 30 минут. Ели враг Вас заметил за это время, используйте функцию Ящика лечения и восстановления техники «Лечить, чинить и перевооружить» в Штабе. Это позволит снова стать активным гражданскому статусу. Работает и при повторном использовании функции.<br/> + - нет врагов в радиусе 350 м.<br/> + - необходимо быть в гражданской одежде и без военной экипировки. Всплывающий экран подсказки сверху справа отобразит, какие предметы не позволяют Вам быть в гражданском статусе в данный момент.<br/><br/> + + Если Вы соответствуете требуемым условиям, гражданский статус будет активирован:<br/> + - при выборе пункта меню «Маскировка» из «Y» меню.<br/> + - при посадке в «чистый» (не находящийся в розыске) гражданский автомобиль. В этом случае Вы даже можете иметь на себе военную экипировку.<br/><br/> + + Гражданский статус всегда будет выключаться в следующих случаях:<br/> + - в пределах ~ 150 м от Опорного пункта, Базы или Авиабазы .<br/> + - в пределах ~ 50 м от патруля с собакой.<br/> + - если Вас или члена Вашей команды заметили<br/> + - если Вас заметят при установке взрывчатых устройств.<br/> + - если заметят Вас в ремонтной машине.<br/><br/> + + При нахождении в транспорте гражданский статус отключится если:<br/> + - Вы ведете транспорт вне дороги (~ 25 м от дороги).<br/> + - противник заметит что транспорт ведет вражеский боец за рулем.<br/> + - Вы выходите из транспорта и Ваша экипировка не соответствует условиям гражданского статуса (военная одежда, оружие).<br/> + - если кто-то, кто находится не в гражданском статусе осуществит посадку в Ваш транспорт и это заметят враги, находящиеся неподалеку.<br/> + Когда Вы пешком, отключение гражданского статуса возможно, когда:<br/> + - Вы подбираете/надеваете оружие/военную экипировку/снаряжение или снимаете Вашу гражданскую одежду (Вы не можете быть «гражданским» в трусах).<br/><br/> + + Примечание: «быть замеченным врагом» не значит, что враг должен непосредственно Вас увидеть, игровой движок считает что Вы замечены при нахождении врага в определенном радиусе. + + + Cuando esté habilitado podrás ver la palabra ‘Incógnito’ en verde en la barra de Información y los enemigos te ignoraran.<br/><br/> + + Condiciones para pasar al modo Incógnito:<br/> + - no haber sido descubierto en los últimos 30 minutos. Si fuiste descubierto, usa la opción Curar, Reparar y Rearmar en el HQ para pasar a Incógnito de nuevo. Reaparecer también lo vuelve a habilitar.<br/> + - no tener presencia enemiga en un radio de 350 m.<br/> + - vestir ropas civiles y no llevar equipo militar. una pantalla de consejo en la parte superior derecha mostrará una lista de objetos que impiden usar el modo de incógnito.<br/><br/> + + Si cumple con las condiciones anteriores, puede pasar a Incógnito si:<br/> + - activas Incógnito desde el menú Y.<br/> + - montas en un vehículo civil no reportado. En este caso, puedes tener el equipo militar puesto.<br/><br/> + + Perderás siempre el modo Incógnito si:<br/> + - estás a menos de 150m de un Puesto, Base o Aeropuerto.<br/> + - estás a menos de 50m de una patrulla con perro.<br/> + - si te ven tratándote a ti mismo o a otra persona.<br/> + - si te ven portando explosivos.<br/> + - si te ven reparando vehículos.<br/><br/> + + En vehículos, perderás el estado de Incógnito si:<br/> + - te ven conduciendo 25m fuera de una carretera.<br/> + - atropellando a un soldado enemigo.<br/> + - si te bajas sin cumplir las condiciones del equipamiento.<br/> + - si alguien que no está de incógnito entra en tu vehículo con enemigos cerca.<br/> + A pie, pierdes el modo Incógnito si:<br/> + - te equipas con objetos militares o te quitas la ropa de civil (no puedes ir de incógnito mientras vas desnudo).<br/><br/> + + Nota: ‘ser detectado’ no requiere de una línea de visión, es un radio alrededor de las unidades enemigas. + + + + Commander Options + Командование + Opciones de Comandate + + + Moving HQ + Переезд Штаба + Mover el HQ + + + + HQ can be moved by the Commander who has to: <br/> + - Interact with the physical Flag, choose 'HQ options' and click 'Move HQ', <br/> + - Petros joins the Commander’s squad, and moves him to the new location, on foot or as a vehicle passenger. <br/> + - Arsenal and Vehicle Crates have to be loaded on a truck, drive up to them and then interact with the crates to ‘Load Cargo in Vehicle’. <br/> + - Once on the desired place, talk to Petros and ‘Build HQ’. <br/><br/> + + The game allows you to move your HQ to wherever, even inside an enemy base with enemies in the surrounding, it’s up to you to make the smart decision on where move it, see the website for hints on good HQ locations. + + + Штаб может быть перемещен Командиром, для этого надо: <br/> + - подойти к Флагу Штаба и в меню взаимодействия выберите «Штаб» и нажмите «Переезд Штаба», <br/> + - Петрос присоединится к команде Командира, после чего командуя им, переместите его в новое место, пешком или в качестве пассажира на транспортном средстве. <br/> + - Ящик Арсенала и Ящик лечения и восстановления транспорта должны быть погружены в грузовик, для чего надо подъехать к ним, и в меню взаимодействия выбрать «загрузить Ящик в автомобиль»..<br/> + - добравшись до нужного места, выгрузите ящики, используя меню взаимодействия с Петросом выберите «Построить Штаб». <br/><br/> + + Игра позволяет перемещать Штаб куда угодно, даже внутри вражеской базы окруженной врагами, это Вам решать, хорошо подумайте о том, где наиболее тактически выгодно расположить Штаб, см. Веб-сайт для подсказок о хороших местоположениях Штаба. + + + Para mover el HQ el Comandante debe: <br/> + - Interactuar con la Bandera física del HQ, elegir 'Opciones HQ' y pulsar 'Mover HQ', <br/> + - Petros se unirá al escuadrón del Comandante y le acompañará a la nueva ubicación, a pie o como pasajero de un vehículo. <br/> + - Las cajas de Arsenal y Vehículo tienen que ser cargadas en un camión, conduce cerca de ellas e interactua eligiendo ‘Cargar Caja en Vehículo’. <br/> + - Una vez en el lugar deseado, habla con Petros y elige ‘Construir HQ’. <br/><br/> + + El juego permite mover el HQ donde sea, incluso dentro de una base enemiga con tropas hostiles en los alrededores, depende de ti tomar la decisión más inteligente para desplegarla, mira en la web para ver consejos de buenas localizaciones de HQ. + + + + NATO Support + Поддержка союзников + Apoyo OTAN + + + + The Commander can call in various forms of support from the Friendly Faction by choosing one of the options through Y menu (Commander tab). Unit or vehicle types and strength of the intervention will depend on your current support value. Each type cost support points and are explained below.<br/><br/> + + Support must physically travel to their target and they can get engaged before they arrive, this is important to remember especially for air forces, considering that each named hilltop has a spec-ops AA emplacement which can easily destroy them.<br/><br/> + + There is a timer of 30 minutes, after which you lose control of them and they will return to base.<br/> + You can’t board friendly support vehicles nor garage them.<br/><br/> + + - Air assault: send a mix of transport and assault helicopters, No control on High Command.<br/><br/> + + - Armored assault: select a controlled Base, Select waypoint, No control on High Command.<br/><br/> + + - Artillery: select a controlled Base, select the unit from High Command bar and press Shift+Y.<br/><br/> + + - Roadblock: select a controlled Base, Select a point on a road, Control on High Command to move them on location to build the effective Roadblock <br/><br/> + + - UAV: depart from Carrier or closest controlled Airport, Control on High Command to move it where you desire.<br/><br/> + + -Resupply: select the approximate location where supply box should be dropped, Control on High Command and move it to designated location, will be marked by blue smoke.<br/><br/> + + - CAS: Close Air Support; 3 air assets depart from Carrier or closest controlled Airport, Control them on High Command move them where you want.<br/><br/> + + - Bomb Run: select entry and exit point, a plane will depart from Carrier or closest controlled Airport, No control from High Command, requires practice to be effective.<br/><br/> + + - QRF (xx points): Quick Reaction Forces; Small transport helicopters depart from Carrier or closest controlled Airport deploying troops at designated location. + + + Командир может вызвать поддержку Дружественной фракции, выбрав один из вариантов через меню «Y» (вкладка Командира). Возможность использования того или иного вида поддержки союзника зависит от значения (количества очков) поддержки. Каждый вид и его стоимость в очках поддержки описывается ниже.<br/><br/> + + Поддержка должна физически прибыть к указанной Вами цели, и они могут вступить в бой еще на пути к ней. Это важно помнить, например, при вызове поддержки, которая связана с авиацией, так как они могут быть уничтожены врагом так и не долетев до места назначения. Практически на каждой значимой высоте могут находиться вражеские системы ПВО.<br/><br/> + По прошествии 30 минут отряды поддержки вернутся в места дислокации.<br/> + Вы не можете воспользоваться союзническими транспортными средствами и гаражом.<br/><br/> + + - Десант: транспортные и штурмовые вертолеты пытаются высадить десант в районе указанного Вами объекта, нельзя контролировать через меню Командира.<br/><br/> + + - Атака бронетехники: выберите контролируемую базу, откуда пойдет техника, выберите цель атаки, нельзя контролировать через меню Командира.<br/><br/> + + - Артиллерия: выберите контролируемую базу, выберите юнита из панели Командира и нажмите «Shift + Y».<br/><br/> + + - Блокпост: выберите контролируемую базу, выберите точку на дороге, можно контролировать через меню Командира, чтобы отправить их на место для развертывания БП <br/><br/> + + - БПЛА: беспилотник вылетает с авианосца или ближайшей контролируемой авиабазы, можно контролировать через меню Командира, чтобы отправить его туда куда Вам нужно.<br/><br/> + + - Поддержка боеприпасами: выберите приблизительное местоположение, куда необходимо сбросить ящик с боеприпасами, можно контролировать через меню Командира, укажите место для сброса. После сброса ящик искать по синему дыму.<br/><br/> + + - Авиаподдержка: 3 вертолета отправляются с авианосца или ближайшей контролируемой авиабазы, можно контролировать их через меню Командира, перемещая их туда, куда Вам нужно.<br/><br/> + + - Бомбардировка: выберите точки начала и конца направления бомбометания. Самолет отправится с авианосца или ближайшей контролируемой авиабазы, нельзя контролировать через меню Командира, эффективность использования приходит с опытом.<br/><br/> + + - ОБР: отряд быстрого реагирования; малые транспортные вертолеты выдвигаются с авианосца или ближайшей контролируемой авиабазы, десант высаживается в указанное место. + + + El Comandate puede solicitar de varias formas el apoyo de la Facción Aliada escogiendo una de las opciones disponibles en el menú Y (Pestaña Comandante). Los tipos de unidades o vehículos y la fuerza de la intervención dependerán del valor de apoyo actual. Cada tipo de soporte cuesta puntos y se explican a continuación.<br/><br/> + + El apoyo debe hacer un viaje físico hasta su objetivo y puede ser interceptado antes de llegar a su destino, es importante recordar esto, especialmente para las fuerzas aéreas, teniendo en cuenta que cada cima de colina con nombre, tiene un emplazamiento de operaciones especiales con AA que podrán destruirlas facilmente.<br/><br/> + + Una vez solicitado estarán bajo tu control durante 30 minutos, después regresarán a la base.<br/> + No puedes subir a los vehículos de apoyo ni guardarlos en el garaje.<br/><br/> + + - Asalto aéreo: envía una mezcla de helicópteros de transporte y de asalto, no se puede controlar desde el menú HC.<br/><br/> + + - Asalto blindado: selecciona una Base bajo tu control, marca la ruta, no se puede controlar desde HC.<br/><br/> + + - Artillería: selecciona una Base controlada, selecciona la unidad desde la barra HC y presiona Shift+Y.<br/><br/> + + - Control: selecciona una Base bajo tu control, selecciona un punto en una carretera, controla con HC para moverlos a la ubicación seleccionada y que hagan un despliegue efectivo del control.<br/><br/> + + - Dron: saldrá desde el Portaaviones o el Aeropuerto controlado más cercano Airport, controlalo con HC para enviarlo a donde desees.<br/><br/> + + - Reabastecer: selecciona la ubicación aproximada donde quieres que lancen la caja de suministros, con HC muévelo a la zona designada, busca el humo azul para encontrar la caja.<br/><br/> + + - CAS: Apoyo Aéreo Cercano; 3 activos aéreos saldrán desde el Portaaviones o Aeropuerto controlado más cercano, contrólalos con HC y mándalos a donde quieras.<br/><br/> + + - Bombardeo: selecciona el punto de entrada y salida, un avión despegará desde el Portaaviones o Aeropuerto bajo tu control más cercano, no controlado desde el HC, requiere práctica para que sea efectivo.<br/><br/> + + - QRF (xx puntos): Fuerzas de reacción rápida; pequeños helicópteros de transporte saldrán desde el Portaaviones o Aeropuerto controlado más cercano desplegando tropas en la ubicación designada. + + + + Reinforcements + Ваши отряды + Refuerzos + + + + Commander can invest HR in FIA forces, controlled through High Command bar. These soldiers are affected by Army Xp Level. Once recruited they last until they die, get dismissed or the game is restarted (in which case they will get refunded depending on their health status).<br/><br/> + + You can directly control the leader of each group by selecting the team in High Command mode and using the Direct AI Control function in Y menu.<br/><br/> + + * If RHS mod is loaded, this truck is unavailable and nothing will spawn.<br/> + ** Mortar teams have some (un)deploy time when given a movement order. Once deployed you’ll notice a different icon on the map and only then are they ready to fire.<br/> + Press Shift+Y after selecting the mortar team and click on the map to choose a location to order a mortar strike.<br/> + Mortars have limited range and ammunition. They can be resupplied at HQ by the Heal, Repair and Rearm function. + + + Командир может использовать очки HR для формирования отрядов FIA, их можно будет контролировать через панель Командира. На уровень боеспособности отрядов влияет уровень навыка войск (Army XP). Отряды будут нести службу до тех пор, пока не погибнут, не будут распущены или не будет выхода из игры(в этом случае очки HR будут частично возвращены в зависимости от состояния здоровья Юнитов).<br/><br/> + + Вы можете напрямую управлять лидером каждой группы, выбирая команду в режиме Командира и используя функцию Временный контроль ИИ в меню «Y».<br/><br/> + + * Если загружен Мод RHS, этот грузовик недоступен, и ничего не появится.<br/> + ** Минометным командам нужно некоторое время на развертывание при команде на движения. После развертывания Вы увидите другой значок на карте, и только тогда они будут готовы к стрельбе.<br/> + Нажмите «Shift + Y» после выбора группы минометов и нажмите на карту, чтобы выбрать место для указания цели минометного удара.<br/> + Минометы имеют ограниченный диапазон и боеприпасы. Они могут быть перевооружены в Штабе используя функцию «Лечить, чинить и перевооружить» в меню взаимодействия с Ящиком лечения и восстановления техники. + + + El Comandante puede invertir HR en fuerzas del FIA, controladas a través de la barra HC (High Command). A estas tropas les afecta el nivel XP del Ejército. Una vez reclutados duran hasta que mueren, son despedidos o el juego se reinicia (en cuyo caso se reembolsarán dependiendo de su estado de salud).<br/><br/> + + Puede controlar directamente al líder de cada grupo seleccionando el equipo en el modo HC y usando la función de control directo de IA en el menú Y.<br/><br/> + + * Si está cargado el mod RHS, este camión no está disponible y nada se generará.<br/> + ** Los equipos de mortero tardan un tiempo en (des)montar el equipo cuando les das una orden de movimiento. Una vez desplegado, verás un icono diferente en el mapa y solo entonces estarán listos para disparar.<br/> + Presiona Shift+Y después de seleccionar el equipo de mortero y haz click en la posición del mapa escogida para realizar el ataque.<br/> + Los morteros tienen limitado el rango y la munición. Pueden rearmarse en el HQ con la función Curar, Reparar y Rearmar. + + + + Garrison + Гарнизоны + Guarnición + + + + The Commander can invest HR in FIA forces that garrison conquered emplacements or the HQ itself. These soldiers are affected by Army Xp Level and can’t be controlled directly. <br/><br/> + + At your HQ, interact with the Flag, HQ management, Recruit Garrison. Select the emplacement you want to garrison and add units.<br/><br/> + + Adding manned static weapons: assemble a static gun, recruit a militiaman and he will man the gun. Garrison Info (viewed at HQ Map) will display the number of manned static weapons.<br/><br/> + + Garrisoned mortar teams will engage anything over a long range, so be careful about where you station them to minimize friendly fire, civilian casualties and collateral damage.<br/><br/> + + Note: Huge garrisons might lower game performance, please check relative section for more information. + + + Командир может использовать имеющиеся очки HR на формирование гарнизона FIA на захваченном объекте или в Штабе. Уровень бойцов в гарнизоне будет напрямую зависеть от уровня навыка войск (Army XP). Они не могут контролироваться напрямую. <br/><br/> + + В Вашем Штабе, подойдите к Флагу и выберите в меню взаимодействия -> Штаб -> Комплектовать гарнизон. Выберите точку, на которой Вы хотите разместить гарнизон, и добавьте боевые единицы.<br/><br/> + + Добавление управляемого ИИ станкового оружия: соберите станковое оружие, добавьте в гарнизон ополченца, и он будет управлять оружием. Информация о гарнизоне (просматриваемая на Карте в Штабе) отображает количество имеющихся станковых орудий.<br/><br/> + + Гарнизонные минометные команды могут начать вести огонь на большое расстояние, поэтому будьте внимательны при выборе места их размещения, чтобы свести к минимуму дружественный огонь, жертвы среди гражданского населения и побочный ущерб. <br/><br/> + + Примечание. Огромные гарнизоны могут снизить производительность игры, пожалуйста, проверьте соответствующий раздел для получения дополнительной информации. + + + El Comandante puede invertir HR en fuerzas del FIA como guarnición de emplazamientos conquistados o en el mismo HQ. Estas tropas se ven afectadas por el nivel XP del Ejército y no pueden controlarse directamente. <br/><br/> + + En tu HQ, interactua con la Bandera, Administrar HQ, Reclutar Guarnición. Selecciona el emplazamiento donde quieras añadir unidades de guarnición.<br/><br/> + + Agregar armas estáticas manejadas: monta un arma estática, recluta un miliciano y se pondrá en el arma. En Información de Guarnición (visible en el mapa del HQ) se mostrará el número de armas estáticas manejadas.<br/><br/> + + Los equipos de mortero guarnecidos se enfrentarán a cualquier cosa en un rango largo, así que ten cuidado con dónde colocarlos para minimizar el fuego amigo, las bajas civiles y daños colaterales.<br/><br/> + + Nota: Un gran número de tropas guarnecidas pueden reducir el rendimiento del juego; verifica la sección relativa para obtener más información. + + + + Emplacements + Позиции FIA + Emplazamientos + + + + In the Y menu, the Commander can manage:<br/><br/> + + - Roadblocks: placed on roads, will defend the area with a .50 cal and rpgs: ideal to stop normal enemy patrols and even convoys, when they are upgraded to enhanced Roadblocks (Army Level >12).<br/><br/> + + - Watchposts: placed in the field, 2 man sentry will observe the area reporting contacts through the High Command interface.<br/><br/> + + - Camps: allow people to fast travel. There are crates with some free equipment and the ability to restore health and fuel, but vehicles can not be repaired here.<br/><br/> + + - HQ fortifications: consider these cosmetics, as the HQ isn’t supposed to be a fortified position.<br/> + Lantern to illuminate the base a bit better than the Campfire.<br/> + Helipad is just mark a place to land helicopters.<br/> + Camo net occludes Petros and the camp from enemy aircraft, but might collapse or cause mission vehicles to explode upon spawn if placed too close to campfire, so be really careful. + + + Через меню «Y», Командир может управлять позициями:<br/><br/> + + - БП (Блокпосты): размещенные на дорогах, будут защищать территорию, вооружены пулемётом 0,50 калибра и РПГ - идеально подходят для остановки обычных патрулей противника и даже конвоев (когда они будут модернизированы до улучшенных БП - навык войск>12).<br/><br/> + + - НП (Наблюдательные пункты): размещаются на открытой местности, патруль - 2 бойца будут наблюдать за участками, сообщая о контактах с противником через интерфейс Командира.<br/><br/> + + - Лагеря: позволяют быстро перемещаться. В них есть ящики со снаряжением, также могут восстанавливать здоровье и заправлять топливо, но ремонт транспортных средств не производится.<br/><br/> + + - Фортификации Штаба: посмотрите и выберите что Вам нужно для обустройства и укрепления Штаба:<br/> + Фонарь - для подсветки Штаба (немного лучше, чем Костер).<br/> + Площадка для появления техники - позволяет установить место для появления транспортных средств (выглядит как ведро с краской).<br/> + Маскировочная сеть - закрывает Петроса и лагерь от вражеских самолетов, но может упасть или задеть технику при ее появлении, от чего техника может взорваться, или если её поставить слишком близко к Костру, поэтому будьте очень осторожны. + + + En el menú Y, El Comandante puede administrar:<br/><br/> + + - Controles: colocados en carreteras, defenderán la zona con una calibre .50 y rpgs: ideal para neutralizar patrullas enemigas e incluso convoys, cuando se actualizan a Controles Mejorados (Nivel de Ejército >12).<br/><br/> + + - Puestos de Observación: colocados en el campo, 2 centinelas vigilarán el área informando de contactos a través del interfaz HC.<br/><br/> + + - Campamentos: permiten hacer Viaje Rápido. Tienen cajas con equipamiento gratuito y la posibilidad de restaurar salud y combustible, pero no se puede reparar vehículos.<br/><br/> + + - Fortificaciones del HQ: considerar esto como algo visual ,ya que no supone que el HQl sea una posición fortificada.<br/> + Una linterna para iluminar la base un poco mejor que la Hoguera.<br/> + El helipuerto sólo marca el lugar de aterrizaje de los helicópteros.<br/> + La red de camuflaje oculta el campamento y a Petros de las aeronaves enemigas, pero podría colapsar o hacer que los vehículos de la misión exploten al aparecer si se coloca demasiado cerca de la hoguera, así que ten mucho cuidado. + + + + Maintenance + Решение проблем + Mantenimiento + + + + Some sticky situations can be fixed by the commander or admin, access them from Y menu, right side middle button (admin menu), Maintainance.<br/><br/> + + - Reset Petros Position: to fix the ‘too far from HQ’ bug when trying to move assets around the HQ.<br/><br/> + + - Reset Static positions: static weapons around HQ can be moved like other assets for a limited time, if the timer expires, use this command to make them movable again.<br/><br/> + + - Reset HQ: reset HQ location around Petros’ position. Note: if Petros was moved inside a building by ACE cable tie, collision bugs will occur.<br/><br/> + + Also, Y menu, right side middle button (admin menu), Details let you restrict gear below a threshold for non members and, after changing ACE medical system, reinitalise the items. + + + Некоторые неприятные ситуации могут быть исправлены Командиром или администратором: меню «Y» -> Меню Командира -> Сервис.<br/><br/> + + - Сбросить позицию Петроса: исправить ошибку «слишком далеко от Штаба» при попытке переместить Предметы возле Штаба.<br/><br/> + + - Сброс станковых орудий: станковое оружие в районе Штаба можно перемещать, как и другие предметы, в течение ограниченного времени, если таймер истекает, используйте эту команду, чтобы сделать их подвижными снова.<br/><br/> + + - Сброс Штаба: сброс местоположения Штаба вокруг позиции Петроса. Примечание: если Петрос был перемещен внутри здания с помощью кабельной стяжки ACE, будут возникать ошибки столкновения. + + + Algunas situaciones difíciles pueden ser arregladas por el comandante o el admin, accediendo desde el menú Y, botón central del lado derecho (menú administración), Mantenimiento.<br/><br/> + + - Reiniciar la posición de Petros: para arreglar el bug de ‘demasiado lejos del HQ’ cuando tratas de mover activos por el HQ.<br/><br/> + + - Reiniciar posiciones de Estáticas: las armas estáticas pueden moverse por el HQ como otros activos por un tiempo limitado, si el tiempo se agota, usa esta opción para poder moverlas de nuevo.<br/><br/> + + - Reiniciar HQ: Recoloca todos los activos del HQ alrededor de la posición de Petros. Nota: Si moviste a Petros dentro de un edificio con el cable de ACE, puede ocurrir un bug de colisión. + + + + 8 Credits and Thanks + 8 Авторы и благодарности + 8 Créditos y Agradecimientos + + + + Author: Barbolani<br/> + Coding since 1.2: Chris supervised by RickyTan and Kendo<br/> + Coding since 1.7.6: Jeroen and Sparker<br/> + Coding since 1.7.16: IrLED<br/> + Tweaking, fixing and supervising github commits since 1.7.12: Stef<br/><br/> + + Scripts:<br/> + UPSMon by Monsada, Kronzy and Cool=Azroul13 <br/> + Jeroen Arsenal System by Jeroen Not.<br/> + Jeroen Garage System by Jeroen Not.<br/> + Persistent Save by zooloo75.<br/> + Tags by Marker and Melbo.<br/> + Advanced Towing by duda<br/> + iniDIBI2 by code34<br/> + Vcom AI by Genesis92x<br/><br/> + + Briefing by Stef, Dethleffs, Fireman, everyone of the Official Community who add suggestions and corrections + IrLED: headlessclient balanced unit assignment, Vcom AI integration.<br/> + AlexTriada, VelvetNight and BeZZuBik41: Russian translate and Multilingual platform<br/> + nuker: For testing and ideas.<br/> + Ghost: For MP DS testing and teaching me how to run a DS.<br/> + Nirvana and CWW clan for testing.<br/> + LanCommi on dedi server testing.<br/> + neuron: lots of testing and help in steam page.<br/> + Gillaustio and Farooq for inspirational works on revive system.<br/> + Valtas: support, testing bug reports and building the first serious open Dedi for Antistasi.<br/> + Goon and jw custom: part of the code for the NAPALM script.<br/> + Larrow: very valuable scripting help in BIS forums.<br/> + Billw: lots of help on testing and bug detection.<br/> + tommytom73: HC testing.<br/> + Manko: earplug snippet.<br/> + harmdhast: help on some scripting.<br/> + DeathTouchWilly: first Official Antistasi Manual.<br/> + daveallen10: ACE Integration scripts.<br/> + RickyTan: tons of help and testing in the Official Servers, Head of Antistasi Official Community since March 2016 ‘till June 2017 and making the community more financially aware.<br/> + Toshi: Antistasi porting on other islands.<br/> + Kendo and Tuck for templates.<br/> + And all those players who spend their time on making comments, suggestions and reports on Steam and Antistasi Official Community. + + + Author: Barbolani<br/> + Coding since 1.2: Chris supervised by RickyTan and Kendo<br/> + Coding since 1.7.6: Jeroen and Sparker<br/> + Coding since 1.7.16: IrLED<br/> + Tweaking, fixing and supervising github commits since 1.7.12: Stef<br/><br/> + + Scripts:<br/> + UPSMon by Monsada, Kronzy and Cool=Azroul13 <br/> + Jeroen Arsenal System by Jeroen Not.<br/> + Jeroen Garage System by Jeroen Not.<br/> + Persistent Save by zooloo75.<br/> + Tags by Marker and Melbo.<br/> + Advanced Towing by duda<br/> + iniDIBI2 by code34<br/> + Vcom AI by Genesis92x<br/><br/> + + Briefing by Stef, Dethleffs, Fireman, everyone of the Official Community who add suggestions and corrections + IrLED: headlessclient balanced unit assignment, Vcom AI integration.<br/> + AlexTriada, VelvetNight and BeZZuBik41: Russian translate and Multilingual platform<br/> + nuker: For testing and ideas.<br/> + Ghost: For MP DS testing and teaching me how to run a DS.<br/> + Nirvana and CWW clan for testing.<br/> + LanCommi on dedi server testing.<br/> + neuron: lots of testing and help in steam page.<br/> + Gillaustio and Farooq for inspirational works on revive system.<br/> + Valtas: support, testing bug reports and building the first serious open Dedi for Antistasi.<br/> + Goon and jw custom: part of the code for the NAPALM script.<br/> + Larrow: very valuable scripting help in BIS forums.<br/> + Billw: lots of help on testing and bug detection.<br/> + tommytom73: HC testing.<br/> + Manko: earplug snippet.<br/> + harmdhast: help on some scripting.<br/> + DeathTouchWilly: first Official Antistasi Manual.<br/> + daveallen10: ACE Integration scripts.<br/> + RickyTan: tons of help and testing in the Official Servers, Head of Antistasi Official Community since March 2016 ‘till June 2017 and making the community more financially aware.<br/> + Toshi: Antistasi porting on other islands.<br/> + Kendo and Tuck for templates.<br/> + And all those players who spend their time on making comments, suggestions and reports on Steam and Antistasi Official Community. + + + Autor: Barbolani<br/> + Codificación desde 1.2: Chris supervisado por RickyTan y Kendo<br/> + Codificación desde 1.7.6: Jeroen y Sparker<br/> + Codificación desde 1.7.16: IrLED<br/> + Modificación, arreglos y supervisión de github desde 1.7.12: Stef<br/><br/> + + Scripts:<br/> + UPSMon por Monsada, Kronzy y Cool=Azroul13 <br/> + Jeroen Arsenal System por Jeroen Not.<br/> + Jeroen Garage System por Jeroen Not.<br/> + Persistent Save por zooloo75.<br/> + Tags por Marker y Melbo.<br/> + Advanced Towing por duda<br/> + iniDIBI2 por code34<br/> + Vcom AI por Genesis92x<br/><br/> + + Briefing por Stef, Dethleffs, Fireman, todo el mundo de la Comunidad Oficial que ha añadido sugerencias y correcciones<br/> + IrLED: asignación de unidades equilibradas por cliente headless, integración IA Vcom.<br/> + AlexTriada, VelvetNight y BeZZuBik41: Traducción al ruso y plataforma multilenguaje<br/> + nuker: por hacer pruebas e ideas.<br/> + Ghost: Por probar DS en MP y enseñarme cómo ejecutar DS.<br/> + Nirvana y el clan CWW por hacer pruebas.<br/> + LanCommi por pruebas en servidor dedicado.<br/> + neuron: muchas pruebas y ayuda con la página de steam.<br/> + Gillaustio y Farooq por el inspirador trabajo del sistema de reanimación.<br/> + Valtas: apoyo, pruebas, informe de errores y montar el primer servidor serio dedicado abierto para Antistasi.<br/> + Goon y jw custom: parte del código del script NAPALM.<br/> + Larrow: ayuda muy valiosa de scripting en los foros de BIS.<br/> + Billw: mucha ayuda haciendo pruebas y detectando errores.<br/> + tommytom73: Pruebas del HC.<br/> + Manko: fragmento de los tapones de los oídos.<br/> + harmdhast: ayuda con el scripting.<br/> + DeathTouchWilly: Primer Manual Oficial de Antistasi.<br/> + daveallen10: Integración de los scripts de ACE.<br/> + RickyTan: Toneladas de ayuda y pruebas en los Servidores Oficiales, Director de la Comunidad Oficial de Antistasi desde Marzo de 2016 hasta Junio de 2017 y hacer que la comunidad sea más consciente de la financiación.<br/> + Toshi: Exportar Antistasi a otras islas.<br/> + Kendo y Tuck por sus plantillas.<br/> + Y a todos los jugadores que gastan su tiempo en hacer comentarios, sugerencias e informes en Steam y la Comunidad Oficial de Antistasi. + + + + + + diff --git a/AntistasiOfficial.Altis/Templates/BLUE_CSAT.sqf b/AntistasiOfficial.Altis/Templates/BLUE_CSAT.sqf index fd647d72..def4de14 100644 --- a/AntistasiOfficial.Altis/Templates/BLUE_CSAT.sqf +++ b/AntistasiOfficial.Altis/Templates/BLUE_CSAT.sqf @@ -52,7 +52,7 @@ bluTeam = ["OIA_InfTeam"]; bluATTeam = ["OIA_InfTeam_AT"]; bluIR = "acc_pointer_IR"; - +blunvg = ["NVGoggles_OPFOR"]; bluFlag = "Flag_CSAT_F"; bluCfgInf = (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry"); diff --git a/AntistasiOfficial.Altis/Templates/BLUE_NATO.sqf b/AntistasiOfficial.Altis/Templates/BLUE_NATO.sqf index 990ba0a1..c5e8012f 100644 --- a/AntistasiOfficial.Altis/Templates/BLUE_NATO.sqf +++ b/AntistasiOfficial.Altis/Templates/BLUE_NATO.sqf @@ -1,5 +1,5 @@ //Blu NATO vehicles - bluHeliTrans = ["B_Heli_Light_01_F","B_Heli_Transport_01_camo_F","B_Heli_Transport_03_F"]; + bluHeliTrans = ["B_Heli_Transport_03_F"]; bluHeliTS = ["B_Heli_Light_01_F"]; bluHeliDis = ["B_Heli_Transport_01_camo_F"]; bluHeliRope = ["B_Heli_Transport_03_F"]; @@ -49,10 +49,10 @@ bluAirCav = ["B_recon_TL_F","B_recon_LAT_F","B_Recon_Sharpshooter_F","B_recon_medic_F","B_recon_F","B_recon_JTAC_F"]; - bluSquad = ["BUS_InfSquad"]; - bluSquadWeapons = ["BUS_InfSquad_Weapons"]; - bluTeam = ["BUS_InfTeam"]; - bluATTeam = ["BUS_InfTeam_AT"]; + bluSquad = ["BUS_InfSquad"]; // 8 men + bluSquadWeapons = ["BUS_InfSquad_Weapons"]; // 8 men + bluTeam = ["BUS_InfTeam"]; // 4 men + bluATTeam = ["BUS_InfTeam_AT"]; // 4 men bluIR = "acc_pointer_IR"; @@ -159,6 +159,11 @@ "muzzle_snds_L" ]; + blunvg = [ + "NVGoggles" + + ]; + bluHelmet = [ "H_HelmetB_light_black", // Tier 1 "H_HelmetB_black", // Tier 2 diff --git a/AntistasiOfficial.Altis/Templates/BLUE_USAF.sqf b/AntistasiOfficial.Altis/Templates/BLUE_USAF.sqf index 03127a7e..83e5a893 100644 --- a/AntistasiOfficial.Altis/Templates/BLUE_USAF.sqf +++ b/AntistasiOfficial.Altis/Templates/BLUE_USAF.sqf @@ -1,11 +1,12 @@ //Blu USAF vehicles - bluHeliTrans = ["RHS_MELB_MH6M","RHS_UH60M","RHS_CH_47F_light"]; - bluHeliTS = ["RHS_MELB_MH6M"]; - bluHeliDis = ["RHS_UH60M"]; + bluHeliTrans = ["RHS_CH_47F_light"]; //Chinhook + bluHeliTS = ["RHS_MELB_MH6M"]; //small heli + bluHeliDis = ["RHS_UH60M"]; //Black hawk bluHeliRope = ["RHS_CH_47F_light"]; bluHeliArmed = ["RHS_MELB_AH6M_H","RHS_MELB_AH6M_M"]; bluHeliGunship = ["RHS_AH64D_AA","RHS_AH64D_GS","RHS_AH64D"]; bluCASFW = ["RHS_A10"]; + bluTSairdrop = ["B_T_VTOL_01_vehicle_F"]; bluAS = ["rhsusf_f22"]; bluC130 = ["RHS_C130J"]; @@ -150,7 +151,9 @@ "rhsusf_acc_nt4_black" //Higer tier only ]; - + blunvg = [ + "rhsusf_ANPVS_15" + ]; bluHelmet = [ "rhsusf_opscore_bk_pelt", // Tier 1 diff --git a/AntistasiOfficial.Altis/Templates/BLUE_VMF.sqf b/AntistasiOfficial.Altis/Templates/BLUE_VMF.sqf index 438dc82e..71bc83e7 100644 --- a/AntistasiOfficial.Altis/Templates/BLUE_VMF.sqf +++ b/AntistasiOfficial.Altis/Templates/BLUE_VMF.sqf @@ -51,6 +51,7 @@ bluTeam = ["rhs_group_rus_vdv_infantry_MANEUVER"]; // 4 bluATTeam = ["rhs_group_rus_vdv_infantry_section_AT"]; // 4 bluIR = "rhs_acc_perst1ik"; +blunvg = ["rhs_1PN138"]; bluFlag = "rhs_Flag_Russia_F"; diff --git a/AntistasiOfficial.Altis/Templates/CIV_ALTIS.sqf b/AntistasiOfficial.Altis/Templates/CIV_ALTIS.sqf index 84d52e8e..8efd4093 100644 --- a/AntistasiOfficial.Altis/Templates/CIV_ALTIS.sqf +++ b/AntistasiOfficial.Altis/Templates/CIV_ALTIS.sqf @@ -52,5 +52,5 @@ CIV_journalists = [ ]; AS_misSupplyBox = "Land_PaperBox_01_open_boxes_F"; -AS_misSupplyBoxEnd = "Land_PaperBox_01_open_empty_F"; +AS_misSupplyBoxEmpty = "Land_PaperBox_01_open_empty_F"; AS_misVehicleBox = "C_Van_01_box_F"; diff --git a/AntistasiOfficial.Altis/Templates/IND_AAF.sqf b/AntistasiOfficial.Altis/Templates/IND_AAF.sqf index ac507750..a089e7fb 100644 --- a/AntistasiOfficial.Altis/Templates/IND_AAF.sqf +++ b/AntistasiOfficial.Altis/Templates/IND_AAF.sqf @@ -438,7 +438,14 @@ unlockedItems = [ ]; unlockedBackpacks = [ - "B_TacticalPack_blk" + "B_TacticalPack_blk", + "B_TacticalPack_rgr", + "B_TacticalPack_oli", + "B_TacticalPack_blk", + "B_FieldPack_oli", + "B_FieldPack_blk", + "B_FieldPack_oucamo", + "B_FieldPack_cbr" ]; unlockedOptics = []; diff --git a/AntistasiOfficial.Altis/Templates/IND_AFRF.sqf b/AntistasiOfficial.Altis/Templates/IND_AFRF.sqf index 00358f49..7ff8b158 100644 --- a/AntistasiOfficial.Altis/Templates/IND_AFRF.sqf +++ b/AntistasiOfficial.Altis/Templates/IND_AFRF.sqf @@ -120,7 +120,7 @@ infAT = ["rhs_group_rus_vdv_infantry_section_AT"]; // Statics to be used statMG = "rhs_DSHKM_ins"; statAT = "rhs_Kornet_9M133_2_vdv"; // alternatives: rhs_Kornet_9M133_2_vdv, rhs_SPG9M_VDV, rhs_Metis_9k115_2_vdv -statAA = "RHS_ZU23_VDV"; // alternatively: "rhs_Igla_AA_pod_vdv" +statAA = "rhs_Igla_AA_pod_msv"; statAA2 = "rhs_Igla_AA_pod_vdv"; statMortar = "rhs_2b14_82mm_vdv"; @@ -359,7 +359,8 @@ if (activeGREF) then { "rhs_weap_makarov_pm", "rhs_weap_savz61", "rhs_weap_kar98k", - "rhs_weap_m38" + "rhs_weap_m38", + "rhs_weap_savz61_folded" ]; unlockedRifles = [ @@ -459,11 +460,18 @@ unlockedItems = [ "U_B_survival_uniform", "U_OrestesBody", "V_BandollierB_oli", + //GREF uniforms + "rhsgref_uniform_woodland_olive", + "rhsgref_uniform_altis_lizard_olive", + "rhsgref_uniform_flecktarn", "G_Bandanna_khk" ]; unlockedBackpacks = [ - "rhs_assault_umbts" + "rhs_assault_umbts", + "rhs_assault_umbts_engineer", + "rhs_medic_bag" + ]; unlockedOptics = []; diff --git a/AntistasiOfficial.Altis/Templates/IND_NATO.sqf b/AntistasiOfficial.Altis/Templates/IND_NATO.sqf index c719566a..ca92b981 100644 --- a/AntistasiOfficial.Altis/Templates/IND_NATO.sqf +++ b/AntistasiOfficial.Altis/Templates/IND_NATO.sqf @@ -441,7 +441,11 @@ unlockedItems = [ ]; unlockedBackpacks = [ - "B_TacticalPack_blk" + "B_TacticalPack_blk", + "B_FieldPack_oli", + "B_FieldPack_blk", + "B_FieldPack_oucamo", + "B_FieldPack_cbr" ]; unlockedOptics = []; diff --git a/AntistasiOfficial.Altis/Templates/PLAYER_FIA.sqf b/AntistasiOfficial.Altis/Templates/PLAYER_FIA.sqf index 45a6fcfe..259c0d77 100644 --- a/AntistasiOfficial.Altis/Templates/PLAYER_FIA.sqf +++ b/AntistasiOfficial.Altis/Templates/PLAYER_FIA.sqf @@ -11,7 +11,7 @@ guer_veh_engineer = "B_G_Offroad_01_repair_F"; guer_veh_technical = "B_G_Offroad_01_armed_F"; guer_veh_quad = "B_G_Quadbike_01_F"; // default transport for snipers guer_veh_offroad = "B_G_Offroad_01_F"; // default transport for teams -guer_veh_dinghy = "B_G_Boat_Transport_01_F"; +guer_veh_dinghy = "C_Boat_Civil_01_F"; guer_sol_AA = "B_G_Soldier_lite_F"; // AA trooper in player groups guer_sol_AM = "B_G_Soldier_A_F"; // playable, player-only @@ -112,6 +112,7 @@ if (worldname == "Tanoa") then { guer_gear_BP_Medic = ""; guer_gear_BP_Engineer = ""; } else { + guer_veh_technical_AT = "rhsgref_ins_g_uaz_spg9"; guer_stat_mortar = "rhsgref_ins_g_2b14"; guer_stat_MGH = "rhsgref_ins_g_DSHKM"; guer_stat_AT = "rhsgref_ins_g_SPG9M"; @@ -129,8 +130,8 @@ if (worldname == "Tanoa") then { "B_G_Offroad_01_armed_F", "rhs_DSHKM_ins", "rhs_2b14_82mm_msv", - "rhs_Metis_9k115_2_vdv", - "RHS_ZU23_VDV", + "rhs_Kornet_9M133_2_vdv", + "rhs_Igla_AA_pod_msv", "rhs_bmd1_chdkz", "rhs_gaz66_r142_vdv" ]; diff --git a/AntistasiOfficial.Altis/Templates/PLAYER_GREF.sqf b/AntistasiOfficial.Altis/Templates/PLAYER_GREF.sqf index 8bdc15af..6227eeda 100644 --- a/AntistasiOfficial.Altis/Templates/PLAYER_GREF.sqf +++ b/AntistasiOfficial.Altis/Templates/PLAYER_GREF.sqf @@ -67,7 +67,7 @@ vfs = [ "rhsgref_ins_g_uaz_dshkm_chdkz", "rhs_DSHKM_ins", "rhs_2b14_82mm_msv", - "rhs_Metis_9k115_2_vdv", + "rhs_Kornet_9M133_2_vdv", "rhsgref_ins_g_ZU23", "rhsgref_ins_g_btr70", "rhsgref_ins_g_gaz66_r142" diff --git a/AntistasiOfficial.Altis/Templates/PLAYER_IND_FIA.sqf b/AntistasiOfficial.Altis/Templates/PLAYER_IND_FIA.sqf index 055e3f58..5315696d 100644 --- a/AntistasiOfficial.Altis/Templates/PLAYER_IND_FIA.sqf +++ b/AntistasiOfficial.Altis/Templates/PLAYER_IND_FIA.sqf @@ -11,7 +11,7 @@ guer_veh_engineer = "B_G_Offroad_01_repair_F"; guer_veh_technical = "I_G_Offroad_01_armed_F"; guer_veh_quad = "I_G_Quadbike_01_F"; // default transport for snipers guer_veh_offroad = "I_G_Offroad_01_F"; // default transport for teams -guer_veh_dinghy = "I_G_Boat_Transport_01_F"; +guer_veh_dinghy = "C_Boat_Civil_01_F"; guer_sol_AA = "I_G_Soldier_lite_F"; // AA trooper in player groups guer_sol_AM = "I_G_Soldier_A_F"; // playable, player-only @@ -140,8 +140,8 @@ if (worldname == "Tanoa") then { "I_G_Offroad_01_armed_F", "rhs_DSHKM_ins", "rhs_2b14_82mm_msv", - "rhs_Metis_9k115_2_vdv", - "RHS_ZU23_VDV", + "rhs_Kornet_9M133_2_vdv", + "rhs_Igla_AA_pod_msv", "rhs_bmd1_chdkz", "rhs_gaz66_r142_vdv" ]; diff --git a/AntistasiOfficial.Altis/Templates/RED_CSAT.sqf b/AntistasiOfficial.Altis/Templates/RED_CSAT.sqf index 5d3827db..4474322f 100644 --- a/AntistasiOfficial.Altis/Templates/RED_CSAT.sqf +++ b/AntistasiOfficial.Altis/Templates/RED_CSAT.sqf @@ -1,5 +1,5 @@ // (un-)armed transport helicopters -opHeliTrans = ["O_Heli_Light_02_unarmed_F","O_Heli_Transport_04_bench_F"]; +opHeliTrans = ["O_Heli_Light_02_unarmed_F"]; //"O_Heli_Transport_04_bench_F" not working with fastrope, disable for now // helicopter that dismounts troops opHeliDismount = "O_Heli_Transport_04_bench_F"; // Mi-290 Taru (Bench) @@ -20,8 +20,8 @@ opCASFW = ["O_Plane_CAS_02_F"]; // To-199 Neophron (CAS) opUAVsmall = "O_UAV_01_F"; // Tayran AR-2 // air force -opAir = ["O_Heli_Light_02_unarmed_F","O_Heli_Transport_04_bench_F","O_Heli_Attack_02_F","O_Plane_CAS_02_F","O_Heli_Light_02_F"]; - +opAir = ["O_Heli_Light_02_unarmed_F","O_Heli_Attack_02_F"]; //removed Taru and Plane +dogfight = ["O_Plane_Fighter_02_Stealth_F"]; // self-propelled anti air opSPAA = "O_APC_Tracked_02_AA_F"; diff --git a/AntistasiOfficial.Altis/Templates/RED_VMF.sqf b/AntistasiOfficial.Altis/Templates/RED_VMF.sqf index 3caf8f91..d60f0a0e 100644 --- a/AntistasiOfficial.Altis/Templates/RED_VMF.sqf +++ b/AntistasiOfficial.Altis/Templates/RED_VMF.sqf @@ -14,13 +14,14 @@ opHeliSD = "RHS_Mi8AMTSh_vvs"; // PO-30 Orca (Armed) opGunship = "rhs_mi28n_vvs"; // Mi-48 Kajman // CAS, fixed-wing -opCASFW = ["RHS_Su25SM_vvs", "RHS_T50_vvs_generic"]; // To-199 Neophron (CAS) +opCASFW = ["RHS_Su25SM_vvs","RHS_T50_vvs_generic"]; // To-199 Neophron (CAS) // small UAV (Darter, etc) opUAVsmall = "rhs_pchela1t_vvs"; // Tayran AR-2 // air force -opAir = ["rhs_ka60_grey","RHS_Mi8AMTSh_FAB_vvs","rhs_mi28n_vvs","RHS_Su25SM_vvs","RHS_Mi24P_vvs"]; +opAir = ["rhs_ka60_grey","rhs_mi28n_vvs"]; +dogfight = ["rhs_mig29s_vvs"]; // self-propelled anti air opSPAA = "rhs_zsu234_aa"; diff --git a/AntistasiOfficial.Altis/Thumbs.db b/AntistasiOfficial.Altis/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..32b36fcb18580ab0e05827fd057426482bed77a3 GIT binary patch literal 15872 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 literal 0 HcmV?d00001 diff --git a/AntistasiOfficial.Altis/UI/defines/menuElements.hpp b/AntistasiOfficial.Altis/UI/defines/menuElements.hpp index 766a01d1..d016ccae 100644 --- a/AntistasiOfficial.Altis/UI/defines/menuElements.hpp +++ b/AntistasiOfficial.Altis/UI/defines/menuElements.hpp @@ -44,7 +44,7 @@ class Menu_TextField : RscStructuredText { class Menu_StartButton : RscButton { idc = -1; - text = "Start Mission"; + text = $STR_UI_SM_SM; x = (UI_BASE_X + 0.19) * safezoneW + safezoneX; y = (UI_BASE_Y + 0.519) * safezoneH + safezoneY; w = 0.08 * safezoneW; diff --git a/AntistasiOfficial.Altis/UI/defines/menu_commander.hpp b/AntistasiOfficial.Altis/UI/defines/menu_commander.hpp index 954e25c1..add83b22 100644 --- a/AntistasiOfficial.Altis/UI/defines/menu_commander.hpp +++ b/AntistasiOfficial.Altis/UI/defines/menu_commander.hpp @@ -23,13 +23,13 @@ #define NATO_QRF "closeDialog 0; ['NATOQRF'] execVM 'NatoDialog.sqf';" #define NATO_RED "closeDialog 0; ['NATORED'] execVM 'NatoDialog.sqf';" //Stef 30-08 -#define NATO_TEXTS_L ["STR_UI_NATO_CA_TEXT", "STR_UI_NATO_ARM_TEXT", "STR_UI_NATO_ART_TEXT", "STR_UI_NATO_RB_TEXT", "STR_UI_NATO_QRF_TEXT"] -#define NATO_TEXTS_R ["STR_UI_NATO_UAV_TEXT", "STR_UI_NATO_AMMO_TEXT", "STR_UI_NATO_CAS_TEXT", "STR_UI_NATO_BOMB_TEXT", "STR_UI_NATO_RED_TEXT"] +#define NATO_TEXTS_L ["STR_UI_ALLY_CA_TEXT", "STR_UI_ALLY_ARM_TEXT", "STR_UI_ALLY_ART_TEXT", "STR_UI_ALLY_RB_TEXT", "STR_UI_ALLY_QRF_TEXT"] +#define NATO_TEXTS_R ["STR_UI_ALLY_UAV_TEXT", "STR_UI_ALLY_AMMO_TEXT", "STR_UI_ALLY_CAS_TEXT", "STR_UI_ALLY_BOMB_TEXT", "STR_UI_ALLY_RED_TEXT"] //#define NATO_TEXTS_M moved to make it even -#define NATO_TTS_L ["STR_UI_NATO_CA_TT", "STR_UI_NATO_ARM_TT", "STR_UI_NATO_ART_TT", "STR_UI_NATO_RB_TT", "STR_UI_NATO_QRF_TT"] -#define NATO_TTS_R ["STR_UI_NATO_UAV_TT", "STR_UI_NATO_AMMO_TT", "STR_UI_NATO_CAS_TT", "STR_UI_NATO_BOMB_TT", "STR_UI_NATO_RED_TT"] -//#define NATO_TTS_M "STR_UI_NATO_QRF_TT" moved to make it even +#define NATO_TTS_L ["STR_UI_ALLY_CA_TT", "STR_UI_ALLY_ARM_TT", "STR_UI_ALLY_ART_TT", "STR_UI_ALLY_RB_TT", "STR_UI_ALLY_QRF_TT"] +#define NATO_TTS_R ["STR_UI_ALLY_UAV_TT", "STR_UI_ALLY_AMMO_TT", "STR_UI_ALLY_CAS_TT", "STR_UI_ALLY_BOMB_TT", "STR_UI_ALLY_RED_TT"] +//#define NATO_TTS_M "STR_UI_ALLY_QRF_TT" moved to make it even // SQUAD RECRUITMENT #define SR_INFSQUAD "[guer_grp_squad] spawn addFIAsquadHC" @@ -81,11 +81,28 @@ // INFO MENU #define INFO_FIA "['status'] remoteExecCall ['AS_fnc_infoScreen', 2];" + +#define INFO_MRESTR "if(server getVariable [""jna_mrestricted"",false]) then {server setvariable [""jna_mrestricted"",flase,true]; jna_minItemMember = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]; (_this select 0) ctrlSetTextColor [0.18,0.545,0.341,1];systemchat 'Arsenal items are free for all'} \ + else {server setvariable [""jna_mrestricted"",true,true]; jna_minItemMember = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,500,20,20,20,10,500]; (_this select 0) ctrlSetTextColor [1,0,0,1]; systemchat 'Arsenal items below a threshold are restricted to non members'};" + + +#define INFO_ACEMEDIC "if (ace_medical_level == 2) then { \ + {(jna_dataList select 24) pushbackunique _x} foreach aceadvmedical; \ + } else { \ + { \ + jna_datalist set [24, (jna_dataList select 24) - _x] \ + } foreach [aceadvmedical]; \ + };closeDialog 0;" + + #define INFO_AXP_RES "['restrictions'] remoteExecCall ['fnc_BE_broadcast', 2];" #define INFO_AXP_PRO "['progress'] remoteExecCall ['fnc_BE_broadcast', 2];" +#define INFO_TEXTS ["STR_UI_INFO_AXPREST_TEXT", "STR_UI_INFO_MRESTR_TEXT", "STR_UI_INFO_ACEMEDIC_TEXT"] +#define INFO_TTS ["STR_UI_INFO_AXPREST_TT", "STR_UI_INFO_MRESTR_TT", "STR_UI_INFO_ACEMEDIC_TT"] +/* original ones, i changed them because there 9are no working restrictions #define INFO_TEXTS ["STR_UI_INFO_FIA_TEXT", "STR_UI_INFO_AXPREST_TEXT", "STR_UI_INFO_AXPPRO_TEXT"] -#define INFO_TTS ["STR_UI_INFO_FIA_TT", "STR_UI_INFO_AXPREST_TT", "STR_UI_INFO_AXPPRO_TT"] +#define INFO_TTS ["STR_UI_INFO_FIA_TT", "STR_UI_INFO_AXPREST_TT", "STR_UI_INFO_AXPPRO_TT"] */ // MAINT MENU #define STR_GO_GAR "[] execVM 'garbageCleaner.sqf';" @@ -93,5 +110,5 @@ #define MAINT_MOV "[] remoteExec ['AS_fnc_addMoveObjAction',Slowhand];" #define MAINT_RES "createDialog 'HQ_reset_menu';" -#define MAINT_TEXTS ["STR_GO_GAR_TEXT", "STR_UI_MAINT_PET_TEXT", "STR_UI_MAINT_MOV_TEXT", "STR_UI_MAINT_RES_TEXT"] -#define MAINT_TTS ["STR_GO_GAR_TT", "STR_UI_MAINT_PET_TT", "STR_UI_MAINT_MOV_TT", "STR_UI_MAINT_RES_TT"] +#define MAINT_TEXTS ["STR_UI_MAINT_GAR_TEXT", "STR_UI_MAINT_PET_TEXT", "STR_UI_MAINT_MOV_TEXT", "STR_UI_MAINT_RES_TEXT"] +#define MAINT_TTS ["STR_UI_MAINT_GAR_TT", "STR_UI_MAINT_PET_TT", "STR_UI_MAINT_MOV_TT", "STR_UI_MAINT_RES_TT"] diff --git a/AntistasiOfficial.Altis/UI/defines/menu_player.hpp b/AntistasiOfficial.Altis/UI/defines/menu_player.hpp index 1963d4a3..fc26b13e 100644 --- a/AntistasiOfficial.Altis/UI/defines/menu_player.hpp +++ b/AntistasiOfficial.Altis/UI/defines/menu_player.hpp @@ -27,18 +27,21 @@ #define ACT_AI_DISMISS "[] call AS_fnc_UI_clearMenu;; if (count groupselectedUnits player > 0) then {[groupselectedUnits player] execVM 'REINF\dismissPlayerGroup.sqf'} else { \ if (count (hcSelected player) > 0) then {[hcSelected player] execVM 'REINF\dismissSquad.sqf'}}; \ if ((count groupselectedUnits player == 0) and (count hcSelected player == 0)) then {hint 'No units or squads selected'}" +#define ACT_AI_GARR "closeDialog 0;if (count groupselectedUnits player > 0) then {nul = [groupselectedUnits player] execVM 'REINF\addToGarrison.sqf' \ + } else {if (count (hcSelected player) > 0) then { \ + nul = [hcSelected player] execVM 'REINF\addToGarrison.sqf'}}; \ + if ((count groupselectedUnits player == 0) and (count hcSelected player == 0)) then {hint 'No units or squads selected'}" + // #define ACT_AI_SCAVENGE "[cursorTarget] spawn AS_fnc_startScavenging;" #define ACT_AI_SCAVENGE "hint 'Coming soon™'" #define ACT_AI_STORE "[] spawn AS_fnc_storeAllGear;" #define ACT_AI_RESET "[] spawn AS_fnc_resetAIStatus;" -#define AI_TEXTS_L ["STR_UI_AIMGMT_TEMP_TEXT", "STR_UI_AIMGMT_AH_TEXT", "STR_UI_AIMGMT_AR_TEXT"] -#define AI_TEXTS_R ["STR_UI_AIMGMT_SCV_TEXT", "STR_UI_AIMGMT_STG_TEXT", "STR_UI_AIMGMT_RST_TEXT"] -#define AI_TEXTS_M "STR_UI_AIMGMT_DIS_TEXT" +#define AI_TEXTS_L ["STR_UI_AIMGMT_TEMP_TEXT", "STR_UI_AIMGMT_AH_TEXT", "STR_UI_AIMGMT_AR_TEXT", "STR_UI_AIMGMT_GARR_TEXT"] +#define AI_TEXTS_R ["STR_UI_AIMGMT_SCV_TEXT", "STR_UI_AIMGMT_STG_TEXT", "STR_UI_AIMGMT_RST_TEXT","STR_UI_AIMGMT_DIS_TEXT"] -#define AI_TOOLTIPS_L ["STR_UI_AIMGMT_TEMP_TT", "STR_UI_AIMGMT_AH_TT", "STR_UI_AIMGMT_AR_TT", "STR_UI_AIMGMT_DIS_TT"] -#define AI_TOOLTIPS_R ["STR_UI_AIMGMT_SCV_TT", "STR_UI_AIMGMT_STG_TT", "STR_UI_AIMGMT_RST_TT"] -#define AI_TOOLTIPS_M "STR_UI_AIMGMT_DIS_TT" +#define AI_TOOLTIPS_L ["STR_UI_AIMGMT_TEMP_TT", "STR_UI_AIMGMT_AH_TT", "STR_UI_AIMGMT_AR_TT", "STR_UI_AIMGMT_GARR_TT"] +#define AI_TOOLTIPS_R ["STR_UI_AIMGMT_SCV_TT", "STR_UI_AIMGMT_STG_TT", "STR_UI_AIMGMT_RST_TT", "STR_UI_AIMGMT_DIS_TT"] // VEH MGMT #define ACT_VEH_PGAR "closeDialog 0; [false] call AS_fnc_garageVehicle;" diff --git a/AntistasiOfficial.Altis/UI/functions/fn_UI_createMenu.sqf b/AntistasiOfficial.Altis/UI/functions/fn_UI_createMenu.sqf index 5c6052bd..8aef77d6 100644 --- a/AntistasiOfficial.Altis/UI/functions/fn_UI_createMenu.sqf +++ b/AntistasiOfficial.Altis/UI/functions/fn_UI_createMenu.sqf @@ -85,9 +85,8 @@ call { if (_menu isEqualTo "ai_mgmt") exitWith { _index = NAV_BTNS find (ctrlIDC _idc); _display displayCtrl (LINES select _index) ctrlShow true; - [ACT_BTNS_L6, [ACT_AI_TEMPCTRL, ACT_AI_AUTOHEAL, ACT_AI_REARM], AI_TEXTS_L, AI_TOOLTIPS_L] call _fnc_setup; - [ACT_BTNS_R6, [ACT_AI_SCAVENGE, ACT_AI_STORE, ACT_AI_RESET], AI_TEXTS_R, AI_TOOLTIPS_R] call _fnc_setup; - [(ACT_BTNS_M6 select 3), ACT_AI_DISMISS, AI_TEXTS_M, AI_TOOLTIPS_M] call _fnc_setupSingle; + [ACT_BTNS_L6, [ACT_AI_TEMPCTRL, ACT_AI_AUTOHEAL, ACT_AI_REARM, ACT_AI_GARR], AI_TEXTS_L, AI_TOOLTIPS_L] call _fnc_setup; + [ACT_BTNS_R6, [ACT_AI_SCAVENGE, ACT_AI_STORE, ACT_AI_RESET, ACT_AI_DISMISS], AI_TEXTS_R, AI_TOOLTIPS_R] call _fnc_setup; if (autoHeal) then {_display displayCtrl (ACT_BTNS_L6 select 1) ctrlSetTextColor MENU_TEXT_COLOR_TRUE_ARRAY} else {_display displayCtrl (ACT_BTNS_L6 select 1) ctrlSetTextColor MENU_TEXT_COLOR_FALSE_ARRAY}; }; @@ -148,7 +147,7 @@ call { if (_menu isEqualTo "com_info") exitWith { _index = NAV_BTNS find (ctrlIDC _idc); _display displayCtrl (LINES select _index) ctrlShow true; - [ACT_BTNS_M4, [INFO_FIA, INFO_AXP_RES, INFO_AXP_PRO], INFO_TEXTS, INFO_TTS] call _fnc_setup; + [ACT_BTNS_M4, [INFO_AXP_RES, INFO_MRESTR, INFO_ACEMEDIC], INFO_TEXTS, INFO_TTS] call _fnc_setup; }; if (_menu isEqualTo "com_maint") exitWith { diff --git a/AntistasiOfficial.Altis/UI/functions/fn_UI_setTText.sqf b/AntistasiOfficial.Altis/UI/functions/fn_UI_setTText.sqf index 618f1271..ff7930c2 100644 --- a/AntistasiOfficial.Altis/UI/functions/fn_UI_setTText.sqf +++ b/AntistasiOfficial.Altis/UI/functions/fn_UI_setTText.sqf @@ -1,4 +1,4 @@ params [["_text", ""]]; if !(_text == "") then {_text = localize _text}; -findDisplay 100 displayCtrl 1100 ctrlSetStructuredText parseText _text; +findDisplay 100 displayCtrl 1100 ctrlSetStructuredText parseText format ["%1",_text]; diff --git a/AntistasiOfficial.Altis/UI/startMenu.sqf b/AntistasiOfficial.Altis/UI/startMenu.sqf index 771f7507..ce880ed7 100644 --- a/AntistasiOfficial.Altis/UI/startMenu.sqf +++ b/AntistasiOfficial.Altis/UI/startMenu.sqf @@ -8,7 +8,7 @@ A3AS_menu_escEH = (findDisplay 100) displayAddEventHandler ["KeyDown", "if ((_th ((findDisplay 100) displayCtrl _x) ctrlEnable false; } forEach [1301, 1302, 1303, 1304]; -if !(enableRestart) then { +if !(freshstart) then { ((findDisplay 100) displayCtrl 2502) ctrlEnable false; }; diff --git a/AntistasiOfficial.Altis/VCOMAI/AIBEHAVIORNEW.fsm b/AntistasiOfficial.Altis/VCOMAI/AIBEHAVIORNEW.fsm new file mode 100644 index 00000000..d6f4ceb4 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/AIBEHAVIORNEW.fsm @@ -0,0 +1,3666 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"Begin_State",0,250,27.230743,699.276978,117.230728,749.276978,0.000000,"Begin State"}; +item1[] = {"_UseAI_NO",4,218,-70.094734,688.852905,13.254786,724.812988,50.000000,"_UseAI NO"}; +item2[] = {"_UseAI_YES",4,218,35.119236,543.267029,125.119293,593.267029,49.000000,"_UseAI YES"}; +item3[] = {"Exit_FSM",1,250,-171.091415,679.590027,-98.826019,714.811157,0.000000,"Exit FSM"}; +item4[] = {"Set_Basic",2,250,8.368561,430.024841,98.368538,480.024811,0.000000,"Set Basic"}; +item5[] = {"Check_Rank_0",4,218,294.896698,193.708069,384.896729,243.708069,50.000000,"Check Rank 0"}; +item6[] = {"Check_Rank_1",4,218,201.155487,192.422302,291.155487,242.422241,49.000000,"Check Rank 1"}; +item7[] = {"Check_Rank_2",4,218,113.822983,207.420517,203.822968,257.420410,48.000000,"Check Rank 2"}; +item8[] = {"Check_Rank_3",4,218,17.074921,196.342300,107.074928,246.342163,47.000000,"Check Rank 3"}; +item9[] = {"Check_Rank_4",4,218,-75.941910,193.741028,14.058075,243.740845,46.000000,"Check Rank 4"}; +item10[] = {"Check_Rank_5",4,218,-171.374008,193.741028,-81.374023,243.740845,44.000000,"Check Rank 5"}; +item11[] = {"Check_Rank_6",4,218,-274.228577,194.801437,-184.228592,244.801270,43.000000,"Check Rank 6"}; +item12[] = {"Rank_6",2,250,-274.743591,113.433189,-184.743546,163.433182,0.000000,"Rank 6"}; +item13[] = {"Rank_5",2,250,-176.130539,114.493553,-86.130432,164.493546,0.000000,"Rank 5"}; +item14[] = {"Rank_4",2,250,-82.819153,114.493584,7.180923,164.493576,0.000000,"Rank 4"}; +item15[] = {"Rank_3",2,250,10.492203,116.614281,100.492287,166.614273,0.000000,"Rank 3"}; +item16[] = {"Rank_2",2,250,108.044998,118.735039,198.045074,168.735031,0.000000,"Rank 2"}; +item17[] = {"Rank_1",2,250,204.537415,115.553947,294.537506,165.553940,0.000000,"Rank 1"}; +item18[] = {"Rank_0",2,250,315.812500,118.358521,405.812592,168.358505,0.000000,"Rank 0"}; +item19[] = {"Moving_Along",8,218,8.288406,-22.891024,98.288376,27.108961,0.000000,"Moving Along"}; +item20[] = {"Leader_Or_Not",2,250,8.063854,-180.435211,98.063927,-130.435410,0.000000,"Leader" \n "Or" \n "Not"}; +item21[] = {"Leader",4,218,850.242676,-424.281799,950.242676,-374.281799,50.000000,"Leader"}; +item22[] = {"SubLeader",4,218,-773.983521,-440.744019,-683.983521,-390.744019,49.000000,"SubLeader"}; +item23[] = {"Normal_Unit",8,218,25.000000,-675.000000,125.000000,-625.000000,47.000000,"Normal Unit"}; +item24[] = {"Dead",4,218,317.491608,-59.775875,407.491547,-9.775851,55.000000,"Dead"}; +item25[] = {"Dead_Captain",1,250,722.460815,112.360428,812.460754,162.360382,0.000000,"Dead Captain"}; +item26[] = {"_UseAI_NO_1",4,218,-545.149048,-46.611023,-455.148865,3.388977,998.000000,"_UseAI NO"}; +item27[] = {"NO_AI",1,250,-668.139038,-47.939880,-578.139160,2.060120,0.000000,"NO AI"}; +item28[] = {"IsPlayer",4,218,-70.094734,727.210999,13.254786,763.171082,51.000000,"IsPlayer"}; +item29[] = {"Exit_FSM_1",1,250,-174.287918,722.209961,-102.022537,757.431091,0.000000,"Exit FSM"}; +item30[] = {"Leader_Cycle_Beg",3,250,1091.346924,-430.768768,1191.346924,-380.768768,0.000000,"Leader Cycle Beginning"}; +item31[] = {"Wait",4,218,1100.000000,-300.000000,1200.000000,-250.000000,0.000000,"Wait"}; +item32[] = {"InVehicle",4,218,1350.000000,-425.000000,1450.000000,-375.000000,105.000000,"InVehicle"}; +item33[] = {"NotDriver",4,218,1700.000000,-375.000000,1750.000000,-350.000000,49.000000,"NotDriver"}; +item34[] = {"IsDriver",4,218,1700.000000,-450.000000,1750.000000,-425.000000,50.000000,"IsDriver"}; +item35[] = {"IsDriver_Check",3,250,1575.000000,-425.000000,1675.000000,-375.000000,0.000000,"IsDriver Check"}; +item36[] = {"Driver_Checks",3,250,1800.000000,-525.000000,1900.000000,-475.000000,0.000000,"Driver Checks"}; +item37[] = {"Wait",4,218,1825.000000,-450.000000,1875.000000,-425.000000,0.000000,"Wait"}; +item38[] = {"",7,210,1846.000000,-3.999995,1854.000000,3.999995,0.000000,""}; +item39[] = {"Dead",4,218,1900.000000,-450.000000,1950.000000,-425.000000,55.000000,"Dead"}; +item40[] = {"Exit",1,250,1950.000000,-425.000000,1975.000000,-400.000000,0.000000,"Exit"}; +item41[] = {"CombatNearby",4,218,1950.000000,-525.000000,2050.000000,-475.000000,30.000000,"CombatNearby"}; +item42[] = {"Engaged",4,218,1803.593872,-621.563599,1903.593872,-571.563599,40.000000,"Engaged"}; +item43[] = {"CheckNow",2,250,1950.000000,-625.000000,2050.000000,-575.000000,0.000000,"CheckNow"}; +item44[] = {"Wait2",4,218,1950.000000,-750.000000,2050.000000,-700.000000,0.000000,"Wait2"}; +item45[] = {"Dead",4,218,2075.000000,-625.000000,2125.000000,-575.000000,55.000000,"Dead"}; +item46[] = {"Exit_1",1,250,2150.000000,-625.000000,2200.000000,-575.000000,0.000000,"Exit"}; +item47[] = {"",7,210,2246.000000,-729.000000,2254.000000,-721.000000,0.000000,""}; +item48[] = {"",7,210,2246.000000,-554.000000,2254.000000,-546.000000,0.000000,""}; +item49[] = {"",7,210,2246.000000,-3.999997,2254.000000,3.999997,0.000000,""}; +item50[] = {"",7,210,1425.000000,-25.000000,1433.000000,-17.000000,0.000000,""}; +item51[] = {"",7,210,1216.682373,-21.672943,1224.682373,-13.672943,0.000000,""}; +item52[] = {"Combat",4,218,1300.000000,-550.000000,1400.000000,-500.000000,100.000000,"Combat"}; +item53[] = {"Combat_Brain",3,250,1405.402222,-720.957703,1505.402222,-670.957703,0.000000,"Combat Brain"}; +item54[] = {"Wait",4,218,1951.309937,-950.000000,2051.310059,-900.000000,0.000000,"Wait"}; +item55[] = {"Dead",4,218,1592.475952,-643.446655,1642.475952,-593.446655,1000.000000,"Dead"}; +item56[] = {"Exit_2",1,250,1682.301636,-559.888794,1732.301636,-509.888794,0.000000,"Exit"}; +item57[] = {"FLANKBEHAVIOR",2,250,1673.671509,-882.037170,1773.671509,-832.037170,0.000000,"FLANKBEHAVIOR"}; +item58[] = {"Flank_Orders",4,218,1560.039551,-797.178101,1635.039551,-747.178101,80.000000,"Flank Orders"}; +item59[] = {"Move_Move_Move",4,218,1479.272339,-824.165649,1554.272339,-774.165649,40.000000,"Move Move Move"}; +item60[] = {"MoveUnit",2,250,1565.120605,-920.020508,1665.120605,-870.020508,0.000000,"MoveUnit"}; +item61[] = {"Hold_WP",4,218,1200.000000,-575.000000,1300.000000,-525.000000,48.000000,"Hold WP"}; +item62[] = {"Garrison",2,250,1200.000000,-700.000000,1300.000000,-650.000000,0.000000,"Garrison"}; +item63[] = {"_",4,218,1200.000000,-775.000000,1290.000000,-725.000000,0.000000,""}; +item64[] = {"LightGarrison",4,218,1387.922485,-857.948608,1487.922485,-807.948608,30.000000,"LightGarrison"}; +item65[] = {"Light_Garrison",2,250,1477.364014,-973.817993,1577.364014,-923.817993,0.000000,"Light Garrison"}; +item66[] = {"CheckIfStatic",4,218,1308.322021,-893.696167,1408.322021,-843.696167,70.000000,"CheckIfStatic"}; +item67[] = {"",7,210,1308.500000,-816.500000,1316.500000,-808.500000,0.000000,""}; +item68[] = {"SetupStatic",2,250,1425.000000,-1025.000000,1525.000000,-975.000000,0.000000,"SetupStatic"}; +item69[] = {"SatchelPlant",4,218,1235.466064,-933.338074,1335.466064,-883.338074,65.000000,"SatchelPlant"}; +item70[] = {"PlantTheSatch",2,250,1375.000000,-1075.000000,1475.000000,-1025.000000,0.000000,"PlantTheSatch"}; +item71[] = {"ArtyUse_",4,218,1175.000000,-975.000000,1275.000000,-925.000000,79.000000,"ArtyUse" \n ""}; +item72[] = {"ArtilleryCalled",2,250,1300.000000,-1125.000000,1400.000000,-1075.000000,0.000000,"ArtilleryCalled" \n ""}; +item73[] = {"Unit_Cycle_Begin",3,250,-100.000000,-1875.000000,0.000000,-1825.000000,0.000000,"Unit Cycle Beginning"}; +item74[] = {"Wait",4,218,125.000000,-1750.000000,225.000000,-1700.000000,0.000000,"Wait"}; +item75[] = {"InVehicle",4,218,170.670715,-1906.006104,270.670715,-1856.006104,105.000000,"InVehicle"}; +item76[] = {"NotDriver",4,218,500.000000,-1825.000000,550.000000,-1800.000000,49.000000,"NotDriver"}; +item77[] = {"IsDriver",4,218,500.000000,-1900.000000,550.000000,-1875.000000,50.000000,"IsDriver"}; +item78[] = {"IsDriver_Check_1",3,250,375.000000,-1875.000000,475.000000,-1825.000000,0.000000,"IsDriver Check"}; +item79[] = {"Driver_Checks_1",3,250,600.000000,-1975.000000,700.000000,-1925.000000,0.000000,"Driver Checks"}; +item80[] = {"Wait",4,218,625.000000,-1900.000000,675.000000,-1875.000000,0.000000,"Wait"}; +item81[] = {"",7,210,646.000000,-1454.000000,654.000000,-1446.000000,0.000000,""}; +item82[] = {"Dead",4,218,700.000000,-1900.000000,750.000000,-1875.000000,55.000000,"Dead"}; +item83[] = {"Exit_3",1,250,750.000000,-1875.000000,775.000000,-1850.000000,0.000000,"Exit"}; +item84[] = {"CombatNearby",4,218,750.000000,-1975.000000,850.000000,-1925.000000,30.000000,"CombatNearby"}; +item85[] = {"Engaged",4,218,600.000000,-2050.000000,700.000000,-2000.000000,40.000000,"Engaged"}; +item86[] = {"CheckNow_1",2,250,750.000000,-2075.000000,850.000000,-2025.000000,0.000000,"CheckNow"}; +item87[] = {"Wait2",4,218,750.000000,-2200.000000,850.000000,-2150.000000,0.000000,"Wait2"}; +item88[] = {"Dead",4,218,875.000000,-2075.000000,925.000000,-2025.000000,55.000000,"Dead"}; +item89[] = {"Exit_4",1,250,950.000000,-2075.000000,1000.000000,-2025.000000,0.000000,"Exit"}; +item90[] = {"",7,210,1046.000000,-2179.000000,1054.000000,-2171.000000,0.000000,""}; +item91[] = {"",7,210,1046.000000,-2003.999878,1054.000000,-1996.000000,0.000000,""}; +item92[] = {"",7,210,1046.000000,-1454.000000,1054.000000,-1446.000000,0.000000,""}; +item93[] = {"",7,210,425.000000,-1475.000000,433.000000,-1467.000000,0.000000,""}; +item94[] = {"",7,210,300.000000,-1475.000000,308.000000,-1467.000000,0.000000,""}; +item95[] = {"Combat",4,218,100.000000,-2000.000000,200.000000,-1950.000000,100.000000,"Combat"}; +item96[] = {"Combat_Brain_1",3,250,252.073029,-2128.906006,352.073059,-2078.906006,0.000000,"Combat Brain"}; +item97[] = {"Wait",4,218,700.000000,-2400.000000,800.000000,-2350.000000,0.000000,"Wait"}; +item98[] = {"Dead",4,218,475.000000,-2125.000000,525.000000,-2075.000000,10000.000000,"Dead"}; +item99[] = {"Exit_5",1,250,475.000000,-2025.000000,525.000000,-1975.000000,0.000000,"Exit"}; +item100[] = {"SubLeader_Cycle",3,250,-1500.000000,-1225.000000,-1400.000000,-1175.000000,0.000000,"SubLeader Cycle Beginning"}; +item101[] = {"Wait",4,218,-1250.000000,-1100.000000,-1150.000000,-1050.000000,0.000000,"Wait"}; +item102[] = {"Move_Move_Move",4,218,330.362885,-2239.521240,405.362885,-2189.521240,40.000000,"Move Move Move"}; +item103[] = {"MoveUnit_1",2,250,411.235229,-2319.979736,511.235291,-2269.979736,0.000000,"MoveUnit"}; +item104[] = {"InVehicle",4,218,-1250.000000,-1225.000000,-1150.000000,-1175.000000,105.000000,"InVehicle"}; +item105[] = {"NotDriver",4,218,-900.000000,-1175.000000,-850.000000,-1150.000000,49.000000,"NotDriver"}; +item106[] = {"IsDriver",4,218,-900.000000,-1250.000000,-850.000000,-1225.000000,50.000000,"IsDriver"}; +item107[] = {"IsDriver_Check_2",3,250,-1025.000000,-1225.000000,-925.000000,-1175.000000,0.000000,"IsDriver Check"}; +item108[] = {"Driver_Checks_2",3,250,-800.000000,-1325.000000,-700.000000,-1275.000000,0.000000,"Driver Checks"}; +item109[] = {"CheckIfStatic",4,218,158.912964,-2322.029053,258.912964,-2272.029053,80.000000,"CheckIfStatic"}; +item110[] = {"",7,210,108.500000,-2266.500000,116.500000,-2258.500000,0.000000,""}; +item111[] = {"SetupStatic_1",2,250,262.137390,-2461.630371,362.137390,-2411.630371,0.000000,"SetupStatic"}; +item112[] = {"SatchelPlant",4,218,80.370094,-2387.530273,180.370087,-2337.530273,70.000000,"SatchelPlant"}; +item113[] = {"PlantTheSatch_1",2,250,149.746582,-2566.593750,249.746597,-2516.593750,0.000000,"PlantTheSatch"}; +item114[] = {"Wait",4,218,-775.000000,-1250.000000,-725.000000,-1225.000000,0.000000,"Wait"}; +item115[] = {"",7,210,-754.000000,-804.000000,-746.000000,-796.000000,0.000000,""}; +item116[] = {"Dead",4,218,-700.000000,-1250.000000,-650.000000,-1225.000000,55.000000,"Dead"}; +item117[] = {"Exit_6",1,250,-650.000000,-1225.000000,-625.000000,-1200.000000,0.000000,"Exit"}; +item118[] = {"CombatNearby",4,218,-650.000000,-1325.000000,-550.000000,-1275.000000,30.000000,"CombatNearby"}; +item119[] = {"Engaged",4,218,-800.000000,-1400.000000,-700.000000,-1350.000000,40.000000,"Engaged"}; +item120[] = {"CheckNow_2",2,250,-650.000000,-1425.000000,-550.000000,-1375.000000,0.000000,"CheckNow"}; +item121[] = {"Wait2",4,218,-650.000000,-1550.000000,-550.000000,-1500.000000,0.000000,"Wait2"}; +item122[] = {"Dead",4,218,-525.000000,-1425.000000,-475.000000,-1375.000000,55.000000,"Dead"}; +item123[] = {"Exit_7",1,250,-450.000000,-1425.000000,-400.000000,-1375.000000,0.000000,"Exit"}; +item124[] = {"",7,210,-354.000000,-1529.000000,-346.000000,-1521.000000,0.000000,""}; +item125[] = {"",7,210,-354.000000,-1353.999878,-346.000000,-1346.000000,0.000000,""}; +item126[] = {"",7,210,-354.000000,-804.000000,-346.000000,-796.000000,0.000000,""}; +item127[] = {"",7,210,-900.000000,-825.000000,-892.000000,-817.000000,0.000000,""}; +item128[] = {"",7,210,-1000.000000,-825.000000,-992.000000,-817.000000,0.000000,""}; +item129[] = {"Combat",4,218,-1300.000000,-1350.000000,-1200.000000,-1300.000000,100.000000,"Combat"}; +item130[] = {"Combat_Brain_2",3,250,-1160.132324,-1514.846802,-1060.132324,-1464.846802,0.000000,"Combat Brain"}; +item131[] = {"Wait",4,218,-700.000000,-1750.000000,-600.000000,-1700.000000,0.000000,"Wait"}; +item132[] = {"Dead_1",4,218,-925.000000,-1475.000000,-875.000000,-1425.000000,100.000000,"Dead"}; +item133[] = {"Exit_8",1,250,-925.000000,-1375.000000,-875.000000,-1325.000000,0.000000,"Exit"}; +item134[] = {"Get_In_Static",2,250,75.000000,-2700.000000,175.000000,-2650.000000,0.000000,"Get In Static"}; +item135[] = {"Arm_Static_Weapo",4,218,1018.250000,-1036.230469,1118.250000,-986.230713,45.000000,"Arm Static Weapon"}; +item136[] = {"Get_In_Static_1",2,250,1258.157104,-1225.000000,1358.157104,-1175.000000,0.000000,"Get In Static"}; +item137[] = {"Arm_Static_Weapo",4,218,-35.498486,-2428.519775,64.501526,-2378.519775,40.000000,"Arm Static Weapon"}; +item138[] = {"MinePlant",4,218,1100.000000,-1000.000000,1200.000000,-950.000000,55.000000,"MinePlant"}; +item139[] = {"PlaceMine",2,250,1275.000000,-1175.000000,1375.000000,-1125.000000,0.000000,"PlaceMine"}; +item140[] = {"MinePlant",4,218,-189.199341,-2485.619385,-89.199387,-2435.619385,55.000000,"MinePlant"}; +item141[] = {"PlaceMine_1",2,250,50.000000,-2775.000000,150.000000,-2725.000000,0.000000,"PlaceMine"}; +item142[] = {"Deploy_UAV",2,250,1225.000000,-1275.000000,1325.000000,-1225.000000,0.000000,"Deploy UAV"}; +item143[] = {"Has_UAV",4,218,923.853638,-1065.406860,1023.852600,-1015.407104,50.000000,"Has UAV"}; +item144[] = {"Deploy_UAV_1",2,250,75.000000,-2850.000000,175.000000,-2800.000000,0.000000,"Deploy UAV"}; +item145[] = {"Has_UAV",4,218,-325.000000,-2550.000000,-225.000000,-2500.000000,50.000000,"Has UAV"}; +item146[] = {"_UseAI_NO",4,218,-500.000000,-125.000000,-400.000000,-75.000000,999.000000,"_UseAI NO"}; +item147[] = {"Dead_1",4,218,368.322937,-2033.757324,418.322937,-1983.757324,1001.000000,"Dead"}; +item148[] = {"Dead",4,218,-1014.595825,-1403.232788,-964.595764,-1353.232788,1001.000000,"Dead"}; +item149[] = {"Clear_Garrison",4,218,821.945435,-1100.568970,921.944519,-1050.569214,60.000000,"Clear Garrison"}; +item150[] = {"Clear_Building",2,250,1178.388672,-1335.060913,1278.388672,-1285.060913,0.000000,"Clear Building"}; +item151[] = {"Dismissed_WP",4,218,1069.226074,-582.838074,1169.226074,-532.838074,47.000000,"Dismissed WP"}; +item152[] = {"Loiter",2,250,952.846863,-717.541382,1052.846924,-667.541382,0.000000,"Loiter"}; +item153[] = {"_",4,218,808.332397,-714.435547,898.332397,-664.435547,0.000000,""}; +item154[] = {"__0_SECONDS__1",4,218,-354.346649,-464.168213,-264.346527,-414.168213,51.000000,"30 SECONDS" \n ""}; +item155[] = {"Move_Move_Move",4,218,-1094.038696,-1648.805420,-1019.038696,-1598.805420,40.000000,"Move Move Move"}; +item156[] = {"MoveUnit_2",2,250,-1052.110596,-1756.713745,-952.110840,-1706.713745,0.000000,"MoveUnit"}; +item157[] = {"CheckIfStatic",4,218,-1255.274536,-1754.423340,-1155.274536,-1704.423340,80.000000,"CheckIfStatic"}; +item158[] = {"",7,210,-1285.538696,-1690.305420,-1277.538696,-1682.305420,0.000000,""}; +item159[] = {"SetupStatic_2",2,250,-1157.802856,-1885.322266,-1057.802856,-1835.322510,0.000000,"SetupStatic"}; +item160[] = {"SatchelPlant",4,218,-1319.038696,-1798.805420,-1219.038696,-1748.805420,70.000000,"SatchelPlant"}; +item161[] = {"PlantTheSatch_2",2,250,-1219.038696,-1948.805054,-1119.038696,-1898.805176,0.000000,"PlantTheSatch"}; +item162[] = {"Get_In_Static_2",2,250,-1319.038696,-2123.805176,-1219.038696,-2073.805176,0.000000,"Get In Static"}; +item163[] = {"Arm_Static_Weapo",4,218,-1482.326538,-1891.363281,-1382.326538,-1841.363403,40.000000,"Arm Static Weapon"}; +item164[] = {"MinePlant",4,218,-1619.038696,-1948.805054,-1519.038696,-1898.805176,55.000000,"MinePlant"}; +item165[] = {"PlaceMine_2",2,250,-1344.038696,-2198.805176,-1244.038696,-2148.805176,0.000000,"PlaceMine"}; +item166[] = {"Deploy_UAV_2",2,250,-1319.038696,-2273.805176,-1219.038696,-2223.805176,0.000000,"Deploy UAV"}; +item167[] = {"Has_UAV",4,218,-1719.038696,-1973.805176,-1619.038696,-1923.805176,50.000000,"Has UAV"}; +item168[] = {"__0_SECONDS__",4,218,-272.441956,-459.941071,-182.441971,-409.941040,52.000000,"20 SECONDS" \n "" \n ""}; +item169[] = {"RANDOM_TICK__",4,218,-393.918396,-516.784180,-303.918457,-466.783875,55.000000,"RANDOM TICK" \n "" \n ""}; +item170[] = {"__0_SECONDS_",4,218,-295.834381,-537.704712,-205.834427,-487.704651,53.000000,"60 SECONDS" \n ""}; +item171[] = {"__20_SECONDS__",4,218,-198.343918,-482.766571,-108.343933,-432.766357,54.000000,"120 SECONDS" \n "" \n ""}; +item172[] = {"__5_SECONDS_",4,218,-385.903229,-572.847595,-295.903107,-522.847534,56.000000,"45 SECONDS" \n ""}; +item173[] = {"RUSH__",4,218,1681.566650,-655.923218,1756.566650,-605.923218,100.000000,"RUSH!!"}; +item174[] = {"SetSpeed_",3,250,1804.131958,-718.425842,1904.131958,-668.425842,0.000000,"SetSpeed!"}; +item175[] = {"RUSH__",4,218,240.753052,-2269.181641,315.753082,-2219.181641,100.000000,"RUSH!!"}; +item176[] = {"SetSpeed__1",3,250,311.523010,-2395.833740,411.522766,-2345.833496,0.000000,"SetSpeed!"}; +item177[] = {"RUSH__",4,218,-1196.868652,-1675.970093,-1121.868652,-1625.970093,100.000000,"RUSH!!"}; +item178[] = {"SetSpeed__2",3,250,-1119.003052,-1813.460205,-1019.003113,-1763.459961,0.000000,"SetSpeed!"}; +item179[] = {"ArtilleryCheck_",4,218,553.189880,-269.053467,643.189880,-219.053543,1005.000000,"ArtilleryCheck" \n "" \n ""}; +item180[] = {"Do_Nothing_See_Nothing",2,250,787.474121,-217.705551,877.474182,-167.705750,0.000000,"Do Nothing" \n "See Nothing" \n "Hear Nothing"}; +item181[] = {"ArtilleryCheck_",4,218,554.373535,-198.483109,644.373596,-148.483078,1005.000000,"ArtilleryCheck" \n "" \n ""}; +item182[] = {"Dead",4,218,819.523499,-104.957283,909.523438,-54.957245,55.000000,"Dead"}; +item183[] = {"IsPlayer",4,218,918.704529,-179.969238,1008.704529,-129.969330,60.000000,"IsPlayer"}; +item184[] = {"Null",4,218,866.233826,-140.977524,966.233826,-90.977516,100.000000,"Null"}; +item185[] = {"Null_1",4,218,971.595520,-220.269669,1071.595459,-170.269669,100.000000,"Null"}; +item186[] = {"Moving_Along",8,218,479.852753,177.382263,569.852539,227.382294,0.000000,"Moving Along"}; +item187[] = {"MEDIC_CHECK__",4,218,-203.284210,-554.332214,-113.284264,-504.331909,57.000000,"MEDIC CHECK" \n "" \n ""}; +item188[] = {"Wait",4,218,776.174072,-299.534790,876.174072,-249.534790,0.000000,"Wait"}; +item189[] = {"Wait",3,250,506.670776,-1719.443359,606.670837,-1669.443359,0.000000,"Wait"}; +item190[] = {"Wait",4,218,477.402802,-1584.173340,577.403015,-1534.173340,0.000000,"Wait"}; +item191[] = {"Wait_1",3,250,-903.951233,-1102.672852,-803.951172,-1052.672852,0.000000,"Wait"}; +item192[] = {"Wait",4,218,-885.038635,-1009.072388,-785.038452,-959.072327,0.000000,"Wait"}; +item193[] = {"Wait_2",3,250,1668.814941,-290.336578,1768.814941,-240.336578,0.000000,"Wait"}; +item194[] = {"Wait",4,218,1657.353638,-147.559387,1757.353760,-97.559326,0.000000,"Wait"}; +item195[] = {"Simulation_Pause",4,218,-485.473785,79.880402,-385.473785,129.880402,1050.000000,"Simulation Pause"}; +item196[] = {"Simulation_Pause",2,250,-607.570007,165.046722,-517.569946,215.046677,0.000000,"Simulation Pause"}; +item197[] = {"Simulation_Pause",4,218,-462.449554,189.586151,-362.449585,239.585999,1005.000000,"Simulation Pause"}; +item198[] = {"Wait",4,218,-737.011047,165.630585,-637.010803,215.630661,0.000000,"Wait"}; +item199[] = {"Enemy_Delay",4,4314,225.032883,-504.055328,315.032654,-454.055298,900.000000,"Enemy Delay"}; +item200[] = {"Temp_Halt",2,250,362.429901,-560.118835,452.429901,-510.118774,0.000000,"Temp Halt"}; +item201[] = {"Enable_AI",4,218,253.191132,-411.323303,343.191376,-361.323181,15.000000,"Enable AI"}; +item202[] = {"Wait",4,218,352.274658,-642.762512,452.274902,-592.762451,0.000000,"Wait"}; +item203[] = {"Check_Turn",4,218,-66.483948,-270.005249,23.515968,-220.005188,60.000000,"Check Turn"}; +item204[] = {"Begin_Basic_Checks",2,250,-72.642136,-337.329895,17.357916,-287.329895,0.000000,"Begin Basic Checks Here"}; +item205[] = {"Go_Back",4,218,-30.583069,-421.095398,59.416939,-371.095398,100.000000,"Go Back"}; +link0[] = {0,1}; +link1[] = {0,2}; +link2[] = {0,28}; +link3[] = {1,3}; +link4[] = {2,4}; +link5[] = {4,5}; +link6[] = {4,6}; +link7[] = {4,7}; +link8[] = {4,8}; +link9[] = {4,9}; +link10[] = {4,10}; +link11[] = {4,11}; +link12[] = {4,186}; +link13[] = {5,18}; +link14[] = {6,17}; +link15[] = {7,16}; +link16[] = {8,15}; +link17[] = {9,14}; +link18[] = {10,13}; +link19[] = {11,12}; +link20[] = {12,19}; +link21[] = {13,19}; +link22[] = {14,19}; +link23[] = {15,19}; +link24[] = {16,19}; +link25[] = {17,19}; +link26[] = {18,19}; +link27[] = {19,20}; +link28[] = {20,21}; +link29[] = {20,22}; +link30[] = {20,23}; +link31[] = {20,24}; +link32[] = {20,26}; +link33[] = {20,146}; +link34[] = {20,179}; +link35[] = {20,195}; +link36[] = {20,199}; +link37[] = {20,203}; +link38[] = {21,30}; +link39[] = {22,100}; +link40[] = {23,73}; +link41[] = {24,25}; +link42[] = {26,27}; +link43[] = {28,29}; +link44[] = {30,31}; +link45[] = {30,32}; +link46[] = {30,52}; +link47[] = {30,61}; +link48[] = {30,151}; +link49[] = {31,50}; +link50[] = {32,35}; +link51[] = {33,193}; +link52[] = {34,36}; +link53[] = {35,33}; +link54[] = {35,34}; +link55[] = {36,37}; +link56[] = {36,39}; +link57[] = {36,41}; +link58[] = {36,42}; +link59[] = {37,38}; +link60[] = {38,50}; +link61[] = {39,40}; +link62[] = {41,43}; +link63[] = {42,43}; +link64[] = {43,44}; +link65[] = {43,45}; +link66[] = {44,47}; +link67[] = {45,46}; +link68[] = {47,48}; +link69[] = {48,49}; +link70[] = {49,38}; +link71[] = {50,51}; +link72[] = {51,20}; +link73[] = {52,53}; +link74[] = {53,54}; +link75[] = {53,55}; +link76[] = {53,58}; +link77[] = {53,59}; +link78[] = {53,64}; +link79[] = {53,67}; +link80[] = {53,173}; +link81[] = {54,47}; +link82[] = {55,56}; +link83[] = {57,54}; +link84[] = {58,57}; +link85[] = {59,60}; +link86[] = {60,54}; +link87[] = {61,62}; +link88[] = {62,63}; +link89[] = {63,20}; +link90[] = {64,65}; +link91[] = {65,54}; +link92[] = {66,68}; +link93[] = {67,66}; +link94[] = {67,69}; +link95[] = {67,71}; +link96[] = {67,135}; +link97[] = {67,138}; +link98[] = {67,143}; +link99[] = {67,149}; +link100[] = {68,54}; +link101[] = {69,70}; +link102[] = {70,54}; +link103[] = {71,72}; +link104[] = {72,54}; +link105[] = {73,74}; +link106[] = {73,75}; +link107[] = {73,95}; +link108[] = {74,93}; +link109[] = {75,78}; +link110[] = {76,189}; +link111[] = {77,79}; +link112[] = {78,76}; +link113[] = {78,77}; +link114[] = {79,80}; +link115[] = {79,82}; +link116[] = {79,84}; +link117[] = {79,85}; +link118[] = {80,81}; +link119[] = {81,93}; +link120[] = {82,83}; +link121[] = {84,86}; +link122[] = {85,86}; +link123[] = {86,87}; +link124[] = {86,88}; +link125[] = {87,90}; +link126[] = {88,89}; +link127[] = {90,91}; +link128[] = {91,92}; +link129[] = {92,81}; +link130[] = {93,94}; +link131[] = {94,20}; +link132[] = {95,96}; +link133[] = {96,97}; +link134[] = {96,98}; +link135[] = {96,102}; +link136[] = {96,110}; +link137[] = {96,147}; +link138[] = {96,175}; +link139[] = {97,90}; +link140[] = {98,99}; +link141[] = {100,101}; +link142[] = {100,104}; +link143[] = {100,129}; +link144[] = {101,127}; +link145[] = {102,103}; +link146[] = {103,97}; +link147[] = {104,107}; +link148[] = {105,191}; +link149[] = {106,108}; +link150[] = {107,105}; +link151[] = {107,106}; +link152[] = {108,114}; +link153[] = {108,116}; +link154[] = {108,118}; +link155[] = {108,119}; +link156[] = {109,111}; +link157[] = {110,109}; +link158[] = {110,112}; +link159[] = {110,137}; +link160[] = {110,140}; +link161[] = {110,145}; +link162[] = {111,97}; +link163[] = {112,113}; +link164[] = {113,97}; +link165[] = {114,115}; +link166[] = {115,127}; +link167[] = {116,117}; +link168[] = {118,120}; +link169[] = {119,120}; +link170[] = {120,121}; +link171[] = {120,122}; +link172[] = {121,124}; +link173[] = {122,123}; +link174[] = {124,125}; +link175[] = {125,126}; +link176[] = {126,115}; +link177[] = {127,128}; +link178[] = {128,20}; +link179[] = {129,130}; +link180[] = {130,131}; +link181[] = {130,132}; +link182[] = {130,148}; +link183[] = {130,155}; +link184[] = {130,158}; +link185[] = {130,177}; +link186[] = {131,124}; +link187[] = {132,133}; +link188[] = {134,97}; +link189[] = {135,136}; +link190[] = {136,54}; +link191[] = {137,134}; +link192[] = {138,139}; +link193[] = {139,54}; +link194[] = {140,141}; +link195[] = {141,97}; +link196[] = {142,54}; +link197[] = {143,142}; +link198[] = {144,97}; +link199[] = {145,144}; +link200[] = {146,27}; +link201[] = {147,99}; +link202[] = {148,133}; +link203[] = {149,150}; +link204[] = {150,54}; +link205[] = {151,152}; +link206[] = {152,153}; +link207[] = {153,20}; +link208[] = {154,204}; +link209[] = {155,156}; +link210[] = {156,131}; +link211[] = {157,159}; +link212[] = {158,157}; +link213[] = {158,160}; +link214[] = {158,163}; +link215[] = {158,164}; +link216[] = {158,167}; +link217[] = {159,131}; +link218[] = {160,161}; +link219[] = {161,131}; +link220[] = {162,131}; +link221[] = {163,162}; +link222[] = {164,165}; +link223[] = {165,131}; +link224[] = {166,131}; +link225[] = {167,166}; +link226[] = {168,204}; +link227[] = {169,204}; +link228[] = {170,204}; +link229[] = {171,204}; +link230[] = {172,204}; +link231[] = {173,174}; +link232[] = {174,54}; +link233[] = {175,176}; +link234[] = {176,97}; +link235[] = {177,178}; +link236[] = {178,131}; +link237[] = {179,180}; +link238[] = {180,181}; +link239[] = {180,182}; +link240[] = {180,183}; +link241[] = {180,184}; +link242[] = {180,185}; +link243[] = {180,188}; +link244[] = {181,20}; +link245[] = {182,25}; +link246[] = {183,25}; +link247[] = {184,25}; +link248[] = {185,25}; +link249[] = {186,20}; +link250[] = {187,204}; +link251[] = {188,180}; +link252[] = {189,190}; +link253[] = {190,93}; +link254[] = {191,192}; +link255[] = {192,115}; +link256[] = {193,194}; +link257[] = {194,50}; +link258[] = {195,196}; +link259[] = {196,197}; +link260[] = {196,198}; +link261[] = {197,20}; +link262[] = {198,196}; +link263[] = {199,200}; +link264[] = {200,24}; +link265[] = {200,201}; +link266[] = {200,202}; +link267[] = {201,20}; +link268[] = {202,200}; +link269[] = {203,204}; +link270[] = {204,154}; +link271[] = {204,168}; +link272[] = {204,169}; +link273[] = {204,170}; +link274[] = {204,171}; +link275[] = {204,172}; +link276[] = {204,187}; +link277[] = {204,205}; +link278[] = {205,20}; +globals[] = {0.000000,0,0,0,0,640,480,2,543,6316128,1,-504.476563,911.084167,42.584351,-1111.596924,964,786,1}; +window[] = {0,-1,-1,-1,-1,1007,66,1854,50,1,982}; +*//*%FSM*/ +class FSM +{ + fsmName = "AIBEHAVIORNEW"; + class States + { + /*%FSM*/ + class Begin_State + { + name = "Begin_State"; + itemno = 0; + init = /*%FSM*/"_Unit = _this select 0;" \n + "" \n + "if (VCOM_UseMarkers) then {_Unit spawn VCOMAI_MapMarkers;};" \n + "" \n + "_ReturnVariable = [_Unit] call VcomAI_UnitInit;" \n + "_NoAICheck = _ReturnVariable select 0;" \n + "_IsPlayerCheck = _ReturnVariable select 1;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class IsPlayer + { + itemno = 28; + priority = 51.000000; + to="Exit_FSM_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_IsPlayerCheck"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _UseAI_NO + { + itemno = 1; + priority = 50.000000; + to="Exit_FSM"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_NoAICheck"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _UseAI_YES + { + itemno = 2; + priority = 49.000000; + to="Set_Basic"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_NoAICheck"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_FSM + { + name = "Exit_FSM"; + itemno = 3; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Set_Basic + { + name = "Set_Basic"; + itemno = 4; + init = /*%FSM*/"_RankReturn = [_Unit] call VcomAI_DetermineRank;" \n + "" \n + "_LastTimeCheck = diag_ticktime;" \n + "_LastTimeCheck2 = diag_ticktime;" \n + "_LastTimeCheck3 = diag_ticktime;" \n + "_LastTimeCheck4 = diag_ticktime;" \n + "_LastTimeCheck5 = diag_ticktime;" \n + "_LastTimeCheck6 = diag_ticktime;" \n + "_LastTimeCheck7 = diag_ticktime;" \n + "_LastTimeCheckMedic = diag_ticktime;" \n + "_AICOMMANDER = 0;" \n + "" \n + "//Add necessary eventhandlers." \n + "_Unit addEventHandler [""Killed"",{_this spawn VCOMAI_ClosestAllyWarn;}];" \n + "_Unit addEventHandler [""Fired"",{[_this] call VCOMAI_SuppressingShots;}];" \n + "_Unit addEventHandler [""Fired"",{[_this] call VCOMAI_HearingAids;}];" \n + "_Unit addEventHandler [""Hit"",{_this call VCOMAI_AIHit;}];" \n + "" \n + "//Should the AI run to support friendlies?" \n + "if (VCOM_NOPATHING) then" \n + "{" \n + " _VariableCheck1 = _Unit getvariable [""VCOM_NOPATHING_Unit"",true];" \n + "}" \n + "else" \n + "{" \n + " _VariableCheck1 = _Unit getvariable [""VCOM_NOPATHING_Unit"",false];" \n + "};" \n + "" \n + "" \n + "//Default Setup stuff here" \n + "_VCOM_CHANGEDFORMATION = false; //Converted" \n + "_VCOM_MOVINGTOSUPPORT = false; //Converted" \n + "_VCOM_GARRISONED = false; //Converted" \n + "_VCOM_SubLeader = false; //Converted" \n + "_VCOM_GroupLeader = false; //Converted" \n + "_VCOM_FLANKING = false; //Converted" \n + "_VCOM_MovedRecently = false; //Converted" \n + "_VCOM_MovedRecentlyCover = false; //Converted" \n + "_VCOM_GRENADETHROWN = false; //Converted" \n + "" \n + "_VCOM_FiredTime = 0; //Can't Convert fully" \n + "_Unit setvariable [""VCOM_FiredTime"",_VCOM_FiredTime];" \n + "_VCOM_FiredTimeHearing = diag_ticktime; //Can't Convert fully" \n + "_Unit setvariable [""VCOM_FiredTimeHearing"",_VCOM_FiredTimeHearing];" \n + "" \n + "_VCOM_HASDEPLOYED = false; //Converted" \n + "_VCOM_HASSTATIC = false; //Converted" \n + "_VCOM_DiagLastCheck = diag_ticktime; //Converted" \n + "_VCOM_HASSATCHEL = false; //Converted" \n + "_VCOM_SATCHELRECENTLY = false; //Converted" \n + "_VCOM_CALLEDARTILLERY = false; //Converted" \n + "_VCOM_ISARTILLERY = false; //Converted" \n + "_VCOM_AssignedEnemy = [0,0,0]; //Converted" \n + "_Vcom_MineObject = []; //Converted" \n + "_Vcom_MineObjectMagazine = []; //Converted" \n + "_VCOM_HasMine = false; //Converted" \n + "_VCOM_PlantedMineRecently = false; //Converted" \n + "_Unit setVariable [""VCOMAI_ShotsFired"",false,true]; //Can't convert." \n + "_VCOM_InCover = false; //Converted" \n + "_VCOMAI_StaticNearby = false; //Converted" \n + "_VCOM_VisuallyCanSee = false; //Converted" \n + "_VCOM_HASUAV = false; //Converted" \n + "_VCOMAI_ActivelyClearing= false; //Converted" \n + "_VCOMAI_StartedInside = false; //Converted" \n + "_VCOMAI_LastCStance = (behaviour _Unit); //Converted" \n + "_VCOM_Unit_AIWarnDistance = VCOM_Unit_AIWarnDistance; //Converted" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "_BasicCheckTime = time;" \n + "_Unit setVariable [""VCOM_Unit_AIWarnDistance"",_VCOM_Unit_AIWarnDistance];" \n + "//_Vcom_StanceSet = 0;" \n + "_VCOM_AssignedEnemy = [0,0,0];" \n + "_RandomTick = 1;" \n + "" \n + "////////////////////////////////////////////////////////////////////////////////////////" \n + "" \n + " _VCOMAI_StartedInside = _Unit call VCOMAI_BuildingSpawnCheck;" \n + "" \n + " //_Unit disableAI ""FSM"";" \n + " _Unit call VCOMAI_CheckBag;" \n + "" \n + " _MineArray = _Unit call VCOMAI_HasMine;" \n + " _VCOM_HASSATCHEL = _MineArray select 0;" \n + " _Vcom_MineObject = _MineArray select 1;" \n + " _VCOM_HasMine = _MineArray select 2;" \n + " _SatchelArray = _MineArray select 3;" \n + "" \n + "" \n + " _Unit spawn VCOMAI_Artillery;" \n + "if (VCOM_IncreasingAccuracy) then" \n + "{" \n + " _ReturnedArray = [_Unit,_VCOM_DiagLastCheck,_VCOM_AssignedEnemy] call VCOMAI_FocusedAccuracy;" \n + " _VCOM_AssignedEnemy = _ReturnedArray select 1;" \n + " _VCOM_DiagLastCheck = _ReturnedArray select 0;" \n + "};" \n + "" \n + "_BagArray = _Unit call VCOMAI_CheckBag;" \n + "_VCOM_HASSTATIC = _BagArray select 0;" \n + "_VCOM_HASUAV = _BagArray select 1;" \n + "_StaticClassName = _BagArray select 2"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Check_Rank_0 + { + itemno = 5; + priority = 50.000000; + to="Rank_0"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 0 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_1 + { + itemno = 6; + priority = 49.000000; + to="Rank_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 1 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_2 + { + itemno = 7; + priority = 48.000000; + to="Rank_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 2 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_3 + { + itemno = 8; + priority = 47.000000; + to="Rank_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 3 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_4 + { + itemno = 9; + priority = 46.000000; + to="Rank_4"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 4 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_5 + { + itemno = 10; + priority = 44.000000; + to="Rank_5"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 5 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Rank_6 + { + itemno = 11; + priority = 43.000000; + to="Rank_6"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_RankReturn isEqualTo 6 && VCOM_AISkillEnabled"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Moving_Along + { + itemno = 186; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_6 + { + name = "Rank_6"; + itemno = 12; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank6;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_5 + { + name = "Rank_5"; + itemno = 13; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank5;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_4 + { + name = "Rank_4"; + itemno = 14; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank4;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_3 + { + name = "Rank_3"; + itemno = 15; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank3;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_2 + { + name = "Rank_2"; + itemno = 16; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank2;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_1 + { + name = "Rank_1"; + itemno = 17; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Rank_0 + { + name = "Rank_0"; + itemno = 18; + init = /*%FSM*/"[_Unit] call AccuracyFunctionRank0;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Moving_Along + { + itemno = 19; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Leader_Or_Not + { + name = "Leader_Or_Not"; + itemno = 20; + init = /*%FSM*/"" \n + "_PositionCheck = _unit call VCOMAI_DetermineLeader;" \n + "if (isNil ""_PositionCheck"") exitWith {};" \n + "" \n + "_AICOMMANDER = 0;" \n + "_Leader = _PositionCheck select 0;" \n + "_SubLeader = _PositionCheck select 1;" \n + "" \n + "" \n + "//Set this if AI should not run the rest of this FSM with a human player" \n + "if (NOAI_FOR_PLAYERLEADERS isEqualTo 1) then {" \n + " if (isPlayer (leader _unit) ) then {_AICOMMANDER = 1};" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Simulation_Pause + { + itemno = 195; + priority = 1050.000000; + to="Simulation_Pause"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(simulationEnabled _unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ArtilleryCheck_ + { + itemno = 179; + priority = 1005.000000; + to="Do_Nothing_See_Nothing"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(vehicle _Unit) in ArtilleryArray"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _UseAI_NO + { + itemno = 146; + priority = 999.000000; + to="NO_AI"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_Unit getVariable [""VCOM_NOAI"",false] || !(local _unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _UseAI_NO_1 + { + itemno = 26; + priority = 998.000000; + to="NO_AI"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_AICOMMANDER isEqualTo 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Enemy_Delay + { + itemno = 199; + priority = 900.000000; + to="Temp_Halt"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_fps < VCOM_FPSFreeze || {(_MyNearestEnemy distance _Unit > VCOM_DisableDistance) && !((behaviour _Unit) isEqualTo ""COMBAT"")}"/*%FSM*/; + action=/*%FSM*/"_Unit doMove getPos _Unit;" \n + "_Unit forceSpeed -1;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Check_Turn + { + itemno = 203; + priority = 60.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_BasicCheckTime + 20) < time && {VCOM_BasicCheckCurrent <= VCOM_BasicCheckLimit}"/*%FSM*/; + action=/*%FSM*/"private _tOrg = time;" \n + "VCOM_BasicCheckCurrent = VCOM_BasicCheckCurrent + 1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dead + { + itemno = 24; + priority = 55.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit || {isNull _Unit} || {isPlayer _Unit} || {isNil (""_Leader"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Leader + { + itemno = 21; + priority = 50.000000; + to="Leader_Cycle_Beg"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_Leader && {VCOM_LeaderExecuteCurrent < VCOM_LeaderExecuteLimit}) || (_Leader && {((behaviour _Unit) isEqualTo ""COMBAT"")})"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent + 1;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class SubLeader + { + itemno = 22; + priority = 49.000000; + to="SubLeader_Cycle"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_SubLeader"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Normal_Unit + { + itemno = 23; + priority = 47.000000; + to="Unit_Cycle_Begin"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Dead_Captain + { + name = "Dead_Captain"; + itemno = 25; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class NO_AI + { + name = "NO_AI"; + itemno = 27; + init = /*%FSM*/"_Unit setVariable [""FSMHandleEvents"",1,false];"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_FSM_1 + { + name = "Exit_FSM_1"; + itemno = 29; + init = /*%FSM*/"_Unit addEventHandler [""Fired"",{[_this] call VCOMAI_SuppressingShots;}];" \n + "_Unit addEventHandler [""Fired"",{[_this] call VCOMAI_HearingAids;}];" \n + "_Unit setVariable [""VCOM_FiredTime"",0];" \n + "_Unit setVariable [""VCOM_FiredTimeHearing"",0];" \n + "player spawn VCOMAI_IRCheck;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Leader_Cycle_Beg + { + name = "Leader_Cycle_Beg"; + itemno = 30; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + "//Check if the formation should change" \n + "" \n + "" \n + "if !(_VCOM_CHANGEDFORMATION) then " \n + "{" \n + " [_Unit,_VCOM_CHANGEDFORMATION] call VcomAI_FormationChange;" \n + "};" \n + "" \n + "" \n + "_group = group _Unit;" \n + "_index = currentWaypoint _group;" \n + "_WaypointIs = waypointType [_group,_index];" \n + "" \n + "if !((behaviour _Unit) isEqualTo ""COMBAT"") then" \n + "{" \n + " {" \n + " _x forcespeed -1; " \n + " } foreach units _group;" \n + " [_Unit,_VCOM_MovedRecently,_VCOMAI_ActivelyClearing,_VCOM_MovedRecentlyCover] execFSM ""VCOMAI\DangerIdentify.fsm"";" \n + " " \n + "};" \n + "" \n + "" \n + "//See if we can take any vehicles." \n + "if (VCOM_VehicleUse) then" \n + "{" \n + "{" \n + " if (_x iskindof ""LandVehicle"" && {crew _x isEqualTo []} && {_x distance _Unit < VCOM_AIDISTANCEVEHPATH} && {!(locked _x isEqualTo 2)}) then" \n + " {" \n + " _group addvehicle _x;" \n + " };" \n + "} foreach vehicles;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class InVehicle + { + itemno = 32; + priority = 105.000000; + to="IsDriver_Check"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((vehicle _Unit) != _Unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Combat + { + itemno = 52; + priority = 100.000000; + to="Combat_Brain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Hold_WP + { + itemno = 61; + priority = 48.000000; + to="Garrison"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_WaypointIs isEqualTo ""HOLD""" \n + "" \n + "//(waypointScript [_group,_index]) isEqualTo ""Garrison"";" \n + "" \n + "/*" \n + "sleep 5;" \n + "selectedItems = curatorSelected;" \n + "_group = (selectedItems select 1 select 0);" \n + "_waypoint0 = _group addwaypoint[(selectedItems select 0 select 0),0];" \n + "_waypoint0 setwaypointtype ""HOLD"";" \n + "_waypoint0 setWaypointSpeed ""NORMAL"";" \n + "_waypoint0 setWaypointBehaviour ""AWARE"";" \n + "_index = currentWaypoint _group;" \n + "[_group, _index] setWaypointScript ""Garrison"";" \n + "sleep 2;" \n + "systemchat format [""TEST: %1"",(waypointScript [_group,_index])];" \n + "" \n + "*/"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dismissed_WP + { + itemno = 151; + priority = 47.000000; + to="Loiter"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_WaypointIs isEqualTo ""DISMISS"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 31; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class IsDriver_Check + { + name = "IsDriver_Check"; + itemno = 35; + init = /*%FSM*/"private [""_CheckDriver""];" \n + "_CheckDriver = _Unit call VCOMAI_DriverCheck;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class IsDriver + { + itemno = 34; + priority = 50.000000; + to="Driver_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class NotDriver + { + itemno = 33; + priority = 49.000000; + to="Wait_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Driver_Checks + { + name = "Driver_Checks"; + itemno = 36; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 39; + priority = 55.000000; + to="Exit"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Engaged + { + itemno = 42; + priority = 40.000000; + to="CheckNow"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CombatNearby + { + itemno = 41; + priority = 30.000000; + to="CheckNow"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_VCOM_MOVINGTOSUPPORT"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 37; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit + { + name = "Exit"; + itemno = 40; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class CheckNow + { + name = "CheckNow"; + itemno = 43; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + "_myNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "[_Unit,_myNearestEnemy] spawn VCOMAI_VehicleHandle;" \n + "" \n + "/*" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;" \n + "*/" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 45; + priority = 55.000000; + to="Exit_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait2 + { + itemno = 44; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_1 + { + name = "Exit_1"; + itemno = 46; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Combat_Brain + { + name = "Combat_Brain"; + itemno = 53; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 4;" \n + "" \n + "_CheckClass = true;" \n + "if (!(isNil ""_MyNearestEnemy"") && !(typename _MyNearestEnemy isEqualTo ""ARRAY"")) then" \n + "{" \n + " _ClassName = typeOf (vehicle _MyNearestEnemy);" \n + " _CheckClass = _ClassName isKindOf ""AIR"";" \n + "};" \n + "" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "" \n + "private _ArtyCool = false;" \n + "if (Side _Unit isEqualTo West) then" \n + "{" \n + " _ArtyCool = Vcom_WestArtCooldown;" \n + "};" \n + "" \n + "if (Side _Unit isEqualTo East) then" \n + "{" \n + " _ArtyCool = Vcom_EastArtCooldown;" \n + "};" \n + "" \n + "if (Side _Unit isEqualTo Resistance) then" \n + "{" \n + " _ArtyCool = Vcom_ResistanceArtCooldown;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 55; + priority = 1000.000000; + to="Exit_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit || isnil ""_Unit"""/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class RUSH__ + { + itemno = 173; + priority = 100.000000; + to="SetSpeed_"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(speedMode (group _Unit)) isEqualTo ""FULL"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Flank_Orders + { + itemno = 58; + priority = 80.000000; + to="FLANKBEHAVIOR"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_VCOM_Flanking) && !(_VCOM_GARRISONED) && !((speedMode (group _Unit)) isEqualTo ""FULL"") && !(_CheckClass)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ArtyUse_ + { + itemno = 71; + priority = 79.000000; + to="ArtilleryCalled"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(random 100) <= 35 && _ArtyCool"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CheckIfStatic + { + itemno = 66; + priority = 70.000000; + to="SetupStatic"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOM_HASSTATIC)} && {!(_VCOM_HASDEPLOYED)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class SatchelPlant + { + itemno = 69; + priority = 65.000000; + to="PlantTheSatch"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASSATCHEL) && !(_VCOM_SATCHELRECENTLY);"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Clear_Garrison + { + itemno = 149; + priority = 60.000000; + to="Clear_Building"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"( ((nearestBuilding _MyNearestEnemy) distance _MyNearestEnemy) < 8 ) && !(_VCOMAI_ActivelyClearing) && ((random 100) > 90)" \n + ""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MinePlant + { + itemno = 138; + priority = 55.000000; + to="PlaceMine"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 400) && {VCOM_MineLaying} && {(_VCOM_HasMine)} && {!(_VCOM_PlantedMineRecently)} && {!(_CheckClass)}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Has_UAV + { + itemno = 143; + priority = 50.000000; + to="Deploy_UAV"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASUAV)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Arm_Static_Weapo + { + itemno = 135; + priority = 45.000000; + to="Get_In_Static_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOMAI_StaticNearby)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Move_Move_Move + { + itemno = 59; + priority = 40.000000; + to="MoveUnit"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_VCOM_MovedRecently) && {!((speedMode (group _Unit)) isEqualTo ""FULL"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class LightGarrison + { + itemno = 64; + priority = 30.000000; + to="Light_Garrison"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!(_VCOM_GARRISONED)) && (random 100) < 20"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_2 + { + name = "Exit_2"; + itemno = 56; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class FLANKBEHAVIOR + { + name = "FLANKBEHAVIOR"; + itemno = 57; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "[_Unit,_VCOM_Flanking,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside,_VCOM_GARRISONED] spawn VCOMAI_FlankManeuver;" \n + "_VCOM_Flanking = true;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class MoveUnit + { + name = "MoveUnit"; + itemno = 60; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 30;" \n + "" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Garrison + { + name = "Garrison"; + itemno = 62; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 15;" \n + "" \n + "if (!_VCOM_GARRISONED) then {" \n + " [_Unit,(group _Unit)] spawn VCOMAI_Garrison;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 63; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Light_Garrison + { + name = "Light_Garrison"; + itemno = 65; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "[_Unit,_VCOM_MovedRecentlyCover,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] spawn VCOMAI_LightGarrison;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetupStatic + { + name = "SetupStatic"; + itemno = 68; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "" \n + "" \n + "//If the unit is in a building, or can see the enemy, we don't want them deploying mortars." \n + "private _CurrentBackPack = backpack _Unit;" \n + "private _Vcom_Indoor = false;" \n + "private _Position = getposATL _Unit;" \n + "private _Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4];" \n + "{" \n + " if (_x isKindof ""Building"") exitWith {_Vcom_Indoor = true;};" \n + "} foreach _Array;" \n + "" \n + "if !(_Vcom_Indoor) then" \n + "{" \n + " private _AssembledG = getText (configfile >> ""CfgVehicles"" >> _CurrentBackPack >> ""assembleInfo"" >> ""assembleTo"");" \n + " if !(_AssembledG isEqualTo """") then" \n + " {" \n + " private _StaticCreated = _AssembledG createvehicle [0,0,0];" \n + " _StaticCreated setposATL (getposATL _Unit);" \n + "" \n + " [_Unit,_StaticCreated,_myNearestEnemy] spawn " \n + " {" \n + " params [""_Unit"",""_StaticCreated"",""_myNearestEnemy""];" \n + "" \n + " [_Unit,""AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon""] remoteExec [""playMoveEverywhere"",0];" \n + " sleep 3.5;" \n + " _Unit assignAsGunner _StaticCreated;" \n + " [_Unit] orderGetIn true;" \n + " _Unit moveInGunner _StaticCreated;" \n + " removeBackpackGlobal _Unit;" \n + "" \n + " private _dirTo = [position _StaticCreated,position _myNearestEnemy] call BIS_fnc_dirTo;" \n + " _StaticCreated setDir _dirTo;" \n + " (Vehicle _Unit) setDir _dirTo;" \n + " };" \n + "" \n + "" \n + " [_Unit,_CurrentBackPack,_StaticCreated] spawn VCOMAI_PackStatic;" \n + " };" \n + "" \n + "};" \n + "" \n + "" \n + "" \n + "_VCOM_HASDEPLOYED = true;" \n + "_VCOM_HASSTATIC = false;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlantTheSatch + { + name = "PlantTheSatch"; + itemno = 70; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "[_Unit,(_SatchelArray select 0)] spawn VCOMAI_DestroyBuilding;" \n + "_VCOM_HASSATCHEL = false;" \n + "_VCOM_SATCHELRECENTLY = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ArtilleryCalled + { + name = "ArtilleryCalled"; + itemno = 72; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "if (VCOM_Artillery isEqualTo 1) then " \n + "{" \n + " _myNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + " if (isNil ""_myNearestEnemy"" || {(typeName _myNearestEnemy isEqualTo ""ARRAY"")} || {!(alive _myNearestEnemy)}) exitWith {};" \n + " _EnemyGroup = group _myNearestEnemy;" \n + " if ((count (units _EnemyGroup)) > 0) then " \n + " {" \n + "" \n + " if !(_VCOM_CALLEDARTILLERY) then " \n + " {" \n + " " \n + " [_Unit,_myNearestEnemy] spawn VCOMAI_ArtilleryCalled;" \n + " };" \n + " };" \n + "" \n + "" \n + "_VCOM_CALLEDARTILLERY = true;" \n + "};" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Unit_Cycle_Begin + { + name = "Unit_Cycle_Begin"; + itemno = 73; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class InVehicle + { + itemno = 75; + priority = 105.000000; + to="IsDriver_Check_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((vehicle _Unit) != _Unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Combat + { + itemno = 95; + priority = 100.000000; + to="Combat_Brain_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 74; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class IsDriver_Check_1 + { + name = "IsDriver_Check_1"; + itemno = 78; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + "_CheckDriver = _Unit call VCOMAI_DriverCheck;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class IsDriver + { + itemno = 77; + priority = 50.000000; + to="Driver_Checks_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class NotDriver + { + itemno = 76; + priority = 49.000000; + to="Wait"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Driver_Checks_1 + { + name = "Driver_Checks_1"; + itemno = 79; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + "" \n + "//_GoingToCombat = _Unit getVariable ""VCOM_MOVINGTOSUPPORT"";"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 82; + priority = 55.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Engaged + { + itemno = 85; + priority = 40.000000; + to="CheckNow_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CombatNearby + { + itemno = 84; + priority = 30.000000; + to="CheckNow_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_VCOM_MOVINGTOSUPPORT"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 80; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_3 + { + name = "Exit_3"; + itemno = 83; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class CheckNow_1 + { + name = "CheckNow_1"; + itemno = 86; + init = /*%FSM*/"private [""_t"",""_myNearestEnemy""];" \n + "_t = time;" \n + "_myNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "[_Unit,_myNearestEnemy] spawn VCOMAI_VehicleHandle;" \n + "" \n + "/*" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;" \n + "*/" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 88; + priority = 55.000000; + to="Exit_4"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait2 + { + itemno = 87; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_4 + { + name = "Exit_4"; + itemno = 89; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Combat_Brain_1 + { + name = "Combat_Brain_1"; + itemno = 96; + init = /*%FSM*/"_t = time;" \n + "_wait = 4;" \n + "" \n + "//[_Unit,_VCOM_MovedRecently,_VCOMAI_ActivelyClearing,_VCOM_MovedRecentlyCover] execFSM ""VCOMAI\DangerIdentify.fsm"";" \n + "" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "" \n + "_CheckClass = true;" \n + "if (!(isNil ""_MyNearestEnemy"") && !(typename _MyNearestEnemy isEqualTo ""ARRAY"")) then" \n + "{" \n + " _ClassName = typeOf (vehicle _MyNearestEnemy);" \n + " _CheckClass = _ClassName isKindOf ""AIR"";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 98; + priority = 10000.000000; + to="Exit_5"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dead_1 + { + itemno = 147; + priority = 1001.000000; + to="Exit_5"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNil ""_Unit"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class RUSH__ + { + itemno = 175; + priority = 100.000000; + to="SetSpeed__1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(speedMode (group _Unit)) isEqualTo ""FULL"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CheckIfStatic + { + itemno = 109; + priority = 80.000000; + to="SetupStatic_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOM_HASSTATIC)} && {!(_VCOM_HASDEPLOYED)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class SatchelPlant + { + itemno = 112; + priority = 70.000000; + to="PlantTheSatch_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASSATCHEL) && {!(_VCOM_SATCHELRECENTLY)} && {!(_CheckClass)}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MinePlant + { + itemno = 140; + priority = 55.000000; + to="PlaceMine_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 400) && {(_VCOM_HasMine)} && {!(_VCOM_PlantedMineRecently)} && !(_CheckClass)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Has_UAV + { + itemno = 145; + priority = 50.000000; + to="Deploy_UAV_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASUAV)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Arm_Static_Weapo + { + itemno = 137; + priority = 40.000000; + to="Get_In_Static"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOMAI_StaticNearby)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Move_Move_Move + { + itemno = 102; + priority = 40.000000; + to="MoveUnit_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_VCOM_MovedRecently) && {!((speedMode (group _Unit)) isEqualTo ""FULL"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_5 + { + name = "Exit_5"; + itemno = 99; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class SubLeader_Cycle + { + name = "SubLeader_Cycle"; + itemno = 100; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class InVehicle + { + itemno = 104; + priority = 105.000000; + to="IsDriver_Check_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((vehicle _Unit) != _Unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Combat + { + itemno = 129; + priority = 100.000000; + to="Combat_Brain_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 101; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class MoveUnit_1 + { + name = "MoveUnit_1"; + itemno = 103; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 30;" \n + "" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class IsDriver_Check_2 + { + name = "IsDriver_Check_2"; + itemno = 107; + init = /*%FSM*/"_CheckDriver = _Unit call VCOMAI_DriverCheck;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class IsDriver + { + itemno = 106; + priority = 50.000000; + to="Driver_Checks_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class NotDriver + { + itemno = 105; + priority = 49.000000; + to="Wait_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!_CheckDriver"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Driver_Checks_2 + { + name = "Driver_Checks_2"; + itemno = 108; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 116; + priority = 55.000000; + to="Exit_6"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Engaged + { + itemno = 119; + priority = 40.000000; + to="CheckNow_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((behaviour _Unit) isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CombatNearby + { + itemno = 118; + priority = 30.000000; + to="CheckNow_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_VCOM_MOVINGTOSUPPORT"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 114; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetupStatic_1 + { + name = "SetupStatic_1"; + itemno = 111; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "" \n + "" \n + "//If the unit is in a building, or can see the enemy, we don't want them deploying mortars." \n + "private _CurrentBackPack = backpack _Unit;" \n + "private _Vcom_Indoor = false;" \n + "private _Position = getposATL _Unit;" \n + "private _Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4];" \n + "{" \n + " if (_x isKindof ""Building"") exitWith {_Vcom_Indoor = true;};" \n + "} foreach _Array;" \n + "" \n + "if !(_Vcom_Indoor) then" \n + "{" \n + " private _AssembledG = getText (configfile >> ""CfgVehicles"" >> _CurrentBackPack >> ""assembleInfo"" >> ""assembleTo"");" \n + " if !(_AssembledG isEqualTo """") then" \n + " {" \n + " private _StaticCreated = _AssembledG createvehicle [0,0,0];" \n + " _StaticCreated setposATL (getposATL _Unit);" \n + "" \n + " [_Unit,_StaticCreated,_myNearestEnemy] spawn " \n + " {" \n + " params [""_Unit"",""_StaticCreated"",""_myNearestEnemy""];" \n + "" \n + " [_Unit,""AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon""] remoteExec [""playMoveEverywhere"",0];" \n + " sleep 3.5;" \n + " _Unit assignAsGunner _StaticCreated;" \n + " [_Unit] orderGetIn true;" \n + " _Unit moveInGunner _StaticCreated;" \n + " removeBackpackGlobal _Unit;" \n + "" \n + " private _dirTo = [position _StaticCreated,position _myNearestEnemy] call BIS_fnc_dirTo;" \n + " _StaticCreated setDir _dirTo;" \n + " (Vehicle _Unit) setDir _dirTo;" \n + " };" \n + "" \n + "" \n + " [_Unit,_CurrentBackPack,_StaticCreated] spawn VCOMAI_PackStatic;" \n + " };" \n + "" \n + "};" \n + "" \n + "" \n + "" \n + "_VCOM_HASDEPLOYED = true;" \n + "_VCOM_HASSTATIC = false;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlantTheSatch_1 + { + name = "PlantTheSatch_1"; + itemno = 113; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "[_Unit,(_SatchelArray select 0)] spawn VCOMAI_DestroyBuilding;" \n + "_VCOM_HASSATCHEL = false;" \n + "_VCOM_SATCHELRECENTLY = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_6 + { + name = "Exit_6"; + itemno = 117; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class CheckNow_2 + { + name = "CheckNow_2"; + itemno = 120; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "_myNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "[_Unit,_myNearestEnemy] spawn VCOMAI_VehicleHandle;" \n + "" \n + "" \n + "/*" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;" \n + "*/" \n + "" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 122; + priority = 55.000000; + to="Exit_7"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait2 + { + itemno = 121; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_7 + { + name = "Exit_7"; + itemno = 123; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Combat_Brain_2 + { + name = "Combat_Brain_2"; + itemno = 130; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 4;" \n + "//[_Unit,_VCOM_MovedRecently,_VCOMAI_ActivelyClearing,_VCOM_MovedRecentlyCover] execFSM ""VCOMAI\DangerIdentify.fsm"";" \n + "" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "" \n + "_CheckClass = true;" \n + "if (!(isNil ""_MyNearestEnemy"") && !(typename _MyNearestEnemy isEqualTo ""ARRAY"")) then" \n + "{" \n + " _ClassName = typeOf (vehicle _MyNearestEnemy);" \n + " _CheckClass = _ClassName isKindOf ""AIR"";" \n + "};" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 148; + priority = 1001.000000; + to="Exit_8"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNil ""_Unit"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dead_1 + { + itemno = 132; + priority = 100.000000; + to="Exit_8"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class RUSH__ + { + itemno = 177; + priority = 100.000000; + to="SetSpeed__2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(speedMode (group _Unit)) isEqualTo ""FULL"""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class CheckIfStatic + { + itemno = 157; + priority = 80.000000; + to="SetupStatic_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOM_HASSTATIC)} && {!(_VCOM_HASDEPLOYED)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class SatchelPlant + { + itemno = 160; + priority = 70.000000; + to="PlantTheSatch_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASSATCHEL) && !(_VCOM_SATCHELRECENTLY) && !(_CheckClass)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MinePlant + { + itemno = 164; + priority = 55.000000; + to="PlaceMine_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 400) && {(_VCOM_HasMine)} && {!(_VCOM_PlantedMineRecently)} && !(_CheckClass)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Has_UAV + { + itemno = 167; + priority = 50.000000; + to="Deploy_UAV_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_VCOM_HASUAV)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Arm_Static_Weapo + { + itemno = 163; + priority = 40.000000; + to="Get_In_Static_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((_myNearestEnemy distance _Unit) < 800) && {(_VCOMAI_StaticNearby)};"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Move_Move_Move + { + itemno = 155; + priority = 40.000000; + to="MoveUnit_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!(_VCOM_MovedRecently) && {!((speedMode (group _Unit)) isEqualTo ""FULL"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_8 + { + name = "Exit_8"; + itemno = 133; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Get_In_Static + { + name = "Get_In_Static"; + itemno = 134; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 30;" \n + "_Unit spawn VCOMAI_ArmEmptyStatic;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Get_In_Static_1 + { + name = "Get_In_Static_1"; + itemno = 136; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "_Unit spawn VCOMAI_ArmEmptyStatic;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlaceMine + { + name = "PlaceMine"; + itemno = 139; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "[_Unit,(_Vcom_MineObject select 0)] spawn VCOMAI_PlaceMine;" \n + "_VCOM_HasMine = false;" \n + "_VCOM_PlantedMineRecently = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlaceMine_1 + { + name = "PlaceMine_1"; + itemno = 141; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "[_Unit,(_Vcom_MineObject select 0)] spawn VCOMAI_PlaceMine;" \n + "_VCOM_HasMine = false;" \n + "_VCOM_PlantedMineRecently = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Deploy_UAV + { + name = "Deploy_UAV"; + itemno = 142; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "_Unit spawn VCOMAI_DeployUAV;" \n + "_VCOM_HASUAV = false;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Deploy_UAV_1 + { + name = "Deploy_UAV_1"; + itemno = 144; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "_Unit spawn VCOMAI_DeployUAV;" \n + "_VCOM_HASUAV = false;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Clear_Building + { + name = "Clear_Building"; + itemno = 150; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 30;" \n + "//Old Condition -> //([_Unit,_VCOM_MovedRecentlyCover,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_BuildingCheck) && !(_VCOMAI_ActivelyClearing) && ((random 100) > 90)" \n + "" \n + "//systemchat format [""%1 GARRISONCLEAR"",_Unit];" \n + "[_Unit,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside,_VCOM_GARRISONED] spawn VCOMAI_GarrisonClear;" \n + "" \n + "_VCOM_InCover = true;" \n + "_VCOMAI_ActivelyClearing = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Loiter + { + name = "Loiter"; + itemno = 152; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 15;" \n + "" \n + "if (!(_Unit getVariable [""VCOM_LOITERING"",false])) then {" \n + " [_Unit,(group _Unit)] spawn VCOMAI_GroupLoiter;" \n + "};"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _ + { + itemno = 153; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class MoveUnit_2 + { + name = "MoveUnit_2"; + itemno = 156; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 30;" \n + "" \n + "_ReturnVariable = [_unit,_VCOM_GARRISONED,_VCOM_MovedRecently,_VCOM_MovedRecentlyCover,_VCOM_InCover,_VCOM_VisuallyCanSee,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside] call VCOMAI_MoveInCombat;" \n + "_VCOM_MovedRecently = _ReturnVariable select 0;" \n + "_VCOM_MovedRecentlyCover = _ReturnVariable select 1;" \n + "_VCOM_InCover = _ReturnVariable select 2;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetupStatic_2 + { + name = "SetupStatic_2"; + itemno = 159; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "" \n + "" \n + "//If the unit is in a building, or can see the enemy, we don't want them deploying mortars." \n + "private _CurrentBackPack = backpack _Unit;" \n + "private _Vcom_Indoor = false;" \n + "private _Position = getposATL _Unit;" \n + "private _Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4];" \n + "{" \n + " if (_x isKindof ""Building"") exitWith {_Vcom_Indoor = true;};" \n + "} foreach _Array;" \n + "" \n + "if !(_Vcom_Indoor) then" \n + "{" \n + " private _AssembledG = getText (configfile >> ""CfgVehicles"" >> _CurrentBackPack >> ""assembleInfo"" >> ""assembleTo"");" \n + " if !(_AssembledG isEqualTo """") then" \n + " {" \n + " private _StaticCreated = _AssembledG createvehicle [0,0,0];" \n + " _StaticCreated setposATL (getposATL _Unit);" \n + "" \n + " [_Unit,_StaticCreated,_myNearestEnemy] spawn " \n + " {" \n + " params [""_Unit"",""_StaticCreated"",""_myNearestEnemy""];" \n + "" \n + " [_Unit,""AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon""] remoteExec [""playMoveEverywhere"",0];" \n + " sleep 3.5;" \n + " _Unit assignAsGunner _StaticCreated;" \n + " [_Unit] orderGetIn true;" \n + " _Unit moveInGunner _StaticCreated;" \n + " removeBackpackGlobal _Unit;" \n + "" \n + " private _dirTo = [position _StaticCreated,position _myNearestEnemy] call BIS_fnc_dirTo;" \n + " _StaticCreated setDir _dirTo;" \n + " (Vehicle _Unit) setDir _dirTo;" \n + " };" \n + "" \n + "" \n + " [_Unit,_CurrentBackPack,_StaticCreated] spawn VCOMAI_PackStatic;" \n + " };" \n + "" \n + "};" \n + "" \n + "" \n + "" \n + "_VCOM_HASDEPLOYED = true;" \n + "_VCOM_HASSTATIC = false;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlantTheSatch_2 + { + name = "PlantTheSatch_2"; + itemno = 161; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "[_Unit,(_SatchelArray select 0)] spawn VCOMAI_DestroyBuilding;" \n + "_VCOM_HASSATCHEL = false;" \n + "_VCOM_SATCHELRECENTLY = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Get_In_Static_2 + { + name = "Get_In_Static_2"; + itemno = 162; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "_Unit spawn VCOMAI_ArmEmptyStatic;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class PlaceMine_2 + { + name = "PlaceMine_2"; + itemno = 165; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "[_Unit,(_Vcom_MineObject select 0)] spawn VCOMAI_PlaceMine;" \n + "_VCOM_HasMine = false;" \n + "_VCOM_PlantedMineRecently = true;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Deploy_UAV_2 + { + name = "Deploy_UAV_2"; + itemno = 166; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "_Unit spawn VCOMAI_DeployUAV;" \n + "_VCOM_HASUAV = false;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetSpeed_ + { + name = "SetSpeed_"; + itemno = 174; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "_Unit forcespeed -1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 54; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetSpeed__1 + { + name = "SetSpeed__1"; + itemno = 176; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "_Unit forcespeed -1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 97; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class SetSpeed__2 + { + name = "SetSpeed__2"; + itemno = 178; + init = /*%FSM*/"private [""_t"", ""_wait""];" \n + "_t = time;" \n + "_wait = 10;" \n + "" \n + "_Unit forcespeed -1;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 131; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + _wait"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Do_Nothing_See_Nothing + { + name = "Do_Nothing_See_Nothing"; + itemno = 180; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class ArtilleryCheck_ + { + itemno = 181; + priority = 1005.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!((vehicle _Unit) in ArtilleryArray)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Null + { + itemno = 184; + priority = 100.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNull _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Null_1 + { + itemno = 185; + priority = 100.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isNil (""_Leader"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class IsPlayer + { + itemno = 183; + priority = 60.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isPlayer _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Dead + { + itemno = 182; + priority = 55.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 188; + priority = 0.000000; + to="Do_Nothing_See_Nothing"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 5"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + name = "Wait"; + itemno = 189; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 190; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Wait_1 + { + name = "Wait_1"; + itemno = 191; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 192; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Wait_2 + { + name = "Wait_2"; + itemno = 193; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + itemno = 194; + priority = 0.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/"VCOM_LeaderExecuteCurrent = VCOM_LeaderExecuteCurrent -1"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Simulation_Pause + { + name = "Simulation_Pause"; + itemno = 196; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Simulation_Pause + { + itemno = 197; + priority = 1005.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"simulationEnabled _unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 198; + priority = 0.000000; + to="Simulation_Pause"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 10"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Temp_Halt + { + name = "Temp_Halt"; + itemno = 200; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + itemno = 24; + priority = 55.000000; + to="Dead_Captain"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit || {isNull _Unit} || {isPlayer _Unit} || {isNil (""_Leader"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Enable_AI + { + itemno = 201; + priority = 15.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"diag_fps > VCOM_FPSFreeze && {(_MyNearestEnemy distance _Unit < VCOM_DisableDistance) || ((behaviour _Unit) isEqualTo ""COMBAT"")}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + itemno = 202; + priority = 0.000000; + to="Temp_Halt"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 15"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Begin_Basic_Checks + { + name = "Begin_Basic_Checks"; + itemno = 204; + init = /*%FSM*/"private _t = time;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Go_Back + { + itemno = 205; + priority = 100.000000; + to="Leader_Or_Not"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > (_t + 10)"/*%FSM*/; + action=/*%FSM*/"VCOM_BasicCheckCurrent = VCOM_BasicCheckCurrent - 1;" \n + "_BasicCheckTime = time;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class MEDIC_CHECK__ + { + itemno = 187; + priority = 57.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_Unit getUnitTrait ""Medic"" && {diag_tickTime - (_unit getVariable [""VCOM_FiredTime"",diag_ticktime]) > 30} && {_LastTimeCheckMedic < (diag_ticktime - 10)}"/*%FSM*/; + action=/*%FSM*/"_Unit spawn VCOMAI_ForceHeal;" \n + "_LastTimeCheckMedic = diag_ticktime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class __5_SECONDS_ + { + itemno = 172; + priority = 56.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_LastTimeCheck7 < (diag_ticktime - 45)"/*%FSM*/; + action=/*%FSM*/"_VCOM_MovedRecently = false;" \n + "_VCOM_MovedRecentlyCover = false;" \n + "" \n + "_LastTimeCheck7 = diag_ticktime;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class RANDOM_TICK__ + { + itemno = 169; + priority = 55.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_LastTimeCheck6 + _RandomTick) < diag_ticktime"/*%FSM*/; + action=/*%FSM*/"" \n + "_VCOM_PlantedMineRecently = false;" \n + "_RandomTick = (random 460);" \n + "_LastTimeCheck6 = diag_ticktime;" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class __20_SECONDS__ + { + itemno = 171; + priority = 54.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_LastTimeCheck4 < (diag_ticktime - 120)"/*%FSM*/; + action=/*%FSM*/"" \n + "" \n + "_VCOM_CALLEDARTILLERY = false;" \n + "_VCOMAI_ActivelyClearing = false;" \n + "_LastTimeCheck4 = diag_ticktime;" \n + "//_Vcom_StanceSet = _Unit getvariable [""Vcom_StanceSet"",0];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class __0_SECONDS_ + { + itemno = 170; + priority = 53.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_LastTimeCheck3 < (diag_ticktime - 60)"/*%FSM*/; + action=/*%FSM*/"" \n + "_VCOM_FLANKING = false;" \n + "_VCOM_SATCHELRECENTLY = false;" \n + "_VCOM_HASDEPLOYED = false;" \n + "_Unit spawn VCOMAI_RearmSelf;" \n + "_Unit forcespeed -1;" \n + "" \n + "_LastTimeCheck3 = diag_ticktime;" \n + "" \n + "" \n + "" \n + ""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class __0_SECONDS__ + { + itemno = 168; + priority = 52.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_LastTimeCheck < (diag_ticktime - 20)"/*%FSM*/; + action=/*%FSM*/"" \n + "_VCOM_InCover = false;" \n + "_VCOM_GRENADETHROWN = false;" \n + "" \n + "if (_LastTimeCheck < (diag_ticktime - _RandomTick)) then" \n + "{" \n + " _VCOM_PlantedMineRecently = false;" \n + " _RandomTick = (random 300);" \n + "};" \n + "" \n + "" \n + "_LastTimeCheck = diag_ticktime;"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class __0_SECONDS__1 + { + itemno = 154; + priority = 51.000000; + to="Begin_Basic_Checks"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_LastTimeCheck2 < (diag_ticktime - 30)"/*%FSM*/; + action=/*%FSM*/"" \n + "_MineArray = _Unit call VCOMAI_HasMine;" \n + "" \n + "//Define static weapon" \n + "" \n + "private _CurrentBackPack = backpack _Unit;" \n + "private _class = """";" \n + "private _VCOM_HASSTATIC = false;" \n + "private _VCOM_HASUAV = false;" \n + "if !(_CurrentBackPack isEqualTo """") then " \n + "{" \n + " _class = [_CurrentBackPack] call VCOMAI_Classvehicle;" \n + " private _parents = [_class,true] call BIS_fnc_returnParents;" \n + " if (!(isNil ""_parents"")) then " \n + " {" \n + " if ((""StaticWeapon"" in _parents) || {(""Weapon_Bag_Base"" in _parents)}) then " \n + " {" \n + " _VCOM_HASSTATIC = true;" \n + " if ([""UAV"",_CurrentBackPack,false] call BIS_fnc_inString) then {_VCOM_HASUAV = true;};" \n + " };" \n + " };" \n + "};" \n + "" \n + "//END STATIC WEAPON" \n + "" \n + "" \n + "_VCOM_HASSATCHEL = _MineArray select 0;" \n + "_Vcom_MineObject = _MineArray select 1;" \n + "_VCOM_HasMine = _MineArray select 2;" \n + "_SatchelArray = _MineArray select 3;" \n + "" \n + "_Unit call VCOMAI_Artillery;" \n + "_VCOMAI_StaticNearby = _Unit call VCOMAI_CheckStatic;" \n + "if (VCOM_IncreasingAccuracy) then" \n + "{" \n + " _ReturnedArray = [_Unit,_VCOM_DiagLastCheck,_VCOM_AssignedEnemy] call VCOMAI_FocusedAccuracy;" \n + " _VCOM_AssignedEnemy = _ReturnedArray select 1;" \n + " _VCOM_DiagLastCheck = _ReturnedArray select 0;" \n + "};" \n + "" \n + "" \n + "//Allow leaders to change formations again" \n + "_VCOM_CHANGEDFORMATION = false;" \n + "_VCOM_MOVINGTOSUPPORT = _Unit getvariable [""VCOM_MOVINGTOSUPPORT"",false];" \n + "_VCOM_GARRISONED = _Unit getvariable [""VCOM_GARRISONED"",false];" \n + "_MyNearestEnemy = _Unit call VCOMAI_ClosestEnemy;" \n + "" \n + "_LastTimeCheck2 = diag_ticktime;"/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="Begin_State"; + finalStates[] = + { + "Exit_FSM", + "Dead_Captain", + "NO_AI", + "Exit_FSM_1", + "Exit", + "Exit_1", + "Exit_2", + "Exit_3", + "Exit_4", + "Exit_5", + "Exit_6", + "Exit_7", + "Exit_8", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/Background.paa b/AntistasiOfficial.Altis/VCOMAI/Background.paa new file mode 100644 index 0000000000000000000000000000000000000000..b36ec0212e34c9bdcbc7e063fa16eca0edf203c0 GIT binary patch literal 652227 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

+)pjgg*e^y@^66vY? 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�+p*r;GA!9*fR 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�scB}avgo$0V(AOL{{H%-c|vqooSX=fp^2|#{SLs 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

9a^Ni9{IJ%BUtCo7*IM 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 ZaUK+)MZ+e3yS%}& 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�AS> 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 literal 0 HcmV?d00001 diff --git a/AntistasiOfficial.Altis/VCOMAI/DangerIdentify.fsm b/AntistasiOfficial.Altis/VCOMAI/DangerIdentify.fsm new file mode 100644 index 00000000..c474c38d --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/DangerIdentify.fsm @@ -0,0 +1,586 @@ +/*%FSM*/ +/*%FSM*/ +/* +item0[] = {"For_now___only_the",-1,250,-1220.000000,-540.000000,-880.000000,-370.000000,0.000000,"For now - only the squad leaders run certain sections here" \n "" \n "it is not IDEAL but will save precious FPS"}; +item1[] = {"Dead",4,218,-710.000000,-800.000000,-660.000000,-750.000000,1000.000000,"Dead"}; +item2[] = {"Exit",1,250,-710.000000,-880.000000,-660.000000,-830.000000,0.000000,"Exit"}; +item3[] = {"Dead",4,218,-670.000000,150.000000,-620.000000,200.000000,1000.000000,"Dead"}; +item4[] = {"Exit_1",1,250,-670.000000,70.000000,-620.000000,120.000000,0.000000,"Exit"}; +item5[] = {"Threat_Detection",0,250,-740.000000,-660.000000,-620.000000,-590.000000,0.000000,"Threat Detection"}; +item6[] = {"",7,210,15.999998,316.000000,24.000002,323.999969,0.000000,""}; +item7[] = {"",7,210,-9.000000,-524.000061,-1.000000,-516.000000,0.000000,""}; +item8[] = {"DEAD_BODY_FOUND",4,218,-820.000000,-60.000000,-710.000000,10.000000,70.000000,"DEAD BODY FOUND"}; +item9[] = {"COMBAT",4,218,-970.000000,-80.000000,-860.000000,-10.000000,120.000000,"COMBAT"}; +item10[] = {"Stop_to_fire",2,250,-940.000000,40.000000,-850.000000,90.000000,0.000000,"Stop to fire"}; +item11[] = {"Timeout",4,218,-940.000000,160.000000,-850.000000,210.000000,0.000000,"Timeout"}; +item12[] = {"EXPLOSION_",4,218,-660.000000,-60.000000,-550.000000,10.000000,80.000000,"EXPLOSION" \n ""}; +item13[] = {"ENEMY_SPOTTED",4,218,-390.000000,-70.000000,-270.000000,0.000000,100.000000,"ENEMY SPOTTED"}; +item14[] = {"Combat_Mode",2,250,-480.000000,90.000000,-360.000000,140.000000,0.000000,"Combat Mode"}; +item15[] = {"_UseAI_NO",4,218,-630.000000,-790.000000,-550.000000,-750.000000,900.000000,"_UseAI NO"}; +item16[] = {"ENEMY_HEARD",4,218,-530.000000,-90.000000,-410.000000,-20.000000,90.000000,"ENEMY HEARD"}; +item17[] = {"Wait_1",8,218,-800.000000,-360.000000,-710.000000,-310.000000,0.000000,"Wait"}; +item18[] = {"isPlayer",4,218,-800.000000,-790.000000,-720.000000,-750.000000,800.000000,"isPlayer"}; +item19[] = {"InsideVehicle",2,250,-1110.000000,130.000000,-1020.000000,180.000000,0.000000,"InsideVehicle"}; +item20[] = {"COMBAT_AND_INVEH",4,218,-1090.000000,-110.000000,-980.000000,-40.000000,70.000000,"COMBAT AND INVEHICLE"}; +item21[] = {"_",8,218,-1070.000000,320.000000,-980.000000,370.000000,0.000000,""}; +item22[] = {"Dead",4,218,-1270.000000,70.000000,-1220.000000,120.000000,1000.000000,"Dead"}; +item23[] = {"Exit_2",1,250,-1270.000000,-10.000000,-1220.000000,40.000000,0.000000,"Exit"}; +item24[] = {"_",8,218,-650.000000,-480.000000,-560.000000,-430.000000,0.000000,""}; +item25[] = {"Threat_Decisions",3,250,-520.000000,-360.000000,-430.000000,-310.000000,0.000000,"Threat Decisions"}; +item26[] = {"Dead",4,218,-380.000000,-500.000000,-330.000000,-450.000000,1000.000000,"Dead"}; +item27[] = {"Exit_3",1,250,-380.000000,-580.000000,-330.000000,-530.000000,0.000000,"Exit"}; +item28[] = {"_UseAI_NO_1",4,218,-300.000000,-490.000000,-220.000000,-450.000000,900.000000,"_UseAI NO"}; +item29[] = {"isPlayer",4,218,-470.000000,-490.000000,-390.000000,-450.000000,800.000000,"isPlayer"}; +item30[] = {"GARRISON_CLEAR",4,218,-220.000000,-50.000000,-100.000000,20.000000,110.000000,"GARRISON CLEAR"}; +item31[] = {"Stop_to_fire_Pt",2,250,-940.000000,230.000000,-850.000000,280.000000,0.000000,"Stop to fire Pt.2"}; +item32[] = {"Wait",8,218,-510.000000,560.000000,-420.000000,610.000000,0.000000,"Wait"}; +item33[] = {"Squad_Leader_Che",4,218,-450.000000,-280.000000,-340.000000,-220.000000,100.000000,"Squad Leader Check"}; +item34[] = {"_",8,218,-640.000000,-260.000000,-550.000000,-210.000000,1.000000,""}; +item35[] = {"Threat_Decisions_1",3,4346,-830.000000,-240.000000,-740.000000,-190.000000,0.000000,"Threat Decisions" \n "Pt .2"}; +item36[] = {"Wait",8,218,-270.000000,-330.000000,-180.000000,-280.000000,0.000000,"Wait"}; +item37[] = {"Exit_4",1,250,-379.016052,-368.814056,-329.016052,-318.814056,0.000000,"Exit"}; +item38[] = {"Exit_5",1,250,-780.000000,-470.000000,-730.000000,-420.000000,0.000000,"Exit"}; +item39[] = {"Threat_Decisions_2",3,250,-313.288452,-204.541733,-223.288452,-154.541733,0.000000,"Threat Decisions" \n "Pt .2"}; +item40[] = {"____FAKE____",9,0,0.000000,0.000000,0.000000,0.000000,0.000000,"____FAKE____"}; +version=1; +class LayoutItems +{ + class Item0 + { + class ItemInfo + { + FontFace="Arial"; + FontHeight=10; + lStyle=1; + }; + }; +}; +link0[] = {1,2}; +link1[] = {3,4}; +link2[] = {5,1}; +link3[] = {5,18}; +link4[] = {5,24}; +link5[] = {6,7}; +link6[] = {7,27}; +link7[] = {8,14}; +link8[] = {9,10}; +link9[] = {10,11}; +link10[] = {11,31}; +link11[] = {12,14}; +link12[] = {13,14}; +link13[] = {14,3}; +link14[] = {14,32}; +link15[] = {15,2}; +link16[] = {16,14}; +link17[] = {17,38}; +link18[] = {18,2}; +link19[] = {19,21}; +link20[] = {19,22}; +link21[] = {20,19}; +link22[] = {22,23}; +link23[] = {24,25}; +link24[] = {25,26}; +link25[] = {25,29}; +link26[] = {25,33}; +link27[] = {25,34}; +link28[] = {26,27}; +link29[] = {28,27}; +link30[] = {29,27}; +link31[] = {30,14}; +link32[] = {32,6}; +link33[] = {33,39}; +link34[] = {34,35}; +link35[] = {35,17}; +link36[] = {35,32}; +link37[] = {36,37}; +link38[] = {39,8}; +link39[] = {39,12}; +link40[] = {39,13}; +link41[] = {39,16}; +link42[] = {39,30}; +link43[] = {39,36}; +link44[] = {40,9}; +link45[] = {40,15}; +link46[] = {40,20}; +link47[] = {21,40}; +link48[] = {40,28}; +globals[] = {0.000000,0,0,0,0,640,480,1,259,6316128,1,-1644.034546,140.642578,633.237427,-659.556396,976,707,1}; +window[] = {0,-1,-1,-1,-1,950,196,1743,71,1,994}; +*//*%FSM*/ +class FSM +{ + fsmName = "DangerIdentify"; + class States + { + /*%FSM*/ + class Exit + { + name = "Exit"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_1 + { + name = "Exit_1"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Threat_Detection + { + name = "Threat_Detection"; + init = /*%FSM*/"//_this globalChat format[""side: (@T %1 %2)"",time,side _this];" \n + "//copytoclipboard str [""danger.FSM"",time,_this,_dangerCause,_queue];" \n + "" \n + "_Unit = _this select 0;" \n + "_VCOM_MovedRecently = _this select 1;" \n + "_VCOMAI_ActivelyClearing = _this select 2;" \n + "_VCOM_MovedRecentlyCover = _this select 3;" \n + "_VCOM_VisuallyCanSee = false;" \n + "_Vcom_StanceSet = _this select 4;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + priority = 1000.000000; + to="Exit"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class isPlayer + { + priority = 800.000000; + to="Exit"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isPlayer _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + priority = 0.000000; + to="Threat_Decisions"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Stop_to_fire + { + name = "Stop_to_fire"; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + "" \n + "[_Unit,_VCOM_MovedRecently,_VCOM_VisuallyCanSee,_VCOM_MovedRecentlyCover] call VCOMAI_CombatMovement;" \n + "" \n + "/*" \n + "if (_Unit isEqualTo (leader _Unit)) then" \n + "{" \n + " if ( (_Vcom_StanceSet) + 600 < diag_ticktime ) then" \n + " {" \n + " _Unit spawn VCOMAI_SetCombatStance;" \n + " _Unit spawn VCOMAI_MoveToCoverGroup;" \n + " _Unit setvariable [""Vcom_StanceSet"",diag_ticktime];" \n + " };" \n + "" \n + "};" \n + "" \n + "*/"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Timeout + { + priority = 0.000000; + to="Stop_to_fire_Pt"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"time > _t + 1"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Combat_Mode + { + name = "Combat_Mode"; + init = /*%FSM*/"_Unit spawn VCOMAI_SetCombatStance;" \n + "_Unit spawn VCOMAI_MoveToCoverGroup;" \n + "" \n + "/*" \n + "if (_Unit isEqualTo (leader _Unit)) then" \n + "{" \n + " if ( (_Vcom_StanceSet) + 600 < diag_ticktime ) then" \n + " {" \n + " _Unit spawn VCOMAI_SetCombatStance;" \n + " _Unit spawn VCOMAI_MoveToCoverGroup;" \n + " _Unit setvariable [""Vcom_StanceSet"",diag_ticktime];" \n + " };" \n + "" \n + "};" \n + "*/"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + priority = 1000.000000; + to="Exit_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + priority = 0.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class InsideVehicle + { + name = "InsideVehicle"; + init = /*%FSM*/"_Unit call VCOMAI_VehicleHandleDanger;" \n + "" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + priority = 1000.000000; + to="Exit_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + priority = 0.000000; + to="____FAKE____"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_2 + { + name = "Exit_2"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Threat_Decisions + { + name = "Threat_Decisions"; + init = /*%FSM*/"private [""_t""];" \n + "_t = time;" \n + ""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Dead + { + priority = 1000.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"!alive _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class isPlayer + { + priority = 800.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"isPlayer _Unit"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Squad_Leader_Che + { + priority = 100.000000; + to="Threat_Decisions_2"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"((leader _Unit) isEqualTo _Unit)"/*%FSM*/; + action=/*%FSM*/"_Unit setVariable [""VCOMAI_ShotsFired"",false,true];"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _ + { + priority = 1.000000; + to="Threat_Decisions_1"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_3 + { + name = "Exit_3"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Stop_to_fire_Pt + { + name = "Stop_to_fire_Pt"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Threat_Decisions_1 + { + name = "Threat_Decisions_1"; + init = /*%FSM*/"//_CurrentStance = _Unit call VCOMAI_CurrentStance;" \n + "" \n + "private [""_CurrentStance""];" \n + "" \n + "_CurrentStance = behaviour _Unit;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class Wait + { + priority = 0.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait_1 + { + priority = 0.000000; + to="Exit_5"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_4 + { + name = "Exit_4"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Exit_5 + { + name = "Exit_5"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + }; + }; + /*%FSM*/ + /*%FSM*/ + class Threat_Decisions_2 + { + name = "Threat_Decisions_2"; + init = /*%FSM*/"" \n + "//_CurrentStance = _Unit call VCOMAI_CurrentStance;" \n + "" \n + "private [""_CurrentStance""];" \n + "" \n + "_CurrentStance = behaviour _Unit;" \n + "_NE = _Unit call VCOMAI_ClosestEnemy;"/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class GARRISON_CLEAR + { + priority = 110.000000; + to="Combat_Mode"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_VCOMAI_ActivelyClearing"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ENEMY_SPOTTED + { + priority = 100.000000; + to="Combat_Mode"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(!(isNull (_Unit call VCOMAI_RecentEnemyDetected))) && !(_CurrentStance isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class ENEMY_HEARD + { + priority = 90.000000; + to="Combat_Mode"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(_Unit getVariable ""VCOMAI_ShotsFired"") && !(_CurrentStance isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/"_Unit setVariable [""VCOMAI_ShotsFired"",false,true]"/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class EXPLOSION_ + { + priority = 80.000000; + to="Combat_Mode"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(count (_Unit call VCOMAI_ExplosionDetection)) > 0 && !(_CurrentStance isEqualTo ""COMBAT"")"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class DEAD_BODY_FOUND + { + priority = 70.000000; + to="Combat_Mode"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"(( _Unit call VCOMAI_DeadBodyDetection) distance _unit) < 50 && {!(_CurrentStance isEqualTo ""COMBAT"")} && {(_NE distance _Unit < 500)}"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class Wait + { + priority = 0.000000; + to="Exit_4"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/""/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + /*%FSM*/ + class ____FAKE____ + { + name = "____FAKE____"; + init = /*%FSM*/""/*%FSM*/; + precondition = /*%FSM*/""/*%FSM*/; + class Links + { + /*%FSM*/ + class _UseAI_NO + { + priority = 900.000000; + to="Exit"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_UseAI || (vehicle _Unit) in ArtilleryArray"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class _UseAI_NO_1 + { + priority = 900.000000; + to="Exit_3"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_UseAI"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class COMBAT + { + priority = 120.000000; + to="Stop_to_fire"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_CurrentStance isEqualTo ""COMBAT"" "/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + /*%FSM*/ + class COMBAT_AND_INVEH + { + priority = 70.000000; + to="InsideVehicle"; + precondition = /*%FSM*/""/*%FSM*/; + condition=/*%FSM*/"_CurrentStance isEqualTo ""COMBAT"" && !((vehicle _Unit) isEqualTo _Unit)"/*%FSM*/; + action=/*%FSM*/""/*%FSM*/; + }; + /*%FSM*/ + }; + }; + /*%FSM*/ + }; + initState="Threat_Detection"; + finalStates[] = + { + "Exit", + "Exit_1", + "Exit_2", + "Exit_3", + "Exit_4", + "Exit_5", + }; +}; +/*%FSM*/ \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/DialogDefines.hpp b/AntistasiOfficial.Altis/VCOMAI/DialogDefines.hpp new file mode 100644 index 00000000..396daecd --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/DialogDefines.hpp @@ -0,0 +1,1135 @@ +/////////////////////////////////////////////////////////////////////////// +/// Styles +/////////////////////////////////////////////////////////////////////////// +//This was created by Garret Barnhart. He is awesome. Thanks Garret +// Control types +/* +#define CT_STATIC 0 +#define CT_BUTTON 1 +#define CT_EDIT 2 +#define CT_SLIDER 3 +#define CT_COMBO 4 +#define CT_LISTBOX 5 +#define CT_TOOLBOX 6 +#define CT_CHECKBOXES 7 +#define CT_PROGRESS 8 +#define CT_HTML 9 +#define CT_STATIC_SKEW 10 +#define CT_ACTIVETEXT 11 +#define CT_TREE 12 +#define CT_STRUCTURED_TEXT 13 +#define CT_CONTEXT_MENU 14 +#define CT_CONTROLS_GROUP 15 +#define CT_SHORTCUTBUTTON 16 +#define CT_XKEYDESC 40 +#define CT_XBUTTON 41 +#define CT_XLISTBOX 42 +#define CT_XSLIDER 43 +#define CT_XCOMBO 44 +#define CT_ANIMATED_TEXTURE 45 +#define CT_OBJECT 80 +#define CT_OBJECT_ZOOM 81 +#define CT_OBJECT_CONTAINER 82 +#define CT_OBJECT_CONT_ANIM 83 +#define CT_LINEBREAK 98 +#define CT_USER 99 +#define CT_MAP 100 +#define CT_MAP_MAIN 101 +#define CT_LISTNBOX 102 + +// Static styles +#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 ST_TYPE 0xF0 +#define ST_SINGLE 0x00 +#define ST_MULTI 0x10 +#define ST_TITLE_BAR 0x20 +#define ST_PICTURE 0x30 +#define ST_FRAME 0x40 +#define ST_BACKGROUND 0x50 +#define ST_GROUP_BOX 0x60 +#define ST_GROUP_BOX2 0x70 +#define ST_HUD_BACKGROUND 0x80 +#define ST_TILE_PICTURE 0x90 +#define ST_WITH_RECT 0xA0 +#define ST_LINE 0xB0 + +#define ST_SHADOW 0x100 +#define ST_NO_RECT 0x200 +#define ST_KEEP_ASPECT_RATIO 0x800 + +#define ST_TITLE ST_TITLE_BAR + ST_CENTER + +// Slider styles +#define SL_DIR 0x400 +#define SL_VERT 0 +#define SL_HORZ 0x400 + +#define SL_TEXTURES 0x10 + +// progress bar +#define ST_VERTICAL 0x01 +#define ST_HORIZONTAL 0 + +// Listbox styles +#define LB_TEXTURES 0x10 +#define LB_MULTI 0x20 + +// Tree styles +#define TR_SHOWROOT 1 +#define TR_AUTOCOLLAPSE 2 + +// MessageBox styles +#define MB_BUTTON_OK 1 +#define MB_BUTTON_CANCEL 2 +#define MB_BUTTON_USER 4 +*/ + +/////////////////////////////////////////////////////////////////////////// +/// Base Classes +/////////////////////////////////////////////////////////////////////////// +class RscBuySellText +{ + access = 0; + type = 0; + idc = -1; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + text = ""; + fixedWidth = 0; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + style = 0; + shadow = 1; + colorShadow[] = + { + 0, + 0, + 0, + 0.5 + }; + font = "PuristaMedium"; + SizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + linespacing = 1; +}; +class RscBuySellStructuredText +{ + access = 0; + type = 13; + idc = -1; + style = 0; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + class Attributes + { + font = "PuristaMedium"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + shadow = 1; +}; +class RscBuySellPicture +{ + access = 0; + type = 0; + idc = -1; + style = 48; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + font = "TahomaB"; + sizeEx = 0; + lineSpacing = 0; + text = ""; + fixedWidth = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.2; + h = 0.15; +}; +class RscBuySellEdit +{ + access = 0; + type = 2; + x = 0; + y = 0; + h = 0.04; + w = 0.2; + colorBackground[] = + { + 0, + 0, + 0, + 1 + }; + colorText[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorSelection[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + autocomplete = ""; + text = ""; + size = 0.2; + style = "0x00 + 0x40"; + font = "PuristaMedium"; + shadow = 2; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + canModify = 1; +}; +class RscBuySellCombo +{ + access = 0; + type = 4; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorText[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorBackground[] = + { + 0, + 0, + 0, + 1 + }; + colorScrollbar[] = + { + 1, + 0, + 0, + 1 + }; + soundSelect[] = + { + "\A3\ui_f\data\sound\RscCombo\soundSelect", + 0.1, + 1 + }; + soundExpand[] = + { + "\A3\ui_f\data\sound\RscCombo\soundExpand", + 0.1, + 1 + }; + soundCollapse[] = + { + "\A3\ui_f\data\sound\RscCombo\soundCollapse", + 0.1, + 1 + }; + maxHistoryDelay = 1; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + style = 16; + x = 0; + y = 0; + w = 0.12; + h = 0.035; + shadow = 0; + colorSelectBackground[] = + { + 1, + 1, + 1, + 0.7 + }; + arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_ca.paa"; + arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + wholeHeight = 0.45; + color[] = + { + 1, + 1, + 1, + 1 + }; + colorActive[] = + { + 1, + 0, + 0, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; +}; +class RscBuySellListBox +{ + access = 0; + type = 5; + w = 0.4; + h = 0.4; + rowHeight = 0; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorScrollbar[] = + { + 1, + 0, + 0, + 0 + }; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorSelect2[] = + { + 0, + 0, + 0, + 1 + }; + colorSelectBackground[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorSelectBackground2[] = + { + 1, + 1, + 1, + 0.5 + }; + colorBackground[] = + { + 0, + 0, + 0, + 0.3 + }; + soundSelect[] = + { + "\A3\ui_f\data\sound\RscListbox\soundSelect", + 0.09, + 1 + }; + arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; + arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + style = 16; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + shadow = 0; + colorShadow[] = + { + 0, + 0, + 0, + 0.5 + }; + color[] = + { + 1, + 1, + 1, + 1 + }; + period = 1.2; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; +}; +class RscBuySellButton +{ + access = 0; + type = 1; + text = ""; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + colorBackground[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 0.7 + }; + colorBackgroundDisabled[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorBackgroundActive[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorFocused[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorShadow[] = + { + 0, + 0, + 0, + 1 + }; + colorBorder[] = + { + 0, + 0, + 0, + 1 + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButton\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButton\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButton\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButton\soundEscape", + 0.09, + 1 + }; + style = 2; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + shadow = 2; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + offsetX = 0.003; + offsetY = 0.003; + offsetPressedX = 0.002; + offsetPressedY = 0.002; + borderSize = 0; +}; +class RscBuySellShortcutButton +{ + type = 16; + x = 0.1; + y = 0.1; + class HitZone + { + left = 0; + top = 0; + right = 0; + bottom = 0; + }; + class ShortcutPos + { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos + { + left = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0; + }; + shortcuts[] = + { + }; + textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)"; + color[] = + { + 1, + 1, + 1, + 1 + }; + color2[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorBackground[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorBackground2[] = + { + 1, + 1, + 1, + 1 + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButton\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButton\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButton\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButton\soundEscape", + 0.09, + 1 + }; + class Attributes + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + shadow = "true"; + }; + idc = -1; + style = 0; + default = 0; + shadow = 1; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + period = 0.4; + font = "PuristaMedium"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class AttributesImage + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + }; +}; +class RscBuySellShortcutButtonMain +{ + idc = -1; + style = 0; + default = 0; + w = 0.313726; + h = 0.104575; + color[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + class HitZone + { + left = 0; + top = 0; + right = 0; + bottom = 0; + }; + class ShortcutPos + { + left = 0.0145; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + }; + class TextPos + { + left = "(((safezoneW / safezoneH) min 1.2) / 32) * 1.5"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + right = 0.005; + bottom = 0; + }; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa"; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + period = 0.5; + font = "PuristaMedium"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + text = ""; + action = ""; + class Attributes + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class AttributesImage + { + font = "PuristaMedium"; + color = "#E5E5E5"; + align = "false"; + }; +}; +class RscBuySellFrame +{ + type = 0; + idc = -1; + style = 64; + shadow = 2; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + font = "PuristaMedium"; + sizeEx = 0.02; + text = ""; +}; +class RscBuySellSlider +{ + access = 0; + type = 3; + style = 1024; + w = 0.3; + color[] = + { + 1, + 1, + 1, + 0.8 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + shadow = 0; + h = 0.025; +}; +class RscBuySellIGUIBack +{ + type = 0; + idc = 124; + style = 128; + text = ""; + colorText[] = + { + 0, + 0, + 0, + 0 + }; + font = "PuristaMedium"; + sizeEx = 0; + shadow = 0; + x = 0.1; + y = 0.1; + w = 0.1; + h = 0.1; + colorbackground[] = + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])" + }; +}; +class RscBuySellCheckbox +{ + idc = -1; + type = 7; + style = 0; + x = "LINE_X(XVAL)"; + y = "LINE_Y"; + w = "LINE_W(WVAL)"; + h = 0.029412; + colorText[] = + { + 1, + 0, + 0, + 1 + }; + color[] = + { + 0, + 0, + 0, + 0 + }; + colorBackground[] = + { + 0, + 0, + 1, + 1 + }; + colorTextSelect[] = + { + 0, + 0.8, + 0, + 1 + }; + colorSelectedBg[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorTextDisable[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + colorDisable[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + font = "PuristaMedium"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 0.8)"; + rows = 1; + columns = 1; + strings[] = + { + "UNCHECKED" + }; + checked_strings[] = + { + "CHECKED" + }; +}; +class RscBuySellButtonMenu +{ + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,0.5)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = + { + 0, + 0, + 0, + 0.8 + }; + colorBackground2[] = + { + 1, + 1, + 1, + 0.5 + }; + color[] = + { + 1, + 1, + 1, + 1 + }; + color2[] = + { + 1, + 1, + 1, + 1 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + class TextPos + { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0; + }; + class Attributes + { + font = "PuristaLight"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class ShortcutPos + { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundEscape", + 0.09, + 1 + }; +}; +class RscBuySellButtonMenuOK +{ + idc = 1; + shortcuts[] = + { + "0x00050000 + 0", + 28, + 57, + 156 + }; + default = 1; + text = "OK"; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButtonMenuOK\soundPush", + 0.09, + 1 + }; +}; +class RscBuySellButtonMenuCancel +{ + idc = 2; + shortcuts[] = + { + "0x00050000 + 1" + }; + text = "Cancel"; +}; +class RscBuySellControlsGroup +{ + class VScrollbar + { + color[] = + { + 1, + 1, + 1, + 1 + }; + width = 0.021; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + shadow = 0; + }; + class HScrollbar + { + color[] = + { + 1, + 1, + 1, + 1 + }; + height = 0.028; + shadow = 0; + }; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + class Controls + { + }; + type = 15; + idc = -1; + x = 0; + y = 0; + w = 1; + h = 1; + shadow = 0; + style = 16; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/Notes.txt b/AntistasiOfficial.Altis/VCOMAI/Notes.txt new file mode 100644 index 00000000..b5be3ab3 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/Notes.txt @@ -0,0 +1,14 @@ +Static Weapon Notes: + +So far Vanilla bags contain their proper "assembleInfo" information as seen below +Here is the pathway example +configfile >> "CfgVehicles" >> "B_GMG_01_high_weapon_F" >> "assembleInfo" >> "assembleTo" +and then the result +assembleTo = "B_GMG_01_high_F"; + +RHS example +configfile >> "CfgVehicles" >> "RHS_SPG9_Tripod_Bag" >> "assembleTo" +assembleTo = "rhs_SPG9_INS"; + +With this we should be able to dynamically pull the classnames of bags and assign them to units. This way they can dynamically use any appropriately modded static bag. +There is also dissasembleTo[] = {}; to consider. This can be used to figure out what bag an AI unit should recieve. diff --git a/AntistasiOfficial.Altis/VCOMAI/ToDo.txt b/AntistasiOfficial.Altis/VCOMAI/ToDo.txt new file mode 100644 index 00000000..f65a0c59 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/ToDo.txt @@ -0,0 +1,4 @@ +Artillery check for friendlies and etc. + +This one ain't so easy. I like your rank based system for applying skill levels, but there's a major flaw with dynamic mods like ALiVE, or anyone who uses zeus. Almost all units pop in as privates.. and thus are total losers. Consider a way to define classes and the skills they would get? Or maybe it would be easier to just assign them rank using the same method. Another option... and the hardest one... Go the ACE 3 route and use 3den modules for everything. Set skills in module, apply those skills to units based on class, or rank, or module sync. + diff --git a/AntistasiOfficial.Altis/VCOMAI/defines.hpp b/AntistasiOfficial.Altis/VCOMAI/defines.hpp new file mode 100644 index 00000000..fe54dc71 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/defines.hpp @@ -0,0 +1,1567 @@ +/////////////////////////////////////////////////////////////////////////// +/// Styles +/////////////////////////////////////////////////////////////////////////// + +// Control types +#define CT_STATIC 0 +#define CT_BUTTON 1 +#define CT_EDIT 2 +#define CT_SLIDER 3 +#define CT_COMBO 4 +#define CT_LISTBOX 5 +#define CT_TOOLBOX 6 +#define CT_CHECKBOXES 7 +#define CT_PROGRESS 8 +#define CT_HTML 9 +#define CT_STATIC_SKEW 10 +#define CT_ACTIVETEXT 11 +#define CT_TREE 12 +#define CT_STRUCTURED_TEXT 13 +#define CT_CONTEXT_MENU 14 +#define CT_CONTROLS_GROUP 15 +#define CT_SHORTCUTBUTTON 16 +#define CT_XKEYDESC 40 +#define CT_XBUTTON 41 +#define CT_XLISTBOX 42 +#define CT_XSLIDER 43 +#define CT_XCOMBO 44 +#define CT_ANIMATED_TEXTURE 45 +#define CT_OBJECT 80 +#define CT_OBJECT_ZOOM 81 +#define CT_OBJECT_CONTAINER 82 +#define CT_OBJECT_CONT_ANIM 83 +#define CT_LINEBREAK 98 +#define CT_USER 99 +#define CT_MAP 100 +#define CT_MAP_MAIN 101 +#define CT_LISTNBOX 102 + +// Static styles +#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 ST_TYPE 0xF0 +#define ST_SINGLE 0x00 +#define ST_MULTI 0x10 +#define ST_TITLE_BAR 0x20 +#define ST_PICTURE 0x30 +#define ST_FRAME 0x40 +#define ST_BACKGROUND 0x50 +#define ST_GROUP_BOX 0x60 +#define ST_GROUP_BOX2 0x70 +#define ST_TILE_PICTURE 0x90 +#define ST_WITH_RECT 0xA0 +#define ST_LINE 0xB0 + +#define ST_SHADOW 0x100 +#define ST_NO_RECT 0x200 +#define ST_KEEP_ASPECT_RATIO 0x800 + +#define ST_TITLE ST_TITLE_BAR + ST_CENTER + +// Slider styles +#define SL_DIR 0x400 +#define SL_VERT 0 +#define SL_HORZ 0x400 + +#define SL_TEXTURES 0x10 + +// progress bar +#define ST_VERTICAL 0x01 +#define ST_HORIZONTAL 0 + +// Listbox styles +#define LB_TEXTURES 0x10 +#define LB_MULTI 0x20 + +// Tree styles +#define TR_SHOWROOT 1 +#define TR_AUTOCOLLAPSE 2 + +// MessageBox styles +#define MB_BUTTON_OK 1 +#define MB_BUTTON_CANCEL 2 +#define MB_BUTTON_USER 4 +#define MBG_WOO_FONT_SIZE 0.018 * safezoneH + +/////////////////////////////////////////////////////////////////////////// +/// Base Classes +/////////////////////////////////////////////////////////////////////////// + +class RscText +{ + access = 0; + type = 0; + idc = -1; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + text = ""; + fixedWidth = 0; + x = 0; + y = 0; + h = 0.037; + w = 0.3; + style = 0; + shadow = 1; + colorShadow[] = + { + 0, + 0, + 0, + 0.5 + }; + font = "RobotoCondensed"; + SizeEx = MBG_WOO_FONT_SIZE; + linespacing = 1; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; +}; +class RscStructuredText +{ + access = 0; + type = 13; + idc = -1; + style = 0; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + class Attributes + { + font = "RobotoCondensed"; + color = "#ffffff"; + align = "left"; + shadow = 1; + }; + x = 0; + y = 0; + h = 0.035; + w = 0.1; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + shadow = 1; +}; +class RscPicture +{ + access = 0; + type = 0; + idc = -1; + style = 48; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + lineSpacing = 0; + text = ""; + fixedWidth = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.2; + h = 0.15; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; +}; +class RscEdit +{ + access = 0; + type = 2; + x = 0; + y = 0; + h = 0.04; + w = 0.2; + colorBackground[] = + { + 0, + 0, + 0, + 1 + }; + colorText[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorSelection[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + autocomplete = ""; + text = ""; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + style = "0x00 + 0x40"; + font = "RobotoCondensed"; + shadow = 2; + sizeEx = MBG_WOO_FONT_SIZE; + canModify = 1; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; +}; +class RscCombo +{ + access = 0; + type = 4; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorBackground[] = + { + 0, + 0, + 0, + 1 + }; + colorScrollbar[] = + { + 1, + 0, + 0, + 1 + }; + soundSelect[] = + { + "\A3\ui_f\data\sound\RscCombo\soundSelect", + 0.1, + 1 + }; + soundExpand[] = + { + "\A3\ui_f\data\sound\RscCombo\soundExpand", + 0.1, + 1 + }; + soundCollapse[] = + { + "\A3\ui_f\data\sound\RscCombo\soundCollapse", + 0.1, + 1 + }; + maxHistoryDelay = 1; + class VScrollbar + { + width = 0.021; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + + class HScrollbar + { + height = 0.028; + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + style = "0x10 + 0x200"; + x = 0; + y = 0; + w = 0.12; + h = 0.035; + shadow = 0; + colorSelectBackground[] = + { + 1, + 1, + 1, + 0.7 + }; + arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_ca.paa"; + arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + wholeHeight = 0.45; + color[] = + { + 1, + 1, + 1, + 1 + }; + colorActive[] = + { + 1, + 0, + 0, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; +}; +class RscListBox +{ + access = 0; + type = 5; + w = 0.4; + h = 0.4; + rowHeight = 0; + class ListScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorScrollbar[] = + { + 1, + 0, + 0, + 0 + }; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorSelect2[] = + { + 0, + 0, + 0, + 1 + }; + colorSelectBackground[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorSelectBackground2[] = + { + 1, + 1, + 1, + 0.5 + }; + colorBackground[] = + { + 0, + 0, + 0, + 0.3 + }; + soundSelect[] = + { + "\A3\ui_f\data\sound\RscListbox\soundSelect", + 0.09, + 1 + }; + arrowEmpty = "#(argb,8,8,3)color(1,1,1,1)"; + arrowFull = "#(argb,8,8,3)color(1,1,1,1)"; + + style = 16; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + shadow = 0; + colorShadow[] = + { + 0, + 0, + 0, + 0.5 + }; + color[] = + { + 1, + 1, + 1, + 1 + }; + period = 1.2; + maxHistoryDelay = 1; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; +}; +class RscButton +{ + access = 0; + type = 1; + text = ""; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + colorBackground[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 0.7 + }; + colorBackgroundDisabled[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorBackgroundActive[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorFocused[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorShadow[] = + { + 0, + 0, + 0, + 1 + }; + colorBorder[] = + { + 0, + 0, + 0, + 1 + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButton\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButton\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButton\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButton\soundEscape", + 0.09, + 1 + }; + style = 2; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + shadow = 2; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + offsetX = 0.003; + offsetY = 0.003; + offsetPressedX = 0.002; + offsetPressedY = 0.002; + borderSize = 0; +}; +class RscShortcutButton +{ + deletable = 0; + fade = 0; + type = 16; + x = 0.1; + y = 0.1; + class HitZone + { + left = 0; + top = 0; + right = 0; + bottom = 0; + }; + class ShortcutPos + { + left = 0; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + }; + class TextPos + { + left = 0; + top = 0; + right = 0; + bottom = 0; + }; + shortcuts[] = + { + }; + textureNoShortcut = "#(argb,8,8,3)color(0,0,0,0)"; + color[] = + { + 1, + 1, + 1, + 1 + }; + colorFocused[] = + { + 1, + 1, + 1, + 1 + }; + color2[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + colorBackground[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])", + 1 + }; + colorBackgroundFocused[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.77])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.51])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.08])", + 1 + }; + colorBackground2[] = + { + 1, + 1, + 1, + 1 + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButton\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButton\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButton\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButton\soundEscape", + 0.09, + 1 + }; + class Attributes + { + font = "RobotoCondensed"; + color = "#E5E5E5"; + align = "center"; + shadow = "true"; + }; + idc = -1; + style = 0; + default = 0; + shadow = 1; + w = 0.183825; + h = "((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)"; + textSecondary = ""; + colorSecondary[] = + { + 1, + 1, + 1, + 1 + }; + colorFocusedSecondary[] = + { + 1, + 1, + 1, + 1 + }; + color2Secondary[] = + { + 0.95, + 0.95, + 0.95, + 1 + }; + colorDisabledSecondary[] = + { + 1, + 1, + 1, + 0.25 + }; + sizeExSecondary = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + fontSecondary = "RobotoCondensed"; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\normal_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButton\down_ca.paa"; + periodFocus = 1.2; + periodOver = 0.8; + period = 0.4; + font = "RobotoCondensed"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + text = ""; + action = ""; + class AttributesImage + { + font = "RobotoCondensed"; + color = "#E5E5E5"; + align = "center"; + }; +}; +class RscShortcutButtonMain +{ + idc = -1; + style = 0; + default = 0; + w = 0.313726; + h = 0.104575; + color[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + class HitZone + { + left = 0; + top = 0; + right = 0; + bottom = 0; + }; + class ShortcutPos + { + left = 0.0145; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + w = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2) * (3/4)"; + h = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + }; + class TextPos + { + left = "(((safezoneW / safezoneH) min 1.2) / 32) * 1.5"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 20)*2 - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)) / 2"; + right = 0.005; + bottom = 0; + }; + animTextureNormal = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + animTextureDisabled = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\disabled_ca.paa"; + animTextureOver = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\over_ca.paa"; + animTextureFocused = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\focus_ca.paa"; + animTexturePressed = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\down_ca.paa"; + animTextureDefault = "\A3\ui_f\data\GUI\RscCommon\RscShortcutButtonMain\normal_ca.paa"; + period = 0.5; + font = "RobotoCondensed"; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1.2)"; + text = ""; + action = ""; + class Attributes + { + font = "RobotoCondensed"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class AttributesImage + { + font = "RobotoCondensed"; + color = "#E5E5E5"; + align = "false"; + }; +}; +class RscFrame +{ + type = 0; + idc = -1; + style = 64; + shadow = 2; + colorBackground[] = + { + 0, + 0, + 0, + 0 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + text = ""; +}; +class RscSlider +{ + + style = "0x400 + 0x10"; + + type = 43; // this is the more "modern" slider. Type = 3 is the old dull one. + + shadow = 0; + + color[] = {1,1,1,0.4}; + + colorActive[] = {1,1,1,1}; + + colorDisabled[] = {0.5,0.5,0.5,0.2}; + + arrowEmpty = "\A3\ui_f\data\gui\cfg\slider\arrowEmpty_ca.paa"; + + arrowFull = "\A3\ui_f\data\gui\cfg\slider\arrowFull_ca.paa"; + + border = "\A3\ui_f\data\gui\cfg\slider\border_ca.paa"; + + thumb = "\A3\ui_f\data\gui\cfg\slider\thumb_ca.paa"; + +}; +/* +class RscSlider +{ + access = 0; + type = 3; + style = 1024; + w = 0.3; + color[] = + { + 1, + 1, + 1, + 0.8 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + shadow = 0; + h = 0.025; +}; +*/ +class IGUIBack +{ + type = 0; + idc = 124; + style = 128; + text = ""; + colorText[] = + { + 0, + 0, + 0, + 0 + }; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + shadow = 0; + x = 0.1; + y = 0.1; + w = 0.1; + h = 0.1; + colorbackground[] = + { + "(profilenamespace getvariable ['IGUI_BCG_RGB_R',0])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_G',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_B',1])", + "(profilenamespace getvariable ['IGUI_BCG_RGB_A',0.8])" + }; +}; +class RscCheckbox +{ + idc = -1; + type = 7; + style = 0; + x = "LINE_X(XVAL)"; + y = "LINE_Y"; + w = "LINE_W(WVAL)"; + h = 0.029412; + colorText[] = + { + 1, + 0, + 0, + 1 + }; + color[] = + { + 0, + 0, + 0, + 0 + }; + colorBackground[] = + { + 0, + 0, + 1, + 1 + }; + colorTextSelect[] = + { + 0, + 0.8, + 0, + 1 + }; + colorSelectedBg[] = + { + "(profilenamespace getvariable ['GUI_BCG_RGB_R',0.69])", + "(profilenamespace getvariable ['GUI_BCG_RGB_G',0.75])", + "(profilenamespace getvariable ['GUI_BCG_RGB_B',0.5])", + 1 + }; + colorSelect[] = + { + 0, + 0, + 0, + 1 + }; + colorTextDisable[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + colorDisable[] = + { + 0.4, + 0.4, + 0.4, + 1 + }; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; + font = "RobotoCondensed"; + sizeEx = MBG_WOO_FONT_SIZE; + rows = 1; + columns = 1; + strings[] = + { + "UNCHECKED" + }; + checked_strings[] = + { + "CHECKED" + }; +}; +class RscButtonMenu +{ + idc = -1; + type = 16; + style = "0x02 + 0xC0"; + default = 0; + shadow = 0; + x = 0; + y = 0; + w = 0.095589; + h = 0.039216; + animTextureNormal = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDisabled = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureOver = "#(argb,8,8,3)color(1,1,1,0.5)"; + animTextureFocused = "#(argb,8,8,3)color(1,1,1,1)"; + animTexturePressed = "#(argb,8,8,3)color(1,1,1,1)"; + animTextureDefault = "#(argb,8,8,3)color(1,1,1,1)"; + colorBackground[] = + { + 0, + 0, + 0, + 0.8 + }; + colorBackground2[] = + { + 1, + 1, + 1, + 0.5 + }; + color[] = + { + 1, + 1, + 1, + 1 + }; + color2[] = + { + 1, + 1, + 1, + 1 + }; + colorText[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.25 + }; + period = 1.2; + periodFocus = 1.2; + periodOver = 1.2; + size = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + sizeEx = MBG_WOO_FONT_SIZE; + tooltipColorText[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorBox[] = + { + 1, + 1, + 1, + 1 + }; + tooltipColorShade[] = + { + 0, + 0, + 0, + 0.65 + }; + class TextPos + { + left = "0.25 * (((safezoneW / safezoneH) min 1.2) / 40)"; + top = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) - (((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)) / 2"; + right = 0.005; + bottom = 0; + }; + class Attributes + { + font = "RobotoCondensed"; + color = "#E5E5E5"; + align = "left"; + shadow = "false"; + }; + class ShortcutPos + { + left = "(6.25 * (((safezoneW / safezoneH) min 1.2) / 40)) - 0.0225 - 0.005"; + top = 0.005; + w = 0.0225; + h = 0.03; + }; + soundEnter[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundEnter", + 0.09, + 1 + }; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundPush", + 0.09, + 1 + }; + soundClick[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundClick", + 0.09, + 1 + }; + soundEscape[] = + { + "\A3\ui_f\data\sound\RscButtonMenu\soundEscape", + 0.09, + 1 + }; +}; +class RscButtonMenuOK +{ + idc = 1; + shortcuts[] = + { + "0x00050000 + 0", + 28, + 57, + 156 + }; + default = 1; + text = "OK"; + soundPush[] = + { + "\A3\ui_f\data\sound\RscButtonMenuOK\soundPush", + 0.09, + 1 + }; +}; +class RscButtonMenuCancel +{ + idc = 2; + shortcuts[] = + { + "0x00050000 + 1" + }; + text = "Cancel"; +}; +class RscControlsGroup +{ + class VScrollbar + { + color[] = + { + 1, + 1, + 1, + 1 + }; + width = 0.021; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; + shadow = 0; + }; + class HScrollbar + { + color[] = + { + 1, + 1, + 1, + 1 + }; + height = 0.028; + shadow = 0; + }; + class ScrollBar + { + color[] = + { + 1, + 1, + 1, + 0.6 + }; + colorActive[] = + { + 1, + 1, + 1, + 1 + }; + colorDisabled[] = + { + 1, + 1, + 1, + 0.3 + }; + shadow = 0; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + }; + class Controls + { + }; + type = 15; + idc = -1; + x = 0; + y = 0; + w = 1; + h = 1; + shadow = 0; + style = 16; +}; +class RscTreeScrollBar +{ + + idc = -1; + color[] = {1,1,1,0.6}; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "\A3\ui_f\data\gui\cfg\scrollbar\thumb_ca.paa"; + arrowEmpty = "\A3\ui_f\data\gui\cfg\scrollbar\arrowEmpty_ca.paa"; + arrowFull = "\A3\ui_f\data\gui\cfg\scrollbar\arrowFull_ca.paa"; + border = "\A3\ui_f\data\gui\cfg\scrollbar\border_ca.paa"; + shadow = 0; + scrollSpeed = 0.06; + width = 0; + height = 0; + autoScrollEnabled = 0; + autoScrollSpeed = -1; + autoScrollDelay = 5; + autoScrollRewind = 0; +}; +class RscTree +{ + idc = -1; + type = 12; + style = 0; + font = "RobotoCondensed"; + sizeEx = "(((((safezoneW / safezoneH) min 1.2) / 1.2) / 25) * 1)"; + expandedTexture = "A3\ui_f\data\gui\rsccommon\rsctree\expandedTexture_ca.paa"; + hiddenTexture = "A3\ui_f\data\gui\rsccommon\rsctree\hiddenTexture_ca.paa"; + x = 0; + y = 0; + w = 0.1; + h = 0.2; + rowHeight = 0.0439091; + colorText[] = {1,1,1,1.0}; + colorSelect[] = {1,1,1,0.7}; + colorSelectText[] = {0,0,0,1}; + colorBackground[] = {0,0,0,0}; + colorSelectBackground[] = {0,0,0,0.5}; + colorBorder[] = {0,0,0,0}; + colorPicture[] = {1,1,1,1}; + colorPictureSelected[] = {1,1,1,1}; + colorPictureDisabled[] = {1,1,1,1}; + colorPictureRight[] = {1,1,1,1}; + colorPictureRightDisabled[] = {1,1,1,0.25}; + colorPictureRightSelected[] = {0,0,0,1}; + colorDisabled[] = {1,1,1,0.25}; + borderSize = 0; + expandOnDoubleclick = 1; + maxHistoryDelay = 1; + colorArrow[] = {0,0,0,0}; + colorMarked[] = {1,0.5,0,0.5}; + colorMarkedText[] = {1,1,1,1}; + colorMarkedSelected[] = {1,0.5,0,1}; + onTreeSelChanged = ""; + onTreeLButtonDown = ""; + onTreeDblClick = ""; + onTreeExpanded = ""; + onTreeCollapsed = ""; + onTreeMouseMove = ""; + onTreeMouseHold = ""; + onTreeMouseExit = ""; + class ScrollBar: RscTreeScrollBar{}; +}; +class RscObject +{ + access = 0; + idc = -1; + type = 81; + style = 0x00; + blinkingPeriod = 0; + model = "\a3\Ui_f\objects\Compass.p3d"; + scale = 0.5; + x = 0; + y = 0; + z = 1; + w = 1; + h = 1; + + xBack = 0; + yBack = 0; + zBack = 1; + enableZoom = 0; + zoomDuration = 0; + inBack = 0; + direction[] = {0,0,1}; + up[] = {0,1,0}; + tooltip = ""; + tooltipColorShade[] = {0,0,0,1}; + tooltipColorText[] = {1,1,1,1}; + tooltipColorBox[] = {1,1,1,1}; + onMouseMoving = ""; + onMouseHolding = ""; + onMouseDown = ""; + +}; +class RscActiveText +{ + idc = -1; + type = CT_ACTIVETEXT; + style = ST_PICTURE; + x = 0.75; + y = 0.5; + w = 0.2; + h = 0.035; + font = RobotoCondensed; + sizeEx = 0.024; + color[] = { 1, 1, 1, 1 }; + colorActive[] = { 1, 1, 1, 1 }; + colorDisabled[] = {1,1,1,1}; + soundEnter[] = { "", 0, 1 }; // no sound + soundPush[] = { "A3\missions_f\data\sounds\click.wss", 0, 1 }; + soundClick[] = { "", 0, 1 }; + soundEscape[] = { "", 0, 1 }; + action = "hint ""Good choice!"""; + tooltip = ""; + text = ""; + default = true; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/dialogs.hpp b/AntistasiOfficial.Altis/VCOMAI/dialogs.hpp new file mode 100644 index 00000000..cde96823 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/dialogs.hpp @@ -0,0 +1,197 @@ + +//////////////////////////////////////////////////////// +// GUI EDITOR OUTPUT START (by [Vcom]Dominic, v1.063, #Remuve) +//////////////////////////////////////////////////////// +/* #Hunome +$[ + 1.063, + ["VCOMAIPROJECT",[[0,0,1,1],0.025,0.04,"GUI_GRID"],0,0,0], + [1600,"VCOMAI_ButtonOptions",[1,"VCOMAI - OPTIONS",["0.0153125 * safezoneW + safezoneX","0.137 * safezoneH + safezoneY","0.159844 * safezoneW","0.022 * safezoneH"],[-1,-1,-1,-1],[0.34,0.99,0.22,1],[0.34,0.99,0.22,1],"Open VCOMAI's options menu. Only the host's changes will be made global.","-1"],[]] +] +*/ +class VCOM_ESCButton +{ + idd = 5230; + movingenable = true; + moving = 1; +class Controls +{ +class VCOM_Infotext: RscText +{ + idc = 1001; + text = "Mouse Here for VCOM Options."; //--- ToDo: Localize; + x = 0.85 * safezoneW + safezoneX; + y = 0.1 * safezoneH + safezoneY; + w = 0.159844 * safezoneW; + h = 0.022 * safezoneH; +}; +class VCOMAI_ButtonOptions: RscButton +{ + idc = 1600; + text = "VCOMAI - OPTIONS"; //--- ToDo: Localize; + x = 0.85 * safezoneW + safezoneX; + y = 0.1 * safezoneH + safezoneY; + w = 0.159844 * safezoneW; + h = 0.022 * safezoneH; + onButtonClick = "null = [] call VCOM_PARAMSOPTIONS;"; + colorBackground[] = {0.34,0.99,0.22,1}; + colorActive[] = {0.34,0.99,0.22,1}; + tooltip = "Open VCOMAI's options menu. Only the host's changes will be made global."; //--- ToDo: Localize; +}; +}; +}; +//////////////////////////////////////////////////////// +// GUI EDITOR OUTPUT START (by Genesis, v1.063, #Rysaji) +//////////////////////////////////////////////////////// + +class VCOM_PARAMS +{ + idd = 7123; + movingenable = true; +class Controls +{ +class RscPicture_1200: RscPicture +{ + idc = 1200; + text = "#(argb,8,8,3)color(1,1,1,1)"; + x = 0.2525 * safezoneW + safezoneX; + y = 0.192 * safezoneH + safezoneY; + w = 0.45375 * safezoneW; + h = 0.583 * safezoneH; +}; +class VCOMAI_ParameterList: RscListbox +{ + idc = 1500; + x = 0.304062 * safezoneW + safezoneX; + y = 0.247 * safezoneH + safezoneY; + w = 0.134062 * safezoneW; + h = 0.484 * safezoneH; + colorBackground[] = {0,0,0,1}; + colorActive[] = {0,0,0,1}; + tooltip = "Displays all easily changeable params here."; //--- ToDo: Localize; +}; +class VCOMAI_SETPARAMTEXT: RscEdit +{ + idc = 1400; + x = 0.5 * safezoneW + safezoneX; + y = 0.599 * safezoneH + safezoneY; + w = 0.154687 * safezoneW; + h = 0.022 * safezoneH; + tooltip = "Enter the value you want here. Becareful with this! You can cause some major problems."; //--- ToDo: Localize; + onButtonClick = "closedialog 7123"; +}; +class VCOM_TEXT1: RscText +{ + idc = 1000; + text = "VALUE:"; //--- ToDo: Localize; + x = 0.5 * safezoneW + safezoneX; + y = 0.577 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.022 * safezoneH; +}; +class RscTextInfo: RscControlsGroup + { + idc = 27200; + x = 0.45875 * safezoneW + safezoneX; + y = 0.247 * safezoneH + safezoneY; + w = 0.237187 * safezoneW; + h = 0.308 * safezoneH; + class VScrollbar + { + idc = 20; + color[] = {1,1,1,0.5}; + width = 0.021; + autoScrollEnabled = 0; + autoScrollSpeed = 0; + autoScrollRewind = 0; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "#(argb,8,8,3)color(0,0,0,1)"; + arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + border = "#(argb,8,8,3)color(1,1,1,1)"; + }; + class HScrollbar + { + idc = 21; + color[] = {1,1,1,0.5}; + width = 0.021; + autoScrollEnabled = 1; + autoScrollSpeed = 0.2; + autoScrollRewind = 0.2; + colorActive[] = {1,1,1,1}; + colorDisabled[] = {1,1,1,0.3}; + thumb = "#(argb,8,8,3)color(0,0,0,1)"; + arrowEmpty = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + arrowFull = "\A3\ui_f\data\GUI\RscCommon\rsccombo\arrow_combo_active_ca.paa"; + border = "#(argb,8,8,3)color(1,1,1,1)"; + }; + sizeEx = 0.02; + class Controls + { + class VCOMAI_StructuredText: RscStructuredText + { + idc = 27201; + x = 0; + y = 0; + w = 0.24 * safezoneW; + h = 1; + text = ""; + colorText[] = {1,1,1,1}; + shadow = 0; + colorBackground[] = {0,0,0,1}; + }; + + }; + }; +class VCOMAI_ChangeButton: RscButton +{ + idc = 1600; + text = "CONFIRM"; //--- ToDo: Localize; + x = 0.546406 * safezoneW + safezoneX; + y = 0.643 * safezoneH + safezoneY; + w = 0.061875 * safezoneW; + h = 0.044 * safezoneH; + tooltip = "Confirm the value listed above."; //--- ToDo: Localize; + onButtonClick = "null = [] call VCOM_PARAMCHANGE"; +}; +class VCOMAI_ButtonExit: RscButton +{ + idc = 1601; + text = "EXIT"; //--- ToDo: Localize; + x = 0.2525 * safezoneW + safezoneX; + y = 0.192 * safezoneH + safezoneY; + w = 0.04125 * safezoneW; + h = 0.033 * safezoneH; + onButtonClick = "closedialog 7123"; +}; +class VCOM_AITEXTLIST: RscText +{ + idc = 1001; + text = "PARAMETERS"; //--- ToDo: Localize; + x = 0.335 * safezoneW + safezoneX; + y = 0.225 * safezoneH + safezoneY; + w = 0.0928125 * safezoneW; + h = 0.022 * safezoneH; +}; +}; +}; +//////////////////////////////////////////////////////// +// GUI EDITOR OUTPUT END +//////////////////////////////////////////////////////// + + +/* #Rysaji +$[ + 1.063, + ["PARAMSBOX",[[0,0,1,1],0.025,0.04,"GUI_GRID"],0,0,0], + [1200,"",[1,"#(argb,8,8,3)color(1,1,1,1)",["0.2525 * safezoneW + safezoneX","0.192 * safezoneH + safezoneY","0.45375 * safezoneW","0.583 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1500,"VCOMAI_ParameterList",[1,"",["0.304062 * safezoneW + safezoneX","0.247 * safezoneH + safezoneY","0.134062 * safezoneW","0.484 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"Displays all easily changeable params here.","-1"],[]], + [1400,"VCOMAI_SETPARAMTEXT",[1,"",["0.5 * safezoneW + safezoneX","0.599 * safezoneH + safezoneY","0.154687 * safezoneW","0.022 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"Enter the value you want here. Becareful with this! You can cause some major problems.","-1"],[]], + [1000,"VCOM_TEXT1",[1,"VALUE:",["0.5 * safezoneW + safezoneX","0.577 * safezoneH + safezoneY","0.061875 * safezoneW","0.022 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1100,"VCOMAI_StructuredText",[1,"",["0.45875 * safezoneW + safezoneX","0.247 * safezoneH + safezoneY","0.237187 * safezoneW","0.308 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1600,"VCOMAI_ChangeButton",[1,"CONFIRM",["0.546406 * safezoneW + safezoneX","0.643 * safezoneH + safezoneY","0.061875 * safezoneW","0.044 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"Confirm the value listed above.","-1"],[]], + [1601,"VCOMAI_ButtonExit",[1,"EXIT",["0.2525 * safezoneW + safezoneX","0.192 * safezoneH + safezoneY","0.04125 * safezoneW","0.033 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]], + [1001,"VCOM_AITEXTLIST",[1,"PARAMETERS",["0.335 * safezoneW + safezoneX","0.225 * safezoneH + safezoneY","0.0928125 * safezoneW","0.022 * safezoneH"],[-1,-1,-1,-1],[-1,-1,-1,-1],[-1,-1,-1,-1],"","-1"],[]] +] +*/ diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/#crater.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/#crater.sqf new file mode 100644 index 00000000..e1357a2a --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/#crater.sqf @@ -0,0 +1,29 @@ +_list = position player nearObjects ["#explosion",20]; +hint format ["%1",_list]; + + +BOBBY = true; +while {BOBBY} do +{ +sleep 1; +_list = position player nearObjects ["#crater",100]; +{ + _hierarchy = configHierarchy (configFile >> "CfgVehicles" >> (typeof _x)); + hint format ["%1",_hierarchy]; +} foreach _list; +}; + + +BOBBY = false; + + + + +hint format ["%1",_hierarchy]; + +#crater - ground hits, +#crateronvehicle - vehicle/body/buildings (possible not all buildings/structures) hits. + +(these two are long living, so must be obtained each already existing to sift off old ones (for this eg craters can be checked first time around aiming position in shooting moment, before bullet reach its destination), still it is not reliable, as there can be many new impacts there in one check cycle, if more than one bullet flies towards that point at the moment) + +additionally: #explosion object type for "boom!s" - short live. \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CombatMovement.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CombatMovement.sqf new file mode 100644 index 00000000..93e8127b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CombatMovement.sqf @@ -0,0 +1,81 @@ +//Created on 8/14/14 +// Modified on : 8/3/16: Resolved AI getting stuck when no enemies existed, or enemies were far away. + +private ["_Unit", "_VCOM_MovedRecently", "_VCOM_VisuallyCanSee", "_NearestEnemy", "_intersections"]; + + _Unit = _this select 0; + _VCOM_MovedRecently = _this select 1; + _VCOM_VisuallyCanSee = _this select 2; + _VCOM_MovedRecentlyCover = _this select 3; + + ////systemchat format ["M %1",_Unit]; + //_NearestEnemy = _Unit call VCOMAI_ClosestEnemy; + _NearestEnemy = _Unit findNearestEnemy _Unit; + _DistanceCheck = _NearestEnemy distance _Unit; + //if (isNil "_NearestEnemy" || {_VCOM_MovedRecentlyCover} || {(typeName _NearestEnemy isEqualTo "ARRAY")} || {isNil "_Unit"} || {!(alive _NearestEnemy)} || {(_NearestEnemy distance _Unit) > 5000}) exitWith {}; + if (isNil "_NearestEnemy" || {(typeName _NearestEnemy isEqualTo "ARRAY")} || {isNil "_Unit"} || {!(alive _NearestEnemy)} || {(_DistanceCheck) > 2000}) exitWith {_Unit forcespeed -1;}; + + + //This will tell the AI to regroup if they have wandered too far. + _ReturnedFriendly = [units (group _Unit),_Unit] call VCOMAI_ClosestObject; + if (isNil "_ReturnedFriendly") then {_ReturnedFriendly = [0,0,0]}; + if (_ReturnedFriendly distance _Unit > 30 && !(_ReturnedFriendly isEqualTo [0,0,0])) then + { + _Unit doMove (getpos _ReturnedFriendly);_Unit forcespeed -1; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Unit,"I wandered too far :(. Returning to group.",15,20000] remoteExec ["3DText",0]; + }; + + }; + + //_intersections = lineIntersectsSurfaces [eyePos _Unit,eyepos _NearestEnemy,_Unit,_NearestEnemy, true, 1]; + _cansee = [_Unit, "VIEW"] checkVisibility [eyePos _Unit, eyePos _NearestEnemy]; + //systemchat format ["%1:,%2 -> %3",_unit,_cansee,_DistanceCheck]; + //hintsilent format ["%2: %1",_cansee,_Unit]; + //If the enemy is REALLY close, JUST OPEN FIRE! + //if ((count _intersections) isEqualTo 0 && ((_DistanceCheck) < 50)) exitwith + + if (_cansee > 0 && {(_DistanceCheck) < 25}) exitwith + { + _VCOM_VisuallyCanSee = true; + _Unit forceSpeed 0; + _Unit setUnitPos "AUTO"; + _Unit doSuppressiveFire _NearestEnemy; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Unit,"Enemy is close! Fire fire fire!",15,20000] remoteExec ["3DText",0]; + }; + _VCOM_VisuallyCanSee + + }; + + + if (_VCOM_MovedRecentlyCover) exitwith {}; + if (_DistanceCheck < 100) then {_Unit forcespeed 0.7;}; + + if (_cansee > 0 && ((_DistanceCheck) < 500)) exitwith + { + _VCOM_VisuallyCanSee = true; + _Unit setUnitPos "AUTO"; + _Unit doSuppressiveFire _NearestEnemy; + _VCOM_VisuallyCanSee + }; + + + if (_VCOM_MovedRecently) exitWith {}; + + + if (_cansee > 0 && ((_DistanceCheck) < 1000)) then + { + _VCOM_VisuallyCanSee = true; + _Unit setUnitPos "AUTO"; + _Unit doSuppressiveFire _NearestEnemy; + //systemchat "SUPPRESSIVE!"; + } + else + { + _VCOM_VisuallyCanSee = false; + //_Unit spawn {sleep 10;if !(_Unit getVariable "VCOM_VisuallyCanSee") then {_Unit forceSpeed -1;};}; + }; +//}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CurrentStance.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CurrentStance.sqf new file mode 100644 index 00000000..0748c88d --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_CurrentStance.sqf @@ -0,0 +1,4 @@ +private ["_Behavior"]; + +_Behavior = behaviour _this; +_Behavior \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_DeadBodyDetection.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_DeadBodyDetection.sqf new file mode 100644 index 00000000..4858a405 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_DeadBodyDetection.sqf @@ -0,0 +1,7 @@ +private ["_ClosestDead"]; + +//AllDeadMen because, you know, WOMEN DONT EXIST IN THIS GAME... -_- +private _nearlyallDeadMen = allDeadMen select {!(_x isKindOf "Animal")}; +private _ClosestDead = [_nearlyallDeadMen,_this] call VCOMAI_ClosestObject; +if (isNil ("_ClosestDead")) then {_ClosestDead = [0,0,0];}; +_ClosestDead \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_ExplosionDetection.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_ExplosionDetection.sqf new file mode 100644 index 00000000..f8fb9d94 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_ExplosionDetection.sqf @@ -0,0 +1,11 @@ +private ["_CraterList"]; + +_CraterList = position _this nearObjects ["#crater",100]; + +//Check if an enemy is close to the AI or not. +_Enemy = _this call VCOMAI_ClosestEnemy; +if (isNil "_Enemy") then {_Enemy = [0,0,0]}; + +if (_Enemy distance _this > 1000) then {_CraterList = [];}; + +_CraterList \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_MoveToCoverGroup.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_MoveToCoverGroup.sqf new file mode 100644 index 00000000..1d34df20 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_MoveToCoverGroup.sqf @@ -0,0 +1,4 @@ +//Currently not being used +{ + [_x,false,false,false,false] spawn VCOMAI_MoveToCover; +} foreach (units (group _this)); \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_RecentEnemyDetected.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_RecentEnemyDetected.sqf new file mode 100644 index 00000000..b450c8ae --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_RecentEnemyDetected.sqf @@ -0,0 +1,4 @@ +private ["_KnownEnemy"]; + +_KnownEnemy = _this findNearestEnemy _this; +_KnownEnemy \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_SetCombatStance.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_SetCombatStance.sqf new file mode 100644 index 00000000..7453da88 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_SetCombatStance.sqf @@ -0,0 +1 @@ +(group _this) setBehaviour "COMBAT"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_VehicleHandle.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_VehicleHandle.sqf new file mode 100644 index 00000000..005d9178 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/DangerCauses/VCOMAI_VehicleHandle.sqf @@ -0,0 +1,16 @@ + +/* +_AssignedCargo = assignedCargo (vehicle _this); + +if (_this in _AssignedCargo) then +{ + [_this] orderGetIn false; + _this leaveVehicle (vehicle _this); + unassignVehicle _this; + commandGetOut _this; + doGetOut _this; + _this action ["eject", _Vehicle]; + (vehicle _this) land "GET OUT"; + _Vehicle land "GET OUT"; +}; + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AIHit.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AIHit.sqf new file mode 100644 index 00000000..309b580b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AIHit.sqf @@ -0,0 +1,28 @@ +//Function that executes on AI when they are hit. +//Updated on 08/17/17 @ 1725 + +private _Unit = _this select 0; + +//If the unit got hit recently, ignore this. +if (_Unit getVariable ["Vcom_GHit",false]) exitWith {}; +_Unit setVariable ["VCOM_GHit",true]; +_Unit spawn {sleep 30;_this setVariable ["VCOM_GHit",false];}; + +if (isPlayer _Unit) exitWith {}; +if ((vehicle _Unit) != _Unit) exitWith {}; + +//Lay down +_Unit setUnitPos "DOWN";_Unit spawn {sleep 30; _this setUnitPos "MIDDLE";sleep 30;_this setUnitPos "AUTO";}; + +if ((random 100) < 5) then +{ + _unit setUnconscious true; + _unit spawn {sleep 15;_this setUnconscious false;}; + +}; + +//[_Unit,false,false,false,false] spawn VCOMAI_MoveToCover; +if (VCOM_AIDEBUG isEqualTo 1) then +{ + [_Unit,"I am hit!",30,20000] remoteExec ["3DText",0]; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArmEmptyStatic.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArmEmptyStatic.sqf new file mode 100644 index 00000000..a2e5c183 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArmEmptyStatic.sqf @@ -0,0 +1,21 @@ +if (VCOM_STATICGARRISON isEqualTo 0) exitWith {}; +_Unit = _this; + _Position = getPosATL _Unit; + + _weapon = nearestObject [_Position,"StaticWeapon"]; + if (isNull _weapon || {(_weapon distance _Unit) > 100}) exitWith {}; + + _AssignedGunner = assignedGunner _weapon; + if (isNull _AssignedGunner) then + { + _Unit doMove (getposATL _weapon); + _Unit assignAsGunner _weapon; + [_Unit] orderGetIn true; + _Waiting = 0; + while {_Waiting isEqualTo 0} do + { + sleep 1; + if (!alive _Unit OR {(_Unit distance _Weapon) < 3}) then {_Waiting = 1}; + }; + _Unit moveInGunner _weapon; + }; diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Artillery.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Artillery.sqf new file mode 100644 index 00000000..4d0b948b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Artillery.sqf @@ -0,0 +1,37 @@ +//AI will use artillery/mortars when possible. This script makes it so each AI gets checked if they are arty capable or not +//First hash 6/14/2014 +//Modified 8/15/14 - 8/5/15 - 8/15/2017 + +//Pull the vehicle the unit is in. +_Vehicle = (vehicle _this); +if (_Vehicle in ArtilleryArray) exitWith {}; + + +//Get the vehicles class name. +private _class = typeOf _Vehicle; +if (isNil ("_class")) exitWith {}; + +//Figure out if it is defined as artillery +private _ArtyScan = getNumber(configfile/"CfgVehicles"/_class/"artilleryScanner"); + +//Exit the script if it is not defined as artillery +if (isNil "_ArtyScan") exitWith +{ + +//Check if unit somehow is in the ArtilleryArray and remove them. This can happen to units who were inside artillery pieces but ejected or moved out due to a divine intervention. + if (_Vehicle in ArtilleryArray) then + { + ArtilleryArray = ArtilleryArray - [_Vehicle]; + }; + +}; + +if (_ArtyScan isEqualTo 1) then +{ + + ArtilleryArray pushBack _Vehicle; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Vehicle,"I am Artillery :D!!!!",500,20000] remoteExec ["3DText",0]; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryCalled.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryCalled.sqf new file mode 100644 index 00000000..a705e063 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryCalled.sqf @@ -0,0 +1,92 @@ +//This function is called when a squad leader asks for artillery support +//First hash 6/14/2014 Updated on 8/15/17 @ 2023 +params ["_Unit","_Enemy"]; + +{ + if (isNull _x) then {ArtilleryArray = ArtilleryArray - [_x];}; +} foreach ArtilleryArray; + +private _Indsupport = []; +private _Bluforsupport = []; +private _Opforsupport = []; +private _Chosen = []; +private _ArtilleryUnits = []; + +if (side _Unit isEqualTo West) then +{ + { + if (side _x isEqualTo West) then {_Bluforsupport = _Bluforsupport + [(vehicle _x)];}; + } foreach ArtilleryArray; + _Chosen = _Bluforsupport; + Vcom_WestArtCooldown = false; [] spawn {sleep VCOM_ArtilleryCooldown;Vcom_WestArtCooldown = true;}; +}; + +if (side _Unit isEqualTo East) then +{ + { + if (side _x isEqualTo East) then {_Opforsupport = _Opforsupport + [(vehicle _x)];}; + } foreach ArtilleryArray; + _Chosen = _Opforsupport; + Vcom_EastArtCooldown = false; [] spawn {sleep VCOM_ArtilleryCooldown;Vcom_EastArtCooldown = true;}; +}; + +if (side _Unit isEqualTo Resistance) then +{ + { + if (side _x isEqualTo Resistance) then {_Indsupport = _Indsupport + [(vehicle _x)];}; + } foreach ArtilleryArray; + _Chosen = _Indsupport; + Vcom_ResistanceArtCooldown = false; [] spawn {sleep VCOM_ArtilleryCooldown;Vcom_ResistanceArtCooldown = true;}; +}; + +if ((count _Chosen) <= 0) exitWith {}; + +//player sidechat format ["ARTY CALLED: %1",(vehicle _Unit)]; +private _ReturnedSupport = [_Chosen,(vehicle _Unit)] call VCOMAI_ClosestObject; +if (isNil "_ReturnedSupport") exitWith {}; + +if !(_ReturnedSupport in ArtilleryArray) exitWith {}; + +_ArtilleryGroup = group _ReturnedSupport; +_ArtilleryGroupActual = []; +{ + if (group _x isEqualTo _ArtilleryGroup) then + { + _ArtilleryGroupActual pushback _x; + }; + +} foreach _Chosen; + +private _ArtilleryGroupUnits = units _ArtilleryGroup; + +private _AmmoArray = getArtilleryAmmo _ArtilleryGroupActual; +if (isNil "_AmmoArray") exitWith {}; + +private _RandomAmmoArray = _AmmoArray call BIS_fnc_selectRandom; +if (isNil "_RandomAmmoArray") exitWith {}; + +private _ContinueFiring = (getPos _Enemy) inRangeOfArtillery [_ArtilleryGroupActual,_RandomAmmoArray]; + +if !(_ContinueFiring) exitWith {}; + +private _EnemyGroup = group _Enemy; +private _RoundsToFire = round (count (units _EnemyGroup)/4); + +if (_RoundsToFire < 2) then {_RoundsToFire = 2}; + +{ + private _dist = random (15 + (random VCOM_ArtillerySpread)); + private _dir = random 360; + private _pos = getpos _Enemy; + private _positions = [(_pos select 0) + (sin _dir) * _dist, (_pos select 1) + (cos _dir) * _dist, 0]; + + sleep (random 3); + + _x doArtilleryFire [_positions,_RandomAmmoArray,_RoundsToFire]; + //_x commandArtilleryFire [(getPos _Enemy),_RandomAmmoArray,(floor(random 4))]; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_x,"I am firing my ARTY >:D!!!",120,20000] remoteExec ["3DText",0]; + }; + +} foreach _ArtilleryGroupActual; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryOLD.sqf new file mode 100644 index 00000000..51e51d17 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ArtilleryOLD.sqf @@ -0,0 +1,42 @@ +//AI will use artillery/mortars when possible. This script makes it so each AI gets checked if they are arty capable or not +//First hash 6/14/2014 +//Modified 8/15/14 - 8/5/15 - 8/15/2017 + +//Find unit to be doing check upon. +_Unit = _this; + +_Vehicle = (vehicle _Unit); +if (_Vehicle in ArtilleryArray) exitWith {}; +//Pull the vehicle the unit is in. + +//Get the vehicles class name. +_class = typeOf _Vehicle; +if (isNil ("_class")) exitWith {}; +//player sidechat format ["%1",_class]; +//Figure out if it is defined as artillery +_ArtyScan = getNumber(configfile/"CfgVehicles"/_class/"artilleryScanner"); + +//Exit the script if it is not defined as artillery +if (isNil "_ArtyScan") exitWith +{ + +//Check if unit somehow is in the ArtilleryArray and remove them. This can happen to units who were inside artillery pieces but ejected. + if (_Vehicle in ArtilleryArray) then + { + ArtilleryArray = ArtilleryArray - [_Vehicle]; + }; + +}; + +if (_ArtyScan isEqualTo 1) then +{ + + //player sidechat format ["Added Unit to Arty: %1",_Vehicle]; + //ArtilleryArray = ArtilleryArray + [_Vehicle]; + ArtilleryArray pushBack _Vehicle; + //null = [_Unit] execFSM "\VCOM_AI\AIBEHAVIORARTY.fsm"; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Vehicle,"I am Artillery :D!!!!",500,20000] remoteExec ["3DText",0]; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AttachPosition.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AttachPosition.sqf new file mode 100644 index 00000000..bb67da1e --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_AttachPosition.sqf @@ -0,0 +1,27 @@ +_Unit = _this select 0; +_AttachObject = _this select 1; +_VCOM_GRENADETHROWN = _this select 2; + +_GuessLocation = _Unit getHideFrom _NearestEnemy; + +if (isNull _NearestEnemy) exitWith +{ + //Throw grenades and seek for any kind of cover + [_Unit,_VCOM_GRENADETHROWN] spawn VCOMAI_ThrowGrenade; +}; + +_coverObjectsClosest = []; + +for "_i" from 0 to 20 do + { + _coverObjectsClosest pushback (_coverObjects call BIS_fnc_selectRandom); + }; + + _Closestobject = _coverObjectsClosest call BIS_fnc_selectRandom; + + _BoundingArray = boundingBoxReal _Closestobject; + _p1 = _BoundingArray select 0; + _p2 = _BoundingArray select 1; + _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); + + _coverObjectspos = [_GuessLocation, (_Closestobject distance _NearestEnemy) + 2, ([_GuessLocation, _Closestobject] call BIS_fnc_dirTo)] call BIS_fnc_relPos; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingCheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingCheck.sqf new file mode 100644 index 00000000..6bc59428 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingCheck.sqf @@ -0,0 +1,29 @@ +private ["_Enemy", "_Offset", "_ToWorld1", "_ToWorld2", "_PointHeight", "_PointHeightC", "_LookVar", "_dgn_returnvariable"]; + +_Unit = _this select 0; +_VCOM_MovedRecentlyCover = _this select 1; +_VCOMAI_ActivelyClearing = _this select 2; +_VCOMAI_StartedInside = _this select 3; + +if (_VCOM_MovedRecentlyCover || {_VCOMAI_ActivelyClearing} || {_VCOMAI_StartedInside}) exitWith {_dgn_returnvariable = false;_dgn_returnvariable}; + +//systemchat format ["A %1",_Unit]; +_Enemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_Enemy") exitWith {}; + +if ((typeName _Enemy) isEqualTo "ARRAY") exitWith {_dgn_returnvariable = false;_dgn_returnvariable}; + +_dgn_returnvariable = false; + +_Position = getposASL _Enemy; +_Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4]; +{ + if (_x isKindof "Building") exitWith {_dgn_returnvariable = true;}; +} foreach _Array; + +_Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) - 10], objnull, objnull, true, 4]; +{ + if (_x isKindof "Building") exitWith {_dgn_returnvariable = true;}; +} foreach _Array; + +_dgn_returnvariable \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingSpawnCheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingSpawnCheck.sqf new file mode 100644 index 00000000..5cb810d8 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_BuildingSpawnCheck.sqf @@ -0,0 +1,27 @@ +private ["_dgn_returnvariable", "_Position", "_Array","_VCOMAI_StartedInside"]; + +_dgn_returnvariable = false; + +_Position = getposATL _this; +_Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4]; +{ + if (_x isKindof "Building") then {_dgn_returnvariable = true;}; +} foreach _Array; + +_Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) - 10], objnull, objnull, true, 4]; +{ + if (_x isKindof "Building") then {_dgn_returnvariable = true;}; +} foreach _Array; + +if (_dgn_returnvariable) then +{ + _VCOMAI_StartedInside = true; + _this setvariable ["VCOMAI_StartedInside",true]; +} +else +{ + _VCOMAI_StartedInside = false; +}; + + +_VCOMAI_StartedInside \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBag.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBag.sqf new file mode 100644 index 00000000..b73fe783 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBag.sqf @@ -0,0 +1,26 @@ +//This function aims to set a variable upon the AI of what static weapon they may have upon their backs. +//Last edit on: 8/7/2017 @ 1902 +//Work Done: Optimized the function and added in dynamic support +private _CurrentBackPack = backpack _this; + +if (isNil "_CurrentBackPack") exitWith {}; +_class = [_CurrentBackPack] call VCOMAI_Classvehicle; +if (isNil "_class") exitWith {_ReturnVariable = [false,false,""];_ReturnVariable}; + +private _VCOM_HASSTATIC = false; + +private _parents = [_class,true] call BIS_fnc_returnParents; +if (("StaticWeapon" in _parents) || {("Weapon_Bag_Base" in _parents)}) then +{ + _VCOM_HASSTATIC = true; + if !(_this getVariable ["VCOM_StaticClassName",""] isEqualTo _CurrentBackpack) then + { + _this setVariable ["VCOM_StaticClassName",_CurrentBackPack,false]; + if (["UAV",_CurrentBackPack,false] call BIS_fnc_inString) then {_this setVariable ["VCOM_UAV",true,false];}; + }; +}; + + +_ReturnVariable = [_VCOM_HASSTATIC,_this getVariable ["VCOM_UAV",false],_CurrentBackPack]; + +_ReturnVariable \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBagOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBagOLD.sqf new file mode 100644 index 00000000..dc0406f2 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckBagOLD.sqf @@ -0,0 +1,32 @@ +private ["_Unit", "_CurrentBackPack", "_class", "_parents", "_IsUAV","_VCOM_HASSTATIC","_VCOM_HASUAV","_StaticClassName"]; +_Unit = _this; + +_CurrentBackPack = backpack _Unit; + +if (isNil "_CurrentBackPack") exitWith {}; +_class = [_CurrentBackPack] call VCOMAI_Classvehicle; + +_VCOM_HASUAV = false; +_VCOM_HASSTATIC = false; +_StaticClassName = ""; + +if (isNil "_class") exitWith {_ReturnVariable = [_VCOM_HASSTATIC,_VCOM_HASUAV,_StaticClassName];_ReturnVariable}; + +_parents = [_class,true] call BIS_fnc_returnParents; +if (("StaticWeapon" in _parents) || {("Weapon_Bag_Base" in _parents)}) then +{ + _VCOM_HASSTATIC = true; + _Unit setVariable ["VCOM_StaticClassName",_CurrentBackPack,false]; + _StaticClassName = _CurrentBackPack; + _IsUAV = ["UAV",_CurrentBackPack,false] call BIS_fnc_inString; + if (_IsUAV) then {_VCOM_HASUAV = true;}; +} +else +{ + _VCOM_HASSTATIC = false; +}; + + +_ReturnVariable = [_VCOM_HASSTATIC,_VCOM_HASUAV,_StaticClassName]; + +_ReturnVariable \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckStatic.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckStatic.sqf new file mode 100644 index 00000000..1424ef5e --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CheckStatic.sqf @@ -0,0 +1,14 @@ +private ["_Returned","_weapon"]; + +_weapon = nearestObject [(getposATL _this),"StaticWeapon"]; +if !(isNull _weapon || {(_weapon distance _this) > 100}) then +{ + _Returned = true; +} +else +{ + _Returned = false; +}; + + +_Returned \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Classvehicle.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Classvehicle.sqf new file mode 100644 index 00000000..ad37f6ed --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Classvehicle.sqf @@ -0,0 +1,11 @@ +//Simple tweak of BIS' two functions built for Vehicle purposes by VCOM// + +params ["_name"]; +private _return = "NotAClass"; + +if ((typeName _name) isEqualTo "STRING") then +{ + _return = (configFile >> "cfgVehicles" >> _name); +}; + +_return \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarn.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarn.sqf new file mode 100644 index 00000000..a6835239 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarn.sqf @@ -0,0 +1,131 @@ +//Created on ??? +// Modified on : 9/7/14 - Added radio check. 9/10/14 - Added PRIVATE commandArtilleryFire - 9/10/17, rewrote script. + +private _Unit = _this select 0; +private _UnitGroup = (group _Unit); +if (_UnitGroup getVariable ["VCOM_CALLINGHELP",false]) exitWith {}; +_UnitGroup setVariable ["VCOM_CALLINGHELP",true]; + +_UnitGroup spawn {sleep 300;_this setVariable ["VCOM_CALLINGHELP",false];}; + +private _Killer = _this select 1; +private _DeathPosition = getpos _Killer; + +//If this gets attached to a player, then exit before doing anything +if (isPlayer _Unit) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn1a..: %1",_UnitGroup];};}; +if !((side _UnitGroup) in VCOM_SideBasedMovement) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn1..: %1",_UnitGroup];};}; + +//Check to see if this unit should be moving to support others or not +//Check to see if this unit is garrisoned. If so, don't do anything +//Check to see if unit has radio. If the unit does not have a radio, then it will not move to support +private _CheckStatus = assignedItems _Unit; + +if ((_Unit getVariable ["VCOM_NOPATHING_Unit",false]) || {(_Unit getVariable ["VCOM_GARRISONED",false])} || {(_Unit getVariable ["VCOM_NOAI",false])} || {!("ItemRadio" in _CheckStatus)}) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn2..: %1",_UnitGroup];};}; + +private _ArrayOrg = _Unit call VCOMAI_FriendlyArray; +_ArrayOrg = _ArrayOrg - ArtilleryArray; +{if ((_x distance _Unit) < 600) then {(group _x) setVariable ["VCOM_CALLINGHELP",true];_x spawn {sleep 300;(group _this) setVariable ["VCOM_CALLINGHELP",false];};};} foreach _ArrayOrg; + + +private _Array2 = _Killer call VCOMAI_FriendlyArray; +_Array2 = _Array2 - ArtilleryArray; +{ + if (_x distance _Killer > 501) then {_Array2 = _Array2 - [_x];}; +} foreach _Array2; + + +//Lets get a rough estimate of how many enemies we are facing. + + +if (VCOM_AIDEBUG isEqualTo 1) then +{ + systemChat format ["Man Down...: %1",_UnitGroup]; +}; +sleep (30 + (random 30)); +if (VCOM_AIDEBUG isEqualTo 1) then +{ + systemChat format ["Group is attempting to call for help...: %1",_UnitGroup]; +}; + +private _EnemyCount = count _Array2; +private _RespondCount = 0; +private _aliveCount = {alive _x} count (units _UnitGroup); +if (_aliveCount > 0) then +{ + { + if (_RespondCount < _EnemyCount) then + { + + private _CheckStatus2 = assignedItems _x; + + + if (!(isNil "_CheckStatus2") && {!(_x getVariable ["VCOM_NOPATHING_Unit",false])} && {!(_x getVariable ["VCOM_GARRISONED",false])} && {"ItemRadio" in _CheckStatus2} && {!((group _x) getVariable ["VCOM_MOVINGTOSUPPORT",false])}) then + { + + + private _group = group _x; + if ((count (waypoints _group)) < 2) then + { + + private _WaypointCheck = _group call VCOMAI_Waypointcheck; + if (count _WaypointCheck < 1) then + { + + + if ((_x distance _Unit) <= VCOM_Unit_AIWarnDistance) then + { + + _x setbehaviour "AWARE"; + (group _x) setVariable ["VCOM_MOVINGTOSUPPORT",true]; + if (!(vehicle _x isEqualTo _x)) then + { + _RespondCount = _RespondCount + count (crew (vehicle _x)); + private _Driver = (driver (vehicle _x)); + //systemchat format ["_RespondCountDRIVER %1 GROUP: %2",[_EnemyCount,_RespondCount],(group _x)]; + _waypoint2 = (group _Driver) addwaypoint[_DeathPosition,15,150]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + } + else + { + _RespondCount = _RespondCount + (count (units (group _x))); + //systemchat format ["_RespondCount %1 GROUP: %2",[_EnemyCount,_RespondCount],(group _x)]; + _waypoint2 = (group _x) addwaypoint[_DeathPosition,15,150]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + + private _Driver = Driver (vehicle _x); + _waypoint2 = (group _Driver) addwaypoint[_DeathPosition,15,150]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + + + (group _x) spawn + { + sleep 300; + _this setVariable ["VCOM_MOVINGTOSUPPORT",false]; + }; + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_x,"Warned of Combat!",120,20000] remoteExec ["3DText",0]; + }; + + }; + }; + + }; + + + + + + + }; + }; + } foreach _ArrayOrg; +}; diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarnOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarnOLD.sqf new file mode 100644 index 00000000..b6344486 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestAllyWarnOLD.sqf @@ -0,0 +1,142 @@ +//Created on ??? +// Modified on : 9/7/14 - Added radio check. 9/10/14 - Added PRIVATE commandArtilleryFire + +private ["_Unit","_Wall","_Direction","_Killer","_UnitSide","_NoFlanking","_GrabVariable","_CheckStatus","_Array1","_NoFlanking2","_CheckStatus2","_GrabVariable2","_CombatStance","_group","_index","_WaypointIs","_waypoint0"]; + +_Unit = _this select 0; +_UnitGroup = (group _Unit); + +/* +_Unit spawn +{ +sleep 8; +private ["_Wall"]; + _Direction = 0; + for "_i" from 0 to 1 step 1 do + { + _Wall = "Land_InvisibleBarrier_F" createvehiclelocal (getpos _this); + _Wall disableCollisionWith _this; + _Wall setDir _Direction; + _Wall setposATL (getposATL _this); + + + //[[_Wall],"DisableCollisionALL"] call BIS_fnc_MP; + [_Wall] remoteExec ["DisableCollisionALL",0]; + _Wall disableCollisionWith player; + + _Wall spawn {sleep 120;deletevehicle _this;}; + _Direction = 90; + }; +}; +*/ + +if !((side _UnitGroup) in VCOM_SideBasedMovement) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn1..: %1",_UnitGroup];};}; + + +_Killer = _this select 1; +_DeathPosition = getpos _Killer; + + +//If this gets attached to a player, then exit before doing anything +if (isPlayer _Unit) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn1a..: %1",_UnitGroup];};}; + +//Let's pull the units group side +_UnitSide = side _UnitGroup; + +//If the unit is in the ArtilleryArray, then remove it +if (_Unit in ArtilleryArray) then {ArtilleryArray = ArtilleryArray - [_Unit];}; + +//Check to see if this unit should be moving to support others or not +//Check to see if this unit is garrisoned. If so, don't do anything +//Check to see if unit has radio. If the unit does not have a radio, then it will not move to support +_NoFlanking = _Unit getVariable ["VCOM_NOPATHING_Unit",false]; +_NoAI = _Unit getVariable ["VCOM_NOAI",false]; +_GrabVariable = _Unit getVariable ["VCOM_GARRISONED",false];; +_CheckStatus = assignedItems _Unit; + +if (_NoFlanking || {_GrabVariable} || {_NoAI} || {!("ItemRadio" in _CheckStatus)}) exitWith {if (VCOM_AIDEBUG isEqualTo 1) then {systemChat format ["Exited ClosestAllyWarn2..: %1",_UnitGroup];};}; + +_Array1 = _Unit call VCOMAI_FriendlyArray; +_Array1 = _Array1 - ArtilleryArray; + + +if (VCOM_AIDEBUG isEqualTo 1) then +{ + systemChat format ["Man Down...: %1",_UnitGroup]; +}; +sleep (30 + (random 30)); +if (VCOM_AIDEBUG isEqualTo 1) then +{ + systemChat format ["Group is attempting to call for help...: %1",_UnitGroup]; +}; + +_aliveCount = {alive _x} count (units _UnitGroup); + +if (_aliveCount > 0) then +{ + if (VCOM_AIDEBUG isEqualTo 1) then + { + systemChat format ["Group successfully called for help: %1",_UnitGroup]; + }; + + { + _NoFlanking2 = _x getVariable ["VCOM_NOPATHING_Unit",false]; + if !(_NoFlanking2) then + { + _CheckStatus2 = assignedItems _x; + if (isNil "_CheckStatus2") exitWith {}; + if ("ItemRadio" in _CheckStatus2) then + { + + _GrabVariable2 = _x getVariable ["VCOM_GARRISONED",false]; + + + if !(_GrabVariable2) then + { + _group = group _x; + if ((count (waypoints _group)) < 2) then + { + + _WaypointCheck = _group call VCOMAI_Waypointcheck; + if (count _WaypointCheck < 1) then + { + + if ((_x distance _Unit) <= VCOM_Unit_AIWarnDistance) exitWith + { + _x setbehaviour "AWARE"; + _x setVariable ["VCOM_MOVINGTOSUPPORT",true,false]; + if (leader _x isEqualTo _x) then + { + _waypoint2 = (group _x) addwaypoint[_DeathPosition,15,100]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + if !((Driver (vehicle _x)) in units (group _x)) then + { + private _Driver = Driver (vehicle _x); + _waypoint2 = (group _Driver) addwaypoint[_DeathPosition,15,100]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + }; + _x spawn + { + sleep 30; + _this setVariable ["VCOM_MOVINGTOSUPPORT",false,false]; + }; + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_x,"Warned of Combat!",120,20000] remoteExec ["3DText",0]; + }; + + }; + }; + + }; + }; + }; + }; + } forEach _Array1; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestEnemy.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestEnemy.sqf new file mode 100644 index 00000000..5a87bf0b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestEnemy.sqf @@ -0,0 +1,17 @@ +private ["_Unit", "_UnitSide", "_Array1", "_ReturnedEnemy"]; +//Created on ??? +// Modified on : 8/19/14 - 8/3/15 + +_Unit = _this; +_UnitSide = (side _Unit); +_Array1 = []; +{ + _TargetSide = side _x; + if ([_UnitSide, _TargetSide] call BIS_fnc_sideIsEnemy) then {_Array1 pushback _x;}; +} forEach allUnits; + +_ReturnedEnemy = [_Array1,_Unit] call VCOMAI_ClosestObject; +if (isNil "_ReturnedEnemy") then {_ReturnedEnemy = [0,0,0]}; + +//_Unit setVariable ["VCOM_CLOSESTENEMY",_ReturnedEnemy,false]; +_ReturnedEnemy \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestObject.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestObject.sqf new file mode 100644 index 00000000..798dbdc9 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ClosestObject.sqf @@ -0,0 +1,34 @@ +private ["_list", "_position"]; +_list = _this select 0; +_object = _this select 1; +//[_list,_object] call VCOMAI_ClosestObject; +////systemchat format ["%1",_object]; + + +_position = [0,0,0]; +if (isNil ("_object")) exitWith {}; +if (isNil ("_list")) exitWith {}; +if (TypeName _object isEqualTo "OBJECT") then {_position = getPosWorld _object;}; +if (TypeName _object isEqualTo "STRING") then {_position = getMarkerPos _object;}; +if (TypeName _object isEqualTo "ARRAY") then {_position = _object;}; + +_DistanceArray = []; + +{ + if !(isNil "_x") then + { + _CompareObjectPos = [0,0,0]; + if (TypeName _x isEqualTo "OBJECT") then {_CompareObjectPos = getPosWorld _x;}; + if (TypeName _x isEqualTo "STRING") then {_CompareObjectPos = getMarkerPos _x;}; + if (TypeName _x isEqualTo "ARRAY") then {_CompareObjectPos = _x;}; + _NewObjectDistance = _CompareObjectPos distance _position; + _DistanceArray pushback [_NewObjectDistance,_x]; + }; +} foreach _list; + +_DistanceArray sort true; + +_ClosestObject = ((_DistanceArray select 0) select 1); + +if (isNil "_ClosestObject") exitWith {}; +_ClosestObject \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CombatMode.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CombatMode.sqf new file mode 100644 index 00000000..d777aaaf --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_CombatMode.sqf @@ -0,0 +1,15 @@ +//VCOMAI_CombatMode + +_Unit = _this select 0; + + +_NearestEnemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_NearestEnemy") exitwith {}; + +_VCOMAI_LastCStance = _this select 1; +_TimeShot = _Unit getVariable ["VCOM_FiredTime",0]; + +if ((diag_tickTime - _TimeShot) > 120 && {((_NearestEnemy distance _Unit) > 1000)}) then +{ + _Unit setBehaviour (_VCOMAI_LastCStance); +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DebugText.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DebugText.sqf new file mode 100644 index 00000000..5ae29997 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DebugText.sqf @@ -0,0 +1,34 @@ +//Execute Example +// +//[BOB,"Guard: Please stand back",15,50] remoteExec ["3DText",0]; +// +private ["_Message","_Unit","_WaitTime","_Display","_Distance"]; + +_Unit = _this select 0; +_objNetId = _Unit call BIS_fnc_netId; +_Message = _this select 1; +_WaitTime = _this select 2; +_Distance = _this select 3; +_Random = (random 2); + +call compile format ["_Display = addMissionEventHandler ['Draw3D',{ + + _Object = (objectFromNetId '%1'); + _Location = _Object modelToWorld [0,0,0]; + _Random = (parsenumber '%4'); + if (player distance _Object < (parsenumber '%3')) then + { + drawIcon3D ['', [1,1,1,1], [_Location select 0,_Location select 1,((_Location select 2) +(0.5 + _Random))], 0, 0, 0, '%2', 2,0.04]; + }; + + + } + +];",_objNetId,_Message,_Distance,_Random]; + +sleep _WaitTime; + +if (isNil "_Display") exitwith {}; +removeMissionEventHandler ["Draw3D", _Display]; + +_Display diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DefaultSettings.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DefaultSettings.sqf new file mode 100644 index 00000000..72818bba --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DefaultSettings.sqf @@ -0,0 +1,502 @@ +VCOMAI_Func = +{ +//Enable or disable the INGAME setting menu. This is off by default due to compatability issues with multiple mods and scripts. And I am tired of hearing people complain all the time :D +VCOM_AIINGAMEMENU = false; +//Variable for enabling/disabling skill changes for AI. True is on, False is off. +VCOM_AISkillEnabled = false; +//Variable for finding out which config was loaded. +VCOM_AIConfig = "Mission Folder"; +//Turn this on to see certain debug messages. 1 is on +VCOM_AIDEBUG = 0; +//Turn on map markers that track AI movement +VCOM_UseMarkers = false; +//Turns off VCOMAI for AI units in a players squad +NOAI_FOR_PLAYERLEADERS = 1; +//Will AI garrison static weapons nearby? +VCOM_STATICGARRISON = 1; +//How far can the AI hear gunshots from? +VCOM_HEARINGDISTANCE = 500; +//Should AI be able to call for artillery. 1 = YES 0 = NO +VCOM_Artillery = 1; +//What should the dispersion be for AI artillery rounds? In meters. +VCOM_ArtillerySpread = 600; +//What is the delay between firing artillery rounds? In seconds. +VCOM_ArtilleryCooldown = 300; +//Should we let AI use flanking manuevers? false means they can flank +VCOM_NOPATHING = false; +//Should AI use smoke grenades? Besides default A3 behavior? +VCOM_USESMOKE = true; +//Chance of AI using grenades +VCOM_GRENADECHANCE = 20; +//Should the AI lay mines? +VCOM_MineLaying = true; +//Chance of AI to lay a mine. +VCOM_MineLayChance = 40; +//AI will automatically disembark from vehicles when in combat. +VCOM_AIDisembark = true; +//How low should an AI's mag count be for them to consider finding more ammo? This DOES NOT include the mag loaded in the gun already. +VCOM_AIMagLimit = 2; +//Should the rain impact accuracy of AI? DEFAULT = true; +VCOM_RainImpact = true; +//How much should rain impact the accuracy of AI? Default = 3. Default formula is -> _WeatherCheck = (rain)/3; "rain" is on a scale from 0 to 1. 1 Being very intense rain. +VCOM_RainPercent = 3; +//Should AI and players have an additional layer of suppression that decreases aiming when suppressed? Default = true; +VCOM_Suppression = false; +//How much should suppression impact both AI and player aiming? Default is 5. Normal ArmA is 1. +VCOM_SuppressionVar = 5; +//Should AI/players be impacted by adrenaline? This provides players and AI with a small speed boost to animations to assist with cover seeking and positioning for a short time. Default = true; +VCOM_Adrenaline = false; +//How much of a speed boost should players/AI recieve? Default = 1.35; (1 is ArmA's normal speed). +VCOM_AdrenalineVar = 1.35; +//How many AI UNITS can be calculating cover positions at once? +VCOM_CurrentlyMovingLimit = 6; +//How many AI UNITS can be suppressing others at once? +VCOM_CurrentlySuppressingLimit = 12; +//The distance a unit needs to be away for Vcom AI to temporary disable itself upon the unit? The AI unit will also need to be out of combat. +VCOM_DisableDistance = 1200; +//How many AI can be checking roles/equipment/additional commands at once? This will impact FPS of AI in and out of battle. The goal is to limit how many benign commands are being run at once and bogging down a server with over a couple HUNDRED AI. +VCOM_BasicCheckLimit = 25; +//How many squad leaders can be executing advanced code at once. +VCOM_LeaderExecuteLimit = 15; +//How low should the FPS be, before Vcom pauses simulation. This will not disable simulation on AI - they will run default Bohemia AI. +VCOM_FPSFreeze = 10; +//Should the AI consider stealing/using empty ground vehicles? +VCOM_VehicleUse = true; +//Should the AI notice IR lasers? +VCOM_IRLaser = true; +//The distance, in meters, of how far AI will look for empty unlocked vehicles to steal. +VCOM_AIDISTANCEVEHPATH = 150; + +//The longer an AI's target stays in 1 location, the more accurate and aware of the target the AI becomes.DEFAULT = [WEST,EAST,CIVILIAN,RESISTANCE]; +VCOM_IncreasingAccuracy = false; +//VCOM_SideBasedMovement- Remove sides from the array below to force that specific AI side to not execute any advance movement code. (I.E. Moving to reinforce allies, being alerted by distant gunshots and etc). AI with this will still react normally in combat. DEFAULT = [WEST,EAST,CIVILIAN,RESISTANCE]; +VCOM_SideBasedMovement = [WEST,EAST,RESISTANCE]; +//VCOM_SideBasedExecution- Remove sides from the array below to remove that specific AI side from executing any of the VCOMAI scripts at all. DEFAULT = [WEST,EAST,CIVILIAN,RESISTANCE]; +VCOM_SideBasedExecution = [WEST,EAST,RESISTANCE]; +//Distance AI will respond to call of help from each other +VCOM_Unit_AIWarnDistance = 1000; +//Distance the AI will attempt to flank around the enemy. I.E. How far off a waypoint, or around the enemy squad, the AI are willing to go in combat. +VCOM_WaypointDistance = 300; +//Switching this to true will enable side specific skill settings. Side specific skills get added IN ADDITION TO the normal ranked skill. +VCOM_SIDESPECIFIC = false; +//Switching this to true will enable classname specific skill settings. VCOM_SIDESPECIFIC and VCOM_CLASSNAMESPECIFIC can both be true, however any units in the VCOM_CLASSNAMESPECIFIC array are given priority over everything else. +VCOM_CLASSNAMESPECIFIC = false; +//Here you can assign certain unit classnames to specific skill levels. This will override the AI skill level above. +VCOM_SKILL_CLASSNAMES = []; + + +/* +EXAMPLE FOR VCOM_SKILL_CLASSNAMES + +VCOM_SKILL_CLASSNAMES = [["Classname1",[aimingaccuracy,aimingshake,spotdistance,spottime,courage,commanding,aimingspeed,general,endurance,reloadspeed]],["Classname2",[aimingaccuracy,aimingshake,spotdistance,spottime,courage,commanding,aimingspeed,general,endurance,reloadspeed]]]; +VCOM_SKILL_CLASSNAMES = [["B_Crew_F",[0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]],["B_soldier_AAT_F",[0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]]]; +VCOM_SKILL_CLASSNAMES = [["B_GEN_Soldier_F",[0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]],["B_G_Soldier_AR_F",[0.01,0.02,0.03,0.04,0.05,0.06,0.07,0.08,0.09,0.1]]]; + +*/ + + + + +//The following commands are to be left alone, except under rare circumstances. +MarkerArray = []; +VcomAI_UnitQueue = []; +VcomAI_ActiveList = []; +ArtilleryArray = []; +Vcom_EastArtCooldown = true; +Vcom_WestArtCooldown = true; +Vcom_ResistanceArtCooldown = true; +//End + + + +//AI ACCURACY SETTINGS - You can change these numbers below +//Colonel Level AI +AccuracyFunctionRank6 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Major Level AI +AccuracyFunctionRank5 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Captain Level AI +AccuracyFunctionRank4 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Lieutenant Level AI +AccuracyFunctionRank3 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Sergeant Level AI +AccuracyFunctionRank2 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Corporal Level AI +AccuracyFunctionRank1 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; +//Private Level AI +AccuracyFunctionRank0 = +{ + _Unit = _this select 0; + private _ClassnameSet = false; + + if (count VCOM_SKILL_CLASSNAMES > 0) then + { + { + if (typeOf _Unit isEqualTo (_x select 0)) exitWith + { + _ClassnameSet = true; + _Unit setSkill ["aimingAccuracy",((_x select 1) select 0)];_Unit setSkill ["aimingShake",((_x select 1) select 1)];_Unit setSkill ["spotDistance",((_x select 1) select 2)];_Unit setSkill ["spotTime",((_x select 1) select 3)];_Unit setSkill ["courage",((_x select 1) select 4)];_Unit setSkill ["commanding",((_x select 1) select 5)]; _Unit setSkill ["aimingSpeed",((_x select 1) select 6)];_Unit setSkill ["general",((_x select 1) select 7)];_Unit setSkill ["endurance",((_x select 1) select 8)];_Unit setSkill ["reloadSpeed",((_x select 1) select 9)]; + }; + } foreach VCOM_SKILL_CLASSNAMES; + }; + + if !(_ClassnameSet) then + { + _Unit setSkill ["aimingAccuracy",(0.05 + (random 0.05))]; + _Unit setSkill ["aimingShake",(0.05 + (random 0.05))]; + _Unit setSkill ["spotDistance",(0.6 + (random 0.1))]; + _Unit setSkill ["spotTime",(0.6 + (random 0.1))]; + _Unit setSkill ["courage",(0.7 + (random 0.3))]; + _Unit setSkill ["commanding",1.0]; + _Unit setSkill ["aimingSpeed",(0.5 + (random 0.1))]; + _Unit setSkill ["general",1.0]; + _Unit setSkill ["endurance",1.0]; + _Unit setSkill ["reloadSpeed",(0.7 + (random 0.3))]; + + if (VCOM_SIDESPECIFIC) then + { + private _USide = side (group _Unit); + if (_USide isEqualTo West) exitWith {_Unit call VCOM_AISKILL_WEST;}; + if (_USide isEqualTo East) exitWith {_Unit call VCOM_AISKILL_EAST;}; + if (_USide isEqualTo Resistance) exitWith {_Unit call VCOM_AISKILL_RESISTANCE;}; + }; + }; +}; + +//Here you can define specific side skill levels. This will add or subtract from the defined skill settings above per side. +VCOM_AISKILL_WEST = +{ + private _Endurance = _this skill "Endurance"; + private _aimingAccuracy = _this skill "aimingAccuracy"; + private _aimingShake = _this skill "aimingShake"; + private _aimingSpeed = _this skill "aimingSpeed"; + private _spotDistance = _this skill "spotDistance"; + private _spotTime = _this skill "spotTime"; + private _courage = _this skill "courage"; + private _reloadSpeed = _this skill "reloadSpeed"; + private _commanding = _this skill "commanding"; + private _general = _this skill "general"; + + //Change these variables to impact the gain or loss in each area. + _EnduranceSet = 0.05; + _aimingAccuracySet = 0.05; + _aimingShakeSet = 0.05; + _aimingSpeedSet = 0.05; + _spotDistanceSet = 0.05; + _spotTimeSet = 0.02; + _courageSet = 0.05; + _reloadSpeedSet = 0.05; + _commandingSet = 0.05; + _generalSet = 0.05; + + + _this setSkill ["aimingAccuracy",_EnduranceSet + _Endurance]; + _this setSkill ["aimingShake",_aimingAccuracySet + _aimingAccuracy]; + _this setSkill ["spotDistance",_aimingShakeSet + _aimingShake]; + _this setSkill ["spotTime",_aimingSpeedSet + _aimingSpeed]; + _this setSkill ["courage",_spotDistanceSet + _spotDistance]; + _this setSkill ["commanding",_spotTimeSet + _spotTime]; + _this setSkill ["aimingSpeed",_courageSet + _courage]; + _this setSkill ["general",_reloadSpeedSet + _reloadSpeed]; + _this setSkill ["endurance",_commandingSet + _commanding]; + _this setSkill ["reloadSpeed",_generalSet + _general]; + +}; +VCOM_AISKILL_EAST = +{ + private _Endurance = _this skill "Endurance"; + private _aimingAccuracy = _this skill "aimingAccuracy"; + private _aimingShake = _this skill "aimingShake"; + private _aimingSpeed = _this skill "aimingSpeed"; + private _spotDistance = _this skill "spotDistance"; + private _spotTime = _this skill "spotTime"; + private _courage = _this skill "courage"; + private _reloadSpeed = _this skill "reloadSpeed"; + private _commanding = _this skill "commanding"; + private _general = _this skill "general"; + + //Change these variables to impact the gain or loss in each area. + _EnduranceSet = 0.05; + _aimingAccuracySet = 0.05; + _aimingShakeSet = 0.05; + _aimingSpeedSet = 0.05; + _spotDistanceSet = 0.05; + _spotTimeSet = 0.02; + _courageSet = 0.05; + _reloadSpeedSet = 0.05; + _commandingSet = 0.05; + _generalSet = 0.05; + + + _this setSkill ["aimingAccuracy",_EnduranceSet + _Endurance]; + _this setSkill ["aimingShake",_aimingAccuracySet + _aimingAccuracy]; + _this setSkill ["spotDistance",_aimingShakeSet + _aimingShake]; + _this setSkill ["spotTime",_aimingSpeedSet + _aimingSpeed]; + _this setSkill ["courage",_spotDistanceSet + _spotDistance]; + _this setSkill ["commanding",_spotTimeSet + _spotTime]; + _this setSkill ["aimingSpeed",_courageSet + _courage]; + _this setSkill ["general",_reloadSpeedSet + _reloadSpeed]; + _this setSkill ["endurance",_commandingSet + _commanding]; + _this setSkill ["reloadSpeed",_generalSet + _general]; + +}; +VCOM_AISKILL_RESISTANCE = +{ + private _Endurance = _this skill "Endurance"; + private _aimingAccuracy = _this skill "aimingAccuracy"; + private _aimingShake = _this skill "aimingShake"; + private _aimingSpeed = _this skill "aimingSpeed"; + private _spotDistance = _this skill "spotDistance"; + private _spotTime = _this skill "spotTime"; + private _courage = _this skill "courage"; + private _reloadSpeed = _this skill "reloadSpeed"; + private _commanding = _this skill "commanding"; + private _general = _this skill "general"; + + //Change these variables to impact the gain or loss in each area. + _EnduranceSet = 0.05; + _aimingAccuracySet = 0.05; + _aimingShakeSet = 0.05; + _aimingSpeedSet = 0.05; + _spotDistanceSet = 0.05; + _spotTimeSet = 0.02; + _courageSet = 0.05; + _reloadSpeedSet = 0.05; + _commandingSet = 0.05; + _generalSet = 0.05; + + + _this setSkill ["aimingAccuracy",_EnduranceSet + _Endurance]; + _this setSkill ["aimingShake",_aimingAccuracySet + _aimingAccuracy]; + _this setSkill ["spotDistance",_aimingShakeSet + _aimingShake]; + _this setSkill ["spotTime",_aimingSpeedSet + _aimingSpeed]; + _this setSkill ["courage",_spotDistanceSet + _spotDistance]; + _this setSkill ["commanding",_spotTimeSet + _spotTime]; + _this setSkill ["aimingSpeed",_courageSet + _courage]; + _this setSkill ["general",_reloadSpeedSet + _reloadSpeed]; + _this setSkill ["endurance",_commandingSet + _commanding]; + _this setSkill ["reloadSpeed",_generalSet + _general]; + +}; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DeployUAV.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DeployUAV.sqf new file mode 100644 index 00000000..48047e0a --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DeployUAV.sqf @@ -0,0 +1,38 @@ +private ["_UAVBagClassName", "_UAVClassName", "_UAVCreated", "_myNearestEnemy", "_FriendlyArray", "_ClosestFriendly","_Array1"]; +//Lets get that UAV up in the SKY! + +_UAVBagClassName = _this getVariable "VCOM_StaticClassName"; + + +_UAVClassName = [_UAVBagClassName,0,-11] call BIS_fnc_trimString; +_UAVClassName = _UAVClassName + "_F"; + +_UAVCreated = createVehicle [_UAVClassName, getPos _this, [], 0,""]; +createVehicleCrew _UAVCreated; +removeBackpackGlobal _this; + + +while {alive _UAVCreated} do +{ + //systemchat format ["C %1",_Unit]; + _myNearestEnemy = _UAVCreated call VCOMAI_ClosestEnemy; + if (isNil "_myNearestEnemy") exitWith {}; + if !(_myNearestEnemy isEqualTo []) then + { + _UAVCreated doMove (getpos _myNearestEnemy); + _FriendlyArray = _UAVCreated call VCOMAI_FriendlyArray; + _ClosestFriendly = [_FriendlyArray,_UAVCreated] call VCOMAI_ClosestObject; + if (isNil "_ClosestFriendly") then {_ClosestFriendly = _UAVCreated}; + [_UAVCreated] join (group _ClosestFriendly); + if (_myNearestEnemy distance _UAVCreated < 600) then + { + _Array1 = _UAVCreated call VCOMAI_FriendlyArray; + { + (group _x) reveal [_myNearestEnemy, 4]; + } foreach _Array1; + }; + }; + + +sleep 10; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuilding.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuilding.sqf new file mode 100644 index 00000000..ed7f17f9 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuilding.sqf @@ -0,0 +1,74 @@ +//Script used to make AI attach explosives to buildings and bring them down if players garrison them. +params ["_Unit","_SatchelArray"]; + +private _SatchelObj = _SatchelArray select 0; +private _SatchelMag = _SatchelArray select 1; + +private _Point = _Unit call VCOMAI_ClosestEnemy; +if (_Point isEqualTo [] || {isNil "_Point"}) exitWith {}; + +if ((_Unit distance _Point) < 200) then +{ + + private _vehicle = vehicle _Point; + + if (_Point isEqualTo _vehicle) then + { + private _nBuilding = nearestBuilding _Point; + if ((_nBuilding distance _Point) > 40) exitWith {}; + [_Unit,_nBuilding,(group _Unit),_SatchelObj,_SatchelMag] spawn + { + params ["_Unit","_nBuilding","_Group","_SatchelObj","_SatchelMag"]; + _Unit disableAI "TARGET"; + _Unit disableAI "AUTOTARGET"; + _Unit disableAI "SUPPRESSION"; + _Unit disableAI "CHECKVISIBLE"; + _Unit disableAI "COVER"; + _Unit disableAI "AUTOCOMBAT"; + doStop _Unit; _Unit doMove (getPos _nBuilding); + + private _Truth = true; + while {_Truth} do + { + if ((_Unit distance _nBuilding) <= 9) then {_Truth = false;}; + sleep 0.25; + }; + + _Unit removeMagazine _SatchelMag; + private _mine = _SatchelObj createVehicle (getposATL _Unit); + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; + + private _PlantPosition = getpos _mine; + private _NotSafe = true; + private _UnitSide = (side _Unit); + _Unit doMove (getpos (leader _Group)); + _Unit enableAI "TARGET"; + _Unit enableAI "AUTOTARGET"; + _Unit enableAI "SUPPRESSION"; + _Unit enableAI "CHECKVISIBLE"; + _Unit enableAI "COVER"; + _Unit enableAI "AUTOCOMBAT"; + + while {_NotSafe} do + { + private _Array1 = []; + { + _Array1 pushback _x; + } foreach (allUnits select {(side _x) isEqualTo _UnitSide && (alive _x)}); + _ClosestFriendly = [_Array1,_PlantPosition] call VCOMAI_ClosestObject; + if (_ClosestFriendly distance _PlantPosition > 15) then {_NotSafe = false;}; + sleep 5; + }; + _mine setdamage 1; + sleep 3; + _list = _PlantPosition nearObjects ["#crater",5]; + if (_list isEqualTo []) then + { + deleteVehicle _mine; + private _mine2 = "SatchelCharge_Remote_Ammo" createVehicle _PlantPosition; + _mine2 setdamage 1; + }; + + }; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuildingOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuildingOLD.sqf new file mode 100644 index 00000000..3a7f3eef --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DestroyBuildingOLD.sqf @@ -0,0 +1,142 @@ +private ["_Unit", "_UnitGroup", "_Point", "_PreviousPosition", "_vehicle", "_Offset", "_ToWorld1", "_ToWorld2", "_PointHeight", "_PointHeightC", "_LookVar", "_nBuilding", "_Building", "_SatchelOfUse", "_Truth", "_PrimaryWeapon", "_PrimaryWeaponItems", "_SecondaryWeapon", "_SecondaryWeaponItems", "_HandgunWeapon", "_HandgunWeaponItems"]; +//Script used to make AI attach explosives to buildings and bring them down if players garrison them. +_Unit = _this; + +//_UnitGroup = group _Unit; +//[_Unit] joinSilent grpNull; +//_Point = _Unit getVariable "VCOM_CLOSESTENEMY"; + +//systemchat format ["D %1",_Unit]; +_Point = _Unit call VCOMAI_ClosestEnemy; +if (_Point isEqualTo [] || {isNil "_Point"}) exitWith {}; + +_PreviousPosition = (getPosATL _Unit); +if (isNil "_Point") exitWith {}; +//Hint format ["_Point %1",_Point]; +sleep 2; +if ((_Unit distance _Point) < 200) then +{ + +/* +while {(count (waypoints _UnitGroup)) > 0} do +{ + deleteWaypoint ((waypoints _UnitGroup) select 0); + sleep 0.25; +}; +*/ + +_vehicle = vehicle _Point; + +if (_Point isEqualTo _vehicle) then { +/* +_Offset = [0,0,0]; +_ToWorld1 = _Point modelToWorld _Offset; +_ToWorld2 = _Unit modelToWorld _Offset; +_PointHeight = _ToWorld1 select 2; +_PointHeightC = _ToWorld2 select 2; +_LookVar = (_PointHeight - _PointHeightC); +*/ + +//if (_LookVar >= 1) then { +//Hint "EXECUTING!"; + +_nBuilding = nearestBuilding _Point; +if ((_nBuilding distance _Point) > 20) exitWith {}; + +//_Unit disableAI "TARGET"; +//_Unit disableAI "AUTOTARGET"; +sleep 2; +doStop _Unit; _Unit doMove (getPos _nBuilding); +[_Unit,_nBuilding,_PreviousPosition] spawn { +_Unit = _this select 0; +_Building = _this select 1; +_PreviousPosition = _this select 2; +//_UnitGroup = _this select 3; +_SatchelOfUse = _Unit getVariable "VCOM_SATCHELBOMB"; +//Hint format ["_SatchelOfUse %1",_SatchelOfUse]; + +if (VCOM_AIDEBUG isEqualTo 1) then +{ + [_Unit,"Blowing up a building! >:D!!!!",30,20000] remoteExec ["3DText",0]; +}; + + +_Truth = true; +while {_Truth} do { + if ((_Unit distance _Building) <= 10) then {_Truth = false;}; + sleep 0.25; +}; + +/* +//Hint "FIRE FIRE FIRE!"; +_PrimaryWeapon = primaryWeapon _Unit; +_PrimaryWeaponItems = primaryWeaponItems _Unit; +_Unit removeWeapon _PrimaryWeapon; +_SecondaryWeapon = secondaryWeapon _Unit; +_SecondaryWeaponItems = secondaryWeaponItems _Unit; +_Unit removeWeapon _SecondaryWeapon; +_HandgunWeapon = handgunWeapon _Unit; +_HandgunWeaponItems = handgunItems _Unit; +_Unit removeWeapon _HandgunWeapon; +sleep 2; +_Unit fire ["PipeBombMuzzle","PipeBombMuzzle",_SatchelOfUse]; +_Unit fire ["DemoChargeMuzzle","DemoChargeMuzzle",_SatchelOfUse]; +*/ +_Bomb = _Unit getVariable "VCOM_SATCHELBOMB"; +_RemoveMag = _Unit getVariable "Vcom_SatchelObjectMagazine"; +_Unit removeMagazine _RemoveMag; +_mine = createMine [_Bomb,getposATL _unit, [], 0]; + + + +_PlantPosition = (getpos _Unit); +/* +if (_PrimaryWeapon != "") then { +_Unit addWeapon _PrimaryWeapon; +{ +_Unit addPrimaryWeaponItem _x; +} forEach _PrimaryWeaponItems; +}; +if (_SecondaryWeapon != "") then { +_Unit addWeapon _SecondaryWeapon; +{ +_Unit addSecondaryWeaponItem _x; +} forEach _SecondaryWeaponItems; +}; +if (_HandgunWeapon != "") then { +_Unit addWeapon _HandgunWeapon; +{ +_Unit addHandgunItem _x; +} forEach _HandgunWeaponItems; +}; +*/ +//_Unit enableAI "TARGET"; +//_Unit enableAI "AUTOTARGET"; +_NotSafe = true; +_Array1 = []; +_UnitSide = (side _Unit); +doStop _Unit; +_Unit doMove _PreviousPosition; +{ + if (alive _x && (side _x) isEqualTo _UnitSide) then {_Array1 pushback _x;}; +} foreach allUnits; +while {_NotSafe} do +{ + _ClosestFriendly = [_Array1,_PlantPosition] call VCOMAI_ClosestObject; + if (_ClosestFriendly distance _PlantPosition > 15) then {_NotSafe = false;}; + sleep 5; +}; +//[_Unit] joinSilent _UnitGroup; +//Hint "TOUCH OFF!"; +//_Unit action ["TOUCHOFF", _Unit]; +_mine setdamage 1; +//_Unit enableAI "TARGET"; +//_Unit enableAI "AUTOTARGET"; +}; + + + + +//}; +}; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DetermineLeader.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DetermineLeader.sqf new file mode 100644 index 00000000..191f9abd --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DetermineLeader.sqf @@ -0,0 +1,22 @@ +//Created on 8/14/14 +// Modified on : 8/1/15 - 8/3/16: Added in check for unit and distance from leader. + +//This function is to determine if this unit is the group leader or not. And to define if unit is sub-leader or not. +_Unit = _this; + +_GroupLeader = leader (group (vehicle _Unit)); +if (_GroupLeader isEqualTo _Unit) then {_VCOM_GroupLeader = true;} else {_VCOM_GroupLeader = false;}; + +_SubLeader = isFormationLeader _Unit; +if (_SubLeader) then {_VCOM_SubLeader = true;} else {_VCOM_SubLeader = false;}; + + +_Leader = _VCOM_GroupLeader; +if (isNil "_Leader") exitWith {}; +_SubLeader = _VCOM_SubLeader; +_CheckArray = [_Leader,_SubLeader]; + +//If leader is far away, lets regroup! YAY! +if (_GroupLeader distance _Unit > 120) then {_Unit forcespeed -1;_Unit domove (getpos _GroupLeader);}; + +_CheckArray \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DriverCheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DriverCheck.sqf new file mode 100644 index 00000000..6ddd6c7b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_DriverCheck.sqf @@ -0,0 +1,19 @@ +private ["_NotDriver", "_Unit", "_Vehicle", "_ActualDriver"]; +//Created on 8/15/14 +// Modified on : 8/29/14 - Fixed passenger getting a nill for _NotDriver +_Unit = _this; + +_NotDriver = false; + +_Vehicle = (vehicle _Unit); + +_ActualDriver = driver _Vehicle; + +if (_Unit isEqualTo _ActualDriver) then +{ + + _NotDriver = true; + +}; + +_NotDriver diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EditMenuInit.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EditMenuInit.sqf new file mode 100644 index 00000000..a82c6d86 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EditMenuInit.sqf @@ -0,0 +1,109 @@ +//This will execute once the player opens the edit menu for the first time. + +if (isNil "VCOM_AllSettings") then +{ + VCOM_AllSettings = + [ + ["VCOM_AIINGAMEMENU",VCOM_AIINGAMEMENU,"Enable or disable the INGAME setting menu. This is off by default due to compatability issues with multiple mods and scripts."], + ["VCOM_AISkillEnabled",VCOM_AISkillEnabled,"Variable for enabling/disabling skill changes for AI. True is on, False is off."], + ["VCOM_AIConfig",VCOM_AIConfig,"Variable for finding out which config was loaded."], + ["VCOM_AIDEBUG",VCOM_AIDEBUG,"Turn this on to see certain debug messages. 1 is on. 0 is off."], + ["VCOM_UseMarkers",VCOM_UseMarkers,"Turn on map markers that track AI movement. False is off. True is on."], + ["NOAI_FOR_PLAYERLEADERS",NOAI_FOR_PLAYERLEADERS,"Turns off VCOMAI for AI units in a players squad. 1 is on, 0 is off."], + ["VCOM_STATICGARRISON",VCOM_STATICGARRISON,"Will AI garrison static weapons nearby?"], + ["VCOM_HEARINGDISTANCE",VCOM_HEARINGDISTANCE,"How far can the AI hear gunshots from?"], + ["VCOM_Artillery",VCOM_Artillery,"Should AI be able to call for artillery. 1 = YES 0 = NO"], + ["VCOM_ArtillerySpread",VCOM_ArtillerySpread,"What should the dispersion be for AI artillery rounds? In meters."], + ["VCOM_ArtilleryCooldown",VCOM_ArtilleryCooldown,"What is the delay between firing artillery rounds? In seconds."], + ["VCOM_NOPATHING",VCOM_NOPATHING,"Should we let AI use flanking manuevers? False means they can flank."], + ["VCOM_USESMOKE",VCOM_USESMOKE,"Should AI use smoke grenades? Besides default A3 behavior?"], + ["VCOM_GRENADECHANCE",VCOM_GRENADECHANCE,"Chance of AI using grenades"], + ["VCOM_MineLaying",VCOM_MineLaying,"Should the AI lay mines? True = AI will use mines and C4"], + ["VCOM_MineLayChance",VCOM_MineLayChance,"Chance of AI to lay a mine."], + ["VCOM_AIDisembark",VCOM_AIDisembark,"AI will automatically disembark from vehicles when in combat. True = disembark"], + ["VCOM_AIMagLimit",VCOM_AIMagLimit,"How low should an AI's mag count be for them to consider finding more ammo? This DOES NOT include the mag loaded in the gun already."], + ["VCOM_RainImpact",VCOM_RainImpact,"Should the rain impact accuracy of AI? DEFAULT = true;"], + ["VCOM_RainPercent",VCOM_RainPercent,"How much should rain impact the accuracy of AI? Default = 3. Default formula is -> _WeatherCheck = (rain)/3; 'rain' is on a scale from 0 to 1. 1 Being very intense rain."], + ["VCOM_Suppression",VCOM_Suppression,"Should AI and players have an additional layer of suppression that decreases aiming when suppressed? Default = true;"], + ["VCOM_SuppressionVar",VCOM_SuppressionVar,"How much should suppression impact both AI and player aiming? Default is 5. Normal ArmA is 1"], + ["VCOM_Adrenaline",VCOM_Adrenaline,"Should AI/players be impacted by adrenaline? This provides players and AI with a small speed boost to animations to assist with cover seeking and positioning for a short time. Default = true;"], + ["VCOM_AdrenalineVar",VCOM_AdrenalineVar,"How much of a speed boost should players/AI recieve? Default = 1.15; (1 is ArmA's normal speed)."], + ["VCOM_CurrentlyMovingLimit",VCOM_CurrentlyMovingLimit,"How many AI UNITS can be calculating cover positions at once?"], + ["VCOM_CurrentlySuppressingLimit",VCOM_CurrentlySuppressingLimit,"How many AI UNITS can be suppressing others at once?"], + ["VCOM_DisableDistance",VCOM_DisableDistance,"The distance a unit needs to be away for Vcom AI to temporary disable itself upon the unit? The AI unit will also need to be out of combat."], + ["VCOM_BasicCheckLimit",VCOM_BasicCheckLimit,"How many AI can be checking roles/equipment/additional commands at once? This will impact FPS of AI in and out of battle. The goal is to limit how many benign commands are being run at once and bogging down a server with over a couple HUNDRED AI."], + ["VCOM_LeaderExecuteLimit",VCOM_LeaderExecuteLimit,"How many squad leaders can be executing advanced code at once."], + ["VCOM_FPSFreeze",VCOM_FPSFreeze,"How low should the FPS be, before Vcom pauses simulation. This will not disable simulation on AI - they will run default Bohemia AI."], + ["VCOM_VehicleUse",VCOM_VehicleUse,"Should the AI consider stealing/using empty ground vehicles?"], + ["VCOM_IRLaser",VCOM_IRLaser,"Should the AI notice IR lasers?"], + ["VCOM_IncreasingAccuracy",VCOM_IncreasingAccuracy,"The longer an AI's target stays in 1 location, the more accurate and aware of the target the AI becomes. True = enabled"], + ["VCOM_SideBasedMovement",VCOM_SideBasedMovement,"Remove sides from the array below to force that specific AI side to not execute any advance movement code. (I.E. Moving to reinforce allies, being alerted by distant gunshots and etc). AI with this will still react normally in combat. DEFAULT = [WEST,EAST,CIVILIAN,RESISTANCE];"], + ["VCOM_SideBasedExecution",VCOM_SideBasedExecution,"Remove sides from the array below to remove that specific AI side from executing any of the VCOMAI scripts at all. DEFAULT = [WEST,EAST,CIVILIAN,RESISTANCE]"], + ["VCOM_Unit_AIWarnDistance",VCOM_Unit_AIWarnDistance,"Distance AI will respond to call of help from each other"], + ["VCOM_WaypointDistance",VCOM_WaypointDistance,"Distance the AI will attempt to flank around the enemy. I.E. How far off a waypoint, or around the enemy squad, the AI are willing to go in combat."], + ["VCOM_SIDESPECIFIC",VCOM_SIDESPECIFIC,"Switching this to true will enable side specific skill settings. Side specific skills get added IN ADDITION TO the normal ranked skill."], + ["VCOM_CLASSNAMESPECIFIC",VCOM_CLASSNAMESPECIFIC,"Switching this to true will enable classname specific skill settings. VCOM_SIDESPECIFIC and VCOM_CLASSNAMESPECIFIC can both be true, however any units in the VCOM_CLASSNAMESPECIFIC array are given priority over everything else."], + ["VCOM_AIDISTANCEVEHPATH",VCOM_AIDISTANCEVEHPATH,"The distance, in meters, of how far AI will look for empty unlocked vehicles to steal."] + ]; +}; + +if (isDedicated) exitWith {}; +_Create = false; + +while {true} do +{ + + if (VCOM_AIINGAMEMENU) then + { + waitUntil {!(isNull (findDisplay 49))}; + private _Admin = [] call BIS_fnc_admin; + if (isNull (FindDisplay 5230)) then + { + + + if !(isDedicated) then + { + if ((_Admin isEqualTo 2 && {isMultiplayer} && {alive player}) || {isServer}) then + { + _Create = true; + _Open = createDialog "VCOM_ESCButton"; + if (isNil "_VCOMMouseMoving") then + { + ((findDisplay (5230)) displayCtrl (1600)) ctrlShow false; + _VCOMMouseMoving = (findDisplay 5230) displayAddEventHandler ["MouseMoving", + { + private _pos = getMousePosition; + private _posA = _pos select 0; + private _posB = _pos select 1; + + private _ButtonPosX = 0.85 * safezoneW + safezoneX; + private _ButtonPosY = 0.1 * safezoneH + safezoneY; + + if ((_PosA > (_ButtonPosX - 0.1) && _PosA < (_ButtonPosX + 0.1)) && (_PosB > (_ButtonPosY - 0.1) && _PosB < (_ButtonPosY + 0.1))) then {((findDisplay (5230)) displayCtrl (1600)) ctrlShow true;((findDisplay (5230)) displayCtrl (1001)) ctrlShow false;}; + + }]; + }; + }; + }; + }; + waitUntil {isNull (FindDisplay 5230)}; + if !(isDedicated) then + { + if ((_Admin isEqualTo 2 && {isMultiplayer} && {alive player}) || {isServer}) then + { + (finddisplay 49) closedisplay 1; + }; + }; + waitUntil {(isNull (findDisplay 49))}; + _Create = false; + closeDialog 5230; + sleep 0.2; + }; +}; + + +//VCOM_ESCPRESSED = (findDisplay 46) displayAddEventHandler ["KeyDown",{if ((_this select 1) isEqualTo 1) then {if (IsNull (FindDisplay 5230)) then {systemchat "GOGO";_Open = createDialog "VCOM_ESCButton";} else {systemchat "GOGO2";closeDialog 5230;};};false}]; +//(findDisplay 46) displayRemoveEventHandler ["KeyDown", VCOM_ESCPRESSED]; + + + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EnemyArray.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EnemyArray.sqf new file mode 100644 index 00000000..fca41b42 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_EnemyArray.sqf @@ -0,0 +1,13 @@ + +private ["_UnitSide","_Array1"]; +_UnitSide = side (group _this); + +_Array1 = []; +{ + _TargetSide = side _x; + + + if ([_UnitSide, _TargetSide] call BIS_fnc_sideIsEnemy) then {_Array1 pushback _x;}; + +} forEach allUnits; +_Array1 diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FindCoverPos.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FindCoverPos.sqf new file mode 100644 index 00000000..5b819a8a --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FindCoverPos.sqf @@ -0,0 +1,65 @@ +private ["_Unit", "_MovePosition", "_NearestEnemy", "_TypeListFinal", "_TypeList", "_Type", "_type", "_BoundingArray", "_p1", "_p2", "_maxWidth", "_maxLength", "_maxHeight", "_ClosestCover", "_GuessLocation", "_coverObjectspos","_WeakListFinal","_MovePos"]; + +_Unit = _this select 0; +_MovePos = _this select 1; +_VCOM_GARRISONED = _this select 2; +_VCOM_MovedRecentlyCover = _this select 3; +_VCOMAI_ActivelyClearing = _this select 4; +_VCOMAI_StartedInside = _this select 5; +_NearestEnemy = _this select 6; + +if (_VCOM_MovedRecentlyCover || {_VCOMAI_ActivelyClearing} || {_VCOMAI_StartedInside} || {_VCOM_GARRISONED}) exitWith {}; + + +//systemchat format ["E %1",_Unit]; + +if (isNil "_NearestEnemy") exitWith {}; + + +_WeakListFinal = []; +_ClosestCover = []; +_TypeListFinal = []; +_MovePosition = [_MovePos,10 + (random 10),(direction _Unit)] call BIS_fnc_relPos; +_TypeList = nearestObjects [_MovePosition, [], 30]; +_Roads = _MovePosition nearRoads 30; +{ + _Type = typeOf _x; + if !(_type in ["#crater","#crateronvehicle","#soundonvehicle","#particlesource","#lightpoint","#slop","#mark","HoneyBee","Mosquito","HouseFly","FxWindPollen1","ButterFly_random","Snake_random_F","Rabbit_F","FxWindGrass2","FxWindLeaf1","FxWindGrass1","FxWindLeaf3","FxWindLeaf2"]) then + { + if (!(_x isKindOf "Man") && {!(_x isKindOf "Bird")} && {!(_x isKindOf "BulletCore")} && {!(_x isKindOf "Grenade")} && {!(_x isKindOf "WeaponHolder")} && {(_x distance _Unit > 5)}) then + { + _BoundingArray = boundingBoxReal _x; + _p1 = _BoundingArray select 0; + _p2 = _BoundingArray select 1; + _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); + _maxLength = abs ((_p2 select 1) - (_p1 select 1)); + _maxHeight = abs ((_p2 select 2) - (_p1 select 2)); + if (_maxWidth > 2 && _maxLength > 2 && _maxHeight > 2) then + { + if (_type isEqualTo "") then + { + _WeakListFinal pushback _x + } + else + { + _TypeListFinal pushback _x; + }; + }; + }; + }; +} foreach ((_TypeList) - (_Roads)); +//systemchat format ["List: %1",count ((_TypeList) - (_Roads))]; + + +if (_TypeListFinal isEqualTo [] && _WeakListFinal isEqualTo []) exitWith {}; +//_ClosestCover = [_TypeListFinal,_this] call VCOMAI_ClosestObject; +if !(_TypeListFinal isEqualTo []) then {_ClosestCover = _TypeListFinal call BIS_fnc_selectRandom;} else {_ClosestCover = _WeakListFinal call BIS_fnc_selectRandom;}; + + +if (isNil "_ClosestCover") exitWith {}; + +_GuessLocation = []; +if (_NearestEnemy isEqualTo [0,0,0]) then {_GuessLocation = getpos _Unit} else {if (typeName _NearestEnemy isEqualTo "ARRAY") then {_GuessLocation = _NearestEnemy;} else {_GuessLocation = getpos _NearestEnemy;};}; + +_coverObjectspos = [_GuessLocation, (_ClosestCover distance _NearestEnemy) + 2, ([_GuessLocation, _ClosestCover] call BIS_fnc_dirTo)] call BIS_fnc_relPos; +_coverObjectspos \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FlankManeuver.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FlankManeuver.sqf new file mode 100644 index 00000000..45896df0 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FlankManeuver.sqf @@ -0,0 +1,159 @@ +Private ["_Unit", "_NoFlanking", "_myNearestEnemy", "_GroupUnit", "_myEnemyPos", "_ResetWaypoint", "_OverWatch", "_rnd", "_dist", "_dir", "_positions", "_myPlaces", "_RandomArray", "_RandomLocation", "_index", "_waypoint0", "_waypoint1", "_waypoint2", "_index2", "_wPos", "_UnitPosition", "_x1", "_y1", "_x2", "_y2", "_Midpoint", "_group_array", "_GroupCount", "_CoverCount", "_RandomUnit","_locationPos4","_nearestHill"]; +//AI Waypoint Mock up using select best. +_Unit = _this select 0; +_VCOM_Flanking = _this select 1; +_VCOMAI_ActivelyClearing = _this select 2; +_VCOMAI_StartedInside = _this select 3; +_VCOM_GARRISONED = _this select 4; + +//Exit this script if the group has many active waypoints and the leader is currently moving. Check again in 30 seconds. +//if ((count (waypoints (group _Unit))) >= 3 && !(((velocityModelSpace _Unit) select 1) isEqualTo 0) ) exitWith {}; +if ((count (waypoints (group _Unit))) >= 3) exitWith {}; +_GroupUnit = group _Unit; + +_WaypointCheck = _GroupUnit call VCOMAI_Waypointcheck; +if (count _WaypointCheck > 0) exitWith {}; + + + +if (_VCOMAI_ActivelyClearing || {_VCOMAI_StartedInside} || {_VCOM_GARRISONED}) exitWith {}; +if !(side _unit in VCOM_SideBasedMovement) exitWith {}; + +_NoFlanking = _Unit getVariable ["VCOM_NOPATHING_Unit",false]; +if (_NoFlanking) exitWith {}; + + + +//_myNearestEnemy = _Unit call VCOMAI_ClosestEnemy; +_myNearestEnemy = _Unit findNearestEnemy _Unit; + +if (isNull _myNearestEnemy) exitWith +{ + //systemchat format ["%1 RAWR A",side _unit]; + + if ((count (waypoints (group _Unit))) < 2) then + { + + _wPos = waypointPosition [_GroupUnit, 1]; + _WType = waypointType [_GroupUnit,1]; + _speed = waypointSpeed [_GroupUnit,1]; + _Beh = waypointBehaviour [_GroupUnit,1]; + if (_wPos isEqualTo [0,0,0]) exitWith {}; + while {(count (waypoints _GroupUnit)) > 0} do + { + deleteWaypoint ((waypoints _GroupUnit) select 0); + sleep 0.25; + }; + sleep 2; + _waypoint2 = _GroupUnit addwaypoint[_wPos,15]; + _waypoint2 setwaypointtype _WType; + _waypoint2 setWaypointSpeed _speed; + _waypoint2 setWaypointBehaviour _Beh; + //_GroupUnit setCurrentWaypoint [_GroupUnit, _waypoint2 select 1]; + _this spawn VCOMAI_FlankManeuver; + }; + +}; + + +if (isNil "_myNearestEnemy" || {(typeName _myNearestEnemy) isEqualTo "ARRAY"}) exitWith {}; + +if (_VCOM_Flanking) exitWith {}; + +if ((count (waypoints (group _Unit))) >= 3) exitWith {}; + +if (_Unit getVariable "VCOM_GARRISONED") exitWith {}; + + //systemchat format ["%1 RAWR B",side _unit]; + +//If first waypoint is DESTROY, DO NOT change waypoints. +_WType = waypointType [_GroupUnit,1]; +if (_WType isEqualTo "DESTROY") exitWith {}; + + + +//Check to see if the AI should just press the advantage! +_EnemyGroup = count (units (group _myNearestEnemy)); +_GroupCount = count units _GroupUnit; +_myEnemyPos = (getposATL _myNearestEnemy); +if (_myEnemyPos isEqualTo [0,0,0]) exitWith +{ + sleep 30; + _this spawn VCOMAI_FlankManeuver; +}; + +_RandomChance = random 100; +if (_RandomChance < 25) then +{ + if ((_EnemyGroup/_GroupCount) <= 0.5) exitWith + { + while {(count (waypoints _GroupUnit)) > 0} do + { + deleteWaypoint ((waypoints _GroupUnit) select 0); + sleep 0.25; + }; + + + _waypoint2 = _GroupUnit addwaypoint[_myEnemyPos,1]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "COMBAT"; + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Unit,"Flank Waypoint set. I am a good leader >:D!!",30,20000] remoteExec ["3DText",0]; + }; + + + }; + +}; +////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //systemchat format ["%1 RAWR C",side _unit]; +sleep 0.25; +if (_myEnemyPos isEqualTo [0,0,0]) exitWith {_VCOM_Flanking = false;[_Unit,_VCOM_Flanking] spawn VCOMAI_FlankManeuver;_VCOM_Flanking = true;}; + +while {(count (waypoints _GroupUnit)) > 0} do +{ + deleteWaypoint ((waypoints _GroupUnit) select 0); + sleep 0.25; +}; + + +_ResetWaypoint = _GroupUnit addwaypoint [getPosATL _Unit,15]; + +_rnd = random 100; +_dist = (_rnd + 100); +_dir = random 360; +_positions = [(_myEnemyPos select 0) + (sin _dir) * _dist, (_myEnemyPos select 1) + (cos _dir) * _dist, 0]; + + +_group = group _Unit; +_index = currentWaypoint _group; + + +_myPlaces = selectBestPlaces [_myEnemyPos, VCOM_WaypointDistance,"((6*hills + 2*forest + 4*houses + 2*meadow) - sea + (2*trees)) - (1000*deadbody)", 100, 5]; +if (_myPlaces isEqualTo []) then {_myPlaces = [_myEnemyPos];}; +_RandomArray = _myPlaces call BIS_fnc_selectrandom; +_RandomLocation = _RandomArray select 0; + + +_group setBehaviour "COMBAT"; +_waypoint0 = _group addwaypoint [_RandomLocation,15]; +_waypoint0 setwaypointtype "MOVE"; +_waypoint0 setWaypointSpeed "NORMAL"; +_waypoint0 setWaypointBehaviour "COMBAT"; +_group setCurrentWaypoint [_group,(_waypoint0 select 1)]; +//_waypoint1 = _group addwaypoint[_positions,10]; +//_waypoint1 setwaypointtype "MOVE"; +//_waypoint1 setWaypointSpeed "NORMAL"; +//_waypoint1 setWaypointBehaviour "COMBAT"; +_waypoint2 = _group addwaypoint[_myEnemyPos,15]; +_waypoint2 setwaypointtype "MOVE"; +_waypoint2 setWaypointSpeed "NORMAL"; +_waypoint2 setWaypointBehaviour "COMBAT"; + +if (VCOM_AIDEBUG isEqualTo 1) then +{ + [_Unit,"Flank Waypoint set. I am a good leader >:D!!",30,20000] remoteExec ["3DText",0]; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FocusedAccuracy.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FocusedAccuracy.sqf new file mode 100644 index 00000000..acba6392 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FocusedAccuracy.sqf @@ -0,0 +1,90 @@ +private ["_Unit", "_TargetPosition", "_unit", "_NewPosition", "_Accuracy", "_Shake", "_Speed", "_SpotTime", "_SpotDistance", "_RankReturn"]; + +_Unit = _this select 0; +_VCOM_DiagLastCheck = _this select 1; +_TargetPosition = _this select 2; + +_VCOM_DiagLastCheck = diag_ticktime; +if (_TargetPosition isEqualTo [0,0,0]) then +{ + //_target = assignedTarget _unit; + _target = _Unit call VCOMAI_ClosestEnemy;if (_target isEqualTo [0,0,0]) exitwith {}; + _TargetPosition = getpos _target; +} +else +{ + //_target = assignedTarget _unit; + _target = _Unit call VCOMAI_ClosestEnemy;if (_target isEqualTo [0,0,0]) exitwith {}; + _NewPosition = getpos _Target; + + + if (_TargetPosition distance _NewPosition < 30 && {(_unit knowsabout _target) > 0.1}) then + { + _Accuracy = _Unit skill "aimingAccuracy"; + _Shake = _Unit skill "aimingShake"; + _Speed = _Unit skill "aimingSpeed"; + _SpotTime = _Unit skill "spotTime"; + _SpotDistance = _Unit skill "spotDistance"; + + if (VCOM_RainImpact) then + { + _WeatherCheck = (rain)/VCOM_RainPercent; + _Unit setSkill ["aimingAccuracy",(_Accuracy + 0.1) - _WeatherCheck]; + _Unit setSkill ["aimingShake",(_Shake + 0.1) - _WeatherCheck]; + _Unit setSkill ["aimingSpeed",(_Speed + 0.1) - _WeatherCheck]; + _Unit setSkill ["spotTime",(_SpotTime + 0.1) - _WeatherCheck]; + _Unit setSkill ["spotDistance",(_SpotDistance + 0.1) - _WeatherCheck]; + } + else + { + _Unit setSkill ["aimingAccuracy",(_Accuracy + 0.1)]; + _Unit setSkill ["aimingShake",(_Shake + 0.1)]; + _Unit setSkill ["aimingSpeed",(_Speed + 0.1)]; + _Unit setSkill ["spotTime",(_SpotTime + 0.1)]; + _Unit setSkill ["spotDistance",(_SpotDistance + 0.1)]; + }; + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Unit,"Target has not moved...Increasing accuracy :D",15,20000] remoteExec ["3DText",0]; + }; + } + else + { + _RankReturn = _Unit call VCOMAI_RankAndSkill; + _Accuracy = _Unit skill "aimingAccuracy"; + _Shake = _Unit skill "aimingShake"; + _Speed = _Unit skill "aimingSpeed"; + _SpotTime = _Unit skill "spotTime"; + _SpotDistance = _Unit skill "spotDistance"; + + if (VCOM_RainImpact) then + { + _WeatherCheck = (rain)/VCOM_RainPercent; + _Unit setSkill ["aimingAccuracy",_Accuracy - _WeatherCheck]; + _Unit setSkill ["aimingShake",_Shake - _WeatherCheck]; + _Unit setSkill ["aimingSpeed",_Speed - _WeatherCheck]; + _Unit setSkill ["spotTime",_SpotTime - _WeatherCheck]; + _Unit setSkill ["spotDistance",_SpotDistance - _WeatherCheck]; + } + else + { + _Unit setSkill ["aimingAccuracy",_Accuracy]; + _Unit setSkill ["aimingShake",_Shake]; + _Unit setSkill ["aimingSpeed",_Speed]; + _Unit setSkill ["spotTime",_SpotTime]; + _Unit setSkill ["spotDistance",_SpotDistance]; + }; + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_Unit,"Target has moved...Reset Accuracy :<",15,20000] remoteExec ["3DText",0]; + }; + }; + _TargetPosition = _NewPosition; +}; + +_ReturnedArray = [_VCOM_DiagLastCheck,_TargetPosition]; + +_ReturnedArray + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ForceHeal.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ForceHeal.sqf new file mode 100644 index 00000000..846fbb38 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ForceHeal.sqf @@ -0,0 +1,32 @@ +//Heal any hurt friendlies nearby. +//Potential for ace healing +//_damageVar = player getvariable ["ace_medical_bodyPartStatus", [0,0,0,0,0,0]]; [player, "selection", (_damageVar select (["selection"] call ace_medical_fnc_selectionNameToNumber)) + _newDamage, player, "TypeOfDammage", -1] call ace_medical_fnc_handleDamage; +private _Unitgroup = group _this; +private _USide = side _Unitgroup; +private _Friendlies = allUnits select {Side _x isEqualTo _USide && (_x distance _this) < 50}; + +{ + if (damage _x > 0) exitWith + { + while {alive _x && {alive _this} && {_this distance _x > 3}} do + { + _this domove (getposATL _x); + _this forcespeed -1; + sleep 5; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_this,"Moving to heal. Like a good medic.",5,20000] remoteExec ["3DText",0]; + }; + }; + if (alive _x && alive _this && _this distance _x <= 3) then + { + _this action ["HealSoldier",_x]; + _this forcespeed -1; + if (ACEACTIVATED) then {[objNull, _x] call ace_medical_fnc_treatmentAdvanced_fullHealLocal}; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_this,"Healing. Like a good medic.",15,20000] remoteExec ["3DText",0]; + }; + }; + }; +} foreach _Friendlies; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FragmentMove.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FragmentMove.sqf new file mode 100644 index 00000000..1c339b11 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FragmentMove.sqf @@ -0,0 +1,22 @@ +private ["_Unit", "_WayPointPosition", "_UnitPos", "_direction", "_SetPosition","_MovementDistance","_NearestEnemy"]; + +_Unit = _this select 0; +_WayPointPosition = _this select 1; +_NearestEnemy = _this select 2; + +//_UnitPos = getpos _Unit; +_UnitPos = getpos (leader _Unit); + +_direction = [_UnitPos,_WayPointPosition] call BIS_fnc_dirTo; + +if (_Unit distance _NearestEnemy < 150) then +{ + _MovementDistance = 25; +} +else +{ + _MovementDistance = 75; +}; + +_SetPosition = [_UnitPos,_MovementDistance,_direction] call BIS_fnc_relPos; +_SetPosition \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FriendlyArray.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FriendlyArray.sqf new file mode 100644 index 00000000..c046353b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_FriendlyArray.sqf @@ -0,0 +1,9 @@ +private ["_UnitSide"]; +_UnitSide = side (group _this); + +_Array1 = []; +{ + private _TargetSide = side _x; + if (!([_UnitSide, _TargetSide] call BIS_fnc_sideIsEnemy) && {!(_x in (units (group _this)))}) then {_Array1 pushback _x;}; +} forEach allUnits; +_Array1 \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Garrison.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Garrison.sqf new file mode 100644 index 00000000..f425b436 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Garrison.sqf @@ -0,0 +1,56 @@ +private ["_Unit", "_nBuilding", "_GrabVariable", "_BuildingPositions", "_GroupUnits", "_BuildingLocation", "_CurrentPos", "_rnd", "_dist", "_dir", "_positions"]; +//Created on ??? +// Modified on :8/15/14 - 8/3/15 - 9/10/15 + +_Unit = _this select 0; +_group = _this select 1; +_PassFunction = _this select 2; + +//Lets find the closest building +_nBuilding = nearestBuilding _Unit; + +//Lets find out if the unit is already garrisoned or not. If he is, exit the script +_GrabVariable = _Unit getVariable ["VCOM_GARRISONED",false]; + +//If the closest building is greate than 15 meters, exit +if ((_nBuilding distance _Unit) > 50 || {_GrabVariable}) exitWith {}; + + +//Find positions in a house. +_BuildingPositions = [_nBuilding] call BIS_fnc_buildingPositions; +private _OriginalPositions = _BuildingPositions; + +//If the array is not more than 0 - then exit. +if ((count _BuildingPositions) isEqualTo 0) exitWith {}; + +//Find the units in the group! +_GroupUnits = units _group; + +{ + if !((count _BuildingPositions) isEqualTo 0) then + { + _BuildingLocation = selectRandom _BuildingPositions; + _x doMove _BuildingLocation; + _x setUnitPos "UP"; + _x setVariable ["VCOM_GARRISONED",true,false]; + [_x,_BuildingLocation,_BuildingPositions] spawn + { + params ["_unit","_BuildingLocation","_BuildingPositions"]; + private _group = group _Unit; + private _index = currentWaypoint _group; + private _WaypointIs = waypointType [_group,_index]; + while {_WaypointIs isEqualTo "HOLD"} do + { + waitUntil {!alive _unit OR {_unit distance _BuildingLocation < 1.3}}; + if(!alive _unit) exitWith {}; + _unit disableAI "PATH"; + sleep (30 + (random 60)); + _unit enableAI "PATH"; + _BuildingLocation = selectRandom _BuildingPositions; + _unit doMove _BuildingLocation; + _unit setUnitPos "UP"; + }; + }; + }; +} foreach _GroupUnits; + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClear.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClear.sqf new file mode 100644 index 00000000..da9ad27d --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClear.sqf @@ -0,0 +1,33 @@ +private ["_Enemy", "_nBuilding", "_Locations"]; + +_Unit = _this select 0; +_VCOM_MovedRecentlyCover = _this select 1; +_VCOM_InCover = _this select 2; +_VCOMAI_ActivelyClearing = _this select 3; +_VCOMAI_StartedInside = _this select 4; +_VCOM_GARRISONED = _this select 5; + +//Function to send AI to clear buildings +if (_VCOM_MovedRecentlyCover || {_VCOMAI_ActivelyClearing} || {_VCOMAI_StartedInside} || {_VCOM_GARRISONED}) exitWith {}; +//Find the closest enemy (This should be the one that is in a building + +//systemchat format ["F %1",_Unit]; +_Enemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_Enemy" || {(typeName _Enemy) isEqualTo "ARRAY"}) exitWith {}; + +//Find nearest building to the enemy +_nBuilding = nearestBuilding _Enemy; + +//Find the locations of the buildings +_Locations = [_nBuilding] call BIS_fnc_buildingPositions; + +//Stop the AI - and then tell them to move to the house +{ + //Set variable to true to prevent AI clearing buildings to often + //_x spawn VCOMAI_StanceModifier; + if (_Enemy distance _x < 200) then + { + [_Locations,_x,_VCOM_InCover,_VCOMAI_ActivelyClearing,_Enemy] spawn VCOMAI_GarrisonClearPatrol; + }; +} foreach units (group _Unit); + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClearPatrol.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClearPatrol.sqf new file mode 100644 index 00000000..8031abc0 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GarrisonClearPatrol.sqf @@ -0,0 +1,57 @@ +private ["_Locations", "_Unit", "_VCOM_InCover", "_Enemy", "_RefinedBuildingArray", "_UnitPosition", "_AcceptableRange", "_ClosestPos"]; + +//Stop the AI - and then tell them to move to the house +_Locations = _this select 0; +_Unit = _this select 1; +_VCOM_InCover = _this select 2; +_Enemy = _this select 4; + +sleep (random 5); + + + //Define this array so the original remains intact in case needed latter. + _RefinedBuildingArray = _Locations; + + //Remove any positions below or above the player. + _UnitPosition = getposATL _Enemy; + _AcceptableRange = _UnitPosition select 2; + { + if ((_x select 2) < (_AcceptableRange - 1) || (_x select 2) > (_AcceptableRange + 1)) then + { + _RefinedBuildingArray = _RefinedBuildingArray - [_x]; + }; + + } foreach _RefinedBuildingArray; + + + //Define the closest position to be edited + if (_RefinedBuildingArray isEqualTo []) then {_ClosestPos = [_Locations,_Enemy] call VCOMAI_ClosestObject;} else {_ClosestPos = [_RefinedBuildingArray,_Enemy] call VCOMAI_ClosestObject;}; + + +if (isNil "_closestpos") exitWith {}; +while {(_Unit distance _ClosestPos) > 3 && alive _Unit} do +{ + + _Unit doMove _ClosestPos; + sleep 5; + + //Define this array so the original remains intact in case needed latter. + _RefinedBuildingArray = _Locations; + + //Remove any positions below or above the player. + _UnitPosition = getposATL _Enemy; + _AcceptableRange = _UnitPosition select 2; + { + if ((_x select 2) < (_AcceptableRange - 1) || (_x select 2) > (_AcceptableRange + 1)) then + { + _RefinedBuildingArray = _RefinedBuildingArray - [_x]; + }; + + } foreach _RefinedBuildingArray; + + + //Define the closest position to be edited + if (_RefinedBuildingArray isEqualTo []) then {_ClosestPos = [_Locations,_Enemy] call VCOMAI_ClosestObject;} else {_ClosestPos = [_RefinedBuildingArray,_Enemy] call VCOMAI_ClosestObject;}; + + +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GroupLoiter.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GroupLoiter.sqf new file mode 100644 index 00000000..9dcdf0bb --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_GroupLoiter.sqf @@ -0,0 +1,24 @@ +//This script will dictate how the loiter WP works for the AI +private ["_Unitleader", "_UnitArray"]; + +_Unitleader = _this select 0; +_Group = _this select 1; + +//We need a list of actions that the AI can do for loitering. +_UnitArray = units _Group; +{ + if (_x isEqualTo (vehicle _x)) then + { + //Each AI will need to join their own group. The plan is to make them re-form when combat starts. + [_x] joinsilent grpnull; + _x setVariable ["VCOM_LOITERING",true]; + _x setVariable ["VCOM_LOITERINGACT",0]; + [_x,_UnitArray] spawn VCOMAI_LoiterAction; + }; +} foreach _UnitArray; + + +//This function will automatically regroup soldiers if they get more than 1 waypoint. +[_UnitArray,side _Unitleader] spawn VCOMAI_ReGroup; + + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMine.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMine.sqf new file mode 100644 index 00000000..14345781 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMine.sqf @@ -0,0 +1,34 @@ +//This function will determine if the unit has a mine, satchel, or another explosive that could be used to blow shit up. +//Edited on: 8/13/2017 @ 0137 + + +private _VCOM_HasMine = false; +private _magazinesAmmo = magazinesAmmo _this; +if (isNil "_magazinesAmmo") exitWith {_PushArray = [false,[],false,[]];_PushArray}; +private _VCOM_HASSATCHEL = false; +private _ActualObj = []; +private _SatchelArray = []; + +{ + private _Magazine = _x select 0; + private _value = (configfile >> "CfgMagazines" >> _Magazine >> "nameSound") call BIS_fnc_getCfgData; + + if (_value isEqualTo "satchelcharge") then + { + + _SatchelArray pushback [((configfile >> "CfgMagazines" >> _Magazine >> "ammo") call BIS_fnc_getCfgData),_Magazine]; + _VCOM_HASSATCHEL = true; + + }; + if (_value isEqualTo "mine") then + { + _VCOM_HasMine = true; + _ActualObj pushback [((configfile >> "CfgMagazines" >> _Magazine >> "ammo") call BIS_fnc_getCfgData),_Magazine]; + }; + + +} forEach _magazinesAmmo; + +_PushArray = [_VCOM_HASSATCHEL,_ActualObj,_VCOM_HasMine,_SatchelArray]; + +_PushArray \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMineOld.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMineOld.sqf new file mode 100644 index 00000000..379868d7 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HasMineOld.sqf @@ -0,0 +1,50 @@ +private ["_Unit", "_magazinesAmmo", "_Magazine", "_value", "_SubtractAmount", "_DemoCharge", "_SatchelCharge", "_Bomb", "_IsWired", "_IsRemote", "_IsClaymore", "_MineName","_VCOM_HASSATCHEL"]; + +_Unit = _this; +_VCOM_HasMine = false; + +_magazinesAmmo = magazinesAmmo _Unit; + +//Set all values to false! +_VCOM_HASSATCHEL = false; + +{ + _Magazine = _x select 0; + _value = (configfile >> "CfgMagazines" >> _Magazine >> "nameSound") call BIS_fnc_getCfgData; + if (_value isEqualTo "satchelcharge") then + { + + _SubtractAmount = 0; + _DemoCharge = ["DemoCharge",_Magazine,false] call BIS_fnc_inString; + _SatchelCharge = ["SatchelCharge",_Magazine,false] call BIS_fnc_inString; + + if (_DemoCharge || {_SatchelCharge}) then + { + _Bomb = "Democharge_F"; + if (_SatchelCharge) then {_Bomb = "SatchelCharge_F"}; + _Unit setVariable ["VCOM_SATCHELBOMB",_Bomb,false]; + _Unit setVariable ["Vcom_SatchelObjectMagazine",_Magazine,false]; + _VCOM_HASSATCHEL = true; + }; + + }; + if (_value isEqualTo "mine") then + { + _SubtractAmount = 0; + _IsWired = ["wire",_Magazine,false] call BIS_fnc_inString; + _IsRemote = ["remote",_Magazine,false] call BIS_fnc_inString; + _IsClaymore = ["Claymore",_Magazine,false] call BIS_fnc_inString; + if (_IsWired) then {_SubtractAmount = -9} else {_SubtractAmount = -10}; + if (_IsRemote) then {_SubtractAmount = -11}; + _MineName = [_Magazine,0,_SubtractAmount] call BIS_fnc_trimString; + if (_IsClaymore) then {_MineName = "Claymore_F"}; + _Vcom_MineObject = _MineName; + _Vcom_MineObjectMagazine = _Magazine; + _VCOM_HasMine = true; + }; +} forEach _magazinesAmmo; + +_PushArray = [_VCOM_HASSATCHEL,_Vcom_MineObject,_Vcom_MineObjectMagazine,_VCOM_HasMine]; + + +_PushArray diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HearingAids.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HearingAids.sqf new file mode 100644 index 00000000..a83fd745 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_HearingAids.sqf @@ -0,0 +1,54 @@ +//Helps the AI recognize people firing from a better distance +_unit = (_this select 0) select 0; +if ((behaviour _unit) isEqualTo "COMBAT") exitWith {}; + +_weapon = (_this select 0) select 1; + +if (_weapon isEqualTo "Put" || {_weapon isEqualTo "Throw"}) exitwith {}; + +//Check if unit has suppressor on weapon. +_ItemList = weaponsitems _unit; +_Return = true; + +if (((_ItemList select 0) select 1) isEqualTo "") then {_Return = false;}; + +//systemchat format ["%1",_Sup]; +if !(_Return) then +{ + + if !(side _unit in VCOM_SideBasedMovement) exitWith {}; + + _bullet = (_this select 0) select 6; + + + _TimeShot = _unit getVariable ["VCOM_FiredTimeHearing",0]; + + if ((diag_tickTime - _TimeShot) > 20) then + { + _Array1 = _unit call VCOMAI_EnemyArray; + + { + if ((_x distance _unit) < VCOM_HEARINGDISTANCE && !(_x getVariable "VCOMAI_ShotsFired") && (count ((group _Unit) call VCOMAI_Waypointcheck)) <= 0) then + { + _x setVariable ["VCOMAI_ShotsFired",true,true]; + _kv = _x knowsAbout _unit; + _x reveal [_unit,(_kv + 0.5)]; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_x,"What was that? +0.5 to knowsAbout",10,20000] remoteExec ["3DText",0]; + }; + }; + } foreach _Array1; + + _Unit setVariable ["VCOM_FiredTimeHearing",diag_tickTime,false]; + }; +} +else +{ + + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_unit,"I am sneaky snake...",10,20000] remoteExec ["3DText",0]; + }; + +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_IRCheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_IRCheck.sqf new file mode 100644 index 00000000..3aff75a3 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_IRCheck.sqf @@ -0,0 +1,38 @@ +//This function will determine if the player is alive and if we should be considering an IR laser or not. This function may be expanded later to consider flashlights and the like. +//09/06/17 @ 1642 +while {alive _this} do +{ + if (_this isIRLaserOn currentWeapon _this) then + { + private _Side = side _this; + + private _WepDir = (_this weaponDirection currentWeapon _this) vectorMultiply 1000; + private _EyePosS = eyePos _this; + private _EyePosB = [_EyePosS select 0,_EyePosS select 1,(_EyePosS select 2 - 0.25)]; + private _EndSight = _EyePosB vectoradd _WepDir; + private _LineInter = lineIntersectsSurfaces [_EyePosB, _EndSight, _this, _this, true, 1]; + + if !(_LineInter isEqualTo []) then + { + private _FinalPos = (_LineInter select 0 select 0); + private _Enemies = allUnits select {[_Side,(side _x)] call BIS_fnc_sideIsEnemy && (currentVisionMode _x isEqualTo 1)}; + private _DirPlayer = getdir Player; + if !(_Enemies isEqualTo []) then + { + private _StartPos = (getpos player); + private _ToalDist = _Startpos distance2D _FinalPos; + private _Chunks = round (_ToalDist/100); + private _ChunkN = 0; + while {_Chunks > _ChunkN} do + { + private _StartPos = [_StartPos,100,_DirPlayer] call BIS_fnc_relPos; + private _NE = [_Enemies,_StartPos] call VCOMAI_ClosestObject; + if (_NE distance2D _Startpos < 65) then {_NE setBehaviour "COMBAT";}; + _ChunkN = _ChunkN + 1; + sleep 0.1; + }; + }; + sleep 0.25; + }; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LightGarrison.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LightGarrison.sqf new file mode 100644 index 00000000..aa6b029e --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LightGarrison.sqf @@ -0,0 +1,49 @@ +//Created on ??? +// Modified on : 9/7/14 - 8/4/15 - Added a check building distance stat. +_Unit = _this select 0; +_VCOM_MovedRecentlyCover = _this select 1; +_VCOMAI_ActivelyClearing = _this select 2; +_VCOMAI_StartedInside = _this select 3; + +if (_VCOM_MovedRecentlyCover || {_VCOMAI_ActivelyClearing} || {_VCOMAI_StartedInside} || {_Unit getVariable "VCOM_GARRISONED"}) exitWith {}; +_Group = (group _Unit); +_UnitsGroup = units _Group; +_SpecificUnit = _UnitsGroup select 0; + + +//systemchat format ["G %1",_Unit]; +_ClosestEnemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_ClosestEnemy" || {_ClosestEnemy isEqualTo []}) exitWith {}; + +_nBuilding = nearestBuilding _ClosestEnemy; +_IsEnterable = [_nBuilding] call BIS_fnc_isBuildingEnterable; + +{ + + +if (!(_IsEnterable)) exitWith {}; +_CheckDist = _SpecificUnit distance _nBuilding; +if (_CheckDist > 200) exitWith {}; +_bposleft = []; +_pcnt = 0; +while {format ["%1", _nBuilding buildingPos (_pcnt)] != "[0,0,0]" } do { +_bposleft set [count _bposleft, (_pcnt)]; +_pcnt = _pcnt + 1; +}; +_LocationArray = []; +{ + _LocationArray = _LocationArray + [(_nBuilding buildingPos _x)]; +} forEach _bposleft; + +if (isNil "_LocationArray") exitWith {}; +if ((count _LocationArray) <= 0) exitWith {}; +if ((count _LocationArray) < (count _UnitsGroup)) exitWith {}; + +_AttackPoint = _LocationArray select floor(random(count _LocationArray)); +if (isNil "_AttackPoint") exitWith {}; +_LocationArray = _LocationArray - [_AttackPoint]; +//_Unit setPos _AttackPoint; +//doStop _x; +_x moveTo _AttackPoint; + +} foreach _UnitsGroup; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LoiterAction.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LoiterAction.sqf new file mode 100644 index 00000000..33499669 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_LoiterAction.sqf @@ -0,0 +1,158 @@ +//This script will have the AI perform certain actions. +private ["_Unit", "_UnitGroup", "_CurrentAction", "_RandomAction", "_rnd", "_dist", "_dir", "_UnitPosition", "_positions", "_RandomAnimationList", "_ClosestUnit", "_positions2", "_Fire", "_Counter", "_SwitchMoveList", "_PlayActionList"]; +_Unit = _this select 0; +_UnitGroup = _this select 1; + + +While {_Unit getvariable ["VCOM_LOITERING",true] && alive _Unit} do +{ + _CurrentAction = _Unit getvariable ["VCOM_LOITERINGACT",0]; + + _RandomAction = ([1,2,3,4] - [_CurrentAction]) call BIS_fnc_selectrandom; + switch (_RandomAction) do + { + case 1: + { + //Wander around and play random animation + //Get random position + _Unit setVariable ["VCOM_LOITERINGACT",1]; + _rnd = random 10; + _dist = (_rnd + 5); + _dir = random 360; + _UnitPosition = getposworld _Unit; + _positions = [(_UnitPosition select 0) + (sin _dir) * _dist, (_UnitPosition select 1) + (cos _dir) * _dist, 0]; + _Unit doMove _positions; + WaitUntil {(_Unit distance _positions) < 2}; + _RandomAnimationList = ["AmovPercMstpSnonWnonDnon_exercisePushup","SitDown","AmovPercMstpSnonWnonDnon_SaluteIn","AmovPercMstpSrasWrflDnon_AinvPknlMstpSlayWrflDnon"] call BIS_fnc_selectrandom; + [_Unit,_RandomAnimationList] remoteExec ["playMoveEverywhere",0]; + }; + case 2: + { + _Unit setVariable ["VCOM_LOITERINGACT",2]; + _ClosestUnit = [(_UnitGroup - [_Unit]),_Unit] call VCOMAI_ClosestObject; + _ClosestUnit setVariable ["VCOM_LOITERINGACT",2]; + + _rnd = random 10; + _dist = (_rnd + 5); + _dir = random 360; + _UnitPosition = getposworld _Unit; + _positions = [(_UnitPosition select 0) + (sin _dir) * _dist, (_UnitPosition select 1) + (cos _dir) * _dist, 0]; + _positions2 = [(_positions select 0) + 5, (_positions select 1) + 5,_positions select 2]; + + _Unit doMove _positions; + _ClosestUnit doMove _positions2; + + WaitUntil {(_Unit distance _positions) < 2 && (_ClosestUnit distance _positions2) < 2}; + + sleep 10; + _Unit lookAt _ClosestUnit; + _ClosestUnit lookAt _Unit; + sleep 5; + + + + [_Unit,"Acts_B_hub01_briefing"] remoteExec ["switchMoveEverywhere",0]; + sleep 2; + [_ClosestUnit,"Acts_Kore_TalkingOverRadio_loop"] remoteExec ["switchMoveEverywhere",0]; + sleep 80; + [_Unit,""] remoteExec ["switchMoveEverywhere",0]; + [_ClosestUnit,""] remoteExec ["switchMoveEverywhere",0]; + + + + }; + case 3: + { + _Unit setVariable ["VCOM_LOITERINGACT",3]; + _ClosestUnit = [(_UnitGroup - [_Unit]),_Unit] call VCOMAI_ClosestObject; + _ClosestUnit setVariable ["VCOM_LOITERINGACT",3]; + + _rnd = random 10; + _dist = (_rnd + 5); + _dir = random 360; + _UnitPosition = getposworld _Unit; + _positions = [(_UnitPosition select 0) + (sin _dir) * _dist, (_UnitPosition select 1) + (cos _dir) * _dist, 0]; + + + _Unit doMove _positions; + _ClosestUnit doMove _positions; + + WaitUntil {(_Unit distance _positions) < 5 && (_ClosestUnit distance _positions) < 5}; + + _rnd = random 5; + _dist = (_rnd + 3); + _dir = random 360; + _positions2 = [(_positions select 0) + (sin _dir) * _dist, (_positions select 1) + (cos _dir) * _dist, 0]; + _ClosestUnit doMove _positions2; + + sleep 10; + + _Fire = "FirePlace_burning_F" createvehicle _positions2; + _Fire spawn {sleep 120;deletevehicle _this;}; + + sleep 2; + _ClosestUnit lookAt _Fire; + _Unit lookAt _Fire; + + _ClosestUnit spawn + { + _Counter = 0; + While {_Counter < 11} do + { + sleep (random 2); + _RandomAnimationList = ["AmovPercMstpSnonWnonDnon_exercisePushup","SitDown","AmovPercMstpSnonWnonDnon_SaluteIn"] call BIS_fnc_selectrandom; + [_this,_RandomAnimationList] remoteExec ["playMoveEverywhere",0]; + _Counter = _Counter + 1; + sleep 10; + }; + }; + + _Unit spawn + { + _Counter = 0; + While {_Counter < 11} do + { + sleep (random 2); + _RandomAnimationList = ["AmovPercMstpSnonWnonDnon_exercisePushup","SitDown","AmovPercMstpSnonWnonDnon_SaluteIn"] call BIS_fnc_selectrandom; + [_this,_RandomAnimationList] remoteExec ["playMoveEverywhere",0]; + _Counter = _Counter + 1; + sleep 12; + }; + }; + + + + + + }; + case 4: + { + //Wander around and sitdown + //Get random position + _Unit setVariable ["VCOM_LOITERINGACT",4]; + _rnd = random 10; + _dist = (_rnd + 5); + _dir = random 360; + _UnitPosition = getposworld _Unit; + _positions = [(_UnitPosition select 0) + (sin _dir) * _dist, (_UnitPosition select 1) + (cos _dir) * _dist, 0]; + _Unit doMove _positions; + WaitUntil {(_Unit distance _positions) < 2}; + sleep 2; + [_Unit,"SitDown"] remoteExec ["playActionNowEverywhere",0]; + sleep 100; + [_Unit,"walkf"] remoteExec ["playActionNowEverywhere",0]; + + + }; + }; + + //_SwitchMoveList = ["Acts_Kore_TalkingOverRadio_loop","Acts_B_hub01_briefing"]; + //_PlayActionList = ["reloadMagazine"]; + //[player,"Acts_WarmUp_actions"] remoteExec ["switchMoveEverywhere",0]; + //[player,"AmovPercMstpSrasWrflDnon_AmovPercMevaSrasWrflDb"] remoteExec ["playMoveEverywhere",0]; + //[player,"Acts_ComingInSpeakingWalkingOut_2"] remoteExec ["playMoveEverywhere",0]; + //[player,"grabdrag"] remoteExec ["playActionNowEverywhere",0]; + + +sleep 120; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MapMarkers.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MapMarkers.sqf new file mode 100644 index 00000000..f16bb052 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MapMarkers.sqf @@ -0,0 +1,31 @@ +_Unit = _this; +if (isPlayer _Unit) exitWith {}; + +while {alive _Unit && VCOM_UseMarkers} do +{ + sleep 0.15; + MarkerNames = random 1000; + _marker1Names = format["marker_%1",MarkerNames]; + _marker1 = createMarker [_marker1Names,(getPosASL _Unit)]; + _marker1 setmarkershape "ELLIPSE"; + if ((side _Unit) isEqualTo EAST) then {_marker1 setmarkercolor "ColorRed";}; + if ((side _Unit) isEqualTo WEST) then {_marker1 setmarkercolor "ColorBlue";}; + _marker1 setmarkersize [1,1]; + MarkerArray pushback _marker1; +}; +MarkerNames = random 1000; +_marker1Names = format["marker_%1",MarkerNames]; +_marker1 = createMarker [_marker1Names,(getPosASL _Unit)]; +_marker1 setmarkershape "ELLIPSE"; +if ((side _Unit) isEqualTo EAST) then {_marker1 setmarkercolor "ColorOrange";}; +if ((side _Unit) isEqualTo WEST) then {_marker1 setmarkercolor "ColorOrange";}; +_marker1 setmarkersize [2,2]; +MarkerArray pushback _marker1; + +_marker1zzNames = format["markezzzzr_%1",MarkerNames]; +_markerName = createmarker [_marker1zzNames,(getposASL _Unit)]; +_markerName setMarkerType "hd_dot"; +_markerName setMarkerText "DEAD"; +_markerName setMarkerColor "ColorBlack"; +_markerName setMarkerSize [0.5,0.5]; +MarkerArray pushback _markerName; diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveInCombat.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveInCombat.sqf new file mode 100644 index 00000000..0ece1e2d --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveInCombat.sqf @@ -0,0 +1,144 @@ +private ["_Unit", "_index", "_wPos", "_NearestEnemy", "_unit","_GuessLocation","_VCOM_MovedRecently","_VCOM_MovedRecentlyCover","_VCOM_InCover","_ReturnVariable"]; +_Unit = _this select 0; +//systemchat format ["%1",((group _Unit) call VCOMAI_Waypointcheck)]; +//if ((count ((group _Unit) call VCOMAI_Waypointcheck)) > 0) exitwith {}; +_ReturnVariable = [false,false,false]; +if (VCOM_CurrentlyMoving < VCOM_CurrentlyMovingLimit) then +{ + _VCOM_GARRISONED = _this select 1; + _VCOM_MovedRecently = _this select 2; + _VCOM_MovedRecentlyCover = _this select 3; + _VCOM_InCover = _this select 4; + _VCOM_VisuallyCanSee = _this select 5; + _VCOMAI_ActivelyClearing = _this select 6; + _VCOMAI_StartedInside = _this select 7; + _FiredRecently = _unit getVariable ["VCOM_FiredTime",diag_ticktime]; + + //systemchat "EXECUTED COMBAT MOVEMENT!"; + //systemchat format ["%1",(diag_tickTime - _FiredRecently)]; + + if (_VCOM_MovedRecentlyCover || {(diag_tickTime - _FiredRecently) < 3} || {_VCOM_VisuallyCanSee} || {_VCOMAI_ActivelyClearing} || {_VCOMAI_StartedInside} || {_VCOM_GARRISONED} || {_VCOM_MovedRecently}) exitWith {}; + _Squadlead = leader _Unit; + + if (_Squadlead distance _Unit > 60) then + { + //_Unit domove (getposATL _Squadlead); + _Unit forcespeed -1; + } + else + { + _Group = (group _Unit); + //Pull the waypoint information + _index = currentWaypoint _Group; + + _WPPosition = getWPPos [_Group,_index]; + //systemchat format ["_WPPosition: %1",_WPPosition]; + if !(_WPPosition isEqualTo [0,0,0]) then + { + if (_Unit isEqualTo (leader _Unit)) then + { + _GroupDudes = units (group _Unit); + _NearestEnemy = _Unit call VCOMAI_ClosestEnemy; + if (isNil "_NearestEnemy" || _NearestEnemy isEqualTo [0,0,0]) then {_NearestEnemy = _WPPosition;}; + //systemchat format ["_NearestEnemy: %1",_NearestEnemy]; + _VCOM_MovedRecentlyRETURN = true; + _VCOM_MovedRecentlyCoverRETURN = true; + _VCOM_InCoverRETURN = true; + _ReturnVariable = [_VCOM_MovedRecentlyRETURN,_VCOM_MovedRecentlyCoverRETURN,_VCOM_InCoverRETURN]; + { + [_x,_WPPosition,_VCOM_GARRISONED,_VCOM_MovedRecentlyCover,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside,_NearestEnemy] spawn + { + _Unit = _this select 0; + if !((vehicle _Unit) isEqualTo _Unit) exitWith {}; + waitUntil {VCOM_CurrentlyMoving < VCOM_CurrentlyMovingLimit}; + VCOM_CurrentlyMoving = VCOM_CurrentlyMoving + 1; + call { + sleep (random 10); + _Pos = _this select 1; + _VCOM_GARRISONED = _this select 2; + _VCOM_MovedRecentlyCover = _this select 3; + _VCOMAI_ActivelyClearing = _this select 4; + _VCOMAI_StartedInside = _this select 5; + _NearestEnemy = _this select 6; + + + _MoveToPos = [_Unit,_Pos,_NearestEnemy] call VCOMAI_FragmentMove; + //systemchat format ["_MoveToPos: %1",_MoveToPos]; + if !((vehicle _Unit) isEqualTo _Unit) exitWith + { + _Unit forceSpeed -1; + _Unit doMove _Pos; + }; + _CoverPos = [_Unit,_MoveToPos,_VCOM_GARRISONED,_VCOM_MovedRecentlyCover,_VCOMAI_ActivelyClearing,_VCOMAI_StartedInside,_NearestEnemy] call VCOMAI_FindCoverPos; + //systemchat format ["_CoverPos: %1",_CoverPos]; + + if !(isNil "_CoverPos") then + { + if (VCOM_AIDEBUG isEqualTo 1) then + { + _arrow = "Sign_Sphere200cm_F" createVehicle [0,0,0]; + _arrow setpos _CoverPos; + _arrow spawn + { + _Counter = 0; + _Position = getpos _this; + _NewPos2 = _Position select 2; + while {_Counter < 60} do + { + _NewPos2 = _NewPos2 + 0.1; + _this setpos [_Position select 0,_Position select 1,_NewPos2]; + _Counter = _Counter + 1; + sleep 0.5; + }; + deletevehicle _this; + }; + }; + + _Unit doWatch ObjNull; + _Unit disableAI "TARGET"; + _Unit disableAI "AUTOTARGET"; + _Unit disableAI "SUPPRESSION"; + _Unit disableAI "AUTOCOMBAT"; + _WaitTime = diag_ticktime + 35; + While {alive _Unit && diag_ticktime < _WaitTime && (_Unit distance _CoverPos) > 3} do + { + _Unit forcespeed -1; + _Unit domove _CoverPos; + // }; + sleep 4; + }; + //systemchat format ["MADE IT: %1",_Unit]; + _Unit forcespeed 0; + } + else + { + _Unit forcespeed -1; + _Unit doMove _MoveToPos; + }; + _Unit enableAI "AUTOTARGET"; + _Unit enableAI "TARGET"; + _Unit enableAI "SUPPRESSION"; + _Unit enableAI "AUTOCOMBAT"; + _Unit doWatch _NearestEnemy; + }; + VCOM_CurrentlyMoving = VCOM_CurrentlyMoving - 1; + }; + } foreach _GroupDudes; + }; + _VCOM_MovedRecentlyRETURN = true; + _VCOM_MovedRecentlyCoverRETURN = true; + _VCOM_InCoverRETURN = true; + _ReturnVariable = [_VCOM_MovedRecentlyRETURN,_VCOM_MovedRecentlyCoverRETURN,_VCOM_InCoverRETURN]; + //_Unit setVariable ["VCOM_InCover",true,false]; + } + else + { + _VCOM_MovedRecentlyRETURN = false; + _VCOM_MovedRecentlyCoverRETURN = false; + _VCOM_InCoverRETURN = false; + _ReturnVariable = [_VCOM_MovedRecentlyRETURN,_VCOM_MovedRecentlyCoverRETURN,_VCOM_InCoverRETURN]; + + }; + }; +}; +_ReturnVariable \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCover.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCover.sqf new file mode 100644 index 00000000..b261956b --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCover.sqf @@ -0,0 +1,74 @@ +waitUntil {VCOM_CurrentlyMoving < VCOM_CurrentlyMovingLimit}; + +VCOM_CurrentlyMoving = VCOM_CurrentlyMoving + 1; +call { + private ["_Unit", "_coverObjects", "_startingdistance", "_class", "_return", "_parents", "_BoundingArray", "_p1", "_p2", "_maxWidth", "_maxLength", "_GroupLeader", "_unit", "_NearestEnemy", "_GuessLocation", "_coverObjectsClosest", "_Closestobject", "_coverObjectspos", "_arrow", "_UnitGroup", "_OriginalSpeed", "_WaitTime","_WeakListFinal"]; + + _Unit = _this select 0; + if !((vehicle _Unit) isEqualTo _Unit) exitWith {}; + + + _VCOM_MovedRecentlyCover = _this select 1; + _VCOM_GRENADETHROWN = _this select 2; + _VCOM_InCover = _this select 3; + _VCOMAI_StartedInside = _this select 4; + + //Let's find the nearest enemy to his unit. + _NearestEnemy = _Unit call VCOMAI_ClosestEnemy; + _DistanceCheck = _NearestEnemy distance _Unit; + if (isNil "_NearestEnemy" || {(typeName _NearestEnemy isEqualTo "ARRAY")} || {!alive _Unit} || {!(alive _NearestEnemy)} || {(_DistanceCheck) > 2000}) exitWith {_Unit forcespeed -1;}; + + + + _MoveToPos = (getpos _Unit); + _VCOM_GARRISONED = _Unit getVariable ["VCOM_GARRISONED",false]; + _CoverPos = [_Unit,_MoveToPos,_VCOM_GARRISONED,_VCOM_MovedRecentlyCover,false,_VCOMAI_StartedInside,_NearestEnemy] call VCOMAI_FindCoverPos; + + if !(isNil "_CoverPos") then + { + //Lets us know where they were told to move! + if (VCOM_AIDEBUG isEqualTo 1) then + { + _arrow = "Sign_Sphere200cm_F" createVehicle [0,0,0]; + _arrow setpos _CoverPos; + _arrow spawn + { + _Counter = 0; + _Position = getpos _this; + _NewPos2 = _Position select 2; + while {_Counter < 60} do + { + _NewPos2 = _NewPos2 + 0.1; + _this setpos [_Position select 0,_Position select 1,_NewPos2]; + _Counter = _Counter + 1; + sleep 0.5; + }; + deletevehicle _this; + }; + }; + + _WaitTime = diag_ticktime + 35; + _Unit doWatch ObjNull; + _Unit disableAI "TARGET"; + _Unit disableAI "AUTOTARGET"; + _Unit disableAI "SUPPRESSION"; + _Unit disableAI "AUTOCOMBAT"; + While {alive _Unit && diag_ticktime < _WaitTime && (_Unit distance _CoverPos) > 3} do + { + _Unit forcespeed -1; + _Unit domove _CoverPos; + sleep 4; + }; + _Unit forcespeed 0; + _Unit doWatch _NearestEnemy; + _Unit enableAI "AUTOTARGET"; + _Unit enableAI "TARGET"; + _Unit enableAI "SUPPRESSION"; + _Unit enableAI "AUTOCOMBAT"; + } + else + { + _Unit doMove _MoveToPos; + }; +}; +VCOM_CurrentlyMoving = VCOM_CurrentlyMoving - 1; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCoverBackup.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCoverBackup.sqf new file mode 100644 index 00000000..21d0c511 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_MoveToCoverBackup.sqf @@ -0,0 +1,80 @@ +private ["_Unit", "_coverObjects", "_startingdistance", "_class", "_return", "_parents", "_BoundingArray", "_p1", "_p2", "_maxWidth", "_maxLength", "_GroupLeader", "_unit", "_NearestEnemy", "_GuessLocation", "_coverObjectsClosest", "_Closestobject", "_coverObjectspos", "_arrow", "_UnitGroup", "_OriginalSpeed", "_WaitTime","_WeakListFinal"]; + +_Unit = _this select 0; + +//if ((count ((group _Unit) call VCOMAI_Waypointcheck)) > 0) exitwith {}; + +_VCOM_MovedRecentlyCover = _this select 1; +_VCOM_GRENADETHROWN = _this select 2; +_VCOM_InCover = _this select 3; +_VCOMAI_StartedInside = _this select 4; + + +if ((_VCOM_InCover) || {_VCOM_MovedRecentlyCover} || {_Unit getVariable "VCOMAI_ActivelyClearing"} || {_VCOMAI_StartedInside} || {_Unit getVariable "VCOM_GARRISONED"} || !(vehicle _Unit isEqualTo _Unit)) exitWith {}; + + +//systemchat format ["H %1",_Unit]; +_NearestEnemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_NearestEnemy" || _NearestEnemy isEqualTo [0,0,0]) exitWith {}; + +_ClosestCover = []; +_WeakListFinal = []; +_TypeListFinal = []; +_TypeList = nearestObjects [getpos _Unit, [], 50]; +{ + _Type = typeOf _x; + if !(_type in ["#crater","#crateronvehicle","#soundonvehicle","#particlesource","#lightpoint","#slop","#mark","HoneyBee","Mosquito","HouseFly","FxWindPollen1","ButterFly_random","Snake_random_F","Rabbit_F","FxWindGrass2","FxWindLeaf1","FxWindGrass1","FxWindLeaf3","FxWindLeaf2"]) then + { + if (!(_x isKindOf "Man") && {!(_x isKindOf "Bird")} && {!(_x isKindOf "BulletCore")} && {!(_x isKindOf "Grenade")} && {!(_x isKindOf "WeaponHolder")} && {!(isOnRoad (getpos _x))}) then + { + _BoundingArray = boundingBoxReal _x; + _p1 = _BoundingArray select 0; + _p2 = _BoundingArray select 1; + _maxWidth = abs ((_p2 select 0) - (_p1 select 0)); + _maxLength = abs ((_p2 select 1) - (_p1 select 1)); + _maxHeight = abs ((_p2 select 2) - (_p1 select 2)); + if (_maxWidth > 2 && _maxLength > 2 && _maxHeight > 2) then + { + if (_type isEqualTo "") then + { + _WeakListFinal pushback _x + } + else + { + _TypeListFinal pushback _x; + }; + }; + }; + }; +} foreach _TypeList; + + +if (_TypeListFinal isEqualTo [] && _WeakListFinal isEqualTo []) exitWith {}; +//_ClosestCover = [_TypeListFinal,_Unit] call VCOMAI_ClosestObject; +if !(_TypeListFinal isEqualTo []) then {_ClosestCover = _TypeListFinal call BIS_fnc_selectRandom;} else {_ClosestCover = _WeakListFinal call BIS_fnc_selectRandom;}; + +if (isNil "_ClosestCover") exitWith {}; + +_GuessLocation = getpos _NearestEnemy; + + +_coverObjectspos = [_GuessLocation, (_ClosestCover distance _NearestEnemy) + 2, ([_GuessLocation, _ClosestCover] call BIS_fnc_dirTo)] call BIS_fnc_relPos; + + [_Unit,_coverObjectspos] spawn + { + _Unit = _this select 0; + _coverObjectspos = _this select 1; + //_Unit setunitposweak "MIDDLE"; + sleep 1; + _WaitTime = diag_ticktime + 15; + + While {alive _Unit && !(diag_ticktime > _WaitTime) && (_Unit distance _coverObjectspos) > 3} do + { + _Unit domove _coverObjectspos; + _Unit forceSpeed -1; + sleep 5; + }; + + //_Unit forcespeed 0; + + }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStatic.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStatic.sqf new file mode 100644 index 00000000..3a3feec3 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStatic.sqf @@ -0,0 +1,36 @@ +//This function will constantly monitor the unit and see if the static weapon needs to be dissassembled or not. The amount of time on a static will be a base variable with additional time every time an enemy is spotted. +//Edited on: 8/8/2017 @ 0011 + +params ["_Unit","_Backpack","_StaticCreated"]; + +sleep 10; + +private _StaticGreen = true; +private _Statictime = 180; + +while {_StaticGreen && {alive _unit} && {alive _StaticCreated} && {!(isNull (gunner _StaticCreated))}} do +{ + sleep 5; + private _Enemy = _Unit findNearestEnemy _Unit; + if (!(isNull _Enemy)) then + { + private _cansee = [_Unit, "VIEW"] checkVisibility [eyePos _Unit, eyePos _Enemy]; + if (_cansee > 0) then {_Statictime = _Statictime + 3;} else {_Statictime = _Statictime - 5;}; + } + else + { + _Statictime = _Statictime - 5; + }; + if (_Statictime < 1) then {_StaticGreen = false;}; +}; + +//Okay, time to move! +if (alive _Unit) then +{ + _Unit leaveVehicle _StaticCreated; + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; + sleep 3; + deleteVehicle _StaticCreated; + sleep 1; + _Unit addBackpackGlobal _Backpack; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStaticOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStaticOLD.sqf new file mode 100644 index 00000000..6b50b9a9 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PackStaticOLD.sqf @@ -0,0 +1,26 @@ +private["_group","_weapon","_position","_leader","_units","_gunner","_assistant","_type","_wait","_weaponBP","_tripodBP"]; + +//_group = [_this, 0, grpNull] call bis_fnc_param; +_Unit = _this select 1; +_group = group _Unit; +sleep 2; + +_UnitGroups = units _group; +_weapon = _Unit getVariable "supportWeaponSetup"; +_position = (getPos _Unit); +_leader = leader _group; +_type = typeOf _weapon; +_Unit leaveVehicle _weapon; + +_UnitStatic = _Unit getVariable "USEDSTATICWEAP"; + +sleep 0.25; +_Unit action ["DisAssemble",_weapon]; +deleteVehicle _weapon; +sleep 1; +//_assistant action ["takeBag",_tripodBP]; +//_Unit action ["takeBag",_weaponBP]; +//_assistant action ["takeBag",_tripodBP]; +_Unit addBackpack _UnitStatic; + +//_Unit setVariable ["SETUPAMOUNT",false,false]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PlaceMine.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PlaceMine.sqf new file mode 100644 index 00000000..e25514c8 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_PlaceMine.sqf @@ -0,0 +1,66 @@ +if (VCOM_MineLayChance < (random 100)) exitWith {}; + +private _Unit = _this select 0; +private _MineArray = _this select 1; + +private _MineType = _MineArray select 0; +private _MagazineName = _MineArray select 1; + +if (_MineArray isEqualTo []) exitWith {}; + +_Unit removeMagazine _MagazineName; + +//systemchat format ["I %1",_Unit]; +private _NearestEnemy = _Unit call VCOMAI_ClosestEnemy; +if (_NearestEnemy isEqualTo [] || {isNil "_NearestEnemy"}) exitWith {}; + +private _mine = ""; + +if (_NearestEnemy distance _Unit < 200) then +{ + //_mine = createMine [_MineType,getposATL _Unit, [], 2]; + _mine = _MineType createVehicle (getposATL _Unit); + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; +} +else +{ + _NearRoads = _Unit nearRoads 50; + if (count _NearRoads > 0) then + { + private _ClosestRoad = [_NearRoads,_Unit] call VCOMAI_ClosestObject; + _Unit doMove (getpos _ClosestRoad); + waitUntil {!(alive _Unit) || _Unit distance _ClosestRoad < 6}; + _mine = _MineType createVehicle (getposATL _ClosestRoad); + //_mine = createMine [_MineType,getposATL _ClosestRoad, [], 3]; + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; + } + else + { + //_mine = createMine [_MineType,getposATL _Unit, [], 3]; + _mine = _MineType createVehicle (getposATL _Unit); + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; + }; +}; + +_UnitSide = (side _Unit); + + +if (_mine isEqualTo "") exitWith {}; + +[_mine,_UnitSide] spawn +{ + params ["_Mine","_UnitSide"]; + + _NotSafe = true; + + while {alive _mine && _NotSafe} do + { + + private _Array1 = (allUnits select {!(side _x isEqualTo _UnitSide)}); + private _ClosestEnemy = [0,0,0]; + _ClosestEnemy = [_Array1,_Mine] call VCOMAI_ClosestObject; + if (_ClosestEnemy distance _Mine < 2.5) then {_NotSafe = false;}; + sleep 0.15; + }; + _Mine setdamage 1; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RankAndSkill.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RankAndSkill.sqf new file mode 100644 index 00000000..37b0901d --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RankAndSkill.sqf @@ -0,0 +1,15 @@ +_Unit = _this; + +if (VCOM_AISkillEnabled) then +{ + _RankReturn = [_Unit] call VcomAI_DetermineRank; + switch (_RankReturn) do { + case 0: {[_Unit] call AccuracyFunctionRank0;}; + case 1: { [_Unit] call AccuracyFunctionRank1; }; + case 2: { [_Unit] call AccuracyFunctionRank2; }; + case 3: { [_Unit] call AccuracyFunctionRank3; }; + case 4: { [_Unit] call AccuracyFunctionRank4; }; + case 5: { [_Unit] call AccuracyFunctionRank5; }; + case 6: { [_Unit] call AccuracyFunctionRank6; }; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ReGroup.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ReGroup.sqf new file mode 100644 index 00000000..fd00809e --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ReGroup.sqf @@ -0,0 +1,27 @@ +_GroupUnits = _this select 0; +_Side = _this select 1; + + +_LetsWait = true; +while {_LetsWait} do +{ + + { + if ((count (waypoints (group _x))) > 1) then {_LetsWait = false}; + } foreach _GroupUnits; + sleep 2; +}; + + + +_group = createGroup _Side; + +{ + [_x] joinSilent _group; + _x setVariable ["VCOM_LOITERING",false]; + if (_x isEqualTo (leader _x)) then + { + _x setVariable ["VCOM_FLANKING",false,false]; + }; + _x setVariable ["VCOM_MovedRecently",false,false]; +} foreach _GroupUnits; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmGo.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmGo.sqf new file mode 100644 index 00000000..e8878b10 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmGo.sqf @@ -0,0 +1,12 @@ +//This function is to ensure the AI reaches their ammo objective!!! + +_RAU = _this select 0; +_RL = _this select 1; + +while {(_RAU distance _RL) > 5 && (_RAU distance _RL) < 100} do +{ + _RAU domove (getpos _RL); + sleep 4; +}; + + _RAU action ["rearm", _RL]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmSelf.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmSelf.sqf new file mode 100644 index 00000000..c601c501 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_RearmSelf.sqf @@ -0,0 +1,46 @@ +//This function will determine if an AI is low on ammo and needs to re-arm. +//This script passes _this. _this should be the AI unit. +_AL = VCOM_AIMagLimit; +if (vehicle _this != _this) exitWith {}; + +//The first thing we want to do. Is figure out what ammo this unit is using. +_CM = currentMagazine _this; + +//Now, we want to compare this classname to all the other ammo classnames this unit may have and count the number. +_mags = magazines _this; + +//Count the total number of mags. +_TC = 0; +{ if (_x isEqualTo _CM) then {_TC = _TC + 1} } foreach _mags; + +//If unit has 2 or less, then make the unit find ammo! +if (_TC < _AL) then { + //Find closest men! + _FB = _this nearEntities [["WeaponHolderSimulated", "Man", "Air", "Car", "Motorcycle", "Tank"], 200]; + _FB = _FB - [_this]; + { + if (alive _x && _x isKindOf "Man") then {_FB = _FB - [_x];}; + } foreach _FB; + + //If menz are around see if we can take ammo from them first. + _Stop = false; + if (count _FB != 0) then { + { + _mags = []; + _Unit = _x; + if (_Unit isKindOf "Man") then { + _mags = magazines _Unit; + } else { + _mags = magazineCargo _Unit; + }; + if (isNil "_mags") then {_mags = [];}; + { + if (_x isEqualTo _CM) exitwith { + [_this,_Unit] spawn VCOMAI_RearmGo; + _Stop = true; + }; + } foreach _mags; + if ( _Stop ) exitwith {}; + } foreach _FB; + }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_StanceModifier.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_StanceModifier.sqf new file mode 100644 index 00000000..6d9d99f1 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_StanceModifier.sqf @@ -0,0 +1,24 @@ +//Script will make AI use the proper stances depending on friendlies behind them. +private ["_Counter","_NearestUnit","_Nearobjects","_StanceCompare"]; + +_Counter = 6; +while {_Counter > 0} do +{ + + _BehindUnit = _this modelToWorld [0,-1,0.5]; + _Nearobjects = _BehindUnit nearObjects ["Man",2]; + if (_this in _Nearobjects) then {_Nearobjects = _Nearobjects - [_this]}; + _NearestUnit = [_Nearobjects,_BehindUnit] call VCOMAI_ClosestObject; + if (isNil "_NearestUnit" || {typeName _NearestUnit isEqualTo "ARRAY"}) then {_this setUnitPos "UP";_NearestUnit = _this;}; + if (_NearestUnit isEqualTo _this) then {_this setUnitPos "UP";}; + _StanceCompare = stance _NearestUnit; + if (_StanceCompare isEqualTo "STAND") then {_this setUnitPos "MIDDLE";}; + if (_StanceCompare isEqualTo "CROUCH") then {_this setUnitPos "DOWN";}; + if (_StanceCompare isEqualTo "PRONE") then {_this setUnitPos "UP";}; + if (_StanceCompare isEqualTo "UNDEFINED") then {_this setUnitPos "UP";}; + if (_StanceCompare isEqualTo "") then {_this setUnitPos "UP";}; + _Counter = _Counter - 1; + sleep 10; +}; + +_this setUnitPos "AUTO"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressedEffect.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressedEffect.sqf new file mode 100644 index 00000000..bafc47d2 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressedEffect.sqf @@ -0,0 +1,43 @@ +private ["_DynBlur", "_FlmGr", "_cc"]; + +player setCustomAimCoef VCOM_SuppressionVar; +player spawn {sleep 8; player setCustomAimCoef 1;}; + +if (VCOM_Adrenaline) then +{ + player setAnimSpeedCoef VCOM_AdrenalineVar; + player spawn {sleep 8; _this setAnimSpeedCoef 1;}; +}; + +_DynBlur = ppEffectCreate ["DynamicBlur", 5]; +_DynBlur ppEffectAdjust [0.5]; +_DynBlur ppEffectEnable true; +_DynBlur ppEffectCommit 0; + +_FlmGr = ppEffectCreate ["FilmGrain", 2000]; +_FlmGr ppEffectAdjust [0.1,0.05,1,0.1,0.5,true]; +_FlmGr ppEffectEnable true; +_FlmGr ppEffectCommit 0; + +_cc = ppEffectCreate ["ColorCorrections", 1505]; +_cc ppEffectAdjust [0.2, 1.0, 0.0, [0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1],[2,2,0,0,0,0.25,0.40]]; +_cc ppEffectEnable true; +_cc ppEffectCommit 0.1; + +sleep 5; + +_DynBlur ppEffectAdjust [0]; +_DynBlur ppEffectCommit 5; +_cc ppEffectAdjust [1,1,0,0,0,0,0,1,1,1,1,0,0,0,0]; +_cc ppEffectCommit 5; +_FlmGr ppEffectAdjust [0,0,0,0,0,true]; +_FlmGr ppEffectCommit 0; + +sleep 5; +_FlmGr ppEffectEnable false; +_DynBlur ppEffectEnable false; +_cc ppEffectEnable false; +ppEffectDestroy _FlmGr; +ppEffectDestroy _DynBlur; +ppEffectDestroy _cc; + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressingShots.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressingShots.sqf new file mode 100644 index 00000000..417d19a1 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_SuppressingShots.sqf @@ -0,0 +1,80 @@ +private ["_unit", "_bullet", "_TimeShot","_FrameRateCheck", "_Unit", "_Array2", "_Point", "_ArrayCheck", "_UnitGroup", "_CheckVariable1", "_CheckDistance"]; +//An extra layer of suppression that will hopefully make AI go for cover better... +//If framerate is below 20 - exit this script. +_FrameRateCheck = diag_fps; +if (_FrameRateCheck <= VCOM_FPSFreeze) exitWith {}; + +_unit = (_this select 0) select 0; + +if (VCOM_CurrentlySuppressing < VCOM_CurrentlySuppressingLimit) then +{ + VCOM_CurrentlySuppressing = VCOM_CurrentlySuppressing + 1; + _TimeShot = _unit getVariable "VCOM_FiredTime"; + if ((diag_tickTime - _TimeShot) > 25) then + { + + + + + _unit setVariable ["VCOM_FiredTime",diag_tickTime,true]; + + _pos = cursorTarget; + if (isNull _pos) then + { + if (isPlayer _Unit) then + { + //Remember, screenToWorld is using UI coordinates! + _pos = screenToWorld [0.5,0.5]; + } + else + { + _pos = assignedTarget _Unit; + if (isNull _pos) then {_pos = getPosATL _Unit}; + }; + } + else + { + _pos = getPosATL _pos; + }; + + _Point = _Unit call VCOMAI_ClosestEnemy; + if (_Point isEqualTo [] || {isNil "_Point"}) exitWith {}; + + _ArrayCheck = typeName _Point; + if (_ArrayCheck isEqualTo "ARRAY") exitWith {}; + + _UnitGroup = group _Point; + + + { + _CheckDistance = (_pos distance _x); + _Kn = _unit knowsAbout _x; + if (_CheckDistance < 4 && (_Kn > 3.5)) then + { + if (VCOM_Suppression) then + { + if (isPlayer _x) then {remoteExec ["PSup",_x];} + else + { + _x setCustomAimCoef VCOM_SuppressionVar; + _x spawn {sleep 8; _this setCustomAimCoef 1;}; + }; + }; + if (VCOM_Adrenaline) then + { + _x setAnimSpeedCoef VCOM_AdrenalineVar; + _x spawn {sleep 8; _this setAnimSpeedCoef 1;}; + }; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_x,"I am suppressed!",30,20000] remoteExec ["3DText",0]; + }; + + }; + } forEach units _UnitGroup; + + + + }; + VCOM_CurrentlySuppressing = VCOM_CurrentlySuppressing - 1; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ThrowGrenade.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ThrowGrenade.sqf new file mode 100644 index 00000000..02c31520 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_ThrowGrenade.sqf @@ -0,0 +1,59 @@ +private ["_Unit", "_RandomChance", "_myNearestEnemy", "_VCOM_GRENADETHROWN", "_CheckDistance", "_DirectionSet", "_Directionset"]; + +_Unit = _this select 0; +_VCOM_GRENADETHROWN = _this select 1; + +_RandomChance = (round (random 100)); + +if (_RandomChance < VCOM_GRENADECHANCE) then +{ + +if (isNil "_Unit" || {isNull _Unit}) exitWith {}; + + //systemchat format ["K %1",_Array1]; +_myNearestEnemy = _Unit call VCOMAI_ClosestEnemy; +if (isNil "_myNearestEnemy") exitWith {}; +if (typeName _myNearestEnemy isEqualTo "ARRAY") exitWith {}; + +if !(_VCOM_GRENADETHROWN) then +{ + +_CheckDistance = (_Unit distance _myNearestEnemy); +_cansee = [_Unit, "VIEW"] checkVisibility [eyePos _Unit, eyePos _myNearestEnemy]; + +if (_cansee > 0.5) then +{ + + + + if (_CheckDistance < 60 && {_CheckDistance > 6}) then + { + + _DirectionSet = [_Unit,_myNearestEnemy] call BIS_fnc_dirTo; + _Unit setDir _Directionset; + + _Unit forceWeaponFire ["HandGrenadeMuzzle","HandGrenadeMuzzle"]; + _Unit forceWeaponFire ["MiniGrenadeMuzzle","MiniGrenadeMuzzle"]; + + }; +}; + + +if (_CheckDistance < 5000) then +{ + if (VCOM_USESMOKE) then + { + + + _DirectionSet = [_Unit, _myNearestEnemy] call BIS_fnc_dirTo; + + _Unit setDir _Directionset; + + _Unit forceWeaponFire ["SmokeShellMuzzle","SmokeShellMuzzle"]; + }; + +}; + +}; + +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Save_test/load b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UAVDeploy.sqf similarity index 100% rename from AntistasiOfficial.Altis/Save_test/load rename to AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UAVDeploy.sqf diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStatic.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStatic.sqf new file mode 100644 index 00000000..688708c5 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStatic.sqf @@ -0,0 +1,92 @@ +//This function provides the AI the ability to deploy static weapons, and then tells them when to pack the static weapon up. +//Last edited on: 8/7/2017 @ 1925 + +//_SetDownStatic = [_Unit,_VCOM_HASDEPLOYED] spawn VCOMAI_UnpackStatic; +params ["_Unit","_Vcom_HASDEPLOYED"]; + +private _group = group _Unit; + +private _gunner = false; +private _cansee = 1; + +private _CurrentBackPack = backpack _Unit; +private _class = ""; +if (!(isNil "_CurrentBackPack")) then +{ + _class = [_CurrentBackPack] call VCOMAI_Classvehicle; + if (!(isNil "_class")) then + { + _parents = [_class,true] call BIS_fnc_returnParents; + if (!(isNil "_parents")) then + { + if (("StaticWeapon" in _parents) || {("Weapon_Bag_Base" in _parents)}) then {_Unit setVariable ["VCOM_USEDSTATICWEAP",_CurrentBackPack,false];_gunner = true;}; + }; + }; +}; + + +if !(_gunner) exitWith {}; + +private _myNearestEnemy = _Unit findNearestEnemy (getPosASL _Unit); +//_myNearestEnemy = player; + + +if (isNull _myNearestEnemy) then +{ + _myNearestEnemy = _Unit call VCOMAI_ClosestEnemy; +}; + + +if (_myNearestEnemy isEqualTo []) exitWith {}; + +sleep 0.25; +//_assistant action ["PutBag",_assistant]; + + private _Vcom_Indoor = false; + + //If the unit is in a building, or can see the enemy, we don't want them deploying mortars. + private _cansee = [_Unit, "VIEW"] checkVisibility [eyePos _Unit, eyePos _myNearestEnemy]; + private _Position = getposATL _Unit; + private _Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4]; + { + if (_x isKindof "Building") exitWith {_Vcom_Indoor = true;}; + } foreach _Array; + + if (!(_cansee > 0) || (_Vcom_Indoor)) exitwith {}; + + + //Get assemble to information + private _AssembledG = getText (configfile >> "CfgVehicles" >> _class >> "assembleInfo" >> "assembleTo"); + + + //Play an animation to telegraph creation of a static + [_Unit,"AinvPknlMstpSnonWnonDnon_Putdown_AmovPknlMstpSnonWnonDnon"] remoteExec ["playMoveEverywhere",0]; + sleep 5; + + //Create the static weapon + _StaticCreated = _AssembledG createvehicle [0,0,0]; + _StaticCreated setposATL (getposATL _Unit); + + _weapon = nearestObject [_position,"StaticWeapon"]; + _Unit setVariable ["supportWeaponSetup",_weapon,false]; + + _Unit assignAsGunner _weapon; + [_Unit] orderGetIn true; + _Unit moveInGunner _weapon; + removeBackpackGlobal _Unit; + +_dirTo = [position _weapon,position _myNearestEnemy] call BIS_fnc_dirTo; +_weapon setDir _dirTo; +(Vehicle _Unit) setDir _dirTo; + + +[_Unit,_group] spawn { +_Unit = _this select 0; +_group = _this select 1; +sleep (180 + (random 180)); +if (!(alive _Unit) || {_Unit isEqualTo (Vehicle _Unit)}) exitWith {}; +[_group,_Unit] spawn VCOMAI_PackStatic; +}; + + + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStaticOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStaticOLD.sqf new file mode 100644 index 00000000..f0fac7c3 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_UnpackStaticOLD.sqf @@ -0,0 +1,106 @@ +//This function provides the AI the ability to deploy static weapons, and then tells them when to pack the static weapon up. +//Last edited on: 8/7/2017 @ 1925 + +//_SetDownStatic = [_Unit,_VCOM_HASDEPLOYED] spawn VCOMAI_UnpackStatic; + +private _Unit = _this select 0; +private _VCOM_HASDEPLOYED = _this select 1; + +private _group = group _Unit; + +_gunner = false; +_cansee = 1; +_Vcom_Indoor = false; + +_CurrentBackPack = backpack _Unit; + +if (!(isNil "_CurrentBackPack")) then +{ + _class = [_CurrentBackPack] call VCOMAI_Classvehicle; + if (!(isNil "_class")) then + { + _parents = [_class,true] call BIS_fnc_returnParents; + if (!(isNil "_parents")) then + { + if (("StaticWeapon" in _parents) || {("Weapon_Bag_Base" in _parents)}) then {_Unit setVariable ["VCOM_USEDSTATICWEAP",_CurrentBackPack,false];_gunner = true;}; + }; + }; +}; + + +if !(_gunner) exitWith {}; + +_myNearestEnemy = _Unit findNearestEnemy (getPosASL _Unit); +//_myNearestEnemy = player; + + +if (isNull _myNearestEnemy) then +{ + _myNearestEnemy = _Unit call VCOMAI_ClosestEnemy; +}; + + +if (_myNearestEnemy isEqualTo []) exitWith {}; + +sleep 0.25; +//_assistant action ["PutBag",_assistant]; + + _StaticClassName = _Unit getVariable "VCOM_StaticClassName"; + + _IsMortar = ["Mortar",_StaticClassName,false] call BIS_fnc_inString; + + + if (["grn",_StaticClassName,false] call BIS_fnc_inString) then + { + _WeaponClassname = [_StaticClassName,0,-13] call BIS_fnc_trimString; + } + else + { + _WeaponClassname = [_StaticClassName,0,-9] call BIS_fnc_trimString; + }; + + + if !(_IsMortar) then + { + _WeaponClassname = _WeaponClassname + "_high_F"; + _cansee = [_Unit, "VIEW"] checkVisibility [eyePos _Unit, eyePos _myNearestEnemy]; + } + else + { + _Position = getposATL _Unit; + _Array = lineIntersectsObjs [_Position,[_Position select 0,_Position select 1,(_Position select 2) + 10], objnull, objnull, true, 4]; + { + if (_x isKindof "Building") then {_Vcom_Indoor = true;}; + } foreach _Array; + + _WeaponClassname = _WeaponClassname + "_F"; + }; + + + if (!(_cansee > 0) || (_Vcom_Indoor)) exitwith {}; + _StaticCreated = _WeaponClassname createvehicle [0,0,0]; + _StaticCreated setposATL (getposATL _Unit); + + _weapon = nearestObject [_position,"StaticWeapon"]; + _Unit setVariable ["supportWeaponSetup",_weapon,false]; + + _Unit assignAsGunner _weapon; + [_Unit] orderGetIn true; + _Unit moveInGunner _weapon; + removeBackpackGlobal _Unit; + +_dirTo = [position _weapon,position _myNearestEnemy] call BIS_fnc_dirTo; +_weapon setDir _dirTo; +(Vehicle _Unit) setDir _dirTo; + + +[_Unit,_group] spawn { +_Unit = _this select 0; +_group = _this select 1; +sleep (180 + (random 180)); +if (!(alive _Unit) || {_Unit isEqualTo (Vehicle _Unit)}) exitWith {}; +[_group,_Unit] spawn VCOMAI_PackStatic; +}; + + + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandle.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandle.sqf new file mode 100644 index 00000000..7be6b027 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandle.sqf @@ -0,0 +1,147 @@ +//Created on ??? +// Modified on : 8/19/14 - 8/3/15 - 9/1/15 - 9/9/2017 + +private _Driver = _this select 0; +private _myNearestEnemy = _this select 1; +if (isNil "_myNearestEnemy" || {_myNearestEnemy isEqualTo []}) exitWith {}; + +private _UnitGroup = group _Driver; +private _Vehicle = (vehicle _Driver); + + private _CargoCount = 0; + private _CargoList = []; + + private _VehSeats = fullCrew [_Vehicle,"",false]; + { + //[,"cargo",2,[],false] + if ((_x select 1) isEqualTo "cargo") then + { + _CargoCount = _CargoCount + 1; + _CargoList pushBack (_x select 0); + }; + } foreach _VehSeats; + + + if (_CargoCount > 0) then + { + if ((getPos _Vehicle select 2) < 3 && {(_myNearestEnemy distance _Driver) < 600}) then + { + _Driver disableAI "AUTOTARGET"; + _Driver disableAI "TARGET"; + _Driver disableAI "SUPPRESSION"; + _Driver disableAI "COVER"; + _Vehicle land "GET OUT"; + _Driver land "GET OUT"; + waitUntil {(speed _Vehicle) < 6;}; + _Driver forcespeed 0; _Driver spawn {sleep 8;_this forceSpeed -1;}; + _CargoList allowGetIn false; + _CargoList spawn {sleep 120;_this allowGetIn true;}; + { + private _U = _x; + moveOut _U; + doGetOut _U; + //_x leaveVehicle _Vehicle; + unassignVehicle _U; + sleep 1; + //[_x,false,false,false,false] spawn VCOMAI_MoveToCover; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_U,"Disembark! Scatter!",30,20000] remoteExec ["3DText",0]; + }; + if ((leader _U) isEqualTo _U) then + { + _waypoint2 = (group _U) addwaypoint[_myNearestEnemy,15,150]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + [_U,false,false,false,false] spawn VCOMAI_MoveToCover; + } foreach _CargoList; + _Driver enableAI "AUTOTARGET"; + _Driver enableAI "TARGET"; + _Driver enableAI "SUPPRESSION"; + _Driver enableAI "COVER"; + } + else + { + if ((_myNearestEnemy distance _Driver) < 700) then + { + _Driver disableAI "AUTOTARGET"; + _Driver disableAI "TARGET"; + _Driver disableAI "SUPPRESSION"; + _Driver disableAI "COVER"; + _Vehicle land "GET OUT"; + _Driver land "GET OUT"; + waitUntil {(getPos _Vehicle select 2) < 2.5;}; + waitUntil {(speed _Vehicle) < 6;}; + _Driver forcespeed 0; _Driver spawn {sleep 8;_this forceSpeed -1;}; + _CargoList allowGetIn false; + _CargoList spawn {sleep 120;_this allowGetIn true;}; + { + private _U = _x; + moveOut _U; + doGetOut _U; + //_x leaveVehicle _Vehicle; + unassignVehicle _U; + sleep 1; + //[_x,false,false,false,false] spawn VCOMAI_MoveToCover; + if (VCOM_AIDEBUG isEqualTo 1) then + { + [_U,"Disembark! Scatter!",30,20000] remoteExec ["3DText",0]; + }; + if ((leader _U) isEqualTo _U) then + { + _waypoint2 = (group _U) addwaypoint[_myNearestEnemy,15,150]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + [_U,false,false,false,false] spawn VCOMAI_MoveToCover; + } foreach _CargoList; + _Driver enableAI "AUTOTARGET"; + _Driver enableAI "TARGET"; + _Driver enableAI "SUPPRESSION"; + _Driver enableAI "COVER"; + }; + }; + }; + + + + + + if ((count (units _UnitGroup)) > 1) then + { + [_Driver,false,false,(_Driver getvariable ["VCOMAI_StartedInside",false]),false] spawn VCOMAI_FlankManeuver; + + + _GroupLeader = leader _Driver; + + if (_GroupLeader isEqualTo _Driver) then + { + + _index = currentWaypoint _UnitGroup; + _WPPosition = getWPPos [_UnitGroup,_index]; + _Driver doMove _WPPosition; + + + + } + else + { + + _Driver doFollow _GroupLeader; + + + }; + }; + + if ((count (waypoints _UnitGroup)) < 2) then + { + + _index = currentWaypoint _UnitGroup; + _WPPosition = getWPPos [_UnitGroup,_index]; + _Driver doMove _WPPosition; + + }; + \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandleOLD.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandleOLD.sqf new file mode 100644 index 00000000..d86cebb4 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_VehicleHandleOLD.sqf @@ -0,0 +1,137 @@ + +private ["_Unit", "_myNearestEnemy", "_UnitSide", "_UnitGroup", "_GroupUnits", "_Vehicle", "_CargoList", "_waypoint0", "_ClosestUnit", "_ResetWaypoint","_GroupArray"]; +//Created on ??? +// Modified on : 8/19/14 - 8/3/15 - 9/1/15 + +_Unit = _this select 0; + +_myNearestEnemy = _this select 1; +if (isNil "_myNearestEnemy" || {_myNearestEnemy isEqualTo []}) exitWith {}; + +_UnitSide = side _Unit; + +_UnitGroup = group _Unit; +_GroupUnits = units _UnitGroup; +_Vehicle = (vehicle _Unit); +_CargoList = assignedCargo _Vehicle; + + + + + + + if ((_myNearestEnemy distance _Unit) < 600) then + { + + if !((count _CargoList) isEqualTo 0) then + { + _GroupArray = []; + + + { + if !((group _x) in _GroupArray) then + { + _GroupArray pushback (group _x); + }; + + } foreach _CargoList; + + if ((getPos _Vehicle select 2) < 3) then + { + { + { + + if (!(_x isEqualTo (assignedDriver (vehicle _x))) && {!(_x isEqualTo (assignedGunner (vehicle _x)))} && {!(_x isEqualTo (assignedCommander (vehicle _x)))}) then + { + [_x] orderGetIn false; + (group _x) leaveVehicle (vehicle _x); + unassignVehicle _x; + commandGetOut _x; + //_x action ["eject", _Vehicle]; + (driver _Vehicle) land "GET OUT"; + _Vehicle land "GET OUT"; + + if (leader _x isEqualTo _x) then + { + _waypoint2 = (group _x) addwaypoint[_myNearestEnemy,15]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + + }; + + } foreach units _x; + } foreach _GroupArray; + } + else + { + (driver _Vehicle) land "GET OUT"; + _Vehicle land "GET OUT"; + //waitUntil {(getPos _Vehicle select 2) < 15;}; + //_Vehicle engineOn false; + waitUntil {(getPos _Vehicle select 2) < 2.5;}; + { + { + if (!(_x isEqualTo (assignedDriver (vehicle _x))) && {!(_x isEqualTo (assignedGunner (vehicle _x)))} && {!(_x isEqualTo (assignedCommander (vehicle _x)))}) then + { + [_x] orderGetIn false; + (group _x) leaveVehicle (vehicle _x); + unassignVehicle _x; + commandGetOut _x; + + if (leader _x isEqualTo _x) then + { + _waypoint2 = (group _x) addwaypoint[_myNearestEnemy,15]; + _waypoint2 setwaypointtype "MOVE"; + _waypoint2 setWaypointSpeed "NORMAL"; + _waypoint2 setWaypointBehaviour "AWARE"; + }; + + //_x action ["eject", _Vehicle]; + }; + } foreach units _x; + } foreach _GroupArray; + + }; + }; + }; + +if ((count (waypoints _UnitGroup)) < 2) then +{ + + + if ((count (units _UnitGroup)) > 1) then + { + [_Unit,false,false,_Unit getvariable ["VCOMAI_StartedInside",false],false] spawn VCOMAI_FlankManeuver; + + + _GroupLeader = leader _Unit; + + if (_GroupLeader isEqualTo _Unit) then + { + + _index = currentWaypoint _UnitGroup; + _WPPosition = getWPPos [_UnitGroup,_index]; + _Unit doMove _WPPosition; + + + + } + else + { + + _Unit doFollow _GroupLeader; + + + }; + }; + + + + _index = currentWaypoint _UnitGroup; + _WPPosition = getWPPos [_UnitGroup,_index]; + _Unit doMove _WPPosition; + + +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Waypointcheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Waypointcheck.sqf new file mode 100644 index 00000000..4841ea49 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_Waypointcheck.sqf @@ -0,0 +1,16 @@ +//This will tell our scripts if certain waypoints are set or not +//_WaypointCheck = _group call VCOMAI_Waypointcheck; +_GroupToInspect = _this; + +_WaypointsToIncriminate = []; + +_index = currentWaypoint _GroupToInspect; +_WaypointIs = waypointType [_GroupToInspect,_index]; +{ + if (_WaypointIs isEqualTo _x) then {_WaypointsToIncriminate pushback _x}; +} foreach ["HOLD","GUARD","UNLOAD","LOAD","TR UNLOAD","SENTRY","DESTROY"]; + + + +_WaypointsToIncriminate + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_WepSupCheck.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_WepSupCheck.sqf new file mode 100644 index 00000000..8e4a85d6 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOMAI_WepSupCheck.sqf @@ -0,0 +1,8 @@ +//Created on 8/4/2016: Detecting if a unit has a suppressor or not. +_ItemList = weaponsitems _this; +_Return = true; + +if (((_ItemList select 0) select 1) isEqualTo "") then {_Return = false;}; + + +_Return \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_Erasemarkers.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_Erasemarkers.sqf new file mode 100644 index 00000000..54001fd6 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_Erasemarkers.sqf @@ -0,0 +1,4 @@ +{ + deleteMarker _x; +} foreach MarkerArray; +MarkerArray = []; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMCHANGE.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMCHANGE.sqf new file mode 100644 index 00000000..2b7c9b47 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMCHANGE.sqf @@ -0,0 +1,67 @@ +private _Admin = [] call BIS_fnc_admin; + + +if !(isServer) then +{ + if (!(_Admin isEqualTo 2) && isMultiplayer) exitWith + { + systemChat "You are a logged in admin! You can not make this change."; + + }; +}; + +private _index = lbCurSel 1500; +private _text = lbText [1500, _index]; +systemChat format ["CHANGED VARIABLE: %1",_text]; + +private _typedtext = ctrlText 1400; +private _FinalChange = call compile _typedtext; +private _indexc = 0; +private _VariableToChange = ""; +{ + if (_text isEqualTo (_x select 0)) exitWith {_VariableToChange = _x select 0;_FinalSelect = _x select 2;_ActualVariable = _FinalChange;VCOM_AllSettings set [_indexc,[_VariableToChange,_ActualVariable,_FinalSelect]];}; + _indexc = _indexc + 1; +} foreach VCOM_AllSettings; +publicVariable "VCOM_AllSettings"; + + +switch (_VariableToChange) do { + case "VCOM_AISkillEnabled": {VCOM_AISkillEnabled = _FinalChange;publicVariable "VCOM_AISkillEnabled"}; + case "VCOM_AIConfig": {VCOM_AIConfig = _FinalChange;publicVariable "VCOM_AIConfig"}; + case "VCOM_AIDEBUG": {VCOM_AIDEBUG = _FinalChange;publicVariable "VCOM_AIDEBUG"}; + case "VCOM_UseMarkers": {VCOM_UseMarkers = _FinalChange;publicVariable "VCOM_UseMarkers"}; + case "NOAI_FOR_PLAYERLEADERS": {NOAI_FOR_PLAYERLEADERS = _FinalChange;publicVariable "NOAI_FOR_PLAYERLEADERS"}; + case "VCOM_STATICGARRISON": {VCOM_STATICGARRISON = _FinalChange;publicVariable "VCOM_STATICGARRISON"}; + case "VCOM_HEARINGDISTANCE": {VCOM_HEARINGDISTANCE = _FinalChange;publicVariable "VCOM_HEARINGDISTANCE"}; + case "VCOM_Artillery": {VCOM_Artillery = _FinalChange;publicVariable "VCOM_Artillery"}; + case "VCOM_ArtillerySpread": {VCOM_ArtillerySpread = _FinalChange;publicVariable "VCOM_ArtillerySpread"}; + case "VCOM_ArtilleryCooldown": {VCOM_ArtilleryCooldown = _FinalChange;publicVariable "VCOM_ArtilleryCooldown"}; + case "VCOM_NOPATHING": {VCOM_NOPATHING = _FinalChange;publicVariable "VCOM_NOPATHING"}; + case "VCOM_USESMOKE": {VCOM_USESMOKE = _FinalChange;publicVariable "VCOM_USESMOKE"}; + case "VCOM_GRENADECHANCE": {VCOM_GRENADECHANCE = _FinalChange;publicVariable "VCOM_GRENADECHANCE"}; + case "VCOM_MineLaying": {VCOM_MineLaying = _FinalChange;publicVariable "VCOM_MineLaying"}; + case "VCOM_MineLayChance": {VCOM_MineLayChance = _FinalChange;publicVariable "VCOM_MineLayChance"}; + case "VCOM_AIDisembark": {VCOM_AIDisembark = _FinalChange;publicVariable "VCOM_AIDisembark"}; + case "VCOM_AIMagLimit": {VCOM_AIMagLimit = _FinalChange;publicVariable "VCOM_AIMagLimit"}; + case "VCOM_RainImpact": {VCOM_RainImpact = _FinalChange;publicVariable "VCOM_RainImpact"}; + case "VCOM_RainPercent": {VCOM_RainPercent = _FinalChange;publicVariable "VCOM_RainPercent"}; + case "VCOM_Suppression": {VCOM_Suppression = _FinalChange;publicVariable "VCOM_Suppression"}; + case "VCOM_SuppressionVar": {VCOM_SuppressionVar = _FinalChange;publicVariable "VCOM_SuppressionVar"}; + case "VCOM_Adrenaline": {VCOM_Adrenaline = _FinalChange;publicVariable "VCOM_Adrenaline"}; + case "VCOM_AdrenalineVar": {VCOM_AdrenalineVar = _FinalChange;publicVariable "VCOM_AdrenalineVar"}; + case "VCOM_CurrentlyMovingLimit": {VCOM_CurrentlyMovingLimit = _FinalChange;publicVariable "VCOM_CurrentlyMovingLimit"}; + case "VCOM_CurrentlySuppressingLimit": {VCOM_CurrentlySuppressingLimit = _FinalChange;publicVariable "VCOM_CurrentlySuppressingLimit"}; + case "VCOM_DisableDistance": {VCOM_DisableDistance = _FinalChange;publicVariable "VCOM_DisableDistance"}; + case "VCOM_BasicCheckLimit": {VCOM_BasicCheckLimit = _FinalChange;publicVariable "VCOM_BasicCheckLimit"}; + case "VCOM_LeaderExecuteLimit": {VCOM_LeaderExecuteLimit = _FinalChange;publicVariable "VCOM_LeaderExecuteLimit"}; + case "VCOM_FPSFreeze": {VCOM_FPSFreeze = _FinalChange;publicVariable "VCOM_FPSFreeze"}; + case "VCOM_VehicleUse": {VCOM_VehicleUse = _FinalChange;publicVariable "VCOM_VehicleUse"}; + case "VCOM_IRLaser": {VCOM_IRLaser = _FinalChange;publicVariable "VCOM_IRLaser"}; + case "VCOM_IncreasingAccuracy": {VCOM_IncreasingAccuracy = _FinalChange;publicVariable "VCOM_IncreasingAccuracy"}; + case "VCOM_SideBasedMovement": {VCOM_SideBasedMovement = _FinalChange;publicVariable "VCOM_SideBasedMovement"}; + case "VCOM_SideBasedExecution": {VCOM_SideBasedExecution = _FinalChange;publicVariable "VCOM_SideBasedExecution"}; + case "VCOM_Unit_AIWarnDistance": {VCOM_Unit_AIWarnDistance = _FinalChange;publicVariable "VCOM_Unit_AIWarnDistance"}; + case "VCOM_WaypointDistance": {VCOM_WaypointDistance = _FinalChange;publicVariable "VCOM_WaypointDistance"}; + case "VCOM_SIDESPECIFIC": {VCOM_SIDESPECIFIC = _FinalChange;publicVariable "VCOM_SIDESPECIFIC"}; + case "VCOM_CLASSNAMESPECIFIC": {VCOM_CLASSNAMESPECIFIC = _FinalChange;publicVariable "VCOM_CLASSNAMESPECIFIC"}; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMSOPTIONS.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMSOPTIONS.sqf new file mode 100644 index 00000000..a5d1a068 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VCOM_PARAMSOPTIONS.sqf @@ -0,0 +1,25 @@ +//Lets open dat dialog! +(finddisplay 49) closedisplay 1; +closeDialog 5230; + +createDialog "VCOM_PARAMS"; + +((findDisplay (7123)) displayCtrl 1200) ctrlSetText "VcomAI\Background.paa"; + +lbClear 1500; +{ + lbAdd [1500,(_x select 0)]; +} foreach VCOM_AllSettings; + + +_DI = "SELECT A PARAM TO GET ITS DESCRIPTION"; +((findDisplay 7123) displayCtrl (27201)) ctrlSetPosition [0,0]; +((findDisplay 7123) displayCtrl (27201)) ctrlCommit 0; +((findDisplay 7123) displayCtrl (27201)) ctrlSetStructuredText (parseText format ["%1",_DI]); + + +_display = (findDisplay 7123) displayCtrl 1500; +_display ctrlSetEventHandler ["LBSelChanged","[_this select 0,_this select 1] call dis_PARAMSLBChangedMM"]; + + + diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DefaultSetup.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DefaultSetup.sqf new file mode 100644 index 00000000..8188f648 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DefaultSetup.sqf @@ -0,0 +1,57 @@ +//This sets all the default settings for the AI +_Unit = _this select 0; + +_Unit addEventHandler ["Killed",{_this call VCOMAI_ClosestAllyWarn;}]; +_Unit addEventHandler ["Fired",{[_this] call VCOMAI_SuppressingShots;}]; +_Unit addEventHandler ["Fired",{[_this] call VCOMAI_HearingAids;}]; +_Unit addEventHandler ["Hit",{_this call VCOMAI_AiHit;}]; + + +_Unit setVariable ["VCOM_CHANGEDFORMATION",false,false]; +_Unit setVariable ["VCOM_MOVINGTOSUPPORT",false,false]; +_Unit setVariable ["VCOM_GARRISONED",false,false]; +_Unit setVariable ["VCOM_SubLeader",false,false]; +_Unit setVariable ["VCOM_GroupLeader",false,false]; +_Unit setVariable ["VCOM_FLANKING",false,false]; +_Unit setVariable ["VCOM_MovedRecently",false,false]; +_Unit setVariable ["VCOM_MovedRecentlyCover",false,false]; +_Unit setVariable ["VCOM_GRENADETHROWN",false,false]; +_Unit setVariable ["VCOM_FiredTime",diag_ticktime,false]; +_Unit setVariable ["VCOM_FiredTimeHearing",diag_ticktime,false]; +_Unit setVariable ["VCOM_Suppressed",false,false]; +_Unit setVariable ["VCOM_HASDEPLOYED",false,false]; +_Unit setVariable ["VCOM_HASSTATIC",false,false]; +_Unit setVariable ["VCOM_DiagLastCheck",diag_ticktime,false]; +_Unit setVariable ["VCOM_HASSATCHEL",false,false]; +_Unit setVariable ["VCOM_SATCHELRECENTLY",false,false]; +_Unit setVariable ["VCOM_CALLEDARTILLERY",false,false]; +_Unit setVariable ["VCOM_ISARTILLERY",false,false]; +_Unit setVariable ["VCOM_AssignedEnemy",[0,0,0],false]; +_Unit setVariable ["Vcom_MineObject",[],false]; +_Unit setVariable ["VCOM_HasMine",false,false]; +_Unit setVariable ["VCOM_PlantedMineRecently",false,false]; +_Unit setVariable ["VCOMAI_ShotsFired",false,true]; +_Unit setVariable ["VCOM_InCover",false,false]; +_Unit setVariable ["VCOMAI_StaticNearby",false,false]; +_Unit setVariable ["VCOM_VisuallyCanSee",false,false]; +_Unit setVariable ["VCOM_HASUAV",false,false]; +_Unit setVariable ["VCOMAI_ActivelyClearing",false,false]; +_Unit setVariable ["VCOMAI_StartedInside",false,false]; +_Unit setVariable ["VCOMAI_LastCStance",(behaviour _Unit),false]; +_Unit setVariable ["VCOM_Unit_AIWarnDistance",VCOM_Unit_AIWarnDistance,false]; + + +//Allow fleeing 1 forces the AI to RUN. Turning this to 0 makes them brave and stuff. Will have to use this somehow. +//_Unit allowfleeing 1; + +//Should the AI run to support friendlies? +if (VCOM_NOPATHING) then +{ + _VariableCheck1 = _Unit getvariable "VCOM_NOPATHING_Unit"; + if (isNil "_VariableCheck1") then {_Unit setVariable ["VCOM_NOPATHING_Unit",true,false];}; +} +else +{ + _VariableCheck1 = _Unit getvariable "VCOM_NOPATHING_Unit"; + if (isNil "_VariableCheck1") then {_Unit setVariable ["VCOM_NOPATHING_Unit",false,false];}; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DetermineRank.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DetermineRank.sqf new file mode 100644 index 00000000..6eee7789 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_DetermineRank.sqf @@ -0,0 +1,9 @@ +//Created on 8/14/14 +// Modified on : + +//This function is to simply determine a units rank and return it. +_Unit = _this select 0; + +_IdRank = rankId _Unit; + +_IdRank \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_FormationChange.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_FormationChange.sqf new file mode 100644 index 00000000..77cb6c7a --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_FormationChange.sqf @@ -0,0 +1,104 @@ +private ["_Unit", "_nearestCity", "_locationPos", "_nearestVillage", "_locationPos2", "_nearestHill", "_locationPos4", "_nearestLocal", "_locationPos3"]; + +//Pull the unit +_Unit = _this select 0; +_VariableCheck = _this select 1; + +//Check if the leader changed formation 10 seconds ago already. If so, exit the script +if (_VariableCheck) exitWith {}; + +//Grab the group of the unit +_group = group _Unit; + +//Grab the nearest "City" from the unit +_nearestCity = nearestLocation [getPosASL _Unit, "nameCity"]; + +//Lets grab the location position +_locationPos = locationPosition _nearestCity; + +//If the unit is less than 500 meters from the location exit with the following code +if ((_locationPos distance _Unit) < 500) exitWith +{ + + //Check if the unit is in a vehicle or not + if ((vehicle _Unit) != _Unit) then + { + _group setFormation "COLUMN"; + } + else + { + _group setFormation "STAG COLUMN"; + }; + + //Set the units variable so they dont try changing formations too frequently. + _VCOM_CHANGEDFORMATION = true; + _VCOM_CHANGEDFORMATION + +}; + +//The rest of the commands follow the same logic. Commenting where necessary. +_nearestVillage = nearestLocation [getPosASL _Unit, "NameVillage"]; +_locationPos2 = locationPosition _nearestVillage; + +if ((_locationPos2 distance _Unit) < 500) exitWith +{ + if ((vehicle _Unit) != _Unit) then + { + _group setFormation "COLUMN"; + } + else + { + _group setFormation "STAG COLUMN"; + }; + + _VCOM_CHANGEDFORMATION = true; + _VCOM_CHANGEDFORMATION + +}; + + +_nearestHill = nearestLocation [getPosASL _Unit, "Hill"]; +_locationPos4 = locationPosition _nearestHill; + +if ((_locationPos4 distance _Unit) < 500) exitWith +{ + if ((vehicle _Unit) != _Unit) then + { + _group setFormation "LINE"; + } + else + { + _group setFormation "LINE"; + }; + + _VCOM_CHANGEDFORMATION = true; + _VCOM_CHANGEDFORMATION + +}; + + +_nearestLocal = nearestLocation [getPosASL _Unit, "NameLocal"]; +_locationPos3 = locationPosition _nearestLocal; + +if ((_locationPos3 distance _Unit) < 300) exitWith +{ + if ((vehicle _Unit) != _Unit) then + { + _group setFormation "COLUMN"; + } + else + { + _group setFormation "COLUMN"; + }; + + _VCOM_CHANGEDFORMATION = true; + _VCOM_CHANGEDFORMATION +}; + + +//Execute this code only when all the above were NOT true. Return to wedge formation +_group setFormation "WEDGE"; + +_VCOM_CHANGEDFORMATION = true; + +_VCOM_CHANGEDFORMATION diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_QueueHandle.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_QueueHandle.sqf new file mode 100644 index 00000000..099fd695 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_QueueHandle.sqf @@ -0,0 +1,34 @@ +while {true} do +{ + sleep 0.25; + //systemchat format ["VcomAI_UnitQueue: %1",VcomAI_UnitQueue]; + if !(VcomAI_UnitQueue isEqualTo []) then + { + private _ConsideringUnit = VcomAI_UnitQueue select 0; + private _Disabled = _ConsideringUnit getVariable ["VCOM_NOAI",false]; + if ((vehicle _ConsideringUnit) isKindOf "Plane") then {_Disabled = true;_ConsideringUnit setvariable ["VCOM_NOAI",true];}; + if (!(isNull _ConsideringUnit) && !(_Disabled)) then + { + if (side _ConsideringUnit in VCOM_SideBasedExecution) then + { + [_ConsideringUnit] execFSM "VCOMAI\AIBEHAVIORNEW.fsm"; + }; + VcomAI_ActiveList pushback _ConsideringUnit; + VcomAI_UnitQueue deleteAt 0; + } + else + { + VcomAI_UnitQueue deleteAt 0; + }; + + + { + if (isNull _x) then {VcomAI_ActiveList = VcomAI_ActiveList - [_x];}; + } foreach VcomAI_ActiveList; + }; + + + //systemchat format ["VcomAI_ActiveList: %1",VcomAI_ActiveList]; + + +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_UnitInit.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_UnitInit.sqf new file mode 100644 index 00000000..6ac6138c --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/VcomAI_UnitInit.sqf @@ -0,0 +1,94 @@ +_Unit = _this select 0; + +/* +if (VCOM_AIDEBUG isEqualTo 1) then +{ + [_Unit] spawn + { + _Unit = _this select 0; + while {alive _Unit} do + { + sleep 0.25; + if (_Unit isEqualTo (vehicle _Unit)) then + { + if ((side _Unit) isEqualTo EAST) then + { + _arrow = "Sign_Arrow_Direction_F" createVehicle [0,0,0]; + + [_arrow] spawn + { + _arrow = _this select 0; + sleep 10; + deletevehicle _arrow; + MarkerArray = MarkerArray - [_arrow]; + }; + + _arrow setPosASL (eyePos _Unit); + _arrow setDir (getDir _Unit); + MarkerArray = MarkerArray + [_arrow]; + }; + if ((side _Unit) isEqualTo WEST) then + { + _arrow = "Sign_Arrow_Direction_Blue_F" createVehicle [0,0,0]; + + [_arrow] spawn + { + _arrow = _this select 0; + sleep 10; + deletevehicle _arrow; + MarkerArray = MarkerArray - [_arrow]; + }; + + + _arrow setPosASL (eyePos _Unit); + _arrow setDir (getDir _Unit); + MarkerArray = MarkerArray + [_arrow]; + }; + if ((side _Unit) isEqualTo RESISTANCE) then + { + _arrow = "Sign_Arrow_Direction_Blue_F" createVehicle [0,0,0]; + + [_arrow] spawn + { + _arrow = _this select 0; + sleep 10; + deletevehicle _arrow; + MarkerArray = MarkerArray - [_arrow]; + }; + + + _arrow setPosASL (eyePos _Unit); + _arrow setDir (getDir _Unit); + MarkerArray = MarkerArray + [_arrow]; + }; + }; + }; + _arrow = "Sign_Arrow_Pink_F" createVehicle [0,0,0]; + + [_arrow] spawn + { + _arrow = _this select 0; + sleep 10; + deletevehicle _arrow; + MarkerArray = MarkerArray - [_arrow]; + }; + + + _arrow setPosASL (eyePos _Unit); + _arrow setDir (getDir _Unit); + MarkerArray = MarkerArray + [_arrow]; + }; +}; +*/ + +_Player = false; +if (isPlayer _Unit) then {_Player = true;}; + +//Determine if this AI should even execute new code +_UseAI = _Unit getVariable ["VCOM_NOAI",false]; +if (isNil ("_UseAI")) then +{ + _UseAI = false; +}; +_Passarray = [_UseAI,_Player]; +_Passarray \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/functions/dis_PARAMSLBChangedMM.sqf b/AntistasiOfficial.Altis/VCOMAI/functions/dis_PARAMSLBChangedMM.sqf new file mode 100644 index 00000000..00d92b63 --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/functions/dis_PARAMSLBChangedMM.sqf @@ -0,0 +1,15 @@ +_Line1 = _this select 0; //Dialog Control Number +_index = _this select 1; //Index number +_text = lbText [1500, _index]; +_FinalSelect = ""; +_ActualVariable = "NIL"; + +{ + if (_text isEqualTo (_x select 0)) exitWith {_FinalSelect = _x select 2;_ActualVariable = _x select 1;}; +} foreach VCOM_AllSettings; + +((findDisplay 7123) displayCtrl (27201)) ctrlSetPosition [0,0]; +((findDisplay 7123) displayCtrl (27201)) ctrlCommit 0; +((findDisplay 7123) displayCtrl (27201)) ctrlSetStructuredText (parseText format ["%1",_FinalSelect]); + +ctrlSetText [1400,str _ActualVariable]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/VCOMAI/init.sqf b/AntistasiOfficial.Altis/VCOMAI/init.sqf new file mode 100644 index 00000000..cb5bfc9f --- /dev/null +++ b/AntistasiOfficial.Altis/VCOMAI/init.sqf @@ -0,0 +1,164 @@ +//Parameters +PublicScript = compileFinal "[] call (_this select 0);"; +ServerAsk = compileFinal "if (isServer) then {publicvariable (_this select 0);};"; + +if (isServer) then +{ + if (isFilePatchingEnabled) then + { + private _Filecheck = loadFile "\userconfig\VCOM_AI\AISettingsV2.hpp"; + + if !(_FileCheck isEqualTo "") then + { + VCOMAI_Func = compile preprocessFileLineNumbers "\userconfig\VCOM_AI\AISettingsV2.hpp"; + [] call VCOMAI_Func; + [VCOMAI_Func] remoteExec ["PublicScript",0,false]; + } + else + { + VCOMAI_Func = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DefaultSettings.sqf"; + [] call VCOMAI_Func; + [VCOMAI_Func] remoteExec ["PublicScript",0,false]; + }; + } + else + { + VCOMAI_Func = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DefaultSettings.sqf"; + [] call VCOMAI_Func; + [VCOMAI_Func] remoteExec ["PublicScript",0,false]; + }; +} +else +{ + ["VCOMAI_Func"] remoteExec ["ServerAsk",0,false]; + waitUntil {!(isNil "VCOMAI_Func")}; + [] call VCOMAI_Func; +}; + +waitUntil {!(isNil "VCOM_SideBasedExecution")}; + +//Compile all scripts that might be used +VcomAI_UnitInit = compile preprocessFileLineNumbers "VCOMAI\Functions\VcomAI_UnitInit.sqf"; +VCOMAI_DetermineLeader = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DetermineLeader.sqf"; +VcomAI_QueueHandle = compile preprocessFileLineNumbers "VCOMAI\Functions\VcomAI_QueueHandle.sqf"; +VcomAI_DetermineRank = compile preprocessFileLineNumbers "VCOMAI\Functions\VcomAI_DetermineRank.sqf"; +VcomAI_FormationChange = compile preprocessFileLineNumbers "VCOMAI\Functions\VcomAI_FormationChange.sqf"; +VCOMAI_DriverCheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DriverCheck.sqf"; +VCOMAI_ClosestAllyWarn = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ClosestAllyWarn.sqf"; +VCOMAI_ClosestEnemy = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ClosestEnemy.sqf"; +VCOMAI_MoveToCover = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_MoveToCover.sqf"; +VCOMAI_FlankManeuver = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_FlankManeuver.sqf"; +VCOMAI_MoveInCombat = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_MoveInCombat.sqf"; +VCOMAI_ThrowGrenade = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ThrowGrenade.sqf"; +VCOMAI_Garrison = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_Garrison.sqf"; +VCOMAI_SuppressingShots = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_SuppressingShots.sqf"; +VCOMAI_HearingAids = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_HearingAids.sqf"; +VCOMAI_LightGarrison = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_LightGarrison.sqf"; +VCOMAI_CheckBag = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_CheckBag.sqf"; +VCOMAI_HasMine = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_HasMine.sqf"; +VCOMAI_Classvehicle = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_Classvehicle.sqf"; +VCOMAI_UnpackStatic = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_UnpackStatic.sqf"; +VCOMAI_PackStatic = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_PackStatic.sqf"; +VCOMAI_DestroyBuilding = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DestroyBuilding.sqf"; +VCOMAI_ArtilleryCalled = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ArtilleryCalled.sqf"; +VCOMAI_Artillery = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_Artillery.sqf"; +VCOMAI_RankAndSkill = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_RankAndSkill.sqf"; +VCOMAI_FocusedAccuracy = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_FocusedAccuracy.sqf"; +VCOMAI_ArmEmptyStatic = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ArmEmptyStatic.sqf"; +VCOMAI_AIHit = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_AIHit.sqf"; +VCOMAI_PlaceMine = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_PlaceMine.sqf"; +VCOMAI_MapMarkers = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_MapMarkers.sqf"; +VCOM_EraseMarkers = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOM_EraseMarkers.sqf"; +VCOMAI_EnemyArray = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_EnemyArray.sqf"; +VCOMAI_FriendlyArray = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_FriendlyArray.sqf"; +VCOMAI_CheckStatic = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_CheckStatic.sqf"; +VCOMAI_DeployUAV = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DeployUAV.sqf"; +VCOMAI_VehicleHandle = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_VehicleHandle.sqf"; +VCOMAI_GarrisonClear = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_GarrisonClear.sqf"; +VCOMAI_BuildingCheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_BuildingCheck.sqf"; +VCOMAI_GarrisonClearPatrol = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_GarrisonClearPatrol.sqf"; +VCOMAI_StanceModifier = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_StanceModifier.sqf"; +VCOMAI_BuildingSpawnCheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_BuildingSpawnCheck.sqf"; +VCOMAI_CombatMode = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_CombatMode.sqf"; +VCOMAI_ReGroup = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ReGroup.sqf"; +VCOMAI_ClosestObject = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_Closestobject.sqf"; +VCOMAI_GroupLoiter = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_GroupLoiter.sqf"; +VCOMAI_LoiterAction = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_LoiterAction.sqf"; +VCOMAI_FragmentMove = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_FragmentMove.sqf"; +VCOMAI_FindCoverPos = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_FindCoverPos.sqf"; +VCOMAI_Waypointcheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_Waypointcheck.sqf"; +VCOMAI_WepSupCheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_WepSupCheck.sqf"; +VCOMAI_ForceHeal = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_ForceHeal.sqf"; +VCOMAI_DebugText = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_DebugText.sqf"; +VCOMAI_RearmSelf = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_RearmSelf.sqf"; +VCOMAI_RearmGo = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_RearmGo.sqf"; +VCOMAI_SuppressedEffect = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_SuppressedEffect.sqf"; +VCOMAI_IRCheck = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_IRCheck.sqf"; +VCOMAI_EditMenuInit = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOMAI_EditMenuInit.sqf"; +VCOM_PARAMSOPTIONS = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOM_PARAMSOPTIONS.sqf"; +dis_PARAMSLBChangedMM = compile preprocessFileLineNumbers "VCOMAI\Functions\dis_PARAMSLBChangedMM.sqf"; +VCOM_PARAMCHANGE = compile preprocessFileLineNumbers "VCOMAI\Functions\VCOM_PARAMCHANGE.sqf"; + +//Danger FSM +VCOMAI_RecentEnemyDetected = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_RecentEnemyDetected.sqf"; +VCOMAI_CurrentStance = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_CurrentStance.sqf"; +VCOMAI_SetCombatStance = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_SetCombatStance.sqf"; +VCOMAI_MoveToCoverGroup = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_MoveToCoverGroup.sqf"; +VCOMAI_DeadBodyDetection = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_DeadBodyDetection.sqf"; +VCOMAI_CombatMovement = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_CombatMovement.sqf"; +VCOMAI_Explosiondetection = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_Explosiondetection.sqf"; +VCOMAI_VehicleHandleDanger = compile preprocessFileLineNumbers "VCOMAI\functions\DangerCauses\VCOMAI_VehicleHandle.sqf"; + +//Mod checks +//ACE CHECK +if (isClass(configFile >> "CfgPatches" >> "ace_main")) then {ACEACTIVATED = true;} else {ACEACTIVATED = false;}; + +//Global actions compiles +playMoveEverywhere = compileFinal "(_this select 0) playMoveNow (_this select 1);"; +switchMoveEverywhere = compileFinal "(_this select 0) switchMove (_this select 1);"; +playActionNowEverywhere = compileFinal "(_this select 0) playActionNow (_this select 1);"; +DisableCollisionALL = compileFinal "(_this select 0) disableCollisionWith player"; +3DText = compile "[_this select 0,_this select 1,_this select 2,_this select 3] call VCOMAI_DebugText;"; +PSup = compile "[] spawn VCOMAI_SuppressedEffect;"; + +//Below is loop to check for new AI spawning in to be added to the list +if !(isDedicated) then +{ + waitUntil {!isNil "BIS_fnc_init"}; + waitUntil {!(isnull (findDisplay 46))}; +}; + + +//Lets gets the queue handler going +[] spawn VcomAI_QueueHandle; +[] spawn VCOMAI_EditMenuInit; + +VcomAI_UnitQueue = []; +VcomAI_ActiveList = []; +Vcom_ActivateAI = true; +VCOM_CurrentlyMoving = 0; +VCOM_CurrentlySuppressing = 0; +VCOM_BasicCheckCurrent = 0; +VCOM_LeaderExecuteCurrent = 0; + + +while {true} do +{ + if (Vcom_ActivateAI) then + { + { + if (local _x && {simulationEnabled _x}) then + { + if (!(_x in VcomAI_ActiveList) && {!(_x in VcomAI_UnitQueue)}) then + { + VcomAI_UnitQueue pushback _x; + }; + }; + } forEach allUnits; + }; + sleep 10; +}; + + + +//null = [_x] execFSM "\VCOM_AI\AIBEHAVIORNEW.fsm"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/aceSettings.hpp b/AntistasiOfficial.Altis/aceSettings.hpp index dcee3062..87b69e7d 100644 --- a/AntistasiOfficial.Altis/aceSettings.hpp +++ b/AntistasiOfficial.Altis/aceSettings.hpp @@ -1,56 +1,56 @@ - +//TODO To be decommissioned class ace_medical_level { - title = "ACE: Medical Level"; + title = $STR_ACE_MEDICAL_LEVEL; ACE_setting = 1; values[] = {1, 2}; - texts[] = {"Basic", "Advanced"}; + texts[] = {$STR_ACE_SELECT_BASIC, $STR_ACE_SELECT_ADVANCED}; default = 1; typeName = "SCALAR"; force = 0; }; class ace_interaction_enableTeamManagement { - title = "ACE: Enable Team Management"; + title = $STR_ACE_ENABLE_TEAM_MANAGEMENT; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "BOOL"; force = 1; }; class ace_missileguidance_enabled { - title = "ACE: Launchers"; + title = $STR_ACE_LAUNCHERS; ACE_setting = 1; values[] = {0,1,2}; - texts[] = {"Off","On", "Not quite sure"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON, "ACE"}; default = 2; typeName = "SCALAR"; force = 1; }; - + class ace_map_BFT_HideAiGroups { - title = "ACE: Hide AI groups on map?"; + title = $STR_ACE_HIDE_AI_GROUPS_ON_MAP; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_map_BFT_ShowPlayerNames { - title = "ACE: Show player names map?"; + title = $STR_ACE_SHOW_PLAYER_NAMES_MAP; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_map_defaultChannel { - title = "ACE: Map default channel"; + title = $STR_ACE_MAP_DEFAULT_CHANNEL; ACE_setting = 1; values[] = {0,5}; texts[] = {"0","5"}; @@ -60,27 +60,27 @@ }; class ace_medical_increaseTrainingInLocations { - title = "ACE: Locations boost medical training?"; + title = $STR_ACE_LOCATIONS_BOOST_MEDICAL_TRAINING; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_medical_enableRevive { - title = "ACE: Medical, enable revive?"; + title = $STR_ACE_MEDICAL_E_REV; ACE_setting = 1; - values[] = {0,2}; - texts[] = {"0","2"}; + values[] = {0,1,2}; + texts[] = {$STR_ACE_SELECT_NO,$STR_ACE_SELECT_PLAYERS,$STR_ACE_SELECT_PLSANDBS}; default = 2; typeName = "SCALAR"; force = 1; }; class ace_medical_maxReviveTime { - title = "ACE: Max revive time?"; + title = $STR_ACE_MAN_RT; ACE_setting = 1; values[] = {0,150,300}; texts[] = {"0","150","300"}; @@ -90,7 +90,7 @@ }; class ace_medical_litterCleanUpDelay { - title = "ACE: Medical, clean up litter delay?"; + title = $STR_ACE_MEDICAL_CLEAN_ULD; ACE_setting = 1; values[] = {0,300, 600}; texts[] = {"0","300","600"}; @@ -100,67 +100,67 @@ }; class ace_medical_medicSetting_basicEpi { - title = "ACE: Full heal on epi injection restricted to medic?"; + title = $STR_ACE_FULL_HEAL_OEIRTM; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "SCALAR"; force = 1; }; class ace_microdagr_mapDataAvailable { - title = "ACE: MicroDAGR map fill"; + title = $STR_ACE_MDAGR_MF; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "SCALAR"; force = 1; }; class ace_repair_repairDamageThreshold_engineer { - title = "ACE: How much damage can an engineer repair?"; + title = $STR_ACE_HOW_MDCAER; ACE_setting = 1; values[] = {0,0.5,1}; - texts[] = {"0","Half","Full"}; + texts[] = {"0",$STR_ACE_SELECT_HALF,$STR_ACE_SELECT_FULL}; default = 1; typeName = "SCALAR"; force = 1; }; class ace_repair_fullRepairLocation { - title = "ACE: Full repair locations?"; + title = $STR_ACE_FULL_RL; ACE_setting = 1; values[] = {0,3}; - texts[] = {"Anywhere","Repair Facility"}; + texts[] = {$STR_ACE_SELECT_ANYW,$STR_ACE_SELECT_RF}; default = 3; typeName = "SCALAR"; force = 1; }; class ace_repair_engineerSetting_fullRepair { - title = "ACE: Who can perform a full repair?"; + title = $STR_ACE_WHO_CPEAFR; ACE_setting = 1; - values[] = {0,1,2}; - texts[] = {"Anybody","Engineers","Repair Specialists"}; + values[] = {0,1}; + texts[] = {$STR_ACE_SELECT_ANYB,$STR_ACE_SELECT_ENGS}; default = 1; typeName = "SCALAR"; force = 1; }; class ace_advanced_fatigue_enabled { - title = "ACE: Advanced Fatigue"; + title = $STR_ACE_ADVANCED_FATIQUE; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "BOOL"; force = 1; }; class ace_advanced_fatigue_performanceFactor { - title = "ACE: Advanced Fatigue performance factor"; + title = $STR_ACE_ADVANCED_FATIQUE_PF; ACE_setting = 1; values[] = {0,1.5}; texts[] = {"0","1.5"}; @@ -170,7 +170,7 @@ }; class ace_advanced_fatigue_recoveryFactor { - title = "ACE: Advanced Fatigue recovery factor"; + title = $STR_ACE_ADVANCED_FATIQUE_RF; ACE_setting = 1; values[] = {0,1.5}; texts[] = {"0","1.5"}; @@ -180,7 +180,7 @@ }; class ace_advanced_fatigue_terrainGradientFactor { - title = "ACE: Advanced Fatigue terrain gradient factor"; + title = $STR_ACE_ADVANCED_FATIQUE_TGF; ACE_setting = 1; values[] = {0,0.6}; texts[] = {"0","0.6"}; @@ -190,37 +190,37 @@ }; class ace_explosives_explodeOnDefuse { - title = "ACE: Explosives explode on defusal?"; + title = $STR_ACE_EXP_EOD; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "BOOL"; force = 1; }; class ace_advanced_ballistics_enabled { - title = "ACE: Advanced ballistics?"; + title = $STR_ACE_AD_BAL; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_advanced_ballistics_disabledInFullAutoMode { - title = "ACE: Disable Advanced Ballistics in full auto?"; + title = $STR_ACE_DISABLE_AD_BIFA; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_advanced_ballistics_simulationRadius { - title = "ACE: Advanced ballistics simulation radius"; + title = $STR_ACE_AD_BSR; ACE_setting = 1; values[] = {0,1500}; texts[] = {"0","1500"}; @@ -230,20 +230,20 @@ }; class ace_map_mapIllumination { - title = "ACE: Map Illumination"; + title = $STR_ACE_ML; ACE_setting = 1; values[] = {0,1}; - texts[] = {"Deactivated","Activated"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; class ace_repair_wheelRepairRequiredItems { - title = "ACE: Wheel repair requires toolkit"; + title = $STR_ACE_WHEEL_RRT; ACE_setting = 1; values[] = {0,1}; - texts[] = {"None","Toolkit"}; + texts[] = {$STR_ACE_SELECT_NONE,$STR_ACE_SELECT_TOOL}; default = 1; typeName = "SCALAR"; force = 1; diff --git a/AntistasiOfficial.Altis/briefing.sqf b/AntistasiOfficial.Altis/briefing.sqf index 9323b080..e9561270 100644 --- a/AntistasiOfficial.Altis/briefing.sqf +++ b/AntistasiOfficial.Altis/briefing.sqf @@ -2,508 +2,72 @@ waitUntil {!isNull player}; //Briefing - records order is reversed in game -player createDiaryRecord ["Diary",["8 Credits and Thanks"," -Author: Barbolani
-Coding from version 1.2: Chris -Coding from version 1.7.6: Jeroen and Sparker

+player createDiaryRecord ["Diary",[localize "STR_BR_8CNT",localize "STR_BR_8CNT_T"]]; -Scripts:
-UPSMon by Monsada, Kronzy and Cool=Azroul13
-Jeroen Arsenal System by Jeroen Not.
-Jeroen Garage System by Jeroen Not.
-Persistent Save by zooloo75.
-Tags by Marker and Melbo.
-Advanced Towing by duda
-iniDIBI2 by code34

+player createDiaryRecord ["Diary",[localize "STR_BR_6COMPMOD",localize "STR_BR_6CP"]]; -Briefing by Stef, Dethleffs, Fireman, everyone of the Official Community who add suggestions and corrections +player createDiaryRecord ["Diary",[localize "STR_BR_5ANTOPT",localize "STR_BR_5AO"]]; -nuker: For testing and ideas.
-Ghost: For MP DS testing and teaching me how to run a DS.
-Nirvana and CWW clan for testing.
-LanCommi on dedi server testing.
-neuron: lots of testing and help in steam page.
-Gillaustio and Farooq for inspirational works on revive system.
-Valtas: support, testing bug reports and building the first serious open Dedi for Antistasi.
-Goon and jw custom: part of the code for the NAPALM script.
-Larrow: very valuable scripting help in BIS forums.
-Billw: lots of help on testing and bug detection.
-tommytom73: HC testing.
-Manko: earplug snippet.
-harmdhast: help on some scripting.
-DeathTouchWilly: first Official Antistasi Manual.
-daveallen10: ACE Integration scripts.
-x RickyTan x: tons of help and testing in the Official Servers, Head of Antistasi Official Community since March 2016 ‘till June 2017 and making the community more financially aware.
-Toshi: Antistasi porting on other islands.
-Ken and Tuck for templates.
-And all those players who spend their time on making comments, suggestions and reports on Steam and Antistasi Official Community."]]; +player createDiaryRecord ["Diary",[localize "STR_BR_4GAMED",localize "STR_BR_4GD"]]; -player createDiaryRecord ["Diary",["6 Compatible mods"," -Antistasi can be enjoyed running a vanilla ArmA 3 version, or with compatible mods, as long as they don’t affect the AI.
-Some mods are fully integrated in Antistasi; when loaded, these mods will change the warring factions as a whole, complete with different vehicles, gear and mechanics.
-At the moment, these are: RHS: (AFRF, USAF, GREF), TFAR and ACE3.

+player createDiaryRecord ["Diary",[localize "STR_BR_3SSANDP",localize "STR_BR_3SS"]]; -When using ACE, basic medical system is selected, to set Advanced Medical System edit the .pbo and open AceSettings.hpp edit the first block from default= 1 to default= 2

+player createDiaryRecord ["Diary",[localize "STR_BR_2SALORE",localize "STR_BR_2SLR"]]; -Items from these integrated mods are also included in Supply Drops and Ammoboxes.
-Other mods, adding new weapons or other gear for instance, will only be available in game by buying them at the Sketchy Irishman.

- -The Sketchy Irishman, also known as Devin, can be found by asking Petros for the Sketchy Irishman mission. At his shop, you can randomly purchase all items from installed mods. Do you want to play with that rusty WWII era mp40 or predator style minigun? You’ve got a chance to pick it up at the Sketchy Irishman’s shop! (No refunds.)

- -The official Antistasi community server runs a small list of high-end mods. Visit a3antistasi.com or the community Teamspeak server to get the link to the steam collection and download them easily.

- -IMPORTANT: Persistent Saving with a mod will make the save incompatible if you wish to revert back to playing without the installed mod. This won’t apply to client-side mods.

- -Avoid mods that control or affect AI as these might break Antistasi AI mechanics.
-You can check a3.antistasi.com for further information. -"]]; - -player createDiaryRecord ["Diary",["5 Antistasi Options"," -By interacting with the physical Map asset at HQ you can set:

- -Civilian spawn rate: we suggest a value between 1% and 10% (5% is default); they count as AI and as such, reduce performance. Keep in mind that below 1% no civilian vehicles will spawn, so no free transports.

- -Spawn distance: 1 km is optimal, higher values might let you long range snipe, but game performance might suffer.

- -Garbage clean: corpses and items on the ground consume memory, clearing these might freeze the game for a short while but FPS should improve. (Some garbage already has an auto-delete timer.)

- -FPS limiter: below the threshold civilians will minimally spawn.

-"]]; - -player createDiaryRecord ["Diary",["4 Game difficulty"," -Antistasi sets a unique ‘Skill’ and ‘Precision’ for AI, which increases based on Army XP Level and enemy resource management.
-These parameters are influenced by the ArmA 3 game difficulty settings, which you can adjust (in singleplayer) from the options menu and on a server on #missions boot.

- -‘Skill’ primarily modulates AI movement (i.e. flanking and seeking cover).
-‘Precision’ is the main parameter you want to adjust if you want to increase or decrease game difficulty.

- -Important to note is that Arma 3 AI-skill level is also dependent on the game engine: if the PC / Server is overloaded many actions in queue will be cancelled and AI will perform badly.

-"]]; - - -player createDiaryRecord ["Diary",["3 Spawn system & Performance"," -Petros, Players, Controlled AI (i.e. freed refugees, recruited soldiers, squads and NATO/VMF ground units) trigger the spawn of enemies and civilians in a radius of 1km - the caching radius. NATO air vehicle won’t spawn in enemies to save performance there is a plan to add a chance of destroying the aircraft when flying by enemy territories.

- -Most enemies outside the caching radius will despawn and if you/your AI move in close again, they will respawn in a different position and at full strength.
-Enemy MRAPs, patrol helicopters, refugees/POWs before liberation, convoys, AAF attack forces will be active regardless of the spawn range.
-AAF attack forces only cache-in the friendly garrison of the objective and FIA roadblocks on the way.

- -Arma 3 is badly optimized and can have game-breaking issues with more than 150 AI on the field.
-Because of this, try to converge people to the same AO and avoid caching in too many enemies at once, as this will result in a poor game experience with low FPS or AI not reacting as they should.
-Some tips: place HQ and Camps outside the spawning radius of towns and emplacements so they won't be cached-in permanently by Petros.

- -Note that servers can add a Headless Client which will dramatically increase the handling of AI. There are 3 HC slots available. -"]]; -player createDiaryRecord ["Diary",["2 Save Load Restart"," -There is no vanilla saving option because it breaks the mission, the Commander has to Persistent Save by interacting with the in-game Map at HQ and, upon restart, Antistasi asks if you want to load Previous Session.
-If you’re a normal player your equipment, money and rank will be saved automatically upon disconnect.

- -Saved data is stored in documents/Arma 3/user.vars.Arma3Profile and is saved separately for each island and respective blufor and greenfor version.

- -What is saved:
-- HQ location with static guns and vehicle within 50m without their inventory.
-- deployed static guns in garrisoned territories.
-- roablocks, garrisons, money, HR, garage, support.
-- Arsenal items and Garage vehicles.
- -What isn’t saved: AI positions, items inside vehicle crates, recruited AI (part of their cost is refunded). -"]]; - -player createDiaryRecord ["Diary",["1 Welcome"," -This campaign is a long lasting scenario which simulates guerrilla combat in an asymmetric warfare situation. It might take weeks to complete, however the fun comes from playing it step by step.

- -There are several ways of playing Antistasi to complete the main objective.
-The goal is to gain the support of more than 50% of the civilian population on the island.
-The campaign is lost if CSAT destroys 8 towns by bombardment.

- - -Special keys: press ‘Y’, ‘shift+Y’, ‘Delete’, and ‘U’ to access vital functions, be sure to unbind those keys from your custom controls otherwise they won’t work.

- -For more info and tips check categories on the left side.
-"]]; +player createDiaryRecord ["Diary",[localize "STR_BR_1WELCOME",localize "STR_BR_1W"]]; //Begin Tutorial -_index =player createDiarySubject ["bt","Begin Tutorial"]; - -player createDiaryRecord ["bt",["HQ"," -Place the HQ safely away from main roads, but possibly close to a small one.
-DON'T set HQ inside of a building to avoid major collision bugs.

- -Consider that mission vehicles spawn around the Campfire, purchased vehicles spawn around the Flag, reinforcements spawn at the closest road as do vehicles of players/AI when Fast Travelling.

- -As said in ‘Spawn System’, Petros will keep an area of 1km cached in, so avoid placing the HQ where he will cache-in civilians or town patrols. (Even in friendly territory to save game performance.) Enemies might just stumble into Petros and kill him while you’re operating far away.

- -Once you safely placed your new HQ, interact with Petros, the Flag, Arsenal, Campfire and the Heal and Repair box to discover their unique functions.

- -- Map: edit Antistasi Options and Persistent Save your progress, inspect detailed town/garrison info.

- -- Flagpole: recruit AI, buy vehicles and static weapons, manage HQ.

- -- Campfire: fast forward time by 8 hours and burn your feet. (Current missions will fail, and you can’t skip time when AAF attack is going on.)

- -- Arsenal Crate: store loot and edit your loadout.

- -- Heal and Repair box: heal, repair yourself and rearm AI. Reset undercover status and change vehicle plates, automatically resupply nearby HC units and static guns.

- - - Petros: ask for missions.

- -HQ location is revealed to CSAT only if you scary a traitor and he manage to flee to an enemy base. Also, mortar fire is an easy way to get triangulated, expect aggressive enemies in both cases. - - -"]]; - -player createDiaryRecord ["bt",["Top Info Bar"," - -The Info Bar displays campaign info, resources and undercover status.

- --Commander: the current Commander. ‘None’ is displayed when membership is enabled and there isn’t any member online who is eligible to command. In this case, the following features will be frozen: economy per tick, main enemy response such as QRFs and Attacks and random mission spawns.

- --Rank: affects the courage of your AI and how precisely they will execute orders. Progress rank by killing enemies and, more effectively, by completing missions. In multiplayer you can also donate your money to FIA to gain ranks.
-Player Rank is saved automatically in multiplayer upon disconnect -

- -- HR: Human Resources are used to recruit AI, add garrison troops to conquered emplacements and, in singleplayer only, 10% of HR and 5% of money is subtracted every time you die.
-Gain HR by escorting refugees or POWs to HQ, or controlling towns and cities.
-Game ticks every 10 minutes add HR depending on amount of civilian supporting FIA.

- -- Money: in singleplayer, only 'FIA money' is available. Useful for buying vehicles, recruit AI, add garrisons and increase Army Xp Level.
-In multiplayer the player’s and FIA accounts are separated; if you die you lose a percentage of your personal account.
-Game ticks every 10 minutes add money to the FIA account depending on controlled territories.
-Player Money are saved automatically in multiplayer upon disconnect -

- -- NATO support: Commander can call-in the friendly faction to assist in overwhelming fights (the friendly-faction is different depending on mod/vanilla blufor/greenfor). Check Commander Options diary entry and Antistasi Features - Support entry.

- -- CSAT support: enemy-faction (again, different depending on mod/vanilla blufor/greenfor) will help the enemy and when this value is very high, they’ll start bombarding towns.
-After 8 destroyed towns the campaign is lost. CSAT support grows if you conquer enemy bases and airports, also if you destroy AA emplacements on named Hilltops.

- -- Army Xp: indicator of Army Xp Level, check the relative diary section for a detailed explanation, the arrows let you know when you’re close to the next tier and, if they’re red, it means you haven’t matched the requirement for the next tier upgrade.

- -- Overt / Incognito: indicator of your undercover status, when it displays Incognito, enemies will think you’re a civilian and ignore you.
-Get undercover status by selecting it in the Y menu or by entering a civilian car. This is only possible if you match all the conditions.
-Check relative diary section for a more detailed explanation. -"]]; - -player createDiaryRecord ["bt",["Y menu"," -Hitting ‘Y’ will open the PDA, with 3 buttons on the far right which respectively correspond from top to bottom to: Player
-Commander
-Admin.

- -Move the cursor over the options to get a description. -"]]; - -player createDiaryRecord ["bt",["What to do"," -The Arsenal is empty, with money barely enough to fund your first missions...
-First goal is to gain money and scavenge gear. Ask Petros for missions and decide for yourself to go for them or not.
-Missions aren’t the real goal of the game, just options that sometimes you might even have to ignore. Look at the map or scout ahead, because some missions might just be impossible for your current capabilities. Binoculars and the Undercover system will be your friends.

- -Missions are triggered within 4 km of your HQ. Don’t try them alone, gather friends or recruit AI at the flag, they aren’t good as the enemy army soldiers however they can be useful in diversion and covering fire. Some objectives might be very remote, or are too risky to reach from HQ directly. If so, the Commander can set up a Camp where you can Fast Travel (teleport) to, speeding up your movement or giving you a safer approach.

- -Scavenge gear, load it in a vehicle, go back to HQ, interact with the Arsenal, choose Transfer Vehicle Cargo to Ammobox to load all the gear into the Arsenal Crate. Check relative section Arsenal, Inventory and Unlocking below for more info.

- -Enemies react to your moves by sending reinforcements or patrols departing physically from a base, so, reaction time is different depending on range from the base, what mode of transport the enemy uses and if they can reach you at all.
-Try to eliminate the enemy quickly if you want to have a chance of looting and running away safely.

- -Playing alone might be difficult unless you properly scout and know the territory. Try to recruit AI (1 or 2 can do the job, they aren’t trained enough to kill enemies, however they’re a great diversion or can provide covering fire if smartly placed). AI will try to revive you if you are downed and they aren’t engaged by enemies.

- -However, Antistasi really shines if you play with friends, so join Antistasi Official Servers and make some new ones! -"]]; -player createDiaryRecord ["bt",["Jeroen Arsenal System"," -The inventory system in Antistasi is unique: Loading Previous Session will empty all the inventories from vehicles. Only the contents of the Virtual Arsenal and the inventory of the Arsenal Crate are saved.

- -You can use them as follows:
-- Arsenal Crate inventory = temporary storage for items. Gear transferred by the ‘Transfer Vehicle Cargo to Ammobox’ function will end up here.
-- Virtual Arsenal = main gear storage. Move items from the Arsenal Crate into the Arsenal by pressing ‘To Crate’ in the Virtual Arsenal environment.

- -By opening the Arsenal you will see JAS’s modified Arsenal interface. On the left hand side the item categories are displayed. Red categories indicate items not yet equipped.

- -The number between brackets in front of each item is the actual number of copies in the Arsenal.
-The same goes for the magazines (which are counted separately in single bullets), grenades and other consumables, displayed in the right hand side window.

- -Unlike previous Antistasi versions, there is no way to unlock an item permanently and in unlimited amount. Everything is limited to what you actually scavenge and bring back to HQ.

- -Accessing the Arsenal from the driver seat of a vehicle lets you add items into the vehicle itself.

- -The custom buttons at the bottom are:
-- Default gear: adds stuff that you’ll always need according to the modset.

-- To Crate: Moves all the items in the Arsenal Crate to the JAS inventory.

- -AI Gear (WiP): recruited AI spawn with gear available in the Arsenal depending on their class. This won’t reduce the actual amount of stored items. -"]]; +_index =player createDiarySubject ["bt",localize "STR_BR_BT0"]; -player createDiaryRecord ["bt",["Town allegiance"," -The civilian population on the island has to be convinced that your cause is the right one. This is the goal of Antistasi. As you build up support in a town, the enemy tries to do the same.

+player createDiaryRecord ["bt",[localize"STR_BR_BT0HQ",localize "STR_BR_BT_QH"]]; -Each town has a number of inhabitants, that can either support you, the enemy or be neutral. -
-You can check the current Town Support value on the Map at HQ, and when in a town, it is displayed in the bottom right corner. -

+player createDiaryRecord ["bt",[localize "STR_BR_BT1TIB",localize "STR_BR_BT_TIB"]]; -Increase Town Support by killing enemy soldiers, bringing supplies, by leaflet drops, capturing the nearby power plant or establishing a propaganda station.
-A successful mission nets the favor of a relative number of people which means not every mission gains the same % amount across different towns.
+player createDiaryRecord ["bt",[localize "STR_BR_BT2YM",localize "STR_BR_BT_YM"]]; -Town Support will drop if civilians get killed, the enemy bring supplies or if the town is without electricity.

+player createDiaryRecord ["bt",[localize "STR_BR_BT3WTD",localize "STR_BR_BT_WTD"]]; -Towns will only be powered if they support the faction which controls the nearby power plant.
-If the town supports the rebels, the enemy will cut their power and you will lose Town Support over time, same goes for towns that support the enemy and power plants you control.
.
+player createDiaryRecord ["bt",[localize "STR_BR_BT4JAS",localize "STR_BR_BT_JAS"]]; -Towns supporting the enemy will have enemy patrols around, and towns supporting your faction will have a small friendly patrol around. -"]]; +player createDiaryRecord ["bt",[localize "STR_BR_BT5TA",localize "STR_BR_BT_TA"]]; -player createDiaryRecord ["bt",["Holding territories"," -Everytime you conquest or kill some special targets, enemy will dispatch a QRF from the available base or airport, the first step to secure an area is to wait and defend it from that first attack. -Overtime, enemies will check the garrison amount and can decide to send a patrol to take it back in case it’s abbandoned. +player createDiaryRecord ["bt",[localize "STR_BR_BT6HT",localize "STR_BR_BT_HT"]]; -That said, you need HR to garrison the position and increase the ArmyXPLevel to make your garrison good enough to resist an Attack which is a mission where massive amount of forces are sent to recapture an objective. Note that NATO is very handy in this case. - -The Commander can set up a roadblock from the Y menu. Roadblocks are very effective in taking out one or two enemy vehicles thanks to their AT capabilities and .50 cal machine guns.

- -"]]; - -player createDiaryRecord ["bt",["Missions"," -Missions can be requested at Petros, as side missions at the Corrupted Politician/Officer, or they can appear spontaneously.
-Most of them are scheduled by time and can be can tracked by checking the tasks on your map. There might be many active missions at same time; it’s your choice which one you want to complete.

- -There are around 18 missions in Antistasi, but some missions might not be available in your HQ area (4 km radius), depending on surrounding towns, cities and base types. -

- -The missions will vary in difficulty depending on nearby enemy positions (roadblocks, mortar positions and AA hilltops), the gear you equip, the manpower you bring and the amount of time you spend.
-All these factors should be considered when choosing one mission over the other, and completion times can differ greatly depending on planning. -

- -Ignoring missions is also a valid option, though ignoring missions may have repercussions, such as:
-Kill the Traitor: lose a percentage of money and HR and attacks on your territories will be more frequent.
-Supply Convoy: towns that are successfully supplied by the enemy convoy will gain support in their favor.

- -Petros gives you 1 mission per type with a cooldown of 30 minutes real time, so skipping time won’t let you have another mission faster. On the other hand, mission time is based on in-game time, so if you skip time when missions are active, they will be considered failed.

- -Note that requesting Propaganda on a town which has less than 12% FIA support will spawn a Leaflett Drop mission instead. The real propaganda spawns a custom propaganda truck. - -"]]; +player createDiaryRecord ["bt",[localize "STR_BR_BT7MI",localize "STR_BR_BT_MI"]]; //Antistasi Features -_index =player createDiarySubject ["af","Antistasi features"]; - -player createDiaryRecord ["af",["Class System"," -Most of the playable classes have special abilities, and/or weapon proficiencies.
-A class which doesn’t have a proficiency for a specific type can still use the weapon but with handling difficulties, everyone can use AT weapons without any malus.
- -Class affects:
-- Officer: sneaky steps and harder to be spotted, less carrying capacity
-- Teamleader: standard
-- Soldier: sneaky steps, less carrying capacity.
-- Medic: can use medikit, can give blood (ACE basic), can use Surgical Kit (ACE advanced)
-- Engineer: can use toolkit, with ACE can repair (everyone can change wheels if they have a toolkit)
-- Autorifleman: loud steps, more carrying capacity, has proficiency for machineguns
-- Marksman: harder to be spotted, less carrying capacity, has proficiency for sniper rifles
-- Ammobearer: loud steps, more easily spotted, way more carrying capacity
-- AT rifleman: more easily spotted, more carry capacity.

- -Choosing your class is important just as balancing the roles among your group is.

- -In Singleplayer you can interact with the Arsenal Crate and Change Role anytime you want. Note that it won’t Persistent Save, so upon restart you will have to Change Role again.

- -In Multiplayer you select your class upon login and you can change it by logging out and in again. - -"]]; - -player createDiaryRecord ["af",["AI Management / Enhancements"," -Commander and server members can recruit AI at the Flag or add garrison to conquered objectives. Those guys starts with civilian clothes and their weapons correspond to a random choice between their class weapons present into the Arsenal, at this modding stage they don’t substract the weapon from it nor they require a threshold amount like it was with original Arsenal system.

- -Progress with Army XP level is the way to make them better both in fighting skills and dressing.

- -Commanding AI is Vanilla feature, check on BIS wiki to learn more about it. Hold fire, form line or file and regroup are very important expecially when driving in undercover truck with AI riding as passengers, if not told to hold fire they might blow up your sneaky actions.

- -Without a radio equipped you can’t control them if you go 500m away, in that case, they disappear temporanely from the bottom bar and start moving towards your position.

- -The Y menu give options to tell selected friendly AI to:

- -- Auto Heal: set this for each recruited AI to let them heal teammates and themselves automatically.

- -- Auto Ream: send AI to scavenge ammo and weapons from enemy bodies or resupply at crates according to their class.

- -- Remote control: if not undercover and no enemies nearby, lets you control the AI to fix some pathfinding issues or simply manage their inventory. You will lose control after 60 seconds or if the AI takes damage. You can access the arsenal and equip them how you wish to.

- -- Dismiss: send the unit back to HQ. Upon arrival their cost in money and HR is refunded. -"]]; -player createDiaryRecord ["af",["Army Xp and Level"," -Army Experience affects the skill of FIA recruited troops, reinforcements and garrisons. Gain Experience by fighting, completing missions and capturing objectives.
- -

- -Army Level: -0) XP cap at 4, Recruits wear civilian clothing, Garage slots = 10 FIA and 3 Personal, can store basic vehicles and MRAPs only, HR cap at 50, Camps 2, normal Roadblocks 2, normal Watchposts 2.

- -1) XP cap at 8, 25% Recruits wear guerrilla uniforms, Garage slots = 15 FIA and 5 Personal, can store APC, HR cap at 75, Camps 3, normal Roadblocks 4 , normal Watchposts 3, one-off NATO boost +10.

- -2) XP cap at 12, 50% Recruits wear guerrilla uniforms, Garage slots = 20 FIA and 10 Personal, can store also Helicopters, HR cap at 100, Camps 4, enhanced Roadblocks 6 , enhanced Watchposts 4, one-off NATO boost +20

- -3) XP cap at 20h for both FIA and personal, all vehicles can be stored, HR cap at 150, Camps 5, enhanced Roadblocks 10, enhanced Watchposts 6, one-off NATO boost +30.

-"]]; - -player createDiaryRecord ["af",["Jeroen Arsenal Garage"," -Accessing the Garage opens a custom interface which lets you select the vehicle on the left side, and interact with the vehicle on the right.

- -Vehicles can be repaired piece by piece, glass included, through JAG and also reskinned.

+_index =player createDiarySubject ["af",localize "STR_BR_AF0"]; -Stored vehicles are visible for everyone in the Garage. Green vehicles are yours, white ones are retrievable by everyone and red vehicles are locked. Only the owner of a vehicle can unlock a vehicle.

+player createDiaryRecord ["af",[localize "STR_BR_AF1CS",localize "STR_BR_AF_CS"]]; -Note: Static Weapons can be garaged like other vehicles and, found under their respective tab, can be attached to off-roads, trucks or other vehicles with a weapon hardpoint. -"]]; +player createDiaryRecord ["af",[localize "STR_BR_AF2AIME",localize "STR_BR_AF_AIME"]]; -player createDiaryRecord ["af",["Fast Travel"," -Fast Travel lets you skip journeys which might be considered a waste of time, it is a teleport with variable travel time (black screen) scaled to destination distance.
-On foot, you are teleported directly to the map marker location, along with any AI in your group.
-If you are the driver of a vehicle, the whole crew will travel with you. Vehicles will end up on the road closest to the map marker location.

+player createDiaryRecord ["af",[localize "STR_BR_AF3AXPNL",localize "STR_BR_AF_AXPNL"]]; -Conditions:
-- Allowed destinations are the HQ or Camps.
-- No enemies must be present within 350m around both the place of departure and destination.

+player createDiaryRecord ["af",[localize "STR_BR_AF7JAG",localize "STR_BR_AF_JAG"]]; -Warning:
-- Each Fast Travel to a Camp has a chance of being intercepted; enemies will send a helicopter and an infantry squad will fast-rope down and attack the Camp. Travel to HQ is always safe.
-- Avoid Fast Travelling vehicles while towing other vehicles, the latter have a high chance of exploding, or disappearing.
-- Avoid Fast Travelling with air vehicles or boats, again, a high chance of exploding. -- In multiplayer you won’t notice other players are Fast Travelling (if you’re all in a car, only the driver will have the black Fast Travelling screen). -- Be sure you’re not doing it at same time AND to the same location when driving vehicles, as they -you guessed it- might explode. -"]]; -player createDiaryRecord ["af",["Friendly and Enemy Support"," -Friendly Faction support is gained by helping civilians, capturing bases and eliminating enemy support units.
-It is decreased when civilians are hurt (killed, or angry for loss of power) or prisoners are killed.
-The Commander can use Friendly Faction support for support actions (check relative section).

+player createDiaryRecord ["af",[localize "STR_BR_AF9JNSL",localize "STR_BR_AF_JNSL"]]; -Enemy support is accrued by conquering Bases, Airports and Hilltops.
-It can be reduced by asking friendly support faction to raid their military emplacements away from Altis.
-If Enemy support gets too high, the Enemy Faction starts bombarding towns. If they destroy 8 towns the campaign is lost. -"]]; +player createDiaryRecord ["af",[localize "STR_BR_AF4FT",localize "STR_BRAF_FT"]]; +player createDiaryRecord ["af",[localize "STR_BR_AF8JNES",localize "STR_BR_AF_JNES"]]; -player createDiaryRecord ["af",["Server Membership"," -In multiplayer, the Server Admin can give membership to players by using the Y menu and looking directly at the player.

+player createDiaryRecord ["af",[localize "STR_BR_AF10FS",localize "STR_BR_AF_FS"]]; -Server membership is the best way to prevent random people from interfering with the Antistasi campaign in an open server, but lets people still enjoy Antistasi, with some options frozen;

+player createDiaryRecord ["af",[localize "STR_BR_AF5SM",localize "STR_BR_AF_SM"]]; -if no members are online, the commander slot will be empty, so no economy per tick, no main enemy response and no random mission spawns.

- -Member privileges:
-- Eligible to be Commander.
-- Recruit AI.
-"]]; - -player createDiaryRecord ["af",["Undercover"," -When Undercover is enabled you will see the word ‘Incognito’ in green on the Info Bar and enemies will ignore you.

- -Conditions to satisfy to become undercover:
-- not being reported in the last 30 minutes. If reported, hitting the Heal, Repair and Rearm option at HQ will allow becoming undercover again immediately. Respawning also reenables it.
-- no enemies present within a 350 m radius.
-- wearing civilian clothes and no military gear equipped. A hint screen on the top right will list what items are preventing you from going undercover.

- -If you meet the above conditions you can get Undercover by: -- enabling Undercover from Y menu. -- getting into an unreported civilian vehicle. In this case, you can even have military gear equipped.

- -You will always lose undercover when you are:
-- within ~150m from, Outpost, Base or Airport.
-- within ~50m from a patrol with a dog.
-- spotted treating yourself or someone else
-- spotted placing explosives.
-- spotted repairing vehicles.

- -In a vehicle, undercover is lost if you are:
-- spotted driving ~25m off road.
-- driving over an enemy soldier.
-- if you disembarking without matching the equipment conditions.
-- if someone who isn’t undercover enters your vehicle with enemies around.
- -On foot, undercover is lost when:
-- equipping military gear or dropping your civilian clothes (you can’t be undercover when naked).

- -Note: ‘being spotted’ doesn’t require line of sight, it’s a radius around enemy units. -"]]; +player createDiaryRecord ["af",[localize "STR_BR_AF6U",localize "STR_BR_AF_U"]]; //Commander Options -_index =player createDiarySubject ["cm","Commander Options"]; -player createDiaryRecord ["cm",["Moving HQ"," -HQ can be moved by the Commander who has to:
-- Interact with the physical Flag, choose 'HQ options' and click 'Move HQ',
-- Petros joins the Commander’s squad, and moves him to the new location, on foot or as a vehicle passenger.
-- Arsenal and Vehicle Crates have to be loaded on a truck, drive up to them and then interact with the crates to ‘Load Cargo in Vehicle’. -- Once on the desired place, talk to Petros and ‘Build HQ’.

- -The game allows you to move your HQ to wherever, even inside an enemy base with enemies in the surrounding, it’s up to you to make the smart decision on where move it, see the website for hints on good HQ locations. -"]]; -player createDiaryRecord ["cm",["Friendly Faction Support"," -The Commander can call in various forms of support from the Friendly Faction by choosing one of the options through Y menu (Commander tab). Unit or vehicle types and strength of the intervention will depend on your current support value. Each type cost support points and are explained below.

- -Support must physically travel to their target and they can get engaged before they arrive, this is important to remember especially for air forces, considering that each named hilltop has a spec-ops AA emplacement which can easily destroy them.

- -There is a timer of 30 minutes, after which you lose control of them and they will return to base. -
-You can’t board friendly support vehicles nor garage them.

- -- Air assault: send a mix of transport and assault helicopters, No control on High Command.

- -- Armored assault: select a controlled Base, Select waypoint, No control on High Command.

- -- Artillery: select a controlled Base, select the unit from High Command bar and press Shift+Y.

- -- Roadblock: select a controlled Base, Select a point on a road, Control on High Command to move them on location to build the effective Roadblock

- -- UAV: depart from Carrier or closest controlled Airport, Control on High Command to move it where you desire.

- --Resupply: select the approximate location where supply box should be dropped, Control on High Command and move it to designated location, will be marked by blue smoke.

- -- CAS: Close Air Support; 3 air assets depart from Carrier or closest controlled Airport, Control them on High Command move them where you want.

- -- Bomb Run: select entry and exit point, a plane will depart from Carrier or closest controlled Airport, No control from High Command, requires practice to be effective.

- -- QRF (xx points): Quick Reaction Forces; Small transport helicopters depart from Carrier or closest controlled Airport deploying troops at designated location. -"]]; - -player createDiaryRecord ["cm",["Reinforcements"," -Commander can invest HR in FIA forces, controlled through High Command bar. These soldiers are affected by Army Xp Level. Once recruited they last until they die, get dismissed or the game is restarted (in which case they will get refunded depending on their health status).

- -You can directly control the leader of each group by selecting the team in High Command mode and using the Direct AI Control function in Y menu.

- -* If RHS mod is loaded, this truck is unavailable and nothing will spawn. -** Mortar teams have some (un)deploy time when given a movement order. Once deployed you’ll notice a different icon on the map and only then are they ready to fire.
-Press Shift+Y after selecting the mortar team and click on the map to choose a location to order a mortar strike.
-Mortars have limited range and ammunition. They can be resupplied at HQ by the Heal, Repair and Rearm function. -"]]; - -player createDiaryRecord ["cm",["Garrison"," -The Commander can invest HR in FIA forces that garrison conquered emplacements or the HQ itself. These soldiers are affected by Army Xp Level and can’t be controlled directly.

- -At your HQ, interact with the Flag, HQ management, Recruit Garrison. Select the emplacement you want to garrison and add units.

- -Adding manned static weapons: assemble a static gun, recruit a militiaman and he will man the gun. Garrison Info (viewed at HQ Map) will display the number of manned static weapons.

- -Garrisoned mortar teams will engage anything over a long range, so be careful about where you station them to minimize friendly fire, civilian casualties and collateral damage. -

- -Note: Huge garrisons might lower game performance, please check relative section for more information. -"]]; - -player createDiaryRecord ["cm",["Emplacements"," -In the Y menu, the Commander can manage:

- -- Roadblocks: placed on roads, will defend the area with a .50 cal and rpgs: ideal to stop normal enemy patrols and even convoys, when they are upgraded to enhanced Roadblocks (Army Level > 12).

- -- Watchposts: placed in the field, 2 man sentry will observe the area reporting contacts through the High Command interface.

+_index =player createDiarySubject ["cm",localize "STR_BR_CM0"]; -- Camps: allow people to fast travel. There are crates with some free equipment and the ability to restore health and fuel, but vehicles can not be repaired here.

+player createDiaryRecord ["cm",[localize "STR_BR_CM1MHQ",localize "STR_BR_CM_MHQ"]]; -- HQ fortifications: consider these cosmetics, as the HQ isn’t supposed to be a fortified position.
-Lantern to illuminate the base a bit better than the Campfire.
-Spawn pad lets you set a default spawn location for vehicles.
-Camo net occludes Petros and the camp from enemy aircraft, but might collapse or cause mission vehicles to explode upon spawn if placed too close to campfire, so be really careful. -"]]; +player createDiaryRecord ["cm",[localize "STR_BR_CM2FFS",localize "STR_BR_CM_FFS"]]; -player createDiaryRecord ["cm",["Maintenance"," -Some sticky situations can be fixed by the commander or admin, access them from Y menu.

+player createDiaryRecord ["cm",[localize "STR_BR_CM3R",localize "STR_BR_CM_R"]]; -- Reset Petros Position: to fix the ‘too far from HQ’ bug when trying to move assets around the HQ.

+player createDiaryRecord ["cm",[localize "STR_BR_CM4G",localize "STR_BR_CM_G"]]; -- Reset Static positions: static weapons around HQ can be moved like other assets for a limited time, if the timer expires, use this command to make them movable again.

+player createDiaryRecord ["cm",[localize "STR_BR_CM5E",localize "STR_BR_CM_E"]]; -- Reset HQ: reset HQ location around Petros’ position. Note: if Petros was moved inside a building by ACE cable tie, collision bugs will occur. -"]]; +player createDiaryRecord ["cm",[localize "STR_BR_CM6M",localize "STR_BR_CM_M"]]; diff --git a/AntistasiOfficial.Altis/buildHQ.sqf b/AntistasiOfficial.Altis/buildHQ.sqf index 16415c50..5611b1ec 100644 --- a/AntistasiOfficial.Altis/buildHQ.sqf +++ b/AntistasiOfficial.Altis/buildHQ.sqf @@ -66,4 +66,10 @@ if (_movido) then {[] call vaciar}; placementDone = true; publicVariable "placementDone"; sleep 5; [[Petros,"mission"],"AS_fnc_addActionMP"] call BIS_fnc_MP; + + +//Stef Check if road is found within 500m +_arr1 = [(getMarkerPos guer_respawn), [ciudades, (getMarkerPos guer_respawn)] call BIS_fnc_nearestPosition] call AS_fnc_findRoadspot; +if(_arr1 isequalto []) then {hint localize "STR_HINTS_COMMANDER_HQBUILDFAR"; petros globalChat localize "STR_HINTS_COMMANDER_HQBUILDFAR"; petros globalChat localize "STR_HINTS_HQFAR_BUILD"}; + //[] remoteExec ["petrosAnimation", 2]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/cba_settings.sqf b/AntistasiOfficial.Altis/cba_settings.sqf index 489d6fa4..2006d2c0 100644 --- a/AntistasiOfficial.Altis/cba_settings.sqf +++ b/AntistasiOfficial.Altis/cba_settings.sqf @@ -1,7 +1,43 @@ -TF_no_auto_long_range_radio = true; -TF_give_personal_radio_to_regular_soldier = true; -TF_give_microdagr_to_soldier = false; -TF_same_sw_frequencies_for_side = true; -TF_same_lr_frequencies_for_side = true; -TF_same_dd_frequencies_for_side = true; +force ace_interaction_enableTeamManagement = false; +force ace_map_defaultChannel = 5; +force ace_map_BFT_HideAiGroups = true; +force ace_map_BFT_ShowPlayerNames = true; +force ace_map_mapIllumination = true; + +force ace_advanced_ballistics_enabled = true; +force ace_advanced_ballistics_muzzleVelocityVariationEnabled = true; +force ace_advanced_ballistics_ammoTemperatureEnabled = true; +force ace_advanced_ballistics_barrelLengthInfluenceEnabled = true; +force ace_advanced_ballistics_bulletTraceEnabled = true; +force ace_advanced_ballistics_simulationInterval = 0.05; + +force ace_medical_level = 1; +force ace_medical_preventInstaDeath = true; +force ace_medical_enableRevive = 2; +force ace_medical_maxReviveTime = 300; +force ace_medical_litterCleanUpDelay = 300; +force ace_medical_medicSetting_basicEpi = 0; + +ace_microdagr_mapDataAvailable = 1; + +force ace_repair_repairDamageThreshold_engineer = 1; +force ace_repair_fullRepairLocation = 3; +force ace_repair_engineerSetting_fullRepair = 1; +force ace_repair_wheelRepairRequiredItems = 1; + +force ace_advanced_fatigue_enabled = false; +ace_advanced_fatigue_enableStaminaBar = true; +force ace_advanced_fatigue_performanceFactor = 1.5; +force ace_advanced_fatigue_recoveryFactor = 1.5; +force ace_advanced_fatigue_loadFactor = 1; +force ace_advanced_fatigue_terrainGradientFactor = 0.6; + +force ace_explosives_explodeOnDefuse = false; + +force TF_no_auto_long_range_radio = true; +force TF_give_personal_radio_to_regular_soldier = true; +force TF_give_microdagr_to_soldier = false; +force TF_same_sw_frequencies_for_side = true; +force TF_same_lr_frequencies_for_side = true; +force TF_same_dd_frequencies_for_side = true; TF_default_radioVolume = 9; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/cityinfo.sqf b/AntistasiOfficial.Altis/cityinfo.sqf index b9685b53..98ed0c0c 100644 --- a/AntistasiOfficial.Altis/cityinfo.sqf +++ b/AntistasiOfficial.Altis/cityinfo.sqf @@ -16,7 +16,7 @@ _pop = _pop + _numCiv; } forEach ciudades; _popFIA = round _popFIA; _popAAF = round _popAAF; -hint format ["Altis\n\nTotal pop: %1\nFIA Support: %2\nAAF SUpport: %3 \n\nDestroyed Cities: %4\n\nClick on the zone",_pop, _popFIA, _popAAF, {_x in destroyedCities} count ciudades]; //Stef need to change Altis to "worldname", don't know syntax +hint format [localize "STR_HINTS_MAP_TEXT_1",_pop, _popFIA, _popAAF, {_x in destroyedCities} count ciudades,count allunits,worldname]; openMap true; @@ -28,21 +28,17 @@ onMapSingleClick "posicionTel = _pos;"; //////////////////////////////// //waitUntil {sleep 1; (count posicionTel > 0) or (not visiblemap)}; -while {visibleMap} do - { +while {visibleMap} do { sleep 1; - if (count posicionTel > 0) then - { + if (count posicionTel > 0) then { _posicionTel = posicionTel; //_sitio = [marcadores, _posicionTel] call BIS_Fnc_nearestPosition; _sitio = [markers, _posicionTel] call BIS_Fnc_nearestPosition; //Sparker _texto = "Click on a zone"; - if (_sitio == "FIA_HQ") then - { + if (_sitio == "FIA_HQ") then { _texto = format ["FIA HQ%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; - if (_sitio in ciudades) then - { + }; + if (_sitio in ciudades) then { _datos = server getVariable _sitio; _numCiv = _datos select 0; @@ -52,122 +48,98 @@ while {visibleMap} do //_texto = format ["%1\n\nPop %2\nAAF Support: %3 %5\nFIA Support: %4 %5",[_sitio,false] call fn_location,_numCiv,_prestigeOPFOR,_prestigeBLUFOR,"%"]; _texto = format ["%1\n\nPop %2\nAAF Support: %3 %5\nFIA Support: %4 %5",[_sitio,false] call AS_fnc_location,_numCiv,_prestigeOPFOR,_prestigeBLUFOR,"%"]; if (_power) then {_texto = format ["%1\nPowered",_texto]} else {_texto = format ["%1\nNot Powered",_texto]}; - if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; - if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; - }; + //if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; + if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; + }; /* if ((_sitio in colinas) and (_sitio in mrkAAF)) then { _texto = "AAF Small Outpost"; }; */ - if (_sitio in aeropuertos) then - { - if (_sitio in mrkAAF) then - { + if (_sitio in aeropuertos) then { + if (_sitio in mrkAAF) then { _texto = "AAF Airport"; _busy = if (dateToNumber date > server getVariable _sitio) then {false} else {true}; - if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; + //if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; if (!_busy) then {_texto = format ["%1\nStatus: Idle",_texto]} else {_texto = format ["%1\nStatus: Busy",_texto]}; - } - else - { + } else { _texto = format ["FIA Airport%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; }; - if (_sitio in power) then - { - if (_sitio in mrkAAF) then - { + }; + + if (_sitio in power) then { + if (_sitio in mrkAAF) then { _texto = "AAF Powerplant"; - if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; - } - else - { + //if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; + } else { _texto = format ["FIA Powerplant%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; - if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; }; - if (_sitio in recursos) then - { - if (_sitio in mrkAAF) then - { + if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; + }; + + if (_sitio in recursos) then { + if (_sitio in mrkAAF) then { _texto = "AAF Resources"; - } - else - { + } else { _texto = format ["FIA Resources%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; + }; _power = [_sitio] call AS_fnc_powercheck; if (!_power) then {_texto = format ["%1\n\nNo Powered",_texto]} else {_texto = format ["%1\n\nPowered",_texto]}; - if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; + //if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; }; - if (_sitio in fabricas) then - { - if (_sitio in mrkAAF) then - { + if (_sitio in fabricas) then { + if (_sitio in mrkAAF) then { _texto = "AAF Factory"; - } - else - { + } else { _texto = format ["FIA Factory%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; + }; + _power = [_sitio] call AS_fnc_powercheck; if (!_power) then {_texto = format ["%1\n\nNo Powered",_texto]} else {_texto = format ["%1\n\nPowered",_texto]}; - if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; + //if (_sitio in mrkAAF) then {if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\nRadio Comms ON",_texto]} else {_texto = format ["%1\nRadio Comms OFF",_texto]}}; if (_sitio in destroyedCities) then {_texto = format ["%1\nDESTROYED",_texto]}; - }; - if (_sitio in puestos) then - { - if (_sitio in mrkAAF) then - { + }; + if (_sitio in puestos) then { + if (_sitio in mrkAAF) then { _texto = "AAF Grand Outpost"; - if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; - } - else - { + //if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; + } + else { _texto = format ["FIA Grand Outpost%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; }; + }; /* if ((_sitio in controles) and (_sitio in mrkAAF)) then { _texto = "AAF Roadblock"; }; */ - if (_sitio in puertos) then - { - if (_sitio in mrkAAF) then - { + if (_sitio in puertos) then { + if (_sitio in mrkAAF) then { _texto = "AAF Seaport"; - if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; - } - else - { + //if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; + } else { _texto = format ["FIA Seaport%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; }; - if (_sitio in bases) then - { - if (_sitio in mrkAAF) then - { + }; + if (_sitio in bases) then { + if (_sitio in mrkAAF) then { _texto = "AAF Base"; _busy = if (dateToNumber date > server getVariable _sitio) then {false} else {true}; if ([_sitio] call AS_fnc_radiocheck) then {_texto = format ["%1\n\nRadio Comms ON",_texto]} else {_texto = format ["%1\n\nRadio Comms OFF",_texto]}; if (!_busy) then {_texto = format ["%1\nStatus: Idle",_texto]} else {_texto = format ["%1\nStatus: Busy",_texto]}; - } - else - { + } else { _texto = format ["FIA Base%1",[_sitio] call AS_fnc_getGarrisonInfo]; - }; }; - hint format ["%1",_texto]; }; - posicionTel = []; + hint format ["%1",_texto]; }; + posicionTel = []; +}; onMapSingleClick ""; //Remove the frontline. Sparker call WS_fnc_unplotGrid; -/////////////////////////////// \ No newline at end of file +/////////////////////////////// diff --git a/AntistasiOfficial.Altis/commsMP.sqf b/AntistasiOfficial.Altis/commsMP.sqf index e8ea2c16..665de9c3 100644 --- a/AntistasiOfficial.Altis/commsMP.sqf +++ b/AntistasiOfficial.Altis/commsMP.sqf @@ -2,19 +2,21 @@ if (!hasInterface) exitWith {}; params ["_unit","_tipo","_texto"]; -if (_tipo == "sideChat") then - { - _unit sideChat format ["%1", _texto]; - }; -if (_tipo == "hint") then {hint format ["%1",_texto]}; -if (_tipo == "hintCS") then {hintC format ["%1",_texto]}; -if (_tipo == "globalChat") then - { - _unit globalChat format ["%1", _texto]; - }; +if (_tipo == "sideChat") exitWith {_unit sideChat _texto;}; -if (_tipo == "income") then - { +if (_tipo == "locSideChat") exitWith {_unit sideChat localize _texto;}; + +if (_tipo == "hint") exitWith {hint _texto;}; + +if (_tipo == "locHint") exitWith {hint localize _texto;}; + +if (_tipo == "hintCS") exitWith {hintC _texto;}; //not using + +if (_tipo == "globalChat") exitWith {_unit globalChat _texto;}; + +if (_tipo == "locGlobalChat") exitWith {_unit globalChat localize _texto;}; + +if (_tipo == "income") exitWith { waitUntil {sleep 0.2; !incomeRep}; incomeRep = true; //playSound3D ["a3\sounds_f\sfx\beep_target.wss", player]; @@ -22,16 +24,11 @@ if (_tipo == "income") then //[_texto,0.8,0.5,5,0,0,2] spawn bis_fnc_dynamicText; [_texto, [safeZoneX + (0.8 * safeZoneW), (0.2 * safeZoneW)], 0.5, 5, 0, 0, 2] spawn bis_fnc_dynamicText; incomeRep = false; - }; +}; -if (_tipo == "countdown") then - { - _texto = format ["Time Remaining: %1 secs",_texto]; - hint format ["%1",_texto]; - }; +if (_tipo == "countdown") exitWith {hint format ["Time Remaining: %1 secs",_texto];}; -if (_tipo == "taxRep") then - { +if (_tipo == "taxRep") exitWith { incomeRep = true; playSound "3DEN_notificationDefault"; //playSound3D ["a3\sounds_f\sfx\beep_target.wss", player]; @@ -39,11 +36,11 @@ if (_tipo == "taxRep") then [_texto, [safeZoneX + (0.8 * safeZoneW), (0.2 * safeZoneW)], 0.5, 5, 0, 0, 2] spawn bis_fnc_dynamicText; sleep 10; incomeRep = false; - }; +}; -if (_tipo == "BE") then { +if (_tipo == "BE") exitWith { sleep 0.5; - "AXP Details" hintC (_texto); + "AXP Details" hintC _texto; hintC_arr_EH = findDisplay 72 displayAddEventHandler ["unload", { 0 = _this spawn { _this select 0 displayRemoveEventHandler ["unload", hintC_arr_EH]; @@ -52,9 +49,9 @@ if (_tipo == "BE") then { }]; }; -if (_tipo == "status") then { +if (_tipo == "status") exitWith { sleep 0.5; - "FIA Details" hintC (_texto); + "FIA Details" hintC _texto; hintC_arr_EH = findDisplay 72 displayAddEventHandler ["unload", { 0 = _this spawn { _this select 0 displayRemoveEventHandler ["unload", hintC_arr_EH]; @@ -63,9 +60,9 @@ if (_tipo == "status") then { }]; }; -if (_tipo == "save") then { +if (_tipo == "save") exitWith { sleep 0.5; - (localize "STR_HINTS_SAVE_COM_TITLE") hintC (_texto); + "Progress Saved" hintC [localize "STR_HINTS_SAVE_COM_1", localize "STR_HINTS_SAVE_COM_2",localize "STR_HINTS_SAVE_COM_3",localize "STR_HINTS_SAVE_COM_4"]; hintC_arr_EH = findDisplay 72 displayAddEventHandler ["unload", { 0 = _this spawn { _this select 0 displayRemoveEventHandler ["unload", hintC_arr_EH]; diff --git a/AntistasiOfficial.Altis/crearPuestosFIA.sqf b/AntistasiOfficial.Altis/crearPuestosFIA.sqf index 13e28167..53bec65d 100644 --- a/AntistasiOfficial.Altis/crearPuestosFIA.sqf +++ b/AntistasiOfficial.Altis/crearPuestosFIA.sqf @@ -54,7 +54,7 @@ _mrk setMarkerShape "ICON"; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + 60]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["PuestosFIA",[side_blue,civilian],["We are sending a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination.","Post \ Roadblock Deploy",_mrk],_posicionTel,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; +_tsk = ["PuestosFIA", [side_blue, civilian],["STR_TSK_DESC_OPDEPLOY", "STR_TSK_OPDEPLOY", _mrk],_posicionTel, "CREATED", 5, true, true, "Move"] call BIS_fnc_setTask; misiones pushBackUnique _tsk; publicVariable "misiones"; _grupo = [getMarkerPos guer_respawn, side_blue, ([_tipogrupo, "guer"] call AS_fnc_pickGroup)] call BIS_Fnc_spawnGroup; _grupo setGroupId ["Watch"]; @@ -114,7 +114,7 @@ if ({(alive _x) and (_x distance _posicionTel < 10)} count units _grupo > 0) the // BE module }; spawner setVariable [_mrk,false,true]; - _tsk = ["PuestosFIA",[side_blue,civilian],["We are sending a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination.","Post \ Roadblock Deploy",_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["PuestosFIA", [side_blue, civilian],["STR_TSK_DESC_OPDEPLOY", "STR_TSK_OPDEPLOY", _mrk],_posicionTel, "SUCCEEDED", 5, true, true, "Move"] call BIS_fnc_setTask; [-5,5,_posiciontel] remoteExec ["AS_fnc_changeCitySupport",2]; _mrk setMarkerType "loc_bunker"; _mrk setMarkerColor "ColorYellow"; @@ -122,7 +122,7 @@ if ({(alive _x) and (_x distance _posicionTel < 10)} count units _grupo > 0) the } else { - _tsk = ["PuestosFIA",[side_blue,civilian],["We are sending a team to establish an Observation Post or Roadblock. Send and cover the team until reaches it's destination.","Post \ Roadblock Deploy",_mrk],_posicionTel,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["PuestosFIA", [side_blue, civilian],["STR_TSK_DESC_OPDEPLOY", "STR_TSK_OPDEPLOY", _mrk],_posicionTel, "FAILED", 5, true, true, "Move"] call BIS_fnc_setTask; sleep 3; deleteMarker _mrk; }; diff --git a/AntistasiOfficial.Altis/defines.hpp b/AntistasiOfficial.Altis/defines.hpp index 370bc8d5..c5c2df5a 100644 --- a/AntistasiOfficial.Altis/defines.hpp +++ b/AntistasiOfficial.Altis/defines.hpp @@ -385,7 +385,7 @@ class NAME##FRAME : AS_frame { \ class AS_button_back: RscButton { idc = -1; - text = "Back"; + text = $STR_UI_MENU_BACK; x = 0.61 * safezoneW + safezoneX; y = 0.251941 * safezoneH + safezoneY; w = 0.06 * safezoneW; diff --git a/AntistasiOfficial.Altis/description.ext b/AntistasiOfficial.Altis/description.ext index fe2100cf..2d3f840b 100644 --- a/AntistasiOfficial.Altis/description.ext +++ b/AntistasiOfficial.Altis/description.ext @@ -2,17 +2,21 @@ #include "dialogs.hpp" author="Barbolani"; -OnLoadName = "Antistasi - modified 1.7.18"; +OnLoadName = $STR_MISSION_NAME_EXT; OnLoadMission = "Be a Resistance Leader - Be a Hero"; -//loadScreen = "pic.paa"; +loadScreen = "pic.paa"; overviewText = "Be the Resistance Leader. Fight against a superior enemy in technology, number, assets and vehicles. Use guerrilla tactics in a totally dynamic world, with around 18 sidemissions, everywhere, anytime, anything."; -//overviewPicture = "pic.paa"; +overviewPicture = "pic.paa"; allowFunctionsLog = 1; enableDebugConsole = 1; //allowFunctionsRecompile = 1; +//Load CBA settings if CBA is not attached in the editor +/*Check it here: https://github.com/CBATeam/CBA_A3/wiki/CBA-Settings-System */ +cba_settings_hasSettingsFile = 1; + respawn = "BASE"; respawnDelay = 30; respawnVehicleDelay = 120; @@ -45,7 +49,7 @@ class Header { gameType = COOP; minplayers=1; -maxplayers=50; +maxplayers=52; }; class CfgSounds @@ -307,40 +311,80 @@ class CfgDebriefing class Params { class AS_enableCampaignReset { - title = "Ability to start a fresh campaign"; + title = $STR_DES_ATSAFC; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 0; + typeName = "BOOL"; + force = 1; + }; + class AS_enableSwitchComm { + title = $STR_DES_ESWCMD; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "BOOL"; force = 1; }; - class AS_param_useJNA { - title = "Use customized arsenal by Jeroen Not"; + class AS_enableServerMember { + title = $STR_DES_ESRMBR; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 1; typeName = "BOOL"; force = 1; }; //added by Fireman 12/08/2017 class AS_param_tkPenalty { - title = "Punish people for teamkilling"; + title = $STR_DES_PPFT; values[] = {0,1}; - texts[] = {"Off","On"}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; default = 0; typeName = "BOOL"; force = 1; }; class AS_param_onlyPermanentMembers { - title = "Only permanent members are eligible for commandership at start"; - values[] = {0,1}; - texts[] = {"Off","On"}; - default = 1; - }; - #include "aceSettings.hpp" + title = $STR_DES_OPMAEFCAS; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 1; + }; + class AS_enableVCOM { + title = $STR_DES_ENVCOMAI; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 0; + typeName = "BOOL"; + force = 1; + }; + class AS_autosave { + title = $STR_DES_AUTOSAVE; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 0; + typeName = "BOOL"; + force = 1; + }; + class AS_loadprofilesave { + title = $STR_DES_LOADPROFILESAVE; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 0; + typeName = "BOOL"; + force = 1; + }; + class AS_saveprofilesave { + title = $STR_DES_SAVEPROFILESAVE; + values[] = {0,1}; + texts[] = {$STR_DES_OFF,$STR_DES_ON}; + default = 0; + typeName = "BOOL"; + force = 1; + }; + //#include "aceSettings.hpp" //TODO to be decommissioned }; class CfgFunctions { #include "Functions\functionList.hpp" #include "JeroenArsenal\functions.hpp" -}; \ No newline at end of file +}; diff --git a/AntistasiOfficial.Altis/destroyCheck.sqf b/AntistasiOfficial.Altis/destroyCheck.sqf index 9a93b75e..2fe10413 100644 --- a/AntistasiOfficial.Altis/destroyCheck.sqf +++ b/AntistasiOfficial.Altis/destroyCheck.sqf @@ -7,7 +7,7 @@ while {spawner getVariable _marker} do { _name = [_marker] call AS_fnc_localizar; destroyedCities pushBack _marker; publicVariable "destroyedCities"; - [["TaskFailed", ["", format ["%1 Destroyed",_name]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + [_name,{["TaskFailed", ["", format [localize "STR_NTS_DESTR", _this]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; if (_marker in power) then {[_marker] remoteExec ["AS_fnc_powerReorg",2]}; }; diff --git a/AntistasiOfficial.Altis/dialogs.hpp b/AntistasiOfficial.Altis/dialogs.hpp index 66c3f001..d3b87ff5 100644 --- a/AntistasiOfficial.Altis/dialogs.hpp +++ b/AntistasiOfficial.Altis/dialogs.hpp @@ -8,18 +8,18 @@ class HQ_menu { AS_BOX_D(BOX_H_8); - AS_FRAME_D(FRAME_H_8, "FIA HQ Options - Commander Only"); + AS_FRAME_D(FRAME_H_8, $STR_D_FIA_HQOCO); BTN_BACK(A_CLOSE); #define STR_HQ_FIA "if (activeBE) then {[] remoteExec [""fnc_BE_buyUpgrade"", 2]} else {closeDialog 0; [] call FIAskillAdd;}" - BTN_L1(-1, "Grab 100 € from Pool", "", "if (isMultiPlayer) then {nul=call stavrosSteal} else {hint ""This function is MP only""};"); - BTN_L2(-1, "Manage Garrisons", "", "closeDialog 0; nul=CreateDialog ""garrison_menu"";"); - BTN_L3(-1, "Move HQ to another Zone", "", "closeDialog 0; [] spawn moveHQ;"); + BTN_L1(-1, $STR_D_GRAB_FP, "", "if (isMultiPlayer) then {nul=call stavrosSteal} else {hint localize ""STR_DH_TFIMPO""};"); + BTN_L2(-1, $STR_D_MANGE_GAR, "", "closeDialog 0; nul=CreateDialog ""garrison_menu"";"); + BTN_L3(-1, $STR_D_MOVE_HQ_TAZ, "", "closeDialog 0; [] spawn moveHQ;"); - BTN_R1(-1, "Ingame Member's List", "", "if (isMultiplayer) then {[] execVM ""OrgPlayers\membersList.sqf""} else {hint ""This function is MP only""};"); - BTN_R2(109, "Train FIA", "", STR_HQ_FIA); - BTN_R3(-1, "Rebuild Assets", "Cost: 5.000 €", "closeDialog 0; [] execVM ""rebuildAssets.sqf"";"); + BTN_R1(-1, $STR_D_INGAME_ML, "", "if (isMultiplayer) then {[] execVM ""OrgPlayers\membersList.sqf""} else {hint localize ""STR_DH_TFIMPO""};"); + BTN_R2(109, $STR_D_TRAIN_FIA, "", STR_HQ_FIA); + BTN_R3(-1, $STR_D_BEBUILD_ASSE, "Cost: 5.000 €", "closeDialog 0; [] execVM ""rebuildAssets.sqf"";"); }; }; @@ -32,20 +32,20 @@ class unit_recruit { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Recruitment Options"); + AS_FRAME_D(FRAME_H_10, $STR_D_RECRU_OPT); BTN_BACK(A_CLOSE); - BTN_L1(104, "Recruit Militiaman", "", "[guer_sol_RFL] spawn reinfPlayer"); - BTN_L2(105, "Recruit Autorifleman", "", "[guer_sol_AR] spawn reinfPlayer"); - BTN_L3(106, "Recruit Medic", "", "[guer_sol_MED] spawn reinfPlayer"); - BTN_L4(110, "Recruit Marksman", "", "[guer_sol_MRK] spawn reinfPlayer"); + BTN_L1(104, $STR_D_RECRU_MIL, "", "[guer_sol_RFL] spawn reinfPlayer"); + BTN_L2(105, $STR_D_RECRU_AURI, "", "[guer_sol_AR] spawn reinfPlayer"); + BTN_L3(106, $STR_D_RECRU_MEDIC, "", "[guer_sol_MED] spawn reinfPlayer"); + BTN_L4(110, $STR_D_RECRU_MARSKMAN, "", "[guer_sol_MRK] spawn reinfPlayer"); - BTN_R1(107, "Recruit Engineer", "", "[guer_sol_ENG] spawn reinfPlayer"); - BTN_R2(109, "Recruit Grenadier", "", "[guer_sol_GL] spawn reinfPlayer"); - BTN_R3(108, "Recruit Bomb Specialist", "", "[guer_sol_EXP] spawn reinfPlayer"); - BTN_R4(111, "Recruit AT", "", "[guer_sol_LAT] spawn reinfPlayer"); + BTN_R1(107, $STR_D_RECRU_ENGI, "", "[guer_sol_ENG] spawn reinfPlayer"); + BTN_R2(109, $STR_D_RECRU_GREN, "", "[guer_sol_GL] spawn reinfPlayer"); + BTN_R3(108, $STR_D_RECRU_BOOM_S, "", "[guer_sol_EXP] spawn reinfPlayer"); + BTN_R4(111, $STR_D_RECRU_AT, "", "[guer_sol_LAT] spawn reinfPlayer"); - BTN_M(BTN_Y_5, 112, "Recruit AA", "", "[""Soldier_AA""] spawn reinfPlayer"); + BTN_M(BTN_Y_5, 112, $STR_D_RECRU_AA, "", "[""Soldier_AA""] spawn reinfPlayer"); }; }; @@ -59,20 +59,20 @@ class squad_recruit { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Squad Recruitment Options"); + AS_FRAME_D(FRAME_H_10, $STR_D_SQ_RECR_OP); BTN_BACK("closeDialog 0; createDialog ""radio_comm_commander"";"); - BTN_L1(104, "Recruit Inf. Squad", "", "closeDialog 0; [guer_grp_squad] spawn addFIAsquadHC"); - BTN_L2(105, "Recruit Inf. Team", "", "closeDialog 0; [guer_grp_team] spawn addFIAsquadHC"); - BTN_L3(106, "Recruit AT Squad", "", "closeDialog 0; [guer_grp_AT] spawn addFIAsquadHC"); - BTN_L4(110, "Recruit AA Truck", "", "closeDialog 0; [guer_stat_AA] spawn addFIAsquadHC"); + BTN_L1(104, $STR_D_RECRU_INF_SQ, "", "closeDialog 0; [guer_grp_squad] spawn addFIAsquadHC"); + BTN_L2(105, $STR_D_RECRU_INF_TE, "", "closeDialog 0; [guer_grp_team] spawn addFIAsquadHC"); + BTN_L3(106, $STR_D_RECRU_AT_SQ, "", "closeDialog 0; [guer_grp_AT] spawn addFIAsquadHC"); + BTN_L4(110, $STR_D_RECRU_AA_TR, "", "closeDialog 0; [guer_stat_AA] spawn addFIAsquadHC"); - BTN_R1(107, "Recruit Sniper Team", "", "closeDialog 0; [guer_grp_sniper] spawn addFIAsquadHC"); - BTN_R2(109, "Recruit AT Truck", "", "closeDialog 0; [guer_stat_AT] spawn addFIAsquadHC"); - BTN_R3(108, "Recruit Sentry", "", "closeDialog 0; [guer_grp_sentry] spawn addFIAsquadHC"); - BTN_R4(111, "Recruit Mortar Team", "", "closeDialog 0; [guer_stat_mortar] spawn addFIAsquadHC"); + BTN_R1(107, $STR_D_RECRU_SNI_TEAM, "", "closeDialog 0; [guer_grp_sniper] spawn addFIAsquadHC"); + BTN_R2(109, $STR_D_RECRU_AT_TR, "", "closeDialog 0; [guer_stat_AT] spawn addFIAsquadHC"); + BTN_R3(108, $STR_D_RECRU_SEN, "", "closeDialog 0; [guer_grp_sentry] spawn addFIAsquadHC"); + BTN_R4(111, $STR_D_RECRU_MOR_TEAM, "", "closeDialog 0; [guer_stat_mortar] spawn addFIAsquadHC"); - BTN_M(BTN_Y_5, 112, "Recruit Engineers", "", "closeDialog 0; [""delete""] spawn mineDialog;"); + BTN_M(BTN_Y_5, 112, $STR_D_RECRU_ENGIN, "", "closeDialog 0; [""delete""] spawn mineDialog;"); }; }; @@ -86,20 +86,20 @@ class buy_vehicle { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Purchase Military Vehicle"); + AS_FRAME_D(FRAME_H_10, $STR_D_PUR_MIV); BTN_BACK("closeDialog 0; createDialog ""vehicle_option"";"); - BTN_L1(104, "Buy Quadbike", "", "closedialog 0; [vfs select 3] call addFIAveh"); - BTN_L2(105, "Buy Offroad/UAZ", "", "closedialog 0; [vfs select 4] call addFIAveh"); - BTN_L3(106, "Buy Truck", "", "closedialog 0; [vfs select 5] call addFIAveh"); - BTN_L4(110, "Buy Static AT", "", "closedialog 0; [vfs select 9] call addFIAveh"); + BTN_L1(104, $STR_D_BUY_QUA, "", "closedialog 0; [vfs select 3] call addFIAveh"); + BTN_L2(105, $STR_D_BUY_OR_UAZ, "", "closedialog 0; [vfs select 4] call addFIAveh"); + BTN_L3(106, $STR_D_BUY_TRU, "", "closedialog 0; [vfs select 5] call addFIAveh"); + BTN_L4(110, $STR_D_BUY_TRUC, "", "closedialog 0; [vfs select 9] call addFIAveh"); - BTN_R1(107, "Buy Armed Offroad", "", "closedialog 0; [vfs select 6] call addFIAveh"); - BTN_R2(109, "Buy Mortar", "", "closedialog 0; [vfs select 8] call addFIAveh"); - BTN_R3(108, "Buy MG", "", "closedialog 0; [vfs select 7] call addFIAveh"); - BTN_R4(111, "Buy Static AA", "", "closedialog 0; [vfs select 10] call addFIAveh"); + BTN_R1(107, $STR_D_BUY_ARM_OR, "", "closedialog 0; [vfs select 6] call addFIAveh"); + BTN_R2(109, $STR_D_BUY_MOR, "", "closedialog 0; [vfs select 8] call addFIAveh"); + BTN_R3(108, $STR_D_BUY_MG, "", "closedialog 0; [vfs select 7] call addFIAveh"); + BTN_R4(111, $STR_D_BUY_ST_AA, "", "closedialog 0; [vfs select 10] call addFIAveh"); - BTN_M(BTN_Y_5, 112, "Buy APC", "", "if (activeAFRF) then {if (player == Slowhand) then {closeDialog 0; [vfs select 11] call addFIAveh;} else {hint ""Only Player Commander has access to this function""};}else {hint ""RHS exclusive for now""};"); + BTN_M(BTN_Y_5, 112, $STR_D_BUY_APC, "", "if (activeAFRF) then {if (player == Slowhand) then {closeDialog 0; [vfs select 11] call addFIAveh;} else {hint localize ""STR_DH_OPCHATTF""};}else {hint localize ""STR_DH_RHSEFN""};"); }; }; @@ -113,12 +113,12 @@ class first_load { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Load previous session?"); + AS_FRAME_D(FRAME_H_2, $STR_D_LOAD_PS); #define STR_LOAD_YES "closeDialog 0; if ((player == Slowhand) and (isNil ""placementDone"")) then {[] remoteExec [""AS_fnc_loadGame"",2];placementDone = true; publicVariable 'placementDone';};" - BTN_L1(-1,"YES", "", STR_LOAD_YES); - BTN_R1(-1,"NO", "", A_CLOSE); + BTN_L1(-1,$STR_D_YES, "", STR_LOAD_YES); + BTN_R1(-1,$STR_D_NO, "", A_CLOSE); }; }; @@ -132,12 +132,12 @@ class init_menu { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Enable Switch Commander?"); + AS_FRAME_D(FRAME_H_4, $STR_D_ENA_SW_CM); - BTN_L1(-1,"YES", "", "switchCom = true; publicVariable ""switchCom""; hint ""Switch Commander Enabled\n\nGame will auto assign Commander position to the highest ranked player"";"); - BTN_R1(-1,"NO", "", "switchCom = false; publicVariable ""switchCom""; hint ""Switch Commander Disabled\n\nGame will only assign Commander position upon Commander disconnection"";"); + BTN_L1(-1,$STR_D_YES, "", "switchCom = true; publicVariable ""switchCom""; hint localize ""STR_DH_SCEGWASCPTTHRP"";"); + BTN_R1(-1,$STR_D_NO, "", "switchCom = false; publicVariable ""switchCom""; hint localize ""STR_DH_SCDGWOACPUCD"";"); - BTN_M(BTN_Y_2, -1, "Done", "", "if (!isNil ""switchCom"") then {closedialog 0; [] execVM ""Dialogs\membersMenu.sqf"";} else {hint ""Select an option first""};"); + BTN_M(BTN_Y_2, -1, $STR_D_DONE, "", "if (!isNil ""switchCom"") then {closedialog 0; [] execVM ""Dialogs\membersMenu.sqf"";} else {hint localize ""STR_DH_SAOF""};"); }; }; @@ -150,16 +150,16 @@ class build_menu { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "Building Options"); + AS_FRAME_D(FRAME_H_6, $STR_D_BUI_OP); BTN_BACK("closeDialog 0; if (player == Slowhand) then {createDialog ""radio_comm_commander""} else {createDialog ""radio_comm_player""};"); - BTN_L1(-1,"O.Post - Roadblock", "", "closeDialog 0; [""create""] spawn puestoDialog"); - BTN_L2(-1,"Build Minefield", "", "closeDialog 0; createDialog ""minebuild_menu"";"); + BTN_L1(-1,$STR_D_OPS_RB, "", "closeDialog 0; [""create""] spawn puestoDialog"); + BTN_L2(-1,$STR_D_BUI_MF, "", "closeDialog 0; createDialog ""minebuild_menu"";"); - BTN_R1(-1,"O.Post-Roadblock Delete", "", "closeDialog 0; [""delete""] spawn puestoDialog"); - BTN_R2(-1,"Manage Camps", "Establish/Abandon Camps", "closeDialog 0; createDialog ""camp_dialog"";"); + BTN_R1(-1,$STR_D_OPS_RB_DEL, "", "closeDialog 0; [""delete""] spawn puestoDialog"); + BTN_R2(-1,$STR_D_MANA_CAMP, $STR_D_EAC, "closeDialog 0; createDialog ""camp_dialog"";"); - BTN_M(BTN_Y_3, -1, "HQ Fortifications", "", "closeDialog 0; createDialog ""HQ_fort_dialog"";"); + BTN_M(BTN_Y_3, -1, $STR_D_HQ_FORT, "", "closeDialog 0; createDialog ""HQ_fort_dialog"";"); }; }; @@ -172,26 +172,26 @@ class mission_menu { AS_BOX_D(BOX_H_8); - AS_FRAME_D(FRAME_H_8, "Available Missions"); + AS_FRAME_D(FRAME_H_8, $STR_D_AV_MIS); BTN_BACK(A_CLOSE); - #define STR_MIS_MIL "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_M""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_CIV "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_C""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_EXP "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_E""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_LOG "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""LOG""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_DES "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""DES""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_RES "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""RES""],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" - #define STR_MIS_PRO "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""PR"",false,true],""missionrequest""] call BIS_fnc_MP} else {hint ""Only Player Commander has access to this function""};" + #define STR_MIS_MIL "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_M""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_CIV "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_C""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_EXP "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""FND_E""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_LOG "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""LOG""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_DES "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""DES""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_RES "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""RES""],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" + #define STR_MIS_PRO "closeDialog 0; if ((player == Slowhand) or (not(isPlayer Slowhand))) then {[[""PR"",false,true],""missionrequest""] call BIS_fnc_MP} else {hint localize ""STR_DH_OPCHATTF""};" - BTN_L1(-1,"Military Contact", "", STR_MIS_MIL); - BTN_L2(-1,"Civilian Contact", "", STR_MIS_CIV); - BTN_L3(-1,"Sketchy Irishman", "", STR_MIS_EXP); + BTN_L1(-1,$STR_D_MI_CON, "", STR_MIS_MIL); + BTN_L2(-1,$STR_D_CI_CON, "", STR_MIS_CIV); + BTN_L3(-1,$STR_D_SKE_IRI, "", STR_MIS_EXP); - BTN_R1(-1,"Logistics Mission", "", STR_MIS_LOG); - BTN_R2(-1,"Destroy Mission", "", STR_MIS_DES); - BTN_R3(-1,"Rescue Mission", "", STR_MIS_RES); + BTN_R1(-1,$STR_D_LOG_MI, "", STR_MIS_LOG); + BTN_R2(-1,$STR_D_DES_MI, "", STR_MIS_DES); + BTN_R3(-1,$STR_D_RES_MI, "", STR_MIS_RES); - BTN_M(BTN_Y_4, -1, "Propaganda", "", STR_MIS_PRO); + BTN_M(BTN_Y_4, -1, $STR_D_PROPA, "", STR_MIS_PRO); }; }; @@ -204,20 +204,20 @@ class NATO_Options { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Ask NATO for"); + AS_FRAME_D(FRAME_H_10, $STR_D_ASK_NI); BTN_BACK("closeDialog 0; createDialog ""radio_comm_commander"";"); - BTN_L1(-1,"Attack Mission", "Cost: 20 points", "closeDialog 0; [""NATOCA""] execVM ""NatoDialog.sqf"";"); - BTN_L2(-1,"Armored Column", "Cost: 20 points", "closeDialog 0; [""NATOArmor""] execVM ""NatoDialog.sqf"";"); - BTN_L3(-1,"Artillery", "Cost: 10 points", "closeDialog 0; [""NATOArty""] execVM ""NatoDialog.sqf"";"); - BTN_L4(-1,"Roadblock", "Cost: 10 points", "closeDialog 0; [""NATORoadblock""] execVM ""NatoDialog.sqf"";"); - BTN_L5(-1, "NATO QRF", "Cost: 10 points", "closeDialog 0; [""NATOQRF""] execVM ""NatoDialog.sqf"";"); //Stef 30-08 + BTN_L1(-1,$STR_D_ATT_MI, $STR_D_COST20, "closeDialog 0; [""NATOCA""] execVM ""NatoDialog.sqf"";"); + BTN_L2(-1,$STR_D_ARM_CO, $STR_D_COST20, "closeDialog 0; [""NATOArmor""] execVM ""NatoDialog.sqf"";"); + BTN_L3(-1,$STR_D_ARTI, $STR_D_COST10, "closeDialog 0; [""NATOArty""] execVM ""NatoDialog.sqf"";"); + BTN_L4(-1,$STR_D_ROADB, $STR_D_COST10, "closeDialog 0; [""NATORoadblock""] execVM ""NatoDialog.sqf"";"); + BTN_L5(-1, $STR_D_NATO_QRF, $STR_D_COST10, "closeDialog 0; [""NATOQRF""] execVM ""NatoDialog.sqf"";"); //Stef 30-08 - BTN_R1(-1,"NATO UAV", "Cost: 10 points", "closeDialog 0; [""NATOUAV""] execVM ""NatoDialog.sqf"";"); - BTN_R2(-1,"Ammodrop", "Cost: 5 points", "closeDialog 0; [""NATOAmmo""] execVM ""NatoDialog.sqf"";"); - BTN_R3(-1,"CAS Support", "Cost: 10 points", "closeDialog 0; [""NATOCAS""] execVM ""NatoDialog.sqf"";"); - BTN_R4(-1,"Bomb Run", "Cost: 10 points", "closeDialog 0; createDialog ""carpet_bombing"";"); - BTN_R5(-1,"Weaken OPFOR", "Cost: 100 points", "closeDialog 0; [""NATORED""] execVM ""NatoDialog.sqf"";"); + BTN_R1(-1,$STR_D_NATO_UAV, $STR_D_COST10, "closeDialog 0; [""NATOUAV""] execVM ""NatoDialog.sqf"";"); + BTN_R2(-1,$STR_D_AMMD, $STR_D_COST5, "closeDialog 0; [""NATOAmmo""] execVM ""NatoDialog.sqf"";"); + BTN_R3(-1,$STR_D_CAS_SU, $STR_D_COST10, "closeDialog 0; [""NATOCAS""] execVM ""NatoDialog.sqf"";"); + BTN_R4(-1,$STR_D_BOMBR, $STR_D_COST10, "closeDialog 0; createDialog ""carpet_bombing"";"); + BTN_R5(-1,$STR_D_WE_OPFOR, $STR_D_COST100, "closeDialog 0; [""NATORED""] execVM ""NatoDialog.sqf"";"); //BTN_M(BTN_Y_5, -1, "NATO QRF", "Cost: 10 points", "closeDialog 0; [""NATOQRF""] execVM ""NatoDialog.sqf"";"); removed to make it even left and right @@ -235,11 +235,11 @@ class garrison_menu { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Garrison Menu"); + AS_FRAME_D(FRAME_H_2, $STR_D_GAR_MENU); BTN_BACK("closeDialog 0; createDialog ""HQ_menu"";"); - BTN_L1(-1,"Recruit Garrison", "", "closeDialog 0; [""add""] spawn garrisonDialog"); - BTN_R1(-1,"Remove Garrison", "", "closeDialog 0; [""rem""] spawn garrisonDialog"); + BTN_L1(-1,$STR_D_RECR_GAR, "", "closeDialog 0; [""add""] spawn garrisonDialog"); + BTN_R1(-1,$STR_D_REMO_GAR, "", "closeDialog 0; [""rem""] spawn garrisonDialog"); }; }; @@ -253,18 +253,18 @@ class garrison_recruit { AS_BOX_D(BOX_H_8); - AS_FRAME_D(FRAME_H_8, "Garrison Recruitment Options"); + AS_FRAME_D(FRAME_H_8, $STR_D_GAR_REC_OP); BTN_BACK("closeDialog 0; createDialog ""garrison_menu"";"); - BTN_L1(104, "Recruit Militiaman", "", "[guer_sol_RFL] call garrisonAdd"); - BTN_L2(105, "Recruit Autorifleman", "", "[guer_sol_AR] call garrisonAdd"); - BTN_L3(106, "Recruit Medic", "", "[guer_sol_MED] call garrisonAdd"); - BTN_L4(110, "Recruit Marksman", "", "[guer_sol_MRK] call garrisonAdd"); + BTN_L1(104, $STR_D_REC_MILI, "", "[guer_sol_RFL] call garrisonAdd"); + BTN_L2(105, $STR_D_REC_AUTORIL, "", "[guer_sol_AR] call garrisonAdd"); + BTN_L3(106, $STR_D_REC_MED, "", "[guer_sol_MED] call garrisonAdd"); + BTN_L4(110, $STR_D_REC_MARKMAN, "", "[guer_sol_MRK] call garrisonAdd"); - BTN_R1(107, "Recruit Squad Leader", "", "[guer_sol_SL] call garrisonAdd"); - BTN_R2(109, "Recruit Grenadier", "", "[guer_sol_GL] call garrisonAdd"); - BTN_R3(108, "Recruit Mortar", "", "[guer_sol_UN] call garrisonAdd"); - BTN_R4(111, "Recruit AT", "", "[guer_sol_LAT] call garrisonAdd"); + BTN_R1(107, $STR_D_REC_SQLEAD, "", "[guer_sol_SL] call garrisonAdd"); + BTN_R2(109, $STR_D_REC_GRENA, "", "[guer_sol_GL] call garrisonAdd"); + BTN_R3(108, $STR_D_REC_MORTAR, "", "[guer_sol_UN] call garrisonAdd"); + BTN_R4(111, $STR_D_REC_AT, "", "[guer_sol_LAT] call garrisonAdd"); }; }; @@ -278,14 +278,14 @@ class fps_limiter { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "FPS Limiter"); + AS_FRAME_D(FRAME_H_2, $STR_D_FPSLI); BTN_BACK("closeDialog 0; createDialog ""game_options_commander"";"); #define STR_FPS_PLUS "[[1],""AS_fnc_fpsChange""] call BIS_fnc_MP;" #define STR_FPS_MINUS "[[-1],""AS_fnc_fpsChange""] call BIS_fnc_MP;" - BTN_L1(-1, "+1 FPS Limit", "", STR_FPS_PLUS); - BTN_R1(-1, "-1 FPS Limit", "", STR_FPS_MINUS); + BTN_L1(-1, $STR_D_FPSLI1P, "", STR_FPS_PLUS); + BTN_R1(-1, $STR_D_FPSLI1M, "", STR_FPS_MINUS); }; }; @@ -298,14 +298,14 @@ class spawn_config { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Spawn Distance Config"); + AS_FRAME_D(FRAME_H_2, $STR_D_SPAWND); BTN_BACK("closeDialog 0; createDialog ""game_options_commander"";"); - #define STR_DIST_PLUS "if (distanciaSPWN < 2500) then {distanciaSPWN = (distanciaSPWN + 100) min 2500; publicVariable ""distanciaSPWN""; hint format [""Spawn Distance Set to %1 meters. Be careful, this may affect game performance"",distanciaSPWN];};" - #define STR_DIST_MINUS "if (distanciaSPWN > 1000) then {distanciaSPWN = (distanciaSPWN - 100) max 100; publicVariable ""distanciaSPWN""; hint format [""Spawn Distance Set to %1 meters. Be careful, this may affect game performance"",distanciaSPWN];};" + #define STR_DIST_PLUS "if (distanciaSPWN < 2500) then {distanciaSPWN = (distanciaSPWN + 100) min 2500; publicVariable ""distanciaSPWN""; hint format [localize ""STR_DH_SDSTMBCTMAGP"",distanciaSPWN];};" + #define STR_DIST_MINUS "if (distanciaSPWN > 1000) then {distanciaSPWN = (distanciaSPWN - 100) max 100; publicVariable ""distanciaSPWN""; hint format [localize ""STR_DH_SDSTMBCTMAGP"",distanciaSPWN];};" - BTN_L1(-1, "+100 Spawn Dist.", "", STR_DIST_PLUS); - BTN_R1(-1, "-100 Spawn Dist.", "", STR_DIST_MINUS); + BTN_L1(-1, $STR_D_SPAWND100P, "", STR_DIST_PLUS); + BTN_R1(-1, $STR_D_SPAWND100M, "", STR_DIST_MINUS); }; }; @@ -318,14 +318,14 @@ class civ_config { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Civ Presence Config"); + AS_FRAME_D(FRAME_H_2, $STR_D_CIV_PERCON); BTN_BACK("closeDialog 0; createDialog ""game_options_commander"";"); - #define STR_CIV_PLUS "if (civPerc < 1) then {civPerc = (civPerc + 0.01) min 1; publicVariable ""civPerc""; hint format [""Civilian Percentage Set to %1 percent"",civPerc * 100];};" - #define STR_CIV_MINUS "if (civPerc > 0) then {civPerc = (civPerc - 0.01) max 0; publicVariable ""civPerc""; hint format [""Civilian Percentage Set to %1 percent"",civPerc * 100];};" + #define STR_CIV_PLUS "if (civPerc < 1) then {civPerc = (civPerc + 0.01) min 1; publicVariable ""civPerc""; hint format [localize ""STR_DH_CPSTP"",civPerc * 100];};" + #define STR_CIV_MINUS "if (civPerc > 0) then {civPerc = (civPerc - 0.01) max 0; publicVariable ""civPerc""; hint format [localize ""STR_DH_CPSTP"",civPerc * 100];};" - BTN_L1(-1, "+1% Civ Spawn.", "", STR_CIV_PLUS); - BTN_R1(-1, "-1% Civ Spawn.", "", STR_CIV_MINUS); + BTN_L1(-1, $STR_D_CIV1PS, "", STR_CIV_PLUS); + BTN_R1(-1, $STR_D_CIV1MS, "", STR_CIV_MINUS); }; }; @@ -339,14 +339,14 @@ class squad_manager { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "HC Squad Options"); + AS_FRAME_D(FRAME_H_4, $STR_D_HQ_SQ_OP); BTN_BACK("closeDialog 0; createDialog ""radio_comm_commander"";"); - BTN_L1(-1, "Squad Add Vehicle", "", "closeDialog 0; [] execVM ""REINF\addSquadVeh.sqf"";"); - BTN_L2(-1, "Squad Vehicle Stats", "", "[""stats""] execVM ""REINF\vehStats.sqf"";"); + BTN_L1(-1, $STR_D_SQ_ADDV, "", "closeDialog 0; [] execVM ""REINF\addSquadVeh.sqf"";"); + BTN_L2(-1, $STR_D_SQ_VS, "", "[""stats""] execVM ""REINF\vehStats.sqf"";"); - BTN_R1(-1, "Mount / Dismount", "", "[""mount""] execVM ""REINF\vehStats.sqf"""); - BTN_R2(-1, "Static Autotarget", "", "closeDialog 0; [] execVM ""AI\staticAutoT.sqf"";"); + BTN_R1(-1, $STR_D_MO_DISMO, "", "[""mount""] execVM ""REINF\vehStats.sqf"""); + BTN_R2(-1, $STR_D_ST_AUT_TAR, "", "closeDialog 0; [] execVM ""AI\staticAutoT.sqf"";"); }; }; @@ -359,11 +359,11 @@ class veh_query { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Add Vehicle to Squad?"); + AS_FRAME_D(FRAME_H_2, $STR_D_ADD_VSSQ); BTN_BACK("closeDialog 0; vehQuery = nil; [] execVM ""Dialogs\squad_recruit.sqf"";"); - BTN_L1(104, "YES", "", "closeDialog 0; vehQuery = true"); - BTN_R1(105, "NO", "", "closeDialog 0; vehQuery = nil"); + BTN_L1(104, $STR_D_YES, "", "closeDialog 0; vehQuery = true"); + BTN_R1(105, $STR_D_NO, "", "closeDialog 0; vehQuery = nil"); }; }; @@ -376,14 +376,14 @@ class player_money { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Player and Money Interaction"); + AS_FRAME_D(FRAME_H_4, $STR_D_PNMI); BTN_BACK("closeDialog 0; if (player == Slowhand) then {createDialog ""radio_comm_commander""} else {createDialog ""radio_comm_player""};"); - BTN_L1(-1, "Add Server Member", "", "if (isMultiplayer) then {closeDialog 0; [""add""] call memberAdd;} else {hint ""This function is MP only""};"); - BTN_L2(-1, "Remove Server Member", "", "if (isMultiplayer) then {closeDialog 0; [""remove""] call memberAdd;} else {hint ""This function is MP only""};"); + BTN_L1(-1, $STR_D_ADD_SM, "", "if (isMultiplayer) then {closeDialog 0; [""add""] call memberAdd;} else {hint localize ""STR_DH_TFIMPO""};"); + BTN_L2(-1, $STR_D_REM_SM, "", "if (isMultiplayer) then {closeDialog 0; [""remove""] call memberAdd;} else {hint localize ""STR_DH_TFIMPO""};"); - BTN_R1(-1, "Donate 100 € to player", "", "[true] call donateMoney;"); - BTN_R2(-1, "Donate 100 € to FIA", "", "[] call donateMoney;"); + BTN_R1(-1, $STR_D_DONP, "", "[true] call donateMoney;"); + BTN_R2(-1, $STR_D_DONFI, "", "[] call donateMoney;"); }; }; @@ -396,12 +396,12 @@ class members_menu { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Enable Server Membership?"); + AS_FRAME_D(FRAME_H_4, $STR_D_EN_SM); - BTN_L1(-1, "YES", "", "membersPool = []; {membersPool pushBack (getPlayerUID _x)} forEach playableUnits; publicVariable ""membersPool""; hint ""Server Membership Enabled.\n\nAll the present players have been added to the Member's List.\n\nNon-members cannot use the HQ Ammobox and cannot be commanders, even with Switch Commander enabled.\n\nIf you load a session with this feature disabled, it will change to disabled.\n\nUse this option for Open Server Environments"";"); - BTN_R1(-1, "NO", "", "membersPool = []; publicVariable ""membersPool""; hint ""Server Membership Disabled.\n\nAnyone can use the HQ Ammobox and become Commander (if Switch Commander is enabled).\n\nIf you load a session with this feature enabled, it will become enabled.\n\nUse this option for Private Server environments."";"); + BTN_L1(-1, $STR_D_YES, "", "membersPool = []; {membersPool pushBack (getPlayerUID _x)} forEach playableUnits; publicVariable ""membersPool""; hint localize ""STR_DH_SMEATPP"";"); + BTN_R1(-1, $STR_D_NO, "", "membersPool = []; publicVariable ""membersPool""; hint localize ""STR_DH_EMDACUT"";"); - BTN_M(BTN_Y_2, -1, "Done", "", "if (!isNil ""membersPool"") then {closedialog 0; [] execVM ""Dialogs\firstLoad.sqf"";} else {hint ""Select an option first""};"); + BTN_M(BTN_Y_2, -1, $STR_D_DONE, "", "if (!isNil ""membersPool"") then {closedialog 0; [] execVM ""Dialogs\firstLoad.sqf"";} else {hint localize ""STR_DH_SAOF""};"); }; }; @@ -414,13 +414,13 @@ class vehicle_manager { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Vehicle Manager"); + AS_FRAME_D(FRAME_H_4, $STR_D_VHIL_MG); BTN_BACK("closeDialog 0; if (player == Slowhand) then {createDialog ""radio_comm_commander""} else {createDialog ""radio_comm_player""};"); - BTN_L1(-1, "Garage\Sell Vehicle", "", "closeDialog 0; createDialog ""garage_sell"";"); - BTN_R1(-1, "Vehicles and Squads", "", "closeDialog 0; if (player == Slowhand) then {createDialog ""squad_manager""} else {hint ""Only Player Commander has access to this function""};"); + BTN_L1(-1, $STR_D_GAR_SEll_VEH, "", "closeDialog 0; createDialog ""garage_sell"";"); + BTN_R1(-1, $STR_D_VEH_AND_SQ, "", "closeDialog 0; if (player == Slowhand) then {createDialog ""squad_manager""} else {hint localize ""STR_DH_OPCHATTF""};"); - BTN_M(BTN_Y_2, -1, "Unlock Vehicle", "", "closeDialog 0; if !(isMultiplayer) then {hint ""It's unlocked already.""} else {if (player != Slowhand) then {[false] call AS_fnc_unlockVehicle} else {[true] call AS_fnc_unlockVehicle};};"); + BTN_M(BTN_Y_2, -1, $STR_D_UN_VEH, "", "closeDialog 0; if !(isMultiplayer) then {hint localize ""STR_DH_IUA""} else {if (player != Slowhand) then {[false] call AS_fnc_unlockVehicle} else {[true] call AS_fnc_unlockVehicle};};"); }; }; @@ -434,11 +434,11 @@ class garage_sell { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Sell or Garage Vehicle"); + AS_FRAME_D(FRAME_H_2, $STR_D_SELL_GAR_VEH); BTN_BACK("closeDialog 0; createDialog ""vehicle_manager"";"); - BTN_L1(-1, "Garage Vehicle", "", "closeDialog 0; if (player != Slowhand) then {[false] call AS_fnc_garageVehicle} else {if (isMultiplayer) then {createDialog ""garage_check""} else {[true] call AS_fnc_garageVehicle}};"); - BTN_R1(-1, "Sell Vehicle", "", "closeDialog 0; if (player == Slowhand) then {[] call AS_fnc_sellVehicle} else {hint ""Only the Commander can sell vehicles""};"); + BTN_L1(-1, $STR_D_GAR_VEH, "", "closeDialog 0; if (player != Slowhand) then {[false] call AS_fnc_garageVehicle} else {if (isMultiplayer) then {createDialog ""garage_check""} else {[true] call AS_fnc_garageVehicle}};"); + BTN_R1(-1, $STR_D_SELL_VEH, "", "closeDialog 0; if (player == Slowhand) then {[] call AS_fnc_sellVehicle} else {hint localize ""STR_DH_OTCCSV""};"); }; }; @@ -451,11 +451,11 @@ class garage_check { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Personal or FIA Garage?"); + AS_FRAME_D(FRAME_H_2, $STR_D_PER_FIAG); BTN_BACK("closeDialog 0; createDialog ""garage_sell"";"); - BTN_L1(-1, "Personal Garage", "", "closeDialog 0; [false] call AS_fnc_garageVehicle;"); - BTN_R1(-1, "FIA Garage", "", "closeDialog 0; [true] call AS_fnc_garageVehicle;"); + BTN_L1(-1, $STR_D_PERG, "", "closeDialog 0; [false] call AS_fnc_garageVehicle;"); + BTN_R1(-1, $STR_D_FIAG, "", "closeDialog 0; [true] call AS_fnc_garageVehicle;"); }; }; @@ -468,11 +468,11 @@ class vehicle_option { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Buy Vehicle"); + AS_FRAME_D(FRAME_H_2, $STR_D_BUY_VH); BTN_BACK(A_CLOSE); - BTN_L1(-1, "Civilian Vehicle", "", "closeDialog 0; nul=[] execVM ""Dialogs\buy_vehicle_civ.sqf"";"); - BTN_R1(-1, "Military Vehicle", "", "closeDialog 0; nul=[] execVM ""Dialogs\buy_vehicle.sqf"";"); + BTN_L1(-1, $STR_D_CIV_VH, "", "closeDialog 0; nul=[] execVM ""Dialogs\buy_vehicle_civ.sqf"";"); + BTN_R1(-1, $STR_D_MIL_VH, "", "closeDialog 0; nul=[] execVM ""Dialogs\buy_vehicle.sqf"";"); }; }; @@ -485,13 +485,13 @@ class civ_vehicle { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Buy Civilian Vehicle"); + AS_FRAME_D(FRAME_H_4, $STR_D_BUY_CIV_VH); BTN_BACK("closeDialog 0; createDialog ""vehicle_option"";"); - BTN_L1(104, "Offroad", "", "closeDialog 0; [vfs select 0] call addFIAveh;"); - BTN_R1(105, "Truck", "", "closeDialog 0; [vfs select 1] call addFIAveh;"); + BTN_L1(104, $STR_D_OFFR, "", "closeDialog 0; [vfs select 0] call addFIAveh;"); + BTN_R1(105, $STR_D_TRUCK, "", "closeDialog 0; [vfs select 1] call addFIAveh;"); - BTN_M(BTN_Y_2, 106, "Helicopter", "", "closeDialog 0; [vfs select 2] call addFIAveh;"); + BTN_M(BTN_Y_2, 106, $STR_D_HELI, "", "closeDialog 0; [vfs select 2] call addFIAveh;"); }; }; @@ -504,13 +504,13 @@ class carpet_bombing { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Carpet Bombing Strike"); + AS_FRAME_D(FRAME_H_4, $STR_D_CA_BOOM_STR); BTN_BACK("closeDialog 0; createDialog ""NATO_Options"";"); - BTN_L1(-1, "HE Bombs", "Cost: 10 points", "closeDialog 0; [""HE""] execVM ""REINF\NATObomb.sqf"";"); - BTN_R1(-1, "Carpet Bombing", "Cost: 10 points", "closeDialog 0; [""CARPET""] execVM ""REINF\NATObomb.sqf"";"); + BTN_L1(-1, $STR_D_HE_BOMB, "Cost: 10 points", "closeDialog 0; [""HE""] execVM ""REINF\NATObomb.sqf"";"); + BTN_R1(-1, $STR_D_CA_BOOM, "Cost: 10 points", "closeDialog 0; [""CARPET""] execVM ""REINF\NATObomb.sqf"";"); - BTN_M(BTN_Y_2, -1, "NAPALM Bomb", "Cost: 10 points", "closeDialog 0; [""NAPALM""] execVM ""REINF\NATObomb.sqf"";"); + BTN_M(BTN_Y_2, -1, $STR_D_NAPALM_BOOM, "Cost: 10 points", "closeDialog 0; [""NAPALM""] execVM ""REINF\NATObomb.sqf"";"); }; }; @@ -524,14 +524,14 @@ class AI_management { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "AI Management"); + AS_FRAME_D(FRAME_H_4, $STR_D_AI_MENEG); BTN_BACK("closeDialog 0; if (player == Slowhand) then {createDialog ""radio_comm_commander""} else {createDialog ""radio_comm_player""};"); - BTN_L1(-1, "Temp. AI Control", "", "closeDialog 0; if ((count groupselectedUnits player > 0) and (count hcSelected player > 0)) exitWith {hint ""You must select from HC or Squad Bars, not both""}; if (count groupselectedUnits player == 1) then {[groupselectedUnits player] execVM ""REINF\controlunit.sqf""}; if (count hcSelected player == 1) then {[hcSelected player] execVM ""REINF\controlHCsquad.sqf"";};"); - BTN_L2(-1, "Auto Heal", "", "if (autoHeal) then {autoHeal = false; hint ""Auto Healing disabled"";} else {autoHeal = true; hint ""Auto Heal enabled""; [] execVM ""AI\autoHealFnc.sqf""}"); + BTN_L1(-1, $STR_D_TE_AI_CON, "", "closeDialog 0; if ((count groupselectedUnits player > 0) and (count hcSelected player > 0)) exitWith {hint localize ""STR_DH_YMSFHCOSBNB""}; if (count groupselectedUnits player == 1) then {[groupselectedUnits player] execVM ""REINF\controlunit.sqf""}; if (count hcSelected player == 1) then {[hcSelected player] execVM ""REINF\controlHCsquad.sqf"";};"); + BTN_L2(-1, $STR_D_AUTO_HEAL, "", "if (autoHeal) then {autoHeal = false; hint localize ""STR_DH_AHD"";} else {autoHeal = true; hint localize ""STR_DH_AHD""; [] execVM ""AI\autoHealFnc.sqf""}"); - BTN_R1(-1, "Auto Rearm", "", "closeDialog 0; if (count groupselectedUnits player == 0) then {(units group player) execVM ""AI\rearmCall.sqf""} else {(groupselectedUnits player) execVM ""AI\rearmCall.sqf""};"); - BTN_R2(-1, "Dismiss Units/Squads", "", "closeDialog 0; if (count groupselectedUnits player > 0) then {[groupselectedUnits player] execVM ""REINF\dismissPlayerGroup.sqf""} else {if (count (hcSelected player) > 0) then {[hcSelected player] execVM ""REINF\dismissSquad.sqf""}}; if ((count groupselectedUnits player == 0) and (count hcSelected player == 0)) then {hint ""No units or squads selected""}"); + BTN_R1(-1, $STR_D_AUTO_REARM, "", "closeDialog 0; if (count groupselectedUnits player == 0) then {(units group player) execVM ""AI\rearmCall.sqf""} else {(groupselectedUnits player) execVM ""AI\rearmCall.sqf""};"); + BTN_R2(-1, $STR_D_DIS_UNISQ, "closeDialog 0; if (count groupselectedUnits player > 0) then {[groupselectedUnits player] execVM ""REINF\dismissPlayerGroup.sqf""} else {if (count (hcSelected player) > 0) then {[hcSelected player] execVM ""REINF\dismissSquad.sqf""}}; if ((count groupselectedUnits player == 0) and (count hcSelected player == 0)) then {hint localize ""STR_DH_NUOSS""}"); }; }; @@ -545,7 +545,7 @@ class rounds_number { AS_BOX_D(BOX_H_8); - AS_FRAME_D(FRAME_H_8, "Select No. Rounds to be fired"); + AS_FRAME_D(FRAME_H_8, $STR_D_SN_RTBF); BTN_BACK(A_CLOSE); BTN_L1(-1, "1", "", "closeDialog 0; rondas = 1;"); @@ -570,11 +570,11 @@ class strike_type { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Select type of strike"); + AS_FRAME_D(FRAME_H_2, $STR_D_STOS); BTN_BACK(A_CLOSE); - BTN_L1(-1, "Single Point Strike", "", "closeDialog 0; tipoArty = ""NORMAL"";"); - BTN_R1(-1, "Barrage Strike", "", "closeDialog 0; tipoArty = ""BARRAGE"";"); + BTN_L1(-1, $STR_D_SINPS, "", "closeDialog 0; tipoArty = ""NORMAL"";"); + BTN_R1(-1, $STR_D_BARRS, "", "closeDialog 0; tipoArty = ""BARRAGE"";"); }; }; @@ -588,13 +588,13 @@ class mbt_type { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Select type ammo for the strike"); + AS_FRAME_D(FRAME_H_4, $STR_D_STAFTS); BTN_BACK(A_CLOSE); - BTN_L1(-1, "HE", "", "closeDialog 0; tipoMuni = bluArtyAmmoHE;"); - BTN_R1(-1, "Laser Guided", "", "closeDialog 0; tipoMuni = bluArtyAmmoLaser;"); + BTN_L1(-1, $STR_D_HE, "", "closeDialog 0; tipoMuni = bluArtyAmmoHE;"); + BTN_R1(-1, $STR_D_LAS_GUI, "", "closeDialog 0; tipoMuni = bluArtyAmmoLaser;"); - BTN_M(BTN_Y_2, -1, "Smoke", "", "closeDialog 0; tipoMuni = bluArtyAmmoSmoke;"); + BTN_M(BTN_Y_2, -1, $STR_D_SMOKE, "", "closeDialog 0; tipoMuni = bluArtyAmmoSmoke;"); }; }; @@ -607,11 +607,11 @@ class mortar_type { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Select Mortar Ammo"); + AS_FRAME_D(FRAME_H_2, $STR_D_SEMA); BTN_BACK(A_CLOSE); - BTN_L1(-1, "HE", "", "closeDialog 0; if (activeAFRF) then {tipoMuni = ""rhs_mag_3vo18_10""} else {tipoMuni = ""8Rnd_82mm_Mo_shells""};"); - BTN_R1(-1, "Smoke", "", "closeDialog 0; if (activeAFRF) then {tipoMuni = ""rhs_mag_3vs25m_10""} else {tipoMuni = ""8Rnd_82mm_Mo_Smoke_white""};"); + BTN_L1(-1, $STR_D_HE, "", "closeDialog 0; if (activeAFRF) then {tipoMuni = ""rhs_mag_3vo18_10""} else {tipoMuni = ""8Rnd_82mm_Mo_shells""};"); + BTN_R1(-1, $STR_D_SMOKE, "", "closeDialog 0; if (activeAFRF) then {tipoMuni = ""rhs_mag_3vs25m_10""} else {tipoMuni = ""8Rnd_82mm_Mo_Smoke_white""};"); }; }; @@ -625,11 +625,11 @@ class minebuild_menu { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Build Minefield"); + AS_FRAME_D(FRAME_H_2, $STR_D_BUI_MINF); BTN_BACK("closeDialog 0; createDialog ""build_menu"";"); - BTN_L1(-1, "APERS Mines", "", "closeDialog 0; [""APERSMine""] spawn mineDialog"); - BTN_R1(-1, "AT Mines", "", "closeDialog 0; [""ATMine""] spawn mineDialog"); + BTN_L1(-1, $STR_D_APERS_MIN, "", "closeDialog 0; [""APERSMine""] spawn mineDialog"); + BTN_R1(-1, $STR_D_AT_MIN, "", "closeDialog 0; [""ATMine""] spawn mineDialog"); }; }; @@ -643,11 +643,11 @@ class fasttravel_dialog // 340 { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Fast Travel"); + AS_FRAME_D(FRAME_H_2, $STR_D_FAST_TR); BTN_BACK("closeDialog 0; if (player == Slowhand) then {createDialog ""radio_comm_commander""} else {createDialog ""radio_comm_player""};"); - BTN_L1(-1, "Fast Travel (old)", "Targets: all FIA-controlled zones", "closeDialog 0; [] execVM ""fastTravelRadio.sqf"";"); - BTN_R1(-1, "Fast Travel (new)", "Only FIA camps and HQ", "closeDialog 0; [] spawn AS_fnc_fastTravel;"); + BTN_L1(-1, $STR_D_FAST_TRO, $STR_D_TAFIACZ, "closeDialog 0; [] execVM ""fastTravelRadio.sqf"";"); + BTN_R1(-1, $STR_D_FAST_TRN, $STR_D_OFIACNHQ, "closeDialog 0; [] spawn AS_fnc_fastTravel;"); }; }; @@ -661,13 +661,13 @@ class camp_dialog // 350 { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Camp Management"); + AS_FRAME_D(FRAME_H_4, $STR_D_CAMP_MG); BTN_BACK("closeDialog 0; createDialog ""build_menu"";"); - BTN_L1(-1, "Establish Camp", "Price: 800 Euros", "closeDialog 0; [""create""] spawn ftravelDialog"); - BTN_R1(-1, "Delete Camp", "", "closeDialog 0; [""delete""] spawn ftravelDialog"); + BTN_L1(-1, $STR_D_EST_CAMP, "Price: 800 Euros", "closeDialog 0; [""create""] spawn ftravelDialog"); + BTN_R1(-1, $STR_D_DEL_CAMP, "", "closeDialog 0; [""delete""] spawn ftravelDialog"); - BTN_M(BTN_Y_2, -1, "Rename Camp", "", "closeDialog 0; [""rename""] spawn ftravelDialog"); + BTN_M(BTN_Y_2, -1, $STR_D_REN_CAMP, "", "closeDialog 0; [""rename""] spawn ftravelDialog"); }; }; @@ -681,13 +681,13 @@ class boost_menu // 390 { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Is the start too hard for you?"); + AS_FRAME_D(FRAME_H_2, $STR_D_ITSTHFY); #define STR_BST_YES "closeDialog 0; if (player == Slowhand) then {[[], ""boost.sqf""] remoteExec [""execVM"", 2];};if ((player == Slowhand) and (isNil ""placementDone"")) then {[] spawn placementselection};" #define STR_BST_NO "closeDialog 0; [false] remoteExec [""AS_fnc_MAINT_arsenal"", 2]; if (activeBE) then {[] call fnc_BE_refresh}; if ((player == Slowhand) and (isNil ""placementDone"")) then {[] spawn placementselection};" - BTN_L1(-1, "YES", "You'll get some resources, and basic gear will be unlocked", STR_BST_YES); - BTN_R1(-1, "NO", "Pea shooters, iron sights and plain clothes it is", STR_BST_NO); + BTN_L1(-1, $STR_D_YES, $STR_D_YGSRNBGWBU, STR_BST_YES); + BTN_R1(-1, $STR_D_NO, $STR_D_PSISNPCII, STR_BST_NO); }; }; @@ -700,17 +700,17 @@ class misCiv_menu // 400 { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Available Missions"); + AS_FRAME_D(FRAME_H_4, $STR_D_AV_MIS); BTN_BACK(A_CLOSE); - #define STR_CIV_ASS "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""ASS""],""misReqCiv""] call BIS_fnc_MP} else {hint ""Stranger does not trust you.""};" - #define STR_CIV_CVY "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CONVOY""],""misReqCiv""] call BIS_fnc_MP} else {hint ""Stranger does not trust you.""};" - #define STR_CIV_CON "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CON""],""misReqCiv""] call BIS_fnc_MP} else {hint ""Stranger does not trust you.""};" + #define STR_CIV_ASS "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""ASS""],""misReqCiv""] call BIS_fnc_MP} else {hint localize ""STR_DH_SDNTY""};" + #define STR_CIV_CVY "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CONVOY""],""misReqCiv""] call BIS_fnc_MP} else {hint localize ""STR_DH_SDNTY""};" + #define STR_CIV_CON "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CON""],""misReqCiv""] call BIS_fnc_MP} else {hint localize ""STR_DH_SDNTY""};" - BTN_L1(-1, "Assassination Mission", "", STR_CIV_ASS); - BTN_R1(-1, "Convoy Ambush", "", STR_CIV_CVY); + BTN_L1(-1, $STR_D_ASSMI, "", STR_CIV_ASS); + BTN_R1(-1, $STR_D_CONAM, "", STR_CIV_CVY); - BTN_M(BTN_Y_2, -1, "Conquest Missions", "", STR_CIV_CON); + BTN_M(BTN_Y_2, -1, $STR_D_CONQMIS, "", STR_CIV_CON); }; }; @@ -724,19 +724,19 @@ class misMil_menu // 410 { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Available Missions"); + AS_FRAME_D(FRAME_H_4, $STR_D_AV_MIS); BTN_BACK(A_CLOSE); - #define STR_MIL_ASS "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""AS""],""misReqMil""] call BIS_fnc_MP} else {hint ""Nomad does not trust you.""};" - #define STR_MIL_CVY "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CONVOY""],""misReqMil""] call BIS_fnc_MP} else {hint ""Nomad does not trust you.""};" - #define STR_MIL_CON "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CON""],""misReqMil""] call BIS_fnc_MP} else {hint ""Nomad does not trust you.""};" - #define STR_MIL_DES "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""DES""],""misReqMil""] call BIS_fnc_MP} else {hint ""Nomad does not trust you.""};" + #define STR_MIL_ASS "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""AS""],""misReqMil""] call BIS_fnc_MP} else {hint ""STR_DH_NDNTY""};" + #define STR_MIL_CVY "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CONVOY""],""misReqMil""] call BIS_fnc_MP} else {hint ""STR_DH_NDNTY""};" + #define STR_MIL_CON "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""CON""],""misReqMil""] call BIS_fnc_MP} else {hint ""STR_DH_NDNTY""};" + #define STR_MIL_DES "closeDialog 0; if (((getPlayerUID player) in membersPool) || (player == Slowhand)) then {[[""DES""],""misReqMil""] call BIS_fnc_MP} else {hint ""STR_DH_NDNTY""};" - BTN_L1(-1, "Assassination Mission", "", STR_MIL_ASS); - BTN_L2(-1, "Convoy Ambush", "", STR_MIL_CVY); + BTN_L1(-1, $STR_D_ASSMI, "", STR_MIL_ASS); + BTN_L2(-1, $STR_D_CONAM, "", STR_MIL_CVY); - BTN_R1(-1, "Conquest Missions", "", STR_MIL_CON); - BTN_R2(-1, "Destroy Missions", "", STR_MIL_DES); + BTN_R1(-1, $STR_D_CONQMIS, "", STR_MIL_CON); + BTN_R2(-1, $STR_D_DES_MI, "", STR_MIL_DES); }; }; @@ -799,7 +799,7 @@ class exp_menu // 430 { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Buy Ordnance"); + AS_FRAME_D(FRAME_H_10, $STR_D_BUY_ORD); BTN_BACK(A_CLOSE); #define STR_EXP_SCH "closeDialog 0; if (player == Slowhand) then {[expCrate, ""expLight"", 300] remoteExec [""buyGear"", 2];}" @@ -815,17 +815,17 @@ class exp_menu // 430 #define STR_EXP_MAC "closeDialog 0; if (player == Slowhand) then {[expCrate, ""aCache"", 5000] remoteExec [""buyGear"", 2];}" - BTN_L1(-1, "Some Charges", "Spend 300 Euros on a small bag of explosives.", STR_EXP_SCH); - BTN_L2(-1, "Many Charges", "Spend 800 Euros on a large bag of explosives.", STR_EXP_MCH); - BTN_L3(-1, "Some Weapons", "Spend 1000 Euros on a small cache of weapons.", STR_EXP_SWP); - BTN_L4(-1, "Many Weapons", "Spend 2500 Euros on a large cache of weapons.", STR_EXP_MWP); + BTN_L1(-1, $STR_D_SOME_CHAR, $STR_D_SP3EOSBE, STR_EXP_SCH); + BTN_L2(-1, $STR_D_MANY_CHAR, $STR_D_SP8EOLBE, STR_EXP_MCH); + BTN_L3(-1, $STR_D_SOME_WEA, $STR_D_SP10EOSCW, STR_EXP_SWP); + BTN_L4(-1, $STR_D_MANY_WEA, $STR_D_SP25EOLCW, STR_EXP_MWP); - BTN_R1(-1, "Some Mines", "Spend 300 Euros on a small bag of mines.", STR_EXP_SMS); - BTN_R2(-1, "Many Mines", "Spend 800 Euros on a large bag of mines.", ""); - BTN_R3(-1, "Some Accessories", "Spend 500 Euros on a small cache of weapon accessories.", STR_EXP_SAC); - BTN_R4(-1, "Many Accessories", "Spend 5000 Euros on a large cache of weapon accessories.", STR_EXP_MAC); + BTN_R1(-1, $STR_D_SOME_MIN, $STR_D_SP3EOSBM, STR_EXP_SMS); + BTN_R2(-1, $STR_D_MANY_MIN, $STR_D_SP8EOLBM, STR_EXP_MMS); + BTN_R3(-1, $STR_D_SOME_ACC, $STR_D_SP5EOSCWA, STR_EXP_SAC); + BTN_R4(-1, $STR_D_MANY_ACC, $STR_D_SP50EOLCWA, STR_EXP_MAC); - BTN_M(BTN_Y_5, -1, "Some Ammo", "Currently not available", A_CLOSE); + BTN_M(BTN_Y_5, -1, $STR_D_SOME_AMMO, $STR_D_CNA, A_CLOSE); }; }; @@ -839,7 +839,7 @@ class wpns_small { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "Weapon Options"); + AS_FRAME_D(FRAME_H_6, $STR_D_WEAP_OP); BTN_BACK("closeDialog 0; createDialog ""exp_menu"";"); #define STR_EXP_ASS_S "closeDialog 0; if (player == Slowhand) then {[expCrate, ""ASRifles"", 1000] remoteExec [""buyGear"", 2];}" @@ -849,13 +849,13 @@ class wpns_small #define STR_EXP_LCH_S "closeDialog 0; if (player == Slowhand) then {[expCrate, ""Launchers"", 1000] remoteExec [""buyGear"", 2];}" #define STR_EXP_RND_S "closeDialog 0; if (player == Slowhand) then {[expCrate, ""Random"", 1000] remoteExec [""buyGear"", 2];}" - BTN_L1(-1, "Assault Rifles", "", STR_EXP_ASS_S); - BTN_L2(-1, "Machineguns", "", STR_EXP_MGS_S); - BTN_L3(-1, "Launchers", "", STR_EXP_LCH_S); + BTN_L1(-1, $STR_D_ASRILF, "", STR_EXP_ASS_S); + BTN_L2(-1, $STR_D_MACHGUN, "", STR_EXP_MGS_S); + BTN_L3(-1, $STR_D_LAUN, "", STR_EXP_LCH_S); - BTN_R1(-1, "Pistols", "", STR_EXP_PIS_S); - BTN_R2(-1, "Sniper Rifles", "", STR_EXP_SNP_S); - BTN_R3(-1, "Random", "", STR_EXP_RND_S); + BTN_R1(-1, $STR_D_PIST, "", STR_EXP_PIS_S); + BTN_R2(-1, $STR_D_SNIPRILF, "", STR_EXP_SNP_S); + BTN_R3(-1, $STR_D_RAND, "", STR_EXP_RND_S); }; }; @@ -869,7 +869,7 @@ class wpns_large { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "Weapon Options"); + AS_FRAME_D(FRAME_H_6, $STR_D_WEAP_OP); BTN_BACK("closeDialog 0; createDialog ""exp_menu"";"); #define STR_EXP_ASS_L "closeDialog 0; if (player == Slowhand) then {[expCrate, ""ASRifles"", 2500] remoteExec [""buyGear"", 2];}" @@ -879,13 +879,13 @@ class wpns_large #define STR_EXP_LCH_L "closeDialog 0; if (player == Slowhand) then {[expCrate, ""Launchers"", 2500] remoteExec [""buyGear"", 2];}" #define STR_EXP_RND_L "closeDialog 0; if (player == Slowhand) then {[expCrate, ""Random"", 2500] remoteExec [""buyGear"", 2];}" - BTN_L1(-1, "Assault Rifles", "", STR_EXP_ASS_L); - BTN_L2(-1, "Machineguns", "", STR_EXP_MGS_L); - BTN_L3(-1, "Launchers", "", STR_EXP_LCH_L); + BTN_L1(-1, $STR_D_ASRILF, "", STR_EXP_ASS_L); + BTN_L2(-1, $STR_D_MACHGUN, "", STR_EXP_MGS_L); + BTN_L3(-1, $STR_D_LAUN, "", STR_EXP_LCH_L); - BTN_R1(-1, "Pistols", "", STR_EXP_PIS_L); - BTN_R2(-1, "Sniper Rifles", "", STR_EXP_SNP_L); - BTN_R3(-1, "Random", "", STR_EXP_RND_L); + BTN_R1(-1, $STR_D_PIST, "", STR_EXP_PIS_L); + BTN_R2(-1, $STR_D_SNIPRILF, "", STR_EXP_SNP_L); + BTN_R3(-1, $STR_D_RAND, "", STR_EXP_RND_L); }; }; @@ -900,7 +900,7 @@ class HQ_fort_dialog // 440 { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "HQ Fortifications"); + AS_FRAME_D(FRAME_H_6, $STR_D_HQ_FORT); BTN_BACK("closeDialog 0; createDialog ""radio_comm_commander"";"); #define STR_HQ_CMO "closeDialog 0; [""net""] remoteExec [""HQ_adds"",2];" @@ -909,13 +909,13 @@ class HQ_fort_dialog // 440 #define STR_HQ_PAD "closeDialog 0; [""pad""] remoteExec [""HQ_adds"",2];" #define STR_HQ_DEL "closeDialog 0; [""delete""] remoteExec [""HQ_adds"",2];" - BTN_L1(-1, "Camo Net", "", STR_HQ_CMO); - BTN_L2(-1, "Lantern", "", STR_HQ_LAN); + BTN_L1(-1, $STR_D_CAMO_NET, "", STR_HQ_CMO); + BTN_L2(-1, $STR_D_LANT, "", STR_HQ_LAN); - BTN_R1(-1, "Sandbag", "", STR_HQ_SND); - BTN_R2(-1, "Vehicle Spawn Pad", "Create/Delete the vehicle spawn pad. Deploy at intended position.", STR_HQ_PAD); + BTN_R1(-1, $STR_D_SAN_BAG, "", STR_HQ_SND); + BTN_R2(-1, $STR_D_VEH_SP, $STR_D_CDVSP_DATP, STR_HQ_PAD); - BTN_M(BTN_Y_3, -1, "Delete All", "", STR_HQ_DEL); + BTN_M(BTN_Y_3, -1, $STR_D_DELA, "", STR_HQ_DEL); }; }; @@ -928,19 +928,19 @@ class game_options_commander { AS_BOX_D(BOX_H_10); - AS_FRAME_D(FRAME_H_10, "Game Options"); + AS_FRAME_D(FRAME_H_10, $STR_D_GAME_OP); BTN_BACK(A_CLOSE); #define STR_GO_GAR "closeDialog 0; [[], ""garbageCleaner.sqf""] remoteExec [""execVM"", 2];" #define STR_GO_PSS "closeDialog 0; [] remoteExec [""AS_fnc_saveGame"",2];" - BTN_L1(-1, "Civ Config", "", "closeDialog 0; createDialog ""civ_config"";"); - BTN_L2(-1, "Spawn Dist. Config", "", "closeDialog 0; createDialog ""spawn_config"";"); - BTN_L3(-1, "FPS Limiter", "", "closeDialog 0; createDialog ""fps_limiter"";"); + BTN_L1(-1, $STR_D_CIVCON, "", "closeDialog 0; createDialog ""civ_config"";"); + BTN_L2(-1, $STR_D_SDC, "", "closeDialog 0; createDialog ""spawn_config"";"); + BTN_L3(-1, $STR_D_FPSL, "", "closeDialog 0; createDialog ""fps_limiter"";"); - BTN_R1(-1, "Garbage Clean", "", STR_GO_GAR); - BTN_R2(-1, "Persistent Save", "", STR_GO_PSS); - BTN_R3(-1, "Music ON/OFF", "", "closedialog 0; if (musicON) then {musicON = false; hint ""Music turned OFF"";} else {musicON = true; execVM ""musica.sqf""; hint ""Music turned ON""};"); + BTN_R1(-1, $STR_D_GARB_CLEA, "", STR_GO_GAR); + BTN_R2(-1, $STR_D_PERSAVE, "", STR_GO_PSS); + BTN_R3(-1, $STR_D_MUS_ON_OFF, "", "closedialog 0; if (musicON) then {musicON = false; hint localize ""STR_DH_MTOF"";} else {musicON = true; execVM ""musica.sqf""; hint localize ""STR_DH_MTO""};"); }; }; @@ -952,11 +952,11 @@ class game_options_player class controls { AS_BOX_D(BOX_H_4); - AS_FRAME_D(FRAME_H_4, "Game Options"); + AS_FRAME_D(FRAME_H_4, $STR_D_GAME_OP); BTN_BACK(A_CLOSE); - BTN_L1(-1, "Music ON/OFF", "", "closedialog 0; if (musicON) then {musicON = false; hint ""Music turned OFF"";} else {musicON = true; execVM ""musica.sqf""; hint ""Music turned ON""};"); - BTN_R1(-1, "Ingame Member's List", "", "if (isMultiplayer) then {[] execVM ""OrgPlayers\membersList.sqf""} else {hint ""This function is MP only""};"); + BTN_L1(-1, $STR_D_MUS_ON_OFF, "", "closedialog 0; if (musicON) then {musicON = false; hint localize ""STR_DH_MTOF"";} else {musicON = true; execVM ""musica.sqf""; hint localize ""STR_DH_MTO""};"); + BTN_R1(-1, $STR_D_INGAME_ML, "", "if (isMultiplayer) then {[] execVM ""OrgPlayers\membersList.sqf""} else {hint localize ""STR_DH_TFIMPO""};"); }; }; @@ -969,11 +969,11 @@ class HQ_reset_menu { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "Do you want to reset HQ?"); + AS_FRAME_D(FRAME_H_2, $STR_D_DYWTRHQ); BTN_BACK(A_CLOSE); - BTN_L1(-1, "Yes", "", "closeDialog 0; [true] spawn buildHQ"); - BTN_R1(-1, "No", "", A_CLOSE); + BTN_L1(-1, $STR_D_YES, "", "closeDialog 0; [true] spawn buildHQ"); + BTN_R1(-1, $STR_D_NO, "", A_CLOSE); }; }; @@ -987,7 +987,7 @@ class maintenance_menu { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "Maintenance Menu"); + AS_FRAME_D(FRAME_H_6, $STR_D_MAIN_MENU); BTN_BACK("closeDialog 0; createDialog ""com_menu"";"); // #define STR_MAINT_ARS "closeDialog 0; [] remoteExec [""AS_fnc_MAINT_arsenal"", 2];" Stef, removed, it caused double arsenal @@ -997,13 +997,13 @@ class maintenance_menu #define STR_MAINT_MOV "closeDialog 0; [] remoteExec ['AS_fnc_addMoveObjAction',Slowhand];" #define STR_MAINT_AXP "if (activeBE) then {activeBE = true} else {activeBE = false}; hint format [""Current setting: %1"", [""off"", ""on""] select activeBE];" - BTN_L1(-1, "Garbage Cleaner", "Delete corpses, destroyed vehicles, on ground items, might freeze", STR_GO_GAR); - BTN_L2(-1, "Toggle Petros' animations", "Turn the idle animation of Petros on/off.", STR_MAINT_PAN); - BTN_L3(-1, "Toggle Army XP System", "Turn the extended Army XP system on/off, including all restrictions.", STR_MAINT_AXP); + BTN_L1(-1, $STR_D_GARB_CLEA, $STR_D_DELC_DV_OGIMF, STR_GO_GAR); + BTN_L2(-1, $STR_D_TOGPA, $STR_D_TTIAOP, STR_MAINT_PAN); + BTN_L3(-1, $STR_D_TOG_ARM_XPS, $STR_D_TTEAXPS, STR_MAINT_AXP); - BTN_R1(-1, "Reset HQ", "If you managed to lose one of your HQ items, this will reset all of them near Petros.", "closeDialog 0; createDialog ""HQ_reset_menu"";"); - BTN_R2(-1, "Reset Petros' position", "Terminate Petros' animation, move him next to the campfire at HQ.", STR_MAINT_PET); - BTN_R3(-1, "Move statics/HQ items", "Reset your ability to move statics and HQ assets.", STR_MAINT_MOV); + BTN_R1(-1, $STR_D_RESHQ, $STR_D_IYMTLOOYHAI, "closeDialog 0; createDialog ""HQ_reset_menu"";"); + BTN_R2(-1, $STR_D_RESPP, $STR_D_TPAMHNTTCAHQ, STR_MAINT_PET); + BTN_R3(-1, $STR_D_MSHQI, $STR_D_RYBTMSNHQA, STR_MAINT_MOV); }; }; @@ -1016,22 +1016,22 @@ class com_options { AS_BOX_D(BOX_H_6); - AS_FRAME_D(FRAME_H_6, "Options Menu"); + AS_FRAME_D(FRAME_H_6, $STR_D_OPMENU); BTN_BACK("closeDialog 0; createDialog ""com_menu"";"); - #define STR_COM_OPT_FT "if (server getVariable ""enableFTold"") then {server setVariable [""enableFTold"",false,true]; [[petros,""hint"",""Fast Travel limited to camps and HQ""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""enableFTold"",true,true]; [[petros,""hint"",""Extended Fast Travel system enabled""],""commsMP""] call BIS_fnc_MP;};" - #define STR_COM_OPT_INC "if (server getVariable ""easyMode"") then {server setVariable [""easyMode"",false,true]; [[petros,""hint"",""Easy Mode disabled.""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""easyMode"",true,true]; [[petros,""hint"",""FIA income permanently increased.""],""commsMP""] call BIS_fnc_MP;};" - #define STR_COM_OPT_ARS "if (server getVariable ""enableMemAcc"") then {server setVariable [""enableMemAcc"",false,true]; [[petros,""hint"",""Arsenal access set to default.""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""enableMemAcc"",true,true]; [[petros,""hint"",""Members now get to keep their gear.""],""commsMP""] call BIS_fnc_MP;};" + #define STR_COM_OPT_FT "if (server getVariable ""enableFTold"") then {server setVariable [""enableFTold"",false,true]; [[petros,""locHint"",""STR_DH_FTLTCNHQ""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""enableFTold"",true,true]; [[petros,""locHint"",""STR_DH_EFTSE""],""commsMP""] call BIS_fnc_MP;};" + #define STR_COM_OPT_INC "if (server getVariable ""easyMode"") then {server setVariable [""easyMode"",false,true]; [[petros,""locHint"",""STR_DH_EMD.""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""easyMode"",true,true]; [[petros,""locHint"",""STR_DH_FIAIPI""],""commsMP""] call BIS_fnc_MP;};" + #define STR_COM_OPT_ARS "if (server getVariable ""enableMemAcc"") then {server setVariable [""enableMemAcc"",false,true]; [[petros,""locHint"",""STR_DH_AASTD""],""commsMP""] call BIS_fnc_MP;} else {server setVariable [""enableMemAcc"",true,true]; [[petros,""locHint"",""STR_DH_MNGTKTG""],""commsMP""] call BIS_fnc_MP;};" #define STR_COM_OPT_AXP "if (activeBE) then {activeBE = false} else {activeBE = true}; publicVariable ""activeBE""; hint format [""Current setting: %1"", [""off"", ""on""] select activeBE];" #define STR_COM_OPT_WPP "if (server getVariable [""enableWpnProf"",false]) then {server setVariable [""enableWpnProf"",false,true]; [] remoteExec [""AS_fnc_resetSkills"", [0,-2] select isDedicated,true]} else {server setVariable [""enableWpnProf"",true,true]}; hint format [""Current setting: %1"", [""on"", ""off""] select (server getVariable [""enableWpnProf"",false])];" - BTN_L1(-1, "FT On/Off", "Toggle the old Fast Travel system on/off", STR_COM_OPT_FT); - BTN_L2(-1, "Toggle Increased Income", "", STR_COM_OPT_INC); + BTN_L1(-1, $STR_D_FTOOF, $STR_D_TTOFTSOOF, STR_COM_OPT_FT); + BTN_L2(-1, $STR_D_TII, "", STR_COM_OPT_INC); - BTN_R1(-1, "Arsenal Access On/Off", "Simplified: members are exempt from gear-removal upon accessing the arsenal.", STR_COM_OPT_ARS); - BTN_R2(-1, "Toggle Army XP System", "Turn the extended Army XP system on/off, including all restrictions.", STR_COM_OPT_AXP); + BTN_R1(-1, $STR_D_ARSAOOF, $STR_D_SMAEFGRUATA, STR_COM_OPT_ARS); + BTN_R2(-1, $STR_D_TAXPS, $STR_D_TTEAXPSOOF, STR_COM_OPT_AXP); - BTN_M(BTN_Y_3, -1, "Weapon Proficiencies", "Turn the extended weapon proficiencies system on/off (MP exclusive)", STR_COM_OPT_WPP); + BTN_M(BTN_Y_3, -1, $STR_D_WEAP_PROF, $STR_D_TTEWPSOOF, STR_COM_OPT_WPP); }; }; @@ -1045,12 +1045,12 @@ class tfar_menu { AS_BOX_D(BOX_H_2); - AS_FRAME_D(FRAME_H_2, "TFAR Menu"); + AS_FRAME_D(FRAME_H_2, $STR_D_TFAR_MENU); BTN_BACK(A_CLOSE); - BTN_L1(-1, "Save Radio Settings", "Save TFAR radio settings.", "closeDialog 0; [player] spawn AS_fnc_saveTFARsettings"); + BTN_L1(-1, $STR_D_SAVE_RS, $STR_D_STFARRS, "closeDialog 0; [player] spawn AS_fnc_saveTFARsettings"); - BTN_R1(-1, "Load Radio Settings", "Load previously saved TFAR radio settings.", "closeDialog 0; [player] spawn AS_fnc_loadTFARsettings"); + BTN_R1(-1, $STR_D_LOAD_RS, $STR_D_LPSTFARRS, "closeDialog 0; [player] spawn AS_fnc_loadTFARsettings"); }; }; @@ -1109,7 +1109,7 @@ class ROLECHANGE { movingenable=false; class controls { - //////////////////////STEF ROLECHANGE DIALOG ///////////////////////// + //////////////////////STEF ROLECHANGE DIALOG ///////////////////////// class ROLECHANGE_BOX: BOX { idc = 101; @@ -1122,7 +1122,7 @@ class ROLECHANGE { class HQ_frame: RscFrame { idc = 102; - text = "Role Change"; //--- ToDo: Localize; + text = $STR_D_ROLE_CHANGE; //--- ToDo: Localize; x = 0.254979 * safezoneW + safezoneX; y = 0.233941 * safezoneH + safezoneY; w = 0.425038 * safezoneW; @@ -1131,7 +1131,7 @@ class ROLECHANGE { class HQ_button_back: RscButton { idc = 103; - text = "Back"; //--- ToDo: Localize; + text = $STR_D_BACK; //--- ToDo: Localize; x = 0.61 * safezoneW + safezoneX; y = 0.251941 * safezoneH + safezoneY; w = 0.06 * safezoneW;//0.175015 @@ -1141,7 +1141,7 @@ class ROLECHANGE { class ROLECHANGE_SOLDIER: RscButton { idc = 104; - text = "Officer"; //--- ToDo: Localize; + text = $STR_D_OFFICER; //--- ToDo: Localize; x = 0.272481 * safezoneW + safezoneX; y = 0.317959 * safezoneH + safezoneY; w = 0.175015 * safezoneW; @@ -1152,7 +1152,7 @@ class ROLECHANGE { class ROLECHANGE_AUTORIFLEMAN: RscButton { idc = 105; - text = "Autorifleman"; //--- ToDo: Localize; + text = $STR_D_AUTORIFLEMAN; //--- ToDo: Localize; x = 0.272481 * safezoneW + safezoneX; y = 0.415981 * safezoneH + safezoneY; w = 0.175015 * safezoneW; @@ -1162,7 +1162,7 @@ class ROLECHANGE { class ROLECHANGE_MEDIC: RscButton { idc = 126; - text = "Medic"; //--- ToDo: Localize; + text = $STR_D_MEDIC; //--- ToDo: Localize; x = 0.272481 * safezoneW + safezoneX; y = 0.514003 * safezoneH + safezoneY; w = 0.175015 * safezoneW; @@ -1172,7 +1172,7 @@ class ROLECHANGE { class ROLECHANGE_ENGINEER: RscButton { idc = 107; - text = "Engineer"; //--- ToDo: Localize; + text = $STR_D_ENGINEER; //--- ToDo: Localize; x = 0.482498 * safezoneW + safezoneX; y = 0.317959 * safezoneH + safezoneY; w = 0.175015 * safezoneW; @@ -1182,7 +1182,7 @@ class ROLECHANGE { class ROLECHANGE_AMMOBEARER: RscButton { idc = 108; - text = "Ammobearer"; //--- ToDo: Localize; + text = $STR_D_AMMOBEARER; //--- ToDo: Localize; x = 0.482498 * safezoneW + safezoneX; y = 0.514003 * safezoneH + safezoneY; w = 0.175015 * safezoneW; @@ -1192,7 +1192,7 @@ class ROLECHANGE { class ROLECHANGE_MARKSMAN: RscButton { idc = 109; - text = "Marksman"; //--- ToDo: Localize; + text = $STR_D_MARKSMAN; //--- ToDo: Localize; x = 0.482498 * safezoneW + safezoneX; y = 0.415981 * safezoneH + safezoneY; w = 0.175015 * safezoneW; diff --git a/AntistasiOfficial.Altis/establishCamp.sqf b/AntistasiOfficial.Altis/establishCamp.sqf index fc967307..04c82550 100644 --- a/AntistasiOfficial.Altis/establishCamp.sqf +++ b/AntistasiOfficial.Altis/establishCamp.sqf @@ -36,7 +36,7 @@ _mrk setMarkerShape "ICON"; _fechalim = [date select 0, date select 1, date select 2, date select 3, (date select 4) + 60]; _fechalimnum = dateToNumber _fechalim; -_tsk = ["campsFIA",[side_blue,civilian],["We are sending a team to establish a camp. Send and cover the team until reaches it's destination.","Camp Setup",_mrk],_posicionTel,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; +_tsk = ["campsFIA",[side_blue,civilian],["STR_TSK_DESC_CAMPSET","STR_TSK_CAMPSET",_mrk],_posicionTel,"CREATED",5,true,true,"Move"] call BIS_fnc_setTask; misiones pushBackUnique _tsk; publicVariable "misiones"; _tam = 10; @@ -92,14 +92,14 @@ if ({(alive _x) and (_x distance _posicionTel < 10)} count units _grupo > 0) the markers = markers + [_mrk]; publicVariable "markers"; spawner setVariable [_mrk,false,true]; - _tsk = ["campsFIA",[side_blue,civilian],["We are sending a team to establish a camp. Send and cover the team until reaches it's destination.","Camp Setup",_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["campsFIA",[side_blue,civilian],["STR_TSK_DESC_CAMPSET","STR_TSK_CAMPSET",_mrk],_posicionTel,"SUCCEEDED",5,true,true,"Move"] call BIS_fnc_setTask; _mrk setMarkerType "loc_bunker"; _mrk setMarkerColor "ColorOrange"; _mrk setMarkerText _texto; usedCN pushBack _texto; } else { - _tsk = ["campsFIA",[side_blue,civilian],["We are sending a team to establish a camp. Send and cover the team until reaches it's destination.","Camp Setup",_mrk],_posicionTel,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; + _tsk = ["campsFIA",[side_blue,civilian],["STR_TSK_DESC_CAMPSET","STR_TSK_CAMPSET",_mrk],_posicionTel,"FAILED",5,true,true,"Move"] call BIS_fnc_setTask; sleep 3; deleteMarker _mrk; }; diff --git a/AntistasiOfficial.Altis/fastTravelRadio.sqf b/AntistasiOfficial.Altis/fastTravelRadio.sqf index 0bcf181d..0130b982 100644 --- a/AntistasiOfficial.Altis/fastTravelRadio.sqf +++ b/AntistasiOfficial.Altis/fastTravelRadio.sqf @@ -4,16 +4,16 @@ _markers = markers + [guer_respawn] - campsFIA; _esHC = false; -if (count hcSelected player > 1) exitWith {hint "You can select one group only to Fast Travel"}; +if (count hcSelected player > 1) exitWith {hint localize "STR_HINTS_FTR_YCSOGOTFT"}; if (count hcSelected player == 1) then {_grupo = hcSelected player select 0; _esHC = true} else {_grupo = group player}; _jefe = leader _grupo; -if ((_jefe != player) and (!_esHC)) exitWith {hint "Only a group leader can ask for Fast Travel"}; +if ((_jefe != player) and (!_esHC)) exitWith {hint localize "STR_HINTS_FTR_OAGLCAFFT"}; -if (({isPlayer _x} count units _grupo > 1) and (!_esHC)) exitWith {hint "You cannot Fast Travel with other players in your group"}; +if (({isPlayer _x} count units _grupo > 1) and (!_esHC)) exitWith {hint localize "STR_HINTS_FTR_YCFTWOPIYG"}; -if (player != player getVariable ["owner",player]) exitWith {hint "You cannot Fast Travel while you are controlling AI"}; +if (player != player getVariable ["owner",player]) exitWith {hint localize "STR_HINTS_FTR_YCFTWYACAI"}; _chequeo = false; {_enemigo = _x; @@ -21,7 +21,7 @@ _chequeo = false; if (_chequeo) exitWith {}; } forEach allUnits; -if (_chequeo) exitWith {Hint "You cannot Fast Travel with enemies near the group"}; +if (_chequeo) exitWith {Hint localize "STR_HINTS_FTR_YCFTWENTG"}; {if ((vehicle _x!= _x) and ((isNull (driver vehicle _x)) or (!canMove vehicle _x))) then { @@ -29,12 +29,12 @@ if (_chequeo) exitWith {Hint "You cannot Fast Travel with enemies near the group } } forEach units _grupo; -if (_chequeo) exitWith {Hint "You cannot Fast Travel if you don't have a driver in all your vehicles or your vehicles are damage and cannot move"}; +if (_chequeo) exitWith {Hint localize "STR_HINTS_FTR_YCFTIYDHADIAY"}; posicionTel = []; if (_esHC) then {hcShowBar false}; -hint "Click on the zone you want to travel"; +hint localize "STR_HINTS_FTR_COTZYWTT"; openMap true; onMapSingleClick "posicionTel = _pos;"; @@ -47,23 +47,23 @@ if (count _posicionTel > 0) then { _base = [_markers, _posicionTel] call BIS_Fnc_nearestPosition; - if (_base in mrkAAF) exitWith {hint "You cannot Fast Travel to an enemy controlled zone"; openMap [false,false]}; + if (_base in mrkAAF) exitWith {hint localize "STR_HINTS_FTR_YCFTTAECZ"; openMap [false,false]}; //experimental - if (_base in campsFIA) exitWith {hint "You cannot Fast Travel to camps."; openMap [false,false]}; - //if (_base in puestosFIA) exitWith {hint "You cannot Fast Travel to roadblocks and watchposts"; openMap [false,false]}; + if (_base in campsFIA) exitWith {hint localize "STR_HINTS_FTR_YCFTTC"; openMap [false,false]}; + //if (_base in puestosFIA) exitWith {hint localize "STR_HINTS_FTR_YCFTTRNW"; openMap [false,false]}; { if (((side _x == side_red) or (side _x == side_green)) and (_x distance (getMarkerPos _base) < 500) and (not(captive _x))) then {_chequeo = true}; } forEach allUnits; - if (_chequeo) exitWith {Hint "You cannot Fast Travel to an area under attack or with enemies in the surrounding"; openMap [false,false]}; + if (_chequeo) exitWith {Hint localize "STR_HINTS_FTR_YCFTTAAUAOWE"; openMap [false,false]}; if (_posicionTel distance getMarkerPos _base < 50) then { _posicion = [getMarkerPos _base, 10, random 360] call BIS_Fnc_relPos; _distancia = round (((position _jefe) distance _posicion)/200); - if (!_esHC) then {disableUserInput true; cutText ["Fast traveling, please wait","BLACK",2]; sleep 2;} else {hcShowBar false;hcShowBar true;hint format ["Moving group %1 to destination",groupID _grupo]; sleep _distancia;}; + if (!_esHC) then {disableUserInput true; cutText ["Fast traveling, please wait","BLACK",2]; sleep 2;} else {hcShowBar false;hcShowBar true;hint format [localize "STR_HINTS_FTR_MG1TD",groupID _grupo]; sleep _distancia;}; _forzado = false; if (!isMultiplayer) then {if (not(_base in forcedSpawn)) then {_forzado = true; forcedSpawn = forcedSpawn + [_base]}}; if (!_esHC) then {sleep _distancia}; @@ -115,14 +115,14 @@ if (count _posicionTel > 0) then //_unit hideObject false; } forEach units _grupo; - if (!_esHC) then {disableUserInput false;cutText ["You arrived to destination","BLACK IN",3]} else {hint format ["Group %1 arrived to destination",groupID _grupo]}; + if (!_esHC) then {disableUserInput false;cutText ["You arrived to destination","BLACK IN",3]} else {hint format [localize "STR_HINTS_FTR_G1ATD",groupID _grupo]}; if (_forzado) then {forcedSpawn = forcedSpawn - [_base]}; sleep 5; {_x allowDamage true} forEach units _grupo; } else { - Hint "You must click near marker under your control"; + Hint localize "STR_HINTS_FTR_YMCNMUYC"; }; }; openMap false; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/ftravelDialog.sqf b/AntistasiOfficial.Altis/ftravelDialog.sqf index 038d66ba..ef3466c8 100644 --- a/AntistasiOfficial.Altis/ftravelDialog.sqf +++ b/AntistasiOfficial.Altis/ftravelDialog.sqf @@ -1,6 +1,6 @@ private ["_tipo","_coste","_grupo","_unit","_tam","_roads","_road","_pos","_camion","_texto","_mrk","_hr","_exists","_posicionTel","_tipogrupo","_resourcesFIA","_hrFIA"]; -if (!([player] call hasRadio)) exitWith {hint "You need a radio in your inventory to be able to give orders to other squads"}; +if (!([player] call hasRadio)) exitWith {hint localize "STR_HINTS_FD_YNARIYITBA"}; _tipo = _this select 0; _markers = mrkAAF; @@ -20,9 +20,9 @@ if !(_permission) exitWith {hint _text}; openMap true; posicionTel = []; -if (_tipo == "create") then {hint "Click on the position you wish to establish the camp."}; -if (_tipo == "delete") then {hint "Click on the camp to abandon a camp."}; -if (_tipo == "rename") then {hint "Click on the camp to rename a camp."}; +if (_tipo == "create") then {hint localize "STR_HINTS_FD_COTPYWTETC"}; +if (_tipo == "delete") then {hint localize "STR_HINTS_FD_COTCTAAC"}; +if (_tipo == "rename") then {hint localize "STR_HINTS_FD_COTCTRAC"}; onMapSingleClick "posicionTel = _pos;"; @@ -31,19 +31,19 @@ onMapSingleClick ""; if (!visibleMap) exitWith {}; -if (getMarkerPos guer_respawn distance posicionTel < 100) exitWith {hint "Location is too close to base"; openMap false;}; +if (getMarkerPos guer_respawn distance posicionTel < 100) exitWith {hint localize "STR_HINTS_FD_LITCTB"; openMap false;}; openMap false; _posicionTel = posicionTel; _pos = []; -if ((_tipo == "delete") and (count campsFIA < 1)) exitWith {hint "No camps to abandon."}; -if ((_tipo == "delete") and ({(alive _x) and (!captive _x) and ((side _x == side_green) or (side _x == side_red)) and (_x distance _posicionTel < 500)} count allUnits > 0)) exitWith {hint "You cannot delete a camp while enemies are near it."}; +if ((_tipo == "delete") and (count campsFIA < 1)) exitWith {hint localize "STR_HINTS_FD_NCTA"}; +if ((_tipo == "delete") and ({(alive _x) and (!captive _x) and ((side _x == side_green) or (side _x == side_red)) and (_x distance _posicionTel < 500)} count allUnits > 0)) exitWith {hint localize "STR_HINTS_FD_YCDACWEANI"}; _coste = 500; _hr = 0; -if ((_tipo == "create") && (count campsFIA > _maxCamps)) exitWith {hint "You can only sustain a maximum of four camps."}; +if ((_tipo == "create") && (count campsFIA > _maxCamps)) exitWith {hint localize "STR_HINTS_FD_YCOSAMOFFC"}; if (_tipo == "create") then { _tipogrupo = guer_grp_sniper; @@ -85,7 +85,7 @@ while {(_tipo == "rename")} do { }; publicVariable "campList"; cName = ""; - hint "Camp renamed"; + hint localize "STR_HINTS_FD_CR"; breakOut "loop2"; }; @@ -94,7 +94,7 @@ if (_break) exitWith {openMap false; hint _txt;}; _resourcesFIA = server getVariable "resourcesFIA"; _hrFIA = server getVariable "hr"; -if (((_resourcesFIA < _coste) or (_hrFIA < _hr)) and (_tipo == "create")) exitWith {hint format ["You lack of resources to build this camp. \n %1 HR and %2 € needed",_hr,_coste]}; +if (((_resourcesFIA < _coste) or (_hrFIA < _hr)) and (_tipo == "create")) exitWith {hint format [localize "STR_HINTS_FD_YLORTBTC",_hr,_coste]}; if (_tipo == "create") then { [-_hr,-_coste] remoteExec ["resourcesFIA",2]; diff --git a/AntistasiOfficial.Altis/garbageCleaner.sqf b/AntistasiOfficial.Altis/garbageCleaner.sqf index 1ba4d2e7..3e049e76 100644 --- a/AntistasiOfficial.Altis/garbageCleaner.sqf +++ b/AntistasiOfficial.Altis/garbageCleaner.sqf @@ -1,13 +1,7 @@ -private ["_toDelete"]; - -[[petros,"hint","Deleting Garbage. Please wait"],"commsMP"] call BIS_fnc_MP; - -_toDelete = nearestObjects [markerPos "base_4", ["WeaponHolderSimulated", "GroundWeaponHolder", "WeaponHolder"], 16000]; -for "_i" from 0 to ((count _toDelete) - 1) do -{ - deleteVehicle (_toDelete select _i); -}; +[[petros,"locHint", "STR_HINTS_GARB_CLR"],"commsMP"] call BIS_fnc_MP; {deleteVehicle _x} forEach allDead; +{deleteVehicle _x} forEach (allMissionObjects "WeaponHolder"); +{deleteVehicle _x} forEach (allMissionObjects "WeaponHolderSimulated"); -[[petros,"hint","Garbage deleted"],"commsMP"] call BIS_fnc_MP; \ No newline at end of file +[[petros,"locHint","STR_HINTS_GARB_DEL"],"commsMP"] call BIS_fnc_MP; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/healandrepair.sqf b/AntistasiOfficial.Altis/healandrepair.sqf index a7062cc9..e2923433 100644 --- a/AntistasiOfficial.Altis/healandrepair.sqf +++ b/AntistasiOfficial.Altis/healandrepair.sqf @@ -25,4 +25,4 @@ _posHQ = getMarkerPos guer_respawn; publicVariable "reportedVehs"; -hint "All nearby units and vehicles have been healed or repaired. Near vehicles have been rearmed at full load and no longer in reported list."; \ No newline at end of file +hint localize "STR_HINTS_HNR_ALL"; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/init.sqf b/AntistasiOfficial.Altis/init.sqf index 6c48e081..4c2f516c 100644 --- a/AntistasiOfficial.Altis/init.sqf +++ b/AntistasiOfficial.Altis/init.sqf @@ -1,8 +1,5 @@ //Arma 3 - Antistasi by Barbolani //Do whatever you want with this code, but credit me for the thousand hours spent making this. -diag_log "####init.sqf called"; - - enableSaving [ false, false ]; call AS_fnc_init_hq; @@ -26,8 +23,9 @@ if (!isMultiPlayer) then { call compile preprocessFileLineNumbers "WarStatistics\initFunctions.sqf"; call compile preprocessFileLineNumbers "WarStatistics\initVariablesServer.sqf"; //call compile preprocessFileLineNumbers "WarStatistics\initRoadblocks2.sqf"; - ws_grid = call ws_fnc_newGridArray; + //ws_grid = call ws_fnc_newGridArray; //(up to here)// + Slowhand = player; //Otherwise it might be undefined at further parts of code in this file! serverInitDone = true; diag_log "Antistasi SP. serverInitDone is true. Arsenal loaded"; [] execVM "modBlacklist.sqf"; @@ -59,36 +57,27 @@ if(isServer) then { membersPool = []; publicVariable "membersPool"; waitUntil {!isNil "serverID"}; - //Loading members list anyway - //Loading membersPool from ext file - [] call compile preprocessFileLineNumbers "orgPlayers\mList.sqf"; - //loading membersPool from profileNameSpace - ["membersPool"] call fn_loadData; - - if (serverName in servidoresOficiales) then { - //[] execVM "orgPlayers\mList.sqf"; + //Loading members list anyway + //Loading membersPool from ext file + [] call compile preprocessFileLineNumbers "orgPlayers\mList.sqf"; + //loading membersPool from profileNameSpace + ["membersPool"] call fn_loadData; { if (([_x] call isMember) AND (isNull Slowhand)) then { Slowhand = _x; - _x setRank "LIEUTENANT"; - [_x,"LIEUTENANT"] remoteExec ["ranksMP"]; diag_log format ["init.sqf: selected commander from member list: %1", Slowhand]; }; } forEach playableUnits; publicVariable "Slowhand"; diag_log format ["init.sqf: commander is: %1", Slowhand]; - if (isNull Slowhand) then { + + if(!freshstart) then { + diag_log "Antistasi. Autostarting last save"; [] spawn AS_fnc_autoStart; - diag_log "Antistasi MP Server. Players are in, no members"; - } else { - diag_log "Antistasi MP Server. Players are in, member detected"; }; - } else { - waitUntil {!isNil "Slowhand"}; - waitUntil {isPlayer Slowhand}; - }; + fpsCheck = [] execVM "fpsCheck.sqf"; - [caja] call cajaAAF; + [caja] call cajaAAF; //Give few starting items if (activeJNA) then { ["complete"] call AS_fnc_JNA_pushLists; }; @@ -101,4 +90,4 @@ if(isServer) then { }; //Check worldname on dedicated server: is it altis or Altis? Sparker. -diag_log format ["Antistasi worldName: %1",worldName]; \ No newline at end of file +diag_log format ["Antistasi worldName: %1",worldName]; diff --git a/AntistasiOfficial.Altis/initFuncs.sqf b/AntistasiOfficial.Altis/initFuncs.sqf index e581dad7..cfd3f7df 100644 --- a/AntistasiOfficial.Altis/initFuncs.sqf +++ b/AntistasiOfficial.Altis/initFuncs.sqf @@ -102,6 +102,7 @@ addFIAsquadHC = compile preProcessFileLineNumbers "REINF\addFIAsquadHC.sqf"; addFIAveh = compile preProcessFileLineNumbers "REINF\addFIAveh.sqf"; FIAskillAdd = compile preProcessFileLineNumbers "REINF\FIAskillAdd.sqf"; CSATinit = compile preProcessFileLineNumbers "CREATE\CSATinit.sqf"; +CSATtimetoreveal = compile preProcessFileLineNumbers "CREATE\CSATtimetoreveal.sqf"; NATOinit = compile preProcessFileLineNumbers "CREATE\NATOinit.sqf"; NATOinitCA = compile preProcessFileLineNumbers "CREATE\NATOinitCA.sqf"; CIVinit = compile preProcessFileLineNumbers "CREATE\CIVinit.sqf"; @@ -205,4 +206,4 @@ call compile preprocessFileLineNumbers "Compositions\cmpMTN.sqf"; call compile preprocessFileLineNumbers "Compositions\cmpOP.sqf"; call compile preprocessFileLineNumbers "Compositions\artillery.sqf"; -if ((isMultiplayer) and (isServer)) then {[[petros,"hint","Functions Init Completed"],"commsMP"] call BIS_fnc_MP}; +if ((isMultiplayer) and (isServer)) then {[[petros,"locHint","STR_HINTS_INITCUNCS"],"commsMP"] call BIS_fnc_MP}; diff --git a/AntistasiOfficial.Altis/initPetros.sqf b/AntistasiOfficial.Altis/initPetros.sqf index 55ebc41e..27440096 100644 --- a/AntistasiOfficial.Altis/initPetros.sqf +++ b/AntistasiOfficial.Altis/initPetros.sqf @@ -1,7 +1,8 @@ removeHeadgear petros; removeGoggles petros; petros setSkill 1; -petros setVariable ["ASunconscious",false,true]; +petros setVariable ["VCOM_NOAI", true, true]; //No VCOM AI for Petros +[petros, false] call AS_fnc_setUnconscious; petros setVariable ["ASrespawning",false]; petros allowDamage true; @@ -19,7 +20,7 @@ petros addEventHandler ["HandleDamage", { if ((isNull _injurer) OR (_injurer == petros)) then {_dam = 0}; if (_part == "") then { if (_dam > 0.95) then { - if !(petros getVariable "ASunconscious") then { + if !([petros] call AS_fnc_isUnconscious) then { _dam = 0.9; [petros] spawn medUnconscious; } else { @@ -87,7 +88,7 @@ petros addMPEventHandler ["mpkilled", { waitUntil {sleep 6; isPlayer Slowhand}; waitUntil {sleep 3; alive Slowhand}; - if (activeACE) then { + if (activeACEMedical) then { Slowhand setVariable ["ACE_isUnconscious",false,true]; [Slowhand, Slowhand] call ace_medical_fnc_treatmentAdvanced_fullHeal; }; diff --git a/AntistasiOfficial.Altis/initPlayerLocal.sqf b/AntistasiOfficial.Altis/initPlayerLocal.sqf index ea948f09..860b485f 100644 --- a/AntistasiOfficial.Altis/initPlayerLocal.sqf +++ b/AntistasiOfficial.Altis/initPlayerLocal.sqf @@ -2,13 +2,11 @@ #define DEBUG_MODE_FULL #include "script_component.hpp" -diag_log "####initPlayerLocal.sqf called"; -call AS_fnc_initWorker; - params ["_unit","_isJIP"]; private ["_colorWest", "_colorEast","_introShot","_title","_nearestMarker"]; waitUntil {!isNull player}; +call AS_fnc_initWorker; [] execVM "briefing.sqf"; if (isMultiplayer) then { @@ -47,8 +45,9 @@ if (isMultiplayer) then { _title = ["A3 - Antistasi","by Barbolani",antistasiVersion] spawn BIS_fnc_infoText; +//Multiplayer start if (isMultiplayer) then { - player setVariable ["elegible",true,true]; + player setVariable ["elegible",true,true]; //Why? so whoever start will be eligible to be commander? musicON = false; waitUntil {scriptdone _introshot}; disableUserInput true; @@ -59,6 +58,7 @@ if (isMultiplayer) then { diag_log "Antistasi MP Client. serverInitDone is public"; diag_log format ["Antistasi MP Client: JIP?: %1",_isJip]; } else { +//Singleplayer start Slowhand = player; (group player) setGroupId ["Slowhand","GroupColor4"]; player setIdentity "protagonista"; @@ -70,11 +70,17 @@ if (isMultiplayer) then { disableUserInput false; //Give default civilian gear -player setUnitLoadout (getUnitLoadout (configFile >> "CfgVehicles" >> "C_man_polo_1_F")); +removeAllContainers player; +removeGoggles player; +removeHeadgear player; +removeAllAssignedItems player; +removeAllWeapons player; player forceAddUniform (selectRandom civUniforms); +player addWeapon "ItemMap"; player addWeapon "ItemRadio"; -player addWeapon "ItemGPS"; player addWeapon "Binocular"; +player addWeapon "ItemCompass"; +player addWeapon "ItemWatch"; // In order: controller, TK counter, funds, spawn-trigger, rank, score, known by hostile AI player setVariable ["owner",player,true]; @@ -102,7 +108,7 @@ if (!activeACE) then { if (!activeACEMedical) then { [player] execVM "Revive\initRevive.sqf"; } else { - player setVariable ["ASunconscious",false,true]; + [player, false] call AS_fnc_setUnconscious; }; [] execVM "playerMarkers.sqf"; @@ -114,116 +120,112 @@ call AS_fnc_initPlayerEH; if (isMultiplayer) then { ["InitializePlayer", [player]] call BIS_fnc_dynamicGroups;//Exec on client - //["InitializeGroup", [player,WEST,true]] call BIS_fnc_dynamicGroups; - personalGarage = []; + + if !([player] call isMember) then { + if (serverCommandAvailable "#logout") then { + membersPool pushBack (getPlayerUID player); + publicVariable "membersPool"; + hint localize "STR_HINTS_INIT_ADMIN_MEMBER" + } else { + hint format [localize "STR_HINTS_INIT_GUEST_WELCOME", name player]; + }; + } else { + hint format [localize "STR_HINTS_INIT_MEMBER_RETURN", name player]; + }; + + if ({[_x] call isMember} count playableUnits == 1) then { + [player] call stavrosInit; + [] remoteExec ["assignStavros",2]; + }; + if (!isNil "placementDone") then { _isJip = true; }; }; -if (_isJip) then { - waitUntil {scriptdone _introshot}; - [] execVM "modBlacklist.sqf"; - player setUnitRank "PRIVATE"; - [true] execVM "reinitY.sqf"; - if !([player] call isMember) then { - if (serverCommandAvailable "#logout") then { - membersPool pushBack (getPlayerUID player); - publicVariable "membersPool"; - hint localize "STR_HINTS_INIT_ADMIN_MEMBER" - } else { - hint format [localize "STR_HINTS_INIT_GUEST_WELCOME", name player]; - }; - } else { - hint format [localize "STR_HINTS_INIT_MEMBER_RETURN", name player]; - - if (serverName in servidoresOficiales) then { - if ((count playableUnits == maxPlayers) AND (({[_x] call isMember} count playableUnits) < count membersPool)) then { - { - if !([_x] call isMember) exitWith { - ["serverFull",false,1,false,false] remoteExec ["BIS_fnc_endMission",_x]; +if (_isJip) then { waitUntil {scriptdone _introshot}; + [] execVM "modBlacklist.sqf"; + player setUnitRank "PRIVATE"; //we already load the rank in another place do we need this? + [true] execVM "reinitY.sqf"; + // Add actions to flags + { + if (_x isKindOf "FlagCarrier") then { + _nearestMarker = [markers,getPos _x] call BIS_fnc_nearestPosition; + + if (!(_nearestMarker in colinas) AND !(_nearestMarker in controles)) then { + if (_nearestMarker in mrkAAF) then { + _x addAction [localize "STR_ACT_TAKEFLAG", {[[_this select 0, _this select 1],"mrkWIN"] call BIS_fnc_MP;},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; + } else { + _x addAction [localize "STR_ACT_RECRUITUNIT", {nul=[] execVM "Dialogs\unit_recruit.sqf";},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; + _x addAction [localize "STR_ACT_BUYVEHICLE", {createDialog "vehicle_option";},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; }; - } forEach playableUnits; - }; - }; - - if ({[_x] call isMember} count playableUnits == 1) then { - [player] call stavrosInit; - [] remoteExec ["assignStavros",2]; - }; - }; - - // Add actions to flags - { - if (_x isKindOf "FlagCarrier") then { - _nearestMarker = [markers,getPos _x] call BIS_fnc_nearestPosition; - - if (!(_nearestMarker in colinas) AND !(_nearestMarker in controles)) then { - if (_nearestMarker in mrkAAF) then { - _x addAction [localize "STR_ACT_TAKEFLAG", {[[_this select 0, _this select 1],"mrkWIN"] call BIS_fnc_MP;},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; - } else { - _x addAction [localize "STR_ACT_RECRUITUNIT", {nul=[] execVM "Dialogs\unit_recruit.sqf";},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; - _x addAction [localize "STR_ACT_BUYVEHICLE", {createDialog "vehicle_option";},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; - _x addAction [localize "STR_ACT_PERSGARAGE", {[true] spawn garage},nil,0,false,true,"","(isPlayer _this) and (_this == _this getVariable ['owner',objNull])"]; }; }; - }; - } forEach vehicles - [bandera,fuego,caja,cajaVeh]; + } forEach vehicles - [bandera,fuego,caja,cajaVeh]; - // Add actions to POWs - { - if (typeOf _x == guer_POW) then { - if (!isPlayer (leader group _x)) then { - _x addAction [localize "STR_ACT_ORDERREFUGEE", "AI\liberaterefugee.sqf",nil,0,false,true]; + // Add actions to POWs + { + if (typeOf _x == guer_POW) then { + if (!isPlayer (leader group _x)) then { + _x addAction [localize "STR_ACT_ORDERREFUGEE", "AI\liberaterefugee.sqf",nil,0,false,true]; + }; }; - }; - } forEach allUnits; + } forEach allUnits; - // If HQ is set up properly, add mission request action to Petros, otherwise add build HQ action - if (petros == leader group petros) then { - removeAllActions petros; - petros addAction [localize "STR_ACT_MISSIONREQUEST", {nul=CreateDialog "mission_menu";},nil,0,false,true]; - } else { - removeAllActions petros; - petros addAction [localize "STR_ACT_BUILDHQ", {[] spawn buildHQ},nil,0,false,true]; + // If HQ is set up properly, add mission request action to Petros, otherwise add build HQ action + if (petros == leader group petros) then { + removeAllActions petros; + petros addAction [localize "STR_ACT_MISSIONREQUEST", {nul=CreateDialog "mission_menu";},nil,0,false,true]; + } else { + removeAllActions petros; + petros addAction [localize "STR_ACT_BUILDHQ", {[] spawn buildHQ},nil,0,false,true]; }; - - if ((player == Slowhand) AND (isNil "placementDone") AND (isMultiplayer)) then { - [] execVM "UI\startMenu.sqf"; - }; - diag_log "Antistasi MP Client. JIP client finished"; + diag_log "Antistasi MP Client. JIP client finished"; } else { if (isNil "placementDone") then { waitUntil {!isNil "Slowhand"}; - if (player == Slowhand) then { - if (isMultiplayer) then { - HC_comandante synchronizeObjectsAdd [player]; - player synchronizeObjectsAdd [HC_comandante]; - //if (!(serverName in servidoresOficiales) OR (enableRestart)) then { //Sparker did that to allow other servers to autoload - //if (enableRestart) then { - [] execVM "UI\startMenu.sqf"; - //} else { - // [] remoteExec ["AS_fnc_autoStart",2]; - //}; - diag_log "Antistasi MP Client. Client finished"; - } else { - membersPool = []; - [] execVM "Dialogs\firstLoad.sqf"; - }; - }; + if (player == Slowhand) then { + if (isMultiplayer) then { + HC_comandante synchronizeObjectsAdd [player]; + player synchronizeObjectsAdd [HC_comandante]; + diag_log "Antistasi MP Client. Client finished"; + } else { + membersPool = []; + [] execVM "Dialogs\firstLoad.sqf"; + }; + }; }; }; waitUntil {scriptDone _title}; +if ((player == Slowhand) AND (isNil "placementDone") AND (isMultiplayer) AND (freshstart)) then { + systemChat "Commander freshstart menu"; + [] execVM "UI\startMenu.sqf"; +}; + //Waiting for all game data loaded -waitUntil {sleep 1; !isNil "placementDone";}; +while {isNil "placementDone"} do { + if (isMultiplayer) then { + if (freshstart) then { + systemChat format ["Game world is not initialized yet. Waiting for commander %1 to complete freshstart", Slowhand]; + } else{ + systemChat "Game world is not initialized yet. Waiting for autostart to complete"; + }; + }; + sleep 10; +}; +systemChat "Game world is READY"; INFO("Game is ready to initialize player"); //Teleport to the guer_respawn marker -player setPos ((getMarkerPos guer_respawn) getPos [8,random 360]); +waitUntil {!isNil "posHQ"}; +systemChat "Teleporting player to HQ"; +sleep 2; +player setPos (posHQ getPos [8,random 360]); player setdir (player getdir petros); INFO("Player is moved to the camp"); //Called from unscheduled environment to load data at once +systemChat "Restoring player stats"; [player] remoteExecCall ["AS_fnc_loadPlayer",2]; INFO("Player info loaded"); @@ -232,7 +234,7 @@ statistics = [] execVM "statistics.sqf"; // Add respawn in SP if ACE is active if !(isMultiplayer) then { if (activeACEMedical) then { - player setVariable ["ASunconscious",false,true]; + [player, false] call AS_fnc_setUnconscious; player setVariable ["ASrespawning",false]; player addEventHandler ["HandleDamage", { if (player getVariable ["ACE_isUnconscious", false]) then { diff --git a/AntistasiOfficial.Altis/initServer.sqf b/AntistasiOfficial.Altis/initServer.sqf index 63583f3b..3dd459b4 100644 --- a/AntistasiOfficial.Altis/initServer.sqf +++ b/AntistasiOfficial.Altis/initServer.sqf @@ -1,5 +1,3 @@ -diag_log "####initServer.sqf called"; - call AS_fnc_initWorkerServer; if (!isMultiplayer) exitWith {}; @@ -22,7 +20,7 @@ call compile preprocessFileLineNumbers "WarStatistics\initVariables.sqf"; call compile preprocessFileLineNumbers "WarStatistics\initFunctions.sqf"; call compile preprocessFileLineNumbers "WarStatistics\initVariablesServer.sqf"; //call compile preprocessFileLineNumbers "WarStatistics\initRoadblocks2.sqf"; -ws_grid = call ws_fnc_newGridArray; +//ws_grid = call ws_fnc_newGridArray; diag_log "Antistasi MP Server. WarStatistics init finished"; //(up to here)// @@ -32,32 +30,18 @@ waitUntil {(count playableUnits) > 0}; waitUntil {({(isPlayer _x) AND (!isNull _x) AND (_x == _x)} count allUnits) == (count playableUnits)}; [] execVM "modBlacklist.sqf"; -lockedWeapons = lockedWeapons - unlockedWeapons; +lockedWeapons = lockedWeapons - unlockedWeapons; //Stef 14/12 is this still required? diag_log "Antistasi MP Server. Arsenal config finished"; -[[petros,"hint","Server Init Completed"],"commsMP"] call BIS_fnc_MP; +[[petros,"locHint","STR_INFO_INITSERVER"],"commsMP"] call BIS_fnc_MP; addMissionEventHandler ["HandleDisconnect",{_this call onPlayerDisconnect;false}]; Slowhand = objNull; maxPlayers = playableSlotsNumber west; -if (serverName in servidoresOficiales) then { - [] execVM "serverAutosave.sqf"; - } else { - if (isNil "comandante") then {comandante = (playableUnits select 0)}; - if (isNull comandante) then {comandante = (playableUnits select 0)}; - - { - if (_x ==comandante) then { - Slowhand = _x; - publicVariable "Slowhand"; - _x setRank "CORPORAL"; - [_x,"CORPORAL"] remoteExec ["ranksMP"]; - }; - } forEach playableUnits; - diag_log "Antistasi MP Server. Players are in"; - }; +if ((['AS_autosave', 0] call BIS_fnc_getParamValue) == 1) then {[] execVM "serverAutosave.sqf";}; +publicVariable "Slowhand"; publicVariable "maxPlayers"; serverInitDone = true; publicVariable "serverInitDone"; -diag_log "Antistasi MP Server. serverInitDone set to true."; \ No newline at end of file +diag_log "Antistasi MP Server. serverInitDone set to true."; diff --git a/AntistasiOfficial.Altis/initVar.sqf b/AntistasiOfficial.Altis/initVar.sqf index 0c86cc47..f7af1d02 100644 --- a/AntistasiOfficial.Altis/initVar.sqf +++ b/AntistasiOfficial.Altis/initVar.sqf @@ -6,9 +6,9 @@ diag_log "InitVar.sqf: start"; //You do not have enough balls to make any modification and after making a Bug report because something is wrong. You don't wanna be there. Believe me. //Not commented lines cannot be changed. //Don't touch them. -antistasiVersion = "v 1.7.18 -- modded"; +antistasiVersion = localize "STR_MISSION_NAME_INITVAR_SQF"; -servidoresOficiales = ["Antistasi Official: Main","Antistasi Official: Hardcore", "Antistasi Official: USA"];//this is for author's fine tune the official servers. If I get you including your server in this variable, I will create a special variable for your server. Understand? +servidoresOficiales = ["Antistasi Official: Main","Antistasi Official: Hardcore", "Antistasi Official: USA"];//No longer effect debug = false;//debug variable, not useful for everything.. @@ -17,7 +17,7 @@ distanciaSPWN = 1000;//initial spawn distance. Less than 1Km makes parked vehicl musicON = false; civPerc = 0.02;//initial % civ spawn rate minimoFPS = 15;//initial FPS minimum. -autoHeal = false; +autoHeal = true; allowPlayerRecruit = true; server setvariable ["flag_allowRoleSelection",true,true]; //Stef recruitCooldown = 0; @@ -31,19 +31,15 @@ closeMarkersUpdating = 0; static_playerSide = "B"; //get enableRestart from server's parameters in multiplayer -enableRestart = if (isMultiplayer) then -{ - [true, false] select (("AS_enableCampaignReset" call BIS_fnc_getParamValue) == 0) -} -else -{ - true -}; +freshstart = !(isMultiplayer) OR {("AS_enableCampaignReset" call BIS_fnc_getParamValue) != 0}; +membership = !(isMultiplayer) OR {("AS_enableServerMember" call BIS_fnc_getParamValue) != 0}; +commanderswitch = !(isMultiplayer) OR {("AS_enableSwitchComm" call BIS_fnc_getParamValue) != 0}; status_templatesLoaded = false; -activeJNA = (("AS_param_useJNA" call BIS_fnc_getParamValue) == 1); +activeJNA = true; //It can't be disabled because of loss of compatibility if (activeJNA) then { jna_dataList = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]; + server setVariable ["jna_mrestricted",false,true]; }; missionPath = [(str missionConfigFile), 0, -15] call BIS_fnc_trimString; @@ -110,7 +106,7 @@ if (!isServer) exitWith {}; server setVariable ["milActive", 0, true]; server setVariable ["civActive", 0, true]; server setVariable ["expActive", false, true]; -server setVariable ["blockCSAT", false, true]; //17/08 Stef, what is this? +server setVariable ["blockCSAT", false, true]; server setVariable ["jTime", 0, true]; server setVariable ["genLMGlocked",true,true]; @@ -243,6 +239,6 @@ publicVariable "reducedGarrisons"; publicVariable "replaceFIA"; publicVariable "static_playerSide"; -if (isMultiplayer) then {[[petros,"hint","Variables Init Completed"],"commsMP"] call BIS_fnc_MP;}; +if (isMultiplayer) then {[[petros,"locHint","STR_HINTS_INITVAR"],"commsMP"] call BIS_fnc_MP;}; diag_log "InitVar.sqf: end"; diff --git a/AntistasiOfficial.Altis/initZones.sqf b/AntistasiOfficial.Altis/initZones.sqf index 2d727e14..207ee045 100644 --- a/AntistasiOfficial.Altis/initZones.sqf +++ b/AntistasiOfficial.Altis/initZones.sqf @@ -200,37 +200,37 @@ if (worldName in ["Altis", "altis", "Bornholm", "bornholm", "Tanoa", "tanoa", "N }; { - [_x, "loc_power", "Power Plant"] call _fnc_marker; + [_x, "loc_power", localize "STR_GL_MAP_PP"] call _fnc_marker; } forEach power; { - [_x, IND_marker_type, format ["%1 Airport", A3_Str_INDEP]] call _fnc_marker; + [_x, IND_marker_type, format [localize "STR_GL_MAP_AP", A3_Str_INDEP]] call _fnc_marker; server setVariable [_x,dateToNumber date,true]; } forEach aeropuertos; { - [_x, IND_marker_type, format ["%1 Base", A3_Str_INDEP]] call _fnc_marker; + [_x, IND_marker_type, format [localize "STR_GL_MAP_MB", A3_Str_INDEP]] call _fnc_marker; server setVariable [_x,dateToNumber date,true]; } forEach bases; { - [_x, "loc_rock", "Resources"] call _fnc_marker; + [_x, "loc_rock", localize "STR_GL_MAP_RS"] call _fnc_marker; } forEach recursos; { - [_x, "u_installation", "Factory"] call _fnc_marker; + [_x, "u_installation", localize "STR_GL_MAP_FAC"] call _fnc_marker; } forEach fabricas; { - [_x, "loc_bunker", format ["%1 AA OP", A3_Str_INDEP]] call _fnc_marker; + [_x, "loc_bunker", format [localize "STR_GL_MAP_AA", A3_Str_INDEP]] call _fnc_marker; } forEach puestosAA; { - [_x, "loc_bunker", format ["%1 Outpost", A3_Str_INDEP]] call _fnc_marker; + [_x, "loc_bunker", format [localize "STR_GL_MAP_OP", A3_Str_INDEP]] call _fnc_marker; } forEach puestos; { - [_x, "b_naval", "Sea Port"] call _fnc_marker; + [_x, "b_naval", localize "STR_GL_MAP_SP"] call _fnc_marker; } forEach puertos; markers = markers arrayIntersect markers; @@ -263,9 +263,9 @@ publicVariable "safeDistance_garrison"; publicVariable "safeDistance_fasttravel"; "spawnCSAT" setMarkerType OPFOR_marker_type; -"spawnCSAT" setMarkerText format ["%1 Carrier", A3_Str_RED]; +"spawnCSAT" setMarkerText format [localize "STR_GL_MAP_CRR", A3_Str_RED]; "spawnNATO" setMarkerType BLUFOR_marker_type; -"spawnNATO" setMarkerText format ["%1 Carrier", A3_Str_BLUE]; +"spawnNATO" setMarkerText format [localize "STR_GL_MAP_CRR", A3_Str_BLUE]; if (count posAntenas > 0) then { for "_i" from 0 to (count posantenas - 1) do { @@ -277,14 +277,14 @@ if (count posAntenas > 0) then { _mrkfin setMarkerShape "ICON"; _mrkfin setMarkerType "loc_Transmitter"; _mrkfin setMarkerColor "ColorBlack"; - _mrkfin setMarkerText "Radio Tower"; + _mrkfin setMarkerText localize "STR_GL_MAP_RT"; mrkAntenas = mrkAntenas + [_mrkfin]; _antenna addEventHandler ["Killed", { _antenna = _this select 0; _mrk = [mrkAntenas, _antenna] call BIS_fnc_nearestPosition; antenas = antenas - [_antenna]; antenasmuertas = antenasmuertas + [getPos _antenna]; deleteMarker _mrk; if (activeBE) then {["cl_loc"] remoteExec ["fnc_BE_XP", 2]}; - [["TaskSucceeded", ["", localize "STR_TSK_RADIO_DESTROYED"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + {["TaskSucceeded", ["", localize "STR_TSK_TD_RADIO_DESTROYED"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }]; }; }; @@ -310,4 +310,4 @@ pospepe = []; {pospepe = pospepe + getPos _x} forEach pepe; copytoclipboard str pospepe; */ -if (isMultiplayer) then {[[petros,"hint", localize "STR_INFO_INITZONES"],"commsMP"] call BIS_fnc_MP;} +if (isMultiplayer) then {[[petros,"locHint","STR_INFO_INITZONES"],"commsMP"] call BIS_fnc_MP;} diff --git a/AntistasiOfficial.Altis/mission.sqm b/AntistasiOfficial.Altis/mission.sqm index f1637146..598278ad 100644 --- a/AntistasiOfficial.Altis/mission.sqm +++ b/AntistasiOfficial.Altis/mission.sqm @@ -8,7 +8,7 @@ class EditorData toggles=2; class ItemIDProvider { - nextID=887; + nextID=931; }; class MarkerIDProvider { @@ -16,14 +16,14 @@ class EditorData }; class LayerIndexProvider { - nextID=364; + nextID=428; }; class Camera { - pos[]={3637.2073,26.639614,10378.357}; - dir[]={-0.37561938,-0.19259754,-0.90654719}; - up[]={-0.073725313,0.98127532,-0.17793444}; - aside[]={-0.92384475,-2.4952169e-007,0.38278738}; + pos[]={3709.3755,99.568268,10310.304}; + dir[]={-0.70126104,-0.71039939,0.059864335}; + up[]={-0.70782828,0.7037949,0.06042479}; + aside[]={0.085057281,-3.6870188e-007,0.99638343}; }; }; binarizationWanted=0; @@ -34,19 +34,21 @@ addons[]= "A3_Structures_F_Mil_Flags", "A3_Structures_F_Civ_InfoBoards", "A3_Structures_F_Civ_Camping", - "cba_xeh", "A3_Modules_F", "A3_Characters_F", "A3_Modules_F_Hc", "A3_Structures_F_Mil_Cargo", "A3_Structures_F_Mil_Helipads", - "A3_Structures_F_Mil_Fortification" + "A3_Structures_F_Mil_Fortification", + "A3_Structures_F_Ind_AirPort", + "A3_Structures_F_Mil_BagFence", + "A3_Structures_F_Argo_Military_Fortifications" }; class AddonsMetaData { class List { - items=6; + items=8; class Item0 { className="A3_Ui_F"; @@ -76,16 +78,30 @@ class AddonsMetaData url="https://www.arma3.com"; }; class Item4 + { + className="A3_Modules_F"; + name="Arma 3 Alpha - Scripted Modules"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; + }; + class Item5 { className="A3_Characters_F"; name="Arma 3 Alpha - Characters and Clothing"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; - class Item5 + class Item6 { - className="A3_Modules_F"; - name="Arma 3 Alpha - Scripted Modules"; + className="A3_Structures_F_Ind"; + name="Arma 3 - Industrial Structures"; + author="Bohemia Interactive"; + url="https://www.arma3.com"; + }; + class Item7 + { + className="A3_Structures_F_Argo"; + name="Arma 3 Malden - Buildings and Structures"; author="Bohemia Interactive"; url="https://www.arma3.com"; }; @@ -96,50 +112,23 @@ class ScenarioData { author="barbolani"; }; -class CustomAttributes -{ - class Category0 - { - name="Scenario"; - class Attribute0 - { - property="cba_settings_hasSettingsFile"; - expression="false"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=1; - }; - }; - }; - nAttributes=1; - }; -}; class Mission { class Intel { - briefingName="[SP/CO] - Antistasi Altis Blufor 1.7.18"; + briefingName="@STR_MISSION_NAME_SQM"; overviewText="Build FIA Army from scratch and defeat the AAF and CSAT forces in a whole map Dynamic Mission."; resistanceWest=0; resistanceEast=1; - startWeather=0.1; - startWind=0.099999994; - forecastWeather=0.1; - forecastWind=0.099999994; - forecastWaves=0; + startWeather=0; + startWind=0; + forecastWeather=0.40257543; + forecastWind=0; + forecastWaves=0.34750906; forecastLightnings=0.099999994; year=2035; month=6; - day=6; + day=1; hour=6; minute=0; startFogDecay=0.013; @@ -147,7 +136,7 @@ class Mission }; class Entities { - items=221; + items=326; class Item0 { dataType="Marker"; @@ -203,15 +192,16 @@ class Mission class Item4 { dataType="Marker"; - position[]={20082.896,101.02009,6728.3408}; + position[]={20082.896,101.02,6728.3408}; name="base"; markerType="RECTANGLE"; type="Empty"; colorName="ColorGUER"; - a=30; - b=30; - angle=36.851192; + a=60; + b=60; + angle=36.850998; id=4; + atlOffset=-9.1552734e-005; }; class Item5 { @@ -229,29 +219,30 @@ class Mission class Item6 { dataType="Marker"; - position[]={21029.996,24.117929,7235.0825}; + position[]={20954.295,24.118042,7240.4063}; name="airport"; markerType="RECTANGLE"; type="Empty"; colorName="ColorEAST"; - a=300; - b=200; + a=220; + b=160; angle=144.513; id=6; + atlOffset=-3.1458988; }; class Item7 { dataType="Marker"; - position[]={23104,0,18684}; + position[]={23033.656,0,18836.555}; name="airport_1"; markerType="RECTANGLE"; type="Empty"; colorName="ColorEAST"; - a=300; - b=200; + a=130; + b=130; angle=270; id=7; - atlOffset=-3.1900001; + atlOffset=-3.2640405; }; class Item8 { @@ -348,15 +339,16 @@ class Mission class Item15 { dataType="Marker"; - position[]={23077.313,48.253777,7284.8506}; + position[]={23077.313,48.254002,7284.8511}; name="puesto"; markerType="RECTANGLE"; type="Empty"; colorName="ColorGreen"; a=100; - b=80; + b=60; angle=148.493; id=15; + atlOffset=0.00022888184; }; class Item16 { @@ -374,28 +366,30 @@ class Mission class Item17 { dataType="Marker"; - position[]={16660.742,2.6210573,12297.301}; + position[]={16688.547,2.6209717,12293.946}; name="puerto"; markerType="RECTANGLE"; type="Empty"; colorName="ColorBlue"; a=60; b=60; + angle=181.18825; id=17; + atlOffset=-0.88212895; }; class Item18 { dataType="Marker"; - position[]={15326.631,0,15861.137}; + position[]={15322.282,0,15890.239}; name="puerto_1"; markerType="RECTANGLE"; type="Empty"; colorName="ColorBlue"; a=50; b=40; - angle=180.07253; + angle=169.33795; id=18; - atlOffset=-4.171648; + atlOffset=-4.0769129; }; class Item19 { @@ -445,16 +439,16 @@ class Mission class Item23 { dataType="Marker"; - position[]={20952,0,19252}; + position[]={20926.391,0,19235.641}; name="base_2"; markerType="RECTANGLE"; type="Empty"; colorName="ColorGUER"; - a=100; - b=100; + a=120; + b=120; angle=16.886997; id=24; - atlOffset=-14.915405; + atlOffset=-11.187176; }; class Item24 { @@ -472,15 +466,16 @@ class Mission class Item25 { dataType="Marker"; - position[]={21912.703,17.296244,20971.66}; + position[]={21912.703,17.296,20971.66}; name="puesto_4"; markerType="RECTANGLE"; type="Empty"; colorName="ColorGreen"; - a=140; - b=80; - angle=319.12381; + a=180; + b=120; + angle=319.12387; id=26; + atlOffset=-0.00024414063; }; class Item26 { @@ -522,20 +517,21 @@ class Mission class Item29 { dataType="Marker"; - position[]={26927.039,19.652582,24758.293}; + position[]={26809.869,19.653,24672.844}; name="airport_2"; markerType="RECTANGLE"; type="Empty"; colorName="ColorEAST"; - a=300; - b=200; - angle=131.24457; + a=200; + b=170; + angle=131.24498; id=30; + atlOffset=-1.0862484; }; class Item30 { dataType="Marker"; - position[]={14327.974,0,16262.851}; + position[]={14334.372,0,16258.778}; name="airport_3"; markerType="RECTANGLE"; type="Empty"; @@ -544,7 +540,7 @@ class Mission b=180; angle=135.513; id=31; - atlOffset=-19.542929; + atlOffset=-19.837833; }; class Item31 { @@ -655,7 +651,7 @@ class Mission class Item39 { dataType="Marker"; - position[]={8325.4375,75.940002,10068.546}; + position[]={8289.9717,75.939941,10061.621}; name="base_11"; markerType="RECTANGLE"; type="Empty"; @@ -664,6 +660,7 @@ class Mission b=60; angle=54.859959; id=43; + atlOffset=-0.81355286; }; class Item40 { @@ -681,16 +678,16 @@ class Mission class Item41 { dataType="Marker"; - position[]={11475,0,11727}; + position[]={11439.839,0,11709.22}; name="airport_4"; markerType="RECTANGLE"; type="Empty"; colorName="ColorEAST"; - a=330; - b=200; + a=210; + b=130; angle=307; id=45; - atlOffset=-23.171967; + atlOffset=-23.902853; }; class Item42 { @@ -773,15 +770,16 @@ class Mission class Item48 { dataType="Marker"; - position[]={3282.374,0,13017.032}; + position[]={3187.5779,0,12911.908}; name="puerto_2"; markerType="RECTANGLE"; type="Empty"; colorName="ColorBlue"; - a=40; - b=60; + a=30; + b=30; + angle=282.60989; id=55; - atlOffset=-11.52132; + atlOffset=-2.1528516; }; class Item49 { @@ -1048,31 +1046,8 @@ class Mission name="caja"; }; id=95; - type="IG_supplyCrate_F"; + type="B_supplyCrate_F"; atlOffset=-0.0049905777; - class CustomAttributes - { - class Attribute0 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[""launch_RPG32_F"",""arifle_TRG20_F"",""arifle_TRG21_F"",""arifle_TRG21_GL_F"",""srifle_DMR_06_camo_F"",""srifle_DMR_06_olive_F"",""LMG_Mk200_F""],[1,1,4,1,1,1,2]],[[""30Rnd_556x45_Stanag"",""200Rnd_65x39_cased_Box"",""20Rnd_762x51_Mag"",""1Rnd_HE_Grenade_shell"",""1Rnd_Smoke_Grenade_shell"",""1Rnd_SmokeGreen_Grenade_shell"",""Chemlight_blue"",""RPG32_F"",""RPG32_HE_F"",""HandGrenade"",""MiniGrenade"",""SmokeShell"",""SmokeShellGreen"",""UGL_FlareWhite_F"",""UGL_FlareGreen_F""],[24,6,12,6,2,2,6,3,1,6,6,2,2,2,2]],[[""Binocular"",""Rangefinder"",""FirstAidKit"",""acc_flashlight"",""bipod_03_F_oli"",""V_Chestrig_oli"",""V_TacVest_blk""],[1,1,10,2,2,4,4]],[[""B_TacticalPack_blk""],[2]]],false]"; - }; - }; - }; - nAttributes=1; - }; }; class Item69 { @@ -1149,29 +1124,6 @@ class Mission id=99; type="Box_NATO_AmmoVeh_F"; atlOffset=-6.5803528e-005; - class CustomAttributes - { - class Attribute0 - { - property="ammoBox"; - expression="[_this,_value] call bis_fnc_initAmmoBox;"; - class Value - { - class data - { - class type - { - type[]= - { - "STRING" - }; - }; - value="[[[[],[]],[[],[]],[[],[]],[[],[]]],true]"; - }; - }; - }; - nAttributes=1; - }; }; class Item73 { @@ -1512,29 +1464,30 @@ class Mission class Item93 { dataType="Marker"; - position[]={20672,0,19430}; + position[]={20672,0,19415.174}; name="puerto_3"; markerType="RECTANGLE"; type="Empty"; colorName="ColorBlue"; a=80; - b=80; - angle=307; + b=20; + angle=128.32666; id=192; - atlOffset=-4.6573095; + atlOffset=-5.8267088; }; class Item94 { dataType="Marker"; - position[]={27571.688,4.1595998,24581.311}; + position[]={27615.791,4.1600342,24616.549}; name="puerto_4"; markerType="RECTANGLE"; type="Empty"; colorName="ColorBlue"; - a=60; - b=100; - angle=145.12199; + a=30; + b=80; + angle=255.87393; id=193; + atlOffset=-2.3145924; }; class Item95 { @@ -2378,7 +2331,7 @@ class Mission type="Empty"; colorName="ColorGUER"; a=130; - b=50; + b=70; angle=135.83093; id=822; atlOffset=-17.907196; @@ -5493,54 +5446,18 @@ class Mission class Item188 { dataType="Marker"; - position[]={2480,0,22252}; + position[]={2407.5154,0,22397.535}; name="puesto_36"; markerType="RECTANGLE"; type="Empty"; colorName="ColorGreen"; - a=150; - b=160; + a=90; + b=90; angle=207.99992; id=889; - atlOffset=-35.112888; + atlOffset=-60.523762; }; class Item189 - { - dataType="Logic"; - class PositionInfo - { - position[]={2474.2244,37.169842,22248.283}; - }; - areaSize[]={15,0,15}; - flags=1; - id=890; - type="ModuleHideTerrainObjects_F"; - atlOffset=0.50082397; - class CustomAttributes - { - class Attribute0 - { - property="#filter"; - expression="_this setVariable [""#filter"",_value]"; - class Value - { - class data - { - class type - { - type[]= - { - "SCALAR" - }; - }; - value=15; - }; - }; - }; - nAttributes=1; - }; - }; - class Item190 { dataType="Marker"; position[]={4891,0,19448}; @@ -5554,7 +5471,7 @@ class Mission id=891; atlOffset=-193.37299; }; - class Item191 + class Item190 { dataType="Object"; class PositionInfo @@ -5570,7 +5487,7 @@ class Mission id=895; type="Land_Cargo_Patrol_V1_F"; }; - class Item192 + class Item191 { dataType="Object"; class PositionInfo @@ -5586,7 +5503,7 @@ class Mission id=896; type="Land_Cargo_Patrol_V1_F"; }; - class Item193 + class Item192 { dataType="Marker"; position[]={5207,0,21059}; @@ -5600,7 +5517,7 @@ class Mission id=898; atlOffset=-239.25533; }; - class Item194 + class Item193 { dataType="Object"; class PositionInfo @@ -5616,7 +5533,7 @@ class Mission id=899; type="Land_Cargo_Patrol_V1_F"; }; - class Item195 + class Item194 { dataType="Object"; class PositionInfo @@ -5632,7 +5549,7 @@ class Mission id=900; type="Land_Cargo_Patrol_V1_F"; }; - class Item196 + class Item195 { dataType="Object"; class PositionInfo @@ -5648,13 +5565,13 @@ class Mission id=901; type="Land_Cargo_Patrol_V1_F"; }; - class Item197 + class Item196 { dataType="Object"; class PositionInfo { - position[]={4893.0986,334.74176,21867.936}; - angles[]={6.2791886,3.5988128,0}; + position[]={4921.0928,341.6449,21894.279}; + angles[]={0,3.8670552,0}; }; side="Empty"; flags=4; @@ -5707,7 +5624,7 @@ class Mission nAttributes=2; }; }; - class Item198 + class Item197 { dataType="Object"; class PositionInfo @@ -5767,7 +5684,7 @@ class Mission nAttributes=2; }; }; - class Item199 + class Item198 { dataType="Object"; class PositionInfo @@ -5827,7 +5744,7 @@ class Mission nAttributes=2; }; }; - class Item200 + class Item199 { dataType="Object"; class PositionInfo @@ -5843,7 +5760,7 @@ class Mission id=946; type="Land_HBarrier_3_F"; }; - class Item201 + class Item200 { dataType="Object"; class PositionInfo @@ -5860,7 +5777,7 @@ class Mission type="Land_HBarrier_3_F"; atlOffset=0.068069458; }; - class Item202 + class Item201 { dataType="Object"; class PositionInfo @@ -5876,7 +5793,7 @@ class Mission id=948; type="Land_HBarrier_3_F"; }; - class Item203 + class Item202 { dataType="Object"; class PositionInfo @@ -5892,7 +5809,7 @@ class Mission type="Land_HBarrier_3_F"; atlOffset=0.25846863; }; - class Item204 + class Item203 { dataType="Logic"; class PositionInfo @@ -5926,50 +5843,10 @@ class Mission }; }; }; - nAttributes=1; - }; - }; - class Item205 - { - dataType="Object"; - class PositionInfo - { - position[]={5278.8003,25.509235,14212.555}; - angles[]={0,4.7261648,0}; - }; - side="Empty"; - flags=4; - class Attributes - { - disableSimulation=1; - }; - id=967; - type="Land_HelipadCivil_F"; - class CustomAttributes - { - class Attribute0 - { - property="allowDamage"; - expression="_this allowdamage _value;"; - class Value - { - class data - { - class type - { - type[]= - { - "BOOL" - }; - }; - value=0; - }; - }; - }; class Attribute1 { - property="hideObject"; - expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; class Value { class data @@ -5981,20 +5858,20 @@ class Mission "BOOL" }; }; - value=1; + value=0; }; }; }; nAttributes=2; }; }; - class Item206 + class Item204 { dataType="Object"; class PositionInfo { - position[]={8274.2666,74.911804,10107.455}; - angles[]={0,1.0497421,0}; + position[]={5420.2305,68.293045,14320.077}; + angles[]={0,4.7487946,0}; }; side="Empty"; flags=4; @@ -6002,7 +5879,7 @@ class Mission { disableSimulation=1; }; - id=968; + id=967; type="Land_HelipadCivil_F"; class CustomAttributes { @@ -6047,13 +5924,13 @@ class Mission nAttributes=2; }; }; - class Item207 + class Item205 { dataType="Object"; class PositionInfo { - position[]={14266.486,20.381611,16195.337}; - angles[]={0,3.6476266,0}; + position[]={8276.2861,74.724739,10107.659}; + angles[]={0,1.0497421,0}; }; side="Empty"; flags=4; @@ -6061,9 +5938,8 @@ class Mission { disableSimulation=1; }; - id=991; + id=968; type="Land_HelipadCivil_F"; - atlOffset=-0.0010852814; class CustomAttributes { class Attribute0 @@ -6107,13 +5983,13 @@ class Mission nAttributes=2; }; }; - class Item208 + class Item206 { dataType="Object"; class PositionInfo { - position[]={11625.87,23.152882,12021.364}; - angles[]={0,0.73409039,0}; + position[]={14237.114,20.465462,16141.645}; + angles[]={0,3.6476266,0}; }; side="Empty"; flags=4; @@ -6121,9 +5997,9 @@ class Mission { disableSimulation=1; }; - id=997; + id=991; type="Land_HelipadCivil_F"; - atlOffset=5.1498413e-005; + atlOffset=-0.6762085; class CustomAttributes { class Attribute0 @@ -6167,13 +6043,13 @@ class Mission nAttributes=2; }; }; - class Item209 + class Item207 { dataType="Object"; class PositionInfo { - position[]={11432.543,24.749901,11762.074}; - angles[]={6.2671871,3.6476266,6.2073317}; + position[]={11642.452,22.066982,11800.163}; + angles[]={0,5.3484025,0}; }; side="Empty"; flags=4; @@ -6226,7 +6102,7 @@ class Mission nAttributes=2; }; }; - class Item210 + class Item208 { dataType="Object"; class PositionInfo @@ -6242,7 +6118,6 @@ class Mission }; id=1009; type="Land_HelipadCivil_F"; - atlOffset=0.00048828125; class CustomAttributes { class Attribute0 @@ -6286,7 +6161,7 @@ class Mission nAttributes=2; }; }; - class Item211 + class Item209 { dataType="Object"; class PositionInfo @@ -6346,13 +6221,13 @@ class Mission nAttributes=2; }; }; - class Item212 + class Item210 { dataType="Object"; class PositionInfo { - position[]={21058.412,19.430807,7389.6123}; - angles[]={0,3.6476266,0}; + position[]={20862.531,27.250917,7290.2305}; + angles[]={0,0.94741702,0}; }; side="Empty"; flags=4; @@ -6362,7 +6237,6 @@ class Mission }; id=1021; type="Land_HelipadCivil_F"; - atlOffset=-0.0020961761; class CustomAttributes { class Attribute0 @@ -6406,13 +6280,13 @@ class Mission nAttributes=2; }; }; - class Item213 + class Item211 { dataType="Object"; class PositionInfo { - position[]={22957.441,5.0631752,18840.359}; - angles[]={0,2.429028,0}; + position[]={23036.486,3.1900001,18786.871}; + angles[]={0,1.6152996,0}; }; side="Empty"; flags=4; @@ -6422,7 +6296,6 @@ class Mission }; id=1027; type="Land_HelipadCivil_F"; - atlOffset=0.0010514259; class CustomAttributes { class Attribute0 @@ -6466,7 +6339,7 @@ class Mission nAttributes=2; }; }; - class Item214 + class Item212 { dataType="Object"; class PositionInfo @@ -6526,7 +6399,7 @@ class Mission nAttributes=2; }; }; - class Item215 + class Item213 { dataType="Object"; class PositionInfo @@ -6585,7 +6458,7 @@ class Mission nAttributes=2; }; }; - class Item216 + class Item214 { dataType="Object"; class PositionInfo @@ -6645,12 +6518,12 @@ class Mission nAttributes=2; }; }; - class Item217 + class Item215 { dataType="Object"; class PositionInfo { - position[]={12282.107,123.13014,8936.9873}; + position[]={12280.258,123.34154,8933.2061}; angles[]={0.057270125,4.288846,0.031988446}; }; side="Empty"; @@ -6704,7 +6577,7 @@ class Mission nAttributes=2; }; }; - class Item218 + class Item216 { dataType="Object"; class PositionInfo @@ -6763,7 +6636,7 @@ class Mission nAttributes=2; }; }; - class Item219 + class Item217 { dataType="Object"; class PositionInfo @@ -6822,7 +6695,7 @@ class Mission nAttributes=2; }; }; - class Item220 + class Item218 { dataType="Object"; class PositionInfo @@ -6881,6 +6754,3259 @@ class Mission nAttributes=2; }; }; + class Item219 + { + dataType="Logic"; + class PositionInfo + { + position[]={9761.1309,230.80238,19518.57}; + angles[]={0,2.8785017,0}; + }; + areaSize[]={5,0,12}; + areaIsRectangle=1; + flags=1; + id=902; + type="ModuleHideTerrainObjects_F"; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=11; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item220 + { + dataType="Logic"; + class PositionInfo + { + position[]={3575.4231,21.447372,14464.622}; + angles[]={0,4.7340503,0}; + }; + areaSize[]={5,0,5}; + areaIsRectangle=1; + flags=1; + id=903; + type="ModuleHideTerrainObjects_F"; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=15; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item221 + { + dataType="Object"; + class PositionInfo + { + position[]={3599.0708,26.201252,14481.897}; + angles[]={0,3.7738411,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=904; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=0.068143845; + }; + class Item222 + { + dataType="Object"; + class PositionInfo + { + position[]={3566.6516,26.534517,14450.287}; + angles[]={0,0.60251033,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=906; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item223 + { + dataType="Object"; + class PositionInfo + { + position[]={4022.8906,267.1608,19225.729}; + angles[]={0,5.7904806,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=907; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item224 + { + dataType="Object"; + class PositionInfo + { + position[]={4020.1414,266.4119,19250.738}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=908; + type="Land_Cargo_HQ_V1_F"; + atlOffset=-0.33837891; + }; + class Item225 + { + dataType="Object"; + class PositionInfo + { + position[]={3534.7388,262.59891,19956.654}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=909; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-0.34362793; + }; + class Item226 + { + dataType="Object"; + class PositionInfo + { + position[]={4861.9502,194.60402,19438.867}; + angles[]={0,0.85388076,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=910; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item227 + { + dataType="Object"; + class PositionInfo + { + position[]={4984.4624,212.9593,19481.533}; + angles[]={0,2.3752575,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=914; + type="Land_Cargo_HQ_V1_F"; + }; + class Item228 + { + dataType="Object"; + class PositionInfo + { + position[]={4888.1387,360.05228,21924.01}; + angles[]={0,2.1123464,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=916; + type="Land_Cargo_Tower_V1_F"; + }; + class Item229 + { + dataType="Object"; + class PositionInfo + { + position[]={4842.522,341.48743,22001.531}; + angles[]={0,4.7289844,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=918; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.36270142; + }; + class Item230 + { + dataType="Logic"; + class PositionInfo + { + position[]={4831.022,323.69626,21846.027}; + angles[]={0,4.9948463,0}; + }; + areaSize[]={5,0,30}; + areaIsRectangle=1; + flags=1; + id=919; + type="ModuleHideTerrainObjects_F"; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=15; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item231 + { + dataType="Object"; + class PositionInfo + { + position[]={6541.856,92.615578,22689.283}; + angles[]={0,2.9834077,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=920; + type="Land_Cargo_HQ_V2_F"; + }; + class Item232 + { + dataType="Object"; + class PositionInfo + { + position[]={6552.3994,94.916443,22670.07}; + angles[]={0,5.5946751,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=922; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.2817688; + }; + class Item233 + { + dataType="Object"; + class PositionInfo + { + position[]={2403.0269,68.505844,22425.934}; + angles[]={0,4.0771494,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=923; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.66249084; + }; + class Item234 + { + dataType="Object"; + class PositionInfo + { + position[]={2471.6365,86.342499,22430.891}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=924; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-0.836586; + }; + class Item235 + { + dataType="Object"; + class PositionInfo + { + position[]={3158.8438,22.13796,21933.863}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=925; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=0.038145065; + }; + class Item236 + { + dataType="Object"; + class PositionInfo + { + position[]={3129.0935,19.479326,21975.174}; + angles[]={0,0.84364825,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=927; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-9.5367432e-007; + }; + class Item237 + { + dataType="Object"; + class PositionInfo + { + position[]={3374.9756,113.95701,21397.943}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=928; + type="Land_Cargo_Tower_V1_F"; + }; + class Item238 + { + dataType="Object"; + class PositionInfo + { + position[]={3391.7412,103.45422,21366.299}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=929; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=7.6293945e-006; + }; + class Item239 + { + dataType="Object"; + class PositionInfo + { + position[]={9293.0469,22.007439,21566.828}; + angles[]={0,4.30966,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=932; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item240 + { + dataType="Object"; + class PositionInfo + { + position[]={8996.4727,21.45295,21409.941}; + angles[]={0,2.4943135,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=933; + type="Land_Cargo_HQ_V1_F"; + }; + class Item241 + { + dataType="Object"; + class PositionInfo + { + position[]={8977.3438,27.781113,21410.1}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=934; + type="Land_Airport_Tower_F"; + }; + class Item242 + { + dataType="Object"; + class PositionInfo + { + position[]={9183.3721,22.350897,21457.139}; + angles[]={0,5.657073,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=935; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item243 + { + dataType="Object"; + class PositionInfo + { + position[]={9170.5498,22.457399,21446.398}; + angles[]={0,5.6333933,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=936; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item244 + { + dataType="Object"; + class PositionInfo + { + position[]={9027.7578,23.531631,21343.953}; + angles[]={0,5.6333933,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=937; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item245 + { + dataType="Object"; + class PositionInfo + { + position[]={9126.1553,27.412918,21637.201}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=938; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-0.0099000931; + }; + class Item246 + { + dataType="Object"; + class PositionInfo + { + position[]={11422.4,29.309406,11671.359}; + angles[]={0,1.0115303,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=939; + type="Land_Cargo_HQ_V1_F"; + atlOffset=1.0188999; + }; + class Item247 + { + dataType="Object"; + class PositionInfo + { + position[]={11426.859,29.964359,11743.732}; + angles[]={0,4.2000513,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=940; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.97747421; + }; + class Item248 + { + dataType="Object"; + class PositionInfo + { + position[]={11477.765,35.963001,11723.507}; + angles[]={0,4.2127972,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=941; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-0.017017365; + }; + class Item249 + { + dataType="Object"; + class PositionInfo + { + position[]={11392.924,40.057144,11692.614}; + angles[]={0,2.7739661,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=942; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-0.71819496; + }; + class Item250 + { + dataType="Object"; + class PositionInfo + { + position[]={8981.8555,74.386299,7482.0405}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=943; + type="Land_Cargo_HQ_V1_F"; + }; + class Item251 + { + dataType="Object"; + class PositionInfo + { + position[]={8900.6992,71.792625,7465.3579}; + angles[]={0,0.57318205,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=944; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item252 + { + dataType="Object"; + class PositionInfo + { + position[]={11556.196,80.688263,7041.0117}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=945; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.060882568; + }; + class Item253 + { + dataType="Object"; + class PositionInfo + { + position[]={11523.762,89.800621,7107.3555}; + angles[]={0,1.9965525,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=946; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.15951538; + }; + class Item254 + { + dataType="Object"; + class PositionInfo + { + position[]={10334.907,72.399086,8692.1846}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=948; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item255 + { + dataType="Object"; + class PositionInfo + { + position[]={13836.867,63.772224,6386.5112}; + angles[]={0,1.4895039,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=949; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.56842804; + }; + class Item256 + { + dataType="Object"; + class PositionInfo + { + position[]={13795.042,64.901588,6401.981}; + angles[]={0,2.5499098,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=950; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=3.8146973e-006; + }; + class Item257 + { + dataType="Object"; + class PositionInfo + { + position[]={22988.684,16.9498,18911.826}; + angles[]={0,4.0796099,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=951; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-4.7683716e-007; + }; + class Item258 + { + dataType="Object"; + class PositionInfo + { + position[]={22950.918,17.681402,18830.135}; + angles[]={0,2.3446069,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=952; + type="Land_Cargo_Tower_V1_F"; + }; + class Item259 + { + dataType="Object"; + class PositionInfo + { + position[]={22995.125,8.8610163,18852.758}; + angles[]={0,5.6882114,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=953; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.94216871; + class CustomAttributes + { + class Attribute0 + { + property="DoorStates"; + expression="['init',_this,_value] call bis_fnc_3DENAttributeDoorStates;"; + class Value + { + class data + { + class type + { + type[]= + { + "ARRAY" + }; + }; + class value + { + items=3; + class Item0 + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0; + }; + }; + class Item1 + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0; + }; + }; + class Item2 + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=0; + }; + }; + }; + }; + }; + }; + nAttributes=1; + }; + }; + class Item260 + { + dataType="Object"; + class PositionInfo + { + position[]={23227.846,14.861454,18911.82}; + angles[]={0,5.7622094,0}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=954; + type="Land_Airport_Tower_F"; + atlOffset=1.0068536; + }; + class Item261 + { + dataType="Object"; + class PositionInfo + { + position[]={23008.809,4.2593431,18888.158}; + angles[]={0,0.31385446,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=961; + type="Land_BagFence_Long_F"; + atlOffset=-0.069072485; + }; + class Item262 + { + dataType="Object"; + class PositionInfo + { + position[]={23010.932,4.5090179,18886.811}; + angles[]={0,1.1329281,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=962; + type="Land_SandbagBarricade_01_half_F"; + atlOffset=-0.014142275; + }; + class Item263 + { + dataType="Object"; + class PositionInfo + { + position[]={23011.547,5.1282597,18884.684}; + angles[]={0,1.4215848,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=963; + type="Land_SandbagBarricade_01_hole_F"; + atlOffset=2.3841858e-007; + }; + class Item264 + { + dataType="Object"; + class PositionInfo + { + position[]={23011.301,4.5090179,18882.506}; + angles[]={0,1.8773196,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=964; + type="Land_SandbagBarricade_01_half_F"; + atlOffset=0.0019612312; + }; + class Item265 + { + dataType="Object"; + class PositionInfo + { + position[]={23009.363,4.2593431,18880.928}; + angles[]={0,5.8081102,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=965; + type="Land_BagFence_Long_F"; + atlOffset=-0.064025879; + }; + class Item266 + { + dataType="Object"; + class PositionInfo + { + position[]={14310.301,17.968737,16013.144}; + angles[]={0,0.75605917,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=976; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item267 + { + dataType="Object"; + class PositionInfo + { + position[]={14322.499,17.959999,16001.149}; + angles[]={0,0.75605917,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=980; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item268 + { + dataType="Object"; + class PositionInfo + { + position[]={14134.74,20.383339,16205.342}; + angles[]={0,1.960511,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=981; + type="Land_JumpTarget_F"; + atlOffset=-1.9073486e-006; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item269 + { + dataType="Object"; + class PositionInfo + { + position[]={14225.651,20.560631,16219.368}; + angles[]={0,1.9490092,0}; + }; + side="Empty"; + class Attributes + { + disableSimulation=1; + }; + id=982; + type="Land_HelipadRescue_F"; + atlOffset=0.34674835; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item270 + { + dataType="Object"; + class PositionInfo + { + position[]={14315.05,19.248098,16279.909}; + angles[]={0,3.1211042,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=983; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item271 + { + dataType="Object"; + class PositionInfo + { + position[]={12790.646,87.690773,16665.822}; + angles[]={0,4.5090265,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=984; + type="Land_HelipadCivil_F"; + atlOffset=-1.5258789e-005; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item272 + { + dataType="Object"; + class PositionInfo + { + position[]={26869.764,29.400743,24531.904}; + angles[]={0,3.8380003,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=989; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item273 + { + dataType="Object"; + class PositionInfo + { + position[]={26822.635,28.719749,24575.076}; + angles[]={0,0.78758019,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=990; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item274 + { + dataType="Object"; + class PositionInfo + { + position[]={26838.455,24.126677,24557.807}; + angles[]={0,0.71886343,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=997; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item275 + { + dataType="Object"; + class PositionInfo + { + position[]={26851.092,24.172863,24546.5}; + angles[]={0,0.73206341,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=998; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item276 + { + dataType="Object"; + class PositionInfo + { + position[]={23154.41,3.1900001,18897.695}; + angles[]={0,3.1430998,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=999; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item277 + { + dataType="Object"; + class PositionInfo + { + position[]={23135.939,3.1900001,18898.396}; + angles[]={0,3.1430998,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1000; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item278 + { + dataType="Object"; + class PositionInfo + { + position[]={22983.91,3.7912936,18829.691}; + angles[]={0,1.2205443,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=1001; + type="Land_BagFence_Long_F"; + atlOffset=-0.2966485; + }; + class Item279 + { + dataType="Object"; + class PositionInfo + { + position[]={22984.158,4.0409684,18827.188}; + angles[]={0,2.0396183,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1002; + type="Land_SandbagBarricade_01_half_F"; + atlOffset=-0.10949898; + }; + class Item280 + { + dataType="Object"; + class PositionInfo + { + position[]={22982.863,4.6602097,18825.395}; + angles[]={0,2.328275,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1003; + type="Land_SandbagBarricade_01_hole_F"; + atlOffset=-2.3841858e-007; + }; + class Item281 + { + dataType="Object"; + class PositionInfo + { + position[]={22980.998,4.0409684,18824.244}; + angles[]={0,2.7840097,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1004; + type="Land_SandbagBarricade_01_half_F"; + atlOffset=-0.0089592934; + }; + class Item282 + { + dataType="Object"; + class PositionInfo + { + position[]={22978.559,3.7912936,18824.797}; + angles[]={0,0.4316144,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + }; + id=1005; + type="Land_BagFence_Long_F"; + atlOffset=-0.11904836; + }; + class Item283 + { + dataType="Object"; + class PositionInfo + { + position[]={26819.801,23.19849,24605.174}; + angles[]={0,2.2412641,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1011; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item284 + { + dataType="Object"; + class PositionInfo + { + position[]={26847.971,22.712902,24635.074}; + angles[]={0,2.3861821,0}; + }; + side="Empty"; + class Attributes + { + disableSimulation=1; + }; + id=1012; + type="Land_HelipadRescue_F"; + atlOffset=0.30838013; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item285 + { + dataType="Object"; + class PositionInfo + { + position[]={26849.984,39.368553,24470.857}; + angles[]={0,0.73432773,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1013; + type="Land_Cargo_Tower_V1_F"; + }; + class Item286 + { + dataType="Object"; + class PositionInfo + { + position[]={26736.508,25.002501,24583.18}; + angles[]={0,2.2082093,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1014; + type="Land_Cargo_HQ_V1_F"; + }; + class Item287 + { + dataType="Object"; + class PositionInfo + { + position[]={26799.561,31.617382,24688.488}; + angles[]={0,5.3050466,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1015; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-1.011385; + }; + class Item288 + { + dataType="Object"; + class PositionInfo + { + position[]={23017.75,3.1803346,18950.223}; + angles[]={0,0.59521449,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1016; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item289 + { + dataType="Object"; + class PositionInfo + { + position[]={23035.043,3.1900001,18918.832}; + angles[]={0,4.7563758,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1017; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item290 + { + dataType="Object"; + class PositionInfo + { + position[]={21116.359,26.923309,7302.6899}; + angles[]={0,0.18002923,0}; + }; + side="Empty"; + class Attributes + { + disableSimulation=1; + }; + id=1018; + type="Land_JumpTarget_F"; + atlOffset=5.9495125; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item291 + { + dataType="Object"; + class PositionInfo + { + position[]={21110.793,21.700407,7265.4888}; + angles[]={0,3.1810677,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1019; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item292 + { + dataType="Object"; + class PositionInfo + { + position[]={20829.449,28.534639,7242.5796}; + angles[]={0,5.6322594,0}; + }; + side="Empty"; + class Attributes + { + disableSimulation=1; + }; + id=1021; + type="Land_HelipadRescue_F"; + atlOffset=0.31244659; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item293 + { + dataType="Object"; + class PositionInfo + { + position[]={20852.633,28.377913,7259.2495}; + angles[]={0,5.6322594,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1022; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item294 + { + dataType="Object"; + class PositionInfo + { + position[]={20888.508,40.028099,7245.2949}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1023; + type="Land_Cargo_Tower_V1_F"; + atlOffset=-1.1650448; + }; + class Item295 + { + dataType="Object"; + class PositionInfo + { + position[]={21044.018,30.300827,7133.689}; + angles[]={0,1.6113349,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1024; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.9634304; + }; + class Item296 + { + dataType="Object"; + class PositionInfo + { + position[]={21135.934,28.32896,7179.5508}; + angles[]={0,4.8921785,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1025; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item297 + { + dataType="Object"; + class PositionInfo + { + position[]={20974.73,29.950148,7330.9087}; + angles[]={0,4.8921785,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1026; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item298 + { + dataType="Object"; + class PositionInfo + { + position[]={20725.863,36.504616,7208.3882}; + angles[]={0,0.99436247,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1027; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=9.5367432e-006; + }; + class Item299 + { + dataType="Object"; + class PositionInfo + { + position[]={20941.527,32.202915,7185.3003}; + angles[]={0,1.5555797,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1028; + type="Land_Cargo_HQ_V1_F"; + atlOffset=-1.9073486e-006; + }; + class Item300 + { + dataType="Object"; + class PositionInfo + { + position[]={11480.208,24.06777,11794.931}; + angles[]={0,0.53727466,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1029; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item301 + { + dataType="Object"; + class PositionInfo + { + position[]={11503.994,23.735386,11770.087}; + angles[]={0,0.93099451,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1030; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item302 + { + dataType="Object"; + class PositionInfo + { + position[]={11498.69,23.007442,11679.418}; + angles[]={0,0.56562626,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1031; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item303 + { + dataType="Object"; + class PositionInfo + { + position[]={11517.812,22.996788,11666.954}; + angles[]={0,3.7506292,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1032; + type="Land_JumpTarget_F"; + atlOffset=-0.020191193; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item304 + { + dataType="Object"; + class PositionInfo + { + position[]={9005.1074,17.748466,21386.18}; + angles[]={0,0.928249,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1033; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item305 + { + dataType="Object"; + class PositionInfo + { + position[]={9014.8066,17.800688,21373.695}; + angles[]={0,0.91015816,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1034; + type="Land_JumpTarget_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item306 + { + dataType="Object"; + class PositionInfo + { + position[]={9011.752,16.788408,21469.49}; + angles[]={0,1.985168,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1035; + type="Land_HelipadRescue_F"; + atlOffset=0.00012397766; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item307 + { + dataType="Object"; + class PositionInfo + { + position[]={9028.9707,16.576057,21500.729}; + angles[]={0,2.1229634,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=1036; + type="Land_HelipadRescue_F"; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item308 + { + dataType="Logic"; + class PositionInfo + { + position[]={23449.932,90.896568,21135.971}; + angles[]={0,2.8785017,0}; + }; + areaSize[]={5,0,12}; + areaIsRectangle=1; + flags=1; + id=1037; + type="ModuleHideTerrainObjects_F"; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=11; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item309 + { + dataType="Object"; + class PositionInfo + { + position[]={14863.925,15.200361,11117.834}; + }; + side="Empty"; + flags=1; + class Attributes + { + }; + id=1038; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.53948689; + }; + class Item310 + { + dataType="Object"; + class PositionInfo + { + position[]={3191.2976,6.9050002,12883.957}; + angles[]={0,0.81525177,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1039; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item311 + { + dataType="Object"; + class PositionInfo + { + position[]={3198.5598,7.1610761,12932.119}; + angles[]={0,4.8120971,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1041; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.27006793; + }; + class Item312 + { + dataType="Object"; + class PositionInfo + { + position[]={27679.674,8.4698181,24501.74}; + angles[]={0,5.9258676,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=1042; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=4.7683716e-007; + }; + class Item313 + { + dataType="Object"; + class PositionInfo + { + position[]={2999.8379,36.600208,18510.035}; + angles[]={0,3.8272593,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=899; + type="Land_Cargo_HQ_V1_F"; + atlOffset=0.077461243; + }; + class Item314 + { + dataType="Object"; + class PositionInfo + { + position[]={3059.4329,34.496799,18437.744}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=900; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-1.9073486e-006; + }; + class Item315 + { + dataType="Object"; + class PositionInfo + { + position[]={4404.8281,297.66449,20623.615}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=901; + type="Land_Cargo_Patrol_V1_F"; + atlOffset=-0.19818115; + }; + class Item316 + { + dataType="Object"; + class PositionInfo + { + position[]={4361.9561,301.62491,20685.674}; + angles[]={0,3.5016499,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=904; + type="Land_Cargo_Patrol_V1_F"; + }; + class Item317 + { + dataType="Object"; + class PositionInfo + { + position[]={23256.279,8.6534567,18876.398}; + angles[]={0,1.6619673,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=913; + type="Land_Hangar_F"; + }; + class Item318 + { + dataType="Object"; + class PositionInfo + { + position[]={23253.424,8.6534567,18844.896}; + angles[]={0,1.6619673,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=914; + type="Land_Hangar_F"; + }; + class Item319 + { + dataType="Object"; + class PositionInfo + { + position[]={23023.666,8.6534567,18649.441}; + angles[]={0,4.7067919,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=915; + type="Land_Hangar_F"; + }; + class Item320 + { + dataType="Object"; + class PositionInfo + { + position[]={23023.463,8.6534567,18681.07}; + angles[]={0,4.7067919,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=916; + type="Land_Hangar_F"; + }; + class Item321 + { + dataType="Object"; + class PositionInfo + { + position[]={23051.707,13.854601,18619.832}; + angles[]={0,2.3652091,0}; + }; + side="Empty"; + flags=5; + class Attributes + { + }; + id=917; + type="Land_Airport_Tower_F"; + atlOffset=4.7683716e-007; + }; + class Item322 + { + dataType="Object"; + class PositionInfo + { + position[]={20045.643,96.79538,6692.5615}; + angles[]={0,5.2877598,0}; + }; + side="Empty"; + flags=4; + class Attributes + { + disableSimulation=1; + }; + id=927; + type="Land_HelipadCivil_F"; + atlOffset=-0.61590576; + class CustomAttributes + { + class Attribute0 + { + property="allowDamage"; + expression="_this allowdamage _value;"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + class Attribute1 + { + property="hideObject"; + expression="if !(is3DEN) then {_this hideobjectglobal _value;};"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=1; + }; + }; + }; + nAttributes=2; + }; + }; + class Item323 + { + dataType="Logic"; + class PositionInfo + { + position[]={7881.4863,279.47687,14632.321}; + }; + areaSize[]={5,0,10}; + flags=1; + id=928; + type="ModuleHideTerrainObjects_F"; + atlOffset=1.0376282; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=15; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item324 + { + dataType="Logic"; + class PositionInfo + { + position[]={7886.396,271.11682,14657.955}; + angles[]={0,1.6717286,0}; + }; + areaSize[]={10,0,20}; + flags=1; + id=929; + type="ModuleHideTerrainObjects_F"; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=15; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; + class Item325 + { + dataType="Logic"; + class PositionInfo + { + position[]={7869.166,271.56769,14604.894}; + angles[]={0,5.3060975,0}; + }; + areaSize[]={10,0,20}; + flags=1; + id=930; + type="ModuleHideTerrainObjects_F"; + atlOffset=2.0302734; + class CustomAttributes + { + class Attribute0 + { + property="#filter"; + expression="_this setVariable [""#filter"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "SCALAR" + }; + }; + value=15; + }; + }; + }; + class Attribute1 + { + property="#hideLocally"; + expression="_this setVariable [""#hideLocally"",_value]"; + class Value + { + class data + { + class type + { + type[]= + { + "BOOL" + }; + }; + value=0; + }; + }; + }; + nAttributes=2; + }; + }; }; class Connections { diff --git a/AntistasiOfficial.Altis/moveHQ.sqf b/AntistasiOfficial.Altis/moveHQ.sqf index 7922dcc5..b3a1bcab 100644 --- a/AntistasiOfficial.Altis/moveHQ.sqf +++ b/AntistasiOfficial.Altis/moveHQ.sqf @@ -1,8 +1,8 @@ -if (player != Slowhand) exitWith {hint "Only Commander Slowhand has access to this function"}; +if (player != Slowhand) exitWith {hint localize "STR_HINTS_MHQ_OCSHATTF"}; -//if ((count weaponCargo caja >0) or (count magazineCargo caja >0) or (count itemCargo caja >0) or (count backpackCargo caja >0)) exitWith {hint "You must first empty your Ammobox in order to move the HQ"}; +//if ((count weaponCargo caja >0) or (count magazineCargo caja >0) or (count itemCargo caja >0) or (count backpackCargo caja >0)) exitWith {hint localize "STR_HINTS_MHQ_YMFEYAIOTMTHQ"}; -hint "Move the Arsenal ammo crate and the Vehicle ammo crate and Petros to the new location"; +hint localize "STR_HINTS_MHQ_MTAACNTVACNPTTNL"; petros enableAI "MOVE"; petros enableAI "AUTOTARGET"; @@ -49,7 +49,7 @@ if (count _garrison > 0) then _hr = 0; if ({(alive _x) and (!captive _x) and ((side _x == side_green) or (side _x == side_red)) and (_x distance _posicion < 500)} count allUnits > 0) then { - hint "HQ Garrison will stay here and hold the enemy"; + hint localize "STR_HINTS_MHQ_HQGWSHNHTE"; } else { diff --git a/AntistasiOfficial.Altis/mrkLOOSE.sqf b/AntistasiOfficial.Altis/mrkLOOSE.sqf index f27a54fb..499764bb 100644 --- a/AntistasiOfficial.Altis/mrkLOOSE.sqf +++ b/AntistasiOfficial.Altis/mrkLOOSE.sqf @@ -1,3 +1,5 @@ +//This script is executed only after a "Create" is completed and spawner check return true +//The effect is enemy capture the territory. if (!isServer) exitWith {}; private ["_marcador","_posicion","_mrk","_powerpl","_bandera"]; @@ -12,108 +14,105 @@ publicVariable "mrkAAF"; publicVariable "mrkFIA"; // BE module -if (activeBE) then { - ["territory", -1] remoteExec ["fnc_BE_update", 2]; -}; -// BE module + if (activeBE) then { + ["territory", -1] remoteExec ["fnc_BE_update", 2]; + }; -garrison setVariable [_marcador,[],true]; +//remove FIA garrison variable + garrison setVariable [_marcador,[],true]; _bandera = objNull; _dist = 10; -while {isNull _bandera} do - { +while {isNull _bandera} do { _dist = _dist + 10; _banderas = nearestObjects [_posicion, ["FlagCarrier"], _dist]; _bandera = _banderas select 0; - }; +}; [[_bandera,"take"],"AS_fnc_addActionMP"] call BIS_fnc_MP; _mrk = format ["Dum%1",_marcador]; _mrk setMarkerColor IND_marker_colour; -if ((not (_marcador in bases)) and (not (_marcador in aeropuertos))) then - { - [10,-10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; - if (_marcador in puestos) then - { - _mrk setMarkerText "AAF Outpost"; - [["TaskFailed", ["", "Outpost Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; +//Effects depending on marker type + if ((not (_marcador in bases)) and (not (_marcador in aeropuertos))) then { + [10,-10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; + if (_marcador in puestos) then { + _mrk setMarkerText localize "STR_GL_AAFOP"; + {["TaskFailed", ["", localize "STR_NTS_OPLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }; - if (_marcador in puertos) then - { - _mrk setMarkerText "Sea Port"; - [["TaskFailed", ["", "Sea Port Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + if (_marcador in puertos) then { + _mrk setMarkerText localize "STR_GL_MAP_SP"; + {["TaskFailed", ["", localize "STR_NTS_SPLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }; }; -if (_marcador in power) then - { - [0,0] remoteExec ["prestige",2]; - _mrk setMarkerText "Power Plant"; - [["TaskFailed", ["", "Powerplant Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [_marcador] spawn AS_fnc_powerReorg; + if (_marcador in power) then { + [0,0] remoteExec ["prestige",2]; + _mrk setMarkerText localize "STR_GL_MAP_PP"; + {["TaskFailed", ["", localize "STR_NTS_POWLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [_marcador] spawn AS_fnc_powerReorg; }; -if ((_marcador in recursos) or (_marcador in fabricas)) then - { - [10,-8,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; - [0,0] remoteExec ["prestige",2]; - - if (_marcador in recursos) then - { - _mrk setMarkerText "Resource"; - [["TaskFailed", ["", "Resource Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - } - else - {_mrk setMarkerText "Factory"; - [["TaskFailed", ["", "Factory Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + + if ((_marcador in recursos) or (_marcador in fabricas)) then { + [0,-8,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; + [0,0] remoteExec ["prestige",2]; + if (_marcador in recursos) then { + _mrk setMarkerText localize "STR_GL_MAP_RS"; + {["TaskFailed", ["", localize "STR_NTS_RESLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + } else { + _mrk setMarkerText localize "STR_GL_MAP_FAC"; + {["TaskFailed", ["", localize "STR_NTS_FACLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; }; }; -if ((_marcador in bases) or (_marcador in aeropuertos)) then - { - [20,-20,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; - _mrk setMarkerType IND_marker_type; - [0,-8] remoteExec ["prestige",2]; - server setVariable [_marcador,dateToNumber date,true]; - [_marcador,60] spawn AS_fnc_addTimeForIdle; - if (_marcador in bases) then - { - [["TaskFailed", ["", "Base Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - _mrk setMarkerText "AAF Base"; - APCAAFmax = APCAAFmax + 2; - tanksAAFmax = tanksAAFmax + 1; - } - else - { - [["TaskFailed", ["", "Airport Lost"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - _mrk setMarkerText "AAF Airport"; + if ((_marcador in bases) or (_marcador in aeropuertos)) then { + [20,-20,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; + _mrk setMarkerType IND_marker_type; + [0,-8] remoteExec ["prestige",2]; server setVariable [_marcador,dateToNumber date,true]; - planesAAFmax = planesAAFmax + 1; - helisAAFmax = helisAAFmax + 2; - }; + [_marcador,60] spawn AS_fnc_addTimeForIdle; + if (_marcador in bases) then { + {["TaskFailed", ["", localize "STR_NTS_BASELOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + _mrk setMarkerText localize "STR_GL_AAFBS"; + APCAAFmax = APCAAFmax + 2; + tanksAAFmax = tanksAAFmax + 1; + } else { + {["TaskFailed", ["", localize "STR_NTS_ABLOST"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + _mrk setMarkerText localize "STR_GL_AAFAB"; + server setVariable [_marcador,dateToNumber date,true]; + planesAAFmax = planesAAFmax + 1; + helisAAFmax = helisAAFmax + 2; + }; }; _size = [_marcador] call sizeMarker; -_staticsToSave = staticsToSave; -{ -if ((position _x) distance _posicion < _size) then +//Remove static guns, enemies have already their own. + _staticsToSave = staticsToSave; { - _staticsToSave = _staticsToSave - [_x]; - deleteVehicle _x; - }; -} forEach staticsToSave; + if ((position _x) distance _posicion < _size) then { + _staticsToSave = _staticsToSave - [_x]; + deleteVehicle _x; + }; + } forEach staticsToSave; -if (not(_staticsToSave isEqualTo staticsToSave)) then - { - staticsToSave = _staticsToSave; - publicVariable "staticsToSave"; + if (not(_staticsToSave isEqualTo staticsToSave)) then { + staticsToSave = _staticsToSave; + publicVariable "staticsToSave"; }; -waitUntil {sleep 1; (not (spawner getVariable _marcador)) or (({(not(vehicle _x isKindOf "Air")) and (alive _x)} count ([_size,0,_posicion,"BLUFORSpawn"] call distanceUnits)) > 3*({(alive _x) and (!fleeing _x)} count ([_size,0,_posicion,"OPFORSpawn"] call distanceUnits)))}; +//Reverting the owership in case of player manage to capture back. + waitUntil {sleep 1; + (not (spawner getVariable _marcador)) or + (({ (not(vehicle _x isKindOf "Air")) and + (alive _x) and + (lifeState _x != "INCAPACITATED")} + count ([_size,0,_posicion,"BLUFORSpawn"] call distanceUnits)) > 3*( + { (alive _x) and + (lifeState _x != "INCAPACITATED") and + (!fleeing _x)} + count ([_size,0,_posicion,"OPFORSpawn"] call distanceUnits)) + ) + }; -if (spawner getVariable _marcador) then - { - [_bandera] spawn mrkWIN; - }; \ No newline at end of file + if (spawner getVariable _marcador) then{[_bandera] spawn mrkWIN;}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/mrkWIN.sqf b/AntistasiOfficial.Altis/mrkWIN.sqf index 086fdcfd..d035e97e 100644 --- a/AntistasiOfficial.Altis/mrkWIN.sqf +++ b/AntistasiOfficial.Altis/mrkWIN.sqf @@ -1,3 +1,4 @@ +//This script is triggered only when a player capture the flag. Passive winning conditions are somewhere else. private ["_bandera","_pos","_marcador","_posicion","_size","_powerpl","_arevelar"]; _bandera = _this select 0; @@ -12,32 +13,28 @@ if (_marcador in mrkFIA) exitWith {}; _posicion = getMarkerPos _marcador; _size = [_marcador] call sizeMarker; -if ((!isNull _jugador) and (captive _jugador)) exitWith {hint "You cannot Capture the Flag while in Undercover Mode"}; - -if (!isNull _jugador) then - { - if (_size > 300) then {_size = 300}; - _arevelar = []; - { - if (((side _x == side_green) or (side _x == side_red)) and (alive _x) and (not(fleeing _x)) and (_x distance _posicion < _size)) then {_arevelar pushBack _x}; - } forEach allUnits; - if (player == _jugador) then - { - _jugador playMove "MountSide"; - sleep 8; - _jugador playMove ""; - {player reveal _x} forEach _arevelar; +if ((!isNull _jugador) and (captive _jugador)) exitWith {hint localize "STR_HINTS_MRKW_YCCTFWIUM"}; + +//Reveal enemy units to player within a range + if (!isNull _jugador) then { + if (_size > 300) then {_size = 300}; + _arevelar = []; + { if (((side _x == side_green) or (side _x == side_red)) and (alive _x) and (not(fleeing _x)) and (_x distance _posicion < _size)) then {_arevelar pushBack _x};} forEach allUnits; + if (player == _jugador) then { + _jugador playMove "MountSide"; + sleep 8; + _jugador playMove ""; + {player reveal _x} forEach _arevelar; }; }; if (!isServer) exitWith {}; -{ -if (isPlayer _x) then - { - [5,_x] remoteExec ["playerScoreAdd",_x]; - [[_marcador], "intelFound.sqf"] remoteExec ["execVM",_x]; - if (captive _x) then {[_x,false] remoteExec ["setCaptive",_x]}; +{ //add score and give info to player + if (isPlayer _x) then { + [5,_x] remoteExec ["playerScoreAdd",_x]; + [[_marcador], "intelFound.sqf"] remoteExec ["execVM",_x]; + if (captive _x) then {[_x,false] remoteExec ["setCaptive",_x]}; } } forEach ([_size,0,_posicion,"BLUFORSpawn"] call distanceUnits); @@ -48,6 +45,17 @@ _bandera setFlagTexture guer_flag_texture; sleep 5; [[_bandera,"unit"],"AS_fnc_addActionMP"] call BIS_fnc_MP; [[_bandera,"vehicle"],"AS_fnc_addActionMP"] call BIS_fnc_MP; +_bandera addAction [localize "str_act_mapInfo", + { + nul = [] execVM "cityinfo.sqf"; + }, + nil, + 0, + false, + true, + "", + "(isPlayer _this) and (_this == _this getVariable ['owner',objNull])" + ]; // [[_bandera,"garage"],"AS_fnc_addActionMP"] call BIS_fnc_MP; Stef 27/10 disabled old garage _antenna = [antenas,_posicion] call BIS_fnc_nearestPosition; @@ -67,75 +75,73 @@ publicVariable "reducedGarrisons"; [_marcador] remoteExec ["patrolCA", call AS_fnc_getNextWorker]; -if (_marcador in aeropuertos) then - { - [0,10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; - [["TaskSucceeded", ["", "Airport Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [5,8] remoteExec ["prestige",2]; - planesAAFmax = planesAAFmax - 1; - helisAAFmax = helisAAFmax - 2; - if (activeBE) then {["con_bas"] remoteExec ["fnc_BE_XP", 2]}; - }; -if (_marcador in bases) then - { - [0,10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; - [["TaskSucceeded", ["", "Base Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [5,8] remoteExec ["prestige",2]; - APCAAFmax = APCAAFmax - 2; - tanksAAFmax = tanksAAFmax - 1; - _minasAAF = allmines - (detectedMines side_blue); - if (count _minasAAF > 0) then - { - {if (_x distance _pos < 1000) then {side_blue revealMine _x}} forEach _minasAAF; +//Depending on marker type + if (_marcador in aeropuertos) then { + [0,10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; + {["TaskSucceeded", ["", localize "STR_NTS_AIRPORT_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [5,8] remoteExec ["prestige",2]; + planesAAFmax = planesAAFmax - 1; + helisAAFmax = helisAAFmax - 2; + if (activeBE) then {["con_bas"] remoteExec ["fnc_BE_XP", 2]}; + }; + if (_marcador in bases) then { + [0,10,_posicion] remoteExec ["AS_fnc_changeCitySupport",2]; + {["TaskSucceeded", ["", localize "STR_NTS_BASE_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [5,8] remoteExec ["prestige",2]; + APCAAFmax = APCAAFmax - 2; + tanksAAFmax = tanksAAFmax - 1; + _minasAAF = allmines - (detectedMines side_blue); + if (count _minasAAF > 0) then { + {if (_x distance _pos < 1000) then {side_blue revealMine _x}} forEach _minasAAF; }; - if (activeBE) then {["con_bas"] remoteExec ["fnc_BE_XP", 2]}; + if (activeBE) then {["con_bas"] remoteExec ["fnc_BE_XP", 2]}; }; -if (_marcador in power) then - { - [["TaskSucceeded", ["", "Powerplant Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [0,0] remoteExec ["prestige",2]; - if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; - [_marcador] call AS_fnc_powerReorg; + if (_marcador in power) then { + {["TaskSucceeded", ["", localize "STR_NTS_POWER_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [0,0] remoteExec ["prestige",2]; + if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; + [_marcador] call AS_fnc_powerReorg; }; -if (_marcador in puestos) then - { - [["TaskSucceeded", ["", "Outpost Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; + if (_marcador in puestos) then{ + {["TaskSucceeded", ["", localize "STR_NTS_OP_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; }; -if (_marcador in puertos) then - { - [["TaskSucceeded", ["", "Seaport Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [0,0] remoteExec ["prestige",2]; - if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; - [[_bandera,"seaport"],"AS_fnc_addActionMP"] call BIS_fnc_MP; + if (_marcador in puertos) then { + {["TaskSucceeded", ["", localize "STR_NTS_SEA_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [0,0] remoteExec ["prestige",2]; + if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; + [[_bandera,"seaport"],"AS_fnc_addActionMP"] call BIS_fnc_MP; }; -if ((_marcador in fabricas) or (_marcador in recursos)) then - { - if (_marcador in fabricas) then {[["TaskSucceeded", ["", "Factory Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP;}; - if (_marcador in recursos) then {[["TaskSucceeded", ["", "Resource Taken"]],"BIS_fnc_showNotification"] call BIS_fnc_MP;}; - if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; - [0,0] remoteExec ["prestige",2]; - _powerpl = [power, _posicion] call BIS_fnc_nearestPosition; - if (_powerpl in mrkAAF) then - { - sleep 5; - [["TaskFailed", ["", "Resource out of Power"]],"BIS_fnc_showNotification"] call BIS_fnc_MP; - [_marcador, false] call AS_fnc_adjustLamps; - } - else - { - [_marcador, true] call AS_fnc_adjustLamps; + if ((_marcador in fabricas) or (_marcador in recursos)) then { + if (_marcador in fabricas) then {{["TaskSucceeded", ["", localize "STR_NTS_FACT_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0];}; + if (_marcador in recursos) then {{["TaskSucceeded", ["", localize "STR_NTS_RES_TKN"]] call BIS_fnc_showNotification} remoteExec ["call", 0];}; + if (activeBE) then {["con_ter"] remoteExec ["fnc_BE_XP", 2]}; + [0,0] remoteExec ["prestige",2]; + _powerpl = [power, _posicion] call BIS_fnc_nearestPosition; + if (_powerpl in mrkAAF) then { + sleep 5; + {["TaskFailed", ["", localize "STR_NTS_RES_OUT_POWER"]] call BIS_fnc_showNotification} remoteExec ["call", 0]; + [_marcador, false] call AS_fnc_adjustLamps; + } else { + [_marcador, true] call AS_fnc_adjustLamps; }; }; +//Old roadblock removal, no longer working and autogarrison is disabled to save units. {[_marcador,_x] spawn AS_fnc_deleteRoadblock} forEach controles; -sleep 15; +//sleep 15; [_marcador] remoteExec ["autoGarrison", call AS_fnc_getNextWorker]; -waitUntil {sleep 1; (not (spawner getVariable _marcador)) or (({(not(vehicle _x isKindOf "Air")) and (alive _x) and (!fleeing _x)} count ([_size,0,_posicion,"OPFORSpawn"] call distanceUnits)) > 3*({(alive _x)} count ([_size,0,_posicion,"BLUFORSpawn"] call distanceUnits)))}; +waitUntil {sleep 1; + (not (spawner getVariable _marcador)) or + ( + ({(not(vehicle _x isKindOf "Air")) and (alive _x) and (lifeState _x != "INCAPACITATED") and (!fleeing _x)} + count ([_size,0,_posicion,"OPFORSpawn"] call distanceUnits)) > 3* ({(alive _x) and (lifeState _x != "INCAPACITATED")} + count ([_size,0,_posicion,"BLUFORSpawn"] call distanceUnits)) + ) +}; //need to add check for unconscious -if (spawner getVariable _marcador) then - { +if (spawner getVariable _marcador) then { [_marcador] spawn mrkLOOSE; - }; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/musica.sqf b/AntistasiOfficial.Altis/musica.sqf index afd0bd52..7e826a39 100644 --- a/AntistasiOfficial.Altis/musica.sqf +++ b/AntistasiOfficial.Altis/musica.sqf @@ -14,7 +14,7 @@ while {musicON} do { sleep 3; _newstance = behaviour player; - //hint format ["El jugador está en esta stance: %1", _newstance]; sleep 3; + //hint format [localize "STR_HINTS_MUSICA", _newstance]; sleep 3; if ((_newstance != _stance) or (cambioMUS)) then { removeAllMusicEventHandlers "MusicStop"; diff --git a/AntistasiOfficial.Altis/onPlayerRespawn.sqf b/AntistasiOfficial.Altis/onPlayerRespawn.sqf index 3e4391d5..df65ff77 100644 --- a/AntistasiOfficial.Altis/onPlayerRespawn.sqf +++ b/AntistasiOfficial.Altis/onPlayerRespawn.sqf @@ -12,7 +12,7 @@ waitUntil {alive player}; _owner = _oldUnit getVariable ["owner",_oldUnit]; if (_owner != _oldUnit) exitWith { - hint localize "STR_HINTS_OPR_TEMP"; + hint localize "STR_HINTS_GEN_OPR_TEMP"; selectPlayer _owner; disableUserInput false; deleteVehicle _newUnit; @@ -58,10 +58,10 @@ if (!isPlayer (leader group player)) then {(group player) selectLeader player}; call AS_fnc_initPlayerEH; if (!(isMultiplayer) AND (activeACEMedical)) then { - player setVariable ["ASunconscious",false,true]; + [player, false] call AS_fnc_setUnconscious; player setVariable ["ASrespawning",false]; player addEventHandler ["HandleDamage", { - if (player getVariable ["ACE_isUnconscious", false]) then { + if ([player] call AS_fnc_isUnconscious) then { 0 = [player] spawn ACErespawn; }; } diff --git a/AntistasiOfficial.Altis/orgPlayers/assignStavros.sqf b/AntistasiOfficial.Altis/orgPlayers/assignStavros.sqf index 97178dac..8d507726 100644 --- a/AntistasiOfficial.Altis/orgPlayers/assignStavros.sqf +++ b/AntistasiOfficial.Altis/orgPlayers/assignStavros.sqf @@ -53,8 +53,7 @@ _selectable = objNull; } forEach _potentials; if (!isNull _selectable) then { - if (_disconnected) then {_text = format [localize "STR_HINTS_COMMANDER_DIS", name _selectable]} else {_text = format [localize "STR_HINTS_COMMANDER_REP", name Slowhand, name _selectable]}; - [_selectable] call stavrosInit; + [_selectable] call stavrosInit; sleep 5; - [[petros,"hint",_text],"commsMP"] call BIS_fnc_MP; -}; + [[name Slowhand, name _selectable, _disconnected],{_text ="", if (_this select 2) then {_text = format [localize "STR_HINTS_COMMANDER_DIS", _this select 1]} else {_text = format [localize "STR_HINTS_COMMANDER_REP", _this select 0, _this select 1]}; hint _text;}] remoteExec ["call",0]; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/pic.paa b/AntistasiOfficial.Altis/pic.paa index 80f5c0425cdc93a924da1bf4b1f9bc1b4502db3a..7412c5b2fef6cba0e333c8606db0ffec49533088 100644 GIT binary patch literal 278386 zcma&Ni&s8hJ@JM(@TNEsWy(0lOPh$%Rh5)hH5|2kuGz4LjAgM2+m4eg}730CDyOv;;D9IK&?aNqHTRlN`j$9}pY@ zaq|TZq>zwGDJqNuWC~}RkN}B5=m+GPfTFocZ2)oT0o0fyg*fU#x(g-D^lH`7@p(o- zqu1AKi{Z<`12Om$v|1MzorB1cGP@-Mr)?a~5JXS$wbk-Y}Gp`3Kw1-RYu z>U8!|$Ygk^c))wb&6_2~#BYTR27|^Sg~PK+KxhnzhEM1>oIr;70-^r@{S89mX%zf1 zINiqh5Pnif%nlU+j{C~t5CMqBflx@}3_H4LiyVg?J<=7xKBTCn$9pUsrV;@K5(qyX zpmB)!YqgAFH%H*2p=M|5$nSb5+dKZLAh)W%zvs$oa<{VpCkuyn7jSWZu?#CRp|&e*=H>=FLU1-B;NU zey4_w;{iVIKRx5s4Q#-=9kGauoqxvSGTgSVw~U`sv~7iuDC2KYD%VYAZ@|6`YH1iu zUykmb#1;P6o+N!!s&)15Mu2VnxUMt5g}-O#s(%dUUtueXEHNrk3EN&o+5V|4Wm<+Q zGEBwu>EcZnZ4pm+YX?=zRXPXs-n}(zevv5I-AnFR^OPsqX|Kl9Jl2#j4{W(XiA59M zjXxavi@o&M91TdUTyU(ecm zb~bGhulYf;I$U|3FYBsqn6sl49OCE&g}t}LinpuC`g6^ZyZ6Ga32sFd|nZ-i~(tcKTs$% zb--e=+x`yLaS%r%BIxy}s1OdIEP=goEM+ZclK(M!@xM z10gy@?_|u%q-JPf)-414tFT)<8FGO${4Be@FROm(zyUPw!bw_ghJuu)OOh0XeJI^b z&61|5+Vt$fL4R^{{+iCFs5nyg3!%zWSY>;dgNAg?V6ohJ8Zsx{m|C368Fm)Y z8R0dKA`Qt)1fZZ`)LFb;Bgem~n(&UhFy8&YF2>@^(dT4q%J%W`wL~3gCln@_y4p@1sG*_;aAkX3m}q|D&1T z$PSLKvtS|~dik+NdaE)STeD`(x{cTb`_&!E$hX$dur1Y5HN;NGIa2Aa`k*-A-FoI= zz%6lr&(2K6!LOAK?5HPiFP^V`fV}NWh@{M3TmPrbOIufag_&QtI)9|hl^E2g4H`@<7C+A!*?nT*F+a77 zcaAe$pa$-A+KFZWdRtqy2qKt=P&R*>-?iCMJ&!RqKrhM8MfR)x5Pv@a5O)qdP$O|p zEC*=oXK6Dt2;0aRWBLX7eP|d1)Vs4hLP*n)`XLG~Y577wMB&EZ)g}}f-{@&H1tBCC z`vSz@h`_au2$B%CEs3W?Li~UxSe+E9_dh|GYLGd4gf1sq>$Ut$pfLW`0}>SU$r;%~ z3Xv9AP&^Q@6NV!V!d@XUqR#5m0u8w(cC{o=xkB8=@9F6XH;`@o%wOEO>W^usTAsYE zodJ4gkRHWs{u;VQqlocc79rq{SwXlT(CXZxYzasdo>WVLXmwJw4GGfwkJJ2z^$To( z>xZ;r0u+pEh_z)*f$p{3^v&V>TDrS|*s9_kmCFs}0qpqHEq4VmXDa{$sxL7M z{_0`MTKR2xv1x!G6XS0<->GH3dU@M+=RJu3c6xC^MOx>az$B(Sj3Dp zclLxS8<>BZ`=4Q=e)g?%`c581<%!TS5*0JKm_#JkbJ5w=94NZp8KGdm37;bmx( z_Ydtlor~%->|g8FtqF;n@UF8zB`UHv#ST=5yH8PDMUCaWn#)VRi*WCfN;mRnJb;!S z?y9`ZZ1}2QX=^IQA}<)bdd>u*PgSeaD#VWHADY6byG{F1X?_NAzU*48A}uxbZ2kb> z%M@f-+RZ}?3J9;Uffj5rz4CT?x1&#=_M(w8??-Pn5k$i9w8YDOc$71|SRTO&b@;+z z!5M^J5g?SGG5iQJ-4Y1nK>N+mzYM0H0m?ouXKe6EOQSc}ku#m^Vo!!;&JP*yY6VEQ zaRIW31LB9>Mu5w1s`*PHv3LilKXivPyhBZ6G3i2LY~bvI$tMU~;D>nhF0~KU{v;Ln z0cngcScKEUs1N)I|Il|!S`d$*zCize9LHZe671*i&*QAIkD@jird|W(g4zKdj1hK! z&6q8dCrFG)fNLa^SBu0$wSYtll7zPP5%8m6+j@kqPs*Hh*AF$n19Y z96(>zz}ZTgg@o6LR9Z()Cgp5R%T-fM3~OV_$yUC*yF30HLp}^#;vxd-l4Od6c(t;a zA+@;8M;JE$G`az_x6=dk*|xutSbZXbWumi1J@vhyJtRV(6`@W9o<4{ba5gBfUvN|Cs_tKQ070|LHU!L#4B&+?fU-ka`Cw( z-0(V613N1(D_cM67$+@yLi@kN4c?JvclRH4r!Z^G?PnbFfW)$WWzpxVjo9rG;>e+@ zWhlAt+?U6@_G7Ch9T{`WuJH?|pJxn8u6RGOM+%4X``P;}QrWXY2cM$peUGlkPI%|! zV+j?KMs{J^>(`!YCA0CO7twwAPd-OV$ovQtG<&jGHPtB7Za=E?8Tc5LD&%V;loRX( zp}d%{cJPtm3PohuL+{wAsF4r5O4zu~HhbvQKE4dk>kn2Xqp3SrX0OaoMkSIpk}&1R zm~_N%@*nvJVjo$bc3#)rNFs|0(vr>Xv04U;7ix-gDv;s1mlnO5_f-ii%0RYY+iy*0 z)($*kXGqeColO(o(^Io~(~o- zs33UE3)d6z@Agcj4MCFNV*geVtVa;fB7}oG(TSr+rE)w9IB!Wx+EPbWW@jZPW>rZ( z!8+PHTuE~f8k7jQI)t|PhYO7e!+`ElC>E*_nt`%g7U@8sIy+8~I6DjK$Ka}l!$@6f z0DeThI}I3V@MqGr^{uVJdQP+;8wz;Pil72i9YDL+a=T8wg|@hvF2QN^;oja0ce(IM zCtZT;)iluVe(&E-x}nW+_p_d7B@k!w5B**4es9QG6!a2LvkiS3=NQ%HB`0EQfp)LM z3353$nRmbbS>Xn(4IWo7bU~uLbG)t(h8ZZU`qs94J&*WJjSnUw4m+UPn(pyBYJ*R; zMK=C1+I6@gyPnYA1`uobvk^S$n&_a6DE5uXEI`h-twMlNOae3IV8&b|1<--ixQc<;fD$6R%e=yYdz#C7WG9%Xglv5N7{d@lmey@`Edt&ygt zg%RsKq_Wi9&#)p-z;KWGk1_yrjQ``s`OX%8?rdh}q~wuzq@gXr#CP!dFhc0mA$IT~ zHmLEHs)ydy+(s{ zS6Ebh=!BdIivunzaubNtai;n0gFOSx#f&W32xZQR8+lUhX^?MUyLPcH2CqZwBZA@a ztu9EDzgrS6E+Op*%@;+Q{D2S#>$uV&U#Q!O?|MJ22>Db$`b6!ZAjy5%)Zf#G% z-_rhbws26Wj$fpA6vAa3FW}go*g&K}eS%}L7nMqN&k%PTClLQXWWFz`wNbj7acKA! z`|dzke!#vIdPd4$NYv>WxIGRkpMbHfS;W)kA1p``;7NQxFpPv|Cixlt1C1p}Bs2sp z0WE}DFO$LTL7STDeP0g%yZe2E=}AgfR&G|Mq%GFDx%ptPDO4O4<>ggJatO`n?CiTE zpQcb)%tgQ+ZY-Gv3R!SGQ1E=$hxq|TfTj^z-v~kJ;si9rg&rydpgr6liaV{&Infbu zw3oCd7?XnWEMx2#(BNTUev!riUv)+=01q%ZF*ej*(t10d@F!+^&w$xc`Ec8l%3>k0 zs46k>J>b$a8Yns=AIIYcLgJqPC6S!#+=!mQcb(saX^3^>S#F--O+?21zP`ks(d&Hc z$XI@5{&Lhk=%=+SR2wjtv(=r`rKVWM`r{!gm7|Y*{B~D*lY`G1MIjZT7pw7^i^${#oUHX51Ba(AU3|1&bVg8cVZw<%l1$ z13ld{y{dVrA%-Y=mc9`^Qaj?6*~^T}6Rn!*bodA?P$m`e7OkMn!JBi^qia)q8bA8w z!H%*6*rd$5f^)4yBDF-tQ)XFBXJbc)`a9ZuxyTLa=_^s|9lU+5_~ zaQ6htB?$!LDDx-j%SlBj&WV8HO3#T&PIZKOQY5Ph`%qYcBWOf&rIT8;Jsl(WO!sTxw#`TE9-u^YBNU7K0T!y z2oZaE)zkK z{+c4$&f~o~691@?b%ouVu$cGjMo81`s!voybQ(a>7R;PkhbJQo9uTBL9f1W?VUOi^l^o zktW}BonHzrs}4?2RhBWMnwl(7nPBBVuah=1y=t>0+3l9YjZEXI+b53IUSUf|h_x$K zjm-LXyYvtaz$cm$A1DfYl}xMgPI`y9kv(=hwIBtKoLkdlnV6`A>FMko^mTqCTl327 zDOR5Hj_jj7>ws>~4XahP@^ERu6U&1WeTYj?zyTU#+lmC}WfKt+)05 z>j?Z7f(bYRwcny%U;7ZU&<}8e#uvelE<&J07WW34G@&-RjasA@LgP{E3^AmJ6b9jn zkL>=6rFs;hok)rwhN3Ohmj?G$gdWbuBwl>BAy|!s+16)18b;m|WJjoz5NF*L)R@2` z&UP4PIb`wh%&tiV{fkqHs4*Tm`3z0Q%4BQT{+7R)|AD`M9R=;n+O@c1u^@>igJ}69 z<3l)mA4TXN!ciIm=cFYl6HuX$ZH)x>G@T8sElI$9Y3Qz|03CwHBODz~{e>PZwk3wy z5?l&<6F&uga&pcN5Up3Rea>)QSnhtPFOPAe`^b^SJJd|@B!x$G%1JM&G<9tJw77FP z1i3JT#Ubup=j4Q|3eYik4aqMH)2@E4AX~+K^&x@lnjXh)GesZCBsXGjsPQy&;YO^W zz`B1y_cgxeLI29#y$k1*Y*Xz1uJfw*_4@|Pmz~Kd<=(WjnP18bJHuj_3md(6%|2@R zSJgxBi{$w05HZ7N`m8WT4f!WE-LkJzB4Re5ef!5?`h>S;^DafZBmgaVWqYYHHF`Jk z9u@pnRl+`UxTPAJd~a3Z--Y>5=^dwHc(p@3pVX@>6%iSy*ixwl--tG{cTGm{4`BW5 z4C#jV_hY5(qD=c?Q*0yq?;k(JQshsM-i8x>JVh)5aWi*jhAJD_CPODLG(P~9|9UsA zvv9)uj#VlR7Bza`9K4jo6kTS!TFcE2?p>H@FSD<2@W$iV ze)g8>TW_yH7&cSX0jAO&d@OIjOL&_8F&c9&a2AVm@LB!S*Te1^*JGQu+_?AAjsTSL z#7-4M3zeHLgY?~TPS3@^CSz;%V^ol3l(K#ucXo81p^iLSd!V7KT1d>Ru7AF|zK)dD zwpO_1a`9jqMQ$38u*m}Pf-%Antv?*@2ig(NJJTVcA>O{wLIi*isxBcxNc;rHluHl? zI{(~X!F4(DA0^Av!xf^OQ+^iZ zF^fG)%|MvGppI{#C`gYoqHIee;m8^{vW+krFao%}B8)WTfbE@8iV*liqFYQRyfZ*^ z>_}#)Z<0`-6)8XwmaPPFz)OXK(nXm`@nPyK6d>ZsIQVtWdc+3oZ|d*}C%>cC4RX_0 zd|U)N)7@w+&di=1()7Bkq4DHNWTEe)NZUj8E5y+c$U^WW+6V*%h`$uWQo%s{qmOE*gVafpX?qh9)N}SD}beSrwR`s)EqNY1Y zlY__*)46v?*=2T-eDyub8t8Miy1Ek+Wiy}r7#Q_WC3NqyZP!wu4EtrWnD`u;1xI@( z`Ls~Pbni4+=hY;mBVyC?A9%}9_BzYmaoj8fHupU*F}s>W`B&~tJ4cMVvWr9 zCBC{G=$cYeQj)lO1kC#@Pc!XtxS#Fr-pQKki6~TPq%NVOThr-9QV=3Z9z_6$jUG5!m-K@nEXL(%)@B{qEt))Fx*UC$8xcWC2x9o*0emdz?ONIC5lG_vc!G zyRa($a%LM$Z#vuC8-C&%c{Fl+^lmksHu-hZN638K4>~D71mh&e!}+BDfA?Rs5kb&d zh97*;ZQ-Az)k5W zC=E0=j)BPtxRY#+fdUaK$Z{Yu3UhKvvySpe3l-mp6=m(3kdxap=rAaZz@hNGf?&E* zv^Gf-Axu(G2x{|Z^O6FKQ5^!7Ob0&Op&|W95a2VDd4>I~Or)Fu^n; zKFT23F*`ahz1^vBpdx#TZ%B;6RGqH{5%TXwKlYi~qrT4}$|dt_xcaLg%1zZ3b9B}) zunfCnBQkDRHSrVVYiFNIlF`05+o*5L0(?4yj@I7ka`1`1EwdgfTgbGX?&@lXhFjS4 z`mS3B4^_x>GyZ{7tZ0kfV%0I`Xy00-_zSR>`Mn!*Z*lDv@8L(=q(`etn18(Z&i-pY z54Au@6Rv#dElVw2fk8QTf;{SXEw+UHa!>J3cRC$>919@BlE4te=j3#X2nCuQ#Z$4p z+0487%Azy*2zYRO!S4zZ0YycxP9MN$0b`_KL-Kw&AT0Kaf^wMrX=a1Ewm{Frn0TvD z?8h3}&E9p}pOrGu5zE!-7Mw=wJ=Yb*^%c>VDYtBC!@WWDEoo-m-{yzj?z|D{EvkzL z=snUl>UcCf-K86-ou7kx(DNBp+H-%;o*bS@)ERkHDh;si>#1+=?Am1AKkgFoW6vkn zJ704X_H|IZxw?7=PWQPuFWl__h{Pm5Fm`qAa?1$tQIC$FdmQWF(|J*Ex+!VKW?tWs zziw4pXdel_gsujt4GvkM!4G~a!kyJ~DGXYH|aHN`5L z{UB0EMAZPq$+`D^syz&ju%B)Ih*J-}e(XgEoQa%wX9nU4y%^0GB%96x03pSkkG&$) z!1kQ3AWsnWdPkd6q#x?SFHWj6755h3R6EdKL>NQrXp$o!5c&D?BJ|V;LGC)O1VWy4{Bd;Koy@AM2)Qd0074h@y@PLZQMYB z4|O*BmC#fvd2;KZrDy12((Tm`O2&Bst=!J-L z(tG2cNB9pDo z1~#gwCKy2gGK-!h zac!9_1z}SJ$Mv(9%7~G<2w*u?xP$~t)`LrzF5Q4I)q{JXGHC;ps1XU_fet<~oGb{H z82!ixo>KXJ;I{072Q@O1mg*jMA|0o*4m5qi0Ffh#hMu8?>KV5yuUfiXLL*t5tOI|# z8rnS>3zlc0eX+EM6z=3kb4~LOeB)H3>3{h!_?`y?I5;))1@qzfXH~fQ(Hkbs=_zg) zT(x7_B^ZPz>q$G6jBXK&vkwKQKp7As2y%8?4??l;uTN>7tM+49{7!{_z|rTq&QkPk z)pDQH-MiOE)m+ECWaM$haITU&CbiZPE$DTP)FLNVt)VSk$WV{c7GCGF)fU>B>-t5( z_&l~(UrK}yATb;;JET7h!$iHDCN%%}C!D6kOTIr%vEvDfCpZTj{Dx!iv_PcMRdxNN zu=^Uau(zY5?IhP&2}IraqTwWXCS#N$KdlE}#N7OIyi z!oM6m!yzgqGzPOzGqS9gt1FKzoSffy=f!Su%Mf53OxTDZ|G zfp9>z;QlUk_d=hqME6gQ4KWuZt-D$^=>T0Xk}I(qDr57Jmwb?IM8!@vEe!2Z%-D5ajU8us< zwr7$Owjw=^T<+7zHt$rtcJwJ_M+z7HrM7{&jekE2oJvo|Zfq%#ekv|yLi2VZ5Y1)^ zkAC_7LD*5S;=hh?Z3)2Z-rv)`1)a&*ty_iC?PU(AG*hD3h?Ov(SjT^vmYibybx8}t zm5p4v*6TX%0qFBBBe!8`0b5&OksiR3KuL$)&ebcxdwFSh8F;H!&!iz*;`Ofp+78_{g`(u2>AO>_H^7^%hb(0jKB z@mdQ$3qIm#w-B!*-<#{!e!qfudgwRTv>CvV22!bxAk-rL#Cp*kj^~k2DLLH7box4v z4V2mroMYzAc(i_+{rx`d-aHnA4zRd~-jIcwnK*FqeD*fK63Tz7GrY3`4|N%Tkb|ed zdc~uk|C7sf3kQ+RB@57}=?}gCevo7MT)7dgrbY-XZUY(^S6w|N*@$thF@Ccaq9Jki?P)6x;2Id2vb+2+rqyKx9^ z?LQ|`^@lF{fio)}4=RXxHNZVEut?#eW}rov4P4_Y`1kD{OQY&sRwNuam~m zYPon7*uez{SK1*hpLl!rr`0?B$r?x*p}VRoFE77&acGnH)sgxC>lx_B0=o|%yD(HP za(=aQin2yz*QX z(fttl&^N-VcIc`2{MKFh8j`vAu}Jxsocw17=1OP!kx)0$>{KQ>FX;nC?E=3OADr!o z@8P_wDh~G02i?_;2;zzBaDr3K|2NJOnzNw`V`Ae1gt8_WNgtE!^g6PANBw_&!`MEzKhb?EB1bpzVqTTtle8qRuAw+;BkFxQKp%x_@!+*rkIjv$f341pW)U|FM+vaCJY*~lJ|7VKM8*2rF~*k*w_0dvc1#ZmQ)i}ggtgBE@x^Ja0z-_1Ci zRxou(uC}>UK9Y@>r}wjyl9E!AVF7XOozcB6^eejt$DGoAGFb^dy0!sPT!qxV`jVpkuiocqEx^-1SPtKKVcmlyAPzSb+v zL!;Przm$q|3Wq#t3$@gZ#&GSr8`#h0>ee}?hyu_zd;WUBwKcd5{(iz>f^C$-yu7Jq zoW|-bWqcnD`OvSv-8Z>-BB1A5-_$>a0O^n28d-|y3fnpGOgk4x=q(3bBDUa6dbPW2 z#n(6=Ea>S;NVv|AsY!I9SM+ozqrQfMZA*KbvC$m`QfeqCE^FP-;ZX9{(g2;#trMJ~ zLg(BMNAbtZhK8UzIE10U>{fTsmxl4 zgf!jhY;Ww?2kRqhZ6eU74}6_}{EJ=BNYk6H)^?>zNPMpX--n*4gQW?J$!ZgluR0U^ zz8ch+g7a_OIvC_xc8dR_|J%)n4?p62`(D^vY;sj@GR60thw0L#XI~bzNo-dUz;vR_ zEqq>+RVF7UAX8|7;lvYu)-KtI-*7UzfaQL3)Z+)@;ST!NGP1q&ahwrDKQREzf2Pn&OstF z)D-YIoz4>NZKz~W)({bIWTb|&I?V|=dLED_IVr>CBf)}xfei+o>$&mSAXG>H*qjBQ zvUKck0J|~o90J74Hh(Cd@a2w!gJ;^E(K^#yWH)Pts4X_K#Wd}V)sb95B0~4gMm`dh zM%zl*o{2#*0+?A{i58S1&gxPdKy4J*N^I=0&J>e*Wr=X$7)(q^fl_ycW$eeQ3kWu8 zHSrZ0DUXb!CVu&&f`Xl$V)3uaTfE4!Qs#rnZexeU!ACm&*G#ae-#haAEM^KcsCO<8 z&ODB7WLBSfeLooLbWO^(@TchkXa%c$`Wno%KM`;LZ;q&u8F`T+uHz=K0KaqW`E`)aK9C|HM&8>Ct$tx-<;;P30cdab_#eb?Ud%N3J zs;Jr$rcEQ2USVf5mD71MOi?L&i=}XlSd_#peQ@_J4+{R=6SfOnfylxCZ1Jd@s-cKl z4>uYOPm?R=_5twTM6qH7>UL&hTe+EsmH_P!CkB(zhwPqX4X(_%66VoJPua~(^tnf* zVsMUD1U{6_kLv124!)OKn0^1-_kVHWb)Adqa{t|}V{drSQLk>N@!tD=Gk)Dp+Xv5f zt)jZ!vu|}tokLEsOFJpDneQ;i`jPk4M%&2U(*YiaKOi$EqTC<+m9Wru57Oqw_sh5v(B}F}2`KvxfX4!v%!lQ?z__fSX#+ z=o#Q5bQ-d1+@C|}4lcCG(x|!h-vgK7OIo)RjL2edj6i%Nx2>c)?7fcbAADQdA{LP3C7yTPGI&_JZ)}=`mxtdye*K`7G=!-vjxir7kZx^;_Bjn zt6Xk0wqQzTiEMV38JEqxx0px1*Th4m(g_WQKc$b{IUUjhtC%j1XDxSv<6vVr_J0@M zpv6!7wZrb3QNpwkPU=O0cYev94}(l!}BM&o8!UG!8xtpbhqp zTMj+{eYe0~M;|5AV14}9!KakDt$I9lIsO{VwZ<5v%b~mv9WG}%`jjwZx(+&TL`#_6 zo;P;3r=#F<|D{V@T_P>@<&Mv|zJJi{V;T7{L#I_RPjdxA`c%29cs~x9dyZe-2IUKT zB<6s_8o(}L_G_^xn;{gCT6xqB@kTV9l6751{?BbsRtc;I6u85k!q~ObFWQNc@5&>* zc6$8PZ??F8u-n7sg_pD3>G&jwa5V8xv17XDS>09w2HUcI)%q6xL+@`j$>Rt3SJ+h7(1`3B;JtT@qMUq6pK+}gfGy(CQU^IoaThRJ*n zMqKwg+DBZ4;9|&4oW+Q)0Zd&kmy~OnV6OHoI5^z8nDJOhyzYdzHkd*}oS&O}S-Wn4 zDRO^8jtdDFC5y&j!D}#`eOhgz!rYo36Jw215NGq544UWavVqv29_zb{$*;r=hC9zb z6cSfb(s~GjyOh3}6E+2TL$cwPSt=O#N+K&rF379efbLy->7J*0AoiEp-9>vklYL5W z*ri>Ev%&be7z*z`fXN=+R8rIC$*8Bxd|C{sYXu)W1Z(>*pHVi~!kg z^GEBJk|7~_ppK1z88lU zRPBS>KLyb+j1y>s$JfV`5b`%@OHg}coCaAT`g9IAi{(ByOG|TibmSqP`XqKxUm$ya zmJ{1k8@R;w5E6Y@o|@$AlGvVEL68oH>$25hAbY#lo=qAut~=OR4^ws6-UqIo@cv9y zNn+M!sCkqflda|O9ttLx{GjElH)7+et+N+<%24H#sIH~mP9lr-_UgRD&Dg?ws_lR4 z_VZI;-!FNZ-pGD#m8?E3xx#jQRAj}(*?`4Z{I(LdCT6U=vhYWM!3=c@3Rl54LWL_< zjX|Su@y3cAsPA_b6=?#YwwT&`=~6P>4+}0l|Mq{&QIu(-o@M=#4$It6@-vumrOac( z^XE)Z*bi1W+f0xO9=kZZi)-v--ANsPlOlqo!Px@oIu7WXH*w-nWeJ#?+pH=uq|ewIqfL-tyAOTh%Yiox~m13?a`)k}(J zX}|YP^H7ilYaa!lpXU|j&YG6c(R(j;OCR$a*q@(^;ysRi=>5g$?V@YYoE^J>lwxkH z=+W^VH*UJEqn#hMKAVfsXs1tmR;$@`P~RIK3`2@l*80c8SX_WlM@Y$w6wyYsCAz1h z5;EMp!kvQ8l?O1#y9UcFtQU-g7fA~TRB=Z0A9cCP7HsW&ua~l#eTcp+_CY~KB%0eX=dn$F6w53x&2kfQ&FBm(>mov3JSZH3K{`CNPjc=Fv9 z^F<-?o9et4@z#*(y{+voF#R5>dVWZ&^(SwL>2&k9ViND>wxTEH(3=35V87{UPS-B$ z=vgq3qT1PibL-1f^tioAQ;Ivr3fI6wcPegt?MK{5 z_c~fL^4-7yzx5Tq=l4@L($%ses0DB9HfJ3_{z?bERB9^kbJcq0F&#D44qfr})4ktK z!h$wIDehomM;~XX{I)@&nj!0PKi`=n-YJXnGY+)!YsPW>c9kPKpODqet9|7Cll9T? zk|rg}deTK1%#|V@&#E|F_L%=tJrYlv9`l|zs#gF%;*^J}zP`lYz;E2*Is zzdOk2syJsre=qUBJ)xY1f*2%Iz5FAV3vwq>mCn-i}LXXloj2U@mM>Dv*R zG(-Ss6eW{I*f@&>{sHQOcX&f<^N;t3w*eRHDB$F-e3De@T3!C4@JSM^t@u}qD6_Pr zM7ofpmCF~}9?*`;_w@4oCSV6G!dMc5XNC$uxS#>~1jdOlf}a3RVdvxGAY>FLLOtdx z`h?GD=)fpzTP%bE$Q)f`nBYJ{ZwaYcYCI5OYh|b;JWi~|ur^f<6te=rl2)4F{iQc11Qd=-5oa)Fim1_Z3XpQTuw_!h_P}7Trih&=5hKp{(8_o zkJCOS$p(9Dv(z=HE2OFT+7wX(+kR0$#r0k9Sart9^?%DJyyqsOo{ip%-S?JgK?@`# zFHb)$ejMv5t**AfhBOO#zY!Dhz&yDhjiN1ViDxrVl@16Y++FK;vB z9DPnsPBp0Qv@b}@$lShVz@@{*pku~u#15q9eH*UakCn^i85QCdzA2iwjH}NAXp&N% z`67Q4I`6I|KCOm_64qIDP1!~?YTu(8?^=gBqn(AeI^qfc!n8d;fq0C%vKR~XLfW5u zn&InDq??aVh4`KLQKQlHYcI5ikICwVoL%tB;q}RuJ#K9bVvV{!G10AsaWLQ0mFCLT z6@%}#M=Yi8jRr|nYUA@_@+zMmI-XigKF!vGy!_vE`}mEoPG77emy2++>*yz<*>ON` z$iCQ_EdKo-^?d2j)z}rv?an_O-o)okH{GZm+Q5IkC*AtP;eD8Ke0RqR)k3VVd$J)^ z)y!{8xNzJBX3W}LwXD1AYSN82J)PZM%O#oQ_Q7qchsa;MG!H7oSG=v$)cFt??9?1u zH2-P(e!g?lt=+%nZ$$I$(t;4TMzG?+`33i;VW}}eGkziurr{|g=E3cd*{%MS=$xy* z#^0Ny+_0|q6QB6`QTyu58{jR~x^aW)Zxwz0vp~u^$gg;i*S@s(0Qzg;>{A6fh`G{A z8z}SnruO!I`{Z~4?a%h(ArP9JeQ;v74yZh4)O=dq#4%SjV13Y2AE6;(S$ZlCKP}{Qh19}!*M7LDRzSi0BuEWvU$!GYP^s8BhyzSTAy|!2$0Hib|AcAILYsp1 zOZxR#8m+B7zltS-d~~i>&w6UK+2mv~nYJY)6)u=wO0@@Z#%VD5gp-qkc}1XYJ)3`@ zfv|cWN_jDRQcKpnY8om*djgtWTEy*}Oi%3!^Y(Oo*K zi^;j|MRBOZMd15X{Ettybjm7@OQ_9EYsP-4YAXjJnZ##UYTCNpH{o>XJG*n*<1kw1>NHt_71#*wreIsGgqr|xmSI#k_lax@14Se zHn$JlKEIwvnO;TMqAq=Ce=Yo>a z6j4r_*AXZi!P2|4)1~c_<><_oygSR$l(^Q`%_W{|He&vo;(`~d>-<#~vtnK~ocJ-k zpY=^Ge6?IARd-)uMt1z2XE1rJS<>2pX-MPH*N46et8+U_YbZJPKG%4bE~7eJ&)VBh6-VO#`0?I z%+=4ZM=^$s$isie(!V-?!lP^>wo~!#ozDDy{PZ!-s3*K{CX?;Ss}wEA#)uj`JYyr4 z?EYN{z6j879w3SjL5)2gLu#fW{eOF|KMVhi;X^OnEzfZ~3qlx;)VFn{qfhzC{_G$h zUGK?k?N>rV75DS+tM^J-*bJp(>4^` zF6OGW=!TPb-JF42Tz5lFjJB9Om;nVM%zM}D0FC@d1Iz?MTEjcS)vuyQM4qH;>iCLX znYGjyn|b-anZ*0|%}^x?1(}E^6iWyMJ}g^4;=lnKlm1FH>@=DbF#3%Y^clfIqa2wl zKtqgvw6kX;U4nI&0^=Vjg8YF?`y@J>@Xg^~>Hr^APkJ!!bg3jYFax7tB{3D&PhiQT z=`6g00N~Z)$w?$Zzzsg3QIPMW{YBxK@x`#!k1*xrMw7`zncsAZ6M=iDBoOUsYdlGs zT}8a8sHkY0Uxc6}qK;ln3Payr13=h8iJ!3j`y7!-{groNX?FbVx!Dt@VU@q|D*!V$ zG{$0wT)!EMPTjd%Ke`F6U!4xC>JQoV#o)to{`rxd=O&Q>mKSL_Gf<1tdS<&|( zC64FwR+H`eI9ACF?6Rm2;P-)R@$1N?!=;UE`5Whey|vHue*@cFQ6o}m2W(|Y(=NfPQa13CW!^fI|B!wAH1CnxjaHC)8``fd zx<#gl3Bawa1iR&{1K4_S=FEZ*xJHWB;Jot))Hy7dGm89BRU>aWvu)hyIW!Y|-1@<@AUR zC|zRi-H2adhjr#T8$ufBi+yf9;H1SeMZerOd4o*#v|#77E$PDW7pObIVWWTd!s3N!`%8xvSqWaa!@(Ew__$HFk6rsYLI)p^8-*e{ zjlzHU#(=~BW=XkVQ5MUF@#EfUOAFZc4NCb#f-FWfYS(9{cVw)>gF?SwmjEDW88gzK zkgY@ux>hH2{Z;f0|9^6c`R$>TczouLZMm|m>yIJeN&>h#?}=@ z8TZCcDKc`VdOk@g8BhwHWKY67MrJBMKGz>Eo(whJgK+oks9baG{zm>lnN|Bs>$UK_ z_}kuA2nqo&knFt23(q%Jo=~NXvU3Uxb2#-0$X?G6m~H_;eZ6{8{`aA8_~K9Vgu#1O z^21iWXDoI4@?{aCaf&w~n|TY>R1Wx!8Ecf%1Xv{wX*xP9S-&u^ZY)Z1Ots~H8)1^t zrGAB_2=O7inQG0a0g7DY;`J(D+P+iw0>ymZ?mh?l!$DfWghtxS- z(9~RWw5wrlMx4YDnH{%VTIW%xcUa=fD6LljqVh4{*H^Azbhmq3SCvwqE_`#=HU+(} z=WO-$W|b=Sj3xEM$s)CZzod#$YOOQ0CiuHY+o|1hVgyrwqC53h2bBf`tuSlE= zQ-WDRB_(;)%2oBePsunRch4}(6Sh;a9pEolT$%;QPDyoAM((+Ugd61n37_D{FIKb- z8BT|MPK8ECMq5}*WjuB`>gRzI2fr#=8&-8a;1#F-i#ZYJZW?R#XR}YO_y#Ri8yflY z>^@X@Eg?>n{Fy3RZ_C|Q8LZYDuZL*zvWg2j#==RdN%*$I#zkFvS!lh}AO0XoB-BE< zAy+68wL`A%CZkTk8Ggw8UU9Os3Kdw%ipoH$*Ue5&p5iyKw^$Cn zBxG^e;N+)k2n$Y|s}X5dvg~Qgx4${O#n~Y?cEFR2#tI6jw!<^$GA}%NEnbt%5DJT8 z!3m>N+Fwfv_uaJH`k{#?smo=nmOF*n?Bi#h^8XG#G&Hp=FK{Dii)@NpE1s{!N7+?} zt~;%cXrT9&IHc2@@>FcX557aiL?8Y_e|0W<7(`h(ZNQfIKmpwLwB@WRl zE|2OVLg8A~I=`hK6zz#AQcXJ8xUPwLFvMrM(9}KFz)TkWHXn)VZG+(qZ|?F9%mk^s zbNjvZ{J2g0i#4KO$`ib~UCyd?ME43t^YCt`TZx-+Qlr<9Ob2=~QC_$mvRXe<)`^ej}cj6PAJ~~Fffpj`kZv873oc(Ev(xp z#6!@SpVa8h)jqxY^m&Rm{^rBMqKY`2-hO6Q@tJHNzgpw%Ceb$WKT8z~XIeM$HQHftSN@p2R+v zrFx3c2?!5fRu)tKqJa-I;b!*?{-B5cLvp2#=HouMEqMBqADJATQ8|kB~ z$v>Dqw|ka6Pk}tjP)^1^auhNAd+P?9_;GX_RqvaA5b1k&KHJvB$5GnUv?qz91$p91 z@0EBQ$}e{~^Td@vmwij>%Mu#cnu&`1z|;+NvtH!e0zCkEro@~~)&hpHTI$~g(L*CZ;wy7q-EHgUHxmw+oY_wckc;Z42br8ig{#z1~r6bnQjOi$78u7iwR;d};&<7qfh= z)X1_i`QfB^BGMl-2uG~s56DT|G#)lvXNb~I_}cwYXL#GQ^XwLIg31z^VWE1p@sV4- zKYHI@ZCG~h#+E*Nve!Q&dFRmwbs&5Sr4M#~TT`C6!)gEDlpg9XHSE`u&`7^on~1jevBxb-@~Sw5yPZ(?X~@|VQxtq%N%m@Uai zvw(ofv@@GH_5Czjx#xdWz-pymipv_WNbuoqtj_%{J1!mlI=f7rd%&A3l)mvj(g=b7 z+%M%{!eU($+UfoJ(7uqVe@D32>95e!jh$wt5fJ;zNn?KF^$=laG}QrA-7-m%_U8k0 zT*ewEw2q&7bK7+gf0X%fd+Ln0-?lO$$P|r`Q1>sKoOFrVf#y69LBXNkspq`VQ97Lo zlGRsq)n65VWh?$C+@M@~p{|L92cz_C#T&fFhjvZX*76LTs9op24wrq5y?Cp7UlxIF zJDhC-J8%(i2Uw87*i^+q(z9C)v`czBa~B2P$YWxfgMk zn@!qHxZa$c22EOq_y}^C)=25g<4jtVzVkqXYn5d@!>!Mqk@N6r{8%`24CIq6BJy)a zrC3~}0<+-WNv)QsDP(lF_2y&&=Afwx93pBCp(VmQ%%-teU;r3lKt=*iFEZSqi3S?6`4gqI`+F>NH6@zb?HR^iEZuUuM)kozCC+PC4dFD1wMw({sAg9!0-Od-b zOk9lb#ZbAeqYXcfMk|S9eTZyawL=detGa<+5y)ua1KH)@F#c5L%v`K8c4Wd9PKutYJL+yxZ}*hmMVWfI0c0%Gfab+;b8Yy5MfDY4sN>>u^3{EpaDnuk$+)p6=Z?T z4(sd;k`chp3|CE-5W3}G^(MSVnWuGcV@7oLGdvs+EW};jOvUxQzR27rWa~YC;A?d?&u{k`eCwH`rVy< zDN~e1sC;UB7-4tJq9v`q32I+TbhhTQYj1aR4u^Lgahz0Bx}U%_-}Pl~ssl9enf^Oh zngl%|qt2A@r$hZAJ2O*v$#9f%`lp5qYr#4S&FlYj0{nr;(zo9G6TYC2b*0-sN;cAHJxwoBHZJd#gT{GZb3cO?MceGinN7{=Yfrc>=f1!s{S`C z!-3m3Hk-T|a;Lh4JI-UQn>1@jnD1IL7CG4GcbY4+ZMmt552@ERn;`1u-IKFt6@LG> z2eW^%e3@qBPaMk3h{#Jx7Hx-xIK9I?DEpro{UP^OO%Bl`sd=6@? ze)gmTlwa~G(U)%-5lwu*)ni-#+xRS`LvFI~>0P|!W`_pQ&jS$+zh2lS(Z5KrcW?m4 zRd+`}-G02zumYj8N1G-354R%QeFnV&kg&G@>wh;XoKU@ACTqm%#_xCVq|_pC4S4RL z{aHMK-r&V_$Ar2gJq%wuJ(ZO><)BvR?)X}yG{b9|39( z-2gZi>6V+q=UJQhgLU~)i%1*95z6Ijc0!LzYOYww0Ltix>i=bI2M=KR#Pn1XEUZ6v zHkWW>)abqG?>OgwKZK#oyLWmwL%T#kwO$XVg=^Ntj7J$jp!0|FXZ^@OP{3>12+ji2 zOQJOSXLjZ*H|+w!D;H(AWrI@)b6SYK;AU*QKK) zgVi`0XQq9H$WigCA! zQYIu^VjCyYXGn%E>gbtde#0l<(DdrCmK0}u(Z-dWdLE-AY}v!iguVR6z86~AOTK%dW!#p?}>>S&54+YKk7wzz#Mw_nrbaV>F}Ki6BcbbBC&rsCkS{^t4Suy!fGZ z=wl-CI8^RQrRzVirJo<3s_hT?#N%0>H_O{59clF~Oqm-kuyVRV^mFnaCHmkRk{!cHy>Hhh1q84vUhZmH9+mzA79xpwx>tBm0-~_+MXy<6m}%*{Q)`qMPMi&B z2L1d_Ow9gzz41>?mS=!m#mvu>I89w zCSQ$Y$AQg>DP=8>egp7HsI^ltK{ZRbwDZ+JAQS)BU(e!=xwc#%vs6ka7a-cfo0B`n z!W-Djeu(}q6SQjo@_|w!G7Hgo?6bp;8KZ2CHgNCT9$Sz!#Tu5K4L?;%`S_8cSWB<0 zK=v1dZMF_B2Kty)M=A(v<@MD@{9N@Fw$mpWIkIWSNSx`d4+yipAG@9>$dy=Nl(du3 zH8P%BEO~sOjn-6*7jk08X_FU!OB-W}XkEKwEfwO-BxZ;%o4dT?seFSAuf^u6tEn-t zN46B}uX<6$iP?-C`l#%YK!_ zi=+HpBkD_s5>NxTZEko2%Wh7zcH(GRceGwHw>ZRtxMSz$)}MPn=9%kCBy;7byD9Dh z$QB%_V#ylUZy~%gngM;2AkHhbcAG z>YO=mjyz-g0Lk7Ft!vLkEUHPpqN5 zdY3mJRZyx%geS@!(CRY7D4Jg_!Akt`;}9nBvBdbb;6bg5d#VO!C*FMIStG&f-@ zi~b6QMHzPF3Lc(~>$)>1&X+tI;jZ6{p9$3#d=C)vkwYTkLM?_~?wmHU06~>H`_BHi z@e6LXCOA}}U*SR>S$ZhtT7S6a+-pe!c^ECYv09{o-sn_+KY9XK4s_~5_UqSBx)tW3 z7e;CK@lV~#hd@mnQqG({=m$&YBJC_t-a!0MQ6@8npp22<*qGG#1^!^h&if4bw_&NI zBJ@}+s;Zn^;{ZUK-8Q8O2spY`zJ5Issle9fcXY@fJ2@6UCv>|R=E1px{UJCSA1}8j zFEHuPs@mk~CO%}I-5Og{Ne zR1O2v?OrMe<}+GwzUdJiViZk#?_MGexJT*GopMr*DXFL^!V<~oQ5H}J2!}6yBNP+e zF=&Ba@(xkF4&0q^u;uz!3}p9*cynvcPj|?|F>9!if?>4#`J*bB0+3tT z|E{|I2T&7}K%Q4{>=a#f{@X0hkn&kTRV!uF!vb;2*2|ifis)i&aX8 zrj|Ayr+WuncK-IjlknbdXS=gCjp6N%{OXPT+eM7V>Qk?v!1F?wR%)!c7II&bn9a{- zL{R1X=dVuK$alwL#(xC)e+2ZhjhiteY8;oX3Cx;&uxfHJf6TfD0 zbA#*yOtkT=3u^ds>vYLDbCJMnBg*&GQFy&v=8f)zGf6fBztekUXac;o`03(m8QOluP|8 z^pQ8$`DsQ&Cdg3ZZ^FQu|AwED@uD{iRNvq-=YuP8RRYuhl!^~&h$rbqqUW%u$(7Qp z&%#&XYbIU{&?ENo^+*3!$`EsT*-%S-Tyx0N>~*itkaXmx?iye4zwA%&l1Ztht2HZ5 zBRB0me{2=^tX@3H`D!z_B3SB4nN?h>@IoLU;dah8cQ;G)xiW%$EUUz38p+zAZu#Ks ztQ@Ib{ZS2j{_qq`g&#!Hx;x%ccFxg@Y7L$>7d&SbYO5nwOHR^^?XAHIl@5MBJu)a?El)VtN`9cl1qg?ab273H>bY-7If{;?NP88xa<+al9HmYghB9`hTc0t2UR|O|g{Q2Lk!87&1W`r$^1*x&(M{4!$weK{q>oK@lSB;! zw{I})M+w<5GtavA_9{G%ZiIogiL_z@s)Hc9WthE0ww|=5(UmvS8)V&Bo=_7edx1Q? zk9>4;amJ`?b?A}#ZAF*a>qSYT)v#rY=X)3|cQW|ObKZFevrE{!Zg#gG$hF1uw#6$} zDk<3(SKM7sW4BLQV`Z-~u_ly3M2a!x^g5D-(QtXN{ar$*z{b9vo+Tocn83R_is-pG z#h5=Ub7B;?3FR9BE{;kS-)EnAD zsu?|Z*Q7v;03I+Jf0d9CSia^V@lK}PXfRd~?!(CGuDP+g3G!b#yQ?lWfjm6AJiV(5 z+!cyy3;h+0PH3}icPWOEEH5wAJ0XrhU8>z@+hJy_QBsr}9v6nkyhT1$a0KDaWV}$S z=PywUO*Xv-=mDvyY}A`!9!(oQQEP1G(~9FxcVBzPciMJhu>zobJDBzr4GsaeEEz%x z(}jgng}&xm@d&Y6V)%4Ve$Bd_?$=huc`uzuP51El&SxI%{PEBV{(Y@v-By59Mk1o* z|5x)goDxZ1IUVqgJM-Nyw}+tQR-?%qXag$mM#ALXOlY-CB6q%!#n6r(seRA_rF`=> zo{=%w{yW|F?^KJ#U8%ow(lTi~_W9R7CrQK^v_4D+Uzi>ktbXgf=W2M=g4f%29P;8{ zex3xa<{RkKmoDjLe8!Or)5SMIv3~QWyq(ywwqg1T_HG30(Y}y1=He<=vj%wkX1I_q*^HdooXqZ?_d?9c) zuUS%7+1Me`bI(CCjOMac@*eLgJgH6p{^P8CyqPas7y=yzyzF<6sAZw2G^(Y&g^Qw8{DnxYLq0X2Ja#Yiihj~kDyP)%U0T3Q0G81yd0WC}e#DFIH}oI_K|R@V z@D9cs)I+>aBd_qBL9&dK@oKiuO<%1Z!fQ-$=!McdLmx!qmSMzG7)D$j+6u-ei%2c< zA1P~RL#8y^qHEzpQ#<_LZ`{Neri^x0 zLC2ja_iyS9c?i*@vqQ10j1v0p%U)B!bGSnFWCuZhhL~+~>GGcrTyd3a=8E1NT7{dW z>p|h!O{UB$GJme6EW@#$rt(41b>EAsjS*J_7+qx#aCJ$Kh zSyG{bA=Y}q!_=OOBkP+d@6~%?vzJGkIA{?TV-U$9BUJcS6U8ZxVQ7SEpUi|6_)6o< zMz_9tY@1?z`+IT2r$2T%e;L`9u!T)y+CZr0>YbVNrOaRr!pRDbUktKodYxqYwdk9W z{QP8VKRCi3=E&Mi(jJrNFExYjN@+U-IrSNcrd1bi*_M6TRi63TP!=eyqDS?o2um{N zQ2xdWA!|f?r4a<&N{1@7BL~O8?PPZx{`nk14#68fbe2<}hL}a;v+Ls_cT%F7%BDv^ zaBSxV{x{%AX=h%Y;gs4KeLGklxGov%xEJk9T9|BmJ3$A;wp}&z%`=1r+>!In^Eji8 z+9`!g?9)+a#_h}kx-)uz)HO07Gp`&(gXa24Y6ANIIy##wRp41yR#HX%AvRohW{C`@ z3Y)2#!Ovgj64dvhc}cj%7coVoNb+m$X1+!){&fsi^iIYl|DaSKTxT+AWw)^xYxQ*m zc?}V572{b2$C|;|`FC{ku~MY!aPEuN(wE#8Js>DJ@8KBT-R5?#88_#NBGiUYQ=c&$ zn4FQ!ONdohL+YDUKHg>bvHlVW5;(opIGw4p|Zp;dj9&o zvjb2V(a!zP(l_!m`3%A0Y)|~9Zm9M}>8X&FPw$I<-ZLj6Ry3G*8se!h?&;dy>gibh z^y?`%8wRyjNG`M~rB7L=vt?eGZ%1ApVck=TtpxLnkDYftng&fVh{#!2pa@P)M^wdt z)K~;wh{v(&{~Rc#cYdT5O+X^=eEr?dn~5uNt#x5fInbuB@?S?1mX+9rR_a%x<{BgC z;(E7Du#%q&STapSUS|pd{29#vWh84wre@Y=tmVXyi-@|ugZ(1hQtxn*eS~i_u?fV@ zrH8d(()K~-bDP{7s^sWB%X*!_K0vDa!f67YqnE$-^sq1{yP?7IW_!j)KBz!)a>|Bp zSaUg@595KUvBC!UJ;%z7bWZ6fYHHG@ey!~)d|BCFi&{vEUZ=?;0ZPEfzfzEMkliYr zYV53RN!-VumJW6A<2$C#gL^Dz$T`eVwZQyW?mqrKkv@z;I$+D9?e-AvTO5MVQL$@a ze(luF8pEmyL33*Ap`aXlV_QM!X>SoQvuVxqEiXB8z*COZG(EXqZ$RmmafkeNnmyGSfq4d7`PF z<@nT8OJJ>WMM#GpwovnB`phe4M|CI*WaAggFN6nS z@^I$pMdqt3@Weu)(4U-jsPkxC`?4q&QRjOr9W$i2w0q4&&3c!Qgm&n9$O!xU>VxmW zxg(lr@L94q=-~77*8dH@3%y{xt@#}us0nN|U5B8?;_d>)JH$XZH?)V-SB#0YE%k&9 zb`Ife@%5W2Hr%Hrdf2Vv=)0Hgc-{oXiXYOOw47oKX4#oj1ghPOR~r1QQJ3Y?obLVH z7^RKtWc6wMA7H^RxL+HV?+5BBIo14AIq;0bM?;%$09fSQc0{usDj!Qm{`_++)(dJ| z<&~%2vEE8$;rW{>Ab$2#l>ShIkh* zT;Erg_=God`mNeN?g@{&k+s8ZxefE1c$bUCC9Gh2^|9c<>`^wQQ+!QWda<@{D-7pS zEJ-)Bjp%+%E2amxo)X{F;l+Bqn};yAH7rOOm~q+FW?Z6Kn|+C$JT04X*oe0VsCu76 z53E*{10(rv+U8xU?l+Z~S^W|?UEV0WV!SAqmAV4YO&^hL#Pvp0@9LKc9JbvL($oG> zz9k*naqA@vm34DPnyHR`e4=|Vyq+j7|G`VS3pk_FNz-Tah$rl^KZ-$t7)U=2kmyN$cYb4_cVqyQPN~1)K1>X z7mK&%UUL2MSCI%T?2x64%Vx^Kcpkn}AljNe3e-$%s{^@!G4nYUJptVbl9U%GIcfe_ zp~mVg`zTW{`=)f&{o`VdoB4rpa!M%($?bBj~GxRaHW)^~=9o+_Il6n`Rr zTYnPS@Y__;VJeW&>-Ag`OSvRf(XV?aZtpCu+; zXXOKUm^DJ^(y-0WEqa37z}WFt(Akm*1pu)ZrNq#N>2GO=+cWH#b5SqiX%?J1#g}SA zLkFRO|58kPqQ_nT2u-M3q|{eNJhL43pp0UjKrAdE9!Zli9Ooc zOy2w;DEXL&bsKn&?n*pTuKUeKsi!$O2NLpQ&dx^yYR%9#KRqk0L0F5LssnjPWHL3@ zicz-XRSG9#<`|pdf|J5nrzerbOJQ&sd}Fmd@>|H01i;kjTjRc{xE>_W?+`+?TPgem zme)sKcZ-@sJUkXHq9}#ob4upI!wBo6X~J>|>*+C>-{pVbwH#W#1zt6t$ljzj#wR8x zuiF`rP{vPKy?Tq%5R^)z*QT{bC4^wk-uepM)-Bd z_3)J3Z97gUdbt$0S*;2qoQ4t4@E2#q(E})HwC>Jj@|OL;_>Gj4Z1P#gU+;R}4L5Th z$sX7+0&l*&aGx0ZU{^eg;WGSRn%G)HnaL@-C|Mexu#(>qDt<&n4q^JFoN`a8Rr-#9 zlwfkbz>RRXVAJyT?{oT&F_H%2pBTXX4G8EE%4`@7CHlN;Azs{nHZg@nO(Z6mn%xGP zCiY~lH2s~GtdW2DIZ;!DUCy+c2wf!L%SVTVhH!*RjJZE%!wTNBx6tGyl`N9X=qck;Q^_N01}%e!RTK$odzE%D@B%o=q8i0chlfo!}Dend@;tqw%@ z=a5FGrjzX>a8xucXxRc|bjAT1C#{b$um0@0 ziIh$JWNp??!hIFuqhH5lEGjeq)&iK+-Sl-u;}AhVNBs zT>6gViyp@x!7b-)ym5imNRgv7dQI>7F4=ErNms;H$+C0faH(gv=+K^h(1*Hi9@z$C zXR4GocxMHoTB3c_h6541XlXgM28Sh%&JK|h{bWixxZcr_-K5z#e8k!9zYFc=_ANoa z=UdUvwAD)exmM)p@SYOx;1$=Wcm4OiV@AH={L5@uX6|bryxbDE0vA7gAbS7UsSsgD z^}=HYKO%Zq7f*5#O*mRbZ3FLkZ^xkKK=z;EqK%(!gIVM8C<{uBd>N6w?fd>{ZJ@(l z%P2CD#;)#gd_v;LfxZ1wVdFnD(&^cwM@;+pfcYVGbSF4WLSdIrM6cDG&u=D*yHpl886s(4vC;a1OJ zJnRisUSVe?ApdGQ;gKHrEN($sCKjyx_yysfhW%W1e*>p)f>BaY_SOfIOpl_AvN`oz zv3iKeLAsn)kx^8sN&zL=+8LY$iPCeb`eqr8A^N5~bu4@n|7HKzzQiJ)nZh9dM8m3X zwkV0ndPGxKjHE&Z2e)cMN(eoAc?lL z1it0eU&lVY;B}6$7--`^jw={ajNm1+s_{r6Hg@7|5mA$d{Lcgp4OYvphj`Bwi?rZF zt{FWyRlf$3j^XvX5=5|#I$pnQ%)t=Y>G zYNIerO(`S*IwoKDl=WglQ>z+&JT!1FREqS9S+8TUR?KaRZ6AZXc;@R{t1uKe=Rm^G zF$miiQk6?Y784dV_SI{hPVA(&cbOiOdkrdQ=fS@Arwy3oY9H z1gJ81)ib&9i>vH@FbaSBlUfwXiMfX2o{yXeKHR7Po)!vgjb#Z!v!uXS z3Sp^N=GnIF75w1CNy2|*@8#z`FI0ZC=L>#?)H>K}9ARs^Y#bGatcWo$KcD`PUL(R7 z45Efa4sJu%(dRG>*0fj66kfB%Z=02xqB|S$UxBc_Mm8bNn=@UT{&NVfoJ~-s&sx3s zlA;VT#473gT876bpmbq0bMXIvtc64A*@R^&c3&y^m)md=LsU2ScFrDzv{`XSU^`~! zwN6=9;U(;W3sf$h9K~)|G1Z*37;JJPdMTm%5ZPLfJSg7;+w!lo3eY5Rs26Y!+{HTyrwOzx@RHPSnu--F}leU~@RWA=53|cT9zTns|-8i6ufyE>*f;?hjds4@A0OXa`r@L;uLEYh1xy+Ep)7U;C4O zE~r%wCltB9OC6v|sgXX%z;xCduhKsb_V%kY>_}aV==Z=9ASbwK+mT&DcJkO*pTba< zKw~)m0{1go3wXoDdO&-bs#7n9Q?50JG-nr?LR&{%k=i=`VdK6;iBx`-GrSOaYG1Vb z{su-o7UuIW!NJVWKv1o8wd3P*) zl+AQDye$JN!(l=%f(68NEX!Eu6NXrhi6S1R!RtWaEkpf<5&s*U3X7ZkM#_!V~m2~j!(bgpJac2 zf~VpXGq4>_^bzHU1Ha9>pqma^3CYd=&3uT0cHf*lO6W>3b>OoRnH$!*Ox4Iq>&F@_ zc@$?ji=m`WjND3G$scN&eNIFQkf+r&G1r#clA!W0kBbM@^q0f0H>na<;UD)Zr2GhP z+%nWYITr4NEB6QVjD@enZBlfd@g#+P?p7m$bOl=C`e)5lO9B{E!n|Kihnj$h*N7k` ziGS4-EX>`rihEm1QD?JPa;=3^XJ(;LIaJWO4Y=?nXH=>IiI%e!(Sp1=^}g7x{av2C zI*W(g(&F-kgg6G?0*(9|9NO`5_y#yLnTY5f#KQ$Dxp@|wqsA2iLksxNhHk4I8;5@| zdRurBTd9iQ`GRbF8_LOySr%|Ho0-B~u)`zn7`hU|UJY99I@Co63;tO|pI-O2g!SCp~_s|UuVM?Di2nfz|kreFx z!(~j2n0dm`M}v0|D!S}5`|ksgTimcMKM;l${VrvWTgjsJI@@$YM>4|ZFM7}f=+M=J zi<<#vL~cdxo%2~ib7ZLd-MaDf92ZX>m;J; zA7RrSG)W7V9M}X5;x6Ie5U`Uje2dBjaD)FZcih1TAeGCuFI#gF{8522O^@bWSpHtT@Q=Qxo`kaBjEtBGLQ3 z@)`E=cGAiaRSPrtz^H9c`!bIpOBu!&?Tni+B*n@Ndq5qw*)jBN=dA?E&6@)JP_xY{ ze6Mg8s_u5vHbexeCP_NJcnR{br;IDPN9OmO&>K(l9gF*Bl|T)m`jT}%E>ZfDv=pHN zM%TyneTV{isxR=^`8kboEv*0I;-IzMh5^jmwgqtma{IC_HB;u*iB_uB`_0vjAzfjj zdw-o=!Ef%(Q;w&P^6uAqmINQT8XiXOLh~j|zX+M?4t{$8^n>4~wJ#5Mc;aS3^vt`P zxYYXf(EPW7UQioc#knjQoGEbGU=!=mNq?C}L}uce5B?=Fvwz0xn>qD2u*XtgH6art zTJfvYx(6NCLau6Nmsi4(9l0=N7}hN~V0L^doTj1=)trMdkdLLO=R6=RJlbrS-DCnO z!g|luPlL?vAE{1rv~jf$)QS({gT7+gcTTr(_W;a9U0wUmh~Dq^Q)XbQvx8RK!728} zbdsz-B|WRX$EAOTH& zasWlcYCG!{Bqm1w zI!ZiSr(@8f^~J^Y?=^S?wAVay*`QQ;%4WH-QWgAlP>YmvR4r|AQcGckljLqO|K!wr z5V}WL?xFo5oZ$u7K)7QDVHM~}Ct9-p(Pv6vE5^rXVI;=8+Ej9K4iWjMa;|i`-qUiC zMvWIEanH3`fI~f^NFK-=6fcb04aWw2bqjFIUYba4T$2daKl4B$+>wr2c&yei2WLQC zp$^-jd@~!Qi{W{6mxSqJbjVkF1)!-Vk@ZkC4Bpoji=8j@qg!P-5$Pr8Aif1da}@fw z9sAvRF?ELD576oK>^g(sz;yCs(`u-bwh5~(DM{Q@%Ga9J zfiFtoc(eW}`6a1G9P0~3&dviiT%%ow_(1j*c21J!tqO+Y_;_{ijg(S2AT{d%RTA$7 zFO`z5MJq!--MkHa*^S|1eNOJdTpG94EE>*-G*swZ$JR$seMK8GQ?EE%y}4)XM8fxF z8<52~34bsbA^$b+{dywZ1|NTZwciU5IZ#|& z{O#J@OS~O-W)*)znkprS-tFljIFSY_I**~rn+#T^oC?`F$Pu`udC}Tm6!`g(FAy{1 ztyHoaqz4b*#%(uKMtSX5m;baj8%G&Z@HZ^=w4P_9ISkU4ZdhJ54w44DgeYPKJH(>v zg);RPm~o>zO_Q878^lbowzokM5WT&n!n+)>i-5Uu3R-BU ztjd%GV2z$ukN({hGU{r%cZfxhBE%eAHt$7XYC3)D-kWx4gU7AH!sLU1Qm%!wkwkaB zO@Mo}m6htaxq!8Yh}?zMwqA|p6hEes8y|VxBD;~B^xxVy^oXafwDLDOAHotqt<^vL z2JdW4L#W{n)$%h&?$nhp8pUARZG-ft&id4^m%8{hx6 zWWUldp5S*>F(xr)#vPhcRrg#QPj61kz5P8@kB4D}BsVRArW1=b?JOZpubnM-a{j!i zFo&E$3%&S>-`7d^hE!&IRqsW&icZ1#5`}y_q<1V3Eu2ib8eR}oJ?jrLY-&o%x@^Lu zPs6ApWZu|#bWaQUltveJ`_B;i)#g_tF0KoZ?^Cw8Xy-cX{Sh`bk(>Lv#y;XNjS!9% zz><^koyWu0Ra^)kuNwnNCUWuQwh8FMBO#7lk#I$lRQH^aZNesROg<)Rva#hSb`&bH znff2`uO=a^R{qMGPt^F}V)a>1kK&uJrZ^}Yb94@zQLg=zX^}@!wM7)9}wgKv|V;L6BMPTNKyg?3yZIs zjuYLhv7NP@cSr$^?P1Cj6S552>sH427-^*~i#}C<9V+mqeeBwR9^lgUe{vUMNr^K| zlI3#3ezLNGWpA^I|3S&>PYFenHq7pu1acQd=Z^g5&vIlq7$&>+L4%b8>ySOM=y=71 zi{&70zrr-V!)3S?Iqc&{22W}~P2J3&rKDkMga4Ay&}Z!u?SH<)XlTK3A-3$=#E*-L z=gTJ%R3U%JW5GeeXg&P^9q6R}Sog$ryt#&gQr00vjl)|TbpgJs zJWorS*j5#*Q^*}DbP6PjSPv`lWKc=XYur~uIo?Wn7Q5)XhzPyWGIZkji4#J)xn{oD zuHB{Y2_cIG4cR*BCE-m|e(p3(p`RLNVZ22k-FBDw$q+BFJI3GYA&On1z`LcKm_2U1 zVum`nXRyvN09ViL?4bW>=IvWO+@}DA81nEuX#1EKc_pYO&BucKL=r$n{C+5{9+8pg zA5X*6U%h;pf2TZg$=TXkg?>&1uQYap+PImIx>ChbLs>}jjdp5H_8zwO?91^d{IFK! z)tnaE+882)a*<)UqB1ThOrBza z^kJbyb+2LTlyBVY{rS0*yorkglYiyLvdzyAR=ju27XR2$n{~ejjw)FxXU&5^ zvt^}hljgTWzrsK>_@xepOA0%)7z*$si?PS^+BdrmQ&{qm*4zKT+)ShQE?dFBTY=RV z)BWNuxqjQFdhrsXSrVyK2DfL}71q{jLMA|r69GOim|)c0z1DyGE*Ls%g&mr;rI%f0 z_hjT-Tzb5q@FFV;j*681^lFOG!S`foSZH7i7+MjE&9mi@wRvGTU*M2Y;<`L8t9=t6 zLz9pG-5W2tv_!!Ai(9+`+48#YQEyuyXsy$lG%YZ)?*znqwemu>v4B&rrp!n;G>VnM0HkKg2!&+xPXmd+TLvBMs^Ex29 z!2Y;f@dg$HI#T8PmnXy`!cEiu(;+V|lvs#v!GYc6Jd-yet6`iQWH}W-hr0Eh z!lDmOf&l+9@SpRwUk8Fe)+mrRLh2Mhwq6?g^PbIo^R~gTNhr#9Gff%~E$oL#j;U#j z+UUd0n-y3oqtj>4@<|)LaR8sp{1Im1@2~yxuk$K5Ol81-u0tRU7xgyuPNmlx;uD68 z&uc9A_ot*5bq}kJzKM-tW}y=-7N%PTyAD7&sjZ624ajH=Y1iJo$|r*HlUI#4@M5KhKOfM2{BGgnxxtRdCZtQ~F1(}uBqP}@bn@G{np;YW98;koMrv|~EULyn?xu*B8g`u{*(aJ!fh5(!{gOS(502U>{|1ZyVgXA+J?Fc@K-0 z9ph{NzH>)?$eJ~$YQj!>_uDvs2gA6MUG*kKcfg^jjperIGLSt%a=MCmS-e!6_TfvhD z%|cvKW~SKtEe`l7F|4jmsj~7K-jS{3^IEwMNQXA?d6-s8 zEA(>`!+?G17h#7soIgk*aFVlt>n*V%u7)8@&d53L28h&h_+suVu8k}_uuTa)$=*ZU z%612f+1`w>xK*~qlZH#+`~9fgZKRc|)Zd6!IaY0+GH-o8m!`(;*|n z5~@|5aovFlW0Io6XaGK<--SvJ@%Eu@srUp!&C>Nx>%*Jz$|Up|?g0skid{Hj$JefSyX9;jb94%p4cM(@A^usX~RcQ_{F z3(%0tZ?-u8%aJeN`jGe%%pt-p*-z;qyw#7>)9@SiG*aE@K!f?Xp7vbAlg2B%^U-bI zoWw6A*=Z0+MI2@xO?n-HrjYR(VoO2PPt2cMTP(N1>k(UVac_Z>FfO*A6~Ef*iE9mg zGK1%SjXqYOw5;U==7h9V&yCD)2_)RQ4__?ELI=-STXR|r1;rc0e@!ql3-Q}j)TiP0 z1g|aAs?O}3vN4Jm8v8sgndKR8vP7cp-?OZ?Ym+we+`mWs?4+bI`p{G6DrK49PzR7u zw0Nu>;2Ig)vg@*Dn8@YD%C@P|Asnma!sJen6?674BeNbqUD~VGz z2(1<}L<5btxdCu=*d>q-;}>7M+FyRO)($%Q@q~-|l#^sxhsTs5;L zbpDmkW!|XJ_|5)1ATXJ=*ughB*IcEs!-HQX<}(NGiIn4x`IMSngY$XH$l>-9RJ9s$ z^hUKicKp*Dok&a0o5>D@J?ga>%cupT*V_cqQuYX)qRa^GnCsbN`90->7`#ad9vnQB zezjs@wIghlVi%um+-$|HDG3er$5&AZrR0k8pOeT7*36@D+5_~6ULbSaj<9ovoJ$&_ zt}(?h0{2Frp($MLeIUle#Bd1~1--#jN$E4Z%Bt#9L8y6yl^42rX|vFc%b=J#&UEuC z6CPL1vg3DCnGOe(P9JK3a`TU8@+|8~20g>A^C*QVabmC^=btQfw6ODhlo+GrCd|=h zc)Ox-cZ$-&Xo5FrVvHyQ0oS6{T!CC6#o_9#E!&EcU1zjjjxOjNVjVub5vD`BMB?P} zB6>Hv1FLOOSY?rvdjeKhwfGJtW>T_lRA*g)IFw||`5wqs0snuTMt6Dk5h;l(-2xI+5 z(STz~Z{KiH!@C~8fYljFIoW7~YDjN>7$ZDvj*Sl9@Q3&edj~@yn?(<_8J&4yAcr{5 z?WBlFpcNeC$z`+U6XM10Zd|F^14N8vW{+5MZWsk@@~m&)%;k?79mDg2*M(r{kj z4PZUlB&FfJrpbqv^8LIeNobo7;-1~( z#~s-q0R{m=bvvWcF9A#I(tg6AQx9Bm2(8rH$7MFtI#vB&pgH?)-v%+l)A{OXv0KM= z!L|&Gwz+ZCRi0?D8|=@cafc_0KQB5IoR&N>>DFAsU*)Vzt<{t<9d$M~ zE*kJanhDbRKZ%L7`&sm6tfrfplVl7ue7BRY#dJO=Qo5PKoca^rs;;>P9yXROJ#>xR zPb5YZreAZ7%xmqE_pd=8q<@X6`XCJEeaf!Va9E(#o&L1a^eWxb96KU7^wf7CRH8o^Ts~+p+y)Sv9lYM7}CjcSB<^Cj7i;4gVXTz{Z*3J<-Mt ztav|8rIrrsYXvyfdS9IUfV#8>zl~7-c<&JRgsZ6k4&xxBvNqeoWrp`|^CWlczBQu)-F^fwN>d?v?>2a;45Ca7oH2H%lg~ zc(3LnGmlA~BT99}Gk&Y)wXLSVn$f;HCkUqjZM1`(yO6SC$XLkJtv z*&}dGDO;D<{?6-I2gyoRuA?_+Yhotx2gFvpg=GIEevdvSPYL)NGBDR)M`P@&0|?#t z^j~a34-=Qx)?PyVoai1%0|d6YullE-ROjq;nW>pd{qizZ9nZXxS|I9GR)KUyzZUFZ zkeY_cHT>M?q;zJu%hhnZ&|B62ELa=n%86fyFwl^hz3Tr{dGU49q{u&1J;A9!N?Z&b z9}{l})3?<)Iw5?qanpB2I|YAZqgjpT_@_@xzftI|I3=@M zi~$Qn`hRvM{$CMLg=`MX*$~)rQ11ISa9@!P2P0w?=Kvazmz$j10CJLIaEs&yZl>&z zVq$jHTKoF8QAP$N}?#5&Zkg# zl3V1IE2scWr;*`cccgM$YEXEuRI$!fAXU>mLP>RKM`tf94d@l0xfIP5ST@{OpcTtW zp=X7rp7hkL(ofH75R%kN5V_tZ9;MXRUzGT_5gk`arR*xq@_v3_%-K#l^HlqwCHMD) zb^JYHVS7k26ObL!4k9aCHp=EbvS`dSHa9*N5qpZc`&EEhUCAB%m~bUcuJA4cx>Y@UU)<=j;jc-{{~0B%h(V>h?>K7phdQKXL*9E#=~drKj4h1$z?0 zpSpK|ufWDT@V&a0ugJDnFVKMt&js7mq2HWnOQ%wl#J&8Hk@(Jk^4IdE!g(%I!Xa+* zabDQNzC>Df?_tJ(8UU=`*tSn03^~~LE9MJEP~6h`?dPROf*-wnIIGdGi|`4|XWYp- z<9gX^(I+o+7V-C`ZP~H~a1L%6J>Os_U`I}AoW5tsStCgO@~hN((LtJ%hR^^4f%$5> zBD4U`gM@1M9j`5vdP3ikdjsC}va+}5HsF)=B^`t`2|~T~Y1zP7fNI&q)b?K+N11A> z)RTCe8-D>$LGzvLzO)t0gPStLun~b6Dsxb0cxVP4X2~g->*=7Jrzkq zXojQwoF1Ajf;g9fYYNB^B`HstFAcG(2C1))w1xF}tvBkp#);>URdWMCITuRQ6hv?{7b23grjqoV@sgO;`t#9P zN-o*2J}=t-Mu;&E9TJR88;#FJI|XGOi*y%q4htd-IgCh%}nh5hSVHy`{y%{jR??O#6S@Asg z^VG@kht97Zo#DeYeI@3t3ZaKn`C6gxhk;rO5zm_L)NgHlLww<)9{KW*o?8 zCra9H!CtlsvGzufiIk#0($}Kigi?E{bSJ;7WKha;??D{T-fFOSE&~nD@}^-!^jX&y zeR1)AXk;BXE`EqL0zHwQDa&?D1dsZ}>r*chC`dNk4;-L>?jS%Wc;q7cuG{L5=Ig4e;damN5tbM#}e^M6XP={o>@tG z_MPJ2Joh!QfGNcRKd0o0^CfM!W0o{*Xs z(RKVdY;7h4iun~~R!MHT=P8qN?VoIJID)!WOm+NSvm4bhyw!yM%VmX(^YVIh^ig0~?JXBT+Qz(0fiwlYfVyYANpo6Du6#9TT3WZ`N z8PZKaS(wvG$_Hgc_Kqj(@Lc#Vw^BJR#iTrP6;f4&1BI621jxeeNo%g2f7QDkz)S?XL;9+xlo%gpP9o%HIlx(Ow$U;{`hoOoq zrW35Ep+?yyWFaRbW=N^WYSwo`iQ;gbNLWCtT1h@j9>q0BAeHawft3bET>qA|&fpp^^iDIL@wuZXvP^obIN*oIv2get?*mwqDLxlL ze(dk!w%GZ!+$&uZJTM>;9#8D~c;fNx2zKKdKB1j?W1kqw-@HzLV`5)5)6TB87B|_u z(mmho0D*yf(Ph3Bd?xGFOHa^3tkIH@sbrw&gRqqb5YvMQHRYhc|1N+cT1@6E-f(YZ zc>0@UGYH$kzbx<^U}|E<{6cmD4BL|3S=RvWzFDgYtN?H}gZ;*<>~N|-V{SIuMj-QP z3FK^0Asi&t%7GZi#A@1WjWMSH0@|Lra~BAT)E$}5E-IU+1R zY)?q@6XtV=8fhVJLELXPYs1aMuyLuqA!78@RcNjo*_(2ZrYAh47eKAh75e?m2OLNc zsWK-=!?R*fUd%fVNCu-Rt)3o1K^8A=PwR#AammZ)$9>sWMaOR~b@T?3%N@sj-JdxS z5o^lz4CF@YQdpA=1(&c;Y30nGpJ#)-!G+h5!>{&OT|Ja>wOT8M^TymCqqMd zZK%CYTF<==;ooq7UGhc7Pe#-gI3SBCk6(!7?C@HW^1B+}o-= zAF42L^mh?E0eq)!qjuFF|G=5*;&7MJx(d#{h3q~iiPf@4Jgmk~X##trr6HKs#Ey@r z94p9+XXoxftS|1I8c3HNqOH=6b?ri9%IOG#M9Z9P?i|oszXxLQ;X6ZON4Y&`PT`*V z-ysW^p`GW z*1z!LGT~vJ1DdpIHBU|`@F};5BajNY=j)E}fcYxrm5YVph(tbH?>o4FC#fW-EB_#- z$5>RIK`}QBU!o3{R}-4@2a0D&Y}7 z1p}?!LWDF~pX7xeaxSl%3%9!EHP>A|JUl|@ajSSlK4lb(PMxzWx*h2eDLV4%Oo& z_87kRL`pStSTuiyK*p18MHb$_KiGGTc_%|CVapPb|8u;dP^>LArL8H0C@XXbx z(Z8lce}g|#6_(>pEaJ!D8Q8DwYx#^CLaJ^&7o2WsZ(IoVlyXyHp{V~i*OtjU#rIU+ zd>t<7-+X8TRJOE!ySa#qI5edsH|B)Xo=tQ=Z-5E)FnsRJLVMToq{tlwAY>aR62bmm zNq=*1WO5_S2z%n=r#~=UsHZ-DedQH&SYR%vGWS6gTKd%;j6D)g4duNlOTwoqx_5W3 zyLE22lIG+!T+DIf=CSfzq7OPoB7z+A*nL$O(_)znf03|;Kfw#S^?CY1r15sELp|IO zF{7sVHt>4xJs>AHMtO3Ad!qw6x1#I z(DrP_lElOO>lTZy7w@JVAZN`yY1Szh3}-{;e%Ixc*X-`x@03Q=oCW`WZdg3Y=5i6g zt9ODTo&)plYl}AHb@~y0EQV#wfe6-XjZ!M>xWUH)by!GqO343VRu2`#mmxGdLao$u zn*EU6JM1c@4MOulD)h5`+dpe%A@33QzWRbI3jxd;Rh3&e%vL`OUh!t1d0tOV@D)-z zIHz>fHNL_BVsZ*(cZMG<`57i&wpL>bU><@i>Ky7Uqv(jhSX9D@2H9$F=0&H!O4p!6 zTcm%xA$E+FsooZ1lv@WSft=ihP_?(s^hdf4XG{12@Sz`ec=;}C z${XF3QsKy9Lm#a4vQ_BMGRY}(|J@v0e$DM4Tp_H2s_BURLSm<2 zIzCG=kq}P1SW(x@9y#pLk>wGzTIUxb#EjhmMUKI=-QM1Ro`u79v^ZheI?cMbyvY_as(WnUCe*G?xMc?2y%}P}h#+XxT&hi-hs;q@>S2tJE7y zxesSOa{5@@5gfI7opUP~Zc5rpQYscNZA*qLOPZyUtr3=I6)dn>`TQ za>9c+QIK~O>L-`|oYtAEgauc$FZnhb89^vgp|qML>!K(9)j^~wC1R2L4{Kr&?s1WD zTMX9G0|zinhz$36anv>w&%Y|F6$BkInf}N*$o$x()5L=RYsw;tnNqLiyTw1Wkq|ri z!px&*W%ZN|cP@;`W~BB{g*E6(t?l6&>oE9{#WT! zSMlcRO(Trvold{9=1jsjad4>pf%#Mv8>VzW5v_!w>q;;U!X%nDG4O` z)KxnFrt!nv7NzsL|6y zFyl9X!Q&|%XSF886|Z*aW=w(AZoNWQ?C51A-Rba zPe)Wg_Ixu}jsDX7r@JH3U9WdGV=6ua;RhK>Mhl-!xd$Z;OsoCb7(#!~CD`--~rAhmLlg+hNjl2=VbbDbncGfT791 zN|NjN5@F2XU!_L`MBMNbC`jgF~ zG0;9RE(lyH93mm%bpLITGf5srF=Ih)bK^R}X!^c^nDVFGY>A#>&GC(>3j3BDs;iGq zOnR@q#0aQmXh$5CR#xa^QY~ReKF*BD;&l31on;y)XY$#jhPgg zPX3erlo@b}e&!DBbuCvr*PTc_0tEol%xAvx16zEe&rn6_0ow`I`7?9EgC&!%!! zXy{Su_J#aQV{5Bk>l8}&q zb|a?IU+s&k_NyigAI3r19*=1sS+ zkEk(cWnaiSD|n_SJDtmF_*&y(h}!;&Q0*4{ec=0=gET@kGCc*K?%YXJ4KMUkQrbfn zBQ&3r_mL7>Z?%++Nq=Xzs##=z*O_Cs?`y8PI%_d(6#=-8dqOZxh9f5zVqa&~Jax6X zyzsmGrCm&gEJhyOagABxZNZo_=$+6FSG4y7kE|gj75Lsd+}jVmH%?qh99U7THdU_5xgy9Q}G)WPgCAH7J}kj zsxVuYa|C`WR;yZyS8a^)f*y({r%m8W)hZ>+C#2)2Ea~X1tjm>iqdMf9M#o^pg(QEN z527oo)x2%{9&T%z-d-VatkH0%6QYj+RBQ3jVc;cWp2c4y^Lj-Qv>=U8S}*cOtBhK$ zHRq!;1fkN`LTt`GG%(N~m*8|W*-To*MZv7#CydQqx zNtIivg{W-SYAt{HqNh+cDy7sP_@!PkL#3j$NOUES{_>{M;u~SZX|Xi;vAH;9w&GKJ zUTBVTODl&Pg3eBl_Mzsl5wA0})Qp^cIURJr-CdK~N@8QkcEh#NWE*@*9^JaY}utO8qO5Z#JlPtzD6BwyWh7~jBa`^R(eH6Sd=CT)db0TJ=3 z?-|1M@gcvEW0(6)h3PYXKca-1jG>HF`NTH=GHKC-znq%J}pCCGEIC(P;exC}Q>+g_VrIpL|-9FHT^2e|3qAb3b!0yA0~y*L=Y)AF6; zuZZ76tAzxtgo)Lh+{=hN|H-pE>aFG8d?Ar!4%E~FNf{ejqoBWjAk@cfH#+E_Rss?$8sa7TXrHq6a?LnDNnyzBT-%XO5fZ zmXC5vn}ym+!y1nFQ>E0k=O^0KY@=pHhdw+zec$Uhm%aHXx9@#1bA6Yf#zw7vqw*HC z1i3U5CWO=IP@v?genZ$%@o{8U<5@vsPKG=+#|tfU4peW1W%Yt0=e%QL0<$4;V9tlC zzHn@`s>xw1+}|5-)CkLV@pUaW85^TVY1G7h>~}?w1)hi>Y*B+iqz*KKXvoxz;Y2-L zUFC8kzDsb1`E`RS`9|uPL-Df+W#;&omcA#h8A?rHJwU)FCQ7|{ zxRn0$m559`Sj;;Oa)KvWK0M&a=Y>|7$5TC}rh$8}!DSD(0cO+1g6vJur9cL$Q+vVS zIuoqXu=9J2GJ@5aX=RNjFR9XI3FVprhi{!O;1tWh3$ChR&V;jss%cYzN-HG zdBCX?4QjH(yZk$Q*0*6)eXYD)DL$#Et|oO1N~^tph#!zOkdLklrX_W`6^11#4itv5 zf{5fJ$g$ya!|teINrsQ5f0sy^6Q1Shf_x<6(`}}d`Z0c0*rwfA8qd&<%SAKA=?S!2 zy8Y4#krg_F&t7rFHzD5{AGM}|y@5&S%u^@Q&(NH7N?|&j(|dPnEnAAZnU+W0ip!j zM~leXA~CJ#xG50J#a6)`NBJqv9x~E!Tac56ICL1SkgMu~P9^cw^__u1k7>LSER@H7 zG7oN?Vy)0+sBayrZGU~`0!;31iYI5YY6WMRs{-fg0*ZPBmKE8F>4$7kH7+DeAc$kc zq(0S5dPIGFT^Y`FU=B!E@(QA$t~!0dya7tBo5p9L`*10+O6-bL3Ls$n_*_k>BN)V* zu1+l%LrHN{=Y)_QR!Lc~IkKELSVeh}@|Bq#c`Y@TWOXK3t>gbyx!jg#-c7lkEV=}y z9D1SV*X9=@C~_c`5R9mzTqZ3IY&2ejRIzxQcA?a=uOu?*J! zn*!lB4Er`^Ct7mgRAqL}GrpRU{Yt7kie?N`sTzG+oWHjNST7dbtv}!D8G2KLwQxT& zdr+mK>}+`jsT8ug61vNRvT{;Si#|DT`EuDK>b4l6a5av24vM*RVDLlD&R%k*!XI9{ zpuzbvUz?z&CKtl+yU5ENYP&I7@o@U4g7|%ilya|`J^WT$+oZm0wu}dpCiX}uJtg{l zup&7*uTuYQiUO4qOgo-bqGLwp@|bq

PbflWX^ZIy(a9QV%l%ITVw;{5yOfL?52} z{mnD~n--5R*TAQIetk9=y4FiF(t$#yQ(rr~1N$!gB4s6P=fDGr@wwPhnFptyH zRA^t(1II=P+*T4t1X`)YoDLHCqScr3rQk^o8k7#<{a^6$gvgAk_T$mgR5}HK9IV%~ z_s7`rGW)54_mE$C*9Jcr-59w*pXX{axm3OaXJKtqv+XC1VKnkV>`N*? zLtS5Y`m|rlx!_FUu625VXBov}=U-IT{5w11be|VhGjG9h>|#13)Rwm8Z^9Xf-w?ye z>V>GA`PoEO?%%*uSYS!jN_2+>+u$YzwSKOzSJz zgZa~rPS!j5V#8G2O{v`ja$MSN%^Bp3IYVfLF8%bgn@rhS$S7ztd9pCdPbr%x*oh)i z>TUfMtFsGnn6FO!8qZchQYP6`!A0^IGbCB&KO zi*f)SQ3zv30}t=BdHH5_ib8)9eyGP$Wo%T&OI8?yY%=YR5^IB0gy|^XFE2amO3xG5 zHgEr*EA(s7s*&gKnB_ZMFDz}yxm=pSoNYM=v}G$)r_FiYuMVRbCcCvkb{ZujY?t>E9Jqwp{qT%^u>syGP7|V8o7@M z8i4kc49hL^#T?Ls2h9`KoSZ)2y3f$gKoCltp_h0%$Ynu4M^Rd*@zzeT&_H8F+y>aY@xV?aAN&XA1Ym+lOv}+ z=KRza${H!RAx$@emoE#EUYzm|OqWB9|;coF)d8@c8ANfKF_Y;@` zJ&+sRr52Amm?otkgI1W@*5g|c@mNBXsd-3eyqK_!;GS-HR8Aa=s)|04gzF>F=6*nj zkmI5pX{+CZ9&1*<#AN?Bbbu~VVpXJ}IHd6StsG1LZIO+We-PA}!TNGV1l92o!ztGb z+tb)-4s-2G@cU_*I-(wLv|4fQmLc>ze}lU*|rpdJBYn=p!E3*0AKZSY#gj;uk`iuJfgszGQ)}AUgH1zck@RG>XczD zU?(P=9%Xa05&PMhg?VGaRvf-2>$zQs6$g*~<-u`~BHuq4FtKx8DD_v`vUr1E(EaQW zK6HS}+}Ob;P~jC6MaJYPJN_z76Xado3meVe>v}hMH5snsh4rIQg9e<13}<60^bZ|R z75)P&nN~jTVJvmyc_?vMnCTi#!>wenhh!7kPHrP!w%thm`=P#@f~^q%P-P+O5T4Ys z#i&}uk%%qDzc%hfl?Mg_M9uk#-12E_C9!xJ{iRGe+%qnSuO8igCrSZv&zQPl$3lwS zn3<-0uWy-QSN%aHz9!WvOU-my8ShD`te+3nd~4lJHF4(+(!#}bg;eb z3WzK}ifipM@z0QJU&Y1ZTZ#_z-$`S$>7d@q6yH!^K&n}L`0%z`ej@Gmjw?=osjN|T zppyJ=X}9Y>NR{0H)8%IAy{f(GAPbVW)e3?iLT!{JL$5lD_siuS&DNYiqgcD51D4~s zfqm~m2F!YO(w#8*MPx@N>?29Xt;Vw3U8D&`fV*J)Z_y&YS*gXNWnLT;7ODKdlxo@! zn)B6hJw519P;t4&@V}IIEe_NQV$(9st%9Y4&!Ec!4#ipJNBAyfWzHFJQX*GZ)@9bL z;S2j;#`lWY5q1{~t?gK0?T9@>+qDlWr)qAI?+QT2)TmCIFP(kD9ZSg;72?r|ePjEX zZUD!j`rcollWZM76q8s=V0n&}YPCQ~r6x_cb<{Z?rfNd!A}1Wb13nn``psDI5x%G> z8xmHdt``l8F`m1UuFwp;OM~d!fyqEHEc}Exk~>qVKc^hyZ~W^o!!{Yvkd;bf2r#a2 z4AU~UI+h@m!?p8D0RItC(Ee#$$8MCN_F2yE{67kE`_tGIJl9)!}n`RsTNRo6c} zOo9W)njf|PcJ+jGky*+?xNe<69|(ZV&ABML>Kt%FYbXl+Zg~GX=|$1w;R9m@0hRja z!P`j&Ph4YxgEe=KiV82E_3{O~C2%{oTDsDnA}6GJ?qZn+UPTT5we2d4SlA4SdvtE6 z2BFr94kYy=Vm&=2_3jDy!2feLn8!v+kbnDcrR8$(k)|)xr(;K`l?FgjmpRY~ph*r^ z+&2>jF9_~C6l)Bhl)cPF{_g0vjp(}Bd_O925x=9J+A;?^8@CBf!@C4q4&_#DNl>ek zqEj~+>tVP@EpnNH-M#JT49S7miFG2aMe&#lvlFdQZ7JXbxKrHmIEP)OMW{`RwALrC zj6^CT5;>QjftX$f!S1{~2UGm{VoH6D8Hiz+n7GDNt@)E3{|K?k+NZ=M`e)3=R#xXV zhSHj&T;#2S7_*(1_NU`w#Qz!%$&GynO$?yQQK%B4F8KcNmMu+Cx9WYgC59lLg+p%8 zU#!0nZ557HDh)m1m^e1}n?`UUmN`2w#Jdo-5Z@AC0Q#OLTHgM-Y7PHtcVg__9AKwR zrdRaBD!lD}{UFbM2mqSu*PTlej|g-)`po2CfC}LH{ixGwnrII0D~bx z%#8SgY3G>Ezsw(&>WRn0nz3LYc*%a>h5w2;@Ndb*O|*zLeAo7dLZ~s}Pm|L08^PXa zLXPkhZ!iY2zhlIvmqJ+4=6E|8$zd%!iDP=8MSojjqhOCzP#1=h$`(j`B6GJ1wSi^U z9KbIv8t(CC?IuP0=9PJKTxs77NQk3oe|sQF8hDjKiai;e_@l^t8%!!v!=f2J^RPWy zX3Np)$@xL$H~5yo!1a}S#@5Ww3cHoWINt#hB$B!DlYpg=c$&9<+{SlWMLfbMAZcuB z2ir%4k~ooqBOK&=ho0bLRj0*e>T|&dvf{yIGKS=MThfJ1Ibn!>ZGqo^i>`;iczkKz z@|rbhPS(_HX8A#;ol~#!zWVyc*?}A|loXt9Tq~#`v>;C=iT(!RqykV|w7ZDIz4X#` zf=uG1-KXVTxJlS|ndW+S~(W2%XY*uHfiC#>3vRgpGo$Z_0^Se1o(%a!`Itfh!X zE9`?q*{cBv8c3`jNII;fI>7aZRvO);*6~wjyKl=G#7-BSMUSWIcM1R2~O#ivje&XefMD9XK8v+rR1 zqc$cLf0Ql_2@1kIRW~SS4MdP){fbt{#cD~;qI%%I)xreB&bzs8vUhG1i8Igp|_1d zkcI<)LEJ4Z(-b5o)^M!a8*)kV`?6V$|05}JkXAQ^Up(DMk1FMkOJ6QV857`q@ zVK~3Yx$OIXTOiR|$kO&vuH^Z2Kn#4@XQa~jvi9r2Bd|KArmXpZ&ywyt1nt?qchrt? z-l+UkAh{%N9sh8#2@2f5pw-uD7!CL@tWn2^fkyaz0~z!>=0Fl#!+vqJ4KRA`D>ZPk%k}qC!6wUhVnMEt0$*?6Js)Au%M-1_s}mR`z+7 zlNL_=A;RF=kw%wUf!r)#Hk65+b%+C}QrJm9-f zg_5e=0Cf24 zBwpJd>NahRP~l??QlyxX;Ga>nn5B{D{wYHF`}xKC1w>!Ys|WYMeRDRr zxuwI2aWncU+S!S$)9CjmJ_a6XcF*pp$*R~rdrQ{{G)Ge&FHVU>o9G8GJXGfknwp%Q zul79)R(96yd6CoQ+AtGvoCT#2vHyJ-`?mC)pls7!;G%k?vJ8{(V!Ai_XEvxPBkopZ zI!$$@-sW2iB0_|OJ`%~Dzz8~Y0LH0(eq+fXl3S*Y^@Esn8B?a<7sdJ>Sp zfU8E*R2Vh&oKzEr@!%NUaO@_KO#)XfZvO__M+u$oR!mJeEiYo)qe71$w-WEQxs>nX zlb0l2P*4^cwvD0DujQo8OzQ5JUZ+WM(-izc1XPC%$MXpG*|OoP>PkyL%#>3jxi1oq z2qrT7%>y+zf{%Aks(*kD%W{=byqfr5ilnZPvK4OanvRYv*XDKnp9x*yvg^Box5eO+ z;>4o@qjvK6CRigZ=G8zJ`?WC_DLB7OwU$4bfMdTqo~IDv_7dLUtksxK&|9e;stPU4>LAd8EjrUO~q9yG!k#%dH}?FZRPx8ne5;4hOW zXfRdt29ErF#7pRL#45o+v(ndZPPlU!`gb2gwvsa7H$A~yd6F`yHHx=|Q3)QC zTMe%1r84%vNagTst0x(1?{{$y{eLQU=P3?lYq)HPXW>_&?O(}dWLWFM&LG)l^!o@S z4>FM#>mN@L2F2&{?uu;hzxXQj4sqOXUv*0HOLmGjU&JOvLF6X0tDYm) zAMH0UvIl9%6Yb2M>hCZ`p#Gse2i{;KvMlSJFe9f~p~rS^Ozu~YGVAt^O}{R+MTyV~ z$jn=Fklg2%c{Pdr5sO@&3irN?9n<%G!4F%HAn}kCbe+Ltcku9Bgf6{1^r>9`lqpZ` zEqtwlZpue*4iKh%W^u6*{~2*#gZj0Q#{Gv9Xz>F>w@yPo6wYZ_h5iY1TkID3f8kq? z{YZpe?JzjCka#`gTVj8%c=R z75qu#c|RKBpJ>C+95NkEis)w2d5=H-@1Y}np>UI&5f@IgBPS=_e&cyFoc!2U3r}Fb zaga<-es_XG%C2%j?2QLUj*$VIc@J*A0d=_Ile8uF4&R!Ru?Ha(C1tKgRgyxm!M?N zbmcqfN>*xvz0LjBsL@$xeyj3EjZb3BS+ZSxY5KpjnERi&8co;&41a^J_9`(#BFb9+ z)b7_7^&%A43S+0+!B?bHMv|sEWd|Zz++M^wfu_4NsWT5hVX86dn|#`ZC@i+B#w~X( zl3&t1qaN%V7u@QCp|fbM;1u>~bX(Cn{t*wIR!MBx+V%Es@d6#Ft^4*tLHP}EDqy0U zeA09ttIJ&l)*MVlJGxNUBT)Atxde!<+dsc5{GaMbumq3I8S1MGRtE-Z%X@aARaL{U zl|)Gj6>0cdqQ4n_GAK|hCu@Ui#|)_#l6MIPW;3*}^3Mr|gjj$Rg!iNR{hv#U3T@GN z=$f0eb*I26uI>FjdJ(!=di96kvd=<{5z+hZr9dv~fXw_tbdf&8=)%qQ7{mD~ z)n`N@HZ5ZPq-$j5j`M8RBP>)r&N&{CE6KdZWKf=qsWp&1w;EiBBIsiQNjio4l9VlbyZ0s$rdz=Z(l5%9ViOc_zTFPwDjCJMJYKgzio+`dDRb847PEs*O_S+O;1e{NV>2Z6t$JxIUh zRH2{D@wc+V$AD|)|EBagJci%KRsYf%_I>}e@Yy9&wML(kl1k0bJ}~SF&is)pq7Lvs z8?mgD?d#CE(FW}Tofmp4@RV-2|7eu9C0pj&^F+}4xB>Du-AwbeQuq}(zqhsh&>(;^ zC2AZHylk}0sP$!6uO-s9% zvr7OFyi9kU4L^39unez2Rs_e1VsW|N8V=RY+K@hP{vO%?qv+hjlDz*n{sBbgq-pDb z>%c>KcrbIcnL#JD!;)$%>IuaMaJWvA2;x(@Vwvm`@UcI7RQYHe{nqCH;<2~S0TiszEQYz zBQWk({A;CK;7Ghb5?JJpPyVe6t57BQLw-PO2Mn)R^f~Ha&U8Rm=*j{+;MR^|+OnH` zALM{Kui>WPFAjK}Jr>-1gEl&>8iObJ>DsrihPav{l6RuZ3j-Zf5ZhzfAWaC{)w34O zU~Srl$g<-S{yiGXcF80;%Uq%Cp}R6{lZLqwu)AOW^D--p9iQmznrf&+drxin{J1GJ z$aXxBE^RLYr2+K}yW3N)CDYK5nuXl9Di>bwHyi8Du5v$sweUEJK0JU%J05N?-eUTi4EkK|{&)a-6|Rv8Q9coC z=<4}PFr0mnSv|ahO)J#Hon|glJ6!nqN+(R4j`7;2+MdPB)P2OIw$qcWZHjCEcl6ry zg|E`!M&agf@kFt__dLTDasnqZ_`00&ulUk{Aqqlv|V%EZ5~u^VhN%@Pazm z|Em)xPF!h!%Gtd+zi-z4n`mKwTLl4o{kBvsZ~49H44_PmjNcT5G*e4qUblW5e_E$g zvhnD4KEC;4_Go<=U#q|pwe5#c>D#uYGA9X;>9(#tY1QuJ*)@Jkx3e=Rr$&(uAs3&A za9)tUOsk;elX8qfareMny~5q7l33t4?v9WuGBZ=>r-dT32|ID6vp>F90awrB8}GqJ zm{>Ev3RWW}8UBHrOjg_`Kz>;mhR%*PW&C?~HNWqFO8ve=0tIV|yg4W?fY!tcpMCS1 zzj7@6+|rQL)!<|7*rGq`w3`DdQ0BIZx|k5{=ecD zL{owsJ&dE2nNIrHm?e1aXxI{t;@D^9zOs|9pg1R(G;!IsFyGyw1bWd6ncFQ$m8uKv zkPc0yvY>u3*|a%=tGF0&G!`j}1~4&nx#?;RXM^0OoG$ML_?)5i{k? z^l8Vn{}Ln6^jdJ>l-%9NcVdzaA-z>0y?Lx9u3EIofn6dXETr!ADf2Q&tyEAUY+6%96tbFb>zhp*dfK(w67O36Ol_{z%Nj3Th0EgY8iBteSvsvHni2=Rf7AO(RxsTk4Kd1ku*#klVS zM^qwx0Y>nlHHq*N;J@ln*(3~^xiXFUVO--lkhM-{ks9&(z-@dlMz^>|d=aXLAXMUs zVd*un%qPo-UnB8gKU6XoC(~K%no!`^R5H+*p{61XJ2o;76Q^_uj3W;JHC-P^4zq$yPFPBbipXsaj2MBd{)unw4^0F?syhJBk)eEQY*kLRyCETG z&36mru80LG@n76)fCn6Hwv5GuF2)^CRrp1hhzju`pM3IdPL^dIZH~)%5<(Z(p1QUuqtc$ z`?q{Po{vY9Fb|6ra;<_z#&>}E!#4%JnK}5)`0ae%AG1wn=@00(Ox%@I2j}*d6$S(UD#&kXY!Pn*ys+&kHpLY@&%2m_529T_o~if%`>}Yg{w- zMN@$4mO$beF54~I#wRc@IXbOYfO&^Y-%Gg_k7;)nOxom*$Gmmq@7KB$JsBCj8&tRW zO(l1S*ylvzl%-L#k1-D*cpPB%iln29K@EXj-rSdnNp#@Er?v6WbE22vVFDZeF}*f^ z^J3^T!oFU+O)wTm0NTOC&F@=49(GWGy-(L;O=bc1E@&YX$3M6our}Jp`FeadWnjML zc7$kd>mQIA^6=rr7aS)vn=esQWiDrRm78D0#dkpN^H~nJhfv#?-v-xwI;V0kJM}ME zNkZtn9uDE1EuSkZYBYkk!KoZd*S&=$5vMgLN$&sa%+N&meYlb-4`3x%4NFxmW$%J`#p3Z^E$XG{k@Ezhl;XcQ|tOn#Zxkb!}2kW9;$0 zM>*R2<7|Bag>PNFG&CP4Xd5!~M?96qs9~DH5ximz__t>=cuq?GN%jrYMvx_9zs^1O z<;%AVuzIp=bv`?8F%Z&72XyunkiT2K%r@ynlZ)%!1bP6>kUhGH0nW zW5xAryHz*ij~njpUav~?Ps-Wf;~HL#U|t#}x&8ViS?-aA+}U}(789HE7^L2q{$i|V z$00ZfMy!1??~Zsbs`JJy|Ey>mD*N?i^nBH)2+?ElU$26?QW@jo@AZk0co`)V7p3`o zy%VG9Fm|hzv1*8hMwLfU?aUy{YuTnk>oF~n5KA`dX9 zuu}^G(*)8d8vLu>M>X+jaC{vuOYoLZV2E!|8ihs&nvY3Io=yq8e#)R?QD1B_X^Dj(QcZlID?WqmC-LqW-h)Htne6{;k+8qXsLBI)K(Mz8X_hf#XH6-;Bn6i_7X`*L> z7}@uJg%^{|c4p6E*gamCd;iJ}=?2Yvs<*vN{aNf-|R zbA0j=<|p8qE@x#%0#?H@Ph0t&5POj`Xjoxk(=Ue8FQjxv0?b3StmCinK(Xb)+T;&v zFqb`R?X(Y0V;;$-$Zu9!wwQU3)-^?rOz7^8y#E9DaOiG%@sf%WGri6y#$~i_cA+Cvil9#fML>tha!i-?hK5 zOSgmWB~_PJ$|OB8#^y!y6b^datj{ep>!>_?;kw#Mwu|Ah4;BZ{QNOY3vlo}sUOj9L zi`m={tQK?L#`h0ld|MFr^nX&~NkhR`7a_?G*hxrglZ5)$q6={q;dzzZW+L|OZL;8Mp&=p>TX&OYjC@>F}6nKRurNaEruq31nk|#;DDz2;GMc$X(E-`7~P3y-R25IDh z?sx9&_1m`&As^l7kI(mZCKz?eY?KBi^`UY>D~`kUUNFxS0jV2zX4CsHur< zP1kHjKFMq38sm8E6EjHL_!o|9o|3om4;Ri|8NiMc1{J1xieLFqX<+v3nKQpn%Xghb zlW{Ge{BA1bQVvwRe@Yze&CHB~z{as%=W!Q%c{6K12gVhA4)JMs*Kf^-cZN~e<=GeS zgOJg%v(OF)$Z0vB@1en}J7Vn0tQpRm0<5V)AFP)G26;n6ON@z@5Pn1vqp|r59o4g@ zF1>#Um3NKjKMVm~fK5nZrdIqlX(z+>!4>Efg14*KStLt3wh(-*LL{_;;Nu`vUB>Qk}Ja@^y;2I&JRM-NB0@!g4feOz1wq&B!{-4&;HS`8&q+a?&a^DFkkfsQ@v3_#Bxr zm+AFyunZ}0Oy_0hNn6{ub2ZifqkC;feOXO%Fh5PxL|x`QpRn*hU&4-V3Mn6dfaB{( zu6o<0$-qa(CA>f*uW~x)R<>}vekI%7yUKF#OEjkHwqSF3zpy2*>BRhA*v?VLH&=4i{+PBk6s(>z@$wsC-e* zx)KDgC32Pc^v$r%`Nh`PD-Q9^bVjxiE8!2AC$MdTP48olX!^+FzDabr zcSHoeUc5OGybGqTq_N3Yb)Lmr8y1`)os#9Qaf;GNCy`=VTWqvu_1Kj?{W!+Os72Nl$KuyGrc>x!me^82h{dQIFdQhUt092^51 zW4C5UO6+7JCwtRkf(Nk5s(Zr1v3%^Z;W`iw2!R5#BxdD&-e|rA z+q8BK;%g#Yl26yrB+*vIg%w`_onAk9!gvtzxSsA!wrxWqv35?rs~Aej_PNVAmZcge zyPE>*C{K}UELLlEw^btL;=7R99|cATL%2FDG=O$}62m#*`GXx-1TQ~oYH;r=5R-qL zk@F7}+`Qvkid_&1;lcXjC+}Oy?v)VUX@*s7$XYa9YMRS_sPH@nj?S^?GjC(&sV4V^NC^6yN~~{NEHP4yI)w8Tb#`hUOF!I z*H*qnuw24M5N%b^E{w?bk029=c&WbB|ElKp%-OI{20Xrg^i2?Kx~wlksM*e4nk!+g zZ{|!UkZ-zd?8pCUy%#jI*W!EkLp~cXBL5qTo|nG+$=Tsn0uJj94Hp|Y#Q5?B`F^yz zcT!_Rde<%(rv`PGj^zWp{T=;olH!~_S@VBBg%eL2s@dWu!!tH1{l2`2T1%xU*Rkr+=@^dFt8`1pp2Wpe2C zgNb(>${c7o0aq%B^lgf9VD{lP37MI_Df3cpa5NJWKiJ%6K7~S}X{L~@Z@q69&Oo)B z8xv0XAU;0GsK+pcbJ` zo3QPKv`j@CwG(>81qMS?X!O2(_Y`ohV5v(a#Ii?QVbgg6br{+zUE&m0KtqepT`rQ3 zk%6$eUNlq6n6v!Z>jDr2Jd~hML&l(4YtFL1s2_2=@6qypeKft=y+N+h$FY{LMJCz{ zWPy?8A`m|=^WBr6M^c~A-q$?g^mr}c?<})G^KVe^2_KFnZ^Yb@juXtgw=)i_L(#f= z3dJIQS@=K9C-uJixe~(^;1~5lL4Jz`yi}v2IL+XRJ zE{tLv&gzf~4L1AktU+b9wP2zmD^Z*vic8q7?n~_N|MSOm>1uvnrZSBIwSl@i3S}_8 zFWxpWia%GbM(ZJ>mq`Ij5*57#1sPcpBFtJqUYF%B!Ymw+k#&%7mp|<4P@WSMWZ%8d zRJr3Vj*Ilc^y|}4RE_lx!aYPk=7{Z377IYBVe~v)03vKQMY?PVu!?)CfrL;5pT4Od z29-fI+o%~tZ zqN1bF$drB{&*{@!)BS1LD`<7f+ticUP&isvBHcyvI9dSIJp@CPn*H-twS2;CfxF=$ zz7fJC4Wy>{)STm2o-4QV?dfs1xUG>O z)NWjgLZ3H6$a}x9b{|6Xs7+9jI)`TI9M}x#3wk(s6 z`S=Dh)1mlVKcQxQHUQnRyW~+Nf86WiPq1nv#PB(YCK!qN0KybuZBh;~oVWnG4js1P zr_&31GxHz=d4Vjdv0l*pbkfKJiB#q~iyE4!gbf~+Z|7(i5_9ku>>o8c<3Df#pD}(){x2~W-t|J8NJPv`vT8)6ZhLYr9L;6j zZ7Hx5>@EH5Bh5OJQ!ymr+WB_1H|X&bagpqZ99gmozrsFO=Q__!1W3c@W1pL%Hnnn| zilnxmMUG{tN8SDtU!K`Fve`fl>Myi^S$S_zXs>C3*pzz^3_y?7FiB2N?Q2ai$$iA@ zg>4U{F~Z^11O<6c+AArc6OWGTn6u#v`M;6l-I{S9PgC2P4rM6JI|RI@i_UTu2nR&a z`EELW`phZ#IN7eVJB;rVT{9q+`kfO`qh{v=>oGy~X{5@SXZof*%eEb-yZ0CQ(-#S^tN!Fw7o^BO&SS=B-X#_i!P zY{7j4hwq4=FZr_9=AN6N-O|c2x}V9v+5bi0&09*$e?Q*qKOkjkRYziN;R%lu?tfef z6VKDW%kvmu8HkiY>Bn3nPX&Ef_h5;zGRh-M8aO1lF};9ieR{Gz3|-13(I0hg=R+}D zmhYYT zC4XD}o>i^Imy-m|(-(28iub6Jr(ETBaeWrSxI-kg}fMsF+xs2K(IWeio zA}ttHjPA}V6`O(L(t1^yI2L%p;Vfp_yxOh#hqFqgpvC1{pVc0J^=kUn_3E4PZ&EfT zqvBBhDx+iIMSbDA ztf#sp{C?p%L08wqu6fW%c7JV0Swq=};==6g(hBuK{#Bi0*>KrhG}=Re!-cEROdS?S zOE@!$cyV_qQA9<|0|a(UKt*83p4&*J984Khy5s*Ok?I&}JEe-I7rhY3HwJ)0f*}#qDeM3+Q)-?-UzTrXrh~f zMm;El@PNdpjUIdg;J4$O0_mkCQkv+|SdC(**k82%r$#JYdQ))WkDhOss#?LoW98nR z(rxIqYa-EL`a%BX%cm&c-aCk7d3zp0TMvqb*;8!85JIsf$#wFc?*h7{J8!bVPbfb# z4g0^NZhnd;)$v);IrLg*X#Hj$V6t;=UwbGqu3~%0|EOio^CC)SuOhF#9UaG>UV9jP zeI<5ROAY*yeXXBTh_t>>0R?JDq@6`mAhX^-R*%d$0{o{;kt}zeLu35*JBZG9G)d|y z{V1gf-8P<|`0vd?omwelZUvl!NQMp{Np3GfWOPRVGFQ0JL*0VG#Iq1fQb>2H+WDi= zRWkdq8}@KDHpyL>Q6{2tH3=kH_I}9eL`iUYXoICZW(%FHflMxpu#AK0w0QRN@Jb$j zX^!g$>qJA)HR^+M89k4A3T!-D1oS(wYWFT7C?I;4-7ifrPYjHV95taeoJaO8rmbw^ z*w}Z%<}l%7$shUb=AXq@+NCz5=`lL;#pvk{aWPW3p{6&a!OfQ{j`V(OLfE~JpF}Ng z?&B{KULJomCBGM7R-;-Bx{h;x?+SXJ)kG>}Tj zmO3L6%#zLtWxiV2#yX0mgZr zx%qP@6kUG!G8kB%M8XJy7zd%_oG!1|#}YXUG&X{7xSIEo@5=4aXl5}0P z_G8EDm6OIF*S8&qtZl8f;$vpoUmQ&FiS`^k0|bV*Im+O*`*GPtZ!LeBD>W`SE*Y7< z&}=@{#jOgaTQsK?XKSWTWy!t@x=y(oHxNGz@nPyAkGx}n|cx{5-Q>|oR;Cz$u*NnoJ%c_q4$_{%;6l=_|lJ$JZ&e2 z-!zFtqB}Nx8h6Hf+$HNt+78cYIQ@7qomU$h$x?W9^-_pKDiaBbt$nzT#9kcmf(CZu&KU^%rO*LQaJ^S!+CI z+Aj_hzg4@TTR4WDpiUR9dz+ zxkkM4;2ox)PonhhFxGFuqhY<{=)+f#ND!~{ypBkOp|_#NMtY+7R=lNbPx?Gngm_Q3 zwxbMgISSqAXga*`T(Mud0GXOT#@Vy0nQ6B|PK~|{$T-NCetIpz30W{i7PxP9!jv~!#}DOOkx}fz6>fL`SkToq0L@5i=euQCQgeMf|7nFs zvOZ-Mvfw3=H%UWfr|*CDYH!h2q=MDtnQClDm0Kim8+nF0A_pbx2H09(1W4MY&d?ye zu4Jgi_IQ$9yH^3t#^0{U^Un(?FGd_QWtm;~-24KZh)J=@sZ(NuNI@$DshWR(V21kt zghr7EF)v($j^IbZqRM-T!p>!w=3@O*{su_JFNMh5kp{C(?sD@TSg7Z7qZ2B}7U>ZD4$}Sc9x8PM zvaG-?XHj1=SsXyi6h_qWa_7gJ@OKbRYEaxxurR_V%O9rmz{Ewn#`a6v zONB(2YEgC)VT@LGM8>R^0|9LH&*ZGwzF{YUIBGs+4NHR;?Z zjUc|a8a{O<$U0XS8U8~?F?3T5yh;EcPNaO-H%6fbEP@rsGeD$~q==dcl1%vOUq!cJkt~%P zcpvnWxAV*JV2~V?`mf*Y`_IKBvc+=Ji0_sKp6s42-r z;@EifzWViWKJ9;`3tH6woOp*-ITQK@4T)^cUZ!{tAED_>>CW#f8`KJ2sYgQsjMI|7 z-k0k2Djp`&FDTDYjd-!sdyi(Qh(?V565Zc(r85?)Nq=@qf4dk_}1pm2NmiFQE@Sq zTCW~Vf7tU)2n4skjg0m-s3Wt+PMmm8(;AfUu*-`72pDrn2M&}-&4SF{z5!HJE2wVy z{@XyVpF20#D-3oja{c zV45O*dw4pLW`on0~zbJIV9DC>dU^I*oLO{lBh4Uanqnx(Low-JyCUAab zpto4jb!dL;q_#4h4E#qyG&d_^#)HR?kQDbnQsu|5&w}P1Zqwp=8pB```V2GjAyr0dF8 zzcRNn#H+Rr^{2!Are-u}R0L;_>{qfkk!V5y*DS}oGK52HjskLtMJ%q~>%oS_EM5U7 z!N$rzK~mn@7yody7VR#az!{qDqV9|4y{fb{#2I#Y_%MVA1?I>8SdnHzN2yZvx)eVl z_P{0mLR5_6TRzu?30EVm=>EastaE6^Q-^bJ5zM)|x^TY6Z-F5k&TmESTpZGMvA@-) z{KKOOq7lMvcI_f278!m*T?JZfciL8DV#E<3F>OVr$nFkV)8?{$T;1MQ)8pwnDEJx5 zSFodFU24bC2%%)Nq;kK}cY)0j<4iW1P&_FqyHwOJsGc^G(bZ%^G0(-=qeW@#U%njI z1jhx#H_w)5jce|sc_nTx3KNdJ6PvMV zUzl+52O7t5W1j$bhBn6HlR=gvc7EA@gTJV)ZeaAks&AUfWb?5cqo2?~_=7j~iNYaSr`^@Ikr!Jdv4czK^Cyhz+Pb>ud(5GuaewPJ9}A_QBc!(dsWFU7jZciq?Rx zDRGo>&`ratft~QOsL6p;9=VZ8QhZG(d-DBZ;$m{H(O*TIP`rCC*Wi|QFND;VW#M!x zY-X9cjjg|`uRL;ewa8L$pSG@OD>_PGPA2SQTkev`%;Gu7_=HmyE?kL-r-eKZmQP$g zOuDr;NWT=!8qSr5i;J#Jzqs_&m1I-9K+%bhOob4l!w21pgOCGP{r8hYhXiLP(HjZp zHvZ8fuJO%f_SF+ecT5y>wr`Sg{-d%m8t*dB3&cu(Z-d7FBz()w_-*_Ki_ArF*h%6I9gO!R~IFqpoSL~sbgU}M8qmOe;x8lTW*HJ9g4IHoWcv;T~v$X=M3t4ND`_7LxN(W>TQm#g5a z{=SSp5J+k#D-rI5N7`hDekm3=;Df5)_5r7&Zb zxm|G#%<}z{^=TO434E^n?;rV+@2<;87Qh8$@dImtrx8dN{Dtl%EI<+b+`Ll;Fxu{0 zl>meXccqtV_Wn4HB1?a(D@PdKm=?Bt3C-0(@8d+k?-zts_X>Aq{g(BrB@zlc58#z=vQ>IZKq65XJK+ef>`mR_4>j1Ci$N(0 z;a4wT{_=}eTFVzF0Fj7A(gvMtPZu#6|G8Csh~NKDR@UNXQG%Bi z6^b|fCk^_m@P_ZI!IFjzc2aX@3Vcw@nxi+hfsZRmq|3$^VlI9I%$j}wyhwL-U_jiK z;Lkd6;Lly^Tk)DLm@W}&a&;Yh9GC0i-7qGU)nZ68a4yt#YU0U9h=Hn;ZF`~250WZX z5i@{ye^TYqh*@A!MM&50}Wt|wBSSl}I}+E~2|YMCO7**sCoq>)~~{^BDpzKT|N=5%kmm?nC7 zspT?!fH4x>!*}+ii~L1u^;>HxtWf;!%ZDedPy{V3?AK{0`bc00YrjA2&s$KFx?w=@ zGy6f;gH9IrJi-C>CG&Yhh^5UTV{z}Ym$dd~N{qh3Xi2tW7X&b0s_?=pNVlLzfwB0S zb`-xDtNTm_9aU%B0i_rn6mKwpNxLI9@pI(Mr!BU%^Bts!bM*fdkr7$M_w1T^fP(GE zC99AR6C%Pa(gCRt`_Z5!qJq18Sg`E8#vf2551hH-!mWtezcis95)TO?y8Z>P~9>@CfN{^xfk8?_P#gcN=P@yth5&(NCAp2okk{1*IC zJeEy|kn&WX?PY-GDgT?)LGL|g6qq}DS^Ks^)sFr?IH7FF`cOC`*?)Il%1`_$M?S_j zYM#M(;orIIRlW8Hqv{yXNteRvw+$^RMqNaGe%xQ=64MNiR)QJwZ%(}zOK zh~v-Y&2xnodv?W)=0S0UOJ>M3o_w+Ztyb^9LRlj$#8oNphLKjjAuW5b*A zIe-#4-JL2fZytS9i_Nrcnk)R4H3=ASU+@9yDQ6GlI%g*Obr0HFnzZcq?#WGEL0KD@j<`(?u-8QEJ6GmBokZ#1TW-$L&tJT_kf zgXbq7GjZB+!jP=ZX=G9;IfkBkt5!!I1H5W~f^KdFaZ{?v`clkBraSV%u+=BH&2P*| zwju}i;y&(na-bL7y**2X356*{cVm(*fRBIDnJ zP>JDuF3}=2b{gpVn&^|pFo<`k!N=;ii*jJZC)u=J1iTo`c0Cn@I~@*m|jg54-f>SC*X#1(Ql2 zSq@J%e2Pq|b~qO7n~UtiCE4frE0OoFct=(uZoc>%4yPR|?^E*!tbw)s>(iqyzAy(D ztwNVWp4#uGoBS_eI_X6r2UIPeAF!I=pysyPwM0R3$t7kK(nT;rsbi)^6{91>=n3Oa z5m$rLwxQQKml5>J72|U;cLqisxqBhS+HpUT+u8*Jdgl-PSOzo81FwFS`$H+Iwm5CC zUqUGVkI+#2Bhxm%^fE0+Cj?fH4dh9*B0GM;w$_4CNhh@cXfAl0Ev!Ad%J=X;jo^Qu zsyW(4Ru<_}z7H|cMW$H1k?PCFkhsnC`oc(6T@=s%ZXsQjgTD{_>dVU25VtrnRJKcP znNUdX7Vc8-&}C!wICKR>wR!K#$a}BCiBN#@iYAk@c9fSlHnRblfTO<*6 zXEx~J#A?d?>ph@XsphHXY`_Q#`LK$-2D1aukhLO-yFB4uRvLU_Mn@Ns;xIzrcdwAV z#v`c#(HE}AMMI~@uNMl}^bR&*ud*npZY;C#u)0q`Dv{s3zSyX0W4ppM2$6yJUp zZ(?yK3O7CqgTYXV`UU%UXRH?`Y(q7g{QRG#+xY5Do3j3>zsZk{jc&{}Osk0QmqUuuaPANu4X>&hm&BU>JhpWd?5oZESCm(SS;6e zYH(j8i5FCJfV!ySyx7Or*SCsh<{?u*9x0M7A@Zv&n5M#SnxRI~(~?^u5{Jwv2fh|* zt)TekQ&Wc89pC@v?Pvx(WN!Lw=N@jW9FX7q^LH*ZBO(dPy?YPwebCZUYf3P8aIc(| z`ypGe1ipW^HICfigt2=hL`@iSgX6C!_pDbJO-~}g?23D3JEeOwU;P;cFO%-(&enBm zi&QxPT5jU|)3LD|+6O)XT1*d)s$osSR+_6agMerv4{Z26|8r^Yc z7d{4J6NYz}!S$6ULQ$>P0$2P?t({$^N;ILj_w8FhF)yLH*=B<}Wa3z!viFG4iby0A zqb%;vNMq=q;! z-7dc^?`a~0m^LbWP~6TpI5$6Fq-;eWM-$SJ)CYj^@$*sfPKcwgpfPNN;&Z4@_vCd& zS}}Upt42>a4s89g>Im?9617kCCnD@^gmo|SP3ahAZ>M=dz<4GG7v+u(W(taWxZ)g|PI)*|wYr=%`9ohIFrtk&7 zd=;{MljbacwnDPGt?3Ec^(&^ZwYyP=gn07$=rew|Ow!emwhbNYcUKyUOsFgT;!*y- zgXkxoi&Mq>Lgs9cY>q%?yd+lyT)*7rp2O5FQNYb%rgBrkH0<9Uc*Jd5?06Olgc&)e8P)WISDwpd>R)wR= z2S{3dWT3GcU=x<=$yiHG^%Tz_sD7;=$kikT0gP`kEm&j(mvId;id6Ypc{aH7fu1=! zj@4q;pUW^;OGpA=s3^N8wjAq6QdQ%Hla z&Vct9#jnrc)Jl1ik(CE;>yz}?685f1n8W_$K$F%4`(?wcA3iiG$jg@N*bigbHE)CF z{uj(Pq1UEgGgmYgqjT6Fe9-#KR)oSX@tzikClvS}u~&Dr!?lz9T(i?GI5XYa7}X}i z{{hjxgM{|`$|szP^@*Px6kMN6hsT@FZg3L6lDr5$ z-jEaBmCXpg2EU?6bXc(bCE0_%J9ugzaz1fh4bSeUzn9g^!N+%kW*ld!*Qz<@F-fHQ zd=_E1(0Ab^Qt1nwPD7?y>%6jx!nNuFf{f7mD#oRmT5y;O={H~SODQO8Z=m7~y_)&2>AlfR$0m8Wo0#~GNPyF-L znUapt{_wTUY}Qf))M{b%M3DSW+F3GC2Cq`ZW;F>g+@($d8-cCUk( zwu&E@nm-UB@3&e8M=PKHZ*m|{*exx@ZbB7_%}FaqtO@TvcI4D z$I}WPOY;ny_nC)C|H;LNkVh+tlieT}hi^H2LPH9)hunKz1TU}Cn(iJF^!Dvmq0nqg zKTz_vAFjBJ%byCaFMXBba|< z!29V^?h+I59o$eg5D<5_d*ESoYbI$KTJ(a&H_eK4Mv? zE>X&e<;xf3Z~FcYp21K4R|Lg{v44o@4fPXNT-BF+KtTSy?rY~s^V_O2mFC$`bO0XkQtG* zyhb5PtEs7xFu64DqGI6Z_)b_BbY=1Kn9lN2HsOp7T%QJ2KqnR&5_gVF6hwyC;iKT4 zH;q>xGE<7tmoGz0Euv@qjO?jXC+&0dqoO3v`>F^b-lLG;Q^6;m-zcHv!yS#KaCvs8 z`7P+uDzN8LXc_UY%#iu64O+?2{0qp2mbTH`;+uRjT|%r$*oth}pd1W2;LfLCFn6%y zGRZad^%W&>cU)W?9(z0uNlXYmSEn45J`-Tso}@ZhXy6{OGIl_TH?6;TUb-j^vDO_q zv_o_bJvVUe&xnL#G%}LJy(9V*wOQ+9OGKognwpl>5}d+_jQpW+N5WRrZ*EwAw~0B2 zhUI1j?|a7gHc5)>;Em-9cV1owFXfqF^N?J!7wVkO*lChQVe;UX~Nu+rA-iHSAqCfUo!=ULgfUZo?QJpn@sb`c zq_&uD@IzyrPO0H6nuO=4E@`Mm_on^bJr2vN{&s9ms;HST^SAPIiTm~`pon-d-Y+~bc0|*@aY|@t%$TWMSeaR1d1N$b*6^&v zBhx)$N!SVHBV&`sVmY6y*+KR%9dssXcarVtr!95`=q#cK{WYq+Si`>7u&9DcKE`xZ z_L2xMR#pwe!v!!U15vfUNqsW#+6Yc6pikB-zdBMxD|~ANmH-bqN0B?=8K}ITd~#F^ zPqsP%J@6-`R^0)*#6+l~_PdTD{7jS2|)x`|R^6>d3Tcw1U!vL6uW zIBa>Wmo!SZIx!z}y5@D^HBH`-?e)Afl zz5U{M)BA5T&l_X}*f12=3*3C09nO&p(Sh9RtpYUc=o8jwIR%P4&=yAA^QW@=PW)5W z*=f8!tn>*((DfW;Kg!ZEi3M|-;MI81jh}2NiCY5*>YGPe`$9G>iwq3<^~#R$kwRxr zaOT?ZyP1W>8E`teTh9wgNL(B4Ftzmvb#?KO9vpF9dZlf;NzRq<01lM~>3|*(M$sy& zVzJ9#zq1&6>D&qV>=l71&>ckkIi=L?OpPH3`is;^jnfK^CZgbiD%h>ZwMQg%`Z{P#TG?8$@%ex7i-eiIadiYNhhd zKQe@6a};!W6aW^FQ(g9@d`JkxedxC*4o90*#Na

?yLL$#HD?-@xn5^tA2&pn0-> z>dD&-xH2m$3~l})ffJ*m+Nl4B(ZGz}%D$coIHqp=ZF5p098*6y2YKn6?r^6Dl#UDW zCdAq4HOhA50ROMP`Rc2jqic|5R;l!pT6bpesffVY9YYEDghXmT$`JwB;k(p4oWOaU zE<3B+oa=(gCLxWK%B%Ld8m$P1-$4fbw}wN}`-I8+sr)tJ6OtYI^`gLV%K_Jl0^Q+g zxS)j6Eo})bqcNSvKJ}ZwotQ5HHkYF8s*e(vsw9-s&UhH2E+f_#qSPn}e?+M)x0brF z3Nc^KZVydWy3jr~yEmQ|YKd?~!YS5cp@)Z`d4lFoR;W|8x>B{GFs}fs0yA(cZaScC zDQ&Ve6NPX!1-BHKSNfsoXWt*Z_&M~xPIQb);Jr=A0t@sX<&?`l`}WM#;+!&>zLFQZ zIOkr*>~od9dy2@3t!MRfwI!US8v}ekv;v8E%ilRAhjAIzK(=JOf+Onfu{&RUbuZ($ z-+oInxNuqbpyOGGU1v^v1>E{v%g60O7hDRvwLNX1YQkWD)7=QKgzpXeImoy-;o*>& z1Ehp;vr7(0%f~@pqq~AI5Kl6Q0bU6n_91gWgs-xwpCr^`NURV_kbc%uxj+iA@h=el z4!^V+-s2y}peg`n8RCFf$g*WWCczrLRDtw=Ak-OBi>=0I%V2oFtIYLd;%)B6OEG)L zlE_PJQ~PpgTk4RG0V@u7?irECqJGs@Wl6oWaVQ*hJkHKH1T8@yF4i(37Qyl`Tgt`^z)R}%>D&VcWQ#0o`^6;4 z#oY1w*@i8~@N@4i=s&<#t`wwf_Vg6r4#4Jt!wg+IqDUK1?t{~v6pdK1M6Ti5rIOO* z((Z8a>{;Te#%?%R{~?hy4RH&l88Qd-5vsr6BbwL5joF-jQz@>y9lqO97T9L|n?VU` zQBE1)=67!wsn?Ls^=Y)xCr@a&@0`-v=QRy;|Ja|o`=Rl%?_wA~i`0>rC;vFz@48*X z6&4j2b{KCkx}KHMH|5rG(M^KnzaRoH=}`*pI#`pqWYyip`#z}ij0x1)BInk*#q?kT zNvdHLbD-wCa{}#ZWOh$V{=B+cZoVY_Vu8+$QbHlJri?SPc8%hl@4{G|N5Gp;q6}%| zXV0pMt-3q$F#eUi9&=G6LsqU#)smBDMMMOimTtS(aR5011GQE;b!xojj4m%XkvBFO zrQNuJK#Qt6HWK zA7#G%1bC8!x|Fz&{sQ~3pnaQD9{y)PUf}&Y(L@*aap`QPs$-x{SiPV5R54WLfzG3LT7>E zAi&-l2q>(tJt^@(9q^;Nt5BCW9nF=`gnveImIJ5^AW!ZlX6oc5N!dwxsxOcS{BP(~ zT{m#I+{jSoann8cC#YVFK0Yxh6FLdk@SH*6bKn;g%S$(gkGoQ)hoZZDUq0;1_KbPL zK$ZFX64FUbxKBYjaM{3nT(u~0M`EgBBTUOaG`7g^t?V=X33;ffwH(|PZR1+I_fC(> zV3Ucs@CFBFWRp>gbPZDDTXNAnKIi;&EIAYD$bG_~yX%lE6@XUl`*N zDgf#7J?B%AvmL4S#Z7oHTbw3f2F7p4NCa6SpFd}nynT^B^WgFtX3GbY$`Psaeq#|b zkF~?6CGkz(|2T%etKwU{cJsITRzLpl?~56$nGuG5+Zvi5V2`GcWa;kzBlEfY?Tr7f zTnM+iFhMyK>QZ!1Xk-|G@Wv;u4#yvgo?o%&)kEWj@W4Q$wm53!2)m7goLkt5QlUiO zQ%bD2@dCsg%OjX`ZRsgZ4XN@V73f6k@O@r9{FaK3?n}(XM_nK> zbF`3+ZJh?5_X>HLE}MmVcOM2YKPBvO;?X=Yz@85Brsmwu04kG`nsadNd$AU9& zF`)Z9l9$LPCncry{g}un--YSR+u8AeuCpk*RVp&i^q4|jqS-~!q3Gpwk8l`@L;uTJ zh*+}=(a-83rqUR(=vCL@XcUUi7oulAWp^w;{yQ^G2}o9sDy04pyu1VON!Jdp0>z1+ zT%VIx;i*i!8@+?6R@e8lA^Q63_uiY6kW}NFFPHC{5qAg7Bt5ot{#)13E2b7HhZ zn@lDY{8F(?mYH|sCMeG&ff^m2ywoh+ijR4z2^&m!9DiK#j$V_0y>-kwt7esNi@Pl*&# zVSmO{;^`=?n543y6SFn?T*BzP+EeoVV5jtyF-bnki%`B8L`!WvPCYm0v+ks%FTeb_ zdyziBP-^wkYjcDdlR}2BqKFtM5L`FZ=Tve+Bd(N^6EO(CS`&Rw1VCNgKl`@BwQp?1 zhdFEFuU+ft*;B+3eY>c${llVr84-Ij@aS;0_EpK!%AGVnH&gY+i!+VwZr=i$Zq~7)e~?`x*-4*6 zWmw>}tA0rGSd!hM6knBdmQai&`g1Y{JfMS53#p;DW;$9w^U0!AZ370pngK&o5rd*s z5UovE0@q!D_W z=I%aQ6Uf~6!^D8=_7g^)>%o+zw1(WWyCn2`-zg*2B)ZrN?M4pk3-#Ql3kW*$SUdrZ zvtrG1$rAZ0u1%g@kdd?_x~}rtC^R#9747q}zdo@Oaaq4S_s}>8yu)@Ze@YJ>^i13* zU(IA|-;MQV4u_KufrLiwn-i;;j-V6$-x)MqW%i}0q}+5avY;pTtTren`-jYQhmpKQ zaj@*}bYm&kT#zH{Xu1<#u=TD@a+QxXKGz!C4W-IA@-GW?7qr2Xa8S_1X z^1?5xg!^9K{<~irJ^Tg+E>*@Q0wVWhN{SFd)D3||Q%b7#mM?`^C0TSb*TbwJ(*6XC zPG<3%QJksS5VN<53<`C++>1{1y0vsQOgmk99hA5uzG-EoFR3B%7ViXp@eNE5t8$`* zaK<3^#EY-y<#x2dkN!m!8i;+Ye@hr0rCQ``C<+_iSD>A(ZFGPZ1p$`9Vm`=xKH7mu zRx-2*@nat$MnYD^s%aFG{b;1c#e-=?&}5xt>k$G~>1bz5Q&kQJHj6Y{s~)vA!&HGv z+A*P@BRLbO|B7#Fh{y2I#X_iHR%?5PZW?~s>_t(0+iNJ&(e3?@lZCA7tb|#f_LqePO?xJ-A zFQs!rsNvT5_DxT}Sc5!aeBI}v(Qrx3cHAdW1MyW4SX3_~HvmcQSb2>-mqqOFxw@Df*s*cS$+MAj{@Np>htmQ-&}yZuAdj; zv1D35EUW(ICA(Jz!oPna+wGAU!0hi_5wV(klT|2xM{=b*kb7+clk67Nu(V|*YHs3F z&dtf?3(0&pZq0!86gRPpRsQMcAyL{ugg_$d6@;oh{0O@^$cf4iilJS+L>w>Z1RWNj zcf+*)ZR>$I>cCY(ZCiYKAe)Qi|$`;J2dgv>BxL2X{Sn+b-1(=GP!| zAx07m=a(dRcmQzdAm2A4f+v}--6eDp(bDXD8L3X-BGhJ&>IsC}{81TiKDd|RMwF)z z?#gOa?V!{Ep3w=}1|Vu9Il$dM@KoplQ&`|Cfe+ljkQ1oxpRMvWHmbo>Rqc8~Ts2`Z z|JHhiafrsHg(;PjRmLN?SV|>M^eDq-NxcJ^gXd@-WokWPnn*|oo@EMR`f8#Q@X14% z8@vXf-?SkNRJ<=cogo8s|D}IZWe9nz!)lE8UAQ|>Q#YD-*)+01;wgGu+KAS%+aw=&q-QyFb`)^TwiT`_+6Z^9Us;yo#+IdAIBfHYZzd9720}bN|m>H~oBNOW1 zoX|wW>v}}1k;h-$+}Idt%+2j^S-kRfFTa8!?1@wDmvUMK6%+3oymEk460*P1dow;R z0B?@ohm}d_Ku_uOBmf-5DD7wII1iQN>)?}18e(Yo(nw5l1&E$99#8LYoeE4U%}AmJ zxVh2Wz0)}^LC-g}xM<+2WJey>E~92Hot<(ac-^z##`>hPyP3*kCt;N zepX~;eps|ycI?>T_Qg<%ZXn~&VI~9ke;u>n+=oT$MTPe^ z?A5|`>(8UkH#8_oQ$kP9ZmjT3x>~m^GF0!G1S!sTcO+SlWFxnW#v z_wThyN%)vFg)%wBB-~4ryV09#+I5xo2Yp~5yY1~zrF~BP>W;N;&Sv&GR#wgpL|@}a zq%t4)4fud}rj5Sa;>I)XMe0fs2Z2EN3oiK1KXQ%d8yFgafIR-4fuTiFwkz0L+JcYnysOl$c4%Rj;TZ1GF$rsdHAM4i*$VIScE8! zykWO*7kIm8#-zIV-lQ5ba_v(P88N5ns(f$k6#BKUl$(dW#FxNv!ERrE`f@svDJj8s zS)nLw$&>|tRqF1CQ>|5hHP#_bR>6bQu>Tz0rx0W&-HxB^IS@J{?F-=5$}8l3xWyl_ z7l)qP2gSJ`ZKIFFav%HdIo9$dpSF~^HU1#o4!_#btX|d?8 z8{xcJD9M%>)JWIeXXobB1t4!Lv9@R}8-Xhx(YYq*!rGT!)KYqr+g-+uR6xgal2Ev> zxA6vWOs2gu7;bUz-u?B_Ur;`_BxPrx)otg(=63f;10Ok+f-wqp0nBXvbD?i(DK{0} zl$xqrjkrfT%7nUfrd*i)WO*GorfckC;8|lj0?SDE3$;%f*&_hXw_%%WrY>rQ+K4Qt zxSSIOZMUerj(}#NHY`*^usE67D1t5au-JH=f52k2*YRK%G9Bw45wYT2l$IlcWe4oo z2!YcidEFyN=H*c#t(qv1np9_CnkY|qfGys&c}Cnv!0n7~oL{1S|M;X4iioJ)bO!3u z0vC2!Vuu#ZX~ggErYicp{XPqvqeP{TfH;a&9?OFRFkA*&{zo1&MM8$n}R4mQAz6+pq&zk%YBjPPmAU6xJ{1Q1VWviW@9U3by<)$BPcMyd50jM zFaM4+59Gmtr%&?!HaP)7o3jw1Sx@v|o+|b>VML|hC^`<)PvuN!z$%?bg>p{M86GM9_CHN&1f~ z^nwRP?Mv*LxaL7R#C1ym>xpN`F=}6Bb8N@X#G4FyNi}aFKY*Dcl=tmST*VFaskWPv zRw2|(r}e(*iLX)`>&l1GqmmLY`gG$R?(S#z@9ausBhM6*6}Mp#*315ux;qduYwh_% zz@8fmNQxp!?{;n%V|uazu1;<;C>5hk8aNt`*v!F)!Xf>!e;^G8{9CLQliPhfFWjt5 z-U!@o`c{wRzZ`~ZU&+3lXBXg>cTb*f0X(3o?Te@rBk^kApp&9~BG?X2KarZ3FJ9c_-xkDvv=;YYz`<3c{&N=+s8fo@fVm6VZLp?foy}`N8jE9)AzwTkfW^SVl8SS@&592OeF{?(7^6vaDm{T$4 zKY^;os_yJAF>JpfrpGDx-L&jB&_@_L0`0#FkS=jY9b!UM8v(k+iP$r^=kHcw6pY{k zLn;~VJp{yH?t0+WeY_-0g`-N(FJxiV`k)nXM*?n(-KxBrl^zEb?&6?+aQk>yyYF#> zn+*=;L>GkDN|{4PO6Z;{*dH+Csj4PQRdo){v8ls~GSi*_azaKxz(RcC7X)%3z0skL z8#>N@#JY`nx>r?=DsP{ziNb=37LPL}8+r5cMY2?s6YAA@c(ke!-ShF8so6 z4wxNk0k(B#2BFgIYz{i(URKqN5=~!tlv%xOV;8?z_yw`0S-0zpW33r56|rGc*Sa#Q zON{<RJ#)w(=ZeHR=S_SYD_Ut!XMybTeYt;EoY?)#!Lw>S`VvYnm@WL4m7UwKkG#?^Wk&_$r^|Y?jR*F( zFNSTw16YK)E?zYuReq`85gyrZ>3l=uf*Ib&tZ(v-i*rsm#Wvp)w9JsveDJQeu|##V z=;5XlhvIMYGvel`HURgLt^WqYqQmH@&b*(>WQXEsN0@DUinc>*5TVC;FC$3gbk*~` za(2r!7wmhz#EwwHLn$=b3~w?u*j-*Zo=G?PMestjbhl{j-i)rXeZvW{l~;Z4e|0CJ z1;%LJ+z%2hm^~}B!#*bS_9Bq_;9T4KvFL>lZr%Ca{Kv4*4uB)LbB*J{Ykz40mfHdPz6 zghElCH_J^FD`0nSS1TRxm6>b12-S8N-gn&Ppi1%!N8^QeM=y7Sa>4|l1PNBqkeykUk+q$az~SImk+rq>b$rl}*6lkoUWe>1pHh z#4EKPw!+3it^_-P>WvlreP1zWMQdwe$uCUkXlue5r!5cu(jkoOmq$MDYpg}Sj13Iz zGs=+2Q}$&O&<~t15WIH4cBRX_AmhBc(r|(GWbYZHJA2h2mVMR`fLLrnk&#;9ch=#O zuWa&XX2U33b~@4T)Ty(l59pqhoRCDdNtTr>For6^5uR&yS^bJ^8g7oEUj_bx-`WvJw4l2l2gwi+ap5R*HXL(Iz( zNXY?Gb|)|?NN8LKTM=jTGx^Cq2x1neO8K%;Ri*EMN1e2uJ$EIcrb^rnH>}PHi-e&$ znL7YQswfS+l7+S?yenuV>^8|N7pNVmcxEPf7I}SQq2^K!UUL3CQ%d4Fm6(loHCLU7 zQuDG>wJA6ijfS@Z5NdNOsW{Q*--ZwbYShYJnXViGGnGiEVA8)mPD(ddu_Y`4?*8ss z%;I*yMO954EhQfS@x8?(A`gCfqke1{HdKr&CyDF$T?|u)zSkHYz*N%$^y~Pm5O4b6 zfg{lQ7q{VIYI)LD@{eU>_+8NxmQS!kqT#MVZpibx4#A<+Y;1PbNuQY-?kC3+f6b}d z$iV`^JR;M}%Yi;L1~B(0OHi-$)kx>dXExdvwQph3Sl8`nwQuta0#OrQ?fXw-Q^z4} zlC*bAv-b|Jl-P32hmA=ouHwP_tC7cy?|kxOLda=dzVMZ%Keu3OtnF)tyv5g~D@E z>D?RCqt++J$>1*0@aQ5&A+GP>bgYD*-otrqdIBoaoczN4iJwHJQ37)y8nT5QC$zyp z#q*@}IJ7Vg)d+8`$5D&Rxbf+FN;fzMa96XQh%CPkc!R>yI8hy2v8cg6?EBqf%kyvJ zeQmb4uNre|Sqg!f0$0gVs1y^_ZtMz6yIIm`6g~-Src#@`(`w?_b4w&XaY_mOmJr?| zrt9IJZ_mblAPv5?t9GMHiQ>1?N;fVVMb*aqn)Or{s`U6QeLWCo+Gpf$Ti;(_Mn7%5 zn}E6sZ+@13H(o)$7L~o_Vgj1&yhc@buctP?d40cPdvxpd_P~acvW#nOTN;;|anT3u zjX(ZYyG}MTQY`gr_saQbPmyF4?xl02wl#NUun1w+q=@|y1n$j>uyjWML@ff3rP8RM z5=#b@utKpSC}}__mAtAAN@7n>K{i)%8xf_rlr>Vf2@YC2o-Z(nDFMxXhb%Nw>H?GUlkCEVQ-HniJ)$e6@ zQZe|Z!4EQg;ri)vZJEplT~wQ37T1LeKvU81CKm?d%i|@(2}UU0{#3DERIfupK@TTs zyj%10WqpS|c@Fp&UIBO+IJ^42;h!7w<&d8A!rV=v)K||LzcyrPH{0fnpYF?-^mWV` z|8pogbAwH8zt$IFR>CyMd&4Xq-AnAWQ)iU_2pyj)*sesnHk8kt=Mh8mq4rf*;YNe~ z?NB5X8;V^O70g{9A*Ba_Tb&Oj`n}=uBrJJ<%0EaZqOSSPy;cSGQIuK zi{jE5$lOT4t-83P?vpKvqj>Av##*w=;bWgucguH_*P}jT+=*N~l(O-G@dqxNc@wpr z2te!uPoCcuQIjq_>)Lw~k{}LBI~PdjT!mrVsq&VIQn#1`qK#?S;TBg7+v!DG*fYD} zoW)^qkHIFEFSeKRxu+r`^?w<5^LyKtbHa01F&FeJmr1Y2GbajB2~%6g-FSJC*EHM) zS5ShrTeMwV%eW6cLLSeYzu>C#q2YdF)+c`-oN6pVG|wr}7vXV1bG0s?_4$KGf~IuG7s_MBOTx@}wxro()e*IfvIl#~7}Ul#{?g+4(rl8X3D zV-KTX%+{SiBp1@QlIus+mMLRXOvb%(%t{K|U?LH;^1l)J5$rYyn5}8VC!GblcQwyL z9&;bUwGWTSo4ZsV2Wo2r0){rNi9TQR?NWMT**|BM0Q8fatiUdLE@| zk*g;K4u&RtiyBa~(g+o!RszxG6hn(YlA9M0 z8|eaKxd#NN(g^szjwkn--=FNv3r#O=?!6ba!|m5gBvn; ztMt~%T$W!gWH-r(xh9)xl&$m!5;Y=cA!2_Br`w&pjZWy065h|^AZ@z=hoSj2C+@|K z8&>(A9FiA>5T(h>bqWMLhUWckE{mOGFWsMo<|%);nu}(MVnKdOZgLjN>qo6}Dam9F z^`W3y7Q%?it(h9Jty5run*5Ap9G!$u?7WXR;L=f*u5=B50H&Po6)j9u3a2b1qNma6 z|AhrS6REkxBkS>X{HKg$fpuELR*IWL7qO>TP{_R3t+!$6N`2>61@;`cF=&-G+b;eS zMsJGLVua&thPabslKgA4&=vsip=dR^vPez#MjzqxS9GC%(Fg$K`DO zIpQ&Im$h8%nZxX2W@WDOspu0+5&24@@AxjfoQ=g1cR!gMIqc&;)!K$kE8$L=I+`un zl^72OCT-0_7>TBkVxlr=`pU~2FWbfqoiPBt+-J*VPsr!a%?=8J0TDq;^6NEFxxO~J zZ}M=s+V`eX^5YI}3HhMQVm`zz@qP3B=8fCoCBE#ixoxX`m?l#zf}IC$0m$~e`u{Q# z-5?frEPXg0)@JAIyABm^?$)uhRSyk3{`ndr&VCeIkKOm5KIA`L3dI?KJX&)Sk%m_l z{^Q=Q6<+lUjMV4S5Zu~*GCEO7`;|7^|c>#9+ZoY zXXp8GvappM&T07jh^GFIPJWb{HSp@yBs=UNr_aK>23^|3sY$9j3gMVtg&ll}_jQN+ zLOw8&SNLKX$0XqcZ;t3n_2*x zeF#gS62=|GmNI z1jGSX{npS};zh!LZ9t|wkk*b5bEJNd6yQO~D)Q?bLEjrjhSR?LD%`EfQ(=GodK!+{ zf*$M*@QFLn_j#@UYGmMdLn(cb;vM>6==2b;VpbgJ)~t20s#X@us+@@D4npF^iw z2RI!rY`or~oHW?~>H~oFK!HsIq6Etp&KZ9&)E8OL)7$^-gRz!SIEMrV({{3ZrKDfK z87nq-2lOgE#!E7gUHOHZ@4*Yj5)N^)_eANAXaFRxKaSpsuNrlrpTds$3756AOmvsa zd(rdx`lKUVNIO6?Ve5&>)jzo(_Gfy*Iu?8Bpf4cOE$m(aK`_R7#-5G@?^p_(*w;Hw z%Do&8*jK~QR-qQ_Uxu~(YkdNN-Y^u7%eJ8OEwIv=svO(vu_O>N2U;Gz%-qhkM8Isi z?tV;_iE=SY`mI;937Iy7FcY%>%G`(F8BI)ueYxaHsXKE~%LIL?{0Af?N?hJz3`AU0 z>Gs5=y70vzmsnRyJrgZ?vn=^qHMupI$BWczkQwni&mxKle*zxFZd(avSd*^=#9qC{ ztqZhR+l=l@gc4K~qg|Uwrux`Kh8w=iA1IaVH! zLcj0mYZrScn74TguDXSRHB)F&PO7#FQm@99e;NPbZ@=sRM5I~G4U8B+1`Gati{%rU zD=K&MpVVu06DLZ!vvh(tdASUPE)zpgDW(7iA1 zbK$cw7ET;d7s3{RHRdk zI$2;o(z)Db?m(omIyoI&!KR@2OqMt%j@V}d&k(Wtr->`(tC~eYo>Bk z1#OzN%(9CVN-BFU;#ZsEA6tO(LW_SUnh7@w#J*0Dyn<{?ZOG$qk z-DxYxIh^=})f?OT@`offc{2O)h-VB0k(M>KUxep5(bX9-8&87XFmYsPLQEH9&=vY} z25`_OCwkNVl=Bgr<9X;>93DKS~gw!W8y&2bCH&kp{!QzHP~9n}*%l-zd4o zUakbZ4(F;rk0kmdMVlK3aoH0_`a`RIMyWrNr+E9`DdQTLh!bL;XR3Y0mf4ZJ_(W!5 zajyA`6HizXI-4Ey1#YYhe-w@VRMN#zXKu+{0_)^YL3fcaMxsbC(Zki@w-}?c>}mEi zG?%VXuF(CPQ|k-u9(kilHRStt0s5*z%CH0)kwR z*`eramZ!-?oGCvP4VOZ*TU7EX-+wZhdb4$nKQ6&njM|W{U(MGtZ+`u1E6ajOoKN%N*|YVd^j*564%9$-;2_;zc#w@`W}lrGxOB;9)ffQwHPKMyv9rx*hR+ zUtlU0tl_fBsV>yxKZKn69W)gN{?9kHBN|Rw6l$>TLj1ybbkgK?IG)e3O7aI}VSEk* z5m4mQgyz<3&B|vZqmz0k@*O(rL6AkUd-H&2dK3~?i1TnHsw8Zpudg5eGKW-AUoU$^ zl1V*?yn2a;jN_O3N`lO1aq8m%8zat%Ym&nbfj3UJ6tP%bm=l|WwBsl!Zu z4;~Ws6tOsz6@ko~{fq~Q^!(>VHO#J6t}>{T2Tk9z_uPl}mDCqbZ$ffA5`C=Rn=rGH{pgIv1-fUNk@+Q{2XjeZ<5#

25Ckw_05{OokJ$c3-YVi92-d1|Xo% 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 z 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

*E&kL25-%9X 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≧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%0Dy$(aYX${-?f2E;=Aw&@wYSk!#NEOL0cdSnUP* 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

)(rBR@v!bqRd3SN{Rr9PC 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

!GF%8=XsBQlb!OsQnv_2M8}Z~H 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 diff --git a/AntistasiOfficial.Altis/playerMarkers.sqf b/AntistasiOfficial.Altis/playerMarkers.sqf index 57214446..8babb0ee 100644 --- a/AntistasiOfficial.Altis/playerMarkers.sqf +++ b/AntistasiOfficial.Altis/playerMarkers.sqf @@ -9,7 +9,7 @@ while {true} do { _player = _x getVariable ["owner",_x]; - if ((not(_player in _players)) and (player != _player) and (side player isEqualTo side group _x)) then + if ((not(_player in _players)) and (player != _player) and (side player isEqualTo side group _x) or ((side player) == Civilian)) then { _players pushBack _player; _mrk = createMarkerLocal [format ["%1",_player],position _player]; @@ -26,13 +26,13 @@ while {true} do _player = _x; _mrk = format ["%1",_player]; if (vehicle _player == _player) then{ - if !(server getVariable ["hardMode", false]) then {_mrk setMarkerAlphaLocal 1}; + if (server getVariable ["hardMode", false]) then {_mrk setMarkerAlphaLocal 0}; //_mrk setMarkerAlphaLocal 1; // <<-- normal mode _mrk setMarkerPosLocal position _player; _mrk setMarkerDirLocal getDir _player; - if ((_player getVariable ["ASunconscious",false]) || (_player getVariable ["ACE_isUnconscious",false])) then{ + if ([_player] call AS_fnc_isUnconscious) then{ _mrk setMarkerTypeLocal "mil_join"; - if (server getVariable ["hardMode", false]) then {_mrk setMarkerAlphaLocal 1}; + if (server getVariable ["hardMode", false]) then {_mrk setMarkerAlphaLocal 0}; //_mrk setMarkerAlphaLocal 1; // <<-- hard mode _mrk setMarkerTextLocal format ["%1 Injured",name _player]; _mrk setMarkerColorLocal "ColorPink"; @@ -64,7 +64,7 @@ while {true} do } forEach _players; - sleep 1; + sleep 5; };//end while loop diff --git a/AntistasiOfficial.Altis/puestoDialog.sqf b/AntistasiOfficial.Altis/puestoDialog.sqf index facc99da..4a560ee8 100644 --- a/AntistasiOfficial.Altis/puestoDialog.sqf +++ b/AntistasiOfficial.Altis/puestoDialog.sqf @@ -3,13 +3,13 @@ params ["_type"]; private ["_position","_markerPos","_onRoad","_permission","_text","_groupType","_groupComp","_nearestZone"]; -if ("PuestosFIA" in misiones) exitWith {hint localize "STR_TSK_BEMP_RESTR"}; -if !([player] call hasRadio) exitWith {hint localize "STR_TSK_BEMP_RADIO"}; -if ((_type == "delete") AND (count puestosFIA < 1)) exitWith {hint localize "STR_TSK_BEMP_DEL_NR"}; +if ("PuestosFIA" in misiones) exitWith {hint localize "STR_TSK_TD_BEMP_RESTR"}; +if !([player] call hasRadio) exitWith {hint localize "STR_TSK_TD_BEMP_RADIO"}; +if ((_type == "delete") AND (count puestosFIA < 1)) exitWith {hint localize "STR_TSK_TD_BEMP_DEL_NR"}; openMap true; posicionTel = []; -hint localize (["STR_TSK_BEMP_BLD_INFO","STR_TSK_BEMP_DEL_INFO"] select (_type == "delete")); +hint localize (["STR_TSK_TD_BEMP_BLD_INFO","STR_TSK_TD_BEMP_DEL_INFO"] select (_type == "delete")); onMapSingleClick "posicionTel = _pos;"; @@ -20,7 +20,7 @@ if (!visibleMap) exitWith {}; _position = posicionTel; -if ((_type == "delete") AND ({(alive _x) AND (!captive _x) AND ((side _x == side_green) OR (side _x == side_red)) AND (_x distance _position < safeDistance_fasttravel)} count allUnits > 0)) exitWith {hint localize "STR_TSK_BEMP_DEL_ENEMY"}; +if ((_type == "delete") AND ({(alive _x) AND (!captive _x) AND ((side _x == side_green) OR (side _x == side_red)) AND (_x distance _position < safeDistance_fasttravel)} count allUnits > 0)) exitWith {hint localize "STR_TSK_TD_BEMP_DEL_ENEMY"}; _onRoad = isOnRoad _position; @@ -59,16 +59,18 @@ if (_type != "delete") then { } else { _nearestZone = [puestosFIA,_position] call BIS_fnc_nearestPosition; _markerPos = getMarkerPos _nearestZone; - if (_position distance _markerPos > 10) exitWith {hint localize "STR_TSK_BEMP_DEL_NONE"}; + if (_position distance _markerPos > 10) exitWith {hint localize "STR_TSK_TD_BEMP_DEL_NONE"}; }; _resourcesFIA = server getVariable ["resourcesFIA",0]; _hrFIA = server getVariable ["hr",0]; +if(isnil "_permission") then {_permission = true}; +if (_permission) then { + if (((_resourcesFIA < _cost) OR (_hrFIA < _hr)) AND (_type != "delete")) exitWith {hint format [localize "STR_TSK_TD_BEMP_BLD_COST",_hr,_cost]}; -if (((_resourcesFIA < _cost) OR (_hrFIA < _hr)) AND (_type != "delete")) exitWith {hint format [localize "STR_TSK_BEMP_BLD_COST",_hr,_cost]}; - -if (_type != "delete") then { - [-_hr,-_cost] remoteExec ["resourcesFIA",2]; -}; + if (_type != "delete") then { + [-_hr,-_cost] remoteExec ["resourcesFIA",2]; + }; -[_type,_position] remoteExec ["crearPuestosFIA",2]; \ No newline at end of file + [_type,_position] remoteExec ["crearPuestosFIA",2]; +}; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/rebuildAssets.sqf b/AntistasiOfficial.Altis/rebuildAssets.sqf index a6e78c6e..75b7a608 100644 --- a/AntistasiOfficial.Altis/rebuildAssets.sqf +++ b/AntistasiOfficial.Altis/rebuildAssets.sqf @@ -1,13 +1,13 @@ _resourcesFIA = server getVariable "resourcesFIA"; -if (_resourcesFIA < 5000) exitWith {hint "You do not have enough money to rebuild any Asset. You need 5.000 €"}; +if (_resourcesFIA < 5000) exitWith {hint localize "STR_HINTS_RA_YDNHEMTRAA"}; _destroyedCities = destroyedCities - ciudades; openMap true; posicionTel = []; -hint "Click on the zone you want to rebuild."; +hint localize "STR_HINTS_RA_COTZYWTR"; onMapSingleClick "posicionTel = _pos;"; @@ -20,13 +20,13 @@ _posicionTel = posicionTel; _sitio = [markers,_posicionTel] call BIS_fnc_nearestPosition; -if (getMarkerPos _sitio distance _posicionTel > 50) exitWith {hint "You must click near a map marker"}; +if (getMarkerPos _sitio distance _posicionTel > 50) exitWith {hint localize "STR_HINTS_RA_YMCNAMM"}; -if (not(_sitio in _destroyedCities)) exitWith {hint "You cannot rebuild that"}; +if (not(_sitio in _destroyedCities)) exitWith {hint localize "STR_HINTS_RA_YCRT"}; _nombre = [_sitio] call AS_fnc_localizar; -hint format ["%1 Rebuilt"]; +hint format [localize "STR_HINTS_RA_1REBUILT"]; [0,10,_posicionTel] remoteExec ["AS_fnc_changeCitySupport",2]; [5,0] remoteExec ["prestige",2]; diff --git a/AntistasiOfficial.Altis/reinitY.sqf b/AntistasiOfficial.Altis/reinitY.sqf index 45206043..20503ad3 100644 --- a/AntistasiOfficial.Altis/reinitY.sqf +++ b/AntistasiOfficial.Altis/reinitY.sqf @@ -3,5 +3,5 @@ gameMenu = (findDisplay 46) displayAddEventHandler ["KeyDown",AS_fnc_keyDownMain if (player != Slowhand) exitWith {}; -if (_this isEqualTo []) then {hint "Reinitialised:\n\nSpecial Keys\n\nStatistics Report"}; +if (_this isEqualTo []) then {hint localize "STR_HINTS_RY"}; diff --git a/AntistasiOfficial.Altis/resourcecheck.sqf b/AntistasiOfficial.Altis/resourcecheck.sqf index 67bc5282..fbc77107 100644 --- a/AntistasiOfficial.Altis/resourcecheck.sqf +++ b/AntistasiOfficial.Altis/resourcecheck.sqf @@ -110,7 +110,7 @@ while {true} do { _hrFIA = _hrFIA + _cityIncomeHR; if ((_supportEnemy < _supportFIA) AND (_city in mrkAAF)) then { - [["TaskSucceeded", ["", format ["%1 joined FIA",[_city, false] call AS_fnc_location]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + [_city,{["TaskSucceeded", ["", format [localize "STR_NTS_JOINFIA",[_this, false] call AS_fnc_location]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; mrkAAF = mrkAAF - [_city]; mrkFIA = mrkFIA + [_city]; if (activeBE) then {["con_cit"] remoteExec ["fnc_BE_XP", 2]}; @@ -132,7 +132,7 @@ while {true} do { }; if ((_supportEnemy > _supportFIA) AND (_city in mrkFIA)) then { - [["TaskFailed", ["", format ["%1 joined AAF",[_city, false] call AS_fnc_location]]],"BIS_fnc_showNotification"] call BIS_fnc_MP; + [_city,{["TaskFailed", ["", format [localize "STR_NTS_JOINAAF",[_this, false] call AS_fnc_location]]] call BIS_fnc_showNotification}] remoteExec ["call", 0]; mrkAAF = mrkAAF + [_city]; mrkFIA = mrkFIA - [_city]; publicVariable "mrkAAF"; diff --git a/AntistasiOfficial.Altis/script_component.hpp b/AntistasiOfficial.Altis/script_component.hpp index da67d16e..69a9c2f3 100644 --- a/AntistasiOfficial.Altis/script_component.hpp +++ b/AntistasiOfficial.Altis/script_component.hpp @@ -1,3 +1,3 @@ #define PREFIX ANTISTASI #define DEBUG_MODE_NORMAL -#include "\x\cba\addons\main\script_macros_mission.hpp" +#include "script_macros_mission.hpp" diff --git a/AntistasiOfficial.Altis/script_macros_common.hpp b/AntistasiOfficial.Altis/script_macros_common.hpp new file mode 100644 index 00000000..2a88ddfd --- /dev/null +++ b/AntistasiOfficial.Altis/script_macros_common.hpp @@ -0,0 +1,1642 @@ +/* + Header: script_macros_common.hpp + + Description: + A general set of useful macro functions for use by CBA itself or by any module that uses CBA. + + Authors: + Sickboy and Spooner +*/ + +/* **************************************************** + New - Should be exported to general addon + Aim: + - Simplify (shorten) the amount of characters required for repetitive tasks + - Provide a solid structure that can be dynamic and easy editable (Which sometimes means we cannot adhere to Aim #1 ;-) + An example is the path that is built from defines. Some available in this file, others in mods and addons. + + Follows Standard: + Object variables: PREFIX_COMPONENT + Main-object variables: PREFIX_main + Paths: MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\SCRIPTNAME.sqf + e.g: x\six\addons\sys_menu\fDate.sqf + + Usage: + define PREFIX and COMPONENT, then include this file + (Note, you could have a main addon for your mod, define the PREFIX in a macros.hpp, + and include this script_macros_common.hpp file. + Then in your addons, add a component.hpp, define the COMPONENT, + and include your mod's script_macros.hpp + In your scripts you can then include the addon's component.hpp with relative path) + + TODO: + - Try only to use 1 string type " vs ' + - Evaluate double functions, and simplification + - Evaluate naming scheme; current = prototype + - Evaluate "Debug" features.. + - Evaluate "create mini function per precompiled script, that will load the script on first usage, rather than on init" + - Also saw "Namespace" typeName, evaluate which we need :P + - Single/Multi player gamelogics? (Incase of MP, you would want only 1 gamelogic per component, which is pv'ed from server, etc) + */ + +#ifndef MAINPREFIX + #define MAINPREFIX x +#endif + +#ifndef SUBPREFIX + #define SUBPREFIX addons +#endif + +#ifndef MAINLOGIC + #define MAINLOGIC main +#endif + +#ifndef VERSION + #define VERSION 0 +#endif + +#ifndef VERSION_AR + #define VERSION_AR VERSION +#endif + +#ifndef VERSION_CONFIG + #define VERSION_CONFIG version = VERSION; versionStr = QUOTE(VERSION); versionAr[] = {VERSION_AR} +#endif + +#define ADDON DOUBLES(PREFIX,COMPONENT) +#define MAIN_ADDON DOUBLES(PREFIX,main) + +/* ------------------------------------------- +Group: Debugging +------------------------------------------- */ + +/* ------------------------------------------- +Macros: DEBUG_MODE_x + Managing debugging based on debug level. + + According to the *highest* level of debugging that has been defined *before* script_macros_common.hpp is included, + only the appropriate debugging commands will be functional. With no level explicitely defined, assume DEBUG_MODE_NORMAL. + + DEBUG_MODE_FULL - Full debugging output. + DEBUG_MODE_NORMAL - All debugging except and (Default setting if none specified). + DEBUG_MODE_MINIMAL - Only and enabled. + +Examples: + In order to turn on full debugging for a single file, + (begin example) + // Top of individual script file. + #define DEBUG_MODE_FULL + #include "script_component.hpp" + (end) + + In order to force minimal debugging for a single component, + (begin example) + // Top of addons\\script_component.hpp + // Ensure that any FULL and NORMAL setting from the individual files are undefined and MINIMAL is set. + #ifdef DEBUG_MODE_FULL + #undef DEBUG_MODE_FULL + #endif + #ifdef DEBUG_MODE_NORMAL + #undef DEBUG_MODE_NORMAL + #endif + #ifndef DEBUG_MODE_MINIMAL + #define DEBUG_MODE_MINIMAL + #endif + #include "script_macros.hpp" + (end) + + In order to turn on full debugging for a whole addon, + (begin example) + // Top of addons\main\script_macros.hpp + #ifndef DEBUG_MODE_FULL + #define DEBUG_MODE_FULL + #endif + #include "\x\cba\addons\main\script_macros_common.hpp" + (end) + +Author: + Spooner +------------------------------------------- */ + +// If DEBUG_MODE_FULL, then also enable DEBUG_MODE_NORMAL. +#ifdef DEBUG_MODE_FULL +#define DEBUG_MODE_NORMAL +#endif + +// If DEBUG_MODE_NORMAL, then also enable DEBUG_MODE_MINIMAL. +#ifdef DEBUG_MODE_NORMAL +#define DEBUG_MODE_MINIMAL +#endif + +// If no debug modes specified, use DEBUG_MODE_NORMAL (+ DEBUG_MODE_MINIMAL). +#ifndef DEBUG_MODE_MINIMAL +#define DEBUG_MODE_NORMAL +#define DEBUG_MODE_MINIMAL +#endif + +#define LOG_SYS_FORMAT(LEVEL,MESSAGE) format ['[%1] (%2) %3: %4', toUpper 'PREFIX', 'COMPONENT', LEVEL, MESSAGE] + +#define LOG_SYS(LEVEL,MESSAGE) diag_log text LOG_SYS_FORMAT(LEVEL,MESSAGE) + +#define LOG_SYS_FILELINENUMBERS(LEVEL,MESSAGE) LOG_SYS(LEVEL,format [ARR_4('%1 %2:%3',MESSAGE,__FILE__,__LINE__ + 1)]) + +/* ------------------------------------------- +Macro: LOG() + Log a debug message into the RPT log. + + Only run if is defined. + +Parameters: + MESSAGE - Message to record + +Example: + (begin example) + LOG("Initiated clog-dancing simulator."); + (end) + +Author: + Spooner +------------------------------------------- */ +#ifdef DEBUG_MODE_FULL + +#define LOG(MESSAGE) LOG_SYS_FILELINENUMBERS('LOG',MESSAGE) +#define LOG_1(MESSAGE,ARG1) LOG(FORMAT_1(MESSAGE,ARG1)) +#define LOG_2(MESSAGE,ARG1,ARG2) LOG(FORMAT_2(MESSAGE,ARG1,ARG2)) +#define LOG_3(MESSAGE,ARG1,ARG2,ARG3) LOG(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) +#define LOG_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) LOG(FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4)) +#define LOG_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) LOG(FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5)) +#define LOG_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) LOG(FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6)) +#define LOG_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) LOG(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7)) +#define LOG_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) LOG(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8)) + +#else + +#define LOG(MESSAGE) /* disabled */ +#define LOG_1(MESSAGE,ARG1) /* disabled */ +#define LOG_2(MESSAGE,ARG1,ARG2) /* disabled */ +#define LOG_3(MESSAGE,ARG1,ARG2,ARG3) /* disabled */ +#define LOG_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) /* disabled */ +#define LOG_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) /* disabled */ +#define LOG_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) /* disabled */ +#define LOG_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) /* disabled */ +#define LOG_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) /* disabled */ + +#endif + +/* ------------------------------------------- +Macro: INFO() + Record a message without file and line number in the RPT log. + +Parameters: + MESSAGE - Message to record + +Example: + (begin example) + INFO("Mod X is loaded, do Y"); + (end) + +Author: + commy2 +------------------------------------------- */ +#define INFO(MESSAGE) LOG_SYS('INFO',MESSAGE) +#define INFO_1(MESSAGE,ARG1) INFO(FORMAT_1(MESSAGE,ARG1)) +#define INFO_2(MESSAGE,ARG1,ARG2) INFO(FORMAT_2(MESSAGE,ARG1,ARG2)) +#define INFO_3(MESSAGE,ARG1,ARG2,ARG3) INFO(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) +#define INFO_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) INFO(FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4)) +#define INFO_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) INFO(FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5)) +#define INFO_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) INFO(FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6)) +#define INFO_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) INFO(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7)) +#define INFO_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) INFO(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8)) + +/* ------------------------------------------- +Macro: WARNING() + Record a non-critical error in the RPT log. + + Only run if or higher is defined. + +Parameters: + MESSAGE - Message to record + +Example: + (begin example) + WARNING("This function has been deprecated. Please don't use it in future!"); + (end) + +Author: + Spooner +------------------------------------------- */ +#ifdef DEBUG_MODE_NORMAL + +#define WARNING(MESSAGE) LOG_SYS_FILELINENUMBERS('WARNING',MESSAGE) +#define WARNING_1(MESSAGE,ARG1) WARNING(FORMAT_1(MESSAGE,ARG1)) +#define WARNING_2(MESSAGE,ARG1,ARG2) WARNING(FORMAT_2(MESSAGE,ARG1,ARG2)) +#define WARNING_3(MESSAGE,ARG1,ARG2,ARG3) WARNING(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) +#define WARNING_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) WARNING(FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4)) +#define WARNING_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) WARNING(FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5)) +#define WARNING_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) WARNING(FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6)) +#define WARNING_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) WARNING(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7)) +#define WARNING_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) WARNING(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8)) + +#else + +#define WARNING(MESSAGE) /* disabled */ +#define WARNING_1(MESSAGE,ARG1) /* disabled */ +#define WARNING_2(MESSAGE,ARG1,ARG2) /* disabled */ +#define WARNING_3(MESSAGE,ARG1,ARG2,ARG3) /* disabled */ +#define WARNING_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) /* disabled */ +#define WARNING_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) /* disabled */ +#define WARNING_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) /* disabled */ +#define WARNING_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) /* disabled */ +#define WARNING_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) /* disabled */ + +#endif + +/* ------------------------------------------- +Macro: ERROR() + Record a critical error in the RPT log. + +Parameters: + MESSAGE - Message to record + +Example: + (begin example) + ERROR("value of frog not found in config ...yada...yada..."); + (end) + +Author: + Spooner +------------------------------------------- */ +#define ERROR(MESSAGE) LOG_SYS_FILELINENUMBERS('ERROR',MESSAGE) +#define ERROR_1(MESSAGE,ARG1) ERROR(FORMAT_1(MESSAGE,ARG1)) +#define ERROR_2(MESSAGE,ARG1,ARG2) ERROR(FORMAT_2(MESSAGE,ARG1,ARG2)) +#define ERROR_3(MESSAGE,ARG1,ARG2,ARG3) ERROR(FORMAT_3(MESSAGE,ARG1,ARG2,ARG3)) +#define ERROR_4(MESSAGE,ARG1,ARG2,ARG3,ARG4) ERROR(FORMAT_4(MESSAGE,ARG1,ARG2,ARG3,ARG4)) +#define ERROR_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5) ERROR(FORMAT_5(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5)) +#define ERROR_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) ERROR(FORMAT_6(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6)) +#define ERROR_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) ERROR(FORMAT_7(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7)) +#define ERROR_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) ERROR(FORMAT_8(MESSAGE,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8)) + +/* ------------------------------------------- +Macro: MESSAGE_WITH_TITLE() + Record a single line in the RPT log. + +Parameters: + TITLE - Title of log message + MESSAGE - Body of message + +Example: + (begin example) + MESSAGE_WITH_TITLE("Value found","Value of frog found in config "); + (end) + +Author: + Killswitch +------------------------------------------- */ +#define MESSAGE_WITH_TITLE(TITLE,MESSAGE) LOG_SYS_FILELINENUMBERS(TITLE,MESSAGE) + +/* ------------------------------------------- +Macro: RETDEF() + If a variable is undefined, return the default value. Otherwise, return the + variable itself. + +Parameters: + VARIABLE - the variable to check + DEFAULT_VALUE - the default value to use if variable is undefined + +Example: + (begin example) + // _var is undefined + hintSilent format ["_var=%1", RETDEF(_var,5)]; // "_var=5" + _var = 7; + hintSilent format ["_var=%1", RETDEF(_var,5)]; // "_var=7" + (end example) +Author: + 654wak654 +------------------------------------------- */ +#define RETDEF(VARIABLE,DEFAULT_VALUE) (if (isNil {VARIABLE}) then [{DEFAULT_VALUE}, {VARIABLE}]) + +/* ------------------------------------------- +Macro: RETNIL() + If a variable is undefined, return the value nil. Otherwise, return the + variable itself. + +Parameters: + VARIABLE - the variable to check + +Example: + (begin example) + // _var is undefined + hintSilent format ["_var=%1", RETNIL(_var)]; // "_var=any" + (end example) + +Author: + Alef (see CBA issue #8514) +------------------------------------------- */ +#define RETNIL(VARIABLE) RETDEF(VARIABLE,nil) + +/* ------------------------------------------- +Macros: TRACE_n() + Log a message and 1-8 variables to the RPT log. + + Only run if is defined. + + TRACE_1(MESSAGE,A) - Log 1 variable. + TRACE_2(MESSAGE,A,B) - Log 2 variables. + TRACE_3(MESSAGE,A,B,C) - Log 3 variables. + TRACE_4(MESSAGE,A,B,C,D) - Log 4 variables. + TRACE_5(MESSAGE,A,B,C,D,E) - Log 5 variables. + TRACE_6(MESSAGE,A,B,C,D,E,F) - Log 6 variables. + TRACE_7(MESSAGE,A,B,C,D,E,F,G) - Log 7 variables. + TRACE_8(MESSAGE,A,B,C,D,E,F,G,H) - Log 8 variables. + TRACE_9(MESSAGE,A,B,C,D,E,F,G,H,I) - Log 9 variables. + +Parameters: + MESSAGE - Message to add to the trace [String] + A..H - Variable names to log values of [Any] + +Example: + (begin example) + TRACE_3("After takeoff",_vehicle player,getPos (_vehicle player), getPosASL (_vehicle player)); + (end) + +Author: + Spooner +------------------------------------------- */ +#define PFORMAT_1(MESSAGE,A) \ + format ['%1: A=%2', MESSAGE, RETNIL(A)] + +#define PFORMAT_2(MESSAGE,A,B) \ + format ['%1: A=%2, B=%3', MESSAGE, RETNIL(A), RETNIL(B)] + +#define PFORMAT_3(MESSAGE,A,B,C) \ + format ['%1: A=%2, B=%3, C=%4', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C)] + +#define PFORMAT_4(MESSAGE,A,B,C,D) \ + format ['%1: A=%2, B=%3, C=%4, D=%5', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D)] + +#define PFORMAT_5(MESSAGE,A,B,C,D,E) \ + format ['%1: A=%2, B=%3, C=%4, D=%5, E=%6', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D), RETNIL(E)] + +#define PFORMAT_6(MESSAGE,A,B,C,D,E,F) \ + format ['%1: A=%2, B=%3, C=%4, D=%5, E=%6, F=%7', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D), RETNIL(E), RETNIL(F)] + +#define PFORMAT_7(MESSAGE,A,B,C,D,E,F,G) \ + format ['%1: A=%2, B=%3, C=%4, D=%5, E=%6, F=%7, G=%8', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D), RETNIL(E), RETNIL(F), RETNIL(G)] + +#define PFORMAT_8(MESSAGE,A,B,C,D,E,F,G,H) \ + format ['%1: A=%2, B=%3, C=%4, D=%5, E=%6, F=%7, G=%8, H=%9', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D), RETNIL(E), RETNIL(F), RETNIL(G), RETNIL(H)] + +#define PFORMAT_9(MESSAGE,A,B,C,D,E,F,G,H,I) \ + format ['%1: A=%2, B=%3, C=%4, D=%5, E=%6, F=%7, G=%8, H=%9, I=%10', MESSAGE, RETNIL(A), RETNIL(B), RETNIL(C), RETNIL(D), RETNIL(E), RETNIL(F), RETNIL(G), RETNIL(H), RETNIL(I)] + + +#ifdef DEBUG_MODE_FULL +#define TRACE_1(MESSAGE,A) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_1(str diag_frameNo + ' ' + (MESSAGE),A)) +#define TRACE_2(MESSAGE,A,B) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_2(str diag_frameNo + ' ' + (MESSAGE),A,B)) +#define TRACE_3(MESSAGE,A,B,C) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_3(str diag_frameNo + ' ' + (MESSAGE),A,B,C)) +#define TRACE_4(MESSAGE,A,B,C,D) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_4(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D)) +#define TRACE_5(MESSAGE,A,B,C,D,E) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_5(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D,E)) +#define TRACE_6(MESSAGE,A,B,C,D,E,F) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_6(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D,E,F)) +#define TRACE_7(MESSAGE,A,B,C,D,E,F,G) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_7(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D,E,F,G)) +#define TRACE_8(MESSAGE,A,B,C,D,E,F,G,H) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_8(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D,E,F,G,H)) +#define TRACE_9(MESSAGE,A,B,C,D,E,F,G,H,I) LOG_SYS_FILELINENUMBERS('TRACE',PFORMAT_9(str diag_frameNo + ' ' + (MESSAGE),A,B,C,D,E,F,G,H,I)) +#else +#define TRACE_1(MESSAGE,A) /* disabled */ +#define TRACE_2(MESSAGE,A,B) /* disabled */ +#define TRACE_3(MESSAGE,A,B,C) /* disabled */ +#define TRACE_4(MESSAGE,A,B,C,D) /* disabled */ +#define TRACE_5(MESSAGE,A,B,C,D,E) /* disabled */ +#define TRACE_6(MESSAGE,A,B,C,D,E,F) /* disabled */ +#define TRACE_7(MESSAGE,A,B,C,D,E,F,G) /* disabled */ +#define TRACE_8(MESSAGE,A,B,C,D,E,F,G,H) /* disabled */ +#define TRACE_9(MESSAGE,A,B,C,D,E,F,G,H,I) /* disabled */ +#endif + +/* ------------------------------------------- +Group: General +------------------------------------------- */ + +// ************************************* +// Internal Functions +#define DOUBLES(var1,var2) ##var1##_##var2 +#define TRIPLES(var1,var2,var3) ##var1##_##var2##_##var3 +#define QUOTE(var1) #var1 + +#ifdef MODULAR + #define COMPONENT_T DOUBLES(t,COMPONENT) + #define COMPONENT_M DOUBLES(m,COMPONENT) + #define COMPONENT_S DOUBLES(s,COMPONENT) + #define COMPONENT_C DOUBLES(c,COMPONENT) + #define COMPONENT_F COMPONENT_C +#else + #define COMPONENT_T COMPONENT + #define COMPONENT_M COMPONENT + #define COMPONENT_S COMPONENT + #define COMPONENT_F COMPONENT + #define COMPONENT_C COMPONENT +#endif + +/* ------------------------------------------- +Macro: INC() + +Description: + Increase a number by one. + +Parameters: + VAR - Variable to increment [Number] + +Example: + (begin example) + _counter = 0; + INC(_counter); + // _counter => 1 + (end) + +Author: + Spooner +------------------------------------------- */ +#define INC(var) var = (var) + 1 + +/* ------------------------------------------- +Macro: DEC() + +Description: + Decrease a number by one. + +Parameters: + VAR - Variable to decrement [Number] + +Example: + (begin example) + _counter = 99; + DEC(_counter); + // _counter => 98 + (end) + +Author: + Spooner +------------------------------------------- */ +#define DEC(var) var = (var) - 1 + +/* ------------------------------------------- +Macro: ADD() + +Description: + Add a value to a variable. Variable and value should be both Numbers or both Strings. + +Parameters: + VAR - Variable to add to [Number or String] + VALUE - Value to add [Number or String] + +Examples: + (begin example) + _counter = 2; + ADD(_counter,3); + // _counter => 5 + (end) + (begin example) + _str = "hello"; + ADD(_str," "); + ADD(_str,"Fred"); + // _str => "hello Fred" + (end) + +Author: + Sickboy +------------------------------------------- */ +#define ADD(var1,var2) var1 = (var1) + (var2) + +/* ------------------------------------------- +Macro: SUB() + +Description: + Subtract a value from a number variable. VAR and VALUE should both be Numbers. + +Parameters: + VAR - Variable to subtract from [Number] + VALUE - Value to subtract [Number] + +Examples: + (begin example) + _numChickens = 2; + SUB(_numChickens,3); + // _numChickens => -1 + (end) +------------------------------------------- */ +#define SUB(var1,var2) var1 = (var1) - (var2) + +/* ------------------------------------------- +Macro: REM() + +Description: + Remove an element from an array each time it occurs. + + This recreates the entire array, so use BIS_fnc_removeIndex if modification of the original array is required + or if only one of the elements that matches ELEMENT needs to be removed. + +Parameters: + ARRAY - Array to modify [Array] + ELEMENT - Element to remove [Any] + +Examples: + (begin example) + _array = [1, 2, 3, 4, 3, 8]; + REM(_array,3); + // _array = [1, 2, 4, 8]; + (end) + +Author: + Spooner +------------------------------------------- */ +#define REM(var1,var2) SUB(var1,[var2]) + +/* ------------------------------------------- +Macro: PUSH() + +Description: + Appends a single value onto the end of an ARRAY. Change is made to the ARRAY itself, not creating a new array. + +Parameters: + ARRAY - Array to push element onto [Array] + ELEMENT - Element to push [Any] + +Examples: + (begin example) + _fish = ["blue", "green", "smelly"]; + PUSH(_fish,"monkey-flavoured"); + // _fish => ["blue", "green", "smelly", "monkey-flavoured"] + (end) + +Author: + Spooner +------------------------------------------- */ +#define PUSH(var1,var2) (var1) pushBack (var2) + +/* ------------------------------------------- +Macro: MAP() +Description: + Applies given code to each element of the array, then assigns the + resulting array to the original +Parameters: + ARRAY - Array to be modified + CODE - Code that'll be applied to each element of the array. +Example: + (begin example) + _array = [1, 2, 3, 4, 3, 8]; + MAP(_array,_x + 1); + // _array is now [2, 3, 4, 5, 4, 9]; + (end) +Author: + 654wak654 +------------------------------------------- */ +#define MAP(ARR,CODE) ARR = ARR apply {CODE} + +/* ------------------------------------------- +Macro: FILTER() +Description: + Filters an array based on given code, then assigns the resulting array + to the original +Parameters: + ARRAY - Array to be filtered + CODE - Condition to pick elements +Example: + (begin example) + _array = [1, 2, 3, 4, 3, 8]; + FILTER(_array,_x % 2 == 0) + // _array is now [2, 4, 8]; + (end) +Author: + Commy2 +------------------------------------------- */ +#define FILTER(ARR,CODE) ARR = ARR select {CODE} + +/* ------------------------------------------- +Macro: UNIQUE() +Description: + Removes duplicate values in given array +Parameters: + ARRAY - The array to be modified +Example: + (begin example) + _someArray = [4, 4, 5, 5, 5, 2]; + UNIQUE(_someArray); + // _someArray is now [4, 5, 2] + (end) +Author: + Commy2 +------------------------------------------- */ +#define UNIQUE(ARR) ARR = ARR arrayIntersect ARR + +/* ------------------------------------------- +Macro: INTERSECTION() +Description: + Finds unique common elements between two arrays and assigns them + to the first array +Parameters: + ARRAY0 - The array to be modified + ARRAY1 - The array to find intersections with +Example: + (begin example) + _someArray = [1, 2, 3, 4, 5, 5]; + _anotherArray = [4, 5, 6, 7]; + INTERSECTION(_someArray,_anotherArray); + // _someArray is now [4, 5] + (end) +Author: + 654wak654 +------------------------------------------- */ +#define INTERSECTION(ARG0,ARG1) ARG0 = ARG0 arrayIntersect (ARG1) + +/* ------------------------------------------- +Macro: ISNILS() + +Description: + Sets a variable with a value, but only if it is undefined. + +Parameters: + VARIABLE - Variable to set [Any, not nil] + DEFAULT_VALUE - Value to set VARIABLE to if it is undefined [Any, not nil] + +Examples: + (begin example) + // _fish is undefined + ISNILS(_fish,0); + // _fish => 0 + (end) + (begin example) + _fish = 12; + // ...later... + ISNILS(_fish,0); + // _fish => 12 + (end) + +Author: + Sickboy +------------------------------------------- */ +#define ISNILS(VARIABLE,DEFAULT_VALUE) if (isNil #VARIABLE) then { ##VARIABLE = ##DEFAULT_VALUE } +#define ISNILS2(var1,var2,var3,var4) ISNILS(TRIPLES(var1,var2,var3),var4) +#define ISNILS3(var1,var2,var3) ISNILS(DOUBLES(var1,var2),var3) +#define ISNIL(var1,var2) ISNILS2(PREFIX,COMPONENT,var1,var2) +#define ISNILMAIN(var1,var2) ISNILS3(PREFIX,var1,var2) + +#define GETVARS(var1,var2,var3) (##var1##_##var2 getVariable #var3) +#define GETVARMAINS(var1,var2) GETVARS(var1,MAINLOGIC,var2) + +#ifndef PATHTO_SYS + #define PATHTO_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3.sqf +#endif +#ifndef PATHTOF_SYS + #define PATHTOF_SYS(var1,var2,var3) \MAINPREFIX\##var1\SUBPREFIX\##var2\##var3 +#endif + +#ifndef PATHTOF2_SYS + #define PATHTOF2_SYS(var1,var2,var3) MAINPREFIX\##var1\SUBPREFIX\##var2\##var3 +#endif + +#define PATHTO_R(var1) PATHTOF2_SYS(PREFIX,COMPONENT_C,var1) +#define PATHTO_T(var1) PATHTOF_SYS(PREFIX,COMPONENT_T,var1) +#define PATHTO_M(var1) PATHTOF_SYS(PREFIX,COMPONENT_M,var1) +#define PATHTO_S(var1) PATHTOF_SYS(PREFIX,COMPONENT_S,var1) +#define PATHTO_C(var1) PATHTOF_SYS(PREFIX,COMPONENT_C,var1) +#define PATHTO_F(var1) PATHTO_SYS(PREFIX,COMPONENT_F,var1) + +// Already quoted "" +#define QPATHTO_R(var1) QUOTE(PATHTO_R(var1)) +#define QPATHTO_T(var1) QUOTE(PATHTO_T(var1)) +#define QPATHTO_M(var1) QUOTE(PATHTO_M(var1)) +#define QPATHTO_S(var1) QUOTE(PATHTO_S(var1)) +#define QPATHTO_C(var1) QUOTE(PATHTO_C(var1)) +#define QPATHTO_F(var1) QUOTE(PATHTO_F(var1)) + +// This only works for binarized configs after recompiling the pbos +// TODO: Reduce amount of calls / code.. +#define COMPILE_FILE2_CFG_SYS(var1) compile preProcessFileLineNumbers var1 +#define COMPILE_FILE2_SYS(var1) COMPILE_FILE2_CFG_SYS(var1) + +#define COMPILE_FILE_SYS(var1,var2,var3) COMPILE_FILE2_SYS('PATHTO_SYS(var1,var2,var3)') +#define COMPILE_FILE_CFG_SYS(var1,var2,var3) COMPILE_FILE2_CFG_SYS('PATHTO_SYS(var1,var2,var3)') + +#define SETVARS(var1,var2) ##var1##_##var2 setVariable +#define SETVARMAINS(var1) SETVARS(var1,MAINLOGIC) +#define GVARMAINS(var1,var2) ##var1##_##var2## +#define CFGSETTINGSS(var1,var2) configFile >> "CfgSettings" >> #var1 >> #var2 +//#define SETGVARS(var1,var2,var3) ##var1##_##var2##_##var3 = +//#define SETGVARMAINS(var1,var2) ##var1##_##var2 = + +// Compile-Once, JIT: On first use. +// #define PREPMAIN_SYS(var1,var2,var3) ##var1##_fnc_##var3 = { ##var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)); if (isNil "_this") then { call ##var1##_fnc_##var3 } else { _this call ##var1##_fnc_##var3 } } +// #define PREP_SYS(var1,var2,var3) ##var1##_##var2##_fnc_##var3 = { ##var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)); if (isNil "_this") then { call ##var1##_##var2##_fnc_##var3 } else { _this call ##var1##_##var2##_fnc_##var3 } } +// #define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = { ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)); if (isNil "_this") then { call ##var1##_##var2##_fnc_##var4 } else { _this call ##var1##_##var2##_fnc_##var4 } } + +// Compile-Once, at Macro. As opposed to Compile-Once, on first use. +#define PREPMAIN_SYS(var1,var2,var3) ##var1##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) +#define PREP_SYS(var1,var2,var3) ##var1##_##var2##_fnc_##var3 = COMPILE_FILE_SYS(var1,var2,DOUBLES(fnc,var3)) +#define PREP_SYS2(var1,var2,var3,var4) ##var1##_##var2##_fnc_##var4 = COMPILE_FILE_SYS(var1,var3,DOUBLES(fnc,var4)) + +#define LSTR(var1) TRIPLES(ADDON,STR,var1) + +#ifndef DEBUG_SETTINGS + #define DEBUG_SETTINGS [false, true, false] +#endif + +#define MSG_INIT QUOTE(Initializing: ADDON version: VERSION) + +// ************************************* +// User Functions +#define CFGSETTINGS CFGSETTINGSS(PREFIX,COMPONENT) +#define PATHTO(var1) PATHTO_SYS(PREFIX,COMPONENT_F,var1) +#define PATHTOF(var1) PATHTOF_SYS(PREFIX,COMPONENT,var1) +#define PATHTOEF(var1,var2) PATHTOF_SYS(PREFIX,var1,var2) +#define QPATHTOF(var1) QUOTE(PATHTOF(var1)) +#define QPATHTOEF(var1,var2) QUOTE(PATHTOEF(var1,var2)) + +#define COMPILE_FILE(var1) COMPILE_FILE_SYS(PREFIX,COMPONENT_F,var1) +#define COMPILE_FILE_CFG(var1) COMPILE_FILE_CFG_SYS(PREFIX,COMPONENT_F,var1) +#define COMPILE_FILE2(var1) COMPILE_FILE2_SYS('var1') +#define COMPILE_FILE2_CFG(var1) COMPILE_FILE2_CFG_SYS('var1') + + +#define VERSIONING_SYS(var1) class CfgSettings \ +{ \ + class CBA \ + { \ + class Versioning \ + { \ + class var1 \ + { \ + }; \ + }; \ + }; \ +}; + +#define VERSIONING VERSIONING_SYS(PREFIX) + +/* ------------------------------------------- +Macro: GVAR() + Get full variable identifier for a global variable owned by this component. + +Parameters: + VARIABLE - Partial name of global variable owned by this component [Any]. + +Example: + (begin example) + GVAR(frog) = 12; + // In SPON_FrogDancing component, equivalent to SPON_FrogDancing_frog = 12 + (end) + +Author: + Sickboy +------------------------------------------- */ +#define GVAR(var1) DOUBLES(ADDON,var1) +#define EGVAR(var1,var2) TRIPLES(PREFIX,var1,var2) +#define QGVAR(var1) QUOTE(GVAR(var1)) +#define QEGVAR(var1,var2) QUOTE(EGVAR(var1,var2)) +#define QQGVAR(var1) QUOTE(QGVAR(var1)) +#define QQEGVAR(var1,var2) QUOTE(QEGVAR(var1,var2)) + +/* ------------------------------------------- +Macro: GVARMAIN() + Get full variable identifier for a global variable owned by this addon. + +Parameters: + VARIABLE - Partial name of global variable owned by this addon [Any]. + +Example: + (begin example) + GVARMAIN(frog) = 12; + // In SPON_FrogDancing component, equivalent to SPON_frog = 12 + (end) + +Author: + Sickboy +------------------------------------------- */ +#define GVARMAIN(var1) GVARMAINS(PREFIX,var1) +#define QGVARMAIN(var1) QUOTE(GVARMAIN(var1)) +#define QQGVARMAIN(var1) QUOTE(QGVARMAIN(var1)) +// TODO: What's this? +#define SETTINGS DOUBLES(PREFIX,settings) +#define CREATELOGIC CREATELOGICS(PREFIX,COMPONENT) +#define CREATELOGICGLOBAL CREATELOGICGLOBALS(PREFIX,COMPONENT) +#define CREATELOGICGLOBALTEST CREATELOGICGLOBALTESTS(PREFIX,COMPONENT) +#define CREATELOGICLOCAL CREATELOGICLOCALS(PREFIX,COMPONENT) +#define CREATELOGICMAIN CREATELOGICS(PREFIX,MAINLOGIC) +#define GETVAR(var1) GETVARS(PREFIX,COMPONENT,var1) +#define SETVAR SETVARS(PREFIX,COMPONENT) +#define SETVARMAIN SETVARMAINS(PREFIX) +#define IFCOUNT(var1,var2,var3) if (count ##var1 > ##var2) then { ##var3 = ##var1 select ##var2 }; + +//#define PREP(var1) PREP_SYS(PREFIX,COMPONENT_F,var1) + +#ifdef DISABLE_COMPILE_CACHE + #define PREP(var1) TRIPLES(ADDON,fnc,var1) = compile preProcessFileLineNumbers 'PATHTO_SYS(PREFIX,COMPONENT_F,DOUBLES(fnc,var1))' + #define PREPMAIN(var1) TRIPLES(PREFIX,fnc,var1) = compile preProcessFileLineNumbers 'PATHTO_SYS(PREFIX,COMPONENT_F,DOUBLES(fnc,var1))' +#else + #define PREP(var1) ['PATHTO_SYS(PREFIX,COMPONENT_F,DOUBLES(fnc,var1))', 'TRIPLES(ADDON,fnc,var1)'] call SLX_XEH_COMPILE_NEW + #define PREPMAIN(var1) ['PATHTO_SYS(PREFIX,COMPONENT_F,DOUBLES(fnc,var1))', 'TRIPLES(PREFIX,fnc,var1)'] call SLX_XEH_COMPILE_NEW +#endif + +#ifdef RECOMPILE + #undef RECOMPILE + #define RECOMPILE recompile = 1 +#else + #define RECOMPILE recompile = 0 +#endif + +/* ------------------------------------------- +Macro: PATHTO_FNC() + +Description: + Defines a function inside CfgFunctions. + + Full file path in addons: + '\MAINPREFIX\PREFIX\SUBPREFIX\COMPONENT\fnc_.sqf' + Define 'RECOMPILE' to enable recompiling. + +Parameters: + FUNCTION NAME - Name of the function, unquoted + +Examples: + (begin example) + // file name: fnc_addPerFrameHandler.sqf + class CfgFunctions { + class CBA { + class Misc { + PATHTO_FNC(addPerFrameHandler); + }; + }; + }; + // -> CBA_fnc_addPerFrameHandler + (end) + +Author: + dixon13, commy2 + ------------------------------------------- */ +#define PATHTO_FNC(func) class func {\ + file = QPATHTOF(DOUBLES(fnc,func).sqf);\ + RECOMPILE;\ +} + +#define FUNC(var1) TRIPLES(ADDON,fnc,var1) +#define FUNCMAIN(var1) TRIPLES(PREFIX,fnc,var1) +#define FUNC_INNER(var1,var2) TRIPLES(DOUBLES(PREFIX,var1),fnc,var2) +#define EFUNC(var1,var2) FUNC_INNER(var1,var2) +#define QFUNC(var1) QUOTE(FUNC(var1)) +#define QFUNCMAIN(var1) QUOTE(FUNCMAIN(var1)) +#define QFUNC_INNER(var1,var2) QUOTE(FUNC_INNER(var1,var2)) +#define QEFUNC(var1,var2) QUOTE(EFUNC(var1,var2)) +#define QQFUNC(var1) QUOTE(QFUNC(var1)) +#define QQFUNCMAIN(var1) QUOTE(QFUNCMAIN(var1)) +#define QQFUNC_INNER(var1,var2) QUOTE(QFUNC_INNER(var1,var2)) +#define QQEFUNC(var1,var2) QUOTE(QEFUNC(var1,var2)) + +#ifndef PRELOAD_ADDONS + #define PRELOAD_ADDONS class CfgAddons \ +{ \ + class PreloadAddons \ + { \ + class ADDON \ + { \ + list[]={ QUOTE(ADDON) }; \ + }; \ + }; \ +} +#endif + +/* ------------------------------------------- +Macros: ARG_#() + Select from list of array arguments + +Parameters: + VARIABLE(1-8) - elements for the list + +Author: + Rommel +------------------------------------------- */ +#define ARG_1(A,B) ((A) select (B)) +#define ARG_2(A,B,C) (ARG_1(ARG_1(A,B),C)) +#define ARG_3(A,B,C,D) (ARG_1(ARG_2(A,B,C),D)) +#define ARG_4(A,B,C,D,E) (ARG_1(ARG_3(A,B,C,D),E)) +#define ARG_5(A,B,C,D,E,F) (ARG_1(ARG_4(A,B,C,D,E),F)) +#define ARG_6(A,B,C,D,E,F,G) (ARG_1(ARG_5(A,B,C,D,E,F),G)) +#define ARG_7(A,B,C,D,E,F,G,H) (ARG_1(ARG_6(A,B,C,D,E,E,F,G),H)) +#define ARG_8(A,B,C,D,E,F,G,H,I) (ARG_1(ARG_7(A,B,C,D,E,E,F,G,H),I)) + +/* ------------------------------------------- +Macros: ARR_#() + Create list from arguments. Useful for working around , in macro parameters. + 1-8 arguments possible. + +Parameters: + VARIABLE(1-8) - elements for the list + +Author: + Nou +------------------------------------------- */ +#define ARR_1(ARG1) ARG1 +#define ARR_2(ARG1,ARG2) ARG1, ARG2 +#define ARR_3(ARG1,ARG2,ARG3) ARG1, ARG2, ARG3 +#define ARR_4(ARG1,ARG2,ARG3,ARG4) ARG1, ARG2, ARG3, ARG4 +#define ARR_5(ARG1,ARG2,ARG3,ARG4,ARG5) ARG1, ARG2, ARG3, ARG4, ARG5 +#define ARR_6(ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) ARG1, ARG2, ARG3, ARG4, ARG5, ARG6 +#define ARR_7(ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7 +#define ARR_8(ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8 + +/* ------------------------------------------- +Macros: FORMAT_#(STR, ARG1) + Format - Useful for working around , in macro parameters. + 1-8 arguments possible. + +Parameters: + STRING - string used by format + VARIABLE(1-8) - elements for usage in format + +Author: + Nou & Sickboy +------------------------------------------- */ +#define FORMAT_1(STR,ARG1) format[STR, ARG1] +#define FORMAT_2(STR,ARG1,ARG2) format[STR, ARG1, ARG2] +#define FORMAT_3(STR,ARG1,ARG2,ARG3) format[STR, ARG1, ARG2, ARG3] +#define FORMAT_4(STR,ARG1,ARG2,ARG3,ARG4) format[STR, ARG1, ARG2, ARG3, ARG4] +#define FORMAT_5(STR,ARG1,ARG2,ARG3,ARG4,ARG5) format[STR, ARG1, ARG2, ARG3, ARG4, ARG5] +#define FORMAT_6(STR,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6) format[STR, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6] +#define FORMAT_7(STR,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) format[STR, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7] +#define FORMAT_8(STR,ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7,ARG8) format[STR, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8] + +// CONTROL(46) 12 +#define DISPLAY(A) (findDisplay A) +#define CONTROL(A) DISPLAY(A) displayCtrl + +/* ------------------------------------------- +Macros: IS_x() + Checking the data types of variables. + + IS_ARRAY() - Array + IS_BOOL() - Boolean + IS_BOOLEAN() - UI display handle(synonym for ) + IS_CODE() - Code block (i.e a compiled function) + IS_CONFIG() - Configuration + IS_CONTROL() - UI control handle. + IS_DISPLAY() - UI display handle. + IS_FUNCTION() - A compiled function (synonym for ) + IS_GROUP() - Group. + IS_INTEGER() - Is a number a whole number? + IS_LOCATION() - World location. + IS_NUMBER() - A floating point number (synonym for ) + IS_OBJECT() - World object. + IS_SCALAR() - Floating point number. + IS_SCRIPT() - A script handle (as returned by execVM and spawn commands). + IS_SIDE() - Game side. + IS_STRING() - World object. + IS_TEXT() - Structured text. + +Parameters: + VARIABLE - Variable to check if it is of a particular type [Any, not nil] + +Author: + Spooner +------------------------------------------- */ +#define IS_META_SYS(VAR,TYPE) (if (isNil {VAR}) then {false} else {(VAR) isEqualType TYPE}) +#define IS_ARRAY(VAR) IS_META_SYS(VAR,[]) +#define IS_BOOL(VAR) IS_META_SYS(VAR,false) +#define IS_CODE(VAR) IS_META_SYS(VAR,{}) +#define IS_CONFIG(VAR) IS_META_SYS(VAR,configNull) +#define IS_CONTROL(VAR) IS_META_SYS(VAR,controlNull) +#define IS_DISPLAY(VAR) IS_META_SYS(VAR,displayNull) +#define IS_GROUP(VAR) IS_META_SYS(VAR,grpNull) +#define IS_OBJECT(VAR) IS_META_SYS(VAR,objNull) +#define IS_SCALAR(VAR) IS_META_SYS(VAR,0) +#define IS_SCRIPT(VAR) IS_META_SYS(VAR,scriptNull) +#define IS_SIDE(VAR) IS_META_SYS(VAR,west) +#define IS_STRING(VAR) IS_META_SYS(VAR,"STRING") +#define IS_TEXT(VAR) IS_META_SYS(VAR,text "") +#define IS_LOCATION(VAR) IS_META_SYS(VAR,locationNull) + +#define IS_BOOLEAN(VAR) IS_BOOL(VAR) +#define IS_FUNCTION(VAR) IS_CODE(VAR) +#define IS_INTEGER(VAR) (if (IS_SCALAR(VAR)) then {floor (VAR) == (VAR)} else {false}) +#define IS_NUMBER(VAR) IS_SCALAR(VAR) + +#define FLOAT_TO_STRING(num) (str parseNumber (str (_this%_this) + str floor abs _this) + "." + (str (abs _this-floor abs _this) select [2]) + "0") + +/* ------------------------------------------- +Macro: SCRIPT() + Sets name of script (relies on PREFIX and COMPONENT values being #defined). + +Parameters: + NAME - Name of script [Indentifier] + +Example: + (begin example) + SCRIPT(eradicateMuppets); + (end) + +Author: + Spooner +------------------------------------------- */ +#define SCRIPT(NAME) \ + scriptName 'PREFIX\COMPONENT\NAME' + +/* ------------------------------------------- +Macros: EXPLODE_n() + DEPRECATED - Use param/params commands added in Arma 3 1.48 + + Splitting an ARRAY into a number of variables (A, B, C, etc). + + Note that this NOT does make the created variables private. + _PVT variants do. + + EXPLODE_1(ARRAY,A,B) - Split a 1-element array into separate variable. + EXPLODE_2(ARRAY,A,B) - Split a 2-element array into separate variables. + EXPLODE_3(ARRAY,A,B,C) - Split a 3-element array into separate variables. + EXPLODE_4(ARRAY,A,B,C,D) - Split a 4-element array into separate variables. + EXPLODE_5(ARRAY,A,B,C,D,E) - Split a 5-element array into separate variables. + EXPLODE_6(ARRAY,A,B,C,D,E,F) - Split a 6-element array into separate variables. + EXPLODE_7(ARRAY,A,B,C,D,E,F,G) - Split a 7-element array into separate variables. + EXPLODE_8(ARRAY,A,B,C,D,E,F,G,H) - Split a 8-element array into separate variables. + EXPLODE_9(ARRAY,A,B,C,D,E,F,G,H,I) - Split a 9-element array into separate variables. + +Parameters: + ARRAY - Array to read from [Array] + A..H - Names of variables to set from array [Identifier] + +Example: + (begin example) + _array = ["fred", 156.8, 120.9]; + EXPLODE_3(_array,_name,_height,_weight); + (end) + +Author: + Spooner +------------------------------------------- */ +#define EXPLODE_1_SYS(ARRAY,A) A = ARRAY param [0] +#define EXPLODE_1(ARRAY,A) EXPLODE_1_SYS(ARRAY,A); TRACE_1("EXPLODE_1, " + QUOTE(ARRAY),A) +#define EXPLODE_1_PVT(ARRAY,A) ARRAY params [#A]; TRACE_1("EXPLODE_1, " + QUOTE(ARRAY),A) + +#define EXPLODE_2_SYS(ARRAY,A,B) EXPLODE_1_SYS(ARRAY,A); B = ARRAY param [1] +#define EXPLODE_2(ARRAY,A,B) EXPLODE_2_SYS(ARRAY,A,B); TRACE_2("EXPLODE_2, " + QUOTE(ARRAY),A,B) +#define EXPLODE_2_PVT(ARRAY,A,B) ARRAY params [#A,#B]; TRACE_2("EXPLODE_2, " + QUOTE(ARRAY),A,B) + +#define EXPLODE_3_SYS(ARRAY,A,B,C) EXPLODE_2_SYS(ARRAY,A,B); C = ARRAY param [2] +#define EXPLODE_3(ARRAY,A,B,C) EXPLODE_3_SYS(ARRAY,A,B,C); TRACE_3("EXPLODE_3, " + QUOTE(ARRAY),A,B,C) +#define EXPLODE_3_PVT(ARRAY,A,B,C) ARRAY params [#A,#B,#C]; TRACE_3("EXPLODE_3, " + QUOTE(ARRAY),A,B,C) + +#define EXPLODE_4_SYS(ARRAY,A,B,C,D) EXPLODE_3_SYS(ARRAY,A,B,C); D = ARRAY param [3] +#define EXPLODE_4(ARRAY,A,B,C,D) EXPLODE_4_SYS(ARRAY,A,B,C,D); TRACE_4("EXPLODE_4, " + QUOTE(ARRAY),A,B,C,D) +#define EXPLODE_4_PVT(ARRAY,A,B,C,D) ARRAY params [#A,#B,#C,#D]; TRACE_4("EXPLODE_4, " + QUOTE(ARRAY),A,B,C,D) + +#define EXPLODE_5_SYS(ARRAY,A,B,C,D,E) EXPLODE_4_SYS(ARRAY,A,B,C,D); E = ARRAY param [4] +#define EXPLODE_5(ARRAY,A,B,C,D,E) EXPLODE_5_SYS(ARRAY,A,B,C,D,E); TRACE_5("EXPLODE_5, " + QUOTE(ARRAY),A,B,C,D,E) +#define EXPLODE_5_PVT(ARRAY,A,B,C,D,E) ARRAY params [#A,#B,#C,#D,#E]; TRACE_5("EXPLODE_5, " + QUOTE(ARRAY),A,B,C,D,E) + +#define EXPLODE_6_SYS(ARRAY,A,B,C,D,E,F) EXPLODE_5_SYS(ARRAY,A,B,C,D,E); F = ARRAY param [5] +#define EXPLODE_6(ARRAY,A,B,C,D,E,F) EXPLODE_6_SYS(ARRAY,A,B,C,D,E,F); TRACE_6("EXPLODE_6, " + QUOTE(ARRAY),A,B,C,D,E,F) +#define EXPLODE_6_PVT(ARRAY,A,B,C,D,E,F) ARRAY params [#A,#B,#C,#D,#E,#F]; TRACE_6("EXPLODE_6, " + QUOTE(ARRAY),A,B,C,D,E,F) + +#define EXPLODE_7_SYS(ARRAY,A,B,C,D,E,F,G) EXPLODE_6_SYS(ARRAY,A,B,C,D,E,F); G = ARRAY param [6] +#define EXPLODE_7(ARRAY,A,B,C,D,E,F,G) EXPLODE_7_SYS(ARRAY,A,B,C,D,E,F,G); TRACE_7("EXPLODE_7, " + QUOTE(ARRAY),A,B,C,D,E,F,G) +#define EXPLODE_7_PVT(ARRAY,A,B,C,D,E,F,G) ARRAY params [#A,#B,#C,#D,#E,#F,#G]; TRACE_7("EXPLODE_7, " + QUOTE(ARRAY),A,B,C,D,E,F,G) + +#define EXPLODE_8_SYS(ARRAY,A,B,C,D,E,F,G,H) EXPLODE_7_SYS(ARRAY,A,B,C,D,E,F,G); H = ARRAY param [7] +#define EXPLODE_8(ARRAY,A,B,C,D,E,F,G,H) EXPLODE_8_SYS(ARRAY,A,B,C,D,E,F,G,H); TRACE_8("EXPLODE_8, " + QUOTE(ARRAY),A,B,C,D,E,F,G,H) +#define EXPLODE_8_PVT(ARRAY,A,B,C,D,E,F,G,H) ARRAY params [#A,#B,#C,#D,#E,#F,#G,#H]; TRACE_8("EXPLODE_8, " + QUOTE(ARRAY),A,B,C,D,E,F,G,H) + +#define EXPLODE_9_SYS(ARRAY,A,B,C,D,E,F,G,H,I) EXPLODE_8_SYS(ARRAY,A,B,C,D,E,F,G,H); I = ARRAY param [8] +#define EXPLODE_9(ARRAY,A,B,C,D,E,F,G,H,I) EXPLODE_9_SYS(ARRAY,A,B,C,D,E,F,G,H,I); TRACE_9("EXPLODE_9, " + QUOTE(ARRAY),A,B,C,D,E,F,G,H,I) +#define EXPLODE_9_PVT(ARRAY,A,B,C,D,E,F,G,H,I) ARRAY params [#A,#B,#C,#D,#E,#F,#G,#H,#I]; TRACE_9("EXPLODE_9, " + QUOTE(ARRAY),A,B,C,D,E,F,G,H,I) + +/* ------------------------------------------- +Macro: xSTRING() + Get full string identifier from a stringtable owned by this component. + +Parameters: + VARIABLE - Partial name of global variable owned by this component [Any]. + +Example: + ADDON is CBA_Balls. + (begin example) + // Localized String (localize command must still be used with it) + LSTRING(Example); // STR_CBA_Balls_Example; + // Config String (note the $) + CSTRING(Example); // $STR_CBA_Balls_Example; + (end) + +Author: + Jonpas +------------------------------------------- */ +#ifndef STRING_MACROS_GUARD +#define STRING_MACROS_GUARD + #define LSTRING(var1) QUOTE(TRIPLES(STR,ADDON,var1)) + #define ELSTRING(var1,var2) QUOTE(TRIPLES(STR,DOUBLES(PREFIX,var1),var2)) + #define CSTRING(var1) QUOTE(TRIPLES($STR,ADDON,var1)) + #define ECSTRING(var1,var2) QUOTE(TRIPLES($STR,DOUBLES(PREFIX,var1),var2)) +#endif + + +/* ------------------------------------------- +Group: Managing Function Parameters +------------------------------------------- */ + +/* ------------------------------------------- +Macros: PARAMS_n() + DEPRECATED - Use param/params commands added in Arma 3 1.48 + + Setting variables based on parameters passed to a function. + + Each parameter is defines as private and set to the appropriate value from _this. + + PARAMS_1(A) - Get 1 parameter from the _this array (or _this if it's not an array). + PARAMS_2(A,B) - Get 2 parameters from the _this array. + PARAMS_3(A,B,C) - Get 3 parameters from the _this array. + PARAMS_4(A,B,C,D) - Get 4 parameters from the _this array. + PARAMS_5(A,B,C,D,E) - Get 5 parameters from the _this array. + PARAMS_6(A,B,C,D,E,F) - Get 6 parameters from the _this array. + PARAMS_7(A,B,C,D,E,F,G) - Get 7 parameters from the _this array. + PARAMS_8(A,B,C,D,E,F,G,H) - Get 8 parameters from the _this array. + +Parameters: + A..H - Name of variable to read from _this [Identifier] + +Example: + A function called like this: + (begin example) + [_name,_address,_telephone] call recordPersonalDetails; + (end) + expects 3 parameters and those variables could be initialised at the start of the function definition with: + (begin example) + recordPersonalDetails = { + PARAMS_3(_name,_address,_telephone); + // Rest of function follows... + }; + (end) + +Author: + Spooner +------------------------------------------- */ +#define PARAMS_1(A) EXPLODE_1_PVT(_this,A) +#define PARAMS_2(A,B) EXPLODE_2_PVT(_this,A,B) +#define PARAMS_3(A,B,C) EXPLODE_3_PVT(_this,A,B,C) +#define PARAMS_4(A,B,C,D) EXPLODE_4_PVT(_this,A,B,C,D) +#define PARAMS_5(A,B,C,D,E) EXPLODE_5_PVT(_this,A,B,C,D,E) +#define PARAMS_6(A,B,C,D,E,F) EXPLODE_6_PVT(_this,A,B,C,D,E,F) +#define PARAMS_7(A,B,C,D,E,F,G) EXPLODE_7_PVT(_this,A,B,C,D,E,F,G) +#define PARAMS_8(A,B,C,D,E,F,G,H) EXPLODE_8_PVT(_this,A,B,C,D,E,F,G,H) +#define PARAMS_9(A,B,C,D,E,F,G,H,I) EXPLODE_9_PVT(_this,A,B,C,D,E,F,G,H,I) + +/* ------------------------------------------- +Macro: DEFAULT_PARAM() + DEPRECATED - Use param/params commands added in Arma 3 1.48 + + Getting a default function parameter. This may be used together with to have a mix of required and + optional parameters. + +Parameters: + INDEX - Index of parameter in _this [Integer, 0+] + NAME - Name of the variable to set [Identifier] + DEF_VALUE - Default value to use in case the array is too short or the value at INDEX is nil [Any] + +Example: + A function called with optional parameters: + (begin example) + [_name] call myFunction; + [_name, _numberOfLegs] call myFunction; + [_name, _numberOfLegs, _hasAHead] call myFunction; + (end) + 1 required parameter and 2 optional parameters. Those variables could be initialised at the start of the function + definition with: + (begin example) + myFunction = { + PARAMS_1(_name); + DEFAULT_PARAM(1,_numberOfLegs,2); + DEFAULT_PARAM(2,_hasAHead,true); + // Rest of function follows... + }; + (end) + +Author: + Spooner +------------------------------------------- */ +#define DEFAULT_PARAM(INDEX,NAME,DEF_VALUE) \ + private [#NAME,"_this"]; \ + ISNILS(_this,[]); \ + NAME = _this param [INDEX, DEF_VALUE]; \ + TRACE_3("DEFAULT_PARAM",INDEX,NAME,DEF_VALUE) + +/* ------------------------------------------- +Group: Assertions +------------------------------------------- */ + +#define ASSERTION_ERROR(MESSAGE) ERROR_WITH_TITLE("Assertion failed!",MESSAGE) + +/* ------------------------------------------- +Macro: ASSERT_TRUE() + Asserts that a CONDITION is true. When an assertion fails, an error is raised with the given MESSAGE. + +Parameters: + CONDITION - Condition to assert as true [Boolean] + MESSSAGE - Message to display if (A OPERATOR B) is false [String] + +Example: + (begin example) + ASSERT_TRUE(_frogIsDead,"The frog is alive"); + (end) + +Author: + Spooner +------------------------------------------- */ +#define ASSERT_TRUE(CONDITION,MESSAGE) \ + if (not (CONDITION)) then \ + { \ + ASSERTION_ERROR('Assertion (CONDITION) failed!\n\n' + (MESSAGE)); \ + } + +/* ------------------------------------------- +Macro: ASSERT_FALSE() + Asserts that a CONDITION is false. When an assertion fails, an error is raised with the given MESSAGE. + +Parameters: + CONDITION - Condition to assert as false [Boolean] + MESSSAGE - Message to display if (A OPERATOR B) is true [String] + +Example: + (begin example) + ASSERT_FALSE(_frogIsDead,"The frog died"); + (end) + +Author: + Spooner +------------------------------------------- */ +#define ASSERT_FALSE(CONDITION,MESSAGE) \ + if (CONDITION) then \ + { \ + ASSERTION_ERROR('Assertion (not (CONDITION)) failed!\n\n' + (MESSAGE)) \ + } + +/* ------------------------------------------- +Macro: ASSERT_OP() + Asserts that (A OPERATOR B) is true. When an assertion fails, an error is raised with the given MESSAGE. + +Parameters: + A - First value [Any] + OPERATOR - Binary operator to use [Operator] + B - Second value [Any] + MESSSAGE - Message to display if (A OPERATOR B) is false. [String] + +Example: + (begin example) + ASSERT_OP(_fish,>,5,"Too few fish!"); + (end) + +Author: + Spooner +------------------------------------------- */ +#define ASSERT_OP(A,OPERATOR,B,MESSAGE) \ + if (not ((A) OPERATOR (B))) then \ + { \ + ASSERTION_ERROR('Assertion (A OPERATOR B) failed!\n' + 'A: ' + (str (A)) + '\n' + 'B: ' + (str (B)) + "\n\n" + (MESSAGE)); \ + } + +/* ------------------------------------------- +Macro: ASSERT_DEFINED() + Asserts that a VARIABLE is defined. When an assertion fails, an error is raised with the given MESSAGE.. + +Parameters: + VARIABLE - Variable to test if defined [String or Function]. + MESSAGE - Message to display if variable is undefined [String]. + +Examples: + (begin example) + ASSERT_DEFINED("_anUndefinedVar","Too few fish!"); + ASSERT_DEFINED({ obj getVariable "anUndefinedVar" },"Too many fish!"); + (end) + +Author: + Spooner +------------------------------------------- */ +#define ASSERT_DEFINED(VARIABLE,MESSAGE) \ + if (isNil VARIABLE) then \ + { \ + ASSERTION_ERROR('Assertion (VARIABLE is defined) failed!\n\n' + (MESSAGE)); \ + } + +/* ------------------------------------------- +Group: Unit tests +------------------------------------------- */ +#define TEST_SUCCESS(MESSAGE) MESSAGE_WITH_TITLE("Test OK",MESSAGE) +#define TEST_FAIL(MESSAGE) ERROR_WITH_TITLE("Test FAIL",MESSAGE) + +/* ------------------------------------------- +Macro: TEST_TRUE() + Tests that a CONDITION is true. + If the condition is not true, an error is raised with the given MESSAGE. + +Parameters: + CONDITION - Condition to assert as true [Boolean] + MESSSAGE - Message to display if (A OPERATOR B) is false [String] + +Example: + (begin example) + TEST_TRUE(_frogIsDead,"The frog is alive"); + (end) + +Author: + Killswitch +------------------------------------------- */ +#define TEST_TRUE(CONDITION, MESSAGE) \ + if (CONDITION) then \ + { \ + TEST_SUCCESS('(CONDITION)'); \ + } \ + else \ + { \ + TEST_FAIL('(CONDITION) ' + (MESSAGE)); \ + } + +/* ------------------------------------------- +Macro: TEST_FALSE() + Tests that a CONDITION is false. + If the condition is not false, an error is raised with the given MESSAGE. + +Parameters: + CONDITION - Condition to test as false [Boolean] + MESSSAGE - Message to display if (A OPERATOR B) is true [String] + +Example: + (begin example) + TEST_FALSE(_frogIsDead,"The frog died"); + (end) + +Author: + Killswitch +------------------------------------------- */ +#define TEST_FALSE(CONDITION, MESSAGE) \ + if (not (CONDITION)) then \ + { \ + TEST_SUCCESS('(not (CONDITION))'); \ + } \ + else \ + { \ + TEST_FAIL('(not (CONDITION)) ' + (MESSAGE)); \ + } + +/* ------------------------------------------- +Macro: TEST_OP() + Tests that (A OPERATOR B) is true. + If the test fails, an error is raised with the given MESSAGE. + +Parameters: + A - First value [Any] + OPERATOR - Binary operator to use [Operator] + B - Second value [Any] + MESSSAGE - Message to display if (A OPERATOR B) is false. [String] + +Example: + (begin example) + TEST_OP(_fish,>,5,"Too few fish!"); + (end) + +Author: + Killswitch +------------------------------------------- */ +#define TEST_OP(A,OPERATOR,B,MESSAGE) \ + if ((A) OPERATOR (B)) then \ + { \ + TEST_SUCCESS('(A OPERATOR B)') \ + } \ + else \ + { \ + TEST_FAIL('(A OPERATOR B)') \ + }; + +/* ------------------------------------------- +Macro: TEST_DEFINED_AND_OP() + Tests that A and B are defined and (A OPERATOR B) is true. + If the test fails, an error is raised with the given MESSAGE. + +Parameters: + A - First value [Any] + OPERATOR - Binary operator to use [Operator] + B - Second value [Any] + MESSSAGE - Message to display [String] + +Example: + (begin example) + TEST_OP(_fish,>,5,"Too few fish!"); + (end) + +Author: + Killswitch, PabstMirror +------------------------------------------- */ +#define TEST_DEFINED_AND_OP(A,OPERATOR,B,MESSAGE) \ + if (isNil #A) then { \ + TEST_FAIL('(A is not defined) ' + (MESSAGE)); \ + } else { \ + if (isNil #B) then { \ + TEST_FAIL('(B is not defined) ' + (MESSAGE)); \ + } else { \ + if ((A) OPERATOR (B)) then { \ + TEST_SUCCESS('(A OPERATOR B) ' + (MESSAGE)) \ + } else { \ + TEST_FAIL('(A OPERATOR B) ' + (MESSAGE)) \ + }; }; }; + + +/* ------------------------------------------- +Macro: TEST_DEFINED() + Tests that a VARIABLE is defined. + +Parameters: + VARIABLE - Variable to test if defined [String or Function]. + MESSAGE - Message to display if variable is undefined [String]. + +Examples: + (begin example) + TEST_DEFINED("_anUndefinedVar","Too few fish!"); + TEST_DEFINED({ obj getVariable "anUndefinedVar" },"Too many fish!"); + (end) + +Author: + Killswitch +------------------------------------------- */ +#define TEST_DEFINED(VARIABLE,MESSAGE) \ + if (not isNil VARIABLE) then \ + { \ + TEST_SUCCESS('(' + VARIABLE + ' is defined)'); \ + } \ + else \ + { \ + TEST_FAIL('(' + VARIABLE + ' is not defined)' + (MESSAGE)); \ + } + +/* ------------------------------------------- +Group: Managing Deprecation +------------------------------------------- */ + +/* ------------------------------------------- +Macro: DEPRECATE_SYS() + Allow deprecation of a function that has been renamed. + + Replaces an old OLD_FUNCTION (which will have PREFIX_ prepended) with a NEW_FUNCTION + (PREFIX_ prepended) with the intention that the old function will be disabled in the future. + + Shows a warning in RPT each time the deprecated function is used, but runs the new function. + +Parameters: + OLD_FUNCTION - Full name of old function [Identifier for function that does not exist any more] + NEW_FUNCTION - Full name of new function [Function] + +Example: + (begin example) + // After renaming CBA_fnc_frog as CBA_fnc_fish + DEPRECATE_SYS(CBA_fnc_frog,CBA_fnc_fish); + (end) + +Author: + Sickboy +------------------------------------------- */ +#define DEPRECATE_SYS(OLD_FUNCTION,NEW_FUNCTION) \ + OLD_FUNCTION = { \ + WARNING('Deprecated function used: OLD_FUNCTION (new: NEW_FUNCTION) in ADDON'); \ + if (isNil "_this") then { call NEW_FUNCTION } else { _this call NEW_FUNCTION }; \ + } + +/* ------------------------------------------- +Macro: DEPRECATE() + Allow deprecation of a function, in the current component, that has been renamed. + + Replaces an OLD_FUNCTION (which will have PREFIX_ prepended) with a NEW_FUNCTION + (PREFIX_ prepended) with the intention that the old function will be disabled in the future. + + Shows a warning in RPT each time the deprecated function is used, but runs the new function. + +Parameters: + OLD_FUNCTION - Name of old function, assuming PREFIX [Identifier for function that does not exist any more] + NEW_FUNCTION - Name of new function, assuming PREFIX [Function] + +Example: + (begin example) + // After renaming CBA_fnc_frog as CBA_fnc_fish + DEPRECATE(fnc_frog,fnc_fish); + (end) + +Author: + Sickboy +------------------------------------------- */ +#define DEPRECATE(OLD_FUNCTION,NEW_FUNCTION) \ + DEPRECATE_SYS(DOUBLES(PREFIX,OLD_FUNCTION),DOUBLES(PREFIX,NEW_FUNCTION)) + +/* ------------------------------------------- +Macro: OBSOLETE_SYS() + Replace a function that has become obsolete. + + Replace an obsolete OLD_FUNCTION with a simple COMMAND_FUNCTION, with the intention that anyone + using the function should replace it with the simple command, since the function will be disabled in the future. + + Shows a warning in RPT each time the deprecated function is used, and runs the command function. + +Parameters: + OLD_FUNCTION - Full name of old function [Identifier for function that does not exist any more] + COMMAND_CODE - Code to replace the old function [Function] + +Example: + (begin example) + // In Arma2, currentWeapon command made the CBA_fMyWeapon function obsolete: + OBSOLETE_SYS(CBA_fMyWeapon,{ currentWeapon player }); + (end) + +Author: + Spooner +------------------------------------------- */ +#define OBSOLETE_SYS(OLD_FUNCTION,COMMAND_CODE) \ + OLD_FUNCTION = { \ + WARNING('Obsolete function used: (use: OLD_FUNCTION) in ADDON'); \ + if (isNil "_this") then { call COMMAND_CODE } else { _this call COMMAND_CODE }; \ + } + +/* ------------------------------------------- +Macro: OBSOLETE() + Replace a function, in the current component, that has become obsolete. + + Replace an obsolete OLD_FUNCTION (which will have PREFIX_ prepended) with a simple + COMMAND_CODE, with the intention that anyone using the function should replace it with the simple + command. + + Shows a warning in RPT each time the deprecated function is used. + +Parameters: + OLD_FUNCTION - Name of old function, assuming PREFIX [Identifier for function that does not exist any more] + COMMAND_CODE - Code to replace the old function [Function] + +Example: + (begin example) + // In Arma2, currentWeapon command made the CBA_fMyWeapon function obsolete: + OBSOLETE(fMyWeapon,{ currentWeapon player }); + (end) + +Author: + Spooner +------------------------------------------- */ +#define OBSOLETE(OLD_FUNCTION,COMMAND_CODE) \ + OBSOLETE_SYS(DOUBLES(PREFIX,OLD_FUNCTION),COMMAND_CODE) + +#define BWC_CONFIG(NAME) class NAME { \ + units[] = {}; \ + weapons[] = {}; \ + requiredVersion = REQUIRED_VERSION; \ + requiredAddons[] = {}; \ + version = VERSION; \ +} + +// XEH Specific +#define XEH_CLASS CBA_Extended_EventHandlers +#define XEH_CLASS_BASE DOUBLES(XEH_CLASS,base) +#define XEH_DISABLED class EventHandlers { class XEH_CLASS {}; }; SLX_XEH_DISABLED = 1 +#define XEH_ENABLED class EventHandlers { class XEH_CLASS { EXTENDED_EVENTHANDLERS }; }; SLX_XEH_DISABLED = 0 + +// TODO: These are actually outdated; _Once ? +#define XEH_PRE_INIT QUOTE(call COMPILE_FILE(XEH_PreInit_Once)) +#define XEH_PRE_CINIT QUOTE(call COMPILE_FILE(XEH_PreClientInit_Once)) +#define XEH_PRE_SINIT QUOTE(call COMPILE_FILE(XEH_PreServerInit_Once)) + +#define XEH_POST_INIT QUOTE(call COMPILE_FILE(XEH_PostInit_Once)) +#define XEH_POST_CINIT QUOTE(call COMPILE_FILE(XEH_PostClientInit_Once)) +#define XEH_POST_SINIT QUOTE(call COMPILE_FILE(XEH_PostServerInit_Once)) + +/* ------------------------------------------- +Macro: IS_ADMIN + Check if the local machine is an admin in the multiplayer environment. + + Reports 'true' for logged and voted in admins. + +Parameters: + None + +Example: + (begin example) + // print "true" if player is admin + systemChat str IS_ADMIN; + (end) + +Author: + commy2 +------------------------------------------- */ +#define IS_ADMIN serverCommandAvailable "#kick" + +/* ------------------------------------------- +Macro: IS_ADMIN_LOGGED + Check if the local machine is a logged in admin in the multiplayer environment. + + Reports 'false' if the player was voted to be the admin. + +Parameters: + None + +Example: + (begin example) + // print "true" if player is admin and entered in the server password + systemChat str IS_ADMIN_LOGGED; + (end) + +Author: + commy2 +------------------------------------------- */ +#define IS_ADMIN_LOGGED serverCommandAvailable "#shutdown" diff --git a/AntistasiOfficial.Altis/script_macros_mission.hpp b/AntistasiOfficial.Altis/script_macros_mission.hpp new file mode 100644 index 00000000..530fcd6d --- /dev/null +++ b/AntistasiOfficial.Altis/script_macros_mission.hpp @@ -0,0 +1,82 @@ +#include "script_macros_common.hpp" + +/* + Header: script_macros_mission.hpp + + Description: + Modifies script_common_macros.hpp for compatiblity with missions. + Some addon specific functionality might be lost. + + Authors: + Muzzleflash + + Changes from script_macros_mission.hpp: + Follows Standard: + Object variables: PREFIX_COMPONENT + Main-object variables: PREFIX_main + Paths: PREFIX\COMPONENT\SCRIPTNAME.sqf + Or if CUSTOM_FOLDER is defined: + CUSTOM_FOLDER\SCRIPTNAME.sqf + eg. six\sys_menu\fDate.sqf + + Usage: + Define PREFIX and COMPONENT, then include this file: + #include "\x\cba\addons\main\script_macros_mission.hpp" + +*/ + +/* + CUSTOM_FOLDER + + Custom folder to search for files in. Will not change variable names. + Default is PREFIX\COMPONENT + + Example: + (begin example) + #define CUSTOM_FOLDER MyPackage\ScriptA + (end) + + (begin example) + #define CUSTOM_FOLDER COMPONENT\functions + (end) + + +*/ + +#ifdef CUSTOM_FOLDER + #define PATHTO_SYS(var1,var2,var3) ##CUSTOM_FOLDER\##var3.sqf + #define PATHTOF_SYS(var1,var2,var3) ##CUSTOM_FOLDER\##var3 + #define PATHTOF2_SYS(var1,var2,var3) ##CUSTOM_FOLDER\##var3 +#else + #define PATHTO_SYS(var1,var2,var3) ##var1\##var2\##var3.sqf + #define PATHTOF_SYS(var1,var2,var3) ##var1\##var2\##var3 + #define PATHTOF2_SYS(var1,var2,var3) ##var1\##var2\##var3 +#endif + +/************************** REMOVAL OF MACROS ***********************/ + +#undef MAINPREFIX +#undef SUBPREFIX +#undef VERSION_AR +#undef VERSION_CONFIG + +#undef VERSIONING_SYS +#undef VERSIONING + +#undef PRELOAD_ADDONS + +#undef BWC_CONFIG + +#undef XEH_DISABLED +#undef XEH_PRE_INIT +#undef XEH_PRE_CINIT +#undef XEH_PRE_SINIT +#undef XEH_POST_INIT +#undef XEH_POST_CINIT +#undef XEH_POST_SINIT + +#undef PATHTO_FNC +#define PATHTO_FNC(func) class func {\ + file = QUOTE(DOUBLES(fnc,func).sqf);\ + RECOMPILE;\ +} diff --git a/AntistasiOfficial.Altis/serverAutosave.sqf b/AntistasiOfficial.Altis/serverAutosave.sqf index 7072170e..cfe29822 100644 --- a/AntistasiOfficial.Altis/serverAutosave.sqf +++ b/AntistasiOfficial.Altis/serverAutosave.sqf @@ -34,6 +34,6 @@ while {true} do{ }; while {true} do{ - [petros,"hint","A critical failure has been detected in Antistasi. Please contact Admin Alber and ask for a diagnose + server restart. Apologies."] remoteExec ["commsMP"]; + [petros,"locHint","STR_HINTS_SERV_AUTO_SAVE"] remoteExec ["commsMP"]; sleep 10; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/shitstef.sqf b/AntistasiOfficial.Altis/shitstef.sqf new file mode 100644 index 00000000..61b9b2ce --- /dev/null +++ b/AntistasiOfficial.Altis/shitstef.sqf @@ -0,0 +1,201 @@ + /** Conditions: *** + *** (Spawn / Despawn) & Capture *** + *** **/ +/*from combinedCA.sqf +### Is line 9 coherent with other checks? what am i missing? ###*/ + +waitUntil +{ + sleep 5; + ( + //Operative soldiers < 1/3 of All soldiers. LOSS + ({(alive _x) and (lifeState _x != "INCAPACITATED") and !(fleeing _x)} count _allSoldiers < (round ((count _allSoldiers)/3))) OR + + //time is over LOSS + (time > _attackDuration) OR + + //objective has been captured WIN + (_marker in mrkAAF) OR + + //(Operative FIA within 100m) < (Operative AAF within 100m) WIN + ( + 2*count (allUnits select {(side _x == side_blue) AND (_x distance _markerPos <= 100) and (lifeState _x != "INCAPACITATED") and !(fleeing _x)}) + < + count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= 100) and (lifeState _x != "INCAPACITATED")} + ) + ) +}; + +if ((_marker in mrkAAF) or ( + 2*count (allUnits select {(side _x == side_blue) AND (_x distance _markerPos <= 100) and (lifeState _x != "INCAPACITATED") and !(fleeing _x)}) + < + count (allUnits select {((side _x == side_green) OR (side _x == side_red)) AND (_x distance _markerPos <= 100) and (lifeState _x != "INCAPACITATED")} + )) then {hint "WIN"} else {hint "LOSS"}; + + + + + + +//from Create(AAF).sqf (AAFcreateBase.sqf createaereopuerto.sqf) +//### I'd make a function cause it's repeating in all the files ### + + +//Despawning conditions for AAF marker + waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ({!(vehicle _x isKindOf "Air")} + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + > 3* + count (allUnits select { + ((side _x == side_green) OR (side _x == side_red)) AND + (_x distance _markerPos <= (_size max 300)) AND + !(captive _x) OR + (lifeState _x != "INCAPACITATED") + }) + ) + }; +---> [_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; + +/*from Create(FIA).sqf +### I'd make a function cause it's repeating in all the files ###*/ + + +waitUntil {sleep 1; + !(spawner getVariable _marker) OR + ( + ({not(vehicle _x isKindOf "Air")} + count ([_size,0,_markerPos,"OPFORSpawn"] call distanceUnits)) + > 3* + (({alive _x} count _allSoldiers) + count ([_size,0,_markerPos,"BLUFORSpawn"] call distanceUnits)) + ) +}; +/*First make a sweep without sleeps to all the soldier array, so you quickly remove all those which are far, after that make the procedure you have there. +Why having 120 paralell instances of spawn, for each soldier, with its waituntil for one sec if there is no need in some of them?*/ +---> [_allGroups, _allSoldiers, _allVehicles] spawn AS_fnc_despawnUnits; + + + +/*from fn_despawnunits.sqf +### I have to check this one still- actually i think here lies the reason of a duplication bug that show duplicated friendly garrison ###*/ + + + +/*For below: Check warlords despawn. + +//Barbolani: I dont see sense on the below. Despawning of an attack has to check Blufors nearby, and those blufors have to be "BLUFORSpawn" because of not, some garrison will keep those units in map. +//WOTP DESPAWNING (THE MOST PERFECT SYSTEM A HUMAN, IF YOU CAN CALL ME HUMAN, CAN DO): +//CHECK VARIABLE NAMES, OF COURSE*/ + +//CURRENT +params [["_groups", []], ["_soldiers", []], ["_vehicles", []]]; + +if (count _vehicles > 0) then { + { + if !(_x in staticsToSave) then { + [_x] spawn { + waitUntil {sleep 1; !([distanciaSPWN,1,_this select 0,"BLUFORSpawn"] call distanceUnits)}; + deleteVehicle (_this select 0); + }; + }; + if (_x in reportedVehs) then { + reportedVehs = reportedVehs - [_x]; + publicVariable "reportedVehs"; + }; + } forEach _vehicles; +}; + +if (count _soldiers > 0) then { + { + [_x] spawn { + waitUntil {sleep 1; !([distanciaSPWN,1,_this select 0,"BLUFORSpawn"] call distanceUnits)}; + deleteVehicle (_this select 0); + }; + } forEach _soldiers; +}; + +if (count _groups > 0) then { + { + _x deleteGroupWhenEmpty true; + } forEach _groups; +}; + +// from WOTP and adapted +params [["_groups", []], ["_soldiers", []], ["_vehicles", []]]; + +//select 0 + { + _veh = _x; + if ( + !([distanciaSPWN,1,_veh,"BLUFORSpawn"] call distanceUnits) and + (({_x distance _veh <= distanciaSPWN} count (allPlayers - (entities "HeadlessClient_F"))) == 0) + ) then {deleteVehicle _x}; + } forEach _vehicles; + +//select 1 + { + _veh = _x; + if ( + !([distanciaSPWN,1,_veh,"BLUFORSpawn"] call distanceUnits) and + (({_x distance _veh <= distanciaSPWN} count (allPlayers - (entities "HeadlessClient_F"))) == 0) + ) then {deleteVehicle _x; _soldiers = _soldiers - [_x]}; + } forEach _soldiers; + +//select 2 + if (count _groups > 0) then { + { + _x deleteGroupWhenEmpty true; + } forEach _groups; + }; + + +if (count _soldiers > 0) then { + { + [_x] spawn { + private ["_veh"]; + _veh = _this select 0; + waitUntil {sleep 1; + !([distanciaSPWN,1,_veh,"BLUFORSpawn"] call distanceUnits) and + ( ({_x distance _veh <= distanciaSPWN} count (allPlayers - (entities "HeadlessClient_F"))) == 0) + }; + deleteVehicle _veh; + }; + } forEach _soldiers; +}; + + + +//QRF + [_marker] spawn {sleep random [300,420,600]; [_this select 0] spawn patrolCA;}; + + [_marker] spawn {sleep random [300,420,600]; if ((player distance [_this select 0]) < 300) then {[_this select 0] spawn patrolCA;};}; + + + + +// Air reaction +if (_vehicleType in heli_armed + opAir + opCASFW) exitWith { + _eh = _vehicle addEventHandler ["Fired", { + if (random 8 < 1) then { //maybe add spawn here + if(player in crew _vehicle) then { + _targetpos = position (_vehicle); + _airportpos = getmakerpos ["spawnCSAT"]; + _depart = [_airportpos select 0, _airportpos select 1,300]; + _jet = [_depart, 0,dogfight, side_green] call bis_fnc_spawnvehicle; + _pilot = driver (_jet select 0); + _pilot reveal [driver _vehicle,4]; + _pilot dotarget _vehicle; + + }; + }; + }; + }; + +_vehicle = vehicle player; +_eh = _vehicle addEventHandler ["Fired", { + if(player in crew _vehicle) then { + systemchat "Eventhandler ecec" + }; + } + ]; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/skiptime.sqf b/AntistasiOfficial.Altis/skiptime.sqf index 77efc522..d666e1a7 100644 --- a/AntistasiOfficial.Altis/skiptime.sqf +++ b/AntistasiOfficial.Altis/skiptime.sqf @@ -1,4 +1,4 @@ -if (player!= Slowhand) exitWith {hint "Only the Commander can order to rest"}; +if (player!= Slowhand) exitWith {hint localize "STR_HINTS_ST_OTCCOTR"}; _presente = false; { @@ -7,9 +7,9 @@ if ((side _x == side_green) or (side _x == side_red)) then if ([500,1,_x,"BLUFORSpawn"] call distanceUnits) then {_presente = true}; }; } forEach allUnits; -if (_presente) exitWith {hint "You cannot rest with enemies near our units"}; -if ("AtaqueAAF" in misiones) exitWith {hint "You cannot rest while AAF or CSAT is counterattacking"}; -if ("DEF_HQ" in misiones) exitWith {hint "You cannot rest while your HQ is under attack"}; +if (_presente) exitWith {hint localize "STR_HINTS_ST_YCRWENOU"}; +if ("AtaqueAAF" in misiones) exitWith {hint localize "STR_HINTS_ST_YCRWAAFOCSATIC"}; +if ("DEF_HQ" in misiones) exitWith {hint localize "STR_HINTS_ST_YCRWYHQIUA"}; _chequeo = false; _posHQ = getMarkerPos guer_respawn; @@ -17,7 +17,7 @@ _posHQ = getMarkerPos guer_respawn; if (_x distance _posHQ > 100) then {_chequeo = true}; } forEach (allPlayers - (entities "HeadlessClient_F")); -if (_chequeo) exitWith {hint "All player must be in a 100mts radius from HQ to be able to rest"}; +if (_chequeo) exitWith {hint localize "STR_HINTS_ST_APMBIA100MRFHQ"}; [[],"resourcecheckSkipTime"] call BIS_fnc_MP; diff --git a/AntistasiOfficial.Altis/statistics.sqf b/AntistasiOfficial.Altis/statistics.sqf index 4c5715a9..e5d11ce9 100644 --- a/AntistasiOfficial.Altis/statistics.sqf +++ b/AntistasiOfficial.Altis/statistics.sqf @@ -22,17 +22,17 @@ if (isMultiplayer) then { if (isPlayer Slowhand) then {_nombreC = name Slowhand} else {_nombreC = "NONE"}; if (activeBE) then { - _texto = format ["" + "Commander: %3 | %2 | HR: %1 | Your Money: %4 € | %9 Support: %5 | %10 Support: %6 | %7 | %8", server getVariable "hr", player getVariable ["Rank_PBar", "Init"], _nombreC, player getVariable "dinero",server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", server getVariable "BE_PBar", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT1", server getVariable "hr", player getVariable ["Rank_PBar", "Init"], _nombreC, player getVariable "dinero",server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", server getVariable "BE_PBar", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; } else { - _texto = format ["" + "Commander: %3 | %2 | HR: %1 | Your Money: %4 € | %8 Support: %5 | %9 Support: %6 | %7", server getVariable "hr", player getVariable ["Rank_PBar", "Init"], _nombreC, player getVariable "dinero",server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT2", server getVariable "hr", player getVariable ["Rank_PBar", "Init"], _nombreC, player getVariable "dinero",server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; }; } else { if (activeBE) then { - _texto = format ["" + "%5 | HR: %1 | Your Money: %6 € | FIA Money: %2 € | %9 Support: %3 | %10 Support: %4 | %7 | %8", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", player getVariable ["Rank_PBar", "Init"], player getVariable "dinero", server getVariable "BE_PBar", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT3", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", player getVariable ["Rank_PBar", "Init"], player getVariable "dinero", server getVariable "BE_PBar", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; } else { - _texto = format ["" + "%5 | HR: %1 | Your Money: %6 € | FIA Money: %2 € | %8 Support: %3 | %9 Support: %4 | %7", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", player getVariable ["Rank_PBar", "Init"], player getVariable "dinero", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT4", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", player getVariable ["Rank_PBar", "Init"], player getVariable "dinero", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; }; }; //if (captive player) then {_texto = format ["%1 ON",_texto]} else {_texto = format ["%1 OFF",_texto]}; @@ -56,9 +56,9 @@ else { waitUntil {sleep 0.5; player == player getVariable ["owner",player]}; if (activeBE) then { - _texto = format ["" + "HR: %1 | FIA Money: %2 € | %7 Support: %3 | %8 Support: %4 | %5 | %6", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", server getVariable "BE_PBar", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT5", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", server getVariable "BE_PBar", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; } else { - _texto = format ["" + "HR: %1 | FIA Money: %2 € | %6 Support: %3 | %7 Support: %4 | %5", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", ["Overt", "Incognito"] select (captive player), A3_Str_BLUE, A3_Str_RED]; + _texto = format ["" + localize "STR_UI_TOP_TEXT6", server getVariable "hr", server getVariable "resourcesFIA", server getVariable "PrestigeNATO", server getVariable "prestigeCSAT", [localize "STR_UI_TOP_OVERT",localize "STR_UI_TOP_INCOGNITO"] select (captive player), A3_Str_BLUE, A3_Str_RED]; }; //if (captive player) then {_texto = format ["%1 ON",_texto]} else {_texto = format ["%1 OFF",_texto]}; if (_texto != _viejoTexto) then diff --git a/AntistasiOfficial.Altis/teleport.sqf b/AntistasiOfficial.Altis/teleport.sqf index db8c3481..13e9de7a 100644 --- a/AntistasiOfficial.Altis/teleport.sqf +++ b/AntistasiOfficial.Altis/teleport.sqf @@ -2,7 +2,7 @@ openMap true; posicionTel = []; -hint "Click on the position you wish to teleport to."; +hint localize "STR_HINTS_TELEPORT"; onMapSingleClick "posicionTel = _pos;"; diff --git a/AntistasiOfficial.Altis/undercover.sqf b/AntistasiOfficial.Altis/undercover.sqf index 8f186edb..b98a1bd0 100644 --- a/AntistasiOfficial.Altis/undercover.sqf +++ b/AntistasiOfficial.Altis/undercover.sqf @@ -115,7 +115,7 @@ if (_reason != "") exitWith { hint _reason; }; -["Incognito",0,0,4,0,0,4] spawn bis_fnc_dynamicText; +[localize "STR_UI_TOP_INCOGNITO",0,0,4,0,0,4] spawn bis_fnc_dynamicText; player setCaptive true; _player = player getVariable ["owner",player]; @@ -236,7 +236,7 @@ while {_reason == ""} do { }; if (captive _player) then {_player setCaptive false}; -["Overt",0,0,4,0,0,4] spawn bis_fnc_dynamicText; +[localize "STR_UI_TOP_OVERT2",0,0,4,0,0,4] spawn bis_fnc_dynamicText; if (_reason == localize "STR_HINTS_UND_CMP_GEAR") then { _reason = [_reason] call _fnc_displayGear; diff --git a/AntistasiOfficial.Altis/workers/fn_getNextWorker.sqf b/AntistasiOfficial.Altis/workers/fn_getNextWorker.sqf index ae058239..3ff6ff55 100644 --- a/AntistasiOfficial.Altis/workers/fn_getNextWorker.sqf +++ b/AntistasiOfficial.Altis/workers/fn_getNextWorker.sqf @@ -21,7 +21,7 @@ if (isNil "workerArray") then {//Called not on server (by mistake?), some PDA fu private _accuArray = []; { private _currOwn = _x; - _accuArray pushBack (({owner _x == _currOwn} count allUnits)* ([1,2] select (_currOwn == 2))); + _accuArray pushBack (({owner _x == _currOwn} count allUnits)* ([1,6] select (_currOwn == 2))); }forEach workerArray; //Select minimum diff --git a/AntistasiOfficial.Altis/workers/fn_initWorker.sqf b/AntistasiOfficial.Altis/workers/fn_initWorker.sqf index 77f095df..78314e82 100644 --- a/AntistasiOfficial.Altis/workers/fn_initWorker.sqf +++ b/AntistasiOfficial.Altis/workers/fn_initWorker.sqf @@ -15,10 +15,15 @@ #define DEBUG_MODE_FULL #include "script_component.hpp" -if !(isNil "headlessInit") exitWith {}; +if !(isNil "AS_workerInit") exitWith {}; if (!hasInterface && !isDedicated) then { - INFO_1("Headless client initialization. ownerID: %1", clientOwner); - LOG("Sending registration info to the server"); - [clientOwner] remoteExec ["AS_fnc_registerWorker", 2]; + [] spawn { + waitUntil {!isNull player}; + waitUntil {sleep 1; !isNil "AS_workerServer"}; + LOG_1("allPlayers: %1", allPlayers); + INFO_1("Headless client initialization. ownerID: %1", clientOwner); + LOG("Sending registration info to the server"); + [clientOwner] remoteExec ["AS_fnc_registerWorker", 2]; + }; }; -headlessInit = 1; \ No newline at end of file +AS_workerInit = 1; diff --git a/AntistasiOfficial.Altis/workers/fn_initWorkerServer.sqf b/AntistasiOfficial.Altis/workers/fn_initWorkerServer.sqf index 56de5d61..78cc8ac6 100644 --- a/AntistasiOfficial.Altis/workers/fn_initWorkerServer.sqf +++ b/AntistasiOfficial.Altis/workers/fn_initWorkerServer.sqf @@ -15,5 +15,19 @@ #include "script_component.hpp" workerArray = [2]; + +//VCOM initialization +if(isServer AND (['AS_enableVCOM', 0] call BIS_fnc_getParamValue) == 1) then { + [] execVM "VCOMAI\init.sqf"; +}; + addMissionEventHandler ["PlayerDisconnected",{[_this select 4] call AS_fnc_unregisterWorker;}]; -INFO("WorkerServer init done"); \ No newline at end of file +[] spawn { + LOG("Waiting for allPlayers !isEqualTo []"); + waitUntil {sleep 1; !(allPlayers isEqualTo []);}; + LOG("SUCCESS allPlayers !isEqualTo []"); + AS_workerServer=true; + publicVariable "AS_workerServer"; + LOG("AS_workerServer set"); +}; +INFO("WorkerServer init done"); diff --git a/AntistasiOfficial.Altis/workers/fn_registerWorker.sqf b/AntistasiOfficial.Altis/workers/fn_registerWorker.sqf index df4bd861..2314ee20 100644 --- a/AntistasiOfficial.Altis/workers/fn_registerWorker.sqf +++ b/AntistasiOfficial.Altis/workers/fn_registerWorker.sqf @@ -16,14 +16,25 @@ #include "script_component.hpp" if !isServer exitWith {}; -params["_id"]; -INFO_1("Registartion request received. ID: %1", _id); -//validation -if ({owner _x == _id;}count allPlayers != 1) exitWith {ERROR_1("Validation failed, no entity with id:%1 found", _id);}; -INFO("Validation passed"); -//registartion -workerArray pushBackUnique _id; +_this spawn{ + params["_id"]; + INFO_1("Registartion request received. ID: %1", _id); + //validation + private _time = diag_tickTime + 300; + waitUntil{sleep 1; ({owner _x == _id;}count allPlayers == 1) OR diag_tickTime > _time}; //300sec timeout for sync issues + LOG_1("AllPlayers: %1", allPlayers); + LOG_1("Count of ids: %1", {owner _x == _id;}count allPlayers); + if ({owner _x == _id;}count allPlayers != 1) exitWith {ERROR_1("Validation failed, no entity with id:%1 found", _id);}; + INFO("Validation passed"); + //registartion + workerArray pushBackUnique _id; -//custom post-registartion execution -private _workerInitialization ={INFO("[SERVER] Registartion successful.");}; -[_workerInitialization] remoteExec ["call", _id]; \ No newline at end of file + //custom post-registartion execution + private _workerInitialization ={ + if ((['AS_enableVCOM', 0] call BIS_fnc_getParamValue) == 1) then { + [] execVM "VCOMAI\init.sqf"; + }; + INFO("[SERVER] Registartion successful."); + }; + [_workerInitialization] remoteExec ["call", _id]; +}; diff --git a/AntistasiOfficial.Altis/workers/fn_unregisterWorker.sqf b/AntistasiOfficial.Altis/workers/fn_unregisterWorker.sqf index 761e9dc1..334b04eb 100644 --- a/AntistasiOfficial.Altis/workers/fn_unregisterWorker.sqf +++ b/AntistasiOfficial.Altis/workers/fn_unregisterWorker.sqf @@ -17,5 +17,6 @@ if !isServer exitWith {}; params["_id"]; +if !(_id in workerArray) exitWith {}; INFO_1("Deregistartion request received. ID: %1", _id); workerArray = workerArray - [_id]; diff --git a/README.md b/README.md index 1165882e..ee75178b 100644 --- a/README.md +++ b/README.md @@ -11,15 +11,20 @@ After 1.2 *Chris* coded many changes under the supervision of *RickyTan* and *Ke After 1.7.6 *Sparker* and *Jeroen* continued because the 1.7 bugs weren't possible to be fixed unless changing a lot of the code. -Currently: *Stef* is supervising the project and coding some simple stuff, *IrLED* started coding major fixes and improvement since 1.7.17, he also organized the github environment. +*Stef* started supervising since 1.7.17 with great help of *IrLED* who started the github project and coded major core fixes and improvement such as proportional distribution of AI to headlessclients,lightened spawned script etc. + +*Triada* adapted the mission for multi-language translation updating Stringtable.xml and harmonizing hints and task display. He translated, with support of Russian community, the mission to Russian. Also, *Nemesti* added the Spanish translation. + +Currently: *Stef* is finishing stuff with precious *Sparker'* support getting ready for steam release. We're looking for more coders, every contribution is appreciated! -Website: http://www.a3antistasi.com/ +Website: http://a3antistasi.enjin.com/ Server: steam://connect/85.190.158.136:29001 -Teamspeak: voip.a3antistasi.com + +Teamspeak: **antistasi.enjinvoice.com** Guide: https://docs.google.com/document/d/1_XamnTWgVgy0jDinYSDhAWG_vKDa49ngl6fGi5XdPLQ/edit @@ -27,8 +32,6 @@ Guide: https://docs.google.com/document/d/1_XamnTWgVgy0jDinYSDhAWG_vKDa49ngl6fGi # Get release mission ready to play -!! [CBA](http://steamcommunity.com/sharedfiles/filedetails/?id=450814997) Mod is required . You can remove that dependency in the SQM if you want. This is [how to remove it](https://github.com/A3Antistasi/antistasiofficial/issues/5) - * [Visit release page](https://github.com/A3Antistasi/antistasiofficial/releases) * Download the .pbo * For singleplayer: drop it in \steamapps\common\Arma 3\Missions @@ -36,6 +39,18 @@ Guide: https://docs.google.com/document/d/1_XamnTWgVgy0jDinYSDhAWG_vKDa49ngl6fGi --- +# Mods + +The mission has no dependencies, however it can detect the following mods. +* **CBA**, **TFAR**, RHS-**AFRF**+**GREF**(replace AAF, CSAT), RHS-**USAF**(replace NATO), **ACE**, **inidibi2**(multiple saves). + +Client side mods, as long they don't affect AI, are generally ok. Here's some suggestions +* Dusty retexture project, JSRS, Enhanced Movement, Blastcore + +This is our steam collection: http://steamcommunity.com/sharedfiles/filedetails/?id=1097454107 + +--- + # Change faction or island (portings are not supported) \Change faction or island\ rename the mission you want to "mission.sqm" copy and paste into AntistasiOfficial.Altis @@ -43,3 +58,12 @@ Guide: https://docs.google.com/document/d/1_XamnTWgVgy0jDinYSDhAWG_vKDa49ngl6fGi In case you change world also rename the folder to .worldname. Example: rename "Antistasi NapfG.sqm" to "mission.sqm", copy paste into \AntistasiOfficial.Altis, rename that folder to AntistasiOfficial.Napf + +--- + +# Modding Antistasi + +We look for coders and we'll credit you for your contributions indeed! +However, if you wish to make your own modification, you can but **you must credit Barbolani** as Author. +Consider the complexity of this mission and the high goal of persistency; Arma engine has important limitation so we can't do whatever we desire, there are always bollenecks here and there. + From 71bb26257771e98c20d2c122f68303df69361302 Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 16:57:57 +0200 Subject: [PATCH 02/18] added: hasRadio.sqf - Check for Acre. InitVar.sqf - publicVariable ActiveAcre for checking if active acre? --- AntistasiOfficial.Altis/AI/hasRadio.sqf | 4 ++++ AntistasiOfficial.Altis/initVar.sqf | 1 + 2 files changed, 5 insertions(+) diff --git a/AntistasiOfficial.Altis/AI/hasRadio.sqf b/AntistasiOfficial.Altis/AI/hasRadio.sqf index 082764b2..a59c4e2b 100644 --- a/AntistasiOfficial.Altis/AI/hasRadio.sqf +++ b/AntistasiOfficial.Altis/AI/hasRadio.sqf @@ -3,8 +3,12 @@ params ["_unit"]; private _result = false; call { + + if ("ItemRadio" in assignedItems _unit) exitWith {_result = true}; + if (activeACRE) exitWith {_result = _unit call acre_api_fnc_hasRadio}; + if (activeTFAR) exitWith { if (count (_unit call TFAR_fnc_radiosList) > 0) then { _result = true; diff --git a/AntistasiOfficial.Altis/initVar.sqf b/AntistasiOfficial.Altis/initVar.sqf index f7af1d02..b2fd9b59 100644 --- a/AntistasiOfficial.Altis/initVar.sqf +++ b/AntistasiOfficial.Altis/initVar.sqf @@ -223,6 +223,7 @@ publicVariable "membersPool"; publicVariable "vehInGarage"; publicVariable "reportedVehs"; publicVariable "activeACE"; +publicVariable "activeACRE"; publicVariable "activeTFAR"; publicVariable "activeXLA"; publicVariable "activeACEhearing"; From f2e6ec06d44989c33420c879d7e4abae020d7677 Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 17:01:09 +0200 Subject: [PATCH 03/18] Added -Functions\fn_detectACRE.sqf for checking for active acre mod. --- AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf new file mode 100644 index 00000000..8e412110 --- /dev/null +++ b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf @@ -0,0 +1,12 @@ + +if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { + activeAcre = true; + unlockedItems pushBackUnique "ItemRadio"; + unlockedItems pushBackUnique guer_radio_TFAR; + tf_no_auto_long_range_radio = true; publicVariable "tf_no_auto_long_range_radio"; + tf_west_radio_code = ""; publicVariable "tf_west_radio_code"; + tf_east_radio_code = tf_west_radio_code; publicVariable "tf_east_radio_code"; + tf_guer_radio_code = tf_west_radio_code; publicVariable "tf_guer_radio_code"; + tf_same_sw_frequencies_for_side = true; publicVariable "tf_same_sw_frequencies_for_side"; + tf_same_lr_frequencies_for_side = true; publicVariable "tf_same_lr_frequencies_for_side"; +}; \ No newline at end of file From 167ea102251623463fea8dd0b3ee9866bab90685 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 17:34:41 +0200 Subject: [PATCH 04/18] arsenals --- .../JeroenArsenal/JNA/fn_arsenal.sqf | 12 +++++++++++- .../JeroenArsenal/JNA/fn_arsenal_addItem.sqf | 6 ++++++ .../JeroenArsenal/JNA/fn_arsenal_itemType.sqf | 6 ++++++ .../JNA/fn_arsenal_loadInventory.sqf | 5 +++++ .../Municion/accionArsenal.sqf | 18 ++++++++++++++---- 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf index 7b929cea..238f21e8 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf @@ -820,6 +820,11 @@ switch _mode do { _radioName = getText(configfile >> "CfgWeapons" >> _return1 >> "tf_parent"); if!(_radioName isEqualTo "")then{_return1 = _radioName;}; + // ACRE get base class + if ([_item] call acre_api_fnc_isRadio) then { + _item = [_item] call acre_api_fnc_getBaseRadio; + }; + _return1; }; case IDC_RSCDISPLAYARSENAL_TAB_MAP; @@ -1682,13 +1687,18 @@ switch _mode do { }; }foreach assignedItems player; - //TFAR FIX _OldItemUnequal = _oldItem; if(_index == IDC_RSCDISPLAYARSENAL_TAB_COMPASS)then{ + //TFAR FIX _radioName = getText(configfile >> "CfgWeapons" >> _oldItem >> "tf_parent"); if!(_radioName isEqualTo "")exitWith{ _OldItemUnequal = _radioName; }; + + // ACRE get base class + if ([_oldItem] call acre_api_fnc_isRadio) then { + _OldItemUnequal = [_oldItem] call acre_api_fnc_getBaseRadio; + }; }; if (_oldItem != _item) then { diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_addItem.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_addItem.sqf index a281847a..a3a75924 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_addItem.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_addItem.sqf @@ -26,6 +26,12 @@ if(typeName (_this select 0) isEqualTo "SCALAR")then{//[_index, _item] and [_ind private _radioName = getText(configfile >> "CfgWeapons" >> _item >> "tf_parent"); if!(_radioName isEqualTo "")then{_item = _radioName}; + // ACRE get base class + if ([_item] call acre_api_fnc_isRadio) then { + _item = [_item] call acre_api_fnc_getBaseRadio; + }; + + //update private _playersInArsenal = +(server getVariable ["jna_playersInArsenal",[]]); if!(0 in _playersInArsenal)then{_playersInArsenal pushBackUnique 2;}; diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf index 1b06abe7..b253f0dd 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf @@ -68,6 +68,12 @@ if (activeACE) then { if (_item in aceItems) then {_weaponTypeSpecific = "FirstAidKit"}; }; }; + +if (activeACRE) then { + if (_item isKindOf "CBA_MiscItem") then { + _weaponTypeSpecific = "FirstAidKit"; + }; +}; INITTYPES { diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf index 95e54136..832a4a05 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_loadInventory.sqf @@ -176,6 +176,11 @@ _assignedItems = ((_inventory select 9) + [_inventory select 3] + [_inventory se _item =_radioName; }; + // ACRE get base class + if ([_item] call acre_api_fnc_isRadio) then { + _item = [_item] call acre_api_fnc_getBaseRadio; + }; + call { if ([_itemCounts select _index, _item] call jn_fnc_arsenal_itemCount == -1) exitWith { player linkItem _item; diff --git a/AntistasiOfficial.Altis/Municion/accionArsenal.sqf b/AntistasiOfficial.Altis/Municion/accionArsenal.sqf index fc65c0be..fc9f8f03 100644 --- a/AntistasiOfficial.Altis/Municion/accionArsenal.sqf +++ b/AntistasiOfficial.Altis/Municion/accionArsenal.sqf @@ -45,12 +45,22 @@ if (activeTFAR) then { } forEach ((items _unit) + (assignedItems _unit) - (weapons _unit)); } else { - { - if (!(_x in unlockedItems)) then { - _items pushBack _x; + if (activeACRE) then { + if (!(_x in unlockedItems)) then { + if !([_x] call acre_api_fnc_isRadio) then { + _items pushBack _x; + }; }; - } forEach ((items _unit) + (assignedItems _unit) - (weapons _unit)); + } + else + { + { + if (!(_x in unlockedItems)) then { + _items pushBack _x; + }; + } forEach ((items _unit) + (assignedItems _unit) - (weapons _unit)); }; +}; { _ameter = false; From 0b5e3139974ad95ad63317f985e35756d0dc8331 Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 17:36:21 +0200 Subject: [PATCH 05/18] Functions\... functionList.hpp: added: -line 138: detectAcre fn_detectACRE.sqf: removed: -inards from detectTFARclone. added: -setting of activeACRE-viable. -push of ACRE-radios to unlokcedItems. --- .../Functions/fn_detectACRE.sqf | 16 +++++++--------- .../Functions/functionList.hpp | 1 + 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf index 8e412110..91969abe 100644 --- a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf @@ -1,12 +1,10 @@ if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { - activeAcre = true; - unlockedItems pushBackUnique "ItemRadio"; - unlockedItems pushBackUnique guer_radio_TFAR; - tf_no_auto_long_range_radio = true; publicVariable "tf_no_auto_long_range_radio"; - tf_west_radio_code = ""; publicVariable "tf_west_radio_code"; - tf_east_radio_code = tf_west_radio_code; publicVariable "tf_east_radio_code"; - tf_guer_radio_code = tf_west_radio_code; publicVariable "tf_guer_radio_code"; - tf_same_sw_frequencies_for_side = true; publicVariable "tf_same_sw_frequencies_for_side"; - tf_same_lr_frequencies_for_side = true; publicVariable "tf_same_lr_frequencies_for_side"; + activeACRE = true; + unlockedItems pushBackUnique "ItemRadio"; + unlockedItems pushBackUnique "ACRE_PRC343"; + unlockedItems pushBackUnique "ACRE_PRC148"; + unlockedItems pushBackUnique "ACRE_PRC152"; + unlockedItems pushBackUnique "ACRE_PRC77"; + unlockedItems pushBackUnique "ACRE_PRC117F"; }; \ No newline at end of file diff --git a/AntistasiOfficial.Altis/Functions/functionList.hpp b/AntistasiOfficial.Altis/Functions/functionList.hpp index 8f19508e..c7a4a3ef 100644 --- a/AntistasiOfficial.Altis/Functions/functionList.hpp +++ b/AntistasiOfficial.Altis/Functions/functionList.hpp @@ -135,6 +135,7 @@ class AS { class initialiseFIAUnit {}; class initialiseFIAGarrisonUnit {}; class detectTFAR {}; + class detectACRE {}; class spawnBunker {}; class respawnRoadblock {}; class createPatrolMarker {}; From 33cc2449cf99089531e6575f753e22483b2e0110 Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 18:01:02 +0200 Subject: [PATCH 06/18] onPlayerRespawn.sqf added: check for Acre line 55 --- AntistasiOfficial.Altis/onPlayerRespawn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/onPlayerRespawn.sqf b/AntistasiOfficial.Altis/onPlayerRespawn.sqf index df65ff77..0c76e8a3 100644 --- a/AntistasiOfficial.Altis/onPlayerRespawn.sqf +++ b/AntistasiOfficial.Altis/onPlayerRespawn.sqf @@ -52,7 +52,7 @@ removeAllItemsWithMagazines _newUnit; removeBackpackGlobal _newUnit; removeVest _newUnit; //if (!("ItemGPS" in unlockedItems) AND ("ItemGPS" in (assignedItems _newUnit))) then {_newUnit unlinkItem "ItemGPS"}; Stef disabled because no unlock and giving an annoying error message clientside sometime -if ((!activeTFAR) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; +if ((!activeTFAR) AND (!activeACRE) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; if (!isPlayer (leader group player)) then {(group player) selectLeader player}; call AS_fnc_initPlayerEH; From b5af03e745a8267f600ae5af1879d99bf0c3be2d Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 18:04:25 +0200 Subject: [PATCH 07/18] second iteration of onPlayerRespawn.sqf corrected check for acre line 55. --- AntistasiOfficial.Altis/onPlayerRespawn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/onPlayerRespawn.sqf b/AntistasiOfficial.Altis/onPlayerRespawn.sqf index 0c76e8a3..202a311f 100644 --- a/AntistasiOfficial.Altis/onPlayerRespawn.sqf +++ b/AntistasiOfficial.Altis/onPlayerRespawn.sqf @@ -52,7 +52,7 @@ removeAllItemsWithMagazines _newUnit; removeBackpackGlobal _newUnit; removeVest _newUnit; //if (!("ItemGPS" in unlockedItems) AND ("ItemGPS" in (assignedItems _newUnit))) then {_newUnit unlinkItem "ItemGPS"}; Stef disabled because no unlock and giving an annoying error message clientside sometime -if ((!activeTFAR) AND (!activeACRE) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; +if (((!activeTFAR) OR (!activeACRE)) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; if (!isPlayer (leader group player)) then {(group player) selectLeader player}; call AS_fnc_initPlayerEH; From f59f6502335caac3045b0d90c46dfff81daccd7f Mon Sep 17 00:00:00 2001 From: Ferdinan Rosthof Jensen Date: Thu, 10 May 2018 18:09:17 +0200 Subject: [PATCH 08/18] third iteration of onPlayerRespawn.sqf check for ACRE --- AntistasiOfficial.Altis/onPlayerRespawn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/onPlayerRespawn.sqf b/AntistasiOfficial.Altis/onPlayerRespawn.sqf index 202a311f..51f55a5e 100644 --- a/AntistasiOfficial.Altis/onPlayerRespawn.sqf +++ b/AntistasiOfficial.Altis/onPlayerRespawn.sqf @@ -52,7 +52,7 @@ removeAllItemsWithMagazines _newUnit; removeBackpackGlobal _newUnit; removeVest _newUnit; //if (!("ItemGPS" in unlockedItems) AND ("ItemGPS" in (assignedItems _newUnit))) then {_newUnit unlinkItem "ItemGPS"}; Stef disabled because no unlock and giving an annoying error message clientside sometime -if (((!activeTFAR) OR (!activeACRE)) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; +if (!((activeTFAR) OR (activeACRE)) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; if (!isPlayer (leader group player)) then {(group player) selectLeader player}; call AS_fnc_initPlayerEH; From 98c0504bf8792e85ee2a390aeaedb88d87bd19de Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 18:36:25 +0200 Subject: [PATCH 09/18] call detectACRE helps :3 --- AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf | 1 + AntistasiOfficial.Altis/initVar.sqf | 1 + 2 files changed, 2 insertions(+) diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf index 91969abe..0d1de3cf 100644 --- a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf @@ -1,3 +1,4 @@ +activeACRE = false; if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { activeACRE = true; diff --git a/AntistasiOfficial.Altis/initVar.sqf b/AntistasiOfficial.Altis/initVar.sqf index b2fd9b59..d7d7e283 100644 --- a/AntistasiOfficial.Altis/initVar.sqf +++ b/AntistasiOfficial.Altis/initVar.sqf @@ -193,6 +193,7 @@ if !(isnil "XLA_fnc_addVirtualItemCargo") then { }; [] call AS_fnc_detectTFAR; +[] call AS_fnc_detectACRE; FIA_texturedVehicles = []; FIA_texturedVehicleConfigs = []; From b2fdcf1be5ae7b421cce9e723d96b3625aa9735a Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 18:51:31 +0200 Subject: [PATCH 10/18] whoops --- AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf index 238f21e8..5e4f1f92 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal.sqf @@ -821,8 +821,8 @@ switch _mode do { if!(_radioName isEqualTo "")then{_return1 = _radioName;}; // ACRE get base class - if ([_item] call acre_api_fnc_isRadio) then { - _item = [_item] call acre_api_fnc_getBaseRadio; + if ([_return1] call acre_api_fnc_isRadio) then { + _return1 = [_return1] call acre_api_fnc_getBaseRadio; }; _return1; From 334d771da49c11b0fb7aa2af1690afc8a935c775 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 19:16:04 +0200 Subject: [PATCH 11/18] fix? pls? --- .../JeroenArsenal/JNA/fn_arsenal_itemType.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf index b253f0dd..96a6fac8 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf @@ -70,7 +70,7 @@ if (activeACE) then { }; if (activeACRE) then { - if (_item isKindOf "CBA_MiscItem") then { + if (_item call acre_api_fnc_isBaseRadio) then { _weaponTypeSpecific = "FirstAidKit"; }; }; From 1049d713808b9db3bd70f3e9f43aff91c04e1e96 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 19:30:48 +0200 Subject: [PATCH 12/18] there we go! --- .../JeroenArsenal/JNA/fn_arsenal_itemType.sqf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf index 96a6fac8..a3a3309e 100644 --- a/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf +++ b/AntistasiOfficial.Altis/JeroenArsenal/JNA/fn_arsenal_itemType.sqf @@ -54,6 +54,7 @@ _return = -1; private ["_weaponType","_weaponTypeCategory"]; _weaponType = (_item call bis_fnc_itemType); _weaponTypeCategory = _weaponType select 0; +private _configCfgWeapons = configFile >> "CfgWeapons"; private ["_weaponTypeSpecific"]; _weaponTypeSpecific = _weaponType select 1; @@ -70,7 +71,7 @@ if (activeACE) then { }; if (activeACRE) then { - if (_item call acre_api_fnc_isBaseRadio) then { + if (_item isKindOf ["CBA_MiscItem", (_configCfgWeapons)]) then { _weaponTypeSpecific = "FirstAidKit"; }; }; From 2eba582b1304902ecd37f9308b6011652f414ba4 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 19:36:12 +0200 Subject: [PATCH 13/18] remove radios --- AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf | 6 ------ 1 file changed, 6 deletions(-) diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf index 0d1de3cf..bea09f27 100644 --- a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf @@ -2,10 +2,4 @@ activeACRE = false; if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { activeACRE = true; - unlockedItems pushBackUnique "ItemRadio"; - unlockedItems pushBackUnique "ACRE_PRC343"; - unlockedItems pushBackUnique "ACRE_PRC148"; - unlockedItems pushBackUnique "ACRE_PRC152"; - unlockedItems pushBackUnique "ACRE_PRC77"; - unlockedItems pushBackUnique "ACRE_PRC117F"; }; \ No newline at end of file From 9f7368c1237ac6b288bc274adf262397d771c737 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 20:43:38 +0200 Subject: [PATCH 14/18] remove spaces --- AntistasiOfficial.Altis/AI/hasRadio.sqf | 2 -- 1 file changed, 2 deletions(-) diff --git a/AntistasiOfficial.Altis/AI/hasRadio.sqf b/AntistasiOfficial.Altis/AI/hasRadio.sqf index a59c4e2b..4f94fbe7 100644 --- a/AntistasiOfficial.Altis/AI/hasRadio.sqf +++ b/AntistasiOfficial.Altis/AI/hasRadio.sqf @@ -3,8 +3,6 @@ params ["_unit"]; private _result = false; call { - - if ("ItemRadio" in assignedItems _unit) exitWith {_result = true}; if (activeACRE) exitWith {_result = _unit call acre_api_fnc_hasRadio}; From 6f8558a3431cca9b7d2779ead75b8cbf70b521f6 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 20:47:12 +0200 Subject: [PATCH 15/18] cleanup --- AntistasiOfficial.Altis/Stringtable.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AntistasiOfficial.Altis/Stringtable.xml b/AntistasiOfficial.Altis/Stringtable.xml index 13c621c1..8dd27da6 100644 --- a/AntistasiOfficial.Altis/Stringtable.xml +++ b/AntistasiOfficial.Altis/Stringtable.xml @@ -1997,8 +1997,7 @@ %1 UAV Ударный БПЛА %1 - Dron %1 - + Dron %1 %4 is providing Air support from %1. They will be under our command until %2:%3. From d0525524d619a286562c667edfc0b3433317173f Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 20:48:29 +0200 Subject: [PATCH 16/18] whoops --- AntistasiOfficial.Altis/onPlayerRespawn.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/onPlayerRespawn.sqf b/AntistasiOfficial.Altis/onPlayerRespawn.sqf index 51f55a5e..62bce44e 100644 --- a/AntistasiOfficial.Altis/onPlayerRespawn.sqf +++ b/AntistasiOfficial.Altis/onPlayerRespawn.sqf @@ -52,7 +52,7 @@ removeAllItemsWithMagazines _newUnit; removeBackpackGlobal _newUnit; removeVest _newUnit; //if (!("ItemGPS" in unlockedItems) AND ("ItemGPS" in (assignedItems _newUnit))) then {_newUnit unlinkItem "ItemGPS"}; Stef disabled because no unlock and giving an annoying error message clientside sometime -if (!((activeTFAR) OR (activeACRE)) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; +if (!(activeTFAR OR activeACRE) AND ("ItemRadio" in (assignedItems player)) AND !("ItemRadio" in unlockedItems)) then {player unlinkItem "ItemRadio"}; if (!isPlayer (leader group player)) then {(group player) selectLeader player}; call AS_fnc_initPlayerEH; From e1fe86e2bee764fbcb3c6f486901fa83b834ecd3 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 20:52:16 +0200 Subject: [PATCH 17/18] newline at end of file --- AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf index bea09f27..c915ef98 100644 --- a/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf +++ b/AntistasiOfficial.Altis/Functions/fn_detectACRE.sqf @@ -2,4 +2,4 @@ activeACRE = false; if (isClass (configFile >> "CfgPatches" >> "acre_main")) then { activeACRE = true; -}; \ No newline at end of file +}; From e625fce57f9ce925929cd9be9058daaeb64344f1 Mon Sep 17 00:00:00 2001 From: Keithen Date: Thu, 10 May 2018 21:01:57 +0200 Subject: [PATCH 18/18] adjust README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06291bde..cd2ffa53 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We're looking for more coders, every contribution is appreciated! # Mods The mission has no dependencies, however it can detect the following mods. -* **CBA**, **TFAR**, RHS-**AFRF**+**GREF**(replace AAF, CSAT), RHS-**USAF**(replace NATO), **ACE**, **inidibi2**(multiple saves). +* **CBA**, **ACRE**, **TFAR**, RHS-**AFRF**+**GREF**(replace AAF, CSAT), RHS-**USAF**(replace NATO), **ACE**, **inidibi2**(multiple saves). Client side mods, as long they don't affect AI, are generally ok. Here's some suggestions * Dusty retexture project, JSRS, Enhanced Movement, Blastcore