Difference between revisions of "Script Snippets"

From ALiVE Wiki
Jump to: navigation, search
Line 1: Line 1:
 
=== Spawn Group Script By Jman ===
 
=== Spawn Group Script By Jman ===
  
/*
+
 
* Filename:
+
Filename:
* fnc_spawnProfileGroup.sqf  
+
fnc_spawnProfileGroup.sqf  
*
+
 
* Locality:
+
Locality: Runs on server
* Runs on server
+
 
*
+
Description: Spawns a group faction and sends them to a waypoint.
* Description:
+
 
* Spawns a group faction and sends them to a waypoint.
+
Params:
*
+
* Params:
+
 
* _spawnPosition  -> Array. Position to spawn group
 
* _spawnPosition  -> Array. Position to spawn group
 
* _spawnExactLocation -> Boolean. Set to false if you want to spawn it in an exact position.
 
* _spawnExactLocation -> Boolean. Set to false if you want to spawn it in an exact position.
Line 18: Line 16:
 
* _faction -> String. CfgGroups faction
 
* _faction -> String. CfgGroups faction
 
   
 
   
* Optional Params:
+
Optional Params:
 
* _debug -> Boolean. Enable debug output
 
* _debug -> Boolean. Enable debug output
 
* _waypointPlacementRadius -> Scalar. Random placement radius. http://community.bistudio.com/wiki/Mission_Editor:_Waypoints#Placement_Radius
 
* _waypointPlacementRadius -> Scalar. Random placement radius. http://community.bistudio.com/wiki/Mission_Editor:_Waypoints#Placement_Radius
Line 30: Line 28:
 
* _waypointDescription -> String. Description. http://community.bistudio.com/wiki/Mission_Editor:_Waypoints#Description
 
* _waypointDescription -> String. Description. http://community.bistudio.com/wiki/Mission_Editor:_Waypoints#Description
 
*  
 
*  
*
+
 
* Usage:
+
Usage:
*
+
 
* init.sqf:
+
init.sqf:
 
* ALIVE_spawnProfileGroup = compile (preprocessFileLineNumbers "fnc_spawnProfileGroup.sqf");
 
* ALIVE_spawnProfileGroup = compile (preprocessFileLineNumbers "fnc_spawnProfileGroup.sqf");
*
+
 
* Create a trigger or call in script:
+
Create a trigger or call in script:
*
+
 
* Syntax:
+
Syntax: [array, boolean, array, string, string, boolean, scalar, string, string, scalar, array, string, string, string, string] call ALIVE_spawnProfileGroup;
* [array, boolean, array, string, string, boolean, scalar, string, string, scalar, array, string, string, string, string] call ALIVE_spawnProfileGroup;
+
 
*
+
Example(s):
* Example(s):
+
 
* [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me"] call ALIVE_spawnProfileGroup;
 
* [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me"] call ALIVE_spawnProfileGroup;
* [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me",  
+
* [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me", true, 0, "Move", "Full", 0, [0,0,0], "Delta", "Open Fire, Engage At Will", "Aware", ""] call ALIVE_spawnProfileGroup;
  true, 0, "Move", "Full", 0, [0,0,0], "Delta", "Open Fire, Engage At Will", "Aware", ""] call ALIVE_spawnProfileGroup;
+
 
*
+
Credits: ALiVE functions: The ALiVE team. Web: http://www.alivemod.com
* Credits: ALiVE functions: The ALiVE team. Web: http://www.alivemod.com
+
 
* Script Created by [KH]Jman
 
* Script Created by [KH]Jman
 
* Creation date: 06/02/2014
 
* Creation date: 06/02/2014
  
 
* Web: http://www.kellys-heroes.eu
 
* Web: http://www.kellys-heroes.eu
*
+
<code>
*
+
* */
+
 
// ====================================================================================
 
// ====================================================================================
 
if (!isServer) exitWith {};
 
if (!isServer) exitWith {};
Line 138: Line 132:
 
] call ALiVE_fnc_OPCOM;
 
] call ALiVE_fnc_OPCOM;
 
} foreach OPCOM_INSTANCES;
 
} foreach OPCOM_INSTANCES;
};
+
};</code>
  
 
Example:
 
Example:
Line 145: Line 139:
 
=== Wait for Player Persistence to Initialise ===
 
=== Wait for Player Persistence to Initialise ===
  
