Added A3XAI and HC, ExileLootDrop, infiSTAR, ExAdClient (not implemented yet)

Modified startup bat files
This commit is contained in:
Zepheris 2018-03-02 00:04:42 -07:00
parent 2216fb1dd2
commit 566c2805eb
217 changed files with 25181 additions and 1450 deletions

BIN
@A3XAI/addons/a3xai.pbo Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
A3XAI_config

View File

@ -0,0 +1,16 @@
/*
A3XAI Custom Spawn Definitions File
Instructions:
Generate custom spawns and blacklist areas using the included A3XAI Editor Tool (Inside the "Editor Tool" folder of the A3XAI download package).
Instructions on how to use the Editor Tool are located on the A3XAI Wikia page: http://A3XAI.wikia.com/wiki/A3XAI_Editor_Tool
In order for A3XAI to load this file on startup, you must set in @A3XAI/A3XAI_config/config.cpp under the "A3XAI Settings" section:
loadCustomFile = 1;
//----------------------------Add your custom spawn and dynamic area blacklist definitions below this line ----------------------------*/

View File

@ -0,0 +1,765 @@
class CfgPatches {
class A3XAI_config {
units[] = {};
weapons[] = {};
requiredVersion = 0.1;
A3XAIVersion = "0.2.1";
requiredAddons[] = {};
};
};
class CfgA3XAISettings {
/* A3XAI Settings
--------------------------------------------------------------------------------------------------------------------*/
//Enable or disable event logging to the server RPT file (named arma3server_[date]_[time].rpt). Debug level setting. 0: No debug output, 1: Basic Debug output, 2: Detailed Debug output. (Default: 0)
//Debug output may help finding additional information about A3XAI's background behavior. This output is helpful when asking for help regarding bugs or unexpected behaviors.
debugLevel = 0;
//Frequency of server monitor update to RPT log in seconds. The monitor periodically reports number of max/current AI units and dynamically spawned triggers into RPT log. (Default: 300, 0 = Disable reporting)
monitorReportRate = 300;
//Enable or disable verification and error-correction of classname tables used by A3XAI. If invalid entries are found, they are removed and logged into the RPT log.
//If disabled, any invalid classnames will not be removed and clients may crash if AI bodies with invalid items are looted. Only disable if a previous scan shows no invalid classnames (Default: 1).
verifyClassnames = 1;
//Enables checking of all A3XAI config settings. (Default: 1)
verifySettings = 1;
//Minimum seconds to pass until each dead AI body or destroyed vehicle can be cleaned up by A3XAI's task scheduler. A3XAI will not clean up a body/vehicle if there is a player close by (Default: 900).
cleanupDelay = 900;
//Enabled: A3XAI will load custom spawn/blacklist definitions file on startup (A3XAI_config.pbo >> custom_defs.sqf) (Default: 0)
loadCustomFile = 0;
/* A3XAI HC Settings
--------------------------------------------------------------------------------------------------------------------*/
//Enables A3XAI headless client support. (Default: 0)
enableHC = 1;
//If HC support enabled, A3XAI will pause during post-initialization until HC has successfully connected. (Default: 0)
//IMPORTANT: It is highly recommended to ensure that the HC is properly setup before enabling this option, otherwise A3XAI may be stuck waiting for HC to to connect.
waitForHC = 0;
/* Dynamic Classname Settings
If a setting is disabled, A3XAI will use the corresponding classname table further below. See "AI clothing, weapon, loot, and equipment settings" section.
--------------------------------------------------------------------------------------------------------------------*/
//Purchase price limit for items generated by dynamic classname system as defined in CfgExileArsenal. Lowering this value may reduce variety of items carried by AI. (Default: 2000)
itemPriceLimit = 2000;
//1: Generate AI weapons from Exile trader tables (Default)
//0: Weapons defined by pistolList, rifleList, machinegunList, sniperList
//dynamicWeaponBlacklist: Classnames of weapons to ignore from Exile trader tables
generateDynamicWeapons = 1;
dynamicWeaponBlacklist[] = {};
//1: Use Exile loot table data as whitelist for AI-usable weapon scopes (Default)
//0: Scopes defined by weaponOpticsList
//dynamicOpticsBlacklist: List of optics classnames to ignore from Exile trader tables.
generateDynamicOptics = 1;
dynamicOpticsBlacklist[] = {};
//1: Generate AI uniform types from Exile trader tables (Default)
//0: Uniforms defined by uniformTypes0, uniformTypes1, uniformTypes2, uniformTypes3
//dynamicUniformBlacklist: List of uniform classnames to ignore from Exile trader tables.
generateDynamicUniforms = 1;
dynamicUniformBlacklist[] = {};
//1: Generate AI backpack types from Exile trader tables (Default)
//0: Backpacks defined by backpackTypes0, backpackTypes1, backpackTypes2, backpackTypes3
//dynamicBackpackBlacklist: List of backpack classnames to ignore from Exile trader tables.
generateDynamicBackpacks = 1;
dynamicBackpackBlacklist[] = {};
//1: Generate AI backpack types from Exile trader tables (Default)
//0: Vests defined by vestTypes0, vestTypes1, vestTypes2, vestTypes3
//dynamicVestBlacklist: List of vest classnames to ignore from Exile trader tables.
generateDynamicVests = 1;
dynamicVestBlacklist[] = {};
//1: Generate AI headgear types from Exile trader tables (Default)
//0: Headgear defined by headgearTypes0, headgearTypes1, headgearTypes2, headgearTypes3
//dynamicHeadgearBlacklist: List of headgear classnames to ignore from Exile trader tables.
generateDynamicHeadgear = 1;
dynamicHeadgearBlacklist[] = {};
//1: Generate AI food types from Exile trader tables (Default)
//0: Food defined by foodLoot
//dynamicFoodBlacklist: List of food classnames to ignore from Exile trader tables.
generateDynamicFood = 1;
dynamicFoodBlacklist[] = {};
//1: Generate AI generic loot types from Exile trader tables. Includes "Hardware", "Smoke", "Flare" -class items. (Default)
//0: Loot defined by MiscLoot
//dynamicLootBlacklist: List of loot classnames to ignore from Exile trader tables.
generateDynamicLoot = 1;
dynamicLootBlacklist[] = {};
//Enable or disable radio message receiving. Players with radios or part of a group with at least one radio will be able to intercept some AI communications. (Default: 0)
enableRadioMessages = 1;
/* Shared AI Unit Settings. These settings affect all AI spawned unless noted otherwise.
--------------------------------------------------------------------------------------------------------------------*/
//Sets side/faction for AI spawned by A3XAI. If A3XAI units are hostile with AI spawned from other install addons, consider changing this setting. Acceptable sides: east or west (Default: east)
side = EAST;
//Number of online players required for maximum (or minimum) AI spawn chance. Affects Static, Dynamic, Random AI spawns. (Default: 10)
playerCountThreshold = 10;
//1: Spawn chance multiplier scales upwards from value defined by chanceScalingThreshold to 1.00. 0: Spawn chance multiplier scales downwards from 1.00 to chanceScalingThreshold.
upwardsChanceScaling = 0;
//If upwardsChanceScaling is 1: Initial spawn chance multiplier. If upwardsChanceScaling is 0: Final spawn chance multiplier. (Default: 0.50)
chanceScalingThreshold = 0.25;
//(Static/Dynamic/Random Spawns) minAI: Minimum number of units. addAI: maximum number of additional units. unitLevel: Unit level (0-3)
minAI_village = 1;
addAI_village = 1;
unitLevel_village = 0;
spawnChance_village = 0.40;
//(Static/Dynamic/Random Spawns) minAI: Minimum number of units. addAI: maximum number of additional units. unitLevel: Unit level (0-3)
minAI_city = 1;
addAI_city = 2;
unitLevel_city = 1;
spawnChance_city = 0.60;
//(Static/Dynamic/Random Spawns) minAI: Minimum number of units. addAI: maximum number of additional units. unitLevel: Unit level (0-3)
minAI_capitalCity = 2;
addAI_capitalCity = 1;
unitLevel_capitalCity = 1;
spawnChance_capitalCity = 0.70;
//(Static/Dynamic/Random Spawns) minAI: Minimum number of units. addAI: maximum number of additional units. unitLevel: Unit level (0-3)
minAI_remoteArea = 1;
addAI_remoteArea = 2;
unitLevel_remoteArea = 2;
spawnChance_remoteArea = 0.80;
//(Static/Dynamic/Random Spawns) minAI: Minimum number of units. addAI: maximum number of additional units. unitLevel: Unit level (0-3)
minAI_wilderness = 1;
addAI_wilderness = 2;
unitLevel_wilderness = 1;
spawnChance_wilderness = 0.50;
//(For dynamic and random spawns only) Defines amount of time to wait in seconds until cleaning up temporary blacklist area after dynamic/random spawn is deactivated (Default: 1200)
tempBlacklistTime = 1200;
//Enable or disable AI death messages. Messages will be visible to all group members of player responsible for killing the AI unit. (Default: 1)
enableDeathMessages = 1;
//If enabled, AI group will attempt to track down player responsible for killing a group member. (Default: 1)
enableFindKiller = 1;
//If normal probability check for spawning NVGs fails, then give AI temporary NVGs during night hours. Temporary NVGs are unlootable and will be removed at death (Default: 0).
enableTempNVGs = 0;
//Minimum AI unit level requirement to use underslung grenade launchers. Set to -1 to disable completely. (Default: 1)
levelRequiredGL = 1;
//Minimum AI unit level requirement to use launcher weapons. Set to -1 to disable completely. Launchers are unlootable and will be removed at death (Default: -1)
levelRequiredLauncher = -1;
//List of launcher-type weapons that AI can use.
launcherTypes[] = {/*"launch_NLAW_F","launch_RPG32_F","launch_B_Titan_F","launch_I_Titan_F","launch_O_Titan_F","launch_B_Titan_short_F","launch_I_Titan_short_F","launch_O_Titan_short_F"*/};
//Maximum number of launcher weapons allowed per group (Default: 1)
launchersPerGroup = 0;
//Enable or disable AI self-healing. Level 0 AI cannot self-heal. Affects: All AI infantry units (Default: 1).
enableHealing = 1;
//If enabled, A3XAI will remove all explosive ammo (missiles, rockets, bombs - but not HE rounds) from spawned AI air vehicles. (Default: 1)
//Affects: All AI air vehicle types (patrols/custom/reinforcement). Does not affect UAV/UGVs.
removeExplosiveAmmo = 1;
//if enabled, AI units suffer no damage from vehicle collisions. (Default: 1)
noCollisionDamage = 0;
//If enabled, AI killed by vehicle collisions will have their gear removed (Default: 1)
roadKillPenalty = 0;
//Array of positions defining trader locations. AI will be non-hostile and damage immune around this area.
//Use this if your server is not using the standard Exile trader markers or sensors in mission.sqm
//For performance reasons, do not add locations other than actual trader positions to this array.
//Example: traderAreaLocations[] = {{2998.06,18175.5,0},{14600,16797.2,0},{23334.6,24188.9,0}};
traderAreaLocations[] = {};
/* Static Infantry AI Spawning Settings
A3XAI will spawn an AI group at various named locations on the map if players are nearby.
--------------------------------------------------------------------------------------------------------------------*/
//Enable or disable static AI spawns. If enabled, AI spawn points will be generated in cities, towns, and other named areas.
//Enabled: A3XAI automatically generates static spawns at named locations on map. Disabled: No static spawns will be generated. (Default: 1)
enableStaticSpawns = 1;
//Set minimum and maximum wait time (seconds) to respawn an AI group after all units have been killed. Applies to both static AI and custom spawned AI (Default: Min 300, Max 600).
respawnTimeMin = 300;
respawnTimeMax = 600;
//Time to allow spawned AI units to exist in seconds before being despawned when no players are present in a trigger area. Applies to both static AI and custom spawned AI (Default: 120)
despawnWait = 120;
//Respawn Limits. Set to -1 for unlimited respawns. (Default: -1 for each).
respawnLimit_village = -1;
respawnLimit_city = -1;
respawnLimit_capitalCity = -1;
respawnLimit_remoteArea = -1;
/* Dynamic Infantry AI Spawning Settings. Probabilities should add up to 1.00
A3XAI will create ambient threat in the area for each player by periodically spawning AI to create unexpected ambush encounters. These AI may occasionally seek out and hunt a player.
--------------------------------------------------------------------------------------------------------------------*/
//Upper limit of dynamic spawns on map at once. Set to 0 to disable dynamic spawns (Default: 15)
maxDynamicSpawns = 15;
//Minimum time (in seconds) that must pass between dynamic spawns for each player (Default: 900)
timePerDynamicSpawn = 900;
//Players offline for this amount of time (seconds) will have their last spawn timestamp reset (Default: 3600)
purgeLastDynamicSpawnTime = 3600;
//Probability for dynamic AI to actively hunt a targeted player. If probability check fails, dynamic AI will patrol the area instead of hunting (Default: 0.60)
spawnHunterChance = 0.60;
//Time to wait (seconds) before despawning all AI units in dynamic spawn area when no players are present. (Default: 120)
despawnDynamicSpawnTime = 120;
/* Random Infantry AI Spawning Settings
A3XAI will create spawns that are randomly placed around the map and are periodically relocated. These spawns are preferentially created in named locations, but may be also created anywhere in the world.
--------------------------------------------------------------------------------------------------------------------*/
//Maximum number of placed random spawns on map. Set to -1 for A3XAI to automatically adjust spawn limit according to map size. Set to 0 to disable random spawns. (Default: -1)
maxRandomSpawns = -1;
//Time to wait (seconds) before despawning all AI units in random spawn area when no players are present. (Default: 120)
despawnRandomSpawnTime = 120;
//Minimum distance between a random spawn location and other random spawns. (Default: 0)
distanceBetweenRandomSpawns = 0;
/* Shared AI Vehicle Settings
These settings affect the following AI vehicle patrol types: Air, Land, UAV, UGV
--------------------------------------------------------------------------------------------------------------------*/
//Time to wait (seconds) before despawning disabled/destroyed AI vehicles. If vehiclesAllowedForPlayers is enabled, this timer is cleared once a player enters the vehicle. (Default: 600)
vehicleDespawnTime = 900;
//Enable player use of AI vehicles. Players must either disable the vehicle or kill all units of the group in order to access the vehicle. (Default: 0)
vehiclesAllowedForPlayers = 1;
//Add name of location as displayed on map prevent AI vehicle patrols from travelling to these locations. Location names are case-sensitive. Note: Vehicles may still pass through these areas
//Example: waypointBlacklistAir[] = {"Aggelochori","Panochori","Zaros"};
waypointBlacklistAir[] = {}; //Affects Air vehicles (including UAVs)
waypointBlacklistLand[] = {}; //Affects Land vehicles (including UGVs)
/* AI Air Vehicle patrol settings.
IMPORTANT: UAVs (Unmanned aerial vehicles) are not supported by this function. UAV spawns can be configured in the "UAV Patrol Settings" section further below.
A3XAI will create AI vehicle patrols that will randomly travel between different cities and towns, and engage any players encountered.
Helicopters with available cargo space may also occasionally deploy an AI group by parachute.
--------------------------------------------------------------------------------------------------------------------*/
//Global maximum number of active AI air vehicle patrols. Set at 0 to disable (Default: 0).
maxAirPatrols = 3;
//Probability of spawning Level 0/1/2/3 AI air vehicle patrol spawns. Probabilities should add up to 1.00
levelChancesAir[] = {0.00,0.50,0.35,0.15};
//Set minimum and maximum wait time in seconds to respawn an AI vehicle patrol after vehicle is destroyed or disabled. (Default: Min 600, Max 900).
respawnAirMinTime = 600;
respawnAirMaxTime = 900;
//Classnames of air vehicle types to use, with the maximum amount of each type to spawn.
airVehicleList[] = {
{"B_Heli_Light_01_armed_F",5},
{"B_Heli_Transport_01_F",5},
{"B_Heli_Transport_03_F",2}
};
//Maximum number of gunner units per air vehicle. Limited by actual number of available gunner positions. (Default: 2)
//Affects: All AI air vehicle patrols, including custom and reinforcement.
airGunnerUnits = 2;
//Probability of AI helicopter sucessfully detecting player if there is line-of-sight. AI helicopters will conduct a visual sweep upon arriving at each waypoint and some distance after leaving. (Default: 0.80)
//Affects: All AI air vehicle patrols, including custom and reinforcement.
airDetectChance = 0.80;
//Probability of AI to deploy infantry units by parachute if players are nearby when helicopter is investigating a waypoint. (Default: 0.50)
//Affects: Air vehicle patrols.
paradropChance = 0.50;
//Cooldown time for AI paradrop deployment in seconds. (Default: 1800).
//Affects: Air vehicle patrols.
paradropCooldown = 1800;
//Number of infantry AI to paradrop if players are nearby when helicopter is investigating a waypoint, or if helicopter is reinforcing a dynamic AI spawn. Limited by number of cargo seats available in the vehicle. (Default: 3)
//Affects: Air vehicle patrols, air reinforcements.
paradropAmount = 3;
/* AI Land Vehicle patrol settings. These AI vehicles will randomly travel between different cities and towns.
IMPORTANT: UGVs (Unmanned ground vehicles) are not supported by this function. UGV spawns can be configured in the "UGV Patrol Settings" section further below.
A3XAI will create AI vehicle patrols that will randomly travel between different cities and towns, and engage any players encountered.
--------------------------------------------------------------------------------------------------------------------*/
//Global maximum number of active AI land vehicle patrols. Set at 0 to disable (Default: 0).
maxLandPatrols = 15;
//Probability of spawning Level 0/1/2/3 AI land vehicle spawns. Probabilities should add up to 1.00
levelChancesLand[] = {0.00,0.50,0.35,0.15};
//Set minimum and maximum wait time in seconds to respawn an AI vehicle patrol after vehicle is destroyed or disabled. (Default: Min 600, Max 900).
respawnLandMinTime = 600;
respawnLandMaxTime = 900;
//Classnames of land vehicle types to use, with the maximum amount of each type to spawn.
landVehicleList[] = {
{"Exile_Car_Hatchback_Rusty1",5},
{"Exile_Car_Hatchback_Rusty2",5},
{"Exile_Car_Hatchback_Rusty3",5},
{"Exile_Car_Hatchback_Sport_Red",5},
{"Exile_Car_SUV_Red",5},
{"Exile_Car_Offroad_Rusty1",5},
{"Exile_Car_Offroad_Rusty2",5},
{"Exile_Car_Offroad_Rusty3",5},
{"Exile_Car_Offroad_Repair_Civillian",5},
{"Exile_Car_Offroad_Armed_Guerilla01",5},
{"Exile_Car_Strider",5},
{"Exile_Car_Hunter",5},
{"Exile_Car_Ifrit",5},
{"Exile_Car_Van_Black",5},
{"Exile_Car_Van_Box_Black",5},
{"Exile_Car_Van_Fuel_Black",5},
{"Exile_Car_Zamak",5},
{"Exile_Car_Tempest",5},
{"Exile_Car_HEMMT",5},
// Additional Vehicles
{"B_GEN_Offroad_01_gen_F",5},
{"C_Offroad_02_unarmed_F",5},
{"I_C_Offroad_02_unarmed_F",5},
{"Exile_Car_LandRover_Green",5},
{"Exile_Car_LandRover_Red",5},
{"Exile_Car_LandRover_Urban",5},
{"Exile_Car_LandRover_Desert",5},
{"Exile_Bike_QuadBike_Black",5},
{"Exile_Car_UAZ_Open_Green",5},
{"Exile_Car_SUV_Black",5},
{"Exile_Car_SUV_Orange",5},
{"Exile_Car_SUV_Rusty1",5},
{"Exile_Car_SUV_Rusty2",5},
{"Exile_Car_SUV_Rusty3",5},
{"Exile_Car_Offroad_Guerilla01",5},
{"Exile_Car_Offroad_Guerilla02",5},
{"Exile_Car_Offroad_Guerilla03",5},
{"Exile_Car_Offroad_Guerilla04",5},
{"Exile_Car_Offroad_Guerilla05",5},
{"Exile_Car_Offroad_Guerilla06",5},
{"Exile_Car_Offroad_Guerilla07",5},
{"Exile_Car_Offroad_Guerilla08",5},
{"Exile_Car_Offroad_Guerilla09",5},
{"Exile_Car_Offroad_Guerilla10",5},
{"Exile_Car_Offroad_Guerilla11",5},
{"Exile_Car_Offroad_Guerilla12",5},
{"B_LSV_01_unarmed_black_F",5},
{"O_T_LSV_02_unarmed_black_F",5},
{"O_T_Truck_03_device_ghex_F",5},
{"Exile_Car_Offroad_Armed_Guerilla12",5},
{"Exile_Car_Offroad_Armed_Guerilla03",5}
};
//Maximum number of gunner units per land vehicle. Limited by actual number of available gunner positions. (Default: 2)
landGunnerUnits = 2;
//Maximum number of cargo units per land vehicle. Limited by actual number of available cargo positions. (Default: 3)
landCargoUnits = 3;
/* AI Air Reinforcement Settings
Allowed types of AI groups (defined by airReinforcementAllowedTypes) may call for temporary air reinforcements if a player kills one of their units.
Probability to summon reinforcements determined by airReinforcementSpawnChance<AI level>, where <AI level> is the level of the calling group.
Once summoned, armed reinforcement vehicles will remain in the area for a duration determined by airReinforcementDuration<AI level> and engage nearby players.
Unarmed reinforcement vehicles will deploy a paradrop group and exit the area.
--------------------------------------------------------------------------------------------------------------------*/
//Maximum allowed number of simultaneous active reinforcements (Default: 5)
maxAirReinforcements = 5;
//Air vehicles to use as reinforcement vehicles. Default: {"B_Heli_Transport_01_F","B_Heli_Light_01_armed_F"}
//Armed air vehicles will detect and engage players within reinforcement area. Unarmed air vehicles will deploy an AI paradrop group.
airReinforcementVehicles[] = {
"B_Heli_Transport_01_F",
"B_Heli_Light_01_armed_F"
};
//Probability to spawn reinforcements for each AI level.
airReinforcementSpawnChance0 = 0.00;
airReinforcementSpawnChance1 = 0.10;
airReinforcementSpawnChance2 = 0.20;
airReinforcementSpawnChance3 = 0.30;
//AI types permitted to summon reinforcements. Default: airReinforcementAllowedFor[] = {"static","dynamic","random"};
//Usable AI types: "static", "dynamic", "random", "air", "land", "staticcustom", "aircustom", "landcustom", "vehiclecrew"
airReinforcementAllowedFor[] = {"static","dynamic","random"};
//Maximum time for reinforcement for armed air vehicles in seconds. AI air vehicle will leave the area after this time if not destroyed.
airReinforcementDuration0 = 120;
airReinforcementDuration1 = 180;
airReinforcementDuration2 = 240;
airReinforcementDuration3 = 300;
/* UAV Patrol Settings
IMPORTANT: UAV patrols are a feature in testing, and may undergo significant changes or possible removal in future versions.
A3XAI can spawn UAVs that patrol between named locations, and deploy air reinforcements if players are found.
In order for air reinforcements to be deployed, maxAirReinforcements must be greater than zero and the current limit of air reinforcements has not been exceeded.
--------------------------------------------------------------------------------------------------------------------*/
//Global maximum number of active UAV patrols. Set at 0 to disable (Default: 0).
maxUAVPatrols = 2;
//Classnames of UAV types to use, with the maximum amount of each type to spawn.
UAVList[] = {
{"I_UAV_02_CAS_F",5},
{"I_UAV_02_F",5},
{"B_UAV_02_CAS_F",5},
{"B_UAV_02_F",5},
{"O_UAV_02_CAS_F",5},
{"O_UAV_02_F",5}
};
//Probability of spawning Level 0/1/2/3 UAV spawns. Probabilities should add up to 1.00
levelChancesUAV[] = {0.35,0.50,0.15,0.00};
//Set minimum and maximum wait time in seconds to respawn a UAV after vehicle is destroyed or disabled. (Default: Min 600, Max 900).
respawnUAVMinTime = 600;
respawnUAVMaxTime = 900;
//Set to '1' to set detection-only behavior (UAV will not directly engage enemies). (Default: 0)
detectOnlyUAVs = 0;
//Cooldown required in between air reinforcement summons when detecting players. Value in seconds. (Default: 1800)
UAVCallReinforceCooldown = 1800;
//Probability to successfully detect player if there is line-of-sight. If at least one player is detected, air reinforcements will be summoned to the area. (Default: 0.50)
UAVDetectChance = 0.80;
/* UGV Patrol Settings
IMPORTANT: UGV patrols are a feature in testing, and may undergo significant changes or possible removal in future versions.
A3XAI can spawn UGVs that patrol between named locations, and deploy air reinforcements if players are found. Damaged UGVs repair themselves over time if not engaging enemes.
In order for air reinforcements to be deployed, maxAirReinforcements must be greater than zero and the current limit of air reinforcements has not been exceeded.
--------------------------------------------------------------------------------------------------------------------*/
//Global maximum number of active UGV patrols. Set at 0 to disable (Default: 0).
maxUGVPatrols = 0;
//Classnames of UGV types to use, with the maximum amount of each type to spawn.
UGVList[] = {
{"I_UGV_01_rcws_F",5},
{"B_UGV_01_rcws_F",5},
{"O_UGV_01_rcws_F",5}
};
//Probability of spawning Level 0/1/2/3 AI UGV spawns. Probabilities should add up to 1.00
levelChancesUGV[] = {0.35,0.50,0.15,0.00};
//Set minimum and maximum wait time in seconds to respawn a UGV patrol after vehicle is destroyed or disabled. (Default: Min 600, Max 900).
respawnUGVMinTime = 600;
respawnUGVMaxTime = 900;
//Set to '1' to set detection-only behavior (UGV will not directly engage enemies). (Default: 0)
detectOnlyUGVs = 0;
//Cooldown required in between air reinforcement summons when detecting players. Value in seconds. (Default: 1800)
UGVCallReinforceCooldown = 1800;
//Probability to successfully detect player if there is line-of-sight. If at least one player is detected, air reinforcements will be summoned to the area. (Default: 0.50)
UGVDetectChance = 0.80;
/*
AI skill settings.
These settings affect all AI units spawned by A3XAI.
Skill Level: Description
0: Low-level AI found in villages
1: Medium-level AI found in cities and capital cities
2: High-level AI found in remote areas such as factories and military bases
3: Expert-level AI.
Valid skill range: 0.00 - 1.00.
Hint: For all skill types, higher number = better skill. For skill sub-type explanation, see: https://community.bistudio.com/wiki/AI_Sub-skills
*/
//AI skill settings level 0 (Skill, Minimum skill, Maximum skill). Defaults: Accuracy 0.05-0.10, Others 0.30-0.50
skill0[] = {
{"aimingAccuracy",0.05,0.10},
{"aimingShake",0.30,0.50},
{"aimingSpeed",0.30,0.50},
{"spotDistance",0.30,0.50},
{"spotTime",0.30,0.50},
{"courage",0.30,0.50},
{"reloadSpeed",0.30,0.50},
{"commanding",0.30,0.50},
{"general",0.30,0.50}
};
//AI skill settings level 1 (Skill, Minimum skill, Maximum skill). Defaults: Accuracy 0.10-0.15, Others 0.40-0.60
skill1[] = {
{"aimingAccuracy",0.10,0.15},
{"aimingShake",0.40,0.60},
{"aimingSpeed",0.40,0.60},
{"spotDistance",0.40,0.60},
{"spotTime",0.40,0.60},
{"courage",0.40,0.60},
{"reloadSpeed",0.40,0.60},
{"commanding",0.40,0.60},
{"general",0.40,0.60}
};
//AI skill settings level 2 (Skill, Minimum skill, Maximum skill). Defaults: Accuracy 0.15-0.20, Others 0.50-0.70
skill2[] = {
{"aimingAccuracy",0.15,0.20},
{"aimingShake",0.50,0.70},
{"aimingSpeed",0.50,0.70},
{"spotDistance",0.50,0.70},
{"spotTime",0.50,0.70},
{"courage",0.50,0.70},
{"reloadSpeed",0.50,0.70},
{"commanding",0.50,0.70},
{"general",0.50,0.70}
};
//AI skill settings level 3 (Skill, Minimum skill, Maximum skill). Defaults: Accuracy 0.20-0.25, Others 0.60-0.80
skill3[] = {
{"aimingAccuracy",0.20,0.25},
{"aimingShake",0.60,0.80},
{"aimingSpeed",0.60,0.80},
{"spotDistance",0.60,0.80},
{"spotTime",0.60,0.80},
{"courage",0.60,0.80},
{"reloadSpeed",0.60,0.80},
{"commanding",0.60,0.80},
{"general",0.60,0.80}
};
/* AI loadout probability settings.
--------------------------------------------------------------------------------------------------------------------*/
//Probabilities to equip backpack, according to AI level.
addBackpackChance0 = 0.60;
addBackpackChance1 = 0.70;
addBackpackChance2 = 0.80;
addBackpackChance3 = 0.90;
//Probabilities to equip vest, according to AI level.
addVestChance0 = 0.60;
addVestChance1 = 0.70;
addVestChance2 = 0.80;
addVestChance3 = 0.90;
//Probabilities to equip headgear, according to AI level.
addHeadgearChance0 = 0.60;
addHeadgearChance1 = 0.70;
addHeadgearChance2 = 0.80;
addHeadgearChance3 = 0.90;
//Probabilities to equip level 0-3 AI with each weapon type. Order: {pistols, rifles, machineguns, sniper rifles}. Probabilities must add up to 1.00.
useWeaponChance0[] = {0.20,0.80,0.00,0.00};
useWeaponChance1[] = {0.00,0.90,0.05,0.05};
useWeaponChance2[] = {0.00,0.80,0.10,0.10};
useWeaponChance3[] = {0.00,0.70,0.15,0.15};
//Probability to select a random optics attachment (ie: scopes) for level 0-3 AI
opticsChance0 = 0.00;
opticsChance1 = 0.30;
opticsChance2 = 0.60;
opticsChance3 = 0.90;
//Probability to select a random pointer attachment (ie: flashlights) for level 0-3 AI
pointerChance0 = 0.00;
pointerChance1 = 0.30;
pointerChance2 = 0.60;
pointerChance3 = 0.90;
//Probability to select a random muzzle attachment (ie: suppressors) for level 0-3 AI
muzzleChance0 = 0.00;
muzzleChance1 = 0.30;
muzzleChance2 = 0.60;
muzzleChance3 = 0.90;
//Probability to select a random underbarrel attachment (ie: bipods) for level 0-3 AI
underbarrelChance0 = 0.00;
underbarrelChance1 = 0.30;
underbarrelChance2 = 0.60;
underbarrelChance3 = 0.90;
/* AI loot quantity settings
--------------------------------------------------------------------------------------------------------------------*/
//Maximum number of food loot items found on AI. (Default: 2)
foodLootCount = 2;
//Maximum number of items to select from MiscLoot (generic loot) table. (Default: 2)
miscLootCount = 2;
/* AI loot probability settings. AI loot is pre-generated into a pool for each unit and randomly pulled to units as time passes.
--------------------------------------------------------------------------------------------------------------------*/
//Chance to add a single InstaDoc to group loot pool per unit (Default: 0.25)
firstAidKitChance = 0.25;
//Probability to successfully pull a random item from loot pool for level 0-3 AI. Influences the rate at which loot items are added to units.
lootPullChance0 = 0.20;
lootPullChance1 = 0.40;
lootPullChance2 = 0.60;
lootPullChance3 = 0.80;
/* Respect rewards for AI kills. Note: This section only has effects if enableRespectRewards is enabled.
--------------------------------------------------------------------------------------------------------------------*/
//Enable Exile-style handling (ie: Respect rewards, kill-count tracking) for AI kills (Default: 1)
enableRespectRewards = 1;
//Respect bonus for kills with Axe
respectHumiliation = 300;
//Respect bonus for standard kills
respectFragged = 100;
//Respect bonus for collision kills with parachute
respectChute = 600;
//Respect bonus for collision kills with air vehicle
respectBigBird = 600;
//Respect bonus for collision kills by vehicle driver
respectRoadkill = 500;
//Respect bonus for kills with vehicle weapons
respectLetItRain = 150;
//Respect bonus per kill streak
respectKillstreak = 50;
//Respect bonus per 100m distance from target
respectPer100m = 10;
/*
AI skin, weapon, loot, and equipment settings
Note: Some of the below tables may not be used by A3XAI if a dynamic classname setting is enabled. Check each section below for details.
*/
//AI uniform classnames. Note: uniformTypes0-3 will not be read if generateDynamicUniforms is enabled.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
uniformTypes0[] = {"U_C_Journalist","U_C_Poloshirt_blue","U_C_Poloshirt_burgundy","U_C_Poloshirt_salmon","U_C_Poloshirt_stripped","U_C_Poloshirt_tricolour","U_C_Poor_1","U_C_Poor_2","U_C_Poor_shorts_1","U_C_Scientist"};
uniformTypes1[] = {"U_B_CombatUniform_mcam_worn","U_B_CTRG_1","U_B_CTRG_2","U_B_CTRG_3","U_I_CombatUniform","U_I_CombatUniform_shortsleeve","U_I_CombatUniform_tshirt","U_I_OfficerUniform","U_O_CombatUniform_ocamo","U_O_CombatUniform_oucamo","U_C_HunterBody_grn","U_IG_Guerilla1_1","U_IG_Guerilla2_1","U_IG_Guerilla2_2","U_IG_Guerilla2_3","U_IG_Guerilla3_1","U_BG_Guerilla2_1","U_IG_Guerilla3_2","U_BG_Guerrilla_6_1","U_BG_Guerilla1_1","U_BG_Guerilla2_2","U_BG_Guerilla2_3","U_BG_Guerilla3_1","U_BG_leader","U_IG_leader","U_B_GhillieSuit","U_I_GhillieSuit","U_O_GhillieSuit","U_B_HeliPilotCoveralls","U_I_HeliPilotCoveralls","U_B_PilotCoveralls","U_I_pilotCoveralls"};
uniformTypes2[] = {"U_OrestesBody","U_NikosAgedBody","U_NikosBody","U_B_CombatUniform_mcam","U_B_CTRG_1","U_B_CTRG_2","U_B_CTRG_3","U_O_OfficerUniform_ocamo","U_B_SpecopsUniform_sgg","U_O_SpecopsUniform_blk","U_O_SpecopsUniform_ocamo","U_I_G_Story_Protagonist_F","U_IG_Guerilla2_1","U_BG_Guerrilla_6_1","U_I_G_resistanceLeader_F","U_B_FullGhillie_ard","U_B_FullGhillie_lsh","U_B_FullGhillie_sard","U_B_GhillieSuit","U_I_FullGhillie_ard","U_I_FullGhillie_lsh","U_I_FullGhillie_sard","U_I_GhillieSuit","U_O_FullGhillie_ard","U_O_FullGhillie_lsh","U_O_FullGhillie_sard","U_O_GhillieSuit","U_I_Wetsuit","U_O_Wetsuit","U_B_Wetsuit","U_B_survival_uniform"};
uniformTypes3[] = {"U_OrestesBody","U_NikosAgedBody","U_NikosBody","U_O_OfficerUniform_ocamo","U_B_SpecopsUniform_sgg","U_O_SpecopsUniform_blk","U_O_SpecopsUniform_ocamo","U_I_G_Story_Protagonist_F","U_I_G_resistanceLeader_F","U_B_FullGhillie_ard","U_B_FullGhillie_lsh","U_B_FullGhillie_sard","U_I_FullGhillie_ard","U_I_FullGhillie_lsh","U_I_FullGhillie_sard","U_O_FullGhillie_ard","U_O_FullGhillie_lsh","U_O_FullGhillie_sard","U_I_Wetsuit","U_O_Wetsuit","U_B_Wetsuit","U_B_survival_uniform"};
//AI weapon classnames. Note: pistolList, rifleList, machinegunList, sniperList will not be read if generateDynamicWeapons is enabled.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pistolList[] = {"hgun_ACPC2_F","hgun_P07_F","hgun_Pistol_heavy_01_F","hgun_Pistol_heavy_02_F","hgun_Rook40_F"};
rifleList[] = {"arifle_Katiba_C_F","arifle_Katiba_F","arifle_Katiba_GL_F","arifle_Mk20_F","arifle_Mk20_GL_F","arifle_Mk20_GL_plain_F","arifle_Mk20_plain_F","arifle_Mk20C_F","arifle_Mk20C_plain_F","arifle_MX_Black_F","arifle_MX_F","arifle_MX_GL_Black_F","arifle_MX_GL_F","arifle_MXC_Black_F","arifle_MXC_F","arifle_SDAR_F","arifle_TRG20_F","arifle_TRG21_F","arifle_TRG21_GL_F"};
machinegunList[] = {"arifle_MX_SW_Black_F","arifle_MX_SW_F","LMG_Mk200_F","LMG_Zafir_F","MMG_01_hex_F","MMG_01_tan_F","MMG_02_black_F","MMG_02_camo_F","MMG_02_sand_F"};
sniperList[] = {"arifle_MXM_Black_F","arifle_MXM_F","srifle_DMR_01_F","srifle_DMR_02_camo_F","srifle_DMR_02_F","srifle_DMR_02_sniper_F","srifle_DMR_03_F","srifle_DMR_03_khaki_F","srifle_DMR_03_multicam_F","srifle_DMR_03_tan_F","srifle_DMR_03_woodland_F","srifle_DMR_04_F","srifle_DMR_04_Tan_F","srifle_DMR_05_blk_F","srifle_DMR_05_hex_F","srifle_DMR_05_tan_f","srifle_DMR_06_camo_F","srifle_DMR_06_olive_F","srifle_EBR_F","srifle_GM6_camo_F","srifle_GM6_F","srifle_LRR_camo_F","srifle_LRR_F"};
//AI weapon scope attachment settings. Note: weaponOpticsList will not be read if generateDynamicOptics is enabled.
weaponOpticsList[] = {"optic_NVS","optic_SOS","optic_LRPS","optic_AMS","optic_AMS_khk","optic_AMS_snd","optic_KHS_blk","optic_KHS_hex","optic_KHS_old","optic_KHS_tan","optic_DMS","optic_Arco","optic_Hamr","Elcan_Exile","Elcan_reflex_Exile","optic_MRCO","optic_Holosight","optic_Holosight_smg","optic_Aco","optic_ACO_grn","optic_Aco_smg","optic_ACO_grn_smg","optic_Yorris","optic_MRD"};
//AI backpack types (for AI levels 0-3). Note: backpackTypes0-3 will not be read if generateDynamicBackpacks is enabled.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
backpackTypes0[] = {"B_AssaultPack_blk","B_AssaultPack_cbr","B_AssaultPack_dgtl","B_AssaultPack_khk","B_AssaultPack_mcamo","B_AssaultPack_rgr","B_AssaultPack_sgg","B_OutdoorPack_blk","B_OutdoorPack_blu","B_OutdoorPack_tan"};
backpackTypes1[] = {"B_Bergen_blk","B_Bergen_mcamo","B_Bergen_rgr","B_Bergen_sgg","B_FieldPack_blk","B_FieldPack_cbr","B_FieldPack_ocamo","B_FieldPack_oucamo","B_OutdoorPack_blk","B_OutdoorPack_blu","B_OutdoorPack_tan","B_TacticalPack_blk","B_TacticalPack_mcamo","B_TacticalPack_ocamo","B_TacticalPack_oli","B_TacticalPack_rgr"};
backpackTypes2[] = {"B_Bergen_blk","B_Bergen_mcamo","B_Bergen_rgr","B_Bergen_sgg","B_Carryall_cbr","B_Carryall_khk","B_Carryall_mcamo","B_Carryall_ocamo","B_Carryall_oli","B_Carryall_oucamo","B_FieldPack_blk","B_FieldPack_cbr","B_FieldPack_ocamo","B_FieldPack_oucamo","B_HuntingBackpack","B_Kitbag_cbr","B_Kitbag_mcamo","B_Kitbag_sgg"};
backpackTypes3[] = {"B_Carryall_cbr","B_Carryall_khk","B_Carryall_mcamo","B_Carryall_ocamo","B_Carryall_oli","B_Carryall_oucamo","B_HuntingBackpack","B_Kitbag_cbr","B_Kitbag_mcamo","B_Kitbag_sgg"};
//AI vest types (for AI levels 0-3). Note: vestTypes0-3 will not be read if generateDynamicVests is enabled.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vestTypes0[] = {"V_Press_F","V_Rangemaster_belt","V_BandollierB_blk","V_BandollierB_cbr","V_BandollierB_khk","V_BandollierB_oli","V_BandollierB_rgr","V_Chestrig_blk","V_Chestrig_khk","V_Chestrig_oli","V_Chestrig_rgr"};
vestTypes1[] = {"V_Chestrig_blk","V_Chestrig_khk","V_Chestrig_oli","V_Chestrig_rgr","V_HarnessO_brn","V_HarnessO_gry","V_HarnessOGL_brn","V_HarnessOGL_gry","V_HarnessOSpec_brn","V_HarnessOSpec_gry","V_PlateCarrier1_blk","V_PlateCarrier1_rgr","V_PlateCarrier2_rgr","V_PlateCarrier3_rgr","V_PlateCarrierH_CTRG","V_PlateCarrierIA1_dgtl","V_PlateCarrierIA2_dgtl","V_PlateCarrierL_CTRG"};
vestTypes2[] = {"V_TacVest_blk","V_TacVest_blk_POLICE","V_TacVest_brn","V_TacVest_camo","V_TacVest_khk","V_TacVest_oli","V_TacVestCamo_khk","V_TacVestIR_blk","V_I_G_resistanceLeader_F","V_PlateCarrier2_rgr","V_PlateCarrier3_rgr","V_PlateCarrierGL_blk","V_PlateCarrierGL_mtp","V_PlateCarrierGL_rgr","V_PlateCarrierH_CTRG","V_PlateCarrierIA1_dgtl","V_PlateCarrierIA2_dgtl","V_PlateCarrierIAGL_dgtl","V_PlateCarrierIAGL_oli","V_PlateCarrierL_CTRG","V_PlateCarrierSpec_blk","V_PlateCarrierSpec_mtp","V_PlateCarrierSpec_rgr"};
vestTypes3[] = {"V_TacVest_blk_POLICE","V_PlateCarrierGL_blk","V_PlateCarrierGL_mtp","V_PlateCarrierGL_rgr","V_PlateCarrierIAGL_dgtl","V_PlateCarrierIAGL_oli","V_PlateCarrierSpec_blk","V_PlateCarrierSpec_mtp","V_PlateCarrierSpec_rgr"};
//AI head gear types. Note: headgearTypes0-3 will not be read if generateDynamicHeadgear is enabled.
headgearTypes0[] = {"H_Cap_blk","H_Cap_blk_Raven","H_Cap_blu","H_Cap_brn_SPECOPS","H_Cap_grn","H_Cap_headphones","H_Cap_khaki_specops_UK","H_Cap_oli","H_Cap_press","H_Cap_red","H_Cap_tan","H_Cap_tan_specops_US","H_Watchcap_blk","H_Watchcap_camo"};
headgearTypes1[] = {"H_Beret_02","H_Beret_blk","H_Beret_blk_POLICE","H_Beret_brn_SF","H_Beret_grn","H_Beret_grn_SF","H_Beret_ocamo","H_Beret_red","H_Shemag_khk","H_Shemag_olive","H_Shemag_olive_hs","H_Shemag_tan"};
headgearTypes2[] = {"H_Beret_Colonel","H_HelmetB","H_HelmetB_black","H_HelmetB_camo","H_HelmetB_desert","H_HelmetB_grass","H_HelmetB_paint","H_HelmetB_plain_blk","H_HelmetB_sand","H_HelmetB_snakeskin","H_HelmetLeaderO_ocamo","H_HelmetLeaderO_oucamo","H_HelmetO_ocamo","H_HelmetO_oucamo","H_HelmetSpecB","H_HelmetSpecB_blk","H_HelmetSpecB_paint1","H_HelmetSpecB_paint2","H_HelmetSpecO_blk","H_HelmetSpecO_ocamo","H_CrewHelmetHeli_B","H_CrewHelmetHeli_I","H_CrewHelmetHeli_O","H_PilotHelmetHeli_B","H_PilotHelmetHeli_I","H_PilotHelmetHeli_O"};
headgearTypes3[] = {"H_Beret_Colonel","H_HelmetB_camo","H_HelmetLeaderO_ocamo","H_HelmetLeaderO_oucamo","H_HelmetO_ocamo","H_HelmetO_oucamo","H_HelmetSpecO_blk","H_HelmetSpecO_ocamo","H_PilotHelmetHeli_B","H_PilotHelmetHeli_I","H_PilotHelmetHeli_O"};
//AI Food/Loot item types.
// Note: foodLoot will not be read if generateDynamicFood is enabled.
// Note: miscLoot will not be read if generateDynamicLoot is enabled.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
foodLoot[] = {"Exile_Item_GloriousKnakworst","Exile_Item_SausageGravy","Exile_Item_ChristmasTinner","Exile_Item_BBQSandwich","Exile_Item_Surstromming","Exile_Item_Catfood","Exile_Item_PlasticBottleFreshWater","Exile_Item_Beer","Exile_Item_Energydrink"};
miscLoot[] = {"Exile_Item_Rope","Exile_Item_DuctTape","Exile_Item_ExtensionCord","Exile_Item_FuelCanisterEmpty","Exile_Item_JunkMetal","Exile_Item_LightBulb","Exile_Item_MetalBoard","Exile_Item_MetalPole","Exile_Item_CamoTentKit"};
//AI toolbelt item types. Toolbelt items are added to AI inventory upon death. Format: [item classname, item probability]
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
toolsList0[] = {
{"Exile_Item_XM8",0.90},{"ItemCompass",0.30},{"ItemMap",0.30},{"ItemGPS",0.00},{"ItemRadio",0.00}
};
toolsList1[] = {
{"Exile_Item_XM8",0.90},{"ItemCompass",0.50},{"ItemMap",0.50},{"ItemGPS",0.10},{"ItemRadio",0.10}
};
toolsList2[] = {
{"Exile_Item_XM8",0.90},{"ItemCompass",0.70},{"ItemMap",0.70},{"ItemGPS",0.20},{"ItemRadio",0.20}
};
toolsList3[] = {
{"Exile_Item_XM8",0.90},{"ItemCompass",0.90},{"ItemMap",0.90},{"ItemGPS",0.30},{"ItemRadio",0.30}
};
//AI-useable toolbelt item types. These items are added to AI inventory at unit creation and may be used by AI. Format: {item classname, item probability}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
gadgetsList0[] = {
{"binocular",0.30},{"NVGoggles",0.00}
};
gadgetsList1[] = {
{"binocular",0.50},{"NVGoggles",0.10}
};
gadgetsList2[] = {
{"binocular",0.70},{"NVGoggles",0.15}
};
gadgetsList3[] = {
{"binocular",0.90},{"NVGoggles",0.20}
};
};

