mirror of
https://github.com/acemod/ACE3.git
synced 2024-08-30 18:23:18 +00:00
Merge remote-tracking branch 'origin/agmRespawnPort'
This commit is contained in:
commit
c85cc6a15e
@ -1,281 +0,0 @@
|
||||
class CfgPatches {
|
||||
class AGM_Respawn {
|
||||
units[] = {};
|
||||
weapons[] = {"AGM_Rallypoint_West", "AGM_Rallypoint_East", "AGM_Rallypoint_Independent", "AGM_RallypointExit_West", "AGM_RallypointExit_East", "AGM_RallypointExit_Independent"};
|
||||
requiredVersion = 0.60;
|
||||
requiredAddons[] = {AGM_Core};
|
||||
version = "0.95";
|
||||
versionStr = "0.95";
|
||||
versionAr[] = {0,95,0};
|
||||
author[] = {"bux578", "commy2"};
|
||||
authorUrl = "https://github.com/bux578/";
|
||||
};
|
||||
};
|
||||
|
||||
class CfgFunctions {
|
||||
class AGM_Respawn {
|
||||
class AGM_Respawn {
|
||||
file = "AGM_Respawn\functions";
|
||||
class canMoveRallypoint;
|
||||
class getAllGear;
|
||||
class handleKilled;
|
||||
class handleRespawn;
|
||||
class initRallypoint;
|
||||
class module;
|
||||
class moduleFriendlyFire;
|
||||
class moduleRallypoint;
|
||||
class moveRallypoint;
|
||||
class removeBody;
|
||||
class removeDisconnectedPlayer;
|
||||
class restoreGear;
|
||||
class showFriendlyFireMessage;
|
||||
class teleportToRallypoint;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Killed_EventHandlers {
|
||||
class CAManBase {
|
||||
class AGM_Respawn_HandleGear {
|
||||
killed = "_this call AGM_Respawn_fnc_handleKilled";
|
||||
};
|
||||
};
|
||||
};
|
||||
class Extended_Respawn_EventHandlers {
|
||||
class CAManBase {
|
||||
class AGM_Respawn_HandleGear {
|
||||
respawn = "_this call AGM_Respawn_fnc_handleRespawn";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class CfgAddons {
|
||||
class AGM_Respawn_Rallypoints {
|
||||
list[] = {"AGM_Rallypoint_West", "AGM_Rallypoint_East", "AGM_Rallypoint_Independent", "AGM_RallypointExit_West", "AGM_RallypointExit_East", "AGM_RallypointExit_Independent"};
|
||||
};
|
||||
};
|
||||
|
||||
class CfgVehicleClasses {
|
||||
class AGM_Respawn_Rallypoints {
|
||||
displayName = "AGM Respawn";
|
||||
};
|
||||
};
|
||||
|
||||
class CfgVehicles {
|
||||
class Module_F;
|
||||
class AGM_ModuleRespawn: Module_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
category = "AGM";
|
||||
displayName = "Respawn System";
|
||||
function = "AGM_Respawn_fnc_module";
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = "\AGM_Respawn\UI\Icon_Module_Respawn_ca.paa";
|
||||
class Arguments {
|
||||
class SavePreDeathGear {
|
||||
displayName = "Save Gear?";
|
||||
description = "Respawn with the gear a soldier had just before his death?";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { name = "Yes"; value = 1;};
|
||||
class No { default = 1; name = "No"; value = 0; };
|
||||
};
|
||||
};
|
||||
class RemoveDeadBodiesDisonncected {
|
||||
displayName = "Remove bodies?";
|
||||
description = "Remove player bodies after disconnect?";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { default = 1; name = "Yes"; value = 1;};
|
||||
class No { name = "No"; value = 0; };
|
||||
};
|
||||
};
|
||||
/*class BodyRemoveTimer {
|
||||
displayName = "Time to remove bodies.";
|
||||
description = "The amount of time (in seconds) after that a unit's body gets removed. Default: 90";
|
||||
typeName = "NUMBER";
|
||||
defaultValue = 90;
|
||||
};*/
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_ModuleFriendlyFire: Module_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
category = "AGM";
|
||||
displayName = "Friendly Fire Messages";
|
||||
function = "AGM_Respawn_fnc_moduleFriendlyFire";
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = "\AGM_Respawn\UI\Icon_Module_FriendlyFire_ca.paa";
|
||||
class Arguments {
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_ModuleRallypoint: Module_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
category = "AGM";
|
||||
displayName = "Rallypoint System";
|
||||
function = "AGM_Respawn_fnc_moduleRallypoint";
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = "\AGM_Respawn\UI\Icon_Module_Rallypoint_ca.paa";
|
||||
class Arguments {
|
||||
};
|
||||
};
|
||||
|
||||
// rallypoints
|
||||
class FlagCarrier;
|
||||
class Flag_NATO_F: FlagCarrier {
|
||||
class AGM_Actions;
|
||||
};
|
||||
|
||||
class Flag_CSAT_F: FlagCarrier {
|
||||
class AGM_Actions;
|
||||
};
|
||||
|
||||
class Flag_AAF_F: FlagCarrier {
|
||||
class AGM_Actions;
|
||||
};
|
||||
|
||||
// static
|
||||
class AGM_Rallypoint_West: Flag_NATO_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint West Base";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = "side group _player == west";
|
||||
statement = "[_player, side group _player, false] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_Rallypoint_East: Flag_CSAT_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint East Base";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = "side group _player == east";
|
||||
statement = "[_player, side group _player, false] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_Rallypoint_Independent: Flag_AAF_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint Independent Base";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = "side group _player == independent";
|
||||
statement = "[_player, side group _player, false] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// moveable
|
||||
class AGM_RallypointExit_West: Flag_NATO_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint West";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = "side group _player == west";
|
||||
statement = "[_player, side group _player, true] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_RallypointExit_East: Flag_CSAT_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint East";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = "side group _player == east";
|
||||
statement = "[_player, side group _player, true] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_RallypointExit_Independent: Flag_AAF_F {
|
||||
author = "$STR_AGM_Core_AGMTeam";
|
||||
displayName = "Rallypoint Independent";
|
||||
vehicleClass = "AGM_Respawn_Rallypoints";
|
||||
|
||||
class EventHandlers {
|
||||
init = "(_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call AGM_Respawn_fnc_initRallypoint";
|
||||
};
|
||||
class AGM_Actions: AGM_Actions {
|
||||
class AGM_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = "side group _player == independent";
|
||||
statement = "[_player, side group _player, true] call AGM_Respawn_fnc_teleportToRallypoint;";
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// team leader
|
||||
class Man;
|
||||
class CAManBase: Man {
|
||||
class AGM_SelfActions {
|
||||
class AGM_MoveRallypoint {
|
||||
displayName = "Move Rallypoint";
|
||||
condition = "[_player, side group _player] call AGM_Respawn_fnc_canMoveRallypoint";
|
||||
statement = "[_player, side group _player] call AGM_Respawn_fnc_moveRallypoint";
|
||||
showDisabled = 0;
|
||||
priority = -0.5;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class AGM_Parameters_Boolean {
|
||||
// Boolean Parameters (0/1)
|
||||
AGM_Respawn_SavePreDeathGear = 0;
|
||||
AGM_Respawn_RemoveDeadBodiesDisonncected = 1;
|
||||
};
|
@ -1,14 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
private ["_unit", "_side"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
|
||||
_unit getVariable ["AGM_canMoveRallypoint", false]
|
||||
&& {!isNull ([
|
||||
objNull,
|
||||
missionNamespace getVariable ["AGM_Rallypoint_West", objNull],
|
||||
missionNamespace getVariable ["AGM_Rallypoint_East", objNull],
|
||||
missionNamespace getVariable ["AGM_Rallypoint_Independent", objNull]
|
||||
] select ([west, east, independent] find _side) + 1)}
|
@ -1,40 +0,0 @@
|
||||
/*
|
||||
Author: bux578
|
||||
|
||||
Description:
|
||||
Returns an array containing all items of a given unit
|
||||
|
||||
Arguments:
|
||||
A player object
|
||||
|
||||
Return value:
|
||||
An array containing all inventory items
|
||||
*/
|
||||
|
||||
private ["_unit", "_allGear"];
|
||||
|
||||
_unit = _this select 0;
|
||||
|
||||
_allGear = [
|
||||
(headgear _unit),
|
||||
(goggles _unit),
|
||||
(uniform _unit),
|
||||
(uniformItems _unit),
|
||||
(vest _unit),
|
||||
(vestItems _unit),
|
||||
(backpack _unit),
|
||||
(backpackItems _unit),
|
||||
(primaryWeapon _unit),
|
||||
(primaryWeaponItems _unit),
|
||||
(primaryWeaponMagazine _unit),
|
||||
(secondaryWeapon _unit),
|
||||
(secondaryWeaponItems _unit),
|
||||
(secondaryWeaponMagazine _unit),
|
||||
(handgunWeapon _unit),
|
||||
(handgunItems _unit),
|
||||
(handgunMagazine _unit),
|
||||
(assignedItems _unit),
|
||||
(binocular _unit)
|
||||
];
|
||||
|
||||
_allGear
|
@ -1,31 +0,0 @@
|
||||
/*
|
||||
Name: AGM_Respawn_fnc_handleKilled
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
|
||||
Description:
|
||||
Handles the XEH Killed event
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - Killed unit
|
||||
1: OBJECT - Attacker
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
private ["_killedUnit"];
|
||||
|
||||
_killedUnit = _this select 0;
|
||||
|
||||
// Saves the gear when the player is killed
|
||||
AGM_Respawn_unitGear = [];
|
||||
|
||||
if (AGM_Respawn_SavePreDeathGear) then {
|
||||
AGM_Respawn_unitGear = [_killedUnit] call AGM_Respawn_fnc_getAllGear;
|
||||
};
|
||||
|
||||
if (missionNamespace getVariable ["AGM_showFriendlyFireMessage", false]) then {
|
||||
[_this, "AGM_Respawn_fnc_showFriendlyFireMessage", 2] call AGM_Core_fnc_execRemoteFnc;
|
||||
};
|
@ -1,17 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
private ["_rallypoint", "_name"];
|
||||
|
||||
_rallypoint = _this select 0;
|
||||
|
||||
if (!local _rallypoint) exitWith {};
|
||||
|
||||
_name = typeOf _rallypoint;
|
||||
|
||||
if (isNil _name) then {
|
||||
missionNamespace setVariable [_name, _rallypoint];
|
||||
publicVariable _name;
|
||||
} else {
|
||||
deleteVehicle _rallypoint;
|
||||
diag_log text "[AGM] Respawn: ERROR Multiple Rallypoints of same type.";
|
||||
};
|
@ -1,43 +0,0 @@
|
||||
/*
|
||||
* Author: KoffeinFlummi, bux578, CAA-Picard, commy2
|
||||
*
|
||||
* Initializes the respawn module.
|
||||
*
|
||||
* Arguments:
|
||||
* Whatever the module provides. (I dunno.)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*/
|
||||
if !(isServer) exitWith {};
|
||||
|
||||
_logic = _this select 0;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
AGM_Respawn_Module = true;
|
||||
|
||||
[_logic, "AGM_Respawn_SavePreDeathGear", "SavePreDeathGear"] call AGM_Core_fnc_readBooleanParameterFromModule;
|
||||
[_logic, "AGM_Respawn_RemoveDeadBodiesDisonncected", "RemoveDeadBodiesDisonncected"] call AGM_Core_fnc_readBooleanParameterFromModule;
|
||||
|
||||
if (isServer) then {
|
||||
if (AGM_Respawn_RemoveDeadBodiesDisonncected) then {
|
||||
_fnc_deleteDisconnected = {
|
||||
_this spawn {
|
||||
_unit = _this select 0;
|
||||
|
||||
sleep 4;
|
||||
|
||||
if (!alive _unit) then {
|
||||
deleteVehicle _unit;
|
||||
};
|
||||
};
|
||||
false
|
||||
};
|
||||
|
||||
addMissionEventHandler ["HandleDisconnect", _fnc_deleteDisconnected];
|
||||
};
|
||||
};
|
||||
|
||||
diag_log text "[AGM]: Respawn Module Initialized.";
|
@ -1,28 +0,0 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
*
|
||||
* Initializes the Friendly Fire Messages module.
|
||||
*
|
||||
* Arguments:
|
||||
* Whatever the module provides. (I dunno.)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*/
|
||||
|
||||
_this spawn {
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
if (isServer) then {
|
||||
_varName = "AGM_showFriendlyFireMessage";
|
||||
|
||||
missionNamespace setVariable [_varName, true];
|
||||
publicVariable _varName;
|
||||
};
|
||||
|
||||
diag_log text "[AGM]: Friendly Fire Messages Module Initialized.";
|
||||
};
|
@ -1,25 +0,0 @@
|
||||
/*
|
||||
* Author: commy2
|
||||
*
|
||||
* Initializes the Rallypoint module.
|
||||
*
|
||||
* Arguments:
|
||||
* Whatever the module provides. (I dunno.)
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*/
|
||||
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
//_mode = parseNumber (_logic getVariable "Action");
|
||||
|
||||
{
|
||||
_x setVariable ["AGM_canMoveRallypoint", true];
|
||||
} forEach _units;
|
||||
|
||||
diag_log text "[AGM]: Rallypoint Module Initialized.";
|
@ -1,35 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
_this spawn {
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
|
||||
_rallypoint = [
|
||||
objNull,
|
||||
missionNamespace getVariable ["AGM_RallypointExit_West", objNull],
|
||||
missionNamespace getVariable ["AGM_RallypointExit_East", objNull],
|
||||
missionNamespace getVariable ["AGM_RallypointExit_Independent", objNull]
|
||||
] select ([west, east, independent] find _side) + 1;
|
||||
|
||||
if (isNull _rallypoint) exitWith {};
|
||||
|
||||
_position = getPosATL _unit;
|
||||
_position = _position findEmptyPosition [0, 2, typeOf _rallypoint];
|
||||
if (count _position == 0) then {_position = getPosATL _unit};
|
||||
|
||||
_position set [2, 0];
|
||||
|
||||
["Deploy in 5 seconds ..."] call AGM_Core_fnc_displayTextStructured;
|
||||
|
||||
sleep 5;
|
||||
_rallypoint setPosATL _position;
|
||||
_unit reveal _rallypoint;
|
||||
|
||||
/*
|
||||
_marker = format ["AGM_RallyPoint_%1", _side];
|
||||
_marker setMarkerPos _position;
|
||||
_marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber];
|
||||
*/
|
||||
|
||||
["Rallypoint deployed"] call AGM_Core_fnc_displayTextStructured;
|
||||
};
|
@ -1,30 +0,0 @@
|
||||
/*
|
||||
* Author: bux578
|
||||
*
|
||||
* removes the body
|
||||
*
|
||||
* Arguments:
|
||||
* The body
|
||||
*
|
||||
* Return Value:
|
||||
* None
|
||||
*/
|
||||
|
||||
private ["_body", "_forceRemove", "_bodyRemoveTimer"];
|
||||
|
||||
_body = _this select 0;
|
||||
_forceRemove = _this select 1;
|
||||
|
||||
_bodyRemoveTimer = AGM_Respawn_BodyRemoveTimer max 0;
|
||||
|
||||
// could be used for SpecOps missions.
|
||||
if (_forceRemove) then {
|
||||
_bodyRemoveTimer = 2;
|
||||
};
|
||||
|
||||
[_body, _bodyRemoveTimer] spawn {
|
||||
sleep (_this select 1);
|
||||
// hideBody takes ~20s till body is fully underground
|
||||
// a better hideBody would make this more aesthetic
|
||||
deleteVehicle (_this select 0);
|
||||
};
|
@ -1,15 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
private ["_forceRemove", "_body"];
|
||||
|
||||
_forceRemove = _this select 0;
|
||||
|
||||
{
|
||||
if (getPlayerUID _x == _uid) exitWith {
|
||||
_body = _x;
|
||||
};
|
||||
} forEach playableUnits;
|
||||
|
||||
if (!isNil "_body" && {!alive _body}) then {
|
||||
[_body, _forceRemove] call AGM_Respawn_fnc_removeBody;
|
||||
};
|
@ -1,12 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
private ["_unit", "_killer"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_killer = _this select 1;
|
||||
|
||||
if (_unit != _killer && side group _unit in [side group AGM_player, civilian] && {side group _killer == side group AGM_player}) then {
|
||||
systemChat format ["%1 was killed by %2", [_unit] call AGM_Core_fnc_getName, [_killer] call AGM_Core_fnc_getName];
|
||||
|
||||
[_unit, "killedByFriendly", [_unit, _killer]] call AGM_Core_fnc_callCustomEventHandlers;
|
||||
};
|
@ -1,27 +0,0 @@
|
||||
// by commy2
|
||||
|
||||
private ["_unit", "_side", "_toBase", "_rallypoint"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
_toBase = _this select 2;
|
||||
|
||||
_rallypoint = ([
|
||||
[
|
||||
objNull,
|
||||
missionNamespace getVariable ["AGM_RallypointExit_West", objNull],
|
||||
missionNamespace getVariable ["AGM_RallypointExit_East", objNull],
|
||||
missionNamespace getVariable ["AGM_RallypointExit_Independent", objNull]
|
||||
],
|
||||
[
|
||||
objNull,
|
||||
missionNamespace getVariable ["AGM_Rallypoint_West", objNull],
|
||||
missionNamespace getVariable ["AGM_Rallypoint_East", objNull],
|
||||
missionNamespace getVariable ["AGM_Rallypoint_Independent", objNull]
|
||||
]
|
||||
] select _toBase) select ([west, east, independent] find _side) + 1;
|
||||
|
||||
if (isNull _rallypoint) exitWith {};
|
||||
|
||||
_unit setPosASL (getPosASL _rallypoint);
|
||||
[["Teleported to Rallypoint", "Teleported to Base"] select _toBase] call AGM_Core_fnc_displayTextStructured;
|
5
addons/respawn/CfgAddons.hpp
Normal file
5
addons/respawn/CfgAddons.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
class CfgAddons {
|
||||
class GVAR(Rallypoints) {
|
||||
list[] = { "ACE_Rallypoint_West", "ACE_Rallypoint_East", "ACE_Rallypoint_Independent", "ACE_RallypointExit_West", "ACE_RallypointExit_East", "ACE_RallypointExit_Independent" };
|
||||
};
|
||||
};
|
20
addons/respawn/CfgEventHandlers.hpp
Normal file
20
addons/respawn/CfgEventHandlers.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
class Extended_PreInit_EventHandlers {
|
||||
class ADDON {
|
||||
init = QUOTE(call COMPILE_FILE(XEH_preInit));
|
||||
};
|
||||
};
|
||||
|
||||
class Extended_Killed_EventHandlers {
|
||||
class CAManBase {
|
||||
class GVAR(HandleGear) {
|
||||
killed = QUOTE(_this call FUNC(handleKilled));
|
||||
};
|
||||
};
|
||||
};
|
||||
class Extended_Respawn_EventHandlers {
|
||||
class CAManBase {
|
||||
class GVAR(HandleGear) {
|
||||
respawn = QUOTE(_this call FUNC(handleRespawn));
|
||||
};
|
||||
};
|
||||
};
|
5
addons/respawn/CfgVehicleClasses.hpp
Normal file
5
addons/respawn/CfgVehicleClasses.hpp
Normal file
@ -0,0 +1,5 @@
|
||||
class CfgVehicleClasses {
|
||||
class GVAR(Rallypoints) {
|
||||
displayName = "ACE Respawn";
|
||||
};
|
||||
};
|
206
addons/respawn/CfgVehicles.hpp
Normal file
206
addons/respawn/CfgVehicles.hpp
Normal file
@ -0,0 +1,206 @@
|
||||
class CfgVehicles {
|
||||
class Module_F;
|
||||
class ACE_ModuleRespawn : Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Respawn System";
|
||||
function = QFUNC(module);
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = QUOTE(PATHTOF(UI\IconSwitchUnits_ca.paa));
|
||||
class Arguments {
|
||||
class SavePreDeathGear {
|
||||
displayName = "Save Gear?";
|
||||
description = "Respawn with the gear a soldier had just before his death?";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { name = "Yes"; value = 1; };
|
||||
class No { default = 1; name = "No"; value = 0; };
|
||||
};
|
||||
};
|
||||
class RemoveDeadBodiesDisonncected {
|
||||
displayName = "Remove bodies?";
|
||||
description = "Remove player bodies after disconnect?";
|
||||
typeName = "BOOL";
|
||||
class values {
|
||||
class Yes { default = 1; name = "Yes"; value = 1; };
|
||||
class No { name = "No"; value = 0; };
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_ModuleFriendlyFire : Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Friendly Fire Messages";
|
||||
function = QFUNC(moduleFriendlyFire);
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = QUOTE(PATHTOF(UI\Icon_Module_FriendlyFire_ca.paa));
|
||||
class Arguments {
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_ModuleRallypoint : Module_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
category = "ACE";
|
||||
displayName = "Rallypoint System";
|
||||
function = QFUNC(moduleRallypoint);
|
||||
scope = 2;
|
||||
isGlobal = 1;
|
||||
icon = QUOTE(PATHTOF(UI\IconSwitchUnits_ca.paa));
|
||||
class Arguments {
|
||||
};
|
||||
};
|
||||
|
||||
// rallypoints
|
||||
class FlagCarrier;
|
||||
class Flag_NATO_F : FlagCarrier {
|
||||
class ACE_Actions;
|
||||
};
|
||||
|
||||
class Flag_CSAT_F : FlagCarrier {
|
||||
class ACE_Actions;
|
||||
};
|
||||
|
||||
class Flag_AAF_F : FlagCarrier {
|
||||
class ACE_Actions;
|
||||
};
|
||||
|
||||
// static
|
||||
class ACE_Rallypoint_West : Flag_NATO_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint West Base";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == west);
|
||||
statement = QUOTE([_player, side group _player, false] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_Rallypoint_East : Flag_CSAT_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint East Base";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == east);
|
||||
statement = QUOTE([_player, side group _player, false] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_Rallypoint_Independent : Flag_AAF_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint Independent Base";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Rallypoint";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == independent);
|
||||
statement = QUOTE([_player, side group _player, false] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// moveable
|
||||
class ACE_RallypointExit_West : Flag_NATO_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint West";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_nato_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == west);
|
||||
statement = QUOTE([_player, side group _player, true] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_RallypointExit_East : Flag_CSAT_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint East";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_CSAT_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == east);
|
||||
statement = QUOTE([_player, side group _player, true] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
class ACE_RallypointExit_Independent : Flag_AAF_F {
|
||||
author = "$STR_ACE_Common_ACETeam";
|
||||
displayName = "Rallypoint Independent";
|
||||
vehicleClass = QGVAR(Rallypoints);
|
||||
|
||||
class EventHandlers {
|
||||
init = QUOTE((_this select 0) setFlagTexture '\A3\Data_F\Flags\Flag_AAF_CO.paa'; _this call FUNC(initRallypoint));
|
||||
};
|
||||
class ACE_Actions : ACE_Actions {
|
||||
class ACE_Teleport {
|
||||
displayName = "Teleport to Base";
|
||||
distance = 4;
|
||||
condition = QUOTE(side group _player == independent);
|
||||
statement = QUOTE([_player, side group _player, true] call FUNC(teleportToRallypoint));
|
||||
showDisabled = 1;
|
||||
priority = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// team leader
|
||||
class Man;
|
||||
class CAManBase : Man {
|
||||
class ACE_SelfActions {
|
||||
class ACE_MoveRallypoint {
|
||||
displayName = "Move Rallypoint";
|
||||
condition = QUOTE([_player, side group _player] call FUNC(canMoveRallypoint));
|
||||
statement = QUOTE([_player, side group _player] call FUNC(moveRallypoint));
|
||||
showDisabled = 0;
|
||||
priority = -0.5;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
16
addons/respawn/XEH_preInit.sqf
Normal file
16
addons/respawn/XEH_preInit.sqf
Normal file
@ -0,0 +1,16 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
PREP(canMoveRallypoint);
|
||||
PREP(getAllGear);
|
||||
PREP(handleKilled);
|
||||
PREP(handleRespawn);
|
||||
PREP(initRallypoint);
|
||||
PREP(module);
|
||||
PREP(moduleFriendlyFire);
|
||||
PREP(moduleRallypoint);
|
||||
PREP(moveRallypoint);
|
||||
PREP(removeBody);
|
||||
PREP(removeDisconnectedPlayer);
|
||||
PREP(restoreGear);
|
||||
PREP(showFriendlyFireMessage);
|
||||
PREP(teleportToRallypoint);
|
25
addons/respawn/config.cpp
Normal file
25
addons/respawn/config.cpp
Normal file
@ -0,0 +1,25 @@
|
||||
#include "script_component.hpp"
|
||||
|
||||
class CfgPatches {
|
||||
class ADDON {
|
||||
units[] = {};
|
||||
weapons[] = { "ACE_Rallypoint_West", "ACE_Rallypoint_East", "ACE_Rallypoint_Independent", "ACE_RallypointExit_West", "ACE_RallypointExit_East", "ACE_RallypointExit_Independent" };
|
||||
requiredVersion = 0.60;
|
||||
requiredAddons[] = { "ace_common" };
|
||||
version = QUOTE(VERSION);
|
||||
versionStr = QUOTE(VERSION);
|
||||
versionAr[] = { VERSION_AR };
|
||||
author[] = { "bux578", "commy2" };
|
||||
authorUrl = "https://github.com/bux578/";
|
||||
};
|
||||
};
|
||||
|
||||
#include "CfgEventHandlers.hpp"
|
||||
#include "CfgAddons.hpp"
|
||||
#include "CfgVehicleClasses.hpp"
|
||||
#include "CfgVehicles.hpp"
|
||||
|
||||
class ACE_Parameters_Boolean {
|
||||
GVAR(SavePreDeathGear) = 0;
|
||||
GVAR(RemoveDeadBodiesDisconnected) = 1;
|
||||
};
|
33
addons/respawn/functions/fnc_canMoveRallypoint.sqf
Normal file
33
addons/respawn/functions/fnc_canMoveRallypoint.sqf
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_canMoveRallypoint
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
checks if a unit can move a rally point
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
1: OBJECT - side
|
||||
|
||||
Returns:
|
||||
BOOLEAN
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_side"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
|
||||
// rallypoint names are defined in CfgVehicles.hpp
|
||||
|
||||
_unit getVariable ["ACE_canMoveRallypoint", false]
|
||||
&& {!isNull ([
|
||||
objNull,
|
||||
missionNamespace getVariable ["ACE_Rallypoint_West", objNull],
|
||||
missionNamespace getVariable ["ACE_Rallypoint_East", objNull],
|
||||
missionNamespace getVariable ["ACE_Rallypoint_Independent", objNull]
|
||||
] select ([west, east, independent] find _side) + 1)}
|
45
addons/respawn/functions/fnc_getAllGear.sqf
Normal file
45
addons/respawn/functions/fnc_getAllGear.sqf
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_getAllGear
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
|
||||
Description:
|
||||
returns an array containing all items of a given unit
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
|
||||
Returns:
|
||||
ARRAY
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_allGear"];
|
||||
|
||||
_unit = _this select 0;
|
||||
|
||||
_allGear = [
|
||||
(headgear _unit),
|
||||
(goggles _unit),
|
||||
(uniform _unit),
|
||||
(uniformItems _unit),
|
||||
(vest _unit),
|
||||
(vestItems _unit),
|
||||
(backpack _unit),
|
||||
(backpackItems _unit),
|
||||
(primaryWeapon _unit),
|
||||
(primaryWeaponItems _unit),
|
||||
(primaryWeaponMagazine _unit),
|
||||
(secondaryWeapon _unit),
|
||||
(secondaryWeaponItems _unit),
|
||||
(secondaryWeaponMagazine _unit),
|
||||
(handgunWeapon _unit),
|
||||
(handgunItems _unit),
|
||||
(handgunMagazine _unit),
|
||||
(assignedItems _unit),
|
||||
(binocular _unit)
|
||||
];
|
||||
|
||||
_allGear
|
33
addons/respawn/functions/fnc_handleKilled.sqf
Normal file
33
addons/respawn/functions/fnc_handleKilled.sqf
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_handleKilled
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
|
||||
Description:
|
||||
Handles the XEH Killed event
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - Killed unit
|
||||
1: OBJECT - Attacker
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_killedUnit"];
|
||||
|
||||
_killedUnit = _this select 0;
|
||||
|
||||
// Saves the gear when the player is killed
|
||||
GVAR(unitGear) = [];
|
||||
|
||||
if (GVAR(SavePreDeathGear)) then {
|
||||
GVAR(unitGear) = [_killedUnit] call FUNC(getAllGear);
|
||||
};
|
||||
|
||||
if (missionNamespace getVariable [QGVAR(showFriendlyFireMessage), false]) then {
|
||||
[_this, FUNC(showFriendlyFireMessage), 2] call EFUNC(common,execRemoteFnc);
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Name: AGM_Respawn_fnc_handleRespawn
|
||||
Name: ACE_Respawn_fnc_handleRespawn
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
@ -15,11 +15,13 @@
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_respawnedUnit"];
|
||||
|
||||
_respawnedUnit = _this select 0;
|
||||
|
||||
// Restores the gear when the player respawns
|
||||
if (AGM_Respawn_SavePreDeathGear) then {
|
||||
[_respawnedUnit, AGM_Respawn_unitGear] call AGM_Respawn_fnc_restoreGear;
|
||||
if (GVAR(SavePreDeathGear)) then {
|
||||
[_respawnedUnit, GVAR(unitGear)] call FUNC(restoreGear);
|
||||
};
|
33
addons/respawn/functions/fnc_initRallypoint.sqf
Normal file
33
addons/respawn/functions/fnc_initRallypoint.sqf
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_initRallypoint
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
init code for rally points
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - rally
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_rallypoint", "_name"];
|
||||
|
||||
_rallypoint = _this select 0;
|
||||
|
||||
if (!local _rallypoint) exitWith {};
|
||||
|
||||
_name = typeOf _rallypoint;
|
||||
|
||||
if (isNil _name) then {
|
||||
missionNamespace setVariable [_name, _rallypoint];
|
||||
publicVariable _name;
|
||||
} else {
|
||||
deleteVehicle _rallypoint;
|
||||
diag_log text "[ACE] Respawn: ERROR Multiple Rallypoints of same type.";
|
||||
};
|
52
addons/respawn/functions/fnc_module.sqf
Normal file
52
addons/respawn/functions/fnc_module.sqf
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_module
|
||||
|
||||
Author(s):
|
||||
KoffeinFlummi, bux578, CAA-Picard, commy2
|
||||
|
||||
Description:
|
||||
initializes the respawn module
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - logic
|
||||
1: ARRAY<OBJECT> - synced units
|
||||
2: BOOLEAN - activated
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
if !(isServer) exitWith {};
|
||||
|
||||
_logic = _this select 0;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
GVAR(Module) = true;
|
||||
|
||||
[_logic, QGVAR(SavePreDeathGear), "SavePreDeathGear"] call EFUNC(common,readBooleanParameterFromModule);
|
||||
[_logic, QGVAR(RemoveDeadBodiesDisconnected), "RemoveDeadBodiesDisconnected"] call EFUNC(common,readBooleanParameterFromModule);
|
||||
|
||||
if (isServer) then {
|
||||
if (GVAR(RemoveDeadBodiesDisconnected)) then {
|
||||
_fnc_deleteDisconnected = {
|
||||
_this spawn {
|
||||
_unit = _this select 0;
|
||||
|
||||
sleep 4;
|
||||
|
||||
if (!alive _unit) then {
|
||||
deleteVehicle _unit;
|
||||
};
|
||||
};
|
||||
false
|
||||
};
|
||||
|
||||
addMissionEventHandler ["HandleDisconnect", _fnc_deleteDisconnected];
|
||||
};
|
||||
};
|
||||
|
||||
diag_log text "[ACE]: Respawn Module Initialized.";
|
36
addons/respawn/functions/fnc_moduleFriendlyFire.sqf
Normal file
36
addons/respawn/functions/fnc_moduleFriendlyFire.sqf
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_moduleFriendlyFire
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
initializes the Friendly Fire Messages module
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - logic
|
||||
1: ARRAY<OBJECT> - synced units
|
||||
2: BOOLEAN - activated
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_this spawn {
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
if (isServer) then {
|
||||
_varName = QGVAR(showFriendlyFireMessage);
|
||||
|
||||
missionNamespace setVariable [_varName, true];
|
||||
publicVariable _varName;
|
||||
};
|
||||
|
||||
diag_log text "[ACE]: Friendly Fire Messages Module Initialized.";
|
||||
};
|
31
addons/respawn/functions/fnc_moduleRallypoint.sqf
Normal file
31
addons/respawn/functions/fnc_moduleRallypoint.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_moduleRallypoint
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
initializes the Rallypoint module
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - logic
|
||||
1: ARRAY<OBJECT> - synced units
|
||||
2: BOOLEAN - activated
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_logic = _this select 0;
|
||||
_units = _this select 1;
|
||||
_activated = _this select 2;
|
||||
|
||||
if !(_activated) exitWith {};
|
||||
|
||||
{
|
||||
_x setVariable ["ACE_canMoveRallypoint", true];
|
||||
} forEach _units;
|
||||
|
||||
diag_log text "[ACE]: Rallypoint Module Initialized.";
|
54
addons/respawn/functions/fnc_moveRallypoint.sqf
Normal file
54
addons/respawn/functions/fnc_moveRallypoint.sqf
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_moveRallypoint
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
Moves a rallypoint to the player's location
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
1: OBJECT - side
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
_this spawn {
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
|
||||
// rallypoint names are defined in CfgVehicles.hpp
|
||||
|
||||
_rallypoint = [
|
||||
objNull,
|
||||
missionNamespace getVariable ["ACE_Rallypoint_West", objNull],
|
||||
missionNamespace getVariable ["ACE_RallypointExit_East", objNull],
|
||||
missionNamespace getVariable ["ACE_RallypointExit_Independent", objNull]
|
||||
] select ([west, east, independent] find _side) + 1;
|
||||
|
||||
if (isNull _rallypoint) exitWith {};
|
||||
|
||||
_position = getPosATL _unit;
|
||||
_position = _position findEmptyPosition [0, 2, typeOf _rallypoint];
|
||||
if (count _position == 0) then {_position = getPosATL _unit};
|
||||
|
||||
_position set [2, 0];
|
||||
|
||||
[localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured);
|
||||
|
||||
sleep 5;
|
||||
_rallypoint setPosATL _position;
|
||||
_unit reveal _rallypoint;
|
||||
|
||||
/*
|
||||
_marker = format ["AGM_RallyPoint_%1", _side];
|
||||
_marker setMarkerPos _position;
|
||||
_marker setMarkerTextLocal format ["%1:%2", [date select 3, 2, 0] call CBA_fnc_FORMATNumber, [date select 4, 2, 0] call CBA_fnc_FORMATNumber];
|
||||
*/
|
||||
|
||||
[localize "STR_ACE_Respawn_Deploy"] call EFUNC(common,displayTextStructured);
|
||||
};
|
37
addons/respawn/functions/fnc_removeBody.sqf
Normal file
37
addons/respawn/functions/fnc_removeBody.sqf
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_removeBody
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
|
||||
Description:
|
||||
removes a given body
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - body
|
||||
1: BOOLEAN - forceRemove // not used atm
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_body", "_forceRemove", "_bodyRemoveTimer"];
|
||||
|
||||
_body = _this select 0;
|
||||
_forceRemove = _this select 1;
|
||||
|
||||
_bodyRemoveTimer = GVAR(BodyRemoveTimer) max 0;
|
||||
|
||||
// could be used for SpecOps missions.
|
||||
if (_forceRemove) then {
|
||||
_bodyRemoveTimer = 2;
|
||||
};
|
||||
|
||||
[_body, _bodyRemoveTimer] spawn {
|
||||
sleep (_this select 1);
|
||||
// hideBody takes ~20s till body is fully underground
|
||||
// a better hideBody would make this more aesthetic
|
||||
deleteVehicle (_this select 0);
|
||||
};
|
31
addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf
Normal file
31
addons/respawn/functions/fnc_removeDisconnectedPlayer.sqf
Normal file
@ -0,0 +1,31 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_removeDisconnectedPlayer
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
handles the disconnected event
|
||||
|
||||
Parameters:
|
||||
0: BOOLEAN - forceRemove // not used atm
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_forceRemove", "_body"];
|
||||
|
||||
_forceRemove = _this select 0;
|
||||
|
||||
{
|
||||
if (getPlayerUID _x == _uid) exitWith {
|
||||
_body = _x;
|
||||
};
|
||||
} forEach playableUnits;
|
||||
|
||||
if (!isNil "_body" && {!alive _body}) then {
|
||||
[_body, _forceRemove] call FUNC(removeBody);
|
||||
};
|
@ -1,16 +1,22 @@
|
||||
/*
|
||||
Author: bux578
|
||||
|
||||
Description:
|
||||
Restores previously saved gear
|
||||
|
||||
Arguments:
|
||||
A player object, an array containing all gear
|
||||
|
||||
Return value:
|
||||
An array containing all inventory items
|
||||
Name: ACE_Respawn_fnc_removeBody
|
||||
|
||||
Author(s):
|
||||
bux578
|
||||
|
||||
Description:
|
||||
Restores previously saved gear
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
1: ARRAY<STRING> - Array containing all gear
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_allGear", "_headgear", "_goggles", "_uniform", "_uniformitems", "_vest", "_vestitems", "_backpack", "_backpackitems", "_primaryweapon", "_primaryweaponitems", "_primaryweaponmagazine", "_handgunweapon", "_handgunweaponitems", "_handgunweaponmagazine", "_assigneditems", "_binocular"];
|
||||
|
||||
|
||||
@ -50,85 +56,85 @@ _binocular = _allGear select 18;
|
||||
|
||||
// start restoring the items
|
||||
if (_headgear != "") then {
|
||||
_unit addHeadgear _headgear;
|
||||
_unit addHeadgear _headgear;
|
||||
};
|
||||
if (_uniform != "") then {
|
||||
_unit forceAddUniform _uniform;
|
||||
_unit forceAddUniform _uniform;
|
||||
};
|
||||
if (_vest != "") then {
|
||||
_unit addVest _vest;
|
||||
_unit addVest _vest;
|
||||
};
|
||||
if (_goggles != "") then {
|
||||
_unit addGoggles _goggles;
|
||||
_unit addGoggles _goggles;
|
||||
};
|
||||
|
||||
{
|
||||
_unit addItemToUniform _x;
|
||||
_unit addItemToUniform _x;
|
||||
}forEach _uniformitems;
|
||||
|
||||
{
|
||||
_unit addItemToVest _x;
|
||||
_unit addItemToVest _x;
|
||||
}forEach _vestitems;
|
||||
|
||||
|
||||
if(format["%1", _backpack] != "") then {
|
||||
_unit addBackpack _backpack;
|
||||
_unit addBackpack _backpack;
|
||||
|
||||
_backpa = unitBackpack _unit;
|
||||
clearMagazineCargoGlobal _backpa;
|
||||
clearWeaponCargoGlobal _backpa;
|
||||
clearItemCargoGlobal _backpa;
|
||||
{
|
||||
_unit addItemToBackpack _x;
|
||||
} forEach _backpackitems;
|
||||
_backpa = unitBackpack _unit;
|
||||
clearMagazineCargoGlobal _backpa;
|
||||
clearWeaponCargoGlobal _backpa;
|
||||
clearItemCargoGlobal _backpa;
|
||||
{
|
||||
_unit addItemToBackpack _x;
|
||||
} forEach _backpackitems;
|
||||
};
|
||||
|
||||
|
||||
// primaryWeapon
|
||||
if (_primaryweapon != "") then {
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _primaryweaponmagazine;
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _primaryweaponmagazine;
|
||||
|
||||
_unit addWeapon _primaryweapon;
|
||||
_unit addWeapon _primaryweapon;
|
||||
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addPrimaryWeaponItem _x;
|
||||
};
|
||||
} forEach _primaryweaponitems;
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addPrimaryWeaponItem _x;
|
||||
};
|
||||
} forEach _primaryweaponitems;
|
||||
};
|
||||
|
||||
|
||||
// secondaryWeapon
|
||||
if (_secondaryweapon != "") then {
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _secondaryweaponmagazine;
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _secondaryweaponmagazine;
|
||||
|
||||
_unit addWeapon _secondaryweapon;
|
||||
_unit addWeapon _secondaryweapon;
|
||||
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addSecondaryWeaponItem _x;
|
||||
};
|
||||
} forEach _secondaryweaponitems;
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addSecondaryWeaponItem _x;
|
||||
};
|
||||
} forEach _secondaryweaponitems;
|
||||
};
|
||||
|
||||
|
||||
// handgun
|
||||
if (_handgunweapon != "") then {
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _handgunweaponmagazine;
|
||||
{
|
||||
_unit addMagazine _x;
|
||||
} forEach _handgunweaponmagazine;
|
||||
|
||||
_unit addWeapon _handgunweapon;
|
||||
_unit addWeapon _handgunweapon;
|
||||
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addHandgunItem _x;
|
||||
};
|
||||
} forEach _handgunweaponitems;
|
||||
{
|
||||
if (_x != "") then {
|
||||
_unit addHandgunItem _x;
|
||||
};
|
||||
} forEach _handgunweaponitems;
|
||||
};
|
||||
|
||||
|
||||
@ -140,6 +146,6 @@ _assignedItems = _assignedItems - [_binocular];
|
||||
_unit addWeapon _binocular;
|
||||
|
||||
if ("Laserdesignator" in assignedItems _unit) then {
|
||||
_unit selectWeapon "Laserdesignator";
|
||||
if (currentMagazine _unit == "") then {_unit addMagazine "Laserbatteries";};
|
||||
_unit selectWeapon "Laserdesignator";
|
||||
if (currentMagazine _unit == "") then {_unit addMagazine "Laserbatteries";};
|
||||
};
|
29
addons/respawn/functions/fnc_showFriendlyFireMessage.sqf
Normal file
29
addons/respawn/functions/fnc_showFriendlyFireMessage.sqf
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_showFriendlyFireMessages
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
shows a message in system chat of who killed who
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
1: OBJECT - killer
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_killer"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_killer = _this select 1;
|
||||
|
||||
if (_unit != _killer && side group _unit in [side group ACE_player, civilian] && {side group _killer == side group ACE_player}) then {
|
||||
systemChat format ["%1 was killed by %2", [_unit] call EFUNC(common,getName), [_killer] call EFUNC(common,getName)];
|
||||
|
||||
[_unit, "killedByFriendly", [_unit, _killer]] call EFUNC(common,callCustomEventHandlers);
|
||||
};
|
47
addons/respawn/functions/fnc_teleportToRallypoint.sqf
Normal file
47
addons/respawn/functions/fnc_teleportToRallypoint.sqf
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
Name: ACE_Respawn_fnc_teleportToRallypoint
|
||||
|
||||
Author(s):
|
||||
commy2
|
||||
|
||||
Description:
|
||||
teleports a unit to a rallypoint
|
||||
|
||||
Parameters:
|
||||
0: OBJECT - unit
|
||||
1: OBJECT - side
|
||||
2: BOOLEAN - teleport to base
|
||||
|
||||
Returns:
|
||||
VOID
|
||||
*/
|
||||
|
||||
#include "script_component.hpp"
|
||||
|
||||
private ["_unit", "_side", "_toBase", "_rallypoint"];
|
||||
|
||||
_unit = _this select 0;
|
||||
_side = _this select 1;
|
||||
_toBase = _this select 2;
|
||||
|
||||
// rallypoint names are defined in CfgVehicles.hpp
|
||||
|
||||
_rallypoint = ([
|
||||
[
|
||||
objNull,
|
||||
missionNamespace getVariable ["ACE_RallypointExit_West", objNull],
|
||||
missionNamespace getVariable ["ACE_RallypointExit_East", objNull],
|
||||
missionNamespace getVariable ["ACE_RallypointExit_Independent", objNull]
|
||||
],
|
||||
[
|
||||
objNull,
|
||||
missionNamespace getVariable ["ACE_Rallypoint_West", objNull],
|
||||
missionNamespace getVariable ["ACE_Rallypoint_East", objNull],
|
||||
missionNamespace getVariable ["ACE_Rallypoint_Independent", objNull]
|
||||
]
|
||||
] select _toBase) select ([west, east, independent] find _side) + 1;
|
||||
|
||||
if (isNull _rallypoint) exitWith {};
|
||||
|
||||
_unit setPosASL (getPosASL _rallypoint);
|
||||
[[localize "STR_ACE_Respawn_TeleportedToRallypoint", localize "STR_ACE_Respawn_TeleportedToBase"] select _toBase] call EFUNC(common,displayTextStructured);
|
1
addons/respawn/functions/script_component.hpp
Normal file
1
addons/respawn/functions/script_component.hpp
Normal file
@ -0,0 +1 @@
|
||||
#include "\z\ace\addons\respawn\script_component.hpp"
|
12
addons/respawn/script_component.hpp
Normal file
12
addons/respawn/script_component.hpp
Normal file
@ -0,0 +1,12 @@
|
||||
#define COMPONENT respawn
|
||||
#include "\z\ace\addons\main\script_mod.hpp"
|
||||
|
||||
#ifdef DEBUG_ENABLED_RESPAWN
|
||||
#define DEBUG_MODE_FULL
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SETTINGS_RESPAWN
|
||||
#define DEBUG_SETTINGS DEBUG_SETTINGS_RESPAWN
|
||||
#endif
|
||||
|
||||
#include "\z\ace\addons\main\script_macros.hpp"
|
21
addons/respawn/stringtable.xml
Normal file
21
addons/respawn/stringtable.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project name="ACE">
|
||||
<Package name="Interaction">
|
||||
<Key ID="STR_ACE_Respawn_Deploy">
|
||||
<English>Deploy in 5 seconds ...</English>
|
||||
<German>Wird in 5 Sekunden errichtet ...</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Respawn_Deployed">
|
||||
<English>Rallypoint deployed</English>
|
||||
<German>Rallypoint errichtet</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Respawn_TeleportedToBase">
|
||||
<English>Teleported to Base</English>
|
||||
<German>Zur Basis teleportiert</German>
|
||||
</Key>
|
||||
<Key ID="STR_ACE_Respawn_TeleportedToRallypoint">
|
||||
<English>Teleported to Rallypoint</English>
|
||||
<German>Zum Rallypoint teleportiert</German>
|
||||
</Key>
|
||||
</Package>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user