//Will wait until the persistent data of a player has been loaded (place in init.sqf f.e.)
+
<code>//Will wait until the persistent data of a player has been loaded (place in init.sqf f.e.)
waituntil {(player getvariable ["alive_sys_player_playerloaded",false])};
+
waituntil {(player getvariable ["alive_sys_player_playerloaded",false])};</code>
  
 
Example:
 
Example:
Line 153: Line 147:
 
=== Adding Custom Inits to Spawned Units ===
 
=== Adding Custom Inits to Spawned Units ===
  
//The following is one method for adding custom gear to every spawned unit or object of that class.  This will work for units spawned with MP/MCP, the Profiles system and any other spawning method.
+
The following is one method for adding custom gear to every spawned unit or object of that class.  This will work for units spawned with MP/MCP, the Profiles system and any other spawning method.
  
//'''HEALTH WARNING:'''  you will need to know the basics of scripting to setup the gear script so it only applies to AI (and not players) or specific factions.  Place the following in ''description.ext'' and create ''my_code.sqf'' with whatever code you want to add to the spawned units.
+
'''HEALTH WARNING:'''  you will need to know the basics of scripting to setup the gear script so it only applies to AI (and not players) or specific factions.  Place the following in ''description.ext'' and create ''my_code.sqf'' with whatever code you want to add to the spawned units.
  
 +
<code>
 
class Extended_Init_EventHandlers {
 
class Extended_Init_EventHandlers {
 
  class '''Man''' {
 
  class '''Man''' {
Line 162: Line 157:
 
  };
 
  };
 
};
 
};
 +
</code>

Revision as of 13:46, 7 April 2014

Spawn Group Script By Jman

Filename: fnc_spawnProfileGroup.sqf

Locality: Runs on server

Description: Spawns a group faction and sends them to a waypoint.

Params:

  • _spawnPosition -> Array. Position to spawn group
  • _spawnExactLocation -> Boolean. Set to false if you want to spawn it in an exact position.
  • _destinationPosition -> Array. Position of waypoint destination.
  • _group -> String. CfgGroups name
  • _faction -> String. CfgGroups faction

Optional Params:

Usage:

init.sqf:

  • ALIVE_spawnProfileGroup = compile (preprocessFileLineNumbers "fnc_spawnProfileGroup.sqf");

Create a trigger or call in script:

Syntax: [array, boolean, array, string, string, boolean, scalar, string, string, scalar, array, string, string, string, string] call ALIVE_spawnProfileGroup;

Example(s):

  • [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me"] call ALIVE_spawnProfileGroup;
  • [getMarkerPos "nmeGrp01_spawn_pos", false, getMarkerPos "nmeGrp01_dest_pos", "10_men_ME", "caf_ag_me", true, 0, "Move", "Full", 0, [0,0,0], "Delta", "Open Fire, Engage At Will", "Aware", ""] call ALIVE_spawnProfileGroup;

Credits: ALiVE functions: The ALiVE team. Web: http://www.alivemod.com

// ==================================================================================== if (!isServer) exitWith {}; // ====================================================================================

// SCOPE ------------------------------------------------------------------------------------- private["_spawnposition","_spawnExactLocation","_destinationPosition","_faction","_profile","_profiles","_profileWaypoint","_group","_debug", "_waypointPlacementRadius","_waypointType","_waypointMovement","_waypointCompletionRadius","_waypointTimeoutCounters","_waypointFormation", "_waypointCombatMode","_waypointBehaviour","_waypointDescription","_groupName", "_groupName","_config"]; _config = []; // SCOPE -------------------------------------------------------------------------------------

waitUntil {!isNil "ALIVE_profileSystemInit"};

// PARMS ------------------------------------------------------------------------------------- _spawnPosition = _this select 0; _spawnExactLocation = _this select 1; _destinationPosition = _this select 2; _group = _this select 3; _faction = _this select 4; _debug = if(count _this > 5) then {_this select 5} else {false}; _waypointPlacementRadius = if(count _this > 6) then {_this select 6} else {0}; _waypointType = if(count _this > 7) then {_this select 7} else {"Move"}; _waypointMovement = if(count _this > 8) then {_this select 8} else {"Full"}; _waypointCompletionRadius = if(count _this > 9) then {_this select 9} else {0}; _waypointTimeoutCounters = if(count _this > 10) then {_this select 10} else {[0,0,0]}; _waypointFormation = if(count _this > 11) then {_this select 11} else {"Delta"}; _waypointCombatMode = if(count _this > 12) then {_this select 12} else {"Open Fire, Engage At Will"}; _waypointBehaviour = if(count _this > 13) then {_this select 13} else {"Aware"}; _waypointDescription = if(count _this > 14) then {_this select 14} else {""}; // PARMS -------------------------------------------------------------------------------------

// DEBUG ------------------------------------------------------------------------------------- if(_debug) then {

["ALIVE_spawnProfileGroup -> _spawnPosition: %1, _spawnExactLocation: %2, _destinationPosition: %3, _group: %4, _faction: %5, 
_debug: %6, _waypointPlacementRadius: %7, _waypointType: %8, _waypointMovement: %9, _waypointCompletionRadius: %10, 
_waypointTimeoutCounters: %11, _waypointFormation: %12, _waypointCombatMode: %13, _waypointBehaviour: %14, 
_waypointDescription: %15,", _spawnPosition,_spawnExactLocation,_destinationPosition,_group,_faction,_debug,_waypointPlacementRadius,
_waypointType,_waypointMovement,_waypointCompletionRadius,_waypointTimeoutCounters,_waypointFormation,_waypointCombatMode,
_waypointBehaviour,_waypointDescription] call ALIVE_fnc_dump;

}; // DEBUG -------------------------------------------------------------------------------------