BIN
@A3XAI_HC/Keys/a3xai.bikey Normal file

Binary file not shown.

BIN
@A3XAI_HC/addons/a3xai.pbo Normal file

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,3 @@
[General]
LootCfg=ExileLootDrop.cfg
CacheItems=10000

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
a3_infiSTAR_Exile

View File

@ -0,0 +1,47 @@
/*
Author: Chris(tian) "infiSTAR" Lorenzen
Contact: infiSTAR23@gmail.com // www.infiSTAR.de
Copyright infiSTAR - 2011 - 2018. All rights reserved.
Christian (Chris) L. (infiSTAR23@gmail.com) Developer of infiSTAR
Description:
Arma AntiHack & AdminTools - infiSTAR.de
READ:
type 0 = just execute
type 1 = toggleable function
type 2 = function targets the selected player (it will be _this)
name = name shown in the admin menu (this is also what has to be put in the EXILE_AHAT_CONFIG.sqf as Admin Power!)
code = code to execute - if you have a linebreak within the code, you need to put a \ at the end of each line!
*/
class CfgCustomFunctions {
class custom1 {
type = 0; // just execute
name = "custom1: type = 0";
code = "systemChat 'custom1';";
};
class custom2 {
type = 1; // toggle on/off
name = "custom2: type = 1";
code = "if(isNil'custom2toggled')then{systemChat 'custom2 toggled on';custom2toggled=true;}else{systemChat 'custom2 toggled off';custom2toggled=nil;};";
};
class custom3 {
type = 2; // targets selected player (_this)
name = "custom3: type = 2";
code = "systemChat format['custom3 -> selected player: %1',name _this];";
};
class custom4 {
type = 2; // targets selected player (_this)
name = "custom4: type = 2";
code = "[_this] call fnc_TP2ME;";
};
class custom5 {
type = 0; // just execute
name = "custom5: type = 0";
code = "systemChat 'custom5';";
};
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,981 @@
/*
Author: Chris(tian) "infiSTAR" Lorenzen
Contact: infiSTAR23@gmail.com // www.infiSTAR.de
Copyright infiSTAR. All rights reserved.
Description:
Arma AntiHack & AdminTools - infiSTAR.de
UPDATEEMAIL for http://update.infiSTAR.de is:
'zepheris.craty@gmail.com'
Last download was on:
'10-02-2018 12-02-40';
*/
class Cfg_infiSTAR_settings {
/*
"serverCommandPassword" is serverCommandPassword - in your servers config.cfg
if your config.cfg does not have serverCommandPassword yet, simply add it in a new line:
serverCommandPassword = "changeme";
This is VERY IMPORTANT as it is needed to KICK & BAN people.
It will try to get this password from "@ExileServer\addons\exile_server_config" first. If you did not set a password there (config.cpp),
then it will take what you put here.
*/
serverCommandPassword = "Ilovegina";
/*
"passwordAdmin" is passwordAdmin - in your servers config.cfg, needed for servercommands from client
This is used to be able to use the "login" function ingame. Will log you in as Arma "Admin".
*/
passwordAdmin = "Ilovegina1";
/* serverCommandPassword and passwordAdmin should always be different passwords or it could cause problems! */
HIDE_FROM_PLAYERS = "false"; /* So no normal can see it :)! */
announce_adminstate_changed = "false"; /* whenever you type !admin as an admin it will announce that you logged out or in to all players on the server! */
use_html_load_on_adminmenu = "true"; /* default and recommended is "true". infiSTAR updates and news are announced in the top right corner when you open the AdminMenu if this is "true"! */
LogAdminActions = "true"; /* "LogAdminActions": Sends actions done by each admin to the server to log it to the .txt file (if infiSTAR dlls are used) and .rpt file + sends it back to all other admins. */
enableIngameLogs = "true"; /* These logs are shown in the admin menu (disabling it might lower performance cost, since it sends a lot of big strings through the network) */
MY_LOG_FOLDER = "infiSTAR_Logs"; /* MY_LOG_FOLDER = "infiSTAR Logs"; - would create a folder named "infiSTAR Logs" */
/*
if you set "useAdminNameTag" to "true",
each admin uid can have an individual AdminTag which needs to be a part of the admins name.
Without it, the admin will not get access to the admin menu.
example names: "[Admin] PlayerName" or "PlayerName [Admin]"
note: this is case sensitive as well, meaning "PlayerName [admin]" would not work as we set our example to "[Admin]"
*/
class adminNameTags {
useAdminNameTag = "false";
tags[] = {
{"[Admin]","UID1"},
{"[Owner]","UID2"},
{"[Slave]","UID3"},
{"[Admin]","UID4"},
{"[Admin]","UID5"}
};
};
/* "startAsNormal": if you add admin UIDs in here as well, they will start as almost "normal" player instead of with admin menu and such. */
startAsNormal[] =
{
"76561198031039372","UID2","UID3","..."
};
/* "hiddenSuperAdmin": These admins are seen as normal players by normal admins, their actions are not logged either (to keep an eye out on your admins) */
hiddenSuperAdmin[] =
{
"UID1","UID2","UID3","..."
};
adminUIDandAccess[] =
{
{
{"76561198031039372","UID2","UID3","..."}, /* Admins with UIDs in this Array have their Access defined in the array below. */
{
"Territory Management",
"Teleport On Map Click","Teleport - Target To Me","Teleport - Me To Target",
"Teleport In Facing Direction (10m steps)","Drag and drop units on the map",
"spectating","Delete Vehicle","FlyUp","ShowGear","Show Server Information",
"HealSelf","HealRepairNear","AdminLog","Freeze","UnFreeze","Restrain","UnRestrain",
"==== Loadouts ====","==== Base Deleter ====","Items spawn menu",
"Remove Gear","Revive","Heal","Restore","Flip Vehicle","Move In My Vehicle","Move In Target Vehicle","Parachute Target","Eject","Eject Crew",
"Player ESP","Player ESP (safezone style)","AI ESP","Dead ESP","Loot ESP",
"Vehicle Marker","Flag Marker (with radius)","Box/Safe/Container Marker","DeadPlayer Marker",
"God Mode","God Mode (no stats change)","Vehicle God Mode","Lower Terrain","Vehboost","UnlimAmmo","noRecoil","FastFire","Stealth / Invisible",
"Disable Announces","Mass Message","Change Time","Spawn Support-Boxes","Create Billboard","Change ViewDistance",
"Spawn Ammo","Login as Arma Admin","BIS FreeRoam Cam (works with ESP)","FreeRoam Cam (does not work with ESP)",
"Request Steam Name","showinfo",
"UnlockLockVehicle","Copy Worldspace(coords) to RPT & Chat",
"Spawn Vehicles","Spawn Persistent Vehicles","Trader Menu",
"Kill","Explode","Force Disconnect",
"Kick (Silent)","Kick (Announce)","Ban (Silent)","Ban (Announce)","TempBan (Silent)","TempBan (Announce)",
"AdminConsole",
"DebugConsole",
"Execute code on server (DebugConsole)","Execute code global (DebugConsole)","Execute code local (DebugConsole)",
"Lock Server (DebugConsole)","UnLock Server (DebugConsole)","Ban (DebugConsole)","Kick (DebugConsole)",
"Change Money on Player","Change Money on Bank","Change Respect",
"MapIcons",
"MapIcons: Buildings","MapIcons: Flags",
"MapIcons: Player","MapIcons: DeadPlayer","MapIcons: Vehicles",
"MapIcons: Vehicle Types","MapIcons: Vehicle lockstate","MapIcons: DeadVehicles",
"MapIcons: AI",
"Arsenal", // Adds Arsenal to the mousewheel actions if you press "," on the Numpad!
"Unconscious","Remove Unconscious",
"Light", // Zeus like Lighting from the Air strikes down at selected player / target / location - use ctrl+1 or the menu to use it!
"Spawn Zombie on Target Location!", // This only works when you are using ExilZ / RyanZombies
""
}
},
{
{"UID1","UID2","UID3","..."},
{
"Teleport On Map Click","Teleport - Target To Me","Teleport - Me To Target",
"Teleport In Facing Direction (10m steps)","Drag and drop units on the map",
"spectating","Delete Vehicle","FlyUp","ShowGear","Show Server Information",
"HealSelf","HealRepairNear","AdminLog","Freeze","UnFreeze","Restrain","UnRestrain",
"==== Loadouts ====","==== Base Deleter ====","Items spawn menu",
"Remove Gear","Revive","Heal","Restore","Flip Vehicle","Move In My Vehicle","Move In Target Vehicle","Parachute Target","Eject","Eject Crew",
"Player ESP","Player ESP (safezone style)","AI ESP","Dead ESP","Loot ESP",
"Vehicle Marker","Flag Marker (with radius)","Box/Safe/Container Marker","DeadPlayer Marker",
"God Mode","God Mode (no stats change)","Vehicle God Mode","Lower Terrain","Vehboost","UnlimAmmo","noRecoil","FastFire","Stealth / Invisible",
"Disable Announces","Mass Message","Change Time","Spawn Support-Boxes","Create Billboard","Change ViewDistance",
"Spawn Ammo","Login as Arma Admin","BIS FreeRoam Cam (works with ESP)","FreeRoam Cam (does not work with ESP)",
"Request Steam Name","showinfo",
"UnlockLockVehicle","Copy Worldspace(coords) to RPT & Chat",
"Spawn Vehicles","Spawn Persistent Vehicles","Trader Menu",
"Kill","Explode","Force Disconnect",
"Kick (Silent)","Kick (Announce)","Ban (Silent)","Ban (Announce)","TempBan (Silent)","TempBan (Announce)",
"AdminConsole",
"DebugConsole",
"Execute code on server (DebugConsole)","Execute code global (DebugConsole)","Execute code local (DebugConsole)",
"Lock Server (DebugConsole)","UnLock Server (DebugConsole)","Ban (DebugConsole)","Kick (DebugConsole)",
"Change Money on Player","Change Money on Bank","Change Respect",
"MapIcons",
"MapIcons: Buildings","MapIcons: Flags",
"MapIcons: Player","MapIcons: DeadPlayer","MapIcons: Vehicles",
"MapIcons: Vehicle Types","MapIcons: Vehicle lockstate","MapIcons: DeadVehicles",
"MapIcons: AI",
"Arsenal",
"Unconscious","Remove Unconscious",
"Light",
"Spawn Zombie on Target Location!",
""
}
},
{
{"UID1","UID2","UID3","..."},
{
"Teleport On Map Click","Teleport - Target To Me","Teleport - Me To Target",
"Teleport In Facing Direction (10m steps)","Drag and drop units on the map",
"spectating","Delete Vehicle","FlyUp","ShowGear","Show Server Information",
"HealSelf","HealRepairNear","AdminLog","Freeze","UnFreeze","Restrain","UnRestrain",
"==== Loadouts ====","==== Base Deleter ====","Items spawn menu",
"Remove Gear","Revive","Heal","Restore","Flip Vehicle","Move In My Vehicle","Move In Target Vehicle","Parachute Target","Eject","Eject Crew",
"Player ESP","Player ESP (safezone style)","AI ESP","Dead ESP","Loot ESP",
"Vehicle Marker","Flag Marker (with radius)","Box/Safe/Container Marker","DeadPlayer Marker",
"God Mode","God Mode (no stats change)","Vehicle God Mode","Lower Terrain","Vehboost","UnlimAmmo","noRecoil","FastFire","Stealth / Invisible",
"Disable Announces","Mass Message","Change Time","Spawn Support-Boxes","Create Billboard","Change ViewDistance",
"Spawn Ammo","Login as Arma Admin","BIS FreeRoam Cam (works with ESP)","FreeRoam Cam (does not work with ESP)",
"Request Steam Name","showinfo",
"UnlockLockVehicle","Copy Worldspace(coords) to RPT & Chat",
"Spawn Vehicles","Spawn Persistent Vehicles","Trader Menu",
"Kill","Explode","Force Disconnect",
"Kick (Silent)","Kick (Announce)","Ban (Silent)","Ban (Announce)","TempBan (Silent)","TempBan (Announce)",
"AdminConsole",
"DebugConsole",
"Execute code on server (DebugConsole)","Execute code global (DebugConsole)","Execute code local (DebugConsole)",
"Lock Server (DebugConsole)","UnLock Server (DebugConsole)","Ban (DebugConsole)","Kick (DebugConsole)",
"Change Money on Player","Change Money on Bank","Change Respect",
"MapIcons",
"MapIcons: Buildings","MapIcons: Flags",
"MapIcons: Player","MapIcons: DeadPlayer","MapIcons: Vehicles",
"MapIcons: Vehicle Types","MapIcons: Vehicle lockstate","MapIcons: DeadVehicles",
"MapIcons: AI",
"Arsenal",
"Unconscious","Remove Unconscious",
"Light",
"Spawn Zombie on Target Location!",
""
}
}
};
/*
Noficiations shown to all players on the server. Could be used to replace BEC messages.
dynamic format:
{
first occurrence after x min,
show again after x min,
show message for x seconds / delay until next message is shown,
font size (recommended is 0.6),
xpos,
ypos,
text color,
font,
text (<br/> is a linebreak)
}
systemchat format:
{
first occurrence after x min,
show again after x min,
show message for x seconds / delay until next message is shown,
text
}
if you want the client to see a message only once when logging in, you put the first and second entry in the array to -1.
Example:
{-1, -1, 4, 0.6, 0, 0, "#ff0000", "OrbitronLight", "Welcome to our server"}
xpos and ypos need to be within your monitor. to high numbers and you simply won't see the text..
~ x-range is between -0.7 to +1
~ y-range is between -0.4 to +1
Arma Fonts:
PuristaLight
PuristaMedium
PuristaSemiBold
PuristaBold
LucidaConsoleB
EtelkaMonospacePro
EtelkaMonospaceProBold
EtelkaNarrowMediumPro
TahomaB
Exile Fonts:
OrbitronLight
OrbitronMedium
PressStart2P
RobotoMedium
RobotoRegular
NOTE: do not use " within the text.
*/
ENABLE_NOTIFICATION_MESSAGES = "true";
NOTIFY_MSG_ARRAY[] =
{
{1, -1, 3, "Welcome to Z's Exile"},
{1, -1, 3, "Enjoy your stay! Try to keep alive :)"},
{1, -1, 6, 0.36, -0.7, 0.84, "#e5e5e5", "PuristaMedium", "Welcome to Z's Exile<br/>Enjoy your stay! Try to keep alive :)"},
{1, 20, 10, 0.36, -0.7, 0.84, "#e5e5e5", "PuristaMedium", "Protected and administrated by<br/>infiSTAR.de AdminTools, AntiHack and more!"}
};
/*
{chatCommand (text typed in chat), color, size, font, text shown to player}
only triggers if the EXACT text is typed!
NOTE: do not use " within the text.
*/
chatCommands[] =
{
//{"!ts","#2784D6","1","OrbitronMedium","ts.mycommunity.com"},
//{"!website","#2784D6","1","OrbitronMedium","www.mycommunity.com"},
{"!admin","#2784D6","1","OrbitronMedium","Yea, right. Do that again and get banned!"}
};
/*
{chatCommand (text typed in chat) partitial, color, size, font, text shown to player}
"Hello, why is there no loot on this map?" <- will trigger the example below!
NOTE: do not use " within the text.
*/
chatCommandsP[] =
{
{"no loot","#2784D6","1","OrbitronMedium","You cannot loot from non arma buildings in this map, you must move around - check the shipping yards for best loot"}
};
/*
If admin has rights to "Create Billboard", he will have new options to create a Billboard ingame with one of the following textures
{"name shown in adminmenu","path to texture"}
should be looking somewhat like this:
{"example picture","\mpmissions\Exile.Altis.pbo\example.paa"}
the picture has to be available on EACH client AND the server.
So you either need a client-side mod for it or you need to put it in the MPMission
*/
pathToCustomBillBoardTextures[] =
{
{"Doggy","exile_assets\texture\flag\flag_mate_21dmd_co.paa"},
{"Spawny","exile_assets\texture\flag\flag_mate_spawny_co.paa"},
{"Dickbutt","exile_assets\texture\flag\flag_misc_dickbutt_co.paa"},
{"Vish","exile_assets\texture\flag\flag_mate_vish_co.paa"}
};
infiSTAR_RE_LIST[] =
{
};
/****************************************************************************************************/
/********************OPTIONS BELOW REQUIRE CHANGES TO YOUR EXILE SERVER DATABASE!********************/
/****************************************************************************************************/
/*
"customDatabaseQueries"
To use any of the below, you need to do some changes to the exile.ini!
I've added these changes here:
"infiSTAR.de_Exile\SERVER_ARMA3_FOLDER\db_related_changes"
*/
class customDatabaseQueries {
/*
if "USE_DATABASE_WHITELIST = "true";", UIDs that are not whitelisted in your exile server database, will be kicked on connect.
exile.ini needs [getAccountWhitelisted]
*/
USE_DATABASE_WHITELIST = "false";
/*
if "USE_LOG_TO_DATABASE = "true";", infiSTAR will log to your exile server database! (yes I know this is great!)
exile.ini needs [insert_infiSTARLog]
*/
USE_LOG_TO_DATABASE = "false";
/*
if "USE_GET_TOTAL_CONNECTIONS = "true";", infiSTAR can log how often a player has been connected to your server before.
exile.ini needs [getTotalConnections]
*/
USE_GET_TOTAL_CONNECTIONS = "false";
};
/*
if "USE_ANNOUNCE_NEW_PLAYER = "true";", infiSTAR will announce a "New Player: NAME" to the whole server!
*/
USE_ANNOUNCE_NEW_PLAYER = "true";
/****************************************************************************************************/
/********************OPTIONS ABOVE REQUIRE CHANGES TO YOUR EXILE SERVER DATABASE!********************/
/****************************************************************************************************/
/*
What is this?
infiSTAR has a global ban system so hackers don't jump around servers and learn how to bypass infiSTAR.
There was a situation where a group of people asked why their friend could not join the server.
Well he was globally banned for hacking.. anyways - if you as a server admin want him to get in even tho he is globally banned,
just ask for his UID and add the UID in the array below.
*/
USE_GLOBAL_BAN_CHECK = "true"; /* if false, it can not kick or ban global banned people but it will still "log" them. So you know a globally banned person joined your server. */
BAN_GLOBAL_BANNED_LOCALLY = "false"; /* if false, it will kick global banned people */
UID_SKIP_GLOBAL_BAN_CHECK[] =
{
"UID1","UID2","UID3","..."
};
CHECK_BattlEye_GLOBALBANS = "true"; /* if you don't have BE enabled on your server, this can still check if a player has been banned globally on BattlEye */
/*
Use UID WhiteList?
if "USE_UID_WHITELIST = "true";", UIDs that are not in "UID_WHITELIST" array, will be kicked on connect.
This even counts for Admins!
*/
USE_UID_WHITELIST = "false";
UID_WHITELIST[] =
{
"UID1","UID2","UID3","..."
};
ExileDevFriendlyMode = "true"; /* adds Exile Devs to your AdminList - makes it easier for them to debug their mod live */
/* What ESCAPE Menu shows */
ESCMNUTOP = "AntiHack & AdminTools";
ESCMNUBOT = "by infiSTAR.de";
BRIEFING_MSG = "false"; /* use mission briefing message: if "BRIEFING_MSG = "false";" then the message will be replaced by infiSTAR */
HTML_LOAD_URL = ""; /* HTML_LOAD_URL = ""; == disabled and if you set a url it will be shown in ESCAPE menu. HTML in Arma/this is limited. Try it :) example: "http://goo.gl/gb0o7b" */
ENABLE_PRIVATE_CHAT_MENU = "true"; /* players can open it by typing !chat in chat or by custom controls -> "Use Action 3" */
PRIVATE_CHAT_MENU_8GNETWORK = "false"; /* if this is "true" - players will only be able to use private chat if they enable 8GNetwork in their xm8 */
class infiSTAR_RESTART_SYSTEM {
enableSystem = "false";
/*
Locks the server when it starts, adds an eventhandler that kciks all players "on join" until the mpmission is initiated.
That was the server can start up more properly and "build" all bases before the first players get in..
*/
LOCK_ON_RESTART = "false";
/*
I would recommend to use USE_RESTART_TIME_IN_M = "true"; instead of USE_RESTART_FIXED_TIME_ARRAY
*/
USE_RESTART_TIME_IN_M = "true";
/*
Restart time in minutes (default: 180min == 3 hours)
*/
RESTART_TIME_IN_M = 180;
/*
diag_tickTime (starts with arma3server.exe), time (starts with mpmission init)
*/
TIME_FUNCTION_USED = "diag_tickTime";
USE_RESTART_FIXED_TIME_ARRAY = "false";
RESTART_TIMES[] = { /* {hour,minute} .. put in the times when your server is supposed to restart (real time). */
{00,00},
{02,00},
{04,00},
{06,00},
{08,00},
{10,00},
{12,00},
{14,00},
{16,00},
{18,00},
{20,00},
{22,00}
};
USE_SHUTDOWN = "true";
SERVER_END_FUNCTION = "#shutdown"; /* SERVER_END_FUNCTION -> #shutdown or #restartserver */
RESTART_WARNING_SOUND = "air_raid"; /* for example: Alarm or air_raid */
LOCK_MIN_BEFORE_SHUTDOWN = 5; /* Locks the server x min before it gets shutdown */
RESTART_IN_X_ARRAY[] = {15,10,5,4,3,2,1}; /* Announce the a restart x mins before it happens (x stands for each number) */
};
/* Allow Player to vote Day/Night by typing vote day / vote night in Chat*/
DayNightVote = "false";
MRV = 0.3; /* if "DayNightVote = "true";" - Minimum votes required. Percentage of players needed to pass the vote. */
MVP = 0.51; /* if "DayNightVote = "true";" - Minimum vote percentage. A setting that dictates the minimum vote percentage that needs to be reached for the vote to pass. */
VCT = 900; /* if "DayNightVote = "true";" - Time (in seconds) to wait until nex vote is possible. */
/* Enable jumping instead of GetOver function (infiSTAR jumping is a custom jump animation :P) */
enableJump = "false";
/* Allow players to type !pee (or !piss) to start peeing */
allowPee = "true";
/* Show a PlayerScoreList (Kill / Deaths) on GEAR and ESCAPE Menus */
PlayerScoreList = "false";
/*
How does this work?
chatAnimationCommands[] = {
{{"command1 for animation1","command2 for animation1"}, "animation1", animation time before it will be forced to be stopped},
{{"command3 for animation2","command4 for animation2"}, "animation2", animation time of 0 means it will do the animation "forever" till the end unless it gets stops by the user manually.}
};
*/
chatAnimationCommands[] = {
{{"!finger","!fuck"},"acts_briefing_sb_in",7}, //shows fuck you finger
{{"!surrender","!giveup","!hands"},"AmovPercMstpSsurWnonDnon",0} //surrender animation (hands behind the head)
};
/*
The following 4 options can be disabled by putting the value to -1. For example "TGV = -1;"
*/
TGV = 40; /* Terrain Grid Value - TGV: if set to 50 grass will be very low for better client FPS.. default is 12.5 ~35 is good performance and grass :) */
VDV = 750; /* ViewDistance Value */
VOV = 750; /* ObjectViewDistance */
SVD = 50; /* ShadowViewDistance */
/*
checks if the terraingrid is different from default or TGV (12.5 or what you set in TGV). If you are using things that can change the grid, put this to false!
*/
CHECK_TERRAIN_GRID = "false";
/*
*readded new old uniform and vest check since some people asked for it.
http://www.exilemod.com/topic/14179-miss-uniform_and_vest_check/
the game is still broken and sometimes you can see people naked when they are not.
I did not add the old check back in, I made a new one making use of new functions :)
*/
fix_uniform_and_vest = "true";
/*
So far only checking for duped backpacks and not taking any actions besides logging. Need to test more before It will start to remove duped items.
*/
experimental_dupe_check = "false";
/*
checks if player tries to dupe using the "disconnect trick" -> sends a ping to the server whenever a player opens the escape menu
*/
disconnect_dupe_check = "true";
/*
There is a way for players to dupe items if they drive a vehicle close to a trader, open the trader menu and then have a friend sit in the driver of the vehicle.
Now they can sell the same item unlimited times and it won't vanish from the vehicle..
That issue is fixed with this check!
*/
fix_trader_dupe = "false";
/*
server side check for the famous "wastedump dupe" as well as client side cooldown
the timer can not be lower than 120 seconds. if it was lower the check would not be working.
*/
fix_wastedump_dupe = "false";
class lagSwitchCheck {
/*
checks if the client connection to the server is established and not lagged out. Might cause a lot of server / network power
after 25 seconds, the client will be kicked to lobby.
*/
enabled = "false";
warn_delay = 5; /* When a lag of 2.5 seconds was registered, the player is warned and won't be able to open any GUI (Gear, Tradermenu [..]) */
log_delay = 10; /* server side log entry, when a lagswitch was detected that took longer than x seconds */
kick_and_log_delay = 40; /* KICK and server side log entry, when a lagswitch was detected that took longer than x seconds */
};
class infiSTAR_blocked_glitch_actions {
/*
if a player is near a flag where he has no buildrights, he can't use the listed inputs close to buildingparts (to prevent glitching!)
*/
block_glitch_actions_enabled = "false";
inputs[] = {"GetOver","leanLeft","leanLeftToggle","leanRight","leanRightToggle","LookAround","LookAroundToggle",
"ActionFreeLook","Prone","ZoomOut","ZoomOutToggle","ZoomContOut","LookUp","LookLeft","LookRight","FreeHeadMove","AimHeadUp",
"Cheat1","Cheat2"};
/* this should also be enabled to prevent freelook (people simply use it to sneak through walls..) */
block_ALT_key = "false";
block_ALT_key_all = "false"; // also blocking ALT key for the Territory owner (so they can't peak through walls to defend easier)
};
/*
checks if a players tries to glitch through a wall (if player is allowed to build in that territory, it will not be logged.)
*/
wall_glitch_object = "false"; // This checks if the Player Object is glitching through a wall/base part
wall_glitch_revert = "false"; // Teleport player back to last "safe" postion if a glitch was detected. Needs: wall_glitch_object = "true";
/*
If a player model intersects with a wall, the player will be teleport back to where he was before he intersected with it..
extra punishments possible:
0 - no punishment
1 - knockout for 60 seconds
2 - kill
hardcore punishments
3 - handcuff
4 - kick
5 - ban (not recommended)
*/
wall_glitch_punish = 0;
/*
stops players from glitching into bases using "eject" or "getout" of a vehicle..
*/
wall_glitch_vehicle = "false";
class infiSTAR_safeZoneOptions {
/*
In a safeZone, only you or somebody from your group/clan can drive (or sell) your vehicle
(after a server restart, the first one who gets into a vehicle becomes the "owner" of it (default Exile settings))
*/
antiVehicleTheft = "true";
kick_from_driver_only = "true"; // if "true", only thieves who get in driver seat will be kicked from vehicle, if false they will be kicked from all seats
};
class infiSTAR_handleDamage {
/*
This whole handleDamage does not effect admins!
*/
enable = "false";
/*
PvP_ReflectDamage option should reflect damage from player vs player (the player still takes damage)
*/
PvP_ReflectDamage = "false";
/*
PvP_BlockDamage option should block damage from player vs player
*/
PvP_BlockDamage = "false";
/*
PvP_useZones will load PvP_ReflectDamage and PvP_BlockDamage only if people are not within a range of the given xyz coordinates!
{{X,Y,Z},RADIUS}
*/
PvP_useZones = "false";
zones[] = {
{{0,0,0},1},
{{1,1,1},1},
{{2,2,2},1}
};
/*
block damage completely if the source of the damage is NULL
(for example if you crash into a bush the source is NULL)
*/
BlockNullSource = "false";
};
/*
Checks player Actions (mousewheel actions, userinterface actions and inputactions)
*/
BlockHoldActions = "false"; /* STRONGLY recommended! */
BadActionCheck = "false"; /* log and remove all actions that are not white-listed */
allowedActions[] = {"Break free","Use AutoLockPicker","Craft Vehicle","Hack UAV"}; /* needs the "title" of the action! */
allowedActionsPartial[] = {"paint"};
BadActionContentCheck = "true"; /* Check the functions assigned to all actions, regardless any white-list */
KCM = "false"; /* Just close ALL CommandingMenus */
CMC = "false"; /* Check for CommandingMenus that are not in the allowedCommandingMenus array */
allowedCommandingMenus[] = {"#USER:ASL_Show_Repair_Options_Menu_Array","#user:example2"};
task_force_radio = "false"; /* put this to "true" if you allow task force radio on your server! */
reset_inGameUIEventHandler = "false"; /* reset inGameUIEventHandler */
checkFilePatchingEnabled = "true"; /* checks if filepatching is enabled on the client (if it is, the client could inject any script based hack easily) */
onEventsCheck = "false"; /* checks server side on Events vs Client side */
checkCfgPatches = "false"; /* checks server side Cfg Patches vs Client side (logs as "Bad Class found in CfgPatches >> xxx") */
check_Notifications = "false"; /* checks if BIS_fnc_showNotification was used, as it is used with many hacks - some custom addons however use them too. */
check_doors_n_gates = "false"; /* Fixes Hatches (so when they are locked, they stay closed..) and closes every door that's locked + keeps closing it in case somebody tries to hack open it! */
attach_to_check = "false"; /* logs and detaches attached vehicles that are close.. basically completely disallow attaching of vehicles! */
slingload_check = "false"; /* forbid sling loading / rope attaching a vehicle with a crew */
INVISIBLE_PLAYER_check = "true"; /* checks if a player object is invisible (hidden). None admins only. LOGS LIKE: INVISIBLE PLAYER-OBJECT @X Y */
checkPopTabIncrease = "true";
LogPopTabIncrease = 15000; /* Only if checkPopTabIncrease = "true"; logs if PopTabs increased by x within ~50 seconds */
BanPopTabIncrease = 500000; /* Only if checkPopTabIncrease = "true"; bans a player if PopTabs increase by more than x within ~50 seconds */
checkRespectIncrease = "true";
LogRespectIncrease = 5000; /* Only if checkRespectIncrease = "true"; logs if respect increased by x within ~50 seconds */
BanRespectIncrease = 50000; /* Only if checkRespectIncrease = "true"; bans a player if respect increases by more than x within ~50 seconds */
/* Check for Map Menu & Map Sub-Menu */
CMM = "false";
maxMapMenuEntries = 6; /* "Map Menu has been changed x entries found - Texts: y" incase you want to add some briefing to your map menu. Only matters if you have CMM = "true"; */
/* if steam api.steampowered.com is working, this might be a nice feature */
check_steam_ban = "false"; /* will announce and log steambanned players - using GetPlayerBans v1 */
ban_for_steam_ban = "false"; /* if "check_steam_ban = "true";" then steambanned players will get banned from your Arma server! */
MPH = "false"; /* This set to "true" will create a log of players being hit on your server */
GodModeCheck = "false"; /* This will check from serverside if a playerobject received damage but did not take it */
/*
Anti Teleport
UAT = "false"; To disable Anti Teleport
Arrays below show position & radius where Teleporting is allowed.
Mainly for the Traders (because when you purchase a vehicle, it teleports you into the vehicle)
You can white-list "Teleport Zones" by adding them like below:
class allowTP {
custom[] = {
{{0,0,0},1},
{{1,1,1},1},
{{2,2,2},1}
};
};
Trading zones are white-listed by default.
*/
UAT = "true";
class allowTP {
custom[] = {};
};
/* Check Drawing on the Map (global channel) */
// CHECK_DRAWING = "false"; /* logs & deletes global drawing */
// Removed! - Arma3 can now disable map drawing by putting
// disableMapDrawing = 1; into your mission config
CHECK_RECOIL = "false"; /* checks weapon recoil */
/* Check Local Markers */
CLM = "false"; /* "false" if you do not want LocalMarker to be checked. */
/* Use aLocalM array */
UMW = "false"; /* use allowed marker array from below (for example AltisLife uses house_ and others in there) or A.I. Missions */
/* aLocalM: if "CLM" && UMW - this array of names will be allowed */
aLocalM[] = {"MissionMarker"};
/*
Not allowed Chat words on server.
Example:
badkickChat[] = {"blue"}; or badbanChat[] = {"blue"};
will log and kick or ban if somebody writes "blue goat" or "blues" in the chat (not case sensitive).
Example 2:
This will most likely stop people from writing Cyrillic (Russian) (I've been asked for this)
badkickChat[] = {"й","д","и","б","ь","т"};
*/
badkickChat[] = {};
badbanChat[] = {};
/* Not allowed Names on server. Example: badNamesFull[] = {"THE"}; would kick all players that are named "THE", it would NOT kick players named "THE CAR" (not case sensitive) */
badNamesFull[] = {};
/* Not allowed Names on server. Example: badNamesPartial[] = {"THE"}; would kick all players with names like "the car" as it includes "THE" (not case sensitive) */
badNamesPartial[] = {"admin"};
/* Not allowed Group Names on server. Example: badGroupNames[] = {"THE"}; would rename all groups with names like "the car" as it includes "THE" (not case sensitive) */
badGroupNames[] = {"admin"};
/*
if somebody talks on one of the following channels, his channel will be switched to "direct" channel
0 = Global
1 = Side
2 = Command
3 = Group
4 = Vehicle
5 = Direct <-- this is where people get switched too if they talk in one of the blacklisted channels!
6-15 = Custom Radio (see radioChannelCreate)
*/
disAllowVon[] = {1,2};
/* badIDDsToKick will be checked before badIDDsToClose, badIDDsToClose will be checked before allowedIDDs */
/* badIDDsToKick: Forbidden Idds that will get you Kicked by the AH */
badIDDsToKick[] =
{
-1338,-1337,-1341,17,19,30,32,45,56,59,62,64,69,71,110,125,
132,133,155,156,165,166,167,312,313,
1320,1321,1340,1341,1342,1343,1344,1345,1346,1347,
2727,2928,2929,3030,316000,9899,0110,
6900,552266
};
/* badIDDsToClose: Forbidden Idds that will get closed by the AH */
badIDDsToClose[] =
{
-1,2,3,7,17,19,25,26,27,28,29,30,31,32,37,40,41,43,44,45,51,52,53,56,74,85,
106,126,127,132,146,147,150,151,152,153,154,155,159,162,164,262,
314,632,1320,2121,148,163,129,169,157,69,156,165,166,167,312,1321,2727,
-1341,1341
};
/* Use IDD White-List ? */ UDW = "false";
/* allowedIDDs: Insert IDDs here to prevent them from being closed! */
allowedIDDs[] =
{
/* default idds */
-1,0,4,5,6,8,12,15,18,24,49,54,55,70,72,101,160,174,177,999,131,63,602,301,
/* exile idds */
24001,24002,20023,24005,24004,24010,24025,20021,20017,24012,24027,
20019,20016,24007,20024,20018,24008,24011,24015,24000,24006,24014,
20020,24026,4002,4000,4001,4003,1500,
24033,24030,24029,24028,24031,24034,
4004,21000, // Bounty system and MarXet
8457, // http://www.exilemod.com/topic/9040-xm8-apps/
65431, // r3f menu fix
6666, // Paintshop
0711, // Advanced Banking
0720, // Virtual Garage
5501,5502,5503,5504,5505,5506,5507, // BRAma Cookbook
-1339,-1340, // custom infiSTAR dialogs (some editor & a private chat menu)
/* main idd - never delete it */
46
};
/*
important check to make sure certain variables are set and have the correct type!
*/
variableTypeChecks[] =
{
{'ExileIsPlayingRussianRoulette',"false"},
{'ExileClientIsHandcuffed',"false"},
{'ExilePlayerInSafezone',"false"},
{'ExileClientIsAutoRunning',"false"},
{'ExileCurrentBreachingObject',objNull},
{'ExileClientInteractionObject',objNull},
{'HTML_LOAD_URL3',''},
{'infiSTAR_lastJumptime',0},
{'PLAYER_IN_VEHICLE',"false"},
{'ExileSystemSpawnThread',[]}
};
/*
it is highly recommended to have this check turned on (useBlacklistedVariableCheck = "true";)
shows "BadVariable in xxxxxxxx " in the logs.
*/
useBlacklistedVariableCheck = "true";
blacklistedVariables[] =
{
"bis_debug_cam",
"arsenalopened","bis_fnc_arsenal_fullarsenal","babecore_escm_mousepos","RANDOMVAR",
"bis_fnc_dbg_reminder_value","bis_fnc_dbg_reminder","bis_menu_groupcommunication","bis_fnc_addcommmenuitem_menu",
"rscspectator","rscspectator_hints","rscspectator_display","rscspectator_playericon",
"rscspectator_view","rscspectator_map","rscspectator_vision","rscspectator_keys",
"rscspectator_interface","bis_fnc_camera_target","andy_loopz","initfileone","finie_s_p",
"time","servertime","myplayeruid","hhahaaaaar","charliesheenkeybinds","kickoff","yolo","runonce","notakeybind","action1","supa_licenses","autokick","wallaisseikun","mainmenu",
"gefclose","gefwhite","gefred","gefgreen","gefcyan","firsthint","new_queued","fn_exec","fnd_fnc_select","fnx3","antihackkick","tele","dmap","goldens_global_shit_yeah","glass911_run",
"geardialog_create","lystokeypress","thirtysix","ly_swaggerlikeus","jkeyszz","n2","boxofmagic","mainscripts","dmc_fnc_4danews","infistarbypass","exec_text","vehicle_dblclick","init_main",
"esp_count","nute_dat_bomber","s_cash100k","xposplayer","ly_re_onetime","skar_checka","mainscriptsv4","viewdistance","check_load","already_load","meins","f1","dummy","plane_jump",
"c_player","mouseclickeh","distp","nec2","menu_i_run_color_lp","glassv1nce_bindhandler","thecar","fastanimes","getinpassenger","iaimon","dmc_re_onetime","func_execonserver","fnc_serverkicknice",
"kick_admins","dasmokeon","hovering","r_kelly_be_flying","vincelol_altislife","life_fnc_byassskaroah","ah_fnc_mp","jayre","fn_newsbanner","hack_news","trollfuncs",
"fanatic_infipass","keybindings_xxx","andysclosed","userfuncs","altisfuncs","remexe","bb_nofatigue","bis_fnc_diagkey_var_code","first_page","get_in_d","i_t_s__m_e_o","smissles","whippy_esp",
"targetfuncs2","life_fnc_antifreeeeze","ly_keyforward","ty_re_onetime","life_fnc_xaaxaa","mein1","goddamnvehiclesxd","mystic_fnc_esp_distance","esp_id_setter","dummymen","whipbut","userfuncs",
"krohdofreedom","selectedplayer","lmenu1","ggplayer","throx_menu_item","lvl1","init_menu_slew","d_b_r_t_y_slew","v6_gef","xasfjisisafudmmyx","kekse","updated_re_36","first","second",
"sni_prz_zzz_targetplayer","healit","o_fnc_arma","mlrn_exec","running_threads","catchemall16117","killtarget","gmtoggle","t1","fuck_me_keyp","cheatcurator"
};
/*
due to new hacking methods it is necessary to check variables on objects..
since most server have 50.000+ objects this can cost a lot client fps but it should still be used.. for the greater good!
*/
useObjectVariableCheck = "false";
UVC_adminspawn = "false"; /* use vehicle check(s) on vehicles spawned by infiSTAR.de admin? */
/*
Use vehicle white list? (everything not on white-list will be flagged as BadVehicle and deleted!)
"EXILE" vehicles are white-listed by default!
*/
VehicleWhiteList_check = "false";
VehicleWhiteList[] =
{
"B_Parachute","B_Parachute_02_F","O_Parachute_02_F","Steerable_Parachute_F",
"I_UAV_01_F","B_HMG_01_high_F","O_HMG_01_F","B_Heli_Transport_01_F","B_Heli_Transport_01_camo_F","O_MRAP_02_gmg_F","O_static_AT_F","Land_Camping_Light_F"
};
/*
Use forbidden vehicle check? (everything in the ForbiddenVehicles will be flagged as BadVehicle and deleted (even when it is on the white-list)!)
*/
ForbiddenVehicles_check = "false";
ForbiddenVehicles[] =
{
"B_MBT_01_arty_F","B_Truck_01_ammo_F"
};
/*
If you use VehicleWhiteList_check or ForbiddenVehicles_check then the vehicle check automatically checks for locally created vehicles.
Locally created vehicles are these that get created by a player and not the server. E.g. when a player assambles a UAV or a static weapon!
Also some public posted scripts for example the "bike script" are creating the vehicle (the bike) locally (so the type of the vehicle needs to get added to the array below!).
*/
LocalWhitelist[] =
{
"O_HMG_01_weapon_F","O_HMG_01_F","O_HMG_01_support_F","I_UavTerminal","I_UAV_01_backpack_F",
"Exile_Bike_OldBike","B_HMG_01_F","B_HMG_01_high_F","O_HMG_01_high_F","B_Mortar_01_F"
};
UFI = "false"; /* Use "ForbiddenItems"/Item Check(s) */
UIW = "false"; /* if "UIW = "true";" then it checks if the items the individual player has are in "ItemWhiteList" */
KICK_ON_DETECTION = "false"; // kick when a bad or not whitelisted item was found
ItemWhiteList[] =
{
"AllowThisItem1","AllowThisItem2"
};
ForbiddenItems[] =
{
"autocannon_Base_F","autocannon_30mm","autocannon_35mm","autocannon_40mm_CTWS","autocannon_30mm_CTWS","Bomb_04_Plane_CAS_01_F",
"Bomb_03_Plane_CAS_02_F","cannon_105mm","cannon_120mm","cannon_120mm_long","cannon_125mm","Cannon_30mm_Plane_CAS_02_F","gatling_20mm",
"gatling_25mm","gatling_30mm","Gatling_30mm_Plane_CAS_01_F","GBU12BombLauncher","GMG_20mm","GMG_40mm","GMG_UGV_40mm","HMG_127_MBT",
"HMG_127","HMG_127_APC","HMG_01","HMG_M2","HMG_NSVT","LMG_Minigun2","LMG_RCWS","LMG_M200","LMG_Minigun","LMG_Minigun_heli","LMG_coax",
"Missile_AGM_02_Plane_CAS_01_F","Missile_AA_04_Plane_CAS_01_F","Missile_AA_03_Plane_CAS_02_F","Missile_AGM_01_Plane_CAS_02_F","missiles_DAGR",
"missiles_DAR","missiles_ASRAAM","missiles_SCALPEL","missiles_titan","missiles_titan_static","missiles_Zephyr","Mk82BombLauncher","mortar_82mm",
"mortar_155mm_AMOS","rockets_Skyfire","rockets_230mm_GAT","Rocket_04_HE_Plane_CAS_01_F","Rocket_04_AP_Plane_CAS_01_F","Rocket_03_HE_Plane_CAS_02_F",
"Rocket_03_AP_Plane_CAS_02_F","Twin_Cannon_20mm"
};
/*
custom Box content:
just an item like it is in the example with "ItemMap" will put the item once in the box.
if an array is used like the {"ItemGPS",5} example, well I assume you could guess what it will do.
You can just define as many as you want.
{
"BOX NAME", // function name in the admin menu
{
"Item1","Item2", // one per just item in a string
{"Item1",5},{"Item2",10} // second entry in each array defiens how many of items of the first entry are wanted.
}
}
The last closing bracket in an array can not have a "," afterwards. So make sure to have no syntax errors here.
*/
allSupportBoxes[] =
{
{
"Support-Box1",
{
"Exile_Item_Flag","Exile_Item_CookingPot",
{"Exile_Item_Codelock",5},{"Exile_Item_DuctTape",10},{"Exile_Item_InstaDoc",10},
{"Exile_Item_Energydrink",10},{"Exile_Item_ExtensionCord",5},{"Exile_Item_FloodLightKit",5},
{"Exile_Item_FortificationUpgrade",5},{"Exile_Item_FuelCanisterFull",5},{"Exile_Item_GloriousKnakworst_Cooked",10},
{"Exile_Item_LightBulb",5},{"Exile_Item_Matches",5},{"Exile_Item_MetalBoard",5},
{"Exile_Item_MetalPole",5},{"Exile_Item_PlasticBottleFreshWater",10},{"Exile_Item_PortableGeneratorKit",5},
{"Exile_Item_Rope",15},{"Exile_Item_SafeKit",15},{"Exile_Magazine_Battery",15}
}
},
{
"Support-Box2",
{
"Exile_Item_Flag",
{"Exile_Item_WoodDoorKit",15},{"Exile_Item_WoodDoorwayKit",15},{"Exile_Item_WoodDrawBridgeKit",15},
{"Exile_Item_WoodFloorKit",15},{"Exile_Item_WoodFloorPortKit",15},{"Exile_Item_WoodGateKit",15},
{"Exile_Item_WoodLog",15},{"Exile_Item_WoodPlank",15},{"Exile_Item_WoodStairsKit",15},
{"Exile_Item_WoodSupportKit",15},{"Exile_Item_WoodWallHalfKit",15},{"Exile_Item_WoodWallKit",15},
{"Exile_Item_WoodWindowKit",15},{"Exile_Item_WorkBenchKit",15}
}
},
{
"Support-Box3",
{
{"Exile_Item_Flag",5},{"Exile_Item_WoodDoorKit",15},{"Exile_Item_WoodWallKit",15},
{"Exile_Item_WoodWindowKit",15},{"Exile_Item_WoodFloorKit",15},{"Exile_Item_SafeKit",5}
}
},
{
"Support-Box4",
{
"ItemMap",{"ItemGPS",5},"ItemWatch"
}
}
};
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
a3_infiSTAR_Exile

View File

@ -0,0 +1,38 @@
/*
Author: Chris(tian) "infiSTAR" Lorenzen
Contact: infiSTAR23@gmail.com // www.infiSTAR.de
Copyright infiSTAR - 2011 - 2018. All rights reserved.
Christian (Chris) L. (infiSTAR23@gmail.com) Developer of infiSTAR
*/
#include "EXILE_AHAT_CONFIG.hpp"
class CfgPatches
{
class a3_infiSTAR_Exile
{
requiredVersion = 0.16100;
requiredAddons[] = {};
units[] = {};
weapons[] = {};
magazines[] = {};
ammo[] = {};
author[]= {"Chris(tian) 'infiSTAR' Lorenzen"};
website[]= {"https://infiSTAR.de"};
contact[]= {"admin@infiSTAR.de","infiSTAR23@gmail.com"};
version = 'v90';
licensed = "zepheris.craty@gmail.com";
};
};
class CfgFunctions
{
class a3_infiSTAR_Exile
{
class main
{
file = "a3_infiSTAR_Exile";
class preInit { preInit = 1; };
class postInit { postInit = 1; };
};
};
};
#include "CUSTOM_FUNCTIONS.hpp"

View File

@ -0,0 +1,678 @@
fnc_admin_c = compile 'compile _this';
fnc_admin_cc = compile 'call compile _this';
fnc_admin_ccc = compile 'if(!isNil {call compile _this})then{call compile _this}else{''ANY''}';
fnc_createctrl = {
params['_display','_type','_idc'];
ctrlDelete (_display displayCtrl _idc);
_ctrl = _display ctrlCreate[_type, _idc];
_ctrl
};
fnc_setPNS = compileFinal '
profileNamespace setVariable _this;saveProfileNamespace;
';
fnc_getPNS = compileFinal '
profileNamespace getVariable _this
';
fnc_lbDebugChanged = {
disableSerialization;
_ctrl = _this select 0;
_index = _this select 1;
((findDisplay -1341) displayCtrl 1) ctrlSetText (['infiSTAR_SAVED_FUNCTIONS',[]] call fnc_getPNS select _index);
};
fnc_fillDebugListBox = {
_listbox = (findDisplay -1341) displayCtrl 1384;
_listbox ctrlRemoveAllEventHandlers 'LBDblClick';
_listbox ctrlRemoveAllEventHandlers 'LBSelChanged';
_listbox ctrlAddEventHandler ['LBDblClick', 'call fnc_lbDebugChanged;call fnc_debug_loadbtn;true'];
_listbox ctrlAddEventHandler ['LBSelChanged', 'call fnc_lbDebugChanged;true'];
lbClear _listbox;
_var = ['infiSTAR_SAVED_FUNCTIONS',[]] call fnc_getPNS;
if!(_var isEqualTo [])then
{
{
_lbid = _listbox lbAdd _x;
} forEach _var;
};
};
already_run_array = [];
last_selected_run_id = 0;
fnc_getMainText = {
private _txt = ctrlText((findDisplay -1341) displayCtrl 1339);
already_run_array = already_run_array - [_txt];
last_selected_run_id = already_run_array pushBack _txt;
_txt
};
fnc_debug_loadbtn = {
_var = ['infiSTAR_SAVED_FUNCTIONS',[]] call fnc_getPNS;
_varname = lbtext[1384,(lbCurSel 1384)];
if(_varname isEqualTo '')then
{
systemChat 'You need to select a function to load it..!';
}
else
{
_varvalue = [format['infiSTAR_SAVED_FUNCTION_%1',_varname],''] call fnc_getPNS;
((findDisplay -1341) displayCtrl 1339) ctrlSetText _varvalue;
systemChat format['Loaded: %1',_varname];
call fnc_fillDebugListBox;
};
true
};
fnc_workplace = {
_admin = !isNil'MAIN_DISPLAY_ID';
disableSerialization;
if(isNull findDisplay -1341)then{createdialog 'infiSTAR_EDITBOX2';'AdminConsole' call fnc_adminLog;};
_display = findDisplay -1341;
_buttonheight = 0.05;
_wfposY = safeZoneY + 0.01;
_wf1 = _display displayCtrl 1380;
_wf1 ctrlSetPosition [0,_wfposY,1,_buttonheight];
_wf1 ctrlCommit 0;
_wf1cb = [_display,'RscCheckBox',1360] call fnc_createctrl;
_wf1cb cbSetChecked (['cbChecked__wf1',false] call fnc_getPNS);
_wf1cb ctrlSetPosition [-_buttonheight,_wfposY,_buttonheight,_buttonheight];
_wf1cb ctrlSetEventHandler['CheckedChanged','[''cbChecked__wf1'',(_this select 1) isEqualTo 1] call fnc_setPNS;true'];
_wf1cb ctrlSetTooltip 'ALWAYS SHOW';
_wf1cb ctrlCommit 0;
_wf1cb1 = [_display,'RSCButton',1461] call fnc_createctrl;
_wf1cb1 ctrlSetText 'copy';
_wf1cb1 ctrlSetPosition [1,_wfposY,0.09,_buttonheight];
_wf1cb1 ctrlCommit 0;
_wf1cb1 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 7564982345) ctrlSetText ctrlText((findDisplay 46) displayCtrl 1362);true'];
_wf1cb2 = [_display,'RSCButton',1361] call fnc_createctrl;
_wf1cb2 ctrlSetText 'clear';
_wf1cb2 ctrlSetPosition [1.09,_wfposY,0.09,_buttonheight];
_wf1cb2 ctrlCommit 0;
_wf1cb2 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1380) ctrlSetText '''';[''wf1tTCT'',''''] call fnc_setPNS;true'];
if(!isNil'wf1T')then{terminate wf1T;wf1T=nil;};
wf1T = [0,_wfposY+0.045,1,_buttonheight] spawn {
disableSerialization;
_oldText = ['wf1tTCT',''] call fnc_getPNS;
_display = findDisplay -1341;
_wf1 = _display displayCtrl 1380;
_wf1 ctrlSetText _oldText;
_wf1t = [findDisplay 46,'RSCText',1362] call fnc_createctrl;
_wf1t ctrlSetPosition _this;
_wf1t ctrlCommit 0;
while {true} do
{
if((isNull _wf1) && !(['cbChecked__wf1',false] call fnc_getPNS))exitWith{_wf1t ctrlSetText '';};
_oldText = ['wf1tTCT',''] call fnc_getPNS;
if(!isNull _wf1)then
{
_ctrltext = ctrlText _wf1;
if(_ctrltext isEqualTo '')then
{
_wf1t ctrlSetText '';
}
else
{
if!(_ctrltext isEqualTo _oldText)then
{
['wf1tTCT',_ctrltext] call fnc_setPNS;
};
};
};
if!(_oldText isEqualTo '')then
{
_wf1t ctrlSetText str(_oldText call fnc_admin_ccc);
};
uiSleep 0.1;
};
};
_wfposY = _wfposY + 0.1;
_wf2 = _display displayCtrl 1381;
_wf2 ctrlSetPosition [0,_wfposY,1,_buttonheight];
_wf2 ctrlCommit 0;
_wf2cb = [_display,'RscCheckBox',1260] call fnc_createctrl;
_wf2cb cbSetChecked (['cbChecked__wf2',false] call fnc_getPNS);
_wf2cb ctrlSetPosition [-_buttonheight,_wfposY,_buttonheight,_buttonheight];
_wf2cb ctrlSetEventHandler['CheckedChanged','[''cbChecked__wf2'',(_this select 1) isEqualTo 1] call fnc_setPNS;true'];
_wf2cb ctrlSetTooltip 'ALWAYS SHOW';
_wf2cb ctrlCommit 0;
_wf2cb1 = [_display,'RSCButton',1561] call fnc_createctrl;
_wf2cb1 ctrlSetText 'copy';
_wf2cb1 ctrlSetPosition [1,_wfposY,0.09,_buttonheight];
_wf2cb1 ctrlCommit 0;
_wf2cb1 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 7564982345) ctrlSetText ctrlText((findDisplay 46) displayCtrl 1262);true'];
_wf2cb2 = [_display,'RSCButton',1261] call fnc_createctrl;
_wf2cb2 ctrlSetText 'clear';
_wf2cb2 ctrlSetPosition [1.09,_wfposY,0.09,_buttonheight];
_wf2cb2 ctrlCommit 0;
_wf2cb2 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1381) ctrlSetText '''';[''wf2tTCT'',''''] call fnc_setPNS;true'];
if(!isNil'wf2T')then{terminate wf2T;wf2T=nil;};
wf2T = [0,_wfposY+0.045,1,_buttonheight] spawn {
disableSerialization;
_oldText = ['wf2tTCT',''] call fnc_getPNS;
_display = findDisplay -1341;
_wf2 = _display displayCtrl 1381;
_wf2 ctrlSetText _oldText;
_wf2t = [findDisplay 46,'RSCText',1262] call fnc_createctrl;
_wf2t ctrlSetPosition _this;
_wf2t ctrlCommit 0;
while {true} do
{
if((isNull _wf2) && !(['cbChecked__wf2',false] call fnc_getPNS))exitWith{_wf2t ctrlSetText '';};
_oldText = ['wf2tTCT',''] call fnc_getPNS;
if(!isNull _wf2)then
{
_ctrltext = ctrlText _wf2;
if(_ctrltext isEqualTo '')then
{
_wf2t ctrlSetText '';
}
else
{
if!(_ctrltext isEqualTo _oldText)then
{
['wf2tTCT',_ctrltext] call fnc_setPNS;
};
};
};
if!(_oldText isEqualTo '')then
{
_wf2t ctrlSetText str(_oldText call fnc_admin_ccc);
};
uiSleep 0.1;
};
};
_wfposY = _wfposY + 0.1;
_wf3 = _display displayCtrl 1382;
_wf3 ctrlSetPosition [0,_wfposY,1,_buttonheight];
_wf3 ctrlCommit 0;
_wf3cb = [_display,'RscCheckBox',1160] call fnc_createctrl;
_wf3cb cbSetChecked (['cbChecked__wf3',false] call fnc_getPNS);
_wf3cb ctrlSetPosition [-_buttonheight,_wfposY,_buttonheight,_buttonheight];
_wf3cb ctrlSetEventHandler['CheckedChanged','[''cbChecked__wf3'',(_this select 1) isEqualTo 1] call fnc_setPNS;true'];
_wf3cb ctrlSetTooltip 'ALWAYS SHOW';
_wf3cb ctrlCommit 0;
_wf3cb1 = [_display,'RSCButton',1661] call fnc_createctrl;
_wf3cb1 ctrlSetText 'copy';
_wf3cb1 ctrlSetPosition [1,_wfposY,0.09,_buttonheight];
_wf3cb1 ctrlCommit 0;
_wf3cb1 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 7564982345) ctrlSetText ctrlText((findDisplay 46) displayCtrl 1162);true'];
_wf3cb2 = [_display,'RSCButton',1161] call fnc_createctrl;
_wf3cb2 ctrlSetText 'clear';
_wf3cb2 ctrlSetPosition [1.09,_wfposY,0.09,_buttonheight];
_wf3cb2 ctrlCommit 0;
_wf3cb2 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1382) ctrlSetText '''';[''wf3tTCT'',''''] call fnc_setPNS;true'];
if(!isNil'wf3T')then{terminate wf3T;wf3T=nil;};
wf3T = [0,_wfposY+0.045,1,_buttonheight] spawn {
disableSerialization;
_oldText = ['wf3tTCT',''] call fnc_getPNS;
_display = findDisplay -1341;
_wf3 = _display displayCtrl 1382;
_wf3 ctrlSetText _oldText;
_wf3t = [findDisplay 46,'RSCText',1162] call fnc_createctrl;
_wf3t ctrlSetPosition _this;
_wf3t ctrlCommit 0;
while {true} do
{
if((isNull _wf3) && !(['cbChecked__wf3',false] call fnc_getPNS))exitWith{_wf3t ctrlSetText '';};
_oldText = ['wf3tTCT',''] call fnc_getPNS;
if(!isNull _wf3)then
{
_ctrltext = ctrlText _wf3;
if(_ctrltext isEqualTo '')then
{
_wf3t ctrlSetText '';
}
else
{
if!(_ctrltext isEqualTo _oldText)then
{
['wf3tTCT',_ctrltext] call fnc_setPNS;
};
};
};
if!(_oldText isEqualTo '')then
{
_wf3t ctrlSetText str(_oldText call fnc_admin_ccc);
};
uiSleep 0.1;
};
};
_wfposY = _wfposY + 0.1;
_wf4 = _display displayCtrl 1383;
_wf4 ctrlSetPosition [0,_wfposY,1,_buttonheight];
_wf4 ctrlCommit 0;
_wf4cb = [_display,'RscCheckBox',1060] call fnc_createctrl;
_wf4cb cbSetChecked (['cbChecked__wf4',false] call fnc_getPNS);
_wf4cb ctrlSetPosition [-_buttonheight,_wfposY,_buttonheight,_buttonheight];
_wf4cb ctrlSetEventHandler['CheckedChanged','[''cbChecked__wf4'',(_this select 1) isEqualTo 1] call fnc_setPNS;true'];
_wf4cb ctrlSetTooltip 'ALWAYS SHOW';
_wf4cb ctrlCommit 0;
_wf4cb1 = [_display,'RSCButton',1761] call fnc_createctrl;
_wf4cb1 ctrlSetText 'copy';
_wf4cb1 ctrlSetPosition [1,_wfposY,0.09,_buttonheight];
_wf4cb1 ctrlCommit 0;
_wf4cb1 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 7564982345) ctrlSetText ctrlText((findDisplay 46) displayCtrl 1062);true'];
_wf4cb2 = [_display,'RSCButton',1061] call fnc_createctrl;
_wf4cb2 ctrlSetText 'clear';
_wf4cb2 ctrlSetPosition [1.09,_wfposY,0.09,_buttonheight];
_wf4cb2 ctrlCommit 0;
_wf4cb2 ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1383) ctrlSetText '''';[''wf4tTCT'',''''] call fnc_setPNS;true'];
if(!isNil'wf4T')then{terminate wf4T;wf4T=nil;};
wf4T = [0,_wfposY+0.045,1,_buttonheight] spawn {
disableSerialization;
_oldText = ['wf4tTCT',''] call fnc_getPNS;
_display = findDisplay -1341;
_wf4 = _display displayCtrl 1383;
_wf4 ctrlSetText _oldText;
_wf4t = [findDisplay 46,'RSCText',1062] call fnc_createctrl;
_wf4t ctrlSetPosition _this;
_wf4t ctrlCommit 0;
while {true} do
{
if((isNull _wf4) && !(['cbChecked__wf4',false] call fnc_getPNS))exitWith{_wf4t ctrlSetText '';};
_oldText = ['wf4tTCT',''] call fnc_getPNS;
if(!isNull _wf4)then
{
_ctrltext = ctrlText _wf4;
if(_ctrltext isEqualTo '')then
{
_wf4t ctrlSetText '';
}
else
{
if!(_ctrltext isEqualTo _oldText)then
{
['wf4tTCT',_ctrltext] call fnc_setPNS;
};
};
};
if!(_oldText isEqualTo '')then
{
_wf4t ctrlSetText str(_oldText call fnc_admin_ccc);
};
uiSleep 0.1;
};
};
_ctrl = [_display,'RSCEdit',7564982345] call fnc_createctrl;
_ctrl ctrlSetPosition [0,_wfposY + 0.245,1,_buttonheight];
_ctrl ctrlSetBackgroundColor [0,0,0,0.6];
_ctrl ctrlCommit 0;
_ctrl = _display displayCtrl 1339;
_startYpos = safeZoneY + 0.61;
_ctrl ctrlSetPosition [0,_startYpos,1,1];
_ctrl ctrlCommit 0;
_ctrl ctrlSetText (['workplacemainwindow',''] call fnc_getPNS);
if(!isNil'workplacemainwindowT')then{terminate workplacemainwindowT;workplacemainwindowT=nil;};
workplacemainwindowT = [] spawn {
disableSerialization;
while{true}do
{
_ctrl = (findDisplay -1341) displayCtrl 1339;
if(isNull _ctrl)exitWith{workplacemainwindowT=nil;};
_ctext = ctrlText _ctrl;
_vtext = ['workplacemainwindow',''] call fnc_getPNS;
if!(_ctext isEqualTo _vtext)then
{
['workplacemainwindow',_ctext] call fnc_setPNS;
};
uiSleep 0.1;
};
};
_ctrlid = 7338;
if(_admin)then{
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'GLOBAL';
_ctrl ctrlSetPosition [0,_startYpos + 1,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','[call fnc_getMainText] call admin_d0;systemChat ''<infiSTAR.de> RAN CODE ON: GLOBAL (SERVER AND ALL CLIENTS)'';true'];
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'ALL BUT SERVER';
_ctrl ctrlSetPosition [0,_startYpos + 1 + _buttonheight,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','[''if(!isServer)then{''+(call fnc_getMainText)+''};''] call admin_d0;systemChat ''<infiSTAR.de> RAN CODE ON: ALL BUT SERVER'';true'];
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'SERVER';
_ctrl ctrlSetPosition [0.25,_startYpos + 1,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','[call fnc_getMainText] call admin_d0_server;systemChat ''<infiSTAR.de> RAN CODE ON: SERVER'';true'];
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'SELECTED (ORANGE) TARGET';
_ctrl ctrlSetPosition [0.25,_startYpos + 1 + _buttonheight,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','if(isPlayer SELECTED_TARGET_PLAYER)then{[call fnc_getMainText,SELECTED_TARGET_PLAYER] call admin_d0_target;systemChat format[''<infiSTAR.de> RAN CODE ON: %1'',name SELECTED_TARGET_PLAYER];};true'];
};
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'LOCAL';
_ctrl ctrlSetPosition [0.5,_startYpos + 1,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','(call fnc_getMainText) call fnc_admin_cc;systemChat ''<infiSTAR.de> RAN CODE ON: LOCAL'';true'];
if(_admin)then{
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'CAMERAON';
_ctrl ctrlSetPosition [0.5,_startYpos + 1 + _buttonheight,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','if(!isNull cameraOn)then{[call fnc_getMainText,cameraOn] call admin_d0_target;systemChat format[''<infiSTAR.de> RAN CODE ON: %1'',name cameraOn];};true'];
};
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'NEXT';
_ctrl ctrlSetPosition [0.75,_startYpos + 1,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
_max = ((count already_run_array)-1) max 0;
_new = last_selected_run_id + 1;
if(_new <= _max)then
{
last_selected_run_id = _new;
_txt = already_run_array select last_selected_run_id;
((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;
};
systemChat format[''<infiSTAR.de console> %1 / %2'',last_selected_run_id,_max];
true
'];
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'LAST';
_ctrl ctrlSetPosition [0.75,_startYpos + 1 + _buttonheight,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
_max = ((count already_run_array)-1) max 0;
_new = last_selected_run_id - 1;
if(_new >= 0)then
{
last_selected_run_id = _new;
_txt = already_run_array select last_selected_run_id;
((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;
};
systemChat format[''<infiSTAR.de console> %1 / %2'',last_selected_run_id,_max];
true
'];
_buttonYpos = _startYpos;
_ctrlid = _ctrlid + 1;
if(_admin)then{
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'ALL ITEMS';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1339) ctrlSetText str ALLC_ITEMS;true'];
};
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
if(_admin)then{
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'ALL VEHICLES';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_txt = str ALL_VEHS_TO_SEARCH_C;((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;diag_log _txt;true'];
};
_buttonYpos = _buttonYpos + _buttonheight + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'CURSORTARGET';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_txt = typeOf cursorTarget;((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;diag_log _txt;true'];
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'VEHICLE PLAYER';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_txt = typeOf vehicle player;((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;diag_log _txt;true'];
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'GETPOS';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_txt = str(getPos player);((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;diag_log _txt;true'];
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'GETPOSATL';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_txt = str(getPosATL player);((findDisplay -1341) displayCtrl 1339) ctrlSetText _txt;diag_log _txt;true'];
_buttonYpos = _buttonYpos + _buttonheight + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCEdit',_ctrlid] call fnc_createctrl;
_oldTxt = ['infiSTAR_show_function_000',''] call fnc_getPNS;
if(_oldTxt isEqualTo '')then{_oldTxt = '{diag_activeSQFScripts}';};
_ctrl ctrlSetText _oldTxt;
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlSetBackgroundColor [0,0,0,0.6];
_ctrl ctrlCommit 0;
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'RETURN FUNCTION VALUE';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
disableSerialization;
_display = findDisplay -1341;
_ctrl = _display displayCtrl 1339;
_ctrltext = ctrlText(_display displayCtrl '+str (_ctrlid - 1)+');
[''infiSTAR_show_function_000'',_ctrltext] call fnc_setPNS;
_var = missionNamespace getVariable [_ctrltext,''''];
if(typeName _var isEqualTo ''CODE'')exitWith
{
_txt = str([] call _var);
if(_txt isEqualTo '''')then{_txt = ''nothing to return'';};
_ctrl ctrlSetText _txt;
diag_log _txt;
true
};
_function = _ctrltext call fnc_admin_cc;
_txt = '''';
if(typeName _function isEqualTo ''CODE'')then
{
_txt = str([] call _function);
if(_txt isEqualTo '''')then{_txt = ''nothing to return'';};
}
else
{
_txt = ''not a function.. (a function is something within curly brackets)'';
};
_ctrl ctrlSetText _txt;
diag_log _txt;
true
'];
_buttonYpos = _buttonYpos + _buttonheight + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCEdit',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText (['infiSTAR_show_variable_000','READ FROM VARIABLE'] call fnc_getPNS);
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlSetBackgroundColor [0,0,0,0.6];
_ctrl ctrlCommit 0;
_buttonYpos = _buttonYpos + _buttonheight;
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'READ FROM VARIABLE';
_ctrl ctrlSetPosition [1,_buttonYpos,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
disableSerialization;
_display = findDisplay -1341;
_ctrl = _display displayCtrl 1339;
_ctrltext = ctrlText(_display displayCtrl '+str (_ctrlid - 1)+');
[''infiSTAR_show_variable_000'',_ctrltext] call fnc_setPNS;
_var = missionNamespace getVariable [_ctrltext,''''];
_txt = str _var;
_ctrl ctrlSetText _txt;
diag_log _txt;
true
'];
if(_admin)then{
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'Debug Console';
_ctrl ctrlSetPosition [1,_startYpos + 0.7,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','[] spawn fnc_RscDisplayDebugPublic;true'];
};
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'CLEAR';
_ctrl ctrlSetPosition [1,_startYpos + 0.85,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','((findDisplay -1341) displayCtrl 1339) ctrlSetText '''';[''workplacemainwindow'',''''] call fnc_setPNS;true'];
_ctrlid = _ctrlid + 1;
_ctrl = [_display,'RSCButton',_ctrlid] call fnc_createctrl;
_ctrl ctrlSetText 'CLOSE';
_ctrl ctrlSetPosition [1,_startYpos + 0.95,0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','closeDialog 0;true'];
_ctrl = [_display,'RSCEdit',1] call fnc_createctrl;
_ctrl ctrlSetPosition [-0.25,1 + (_buttonheight*2),0.25,_buttonheight];
_ctrl ctrlSetBackgroundColor [0,0,0,0.6];
_ctrl ctrlCommit 0;
_ctrl = [_display,'RSCButton',2] call fnc_createctrl;
_ctrl ctrlSetText 'Save';
_ctrl ctrlSetPosition [-0.25,1 + (_buttonheight*3),0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
_varname = ctrlText((findDisplay -1341) displayCtrl 1);
if(_varname isEqualTo '''')then
{
systemChat ''You need to write a name to save this function..!'';
}
else
{
_var = [''infiSTAR_SAVED_FUNCTIONS'',[]] call fnc_getPNS;
_index = _var pushBackUnique _varname;
[''infiSTAR_SAVED_FUNCTIONS'',_var] call fnc_setPNS;
[format[''infiSTAR_SAVED_FUNCTION_%1'',_varname],call fnc_getMainText] call fnc_setPNS;
systemChat format[''Saved: %1'',_varname];
call fnc_fillDebugListBox;
};
true
'];
_ctrl = [_display,'RSCButton',3] call fnc_createctrl;
_ctrl ctrlSetText 'Load';
_ctrl ctrlSetPosition [-0.25,1 + (_buttonheight*4),0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','_this call fnc_debug_loadbtn'];
_ctrl = [_display,'RSCButton',4] call fnc_createctrl;
_ctrl ctrlSetText 'Delete';
_ctrl ctrlSetPosition [-0.25,1 + (_buttonheight*5),0.25,_buttonheight];
_ctrl ctrlCommit 0;
_ctrl ctrlSetEventHandler['ButtonClick','
_var = [''infiSTAR_SAVED_FUNCTIONS'',[]] call fnc_getPNS;
_varname = lbtext[1384,(lbCurSel 1384)];
if(_varname isEqualTo '''')then
{
systemChat ''You need to select a function to delete..!'';
}
else
{
if(isNil''last_delete_call'')then
{
last_delete_call = _varname;
systemChat format[''Please click again to delete: %1'',_varname];
}
else
{
if(last_delete_call isEqualTo _varname)then
{
_var deleteAt (_var find _varname);
[''infiSTAR_SAVED_FUNCTIONS'',_var] call fnc_setPNS;
[format[''infiSTAR_SAVED_FUNCTION_%1'',_varname],nil] call fnc_setPNS;
systemChat format[''Deleted: %1'',_varname];
call fnc_fillDebugListBox;
last_delete_call = nil;
}
else
{
systemChat format[''Please click again to delete: %1'',_varname];
};
};
};
true
'];
call fnc_fillDebugListBox;
};

View File

@ -0,0 +1,30 @@
/*
Author: Chris(tian) "infiSTAR" Lorenzen
Contact: infiSTAR23@gmail.com // www.infiSTAR.de
Copyright infiSTAR - 2011 - 2018. All rights reserved.
Christian (Chris) L. (infiSTAR23@gmail.com) Developer of infiSTAR
Description:
Arma AntiHack & AdminTools - infiSTAR.de
NOTE:
THIS FILE SHOULD NOT BE TOUCHED UNLESS YOU REALLY KNOW WHAT YOU ARE DOING!
*/
/****************************************************************************************************/
if(!isNil"infiSTAR_SERVERSTART_PlayerConnected_id" && !isNil"FN_GET_SERVERPW")then {
infiSTAR_SERVERSTART_postInit_thread = [] spawn {
waitUntil {!isNil "PublicServerIsLoaded" && {PublicServerIsLoaded}};
removeMissionEventHandler ["PlayerConnected",infiSTAR_SERVERSTART_PlayerConnected_id];
(call FN_GET_SERVERPW) serverCommand "#unlock";
};
};
/****************************************************************************************************/
[
"",
{
#include "infiSTAR_keyBinds_defaults.sqf"
}
] remoteExecCall ["spawn",-2,"infiSTAR_keyBinds_JIP"];

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,217 @@
infiSTAR_keyBinds_defaults = [];
fn_infiSTAR_keyBinds_build = {infiSTAR_keyBinds_defaults pushBack _this;};
[15, false, false, false, "infiSTAR Custom Keybinds Menu", "fn_infiSTAR_keyBinds_init", {true}] call fn_infiSTAR_keyBinds_build;
[77, false, false, false, "Private Chat", "fn_infiSTAR_PrivChat_init", {true}] call fn_infiSTAR_keyBinds_build;
[0,""] call fn_infiSTAR_keyBinds_build;
[0,"EXILE KeyBinds:"] call fn_infiSTAR_keyBinds_build;
[0, false, false, false, "Lock / Unlock", { if!(ExileClientIsHandcuffed)then{call ExileClient_object_vehicle_interaction_keyLock;}; }, {true}] call fn_infiSTAR_keyBinds_build;
[0, false, false, false, "Place 3D Group Marker", { if!(ExileClientIsHandcuffed)then{if(ExileClientAllowPartyMarkers && !(ExileClientPartyID isEqualTo -1))then{call ExileClient_system_party_updateMyMarker;};}; }, {true}] call fn_infiSTAR_keyBinds_build;
[0, false, false, false, "Clear Map Markers", { ExileClientWaypoints = []; }, {true}] call fn_infiSTAR_keyBinds_build;
[0xDB,"Switch Party ESP mode"] call fn_infiSTAR_keyBinds_build;
[0x29,"Toggle stats"] call fn_infiSTAR_keyBinds_build;
[0x0B,"Auto running toggle"] call fn_infiSTAR_keyBinds_build;
[0x20,"Auto running stop"] call fn_infiSTAR_keyBinds_build;
[0x02,"Primary weapon"] call fn_infiSTAR_keyBinds_build;
[0x03,"Handgun"] call fn_infiSTAR_keyBinds_build;
[0x04,"Secondary weapon"] call fn_infiSTAR_keyBinds_build;
[0x05,"(Un-)Holster weapon"] call fn_infiSTAR_keyBinds_build;
[0x06,"Earplugs toggle"] call fn_infiSTAR_keyBinds_build;
[0x07,"Open XM8"] call fn_infiSTAR_keyBinds_build;
[0,"",{!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0,"Admin KeyBinds:",{!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x3B, false, false, false, "Open infiSTAR Admin Menu", { FILLMAINSTATE=0;[] call fnc_FULLinit; }, {!isNil "fnc_FULLinit"}] call fn_infiSTAR_keyBinds_build;
[0x3C, false, false, false, "Territory Management", "fn_TM_init", {!isNil "fnc_FULLinit"}] call fn_infiSTAR_keyBinds_build;
[0x3D, false, false, false, "Admin Console", "fnc_workplace", {!isNil "fnc_workplace" && "AdminConsole" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x3D, true, false, false, "Attach/Detach CursorTarget", {[""] call fnc_ATTACH_TO;}, {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x3E, false, false, false, "Treelist Item Spawn Menu", "FN_GEAR_ON_TARGET", {"Items spawn menu" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x3F, false, false, false, "Change Weather + View Distance", "FN_CHANGE_VIEWDISTANCE", {"Change ViewDistance" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x40, false, false, false, "Heal Cameraon (and self)", "infiSTAR_A3Heal", {"HealSelf" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x41, false, false, false, "Repair + Refuel near camera", "infiSTAR_A3RestoreNear", {"HealRepairNear" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x42, false, false, false, "Flip Target Vehicle", {[""] call fnc_flipVeh;}, {"Flip Vehicle" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x43, false, false, false, "Show Gear of Spectated Target", "admin_showGear", {"ShowGear" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x43, true, false, false, "Toggle Spectate Overlay", "fn_infiSTAR_admin_ToggleSpectateOverlay", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x44, false, false, false, "Stop spectating", "fn_infiSTAR_admin_endSpectate", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x57, false, false, false, "Spawn Ammo", "infiSTAR_A3addAmmo", {"Spawn Ammo" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x02, false, true, false, "Lightning on Target", {[""] call fnc_Light_selected;}, {"Light" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x2F, false, true, false, "Fly Down", "infiSTAR_go_down", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x05, true, false, false, "Fly Up", "infiSTAR_FlyUp", {"FlyUp" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x05, false, true, false, "Tp Up", "infiSTAR_TpUp", {"FlyUp" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x06, true, false, false, "Teleport 10m in facing direction", "infiSTAR_Tpdirection", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x2F, true, false, false, "Teleport 1m in facing direction", "infiSTAR_shortTP", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x08, false, false, false, "Unlock/Lock vehicle or Open/Close Doors", "infiSTAR_A3Togglelock", {"UnlockLockVehicle" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x30, true, false, false, "Hover", "fnc_Hover", {!isNil "ADMINLEVELACCESS"}] call fn_infiSTAR_keyBinds_build;
[0x17, true, false, false, "Show Info (Like Codes of Vehicles and Doors)", "admin_showinfo", {"showinfo" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0xD3, false, false, false, "Delete Target", {[""] call fnc_deleteVeh_selected;}, {"Delete Vehicle" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x03, false, true, false, "Kill / Destroy Target", {[""] call fnc_Kill_selected;}, {"Kill" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
[0x0F, true, false, false, "Open Map", {openMap true;}, {"Teleport On Map Click" call ADMINLEVELACCESS}] call fn_infiSTAR_keyBinds_build;
fn_infiSTAR_keyBinds_defaults = {infiSTAR_keyBinds_defaults};
infiSTAR_keyBinds_array = call compile(profileNamespace getVariable ["infiSTAR_keyBinds",str (call fn_infiSTAR_keyBinds_defaults)]);
fn_infiSTAR_keyBinds_findIds = {
infiSTAR_keyBindIds_array = [];
{ infiSTAR_keyBindIds_array pushBackUnique (_x select 0); } forEach infiSTAR_keyBinds_array;
};
call fn_infiSTAR_keyBinds_findIds;
fn_infiSTAR_keyBinds_edit_KeyDown = {
_selection = lbCurSel (uiNamespace getVariable ["infiSTAR_keyBinds_ListBox",controlNull]);
_lbText = (uiNamespace getVariable ["infiSTAR_keyBinds_ListBox",controlNull]) lbText _selection;
if!(_lbText isEqualTo "")then
{
params ["_keyctrl","_keycode", "_keyshift", "_keyctrl", "_keyalt"];
_keyName = keyName _keycode;
if!(_keyName isEqualTo "")then
{
_infiSTAR_keyBinds_edit = uiNamespace getVariable ["infiSTAR_keyBinds_edit",controlNull];
_infiSTAR_keyBinds_edit ctrlSetText (call fn_infiSTAR_keyBinds_getKeyText);
_curArray = infiSTAR_keyBinds_array param [_selection, [], [[]]];
if(count _curArray isEqualTo 7)then
{
_curArray set[0, _keycode];
_curArray set[1, _keyshift || _keycode in [0x2A,0x36]];
_curArray set[2, _keyctrl || _keycode in [0x1D,0x9D]];
_curArray set[3, _keyalt || _keycode in [0x38,0xB8]];
infiSTAR_keyBinds_array set[_selection, _curArray];
};
};
};
false
};
fn_infiSTAR_keyBinds_btnSave = {
profileNamespace setVariable ["infiSTAR_keyBinds",str infiSTAR_keyBinds_array];
saveprofileNamespace;
call fn_infiSTAR_keyBinds_findIds;
};
fn_infiSTAR_keyBinds_btnReset = {
_selection = lbCurSel (uiNamespace getVariable ["infiSTAR_keyBinds_ListBox",controlNull]);
_lbText = (uiNamespace getVariable ["infiSTAR_keyBinds_ListBox",controlNull]) lbText _selection;
if!(_lbText isEqualTo "")then
{
_curArray = (call fn_infiSTAR_keyBinds_defaults) param [_selection, [], [[]]];
if(count _curArray isEqualTo 7)then
{
infiSTAR_keyBinds_array set[_selection, _curArray];
profileNamespace setVariable ["infiSTAR_keyBinds",str infiSTAR_keyBinds_array];
saveprofileNamespace;
call fn_infiSTAR_keyBinds_findIds;
_curArray params ["_keycode","_keyshift","_keyctrl","_keyalt"];
_infiSTAR_keyBinds_edit = uiNamespace getVariable ["infiSTAR_keyBinds_edit",controlNull];
_infiSTAR_keyBinds_edit ctrlSetText (call fn_infiSTAR_keyBinds_getKeyText);
};
};
};
fn_infiSTAR_keyBinds_btnResetAll = {
infiSTAR_keyBinds_array = call fn_infiSTAR_keyBinds_defaults;
profileNamespace setVariable ["infiSTAR_keyBinds",str infiSTAR_keyBinds_array];
saveprofileNamespace;
call fn_infiSTAR_keyBinds_findIds;
systemChat "Your infiSTAR custom keybinds have been reset..!";
closeDialog 0;
createDialog "infiSTAR_KeyBinds";
};
fn_infiSTAR_keyBinds_lbSelChanged = {
_data = (_this select 0) lbData (_this select 1);
_ctrlEdit = uiNamespace getVariable ["infiSTAR_keyBinds_edit",controlNull];
_ctrlDescribe = (ctrlParent _ctrlEdit) displayCtrl 103;
_ctrlBtnSave = (ctrlParent _ctrlEdit) displayCtrl 105;
_ctrlBtnReset = (ctrlParent _ctrlEdit) displayCtrl 106;
if(_data isEqualTo "+")then{
_ctrlDescribe ctrlSetText "ASSIGNED KEY";
{_x ctrlEnable true;_x ctrlShow true;} forEach [_ctrlEdit,_ctrlBtnSave,_ctrlBtnReset];
} else {
_data = _data select [1,(count _data)-2];
if(_data isEqualTo "")then{
_ctrlDescribe ctrlSetText "ASSIGNED KEY";
} else {
_ctrlDescribe ctrlSetText ("ASSIGNED KEY: "+_data);
};
{_x ctrlEnable false;_x ctrlShow false;} forEach [_ctrlEdit,_ctrlBtnSave,_ctrlBtnReset];
};
_lbText = (_this select 0) lbText (_this select 1);
if!(_lbText isEqualTo "")then
{
_curArray = infiSTAR_keyBinds_array param [_this select 1, [], [[]]];
if(count _curArray isEqualTo 7)then
{
_curArray params ["_keycode","_keyshift","_keyctrl","_keyalt"];
_infiSTAR_keyBinds_edit = uiNamespace getVariable ["infiSTAR_keyBinds_edit",controlNull];
_infiSTAR_keyBinds_edit ctrlSetText (call fn_infiSTAR_keyBinds_getKeyText);
};
};
};
fn_infiSTAR_keyBinds_getKeyText = {
_keyName = keyName _keycode;
_ret = _keyName select [1,(count _keyName)-2];
if(_keyshift && !(_keycode in [0x2A,0x36]))then{ _ret = "Shift + " + _ret;};
if(_keyctrl && !(_keycode in [0x1D,0x9D]))then{ _ret = "Ctrl + " + _ret;};
if(_keyalt && !(_keycode in [0x38,0xB8]))then{ _ret = "Alt + " + _ret;};
_ret
};
fn_infiSTAR_keyBinds_initListbox = {
uiNamespace setVariable ["infiSTAR_keyBinds_ListBox",_this];
lbClear _this;
{
if(count _x < 7)then{
_x params ["_keyDownID","_keyName",["_keyAccess",{true},[{}]]];
if(call _keyAccess)then{
_lbIndex = _this lbAdd _keyName;
_this lbSetData [_lbIndex, keyName _keyDownID];
};
} else {
_x params ["_keyDownID","_KeyDownShift","_KeyDownCtrl","_KeyDownAlt","_keyName","_keyFnc","_keyAccess"];
if(call _keyAccess)then{
_lbIndex = _this lbAdd _keyName;
_this lbSetData [_lbIndex, "+"];
};
};
} forEach infiSTAR_keyBinds_array;
};
fn_infiSTAR_keyBinds_init = {
if!((count (call fn_infiSTAR_keyBinds_defaults)) isEqualTo (count infiSTAR_keyBinds_array))then
{
systemChat "There are new Keybinds, you need to press the Reset All button so they are shown in the infiSTAR Keybinds!";
};
if(isNull (uiNamespace getVariable ["infiSTAR_keyBinds_ListBox",controlNull]))then{ createDialog "infiSTAR_KeyBinds"; };
};
fn_infiSTAR_keyBinds_KeyDown = {
params ["_keyctrl","_keycode", "_keyshift", "_keyctrl", "_keyalt"];
_handle = false;
if(_keycode in infiSTAR_keyBindIds_array)then
{
{
_x params ["_KeyDownID","_KeyDownShift","_KeyDownCtrl","_KeyDownAlt","_keyName","_keyFnc","_keyAccess"];
if(_keycode isEqualTo _KeyDownID && _keyshift isEqualTo _KeyDownShift && _keyctrl isEqualTo _KeyDownCtrl && _keyalt isEqualTo _KeyDownAlt)then
{
if(_keyFnc isEqualType "")then{ _keyFnc = missionNamespace getVariable [_keyFnc,{}]; };
if(call _keyAccess)then{call _keyFnc;_handle=true;};
};
} forEach infiSTAR_keyBinds_array;
};
infiSTAR_keyBinds_pressed = _handle;
false
};
if(!isNil "infiSTAR_keyBinds_startThread")then{terminate infiSTAR_keyBinds_startThread;};
infiSTAR_keyBinds_startThread = [] spawn {
waitUntil {
uiSleep 1;
if(!isNil "infiSTAR_keyBinds_KeyUp_ID")then{(findDisplay 46) displayRemoveEventHandler ["KeyUp",infiSTAR_keyBinds_KeyUp_ID];};
if(!isNil "infiSTAR_keyBinds_KeyDown_ID")then{(findDisplay 46) displayRemoveEventHandler ["KeyDown",infiSTAR_keyBinds_KeyDown_ID];};
infiSTAR_keyBinds_KeyDown_ID = (finddisplay 46) displayAddEventHandler ["KeyDown",{ call fn_infiSTAR_keyBinds_KeyDown }];
!isNil "infiSTAR_keyBinds_pressed"
};
};

BIN
@ExileServer/armalog.dll Normal file

Binary file not shown.

Binary file not shown.

View File

@ -30,6 +30,10 @@ onHackedData = "kick (_this select 0)";
onDifferentData = "kick (_this select 0)";
motd[] = {"Welcome to Z's Exile", "Enjoy your stay!" };
localClient[]={127.0.0.1};
headlessClients[] = {"127.0.0.1"};
battleyeLicense=1;
class Missions
{
class Exile

View File

@ -693,4 +693,29 @@ SQL1_INPUTS = 1
[setTerritoryNotified]
SQL1_1 = UPDATE territory SET xm8_protectionmoney_notified = ? WHERE id = ?
Number of Inputs = 2
SQL1_INPUTS = 1,2
SQL1_INPUTS = 1,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; infiSTAR Logs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[insert_infiSTARLog]
SQL1_1 = INSERT INTO infistar_logs SET servername = ?, logname = ?, logentry = ?
Number Of Inputs = 3
SQL1_INPUTS = 1,2,3
[getTotalConnections]
SQL1_1 = SELECT first_connect_at,last_connect_at,total_connections FROM account WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; infiSTAR WhiteList
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[getAccountWhitelisted]
SQL1_1 = SELECT whitelisted FROM account WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1

Binary file not shown.

Binary file not shown.

View File

@ -8,8 +8,8 @@ echo Launching Server
F:
cd %ARMA%
echo Exile Server Monitor... Active !
start "Arma3" arma3server_SC.exe "-mod=@exile;Kart;Mark;Heli;" "-servermod=@exileserver;@asm;@marma;" -config=%ARMA%\@ExileServer\config.cfg -port=2302 -profiles=SC -cfg=%ARMA%\@ExileServer\basic.cfg -name=SC -autoinit -Loadmissiontomemory -hugepages
REM start "Arma3_HC" arma3server_HC.exe -client -connect=127.0.0.1 -password=joejer "-mod=@exile;Kart;Mark;Heli;@A3XAI_HC;@asm;" -profiles=HC -name=HC -hugepages
start "Arma3" arma3server_SC.exe "-mod=@exile;Kart;Mark;Heli;" "-servermod=@exileserver;@asm;@marma;@A3XAI;" -config=%ARMA%\@ExileServer\config.cfg -port=2302 -profiles=SC -cfg=%ARMA%\@ExileServer\basic.cfg -name=SC -autoinit -Loadmissiontomemory -hugepages
start "Arma3_HC" arma3server_HC.exe -client -connect=127.0.0.1 -password=joejer "-mod=@exile;Kart;Mark;Heli;@A3XAI_HC;@asm;" -profiles=HC -name=HC
REM ping 127.0.0.1 -n 15 >NUL
REM echo Exile Server Shutdown ... Restarting!

View File

@ -1,3 +1,6 @@
@echo off
for /f "delims=" %%x in ('dir /od /a-d /b F:\Arma3\Arma3_Server\SC\*.rpt') do set recent=%%x
start "" "C:\Program Files (x86)\Notepad++\notepad++.exe" "F:\Arma3\Arma3_Server\SC\%recent%"
start "" "C:\Program Files (x86)\Notepad++\notepad++.exe" "F:\Arma3\Arma3_Server\SC\%recent%"
for /f "delims=" %%x in ('dir /od /a-d /b F:\Arma3\Arma3_Server\HC\*.rpt') do set recent=%%x
start "" "C:\Program Files (x86)\Notepad++\notepad++.exe" "F:\Arma3\Arma3_Server\HC\%recent%"

View File

@ -8,8 +8,8 @@ pboconsole -pack F:\Arma3\arma3_server\mpmissions\Exile.Altis F:\Arma3\arma3_ser
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\exile_server_config F:\Arma3\arma3_server\@ExileServer\addons\exile_server_config.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_dms F:\Arma3\arma3_server\@ExileServer\addons\a3_dms.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_exile_occupation F:\Arma3\arma3_server\@ExileServer\addons\a3_exile_occupation.pbo
REM pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_iniSTAR_Exile F:\Arma3\arma3_server\@ExileServer\addons\a3_infiSTAR_Exile.pbo
REM pboconsole -pack F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config.pbo
pboconsole -pack F:\Arma3\arma3_server\@ExileServer\addons\a3_iniSTAR_Exile F:\Arma3\arma3_server\@ExileServer\addons\a3_infiSTAR_Exile.pbo
pboconsole -pack F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config F:\Arma3\arma3_server\@A3XAI\addons\a3xai_config.pbo

BIN
keys/a3xai.bikey Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
_message = _this;
if ((typeName _message) isEqualTo "STRING") then {
systemChat _message;
if (A3XAIC_deathMessageSound) then {
playsound "AddItemOK";
};
} else {
diag_log format ["A3XAI Error: Kill message is non-string: %1",_message];
};
true

View File

@ -0,0 +1,32 @@
private ["_dialogueType", "_dialogueParams", "_paramCount", "_dialogueTextTemplate", "_dialogueTextFormat"];
_dialogueType = _this select 0;
_dialogueParams = _this select 1;
if (((diag_tickTime - (missionNamespace getVariable ["A3XAI_client_lastRadioMessage",-10])) > 10) or {_dialogueType in [20,30,31,32,33,34,35,41,42,43,44,45,51,52,53,54,55]}) then {
_paramCount = (count _dialogueParams);
_dialogueTextTemplate = missionNamespace getVariable [format ["A3XAI_client_radioMessage%1",_dialogueType],""];
_dialogueTextFormat = call {
if (_paramCount isEqualTo 0) exitWith {
_dialogueTextTemplate
};
if (_paramCount isEqualTo 1) exitWith {
format [_dialogueTextTemplate,_dialogueParams select 0]
};
if (_paramCount isEqualTo 2) exitWith {
format [_dialogueTextTemplate,_dialogueParams select 0,_dialogueParams select 1]
};
""
};
if !(_dialogueTextFormat isEqualTo "") then {
systemChat _dialogueTextFormat;
if (A3XAI_client_radioSounds) then {
playSound [format ["UAV_0%1",(floor (random 5) + 1)],false];
};
A3XAI_client_lastRadioMessage = diag_tickTime;
} else {
diag_log format ["A3XAI Error: %1 was given blank string. (%2)",__FILE__,_this];
};
};
true

View File

@ -0,0 +1,59 @@
/*
A3XAI Client-side Addon Configuration File
*/
/* A3XAI Client Addon Settings
--------------------------------------------------------------------------------------------------------------------*/
//Enables use of client-side radio functions. A3XAI_radioMsgs must be set 'true' in A3XAI_config.sqf.
A3XAI_client_radio = true;
//Enables sound notifications when displaying radio messages
A3XAI_client_radioSounds = true;
/* A3XAI Text String Settings
--------------------------------------------------------------------------------------------------------------------*/
//AI radio static message
A3XAI_client_radioMessage0 = "[RADIO] Your radio is picking up a signal nearby."; //Message displayed when radio sound transmitted without AI dialogue.
//AI radio messages (AI-killer dialogue)
A3XAI_client_radioMessage1 = "[RADIO] %1: %2 is in this area. Stay on alert!"; //%1: AI leader name, %2: Target player name
A3XAI_client_radioMessage2 = "[RADIO] %1: Target looks like a %2. Find them!"; //%1: AI leader name, %2: Target player type
A3XAI_client_radioMessage3 = "[RADIO] %1: Target's range is about %2 meters. Move in on that position!"; //%1: AI leader name, %2: Target player distance
A3XAI_client_radioMessage4 = "[RADIO] %1: Lost contact with target. Breaking off pursuit."; //%1: AI leader name
A3XAI_client_radioMessage5 = "[RADIO] %1: Target has been eliminated."; //%1: AI leader name
//AI radio messages (Dynamic AI hunter dialogue)
A3XAI_client_radioMessage11 = "[RADIO] %1: %2 is somewhere in this location. Search the area!"; //%1: AI leader name, %2: Target player name
A3XAI_client_radioMessage12 = "[RADIO] %1: Target is a %2. Stay on alert!"; //%1: AI leader name, %2: Target player type
A3XAI_client_radioMessage13 = "[RADIO] %1: Target's distance is %2 meters. Move in to intercept!"; //%1: AI leader name, %2: Target player distance
A3XAI_client_radioMessage14 = "[RADIO] %1: We've lost contact with the target. Let's move out."; //%1: AI leader name
A3XAI_client_radioMessage15 = "[RADIO] %1: The target has been killed."; //%1: AI leader name
//AI air patrol reinforcement warning message
A3XAI_client_radioMessage20 = "Warning: Hostile %1 inbound."; //%1: Air vehicle type
//AI air patrol dialogue. Displayed when player is detected by air patrol.
A3XAI_client_radioMessage31 = "[RADIO] %1: Target spotted below. Engaging."; //%1: AI leader name
A3XAI_client_radioMessage32 = "[RADIO] %1: We've arrived at the location. Moving in on the target."; //%1: AI leader name
A3XAI_client_radioMessage33 = "[RADIO] %1: Thats's the one we're looking for. Take him out."; //%1: AI leader name
A3XAI_client_radioMessage34 = "[RADIO] %1: Located the target. Let's take him out."; //%1: AI leader name
A3XAI_client_radioMessage35 = "[RADIO] %1: Priority target confirmed. Proceeding to engage."; //%1: AI leader name
//UAV patrol dialogue. Displayed when player is detected.
A3XAI_client_radioMessage41 = "[RADIO] %1 %2: Targets detected. Relaying position data."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage42 = "[RADIO] %1 %2: Targets found at destination coordinates."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage43 = "[RADIO] %1 %2: Movement detected. Targets selected."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage44 = "[RADIO] %1 %2: Heat signatures confirmed. Designating targets."; //%1: UAV Group, %2: UAV Type
A3XAI_client_radioMessage45 = "[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."; //%1: UAV Group, %2: UAV Type
//UGV patrol dialogue. Displayed when player is detected.
A3XAI_client_radioMessage51 = "[RADIO] %1 %2: Targets detected. Relaying position data."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage52 = "[RADIO] %1 %2: Targets found at destination coordinates."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage53 = "[RADIO] %1 %2: Movement detected. Targets selected."; //%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage54 = "[RADIO] %1 %2: Heat signatures confirmed. Designating targets."; ///%1: UGV Group, %2: UGV Type
A3XAI_client_radioMessage55 = "[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."; //%1: UGV Group, %2: UGV Type

View File

@ -0,0 +1,2 @@
A3XAI_client_radioMessage = compileFinal preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_code\A3XAI_client_radioMessage.sqf";
//A3XAI_client_killMessage = compileFinal preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_code\A3XAI_client_killMessage.sqf";

View File

@ -0,0 +1,44 @@
_startTime = diag_tickTime;
//Check value types
{
_value = missionNamespace getVariable (_x select 0);
if ((isNil "_value") or {(typeName _value) != (typeName (_x select 1))}) then {
missionNamespace setVariable [(_x select 0),(_x select 1)];
diag_log format ["[A3XAI] Error found in variable %1, resetting to default value.",(_x select 0)];
};
} forEach [
["A3XAI_client_radio",true],
["A3XAI_client_radioSounds",true],
//["A3XAI_client_deathMessages",true],
//["A3XAI_client_deathMessageSound",true],
["A3XAI_client_radioMessage0","[RADIO] Your radio is picking up a signal nearby."],
["A3XAI_client_radioMessage1","[RADIO] %1: %2 is in this area. Stay on alert!"],
["A3XAI_client_radioMessage2","[RADIO] %1: Target looks like a %2. Find them!"],
["A3XAI_client_radioMessage3","[RADIO] %1: Target's range is about %2 meters. Move in on that position!"],
["A3XAI_client_radioMessage4","[RADIO] %1: Lost contact with target. Breaking off pursuit."],
["A3XAI_client_radioMessage5","[RADIO] %1: Target has been eliminated."],
["A3XAI_client_radioMessage11","[RADIO] %1: %2 is somewhere in this location. Search the area!"],
["A3XAI_client_radioMessage12","[RADIO] %1: Target is a %2. Stay on alert!"],
["A3XAI_client_radioMessage13","[RADIO] %1: Target's distance is %2 meters. Move in to intercept!"],
["A3XAI_client_radioMessage14","[RADIO] %1: We've lost contact with the target. Let's move out."],
["A3XAI_client_radioMessage15","[RADIO] %1: The target has been killed."],
["A3XAI_client_radioMessage20","Warning: Hostile %1 inbound."],
["A3XAI_client_radioMessage31","[RADIO] %1: Target spotted below. Engaging."],
["A3XAI_client_radioMessage32","[RADIO] %1: We've arrived at the location. Moving in on the target."],
["A3XAI_client_radioMessage33","[RADIO] %1: Thats's the one we're looking for. Take him out."],
["A3XAI_client_radioMessage34","[RADIO] %1: Located the target. Let's take him out."],
["A3XAI_client_radioMessage35","[RADIO] %1: Priority target confirmed. Proceeding to engage."],
["A3XAI_client_radioMessage41","[RADIO] %1 %2: Targets detected. Relaying position data."],
["A3XAI_client_radioMessage42","[RADIO] %1 %2: Targets found at destination coordinates."],
["A3XAI_client_radioMessage43","[RADIO] %1 %2: Movement detected. Targets selected."],
["A3XAI_client_radioMessage44","[RADIO] %1 %2: Heat signatures confirmed. Designating targets."],
["A3XAI_client_radioMessage45","[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."],
["A3XAI_client_radioMessage51","[RADIO] %1 %2: Targets detected. Relaying position data."],
["A3XAI_client_radioMessage52","[RADIO] %1 %2: Targets found at destination coordinates."],
["A3XAI_client_radioMessage53","[RADIO] %1 %2: Movement detected. Targets selected."],
["A3XAI_client_radioMessage54","[RADIO] %1 %2: Heat signatures confirmed. Designating targets."],
["A3XAI_client_radioMessage55","[RADIO] %1 %2: Priority target located. Redirecting armed forces to target location."]
];
diag_log format ["[A3XAI] Verified all A3XAI settings in %1 seconds.",(diag_tickTime - _startTime)];

View File

@ -0,0 +1,6 @@
/*
A3XAI Version Identifier File
*/
#define A3XAI_CLIENT_TYPE "A3XAI Client Addon"
#define A3XAI_CLIENT_VERSION "0.0.0"

View File

@ -0,0 +1,25 @@
if (hasInterface) then {
_nul = [] spawn {
waitUntil {uiSleep 1; alive player};
waitUntil {uiSleep 1; (typeOf player) isEqualTo "Exile_Unit_Player"};
#include "A3XAI_client_version.txt"
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_config.sqf";
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_verifySettings.sqf";
call compile preprocessFileLineNumbers "A3XAI_Client\A3XAI_client_functions.sqf";
if (A3XAI_client_radio) then {
"A3XAI_SMS" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_radioMessage; diag_log _this;};
};
//No longer needed, A3XAI sends kill messages through Exile's messaging system nonglobally.
/*
if (A3XAI_client_deathMessages) then {
"A3XAI_killMSG" addPublicVariableEventHandler {(_this select 1) call A3XAI_client_killMessage; diag_log _this;};
};
*/
diag_log format ["[A3XAI] Initialized %1 version %2. Radio enabled: %3.",A3XAI_CLIENT_TYPE,A3XAI_CLIENT_VERSION,A3XAI_client_radio];
};
};

View File

@ -1,7 +1,4 @@
/*
//Exile Loot Drop DLL
ExileServer_system_lootManager_dropItem = "\ExileLootDrop\ExileServer_system_lootManager_dropItem.sqf";
ExileServer_system_lootManager_spawnLootInBuilding = "\ExileLootDrop\ExileServer_system_lootManager_spawnLootInBuilding.sqf";
//ExAd
ExileClient_gui_xm8_slide = "ExAdClient\XM8\CustomCode\ExileClient_gui_xm8_slide.sqf";
@ -52,3 +49,7 @@ ExileServer_world_spawnVehicles="custom\addItemsToVehicles\ExileServer_world_spa
*/
//RCON FIX Logs server uptime and time till restart
ExileServer_system_rcon_thread_check="custom\fixes\ExileServer_system_rcon_thread_check.sqf";
//Exile Loot Drop DLL
ExileServer_system_lootManager_dropItem = "\ExileLootDrop\ExileServer_system_lootManager_dropItem.sqf";
ExileServer_system_lootManager_spawnLootInBuilding = "\ExileLootDrop\ExileServer_system_lootManager_spawnLootInBuilding.sqf";

View File

@ -0,0 +1,31 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class ExAd
{
tag = "ExAd";
#include "Core\CfgFunctions.cpp"
#include "VirtualGarage\CfgFunctions.cpp"
//#include "AdminEvents\CfgFunctions.cpp"
//#include "Hacking\CfgFunctions.cpp"
//#include "Grinding\CfgFunctions.cpp"
#include "HaloParachute\CfgFunctions.cpp"
#include "XM8\CfgFunctions.cpp"
#include "StatsBar\CfgFunctions.cpp"
};

View File

@ -0,0 +1,22 @@
/*
CfgHints.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class ExAd
{
displayName = "ExAd Virtual Garage";
#include "VirtualGarage\CfgHints.cpp"
};

View File

@ -0,0 +1,20 @@
/*
CfgNetworkMessages.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "Core\CfgNetworkMessages.cpp"

View File

@ -0,0 +1,34 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class System
{
file = "ExAdClient\Core\Functions\System";
class debugHandler {};
class serverDispatch {};
class incomingRequest {};
class changeable {file = "ExAdClient\Core\postInit.sqf"; postInit = 1;};
};
class Utilities
{
file = "ExAdClient\Core\Functions\Utils";
class advancedHint {};
class call {};
class getNearByLocalVeh {};
class localize {};
};

View File

@ -0,0 +1,27 @@
/*
CfgNetworkMessages.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class AdvancedHint
{
parameters[] = {"STRING","ARRAY"};
};
class Call
{
parameters[] = {"CODE"};
};

View File

@ -0,0 +1,22 @@
/*
fn_debugHandler.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params ["_fnc","_exception"];
if(ExAd_Debug)then{
diag_log format["ExAd%3 Debugger: Error in %1 - '%2'",_fnc, _exception, (if(isDedicated)then{"Server"}else{""})]
}

View File

@ -0,0 +1 @@
/** * fn_incomingRequest.sqf * Modified by Jan Babor 2016 * * Originally * ExileClient_system_network_dispatchIncomingMessage * * Exile Mod * www.exilemod.com * © 2015 Exile Mod Team * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. */ private["_payload","_messageName","_messageParameters","_allowedParameters","_message","_exception"]; _payload = _this; try { if (isNil "_payload") then { throw "Message payload is not defined!"; }; if (typeName _payload != "ARRAY") then { throw "Message payload is not a array!"; }; if (count _payload != 2) then { throw format ["Wrong envelope field count! Payload: %1", _payload]; }; _messageName = _payload select 0; _messageParameters = _payload select 1; if !(isClass (missionConfigFile >> "CfgNetworkMessages" >> _messageName)) then { throw format ["Forbidden message name! Payload: %1", _payload]; }; _allowedParameters = getArray(missionConfigFile >> "CfgNetworkMessages" >> _messageName >> "parameters"); if (count _messageParameters != count _allowedParameters) then { throw format ["Parameter count mismatch! Payload: %1", _payload]; }; { if (_x != typeName (_messageParameters select _forEachIndex)) then { throw format ["Parameter type mismatch! Payload: %1", _payload]; }; } forEach _allowedParameters; diag_log format["Dispatching message '%1'...", _messageName]; call compile format["_messageParameters call ExAd_fnc_%1;",_messageName]; } catch { ["incomingRequest",_exception] call ExAd_fnc_debugHandler; }; true

View File

@ -0,0 +1,21 @@
/*
fn_serverDispatch.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
_this remoteExec ["ExAdServer_fnc_clientRequest",2];
true

View File

@ -0,0 +1 @@
/** * fn_advancedHint.sqf * Modified by Jan Babor 2016 * * Originally * ExileClient_system_network_dispatchIncomingMessage * * Exile Mod * www.exilemod.com * © 2015 Exile Mod Team * * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. */ private ["_payload","_messageName","_messageParameters","_allowedParameters","_message","_exception"]; _payload = _this; try { if(isNil "_payload")then{ throw "Message payload is not defined!" }; if (typeName _payload != "ARRAY") then { throw "Message payload is not a array!"; }; if (count _payload != 2) then { throw format ["Wrong envelope field count! Payload: %1", _payload]; }; _messageName = _payload select 0; _messageParameters = _payload select 1; if !(isClass (missionConfigFile >> "CfgHints" >> "ExAd" >> _messageName)) then { throw format ["Forbidden Hint Class! Payload: %1", _payload]; }; _allowedParameters = getArray(missionConfigFile >> "CfgHints" >> "ExAd" >> _messageName >> "parameters"); if (count _messageParameters != count _allowedParameters) then { throw format ["Parameter count mismatch! Payload: %1", _payload]; }; { if (_x != typeName (_messageParameters select _forEachIndex)) then { throw format ["Parameter type mismatch! Payload: %1", _payload]; }; } forEach _allowedParameters; missionNamespace setVariable [_messageName,_messageParameters]; [["ExAd",_messageName]] call BIS_fnc_advHint; } catch { ["advancedHint",_exception] call ExAd_fnc_debugHandler; }; true

View File

@ -0,0 +1 @@
/* fn_call.sqf Copyright 2016 Jan Babor Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ params ["_code"]; call _code; true

View File

@ -0,0 +1 @@
/* fn_getNearByLocalVeh.sqf Copyright 2016 Jan Babor Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ private ["_obj","_cat","_nearDist","_list"]; _obj = [_this,0,objNull] call BIS_fnc_param; _cat = [_this,1,["Car"],[[]]] call BIS_fnc_param; _nearDist = [_this,2,100,[0]] call BIS_fnc_param; _list = []; { if(local _x)then{ _list pushBack _x } }forEach nearestObjects [_obj,_cat,_nearDist]; _list

View File

@ -0,0 +1 @@
/* fn_localize.sqf Copyright 2016 Jan Babor Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ params [ ["_key", "", [""]], ["_value","N/A",[""]] ]; if(count _key == 0)exitWith{["localize", "_key is undefined/empty"] call ExAd_fnc_DebugHandler}; call compile format['%1 = if(isLocalized "%1")then{localize "%1"}else{"%2"};', _key, _value]; true

Binary file not shown.

View File

@ -0,0 +1,29 @@
/*
customize.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
ExAd_Debug = true; //BOOLEAN - If you want the ExAd code to generate debug logs
Exad_Logging = true; //BOOLEAN - If you want the ExAd code to generate extra logs. - Requires InfiStar installed
ExAd_Log_Folder = "ExAd_Logs"; //STRING - The folder ExAd writes logs to. You need to create the defined folder if it doesn't exist. If you don't create it - the DLL won't be able to write any Log files
ExAd_Hint_Title_Color = "#E48A36"; //STRING - Hint message color
ExAd_Hint_Title_Size = 1.5; //SCALAR - Hint title size
ExAd_Hint_Title_Font = "TahomaB"; //STRING - Hint title font
ExAd_Hint_Msg_Color = "#ffffff"; //STRING - Hint message color
ExAd_Hint_Msg_Size = 1; //SCALAR - Hint message size
ExAd_Hint_Msg_Font = "TahomaB"; //STRING - Hint message font

View File

@ -0,0 +1,38 @@
/*
postInit.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
_path = "ExAdClient\Core\customize.sqf";
call compile preprocessFileLineNumbers _path;
if(isNil "ExAd_Debug")then{ExAd_Debug = true;};
if(isNil "ExAd_Logging")then{ExAd_Logging = true;};
if(isDedicated)then{
if(!isClass(ConfigFile >> "CfgPatches" >> "a3_infiSTAR_Exile"))then{
ExAd_Logging = false;
["Core/postInit","Server can't find InfiStar addon"] call ExAd_fnc_debugHandler
}
};
if(isNil "ExAd_Log_Folder")then{ExAd_Log_Folder = "ExAd_Logs";};
if(isNil "ExAd_Hint_Title_Color")then{ExAd_Hint_Title_Color = "#E48A36";};
if(isNil "ExAd_Hint_Title_Size")then{ExAd_Hint_Title_Size = 1.5;};
if(isNil "ExAd_Hint_Title_Font")then{ExAd_Hint_Title_Font = "TahomaB";};
if(isNil "ExAd_Hint_Msg_Color")then{ExAd_Hint_Msg_Color = "#ffffff";};
if(isNil "ExAd_Hint_Msg_Size")then{ExAd_Hint_Msg_Size = 1;};
if(isNil "ExAd_Hint_Msg_Font")then{ExAd_Hint_Msg_Font = "TahomaB";};

View File

@ -0,0 +1,25 @@
/*
ExAd.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//#include "Core\ExAd.cpp"
//#include "VirtualGarage\ExAd.cpp"
//#include "AdminEvents\ExAd.cpp"
//#include "Hacking\ExAd.cpp"
//#include "Grinding\ExAd.cpp"
//#include "HaloParachute\ExAd.cpp"

View File

@ -0,0 +1,28 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class Grinding
{
file = "ExAdClient\Grinding\Functions";
class canGrindLock {};
class canRestoreLock {};
class grindLock {};
class restoreLock {};
class postInitGrinding {file = "ExAdClient\Grinding\postInit.sqf"; postInit = 1;};
};

View File

@ -0,0 +1,19 @@
/*
fn_canGrindLock.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
(((ExileClientInteractionObject getvariable ['ExileIsLocked',1]) isEqualTo -1) && !ExAd_GRINDING && ('Exile_Item_Grinder' in (magazines player)))

View File

@ -0,0 +1,19 @@
/*
fn_canRestoreLock.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
(('Exile_Item_Codelock' in (magazines player)) && (ExileClientInteractionObject getVariable ['ExAd_Grinding_progress', 0] > 0) && (ExileClientInteractionObject getVariable ['ExAd_Grinding_progress', 0] < ExAd_GRINDING_OBJECT_MAX))

View File

@ -0,0 +1,105 @@
/*
fn_grindLock.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
private ["_soundSrc","_ticker"];
if(vehicle player != player)exitWith{false};
ExAd_GRINDING_OBJECT = _this select 0;
ExAd_GRINDING = true;
{
ExileClientInteractionObject removeAction _x;
}
forEach ExileClientInteractionHandles;
if(isClass(configFile >> "CfgVehicles" >> "Sound_Factory10")) then {
_soundSrc = createSoundSource ["Sound_Factory10", position ExAd_GRINDING_OBJECT, [], 0];
};
player playActionNow "medicStart";
ExAd_DRAW3D_HANDLER = addMissionEventHandler ["Draw3D", {
private ["_object","_progress"];
_height = ExAd_GRINDING_PROGRESSBAR_POS;
_object = if(isNil "ExAd_GRINDING_OBJECT")then{ExileClientInteractionObject}else{ExAd_GRINDING_OBJECT};
_progress = 1 min ((_object getVariable ["ExAd_Grinding_progress", 1]) / ExAd_GRINDING_OBJECT_MAX);
drawLine3D [_object modelToWorld [-0.5, -0.15, _height], _object modelToWorld [0.5, -0.15, _height], [0,0,0,1]];
drawLine3D [_object modelToWorld [-0.5, -0.15, _height - 0.05], _object modelToWorld [0.5, -0.15, _height - 0.05], [0,0,0,1]];
drawLine3D [_object modelToWorld [-0.5, 0.15, _height], _object modelToWorld [0.5, 0.15, _height], [0,0,0,1]];
drawLine3D [_object modelToWorld [-0.5, 0.15, _height - 0.05], _object modelToWorld [0.5, 0.15, _height - 0.05], [0,0,0,1]];
drawLine3D [_object modelToWorld [-0.5, -0.15, _height], _object modelToWorld [-0.5, -0.15, _height - 0.05], [0,0,0,1]];
drawLine3D [_object modelToWorld [0.5, -0.15, _height], _object modelToWorld [0.5, -0.15, _height - 0.05], [0,0,0,1]];
drawLine3D [_object modelToWorld [-0.5, 0.15, _height], _object modelToWorld [-0.5, 0.15, _height - 0.05], [0,0,0,1]];
drawLine3D [_object modelToWorld [0.5, -0.15, _height], _object modelToWorld [0.5, -0.15, _height - 0.05], [0,0,0,1]];
for "_i" from 1 to 49 do {
drawLine3D [_object modelToWorld [-0.5, -0.15, _height - (0.001 * _i)], _object modelToWorld [((-0.5) + _progress), -0.15, _height - (0.001 * _i)], [1,0.482,0,1]];
drawLine3D [_object modelToWorld [0.5, 0.15, _height - (0.001 * _i)], _object modelToWorld [((0.5) - _progress), 0.15, _height - (0.001 * _i)], [1,0.482,0,1]];
drawLine3D [_object modelToWorld [0.5, -0.15, _height - (0.001 * _i)], _object modelToWorld [((-0.5) + _progress), -0.15, _height - (0.001 * _i)], [0.55,0.55,0.55,1]];
drawLine3D [_object modelToWorld [-0.5, 0.15, _height - (0.001 * _i)], _object modelToWorld [((0.5) - _progress), 0.15, _height - (0.001 * _i)], [0.55,0.55,0.55,1]];
}
}];
_ticker = 1;
while{(ExAd_GRINDING_OBJECT == ExileClientInteractionObject) && ExAd_GRINDING}do{
UISleep 1;
if(random[0,50,100] < 1)exitWith{
player removeItem "Exile_Item_Grinder";
["ErrorTitleAndText", ["ExAd - Grinding", STR_ExAd_GRINDING_NOTI_BROKE]] call ExileClient_gui_toaster_addTemplateToast;
false
};
if!("Exile_Magazine_Battery" in (magazines player))exitWith{
["ErrorTitleAndText", ["ExAd - Grinding", STR_ExAd_GRINDING_NOTI_EMPTY_BAT]] call ExileClient_gui_toaster_addTemplateToast;
false
};
if((_ticker % ExAd_GRINDING_PROGRESS_INTERVALL) == 0)then{
player removeItem "Exile_Magazine_Battery";
["grindProgress", [netId ExAd_GRINDING_OBJECT]] call ExAd_fnc_serverDispatch;
["SuccessTitleAndText", ["ExAd - Grinding", STR_ExAd_GRINDING_NOTI_PROGRESS]] call ExileClient_gui_toaster_addTemplateToast;
player playActionNow "medicStart";
};
if(ExAd_GRINDING_OBJECT getVariable ["ExAd_Grinding_progress", 0] > ExAd_GRINDING_OBJECT_MAX)exitWith{
UISleep 2;
["SuccessTitleAndText", ["ExAd - Grinding", STR_ExAd_GRINDING_NOTI_FINISHED]] call ExileClient_gui_toaster_addTemplateToast;
["grindProgress", [netId ExAd_GRINDING_OBJECT]] call ExAd_fnc_serverDispatch;
};
_ticker = _ticker + 1;
};
if(isClass(configFile >> "CfgVehicles" >> "Sound_Factory10")) then {
deleteVehicle _soundSrc;
};
player playActionNow "medicStop";
removeMissionEventHandler ["Draw3D",ExAd_DRAW3D_HANDLER];
ExAd_GRINDING_OBJECT = nil;
ExAd_GRINDING = false;
call ExileClient_gui_interactionMenu_unhook;
true

View File

@ -0,0 +1,33 @@
/*
fn_restoreLock.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params["_object"];
if(vehicle player != player)exitWith{false};
call ExileClient_gui_interactionMenu_unhook;
player playActionNow "medic";
UISleep 5;
player removeItem "Exile_Item_Codelock";
["SuccessTitleAndText", ["ExAd - Grinding", STR_ExAd_GRINDING_NOTI_RESTORED]] call ExileClient_gui_toaster_addTemplateToast;
["restoreLock", [netId _object]] call ExAd_fnc_serverDispatch;
call ExileClient_gui_interactionMenu_unhook;
true

View File

@ -0,0 +1,29 @@
/*
customize.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
ExAd_GRINDING_PROGRESS_INTERVALL = 5; //SCALAR - Grinding, interval time measured in seconds.
ExAd_GRINDING_PROGRESS = 30; //SCALAR - Damage each finished interval will take from the code lock.
ExAd_GRINDING_OBJECT_MAX = 300; //SCALAR - Code lock sustainability.
ExAd_GRINDING_PROGRESSBAR_POS = "Mid"; //SCALAR/STRING - You can use values between 0.3-2 or using "LOW"|"MID"|"HIGH"
/*
The default values above means that a full succesful grind will take (900 / 30) * 60 = 1800 = 20 minutes
*/

View File

@ -0,0 +1,47 @@
/*
postInit.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
_path = "ExAdClient\Grinding\customize.sqf";
call compile preprocessFileLineNumbers _path;
if(isNil "ExAd_GRINDING_PROGRESS_INTERVALL")then{ExAd_GRINDING_PROGRESS_INTERVALL = 60;};
if(isNil "ExAd_GRINDING_PROGRESS")then{ExAd_GRINDING_PROGRESS = 30;};
if(isNil "ExAd_GRINDING_OBJECT_MAX")then{ExAd_GRINDING_OBJECT_MAX = 900;};
ExAd_GRINDING = false;
["STR_ExAd_GRINDING_NOTI_BROKE", "Your grinder broke, get a new one before you can continue."] call ExAd_fnc_localize;
["STR_ExAd_GRINDING_NOTI_EMPTY_BAT", "Find some batteries to get the grinder to work."] call ExAd_fnc_localize;
["STR_ExAd_GRINDING_NOTI_PROGRESS", "Your grinder broke, get a new one before you can continue."] call ExAd_fnc_localize;
["STR_ExAd_GRINDING_NOTI_FINISHED", "You have broken the code lock."] call ExAd_fnc_localize;
["STR_ExAd_GRINDING_NOTI_RESTORED", "You've changed the look"] call ExAd_fnc_localize;
ExAd_GRINDING_PROGRESSBAR_POS = if!(isNil "ExAd_GRINDING_PROGRESSBAR_POS")then{
if(typeName ExAd_GRINDING_PROGRESSBAR_POS isEqualTo "SCALAR")then{
((2 min ExAd_GRINDING_PROGRESSBAR_POS) max 0.3)
}else{
if(typeName ExAd_GRINDING_PROGRESSBAR_POS isEqualTo "STRING")then{
switch (toLower ExAd_GRINDING_PROGRESSBAR_POS) do {
case "low": {0.3};
case "mid": {1};
case "high": {1.8};
default {1};
}
} else {1}
}
}else{1};

View File

@ -0,0 +1,28 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class Hacking
{
file = "ExAdClient\Hacking\Functions";
class canHackSafe {};
class canHackVG {};
class startHack {};
class stopHack {};
class postInitHacking {file = "ExAdClient\Hacking\postInit.sqf"; postInit = 1;};
};

View File

@ -0,0 +1,18 @@
/*
fn_canHackSafe.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
(('Exile_Item_Laptop' in (magazines player)) && ((ExileClientInteractionObject getvariable ['ExileIsLocked',1]) isEqualTo -1) && (({alive _x}count allPlayers) >= ExAd_HACKING_MIN_PLAYERS_ONLINE))

View File

@ -0,0 +1,18 @@
/*
fn_canHackVG.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
(('Exile_Item_Laptop' in (magazines player)) && ((([ExileClientInteractionObject, getPlayerUID player] call ExileClient_util_territory_getAccessLevel) select 0) < ExAd_VG_ACCESS_LEVEL) && (({alive _x}count allPlayers) >= ExAd_HACKING_MIN_PLAYERS_ONLINE))

View File

@ -0,0 +1,21 @@
/*
fn_startHack.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
player playActionNow "SitDown";
["startHack", [netId (_this select 0), netId player]] call ExAd_fnc_serverDispatch;

View File

@ -0,0 +1,18 @@
/*
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
["stopHack", [netId (_this select 0)]] call ExAd_fnc_serverDispatch;

View File

@ -0,0 +1,35 @@
/*
customize.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
ExAd_HACKING_MIN_PLAYERS_ONLINE = 30; //SCALAR - Minimun allowed players online to initalize a hack.
ExAd_HACKING_ALLOWED_HACKS = 1; //SCALAR - Simultaneous hacks allowed.
ExAd_HACKING_MAX_TIME = 1200; //SCALAR - Time to complete a hack
ExAd_HACKING_MAX_DISTANCE = 50; //SCALAR - Maximum distance away from the object being hack players for the hack to proceed.
ExAd_HACKING_TERRITORY_MAX = 3; //SCALAR - Maximun times a territory can get hacked before a new restart.
ExAd_HACKING_MARKER_COLOR = "ColorOrange"; //STRING - What color should the map marker have.
ExAd_HACKING_MARKER_TITLE = "Hacker activity"; //STRING - What title should the map marker have.
ExAd_HACKING_FAILED_HACK = 0.15; //SCALAR - 0-1 The possability for the hack to fail once finished.
ExAd_HACKING_PLAYER_ONLINE = false; //BOLLEAN - True if a player with build permissions for a base needs to be online for a hack to be possible.

View File

@ -0,0 +1,46 @@
/*
postInit.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
_path = "ExAdClient\Hacking\customize.sqf";
call compile preprocessFileLineNumbers _path;
if(isNil "ExAd_HACKING_MIN_PLAYERS_ONLINE")then{ExAd_HACKING_MIN_PLAYERS_ONLINE = 30;};
if(isNil "ExAd_HACKING_ALLOWED_HACKS")then{ExAd_HACKING_ALLOWED_HACKS = 1;};
if(isNil "ExAd_HACKING_MAX_TIME")then{ExAd_HACKING_MAX_TIME = 1200;};
if(isNil "ExAd_HACKING_MAX_DISTANCE")then{ExAd_HACKING_MAX_DISTANCE = 50;};
if(isNil "ExAd_HACKING_TERRITORY_MAX")then{ExAd_HACKING_TERRITORY_MAX = 3;};
if(isNil "ExAd_HACKING_MARKER_COLOR")then{ExAd_HACKING_MARKER_COLOR = "ColorOrange";};
if(isNil "ExAd_HACKING_MARKER_TITLE")then{ExAd_HACKING_MARKER_TITLE = "Hacker activity";};
if(isNil "ExAd_HACKING_FAILED_HACK")then{ExAd_HACKING_FAILED_HACK = 0.15;};
if(isNil "ExAd_VG_ACCESS_LEVEL")then{ExAd_VG_ACCESS_LEVEL = 1;};
if(isNil "ExAd_HACKING_FAILED_HACK")then{ExAd_VG_ACCESS_LEVEL = 1;}; /*Needs to be here if peolpe don't use the VirtualGarage*/
["STR_ExAd_HACKING_NOTI_MAX_TERRITORY_HACKS_REACHED", "Connection failed! Territory Wi-Fi is down!"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_TERRITORY_ONE_HACK", "Wi-Fi occupied!!"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_MAX_SIM_HACKS", "The laptop overloaded and got destroyed! Another hacker is already using the grid."] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_NO_PLAYER_PRESENT", "No Wi-Fi available!"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_HINT_TITLE", "Hack Activity"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_HINT_HACK_START", "A brute force hack is detected on the grid!"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_VG_SUCCESS", "Hack successful! The Virtual Garage unloaded a %1"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_VG_NO_VEH", "Hack successful! No vehicles were stored in the Virtual Garage."] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_SAFE_SUCCESS", "Hack successful! The safe is now unlocked."] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_INTERUPTED", "Hack has been interupted"] call ExAd_fnc_localize;
["STR_ExAd_HACKING_NOTI_FAILED", "Hack failed! Circuits overloaded!"] call ExAd_fnc_localize;

View File

@ -0,0 +1,29 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class HaloParachute
{
file = "ExAdClient\HaloParachute\Functions";
class ejectPlayer {};
class parachutesafemode {};
class pullParachute {};
class showEject {};
class showParachute {};
class postInitHP {file = "ExAdClient\HaloParachute\postInit.sqf"; postInit = 1;};
};

View File

@ -0,0 +1,39 @@
/*
fn_ejectPayer.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
private ["_vehicleObj", "_push", "_vecDir"];
_vehicleObj = vehicle player;
if (_vehicleObj == player) exitWith {false};
moveOut player;
_push = if (_vehicleObj isKindOf "Plane") then {
player setDir getDir _vehicleObj;
((vectorUp _vehicleObj) vectorMultiply 40)
} else {
_vecDir = (getPosASL player) vectorDiff (getPosASL _vehicleObj);
(_vecDir vectorMultiply (5 / vectorMagnitude _vecDir))
};
player setVelocity ((velocity player) vectorAdd _push);
if(ExAd_HALOPARACHUTE_SAFE_MODE)then{
ExAd_PARACHUTE_SAFE_THREAD = [0.1, ExAd_fnc_parachuteSafeMode, [], true] call ExileClient_system_thread_addtask;
};
true

View File

@ -0,0 +1,21 @@
/*
fn_parachuteSafeMode.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
if((getPosATL player) select 2 <= ExAd_ACTION_PARACHUTE_HEIGHT)then{
call ExAd_fnc_pullParachute;
};

View File

@ -0,0 +1,47 @@
/*
fn_pullParachute.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
private ["_parachuteObject"];
waitUntil {sleep 0.1; ({player distance _x < (10 max (sizeOf typeOf _x))} count (player nearEntities ["Air", 20])) == 0};
if (!alive player || vehicle player != player) exitWith {};
if(backpack player == "B_Parachute")then{removeBackpack player};
_parachuteObject = createVehicle ["Steerable_Parachute_F", getPosATL player, [], 0, "CAN_COLLIDE"];
_parachuteObject setDir getDir player;
_parachuteObject disableCollisionWith player;
player action ["GetinDriver", _parachuteObject];
player switchmove "";
player switchmove "HaloFreeFall_non";
player setVelocity [(sin (getDir player)) * 50, (cos (getDir player)) * 50, -5];
ExileJobParachuteFix = [0.25, ExileClient_object_player_parachuteFix, [], true] call ExileClient_system_thread_addtask;
if(ExAd_HALOPARACHUTE_SAFE_MODE)then{
[ExAd_PARACHUTE_SAFE_THREAD] call ExileClient_system_thread_removeTask;
};
if(ExAd_HALOPARACHUTE_USE_KEY_ACTIONS)then{
//hint localize "STR_ExAd_HALOPARACHUTE_INFO_DETACH"
[localize "STR_ExAd_HALOPARACHUTE_INFO_DETACH"] spawn ExileClient_gui_baguette_show;
};
true

View File

@ -0,0 +1,27 @@
/*
fn_showEject.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
if(vehicle player == player)exitWith{false};
_condition = false;
if((getPos player) select 2 > ExAd_ACTION_EJECT_HEIGHT)then{
_role = assignedVehicleRole player;
_condition = if(count _role > 0)then{if(_role select 0 == "cargo")then{false}else{true}}else{true}
};
_condition

View File

@ -0,0 +1,36 @@
/*
fn_showParachute.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
if(vehicle player != player)exitWith{false};
if(backpack player == "B_Parachute")exitWith{false};
_condition = false;
if((getPos player) select 2 > ExAd_ACTION_PARACHUTE_HEIGHT)then{
_states = [
"ladderriflestatic",
"ladderrifledownloop",
"ladderrifleuploop",
"laddercivilstatic",
"laddercivildownloop",
"ladderciviluploop"
];
_condition = !((animationState player) in _states);
};
_condition

View File

@ -0,0 +1,24 @@
/*
customize.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
ExAd_HALOPARACHUTE_SAFE_MODE = false; //BOOLEAN - Force pull parachute when player reaches ExAd_ACTION_PARACHUTE_HEIGHT if they ejected from vehicle
ExAd_HALOPARACHUTE_USE_ACTIONS = true; //BOOLEAN - Allows player to eject from all vehicles with a pressed key combination 'Alt+Shift+V'
ExAd_HALOPARACHUTE_USE_KEY_ACTIONS = true; //BOOLEAN - Show addActions on the screen
ExAd_ACTION_PARACHUTE_HEIGHT = 10; //SCALAR - What is the minimum altitude a player can pull a parachute. |RECOMMENDED 30 meters when safe_mode activated
ExAd_ACTION_EJECT_HEIGHT = 100; //SCALAR - What is the minimum altitude a player can Halo/Eject from a vehicle.

View File

@ -0,0 +1,67 @@
/*
postInit.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
_path = "ExAdClient\HaloParachute\customize.sqf";
call compile preprocessFileLineNumbers _path;
if(isNil "ExAd_HALOPARACHUTE_SAFE_MODE")then{ExAd_HALOPARACHUTE_SAFE_MODE = false;};
if(isNil "ExAd_HALOPARACHUTE_USE_ACTIONS")then{ExAd_HALOPARACHUTE_USE_ACTIONS = true;};
if(isNil "ExAd_HALOPARACHUTE_USE_KEY_ACTIONS")then{ExAd_HALOPARACHUTE_USE_KEY_ACTIONS = true;};
if(isNil "ExAd_ACTION_PARACHUTE_HEIGHT")then{ExAd_ACTION_PARACHUTE_HEIGHT = 10;};
if(isNil "ExAd_ACTION_EJECT_HEIGHT")then{ExAd_ACTION_EJECT_HEIGHT = 0;};
[] spawn {
while {true} do {
waitUntil{!isNil "ExileClientLoadedIn"};
UISleep 0.1;
waitUntil{ExileClientLoadedIn};
UISleep 0.1;
waitUntil{alive player};
if(ExAd_HALOPARACHUTE_USE_ACTIONS)then{
ExAd_ACTION_PARACHUTE = player addaction [format["<t color='#E48A36'><img image='\a3\ui_f\data\gui\cfg\CommunicationMenu\supplydrop_ca.paa' />%1</t>", localize "STR_ExAd_HALOPARACHUTE_ACTIONS_PARACHUTE"], {[] spawn ExAd_fnc_pullParachute}, [], 6, true, true, "", "call ExAd_fnc_showParachute"];
ExAd_ACTION_EJECT = player addaction [format["<t color='#E48A36'><img image='\a3\ui_f\data\gui\cfg\CommunicationMenu\supplydrop_ca.paa' />%1</t>", localize "STR_ExAd_HALOPARACHUTE_ACTIONS_HALO"], {call ExAd_fnc_ejectPlayer}, [], 6, false, true, "", "call ExAd_fnc_showEject;"];
};
if(ExAd_HALOPARACHUTE_USE_KEY_ACTIONS)then{
ExAd_ACTION_HALOPARACHUTE_USE_KEY_ACTIONS = (findDisplay 46) displayAddEventHandler ["KeyDown",{
if(_this select 1 == 47 && _this select 2 && _this select 4)then{
if((getPos player) select 2 > ExAd_ACTION_EJECT_HEIGHT && vehicle player != player)then{
call ExAd_fnc_ejectPlayer
}else{
if(call ExAd_fnc_showParachute)then{
[] spawn ExAd_fnc_pullParachute
}
}
}
}];
};
waitUntil{!alive player};
if(ExAd_HALOPARACHUTE_USE_ACTIONS)then{
player removeAction ExAd_ACTION_PARACHUTE;
player removeAction ExAd_ACTION_EJECT;
};
if(ExAd_HALOPARACHUTE_USE_KEY_ACTIONS)then{
(findDisplay 46) displayRemoveEventHandler ["KeyDown", ExAd_ACTION_HALOPARACHUTE_USE_KEY_ACTIONS];
};
};
};

View File

@ -0,0 +1,20 @@
/*
RscTitles.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "StatsBar\RscTitles.cpp"

View File

@ -0,0 +1,3 @@
class Scratchie {
class postInitScratchie {file = "ExAdClient\Scratchie\postInit.sqf"; postInit = 1;};
}

View File

@ -0,0 +1,4 @@
if (ExileClientXM8CurrentSlide == "ExAd_Scratchie") then {
ExileClientXM8CurrentSlide = "apps";
};
ExAdCurFlagNetId = nil;

View File

@ -0,0 +1,51 @@
/*
onLoad.sqf
Copyright 2017 ole
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params["_display","_slide","_idc"];
_pW = 0.025;
_pH = 0.04;
_leftCol = 0;
_leftColW = 10;
_margin = 0.02;
_posX = _margin + _leftCol * _pW;
_slideClass = "ExAd_Scratchie";
// fixing index issue from ExAd_fnc_getNextIDC and ExAd_fnc_getAppCtrl
[_slideClass,"dummy"] call ExAd_fnc_getNextIDC;
[_display,_slide,([_slideClass,"InfoTitle"] call ExAd_fnc_getNextIDC),[_leftCol * _pW, 2.75 * _pH, 20 * _pW, 2 * _pH],"Counting Scratchies...","PuristaMedium",1.2,"#ffffff","left",1] call ExAd_fnc_createStructuredText;
[_display,_slide,([_slideClass,"backButton"] call ExAd_fnc_getNextIDC),[27.6 * _pW, 17.7 * _pH, 6 * _pW, 1 * _pH],'["extraApps", 1] call ExileClient_gui_xm8_slide;','Back'] call ExAd_fnc_createButton;
/* Buy button */
[_display,_slide,([_slideClass,"picBuy"] call ExAd_fnc_getNextIDC),[_posX, 5 * _pH, _leftColW * _pW, 7 * _pH],"ExAdClient\Scratchie\icons\scratchie-buy.paa",[1,1,1,1],false,false,""] call ExAd_fnc_createPicture;
[_display,_slide,([_slideClass,"buyButton"] call ExAd_fnc_getNextIDC),[_posX, 12 * _pH, _leftColW*_pW, 1*_pH],"['buy',ExileClientSessionId, player, ''] remoteExecCall ['ExileServer_lottery_network_request', 2]; [] spawn Scratchie_UpdateCount;",'Buy Scratchie',""] call ExAd_fnc_createButton;
/* Use button */
_posX = _posX + _margin + _leftColW * _pW;
[_display,_slide,([_slideClass,"picUse"] call ExAd_fnc_getNextIDC),[_posX, 5 * _pH, _leftColW * _pW, 7 * _pH],"ExAdClient\Scratchie\icons\scratchie.paa",[1,1,1,1],false,false,""] call ExAd_fnc_createPicture;
[_display,_slide,([_slideClass,"useButton"] call ExAd_fnc_getNextIDC),[_posX, 12 * _pH, _leftColW * _pW, 1 * _pH],"['use',ExileClientSessionId, player, ''] remoteExecCall ['ExileServer_lottery_network_request', 2]; [] spawn Scratchie_UpdateCount;",'Use Scratchie',""] call ExAd_fnc_createButton;
/* Get Prize button */
_posX = _posX + _margin + _leftColW * _pW;
[_display,_slide,([_slideClass,"picPrize"] call ExAd_fnc_getNextIDC),[_posX, 5 * _pH, _leftColW * _pW, 7 * _pH],"ExAdClient\Scratchie\icons\scratchie-prize.paa",[1,1,1,1],false,false,""] call ExAd_fnc_createPicture;
[_display,_slide,([_slideClass,"useButton"] call ExAd_fnc_getNextIDC),[_posX, 12 * _pH, _leftColW * _pW, 1 * _pH],"['get',ExileClientSessionId, player, ''] remoteExecCall ['ExileServer_lottery_network_request', 2];",'Get Prize',""] call ExAd_fnc_createButton;
true

View File

@ -0,0 +1,18 @@
private ["_flags","_flag"];
try
{
_display = uiNameSpace getVariable ["RscExileXM8", displayNull];
if(isNull _display)exitWith{
throw "XM8 not loaded!";
};
diag_log "Opening Scratchies slide";
[] spawn Scratchie_UpdateCount;
}
catch
{
["ErrorTitleAndText", ["ExAd - Scratchies", _exception]] call ExileClient_gui_toaster_addTemplateToast;
["extraApps", 1] call ExileClient_gui_xm8_slide
}

View File

@ -0,0 +1,34 @@
/*
postInit.sqf - Scratchie postInit used for ExAd
Copyright 2017 - ole1986
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
if (isDedicated) exitWith {};
private _code = {
disableSerialization;
private _display = uiNameSpace getVariable ["RscExileXM8", displayNull];
private _ctrl = [_display,"ExAd_Scratchie","InfoTitle"] call ExAd_fnc_getAppCtrl;
_ctrl ctrlSetStructuredText parseText "Counting Scratchies...";
sleep 3;
_ctrl ctrlSetStructuredText parseText (format ["You have <t color='#1ab42e'>%1 Scratchies</t> in your pocket", missionNamespace getVariable ["scratchieCount", 0]]);
};
missionNamespace setVariable ['Scratchie_UpdateCount', _code];
diag_log "Loaded Scratchie postInit";

View File

@ -0,0 +1,49 @@
/*
CfgFunctions.cpp
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
class StatsBar
{
file = "ExAdClient\StatsBar\Functions";
class formatNbrToPrefixStr {};
class formatSBImage {};
class formatSBOutput {};
class getBankStr {};
class getClanStr {};
class getCompassStr {};
class getFPSStr {};
class getGridStr {};
class getHPStr {};
class getHungerStr {};
class getKDStr {};
class getPlayersStr {};
class getRespectStr {};
class getTempStr {};
class getThirstStr {};
class getTimerStr {};
class getSBColor {};
class getWalletStr {};
class loadSB {};
class sbPowerToggle {};
class sbSave {};
class sbStop {};
class sbThread {};
class toggleExileHUD {};
class updateSB {};
class postInitSB {file = "ExAdClient\StatsBar\postInit.sqf"; postInit = 1;};
};

View File

@ -0,0 +1,23 @@
/*
fn_formatNbrToPrefixStr.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params [["_nbr", 0, [0]], ["_response", ""], ["_prefix", ""]];
_prefix = if( _nbr >= 1000 ) then { if( _nbr >= 1000000 ) then {_nbr = _nbr / 1000000; "M" } else {_nbr = _nbr / 1000; "K" } }else{ "" };
format["%1%2", floor _nbr, _prefix]

View File

@ -0,0 +1,21 @@
/*
fn_formatSBImage.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params [["_src","",[""]],["_size",ExAd_SB_Img_Size,[0]]];
format["<img size='%2' image='%1' />", _src,_size]

View File

@ -0,0 +1,26 @@
/*
fn_formatSBOutput.sqf
Copyright 2016 Jan Babor
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
params [["_elements", [], [[]]], ["_color","",[""]], ["_text",""]];
{
_text = format["%1%3%2", _text, _x, ExAd_SB_Text_InnerMargin];
}forEach _elements;
_color = if(count _color > 0)then{format["color='%1'",_color]}else{_color};
format["<t %3>%1%2%1</t>", ExAd_SB_Text_Margin , _text , _color ]

Some files were not shown because too many files have changed in this diff Show More