initial files
This commit is contained in:
208
kp_liberation.brf_sumava/functions/fn_getSaveData.sqf
Normal file
208
kp_liberation.brf_sumava/functions/fn_getSaveData.sqf
Normal file
@@ -0,0 +1,208 @@
|
||||
/*
|
||||
File: fn_getSaveData.sqf
|
||||
Author: KP Liberation Dev Team - https://github.com/KillahPotatoes
|
||||
Date: 2020-03-29
|
||||
Last Update: 2020-08-25
|
||||
License: MIT License - http://www.opensource.org/licenses/MIT
|
||||
|
||||
Description:
|
||||
Gather current session data for saving.
|
||||
|
||||
Parameter(s):
|
||||
NONE
|
||||
|
||||
Returns:
|
||||
Save data [ARRAY]
|
||||
*/
|
||||
|
||||
private _objectsToSave = [];
|
||||
private _resourceStorages = [];
|
||||
private _aiGroups = [];
|
||||
|
||||
private _allObjects = [];
|
||||
private _allStorages = [];
|
||||
private _allMines = [];
|
||||
private _allCrates = [];
|
||||
|
||||
// Get all blufor groups
|
||||
private _allBlueGroups = allGroups select {
|
||||
(side _x == GRLIB_side_friendly) && // Only blufor groups
|
||||
{isNull objectParent (leader _x)} && // Make sure it's an infantry group
|
||||
{!(((units _x) select {alive _x}) isEqualTo [])} // At least one unit has to be alive
|
||||
};
|
||||
|
||||
// Fetch all objects and AI groups near each FOB
|
||||
private ["_fobPos", "_fobObjects", "_grpUnits", "_fobMines"];
|
||||
{
|
||||
_fobPos = _x;
|
||||
_fobObjects = (_fobPos nearObjects (GRLIB_fob_range * 1.2)) select {
|
||||
((toLower (typeof _x)) in KPLIB_classnamesToSave) && // Exclude classnames which are not in the presets
|
||||
{alive _x} && // Exclude dead or broken objects
|
||||
{getObjectType _x >= 8} && // Exclude preplaced terrain objects
|
||||
{speed _x < 5} && // Exclude moving objects (like civilians driving through)
|
||||
{isNull attachedTo _x} && // Exclude attachTo'd objects
|
||||
{((getpos _x) select 2) < 10} && // Exclude hovering helicopters and the like
|
||||
{!(_x getVariable ["KP_liberation_edenObject", false])} && // Exclude all objects placed via editor in mission.sqm
|
||||
{!(_x getVariable ["KP_liberation_preplaced", false])} && // Exclude preplaced (e.g. little birds from carrier)
|
||||
{!((toLower (typeOf _x)) in KPLIB_crates)} // Exclude storage crates (those are handled separately)
|
||||
};
|
||||
|
||||
_allObjects = _allObjects + (_fobObjects select {!((toLower (typeOf _x)) in KPLIB_storageBuildings)});
|
||||
_allStorages = _allStorages + (_fobObjects select {(_x getVariable ["KP_liberation_storage_type",-1]) == 0});
|
||||
|
||||
// Process all groups near this FOB
|
||||
{
|
||||
// Get only living AI units of the group by excluding possible POWs currently in the player group
|
||||
_grpUnits = (units _x) select {!(isPlayer _x) && (alive _x) && !((typeOf _x) in KPLIB_o_inf_classes) && !((typeOf _x) in militia_squad)};
|
||||
// Add to save array
|
||||
_aiGroups pushBack [getPosATL (leader _x), (_grpUnits apply {typeOf _x})];
|
||||
} forEach (_allBlueGroups select {(_fobPos distance2D (leader _x)) < (GRLIB_fob_range * 1.2)});
|
||||
|
||||
// Save all mines around FOB
|
||||
_fobMines = allMines inAreaArray [_fobPos, GRLIB_fob_range * 1.2, GRLIB_fob_range * 1.2];
|
||||
_allMines append (_fobMines apply {[
|
||||
getPosWorld _x,
|
||||
[vectorDirVisual _x, vectorUpVisual _x],
|
||||
typeOf _x,
|
||||
_x mineDetectedBy GRLIB_side_friendly
|
||||
]});
|
||||
} forEach GRLIB_all_fobs;
|
||||
|
||||
// Save all fetched objects
|
||||
private ["_savedPos", "_savedVecDir", "_savedVecUp", "_class", "_hasCrew"];
|
||||
{
|
||||
// Position data
|
||||
_savedPos = getPosWorld _x;
|
||||
_savedVecDir = vectorDirVisual _x;
|
||||
_savedVecUp = vectorUpVisual _x;
|
||||
_class = typeOf _x;
|
||||
_hasCrew = false;
|
||||
|
||||
// Determine if vehicle is crewed
|
||||
if ((toLower _class) in KPLIB_b_allVeh_classes) then {
|
||||
if (({!isPlayer _x} count (crew _x) ) > 0) then {
|
||||
_hasCrew = true;
|
||||
};
|
||||
};
|
||||
|
||||
// Only save player side, seized or captured objects
|
||||
if (
|
||||
(!(_class in civilian_vehicles) || {_x getVariable ["KPLIB_seized", false]}) &&
|
||||
(!((toLower _class) in KPLIB_o_allVeh_classes) || {_x getVariable ["KPLIB_captured", false]})
|
||||
) then {
|
||||
_objectsToSave pushBack [_class, _savedPos, _savedVecDir, _savedVecUp, _hasCrew];
|
||||
};
|
||||
} forEach _allObjects;
|
||||
|
||||
// Save all storages and resources
|
||||
private ["_supplyValue", "_ammoValue", "_fuelValue"];
|
||||
{
|
||||
// Position data
|
||||
_savedPos = getPosWorld _x;
|
||||
_savedVecDir = vectorDirVisual _x;
|
||||
_savedVecUp = vectorUpVisual _x;
|
||||
_class = typeOf _x;
|
||||
|
||||
// Resource variables
|
||||
_supplyValue = 0;
|
||||
_ammoValue = 0;
|
||||
_fuelValue = 0;
|
||||
|
||||
// Sum all stored resources of current storage
|
||||
{
|
||||
switch ((typeOf _x)) do {
|
||||
case KP_liberation_supply_crate: {_supplyValue = _supplyValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
||||
case KP_liberation_ammo_crate: {_ammoValue = _ammoValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
||||
case KP_liberation_fuel_crate: {_fuelValue = _fuelValue + (_x getVariable ["KP_liberation_crate_value",0]);};
|
||||
default {[format ["Invalid object (%1) at storage area", (typeOf _x)], "ERROR"] call KPLIB_fnc_log;};
|
||||
};
|
||||
} forEach (attachedObjects _x);
|
||||
|
||||
// Add to saving with corresponding resource values
|
||||
_resourceStorages pushBack [_class, _savedPos, _savedVecDir, _savedVecUp, _supplyValue, _ammoValue, _fuelValue];
|
||||
} forEach _allStorages;
|
||||
|
||||
// Save crates at blufor sectors which spawn crates on activation
|
||||
{
|
||||
_allCrates append (
|
||||
((nearestObjects [markerPos _x, KPLIB_crates, GRLIB_capture_size]) select {isNull attachedTo _x}) apply {
|
||||
[typeOf _x, _x getVariable ["KP_liberation_crate_value", 0], getPosATL _x]
|
||||
}
|
||||
);
|
||||
} forEach (blufor_sectors select {_x in sectors_factory || _x in sectors_capture});
|
||||
|
||||
// Pack all stats in one array
|
||||
private _stats = [
|
||||
stats_ammo_produced,
|
||||
stats_ammo_spent,
|
||||
stats_blufor_soldiers_killed,
|
||||
stats_blufor_soldiers_recruited,
|
||||
stats_blufor_teamkills,
|
||||
stats_blufor_vehicles_built,
|
||||
stats_blufor_vehicles_killed,
|
||||
stats_civilian_buildings_destroyed,
|
||||
stats_civilian_vehicles_killed,
|
||||
stats_civilian_vehicles_killed_by_players,
|
||||
stats_civilian_vehicles_seized,
|
||||
stats_civilians_healed,
|
||||
stats_civilians_killed,
|
||||
stats_civilians_killed_by_players,
|
||||
stats_fobs_built,
|
||||
stats_fobs_lost,
|
||||
stats_fuel_produced,
|
||||
stats_fuel_spent,
|
||||
stats_hostile_battlegroups,
|
||||
stats_ieds_detonated,
|
||||
stats_opfor_killed_by_players,
|
||||
stats_opfor_soldiers_killed,
|
||||
stats_opfor_vehicles_killed,
|
||||
stats_opfor_vehicles_killed_by_players,
|
||||
stats_player_deaths,
|
||||
stats_playtime,
|
||||
stats_prisoners_captured,
|
||||
stats_readiness_earned,
|
||||
stats_reinforcements_called,
|
||||
stats_resistance_killed,
|
||||
stats_resistance_teamkills,
|
||||
stats_resistance_teamkills_by_players,
|
||||
stats_secondary_objectives,
|
||||
stats_sectors_liberated,
|
||||
stats_sectors_lost,
|
||||
stats_spartan_respawns,
|
||||
stats_supplies_produced,
|
||||
stats_supplies_spent,
|
||||
stats_vehicles_recycled
|
||||
];
|
||||
|
||||
// Pack the weights in one array
|
||||
private _weights = [
|
||||
infantry_weight,
|
||||
armor_weight,
|
||||
air_weight
|
||||
];
|
||||
|
||||
// Pack the save data in the save array
|
||||
[
|
||||
kp_liberation_version,
|
||||
date,
|
||||
_objectsToSave,
|
||||
_resourceStorages,
|
||||
_stats,
|
||||
_weights,
|
||||
_aiGroups,
|
||||
blufor_sectors,
|
||||
combat_readiness,
|
||||
GRLIB_all_fobs,
|
||||
GRLIB_permissions,
|
||||
GRLIB_vehicle_to_military_base_links,
|
||||
KP_liberation_civ_rep,
|
||||
KP_liberation_clearances,
|
||||
KP_liberation_guerilla_strength,
|
||||
KP_liberation_logistics,
|
||||
KP_liberation_production,
|
||||
KP_liberation_production_markers,
|
||||
resources_intel,
|
||||
_allMines,
|
||||
_allCrates,
|
||||
KPLIB_sectorTowers
|
||||
] // return
|
||||
Reference in New Issue
Block a user