// MAIN ------------------------------------------------------------------------------------- _profiles = [_group, _spawnposition, random(360), _spawnExactLocation, _faction] call ALIVE_fnc_createProfilesFromGroupConfig;


if(_debug) then { ["ALIVE_spawnProfileGroup -> _groupData: %1, _config: %2, _groupName: %3", _groupData, _config, _groupName] call ALIVE_fnc_dump; }; _profileWaypoint = [_destinationPosition, _waypointPlacementRadius, _waypointType, _waypointMovement, _waypointCompletionRadius,

_waypointTimeoutCounters,_waypointFormation, _waypointCombatMode, _waypointBehaviour, _waypointDescription] call ALIVE_fnc_createProfileWaypoint;

{ _profile = _x;_profileType = _profile select 2 select 5;

if(_profileType == "entity") then {[_profile, "addWaypoint", _profileWaypoint] call ALIVE_fnc_profileEntity;};

} forEach _profiles;

// MAIN -------------------------------------------------------------------------------------

// ====================================================================================

Detect Virtual Units (Profiles) in a Trigger Area

//Will be true if there are virtualized AI groups of side EAST (string) within 50 mtrs of the triggers position EAST (string) ((count ([getposATL thisTrigger, 50, ["EAST","entity"]] call ALIVE_fnc_getNearProfiles)) > 0);

//Will be true if there are virtualized vehicles of side EAST (string) within 500 mtrs of trigger position EAST (string) ((count ([getposATL thisTrigger, 500, ["EAST","vehicle"]] call ALIVE_fnc_getNearProfiles)) > 0);

Example: Place this line of code in the condition field of an end mission (f.e. lose) trigger, optionally with timeout. It will fire when there are virtualized groups in the selected area (for a certain amount of time). It doesnt matter if they are spawned or not.

Add a Custom OPCOM Objective

//will register a position as an objective to all OPCOMs in the current mission if (isServer) then { { [_x,"addObjective", [ str(time), //ID (string) getposATL thisTrigger, //position 100, //size "MIL" //type ] ] call ALiVE_fnc_OPCOM; } foreach OPCOM_INSTANCES; };

Example: Place these lines of code (without the comments) in the on activation field of a "detected by..."-trigger (500mtrs radius). As the trigger fires your base will be registered to all OPCOMs, who will then send troops there (either to attack or defend). You can use these in combination with triggers and tasks. For example if you are detected by a trigger within a certain radius of your base, your base will be registered to OPCOM! OPCOMs will send their troops there and if you don't manage to defend your base the mission will fail.

Wait for Player Persistence to Initialise

//Will wait until the persistent data of a player has been loaded (place in init.sqf f.e.) waituntil {(player getvariable ["alive_sys_player_playerloaded",false])};

Example: Use this in init.sqf if you have a player-depended scripts and use "player persistence";

Adding Custom Inits to Spawned Units

The following is one method for adding custom gear to every spawned unit or object of that class. This will work for units spawned with MP/MCP, the Profiles system and any other spawning method.

HEALTH WARNING: you will need to know the basics of scripting to setup the gear script so it only applies to AI (and not players) or specific factions. Place the following in description.ext and create my_code.sqf with whatever code you want to add to the spawned units.

class Extended_Init_EventHandlers {

class Man {
 MyCode_init="_this call compile preprocessFileLineNumbers 'my_code_file.sqf'";
};

};