5fa1bc18fd
Basically, a basic simulation manager is implemented and parseSimpleArray exhanged from call compile so database is faster. For issues PM me on discord or Exile forums.
153 lines
5.2 KiB
Plaintext
153 lines
5.2 KiB
Plaintext
/**
|
|
* ExileServer_object_player_createBambi
|
|
*
|
|
* 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["_sessionID","_requestingPlayer","_spawnLocationMarkerName","_bambiPlayer","_accountData","_direction","_position","_spawnAreaPosition","_spawnAreaRadius","_clanID","_clanData","_clanGroup","_player","_devFriendlyMode","_devs","_parachuteNetID","_spawnType","_parachuteObject"];
|
|
_sessionID = _this select 0;
|
|
_requestingPlayer = _this select 1;
|
|
_spawnLocationMarkerName = _this select 2;
|
|
_bambiPlayer = _this select 3;
|
|
_accountData = _this select 4;
|
|
_direction = random 360;
|
|
if ((count ExileSpawnZoneMarkerPositions) isEqualTo 0) then
|
|
{
|
|
_position = call ExileClient_util_world_findCoastPosition;
|
|
if ((toLower worldName) isEqualTo "namalsk") then
|
|
{
|
|
while {(_position distance2D [76.4239, 107.141, 0]) < 100} do
|
|
{
|
|
_position = call ExileClient_util_world_findCoastPosition;
|
|
};
|
|
};
|
|
}
|
|
else
|
|
{
|
|
_spawnAreaPosition = getMarkerPos _spawnLocationMarkerName;
|
|
_spawnAreaRadius = getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "spawnZoneRadius");
|
|
_position = [_spawnAreaPosition, _spawnAreaRadius] call ExileClient_util_math_getRandomPositionInCircle;
|
|
while {surfaceIsWater _position} do
|
|
{
|
|
_position = [_spawnAreaPosition, _spawnAreaRadius] call ExileClient_util_math_getRandomPositionInCircle;
|
|
};
|
|
};
|
|
_name = name _requestingPlayer;
|
|
_clanID = (_accountData select 3);
|
|
if !((typeName _clanID) isEqualTo "SCALAR") then
|
|
{
|
|
_clanID = -1;
|
|
_clanData = [];
|
|
}
|
|
else
|
|
{
|
|
_clanData = missionNamespace getVariable [format ["ExileServer_clan_%1",_clanID],[]];
|
|
if(isNull (_clanData select 5))then
|
|
{
|
|
_clanGroup = createGroup independent;
|
|
_clanData set [5,_clanGroup];
|
|
_clanGroup setGroupIdGlobal [_clanData select 0];
|
|
missionNameSpace setVariable [format ["ExileServer_clan_%1",_clanID],_clanData];
|
|
}
|
|
else
|
|
{
|
|
_clanGroup = (_clanData select 5);
|
|
};
|
|
[_player] joinSilent _clanGroup;
|
|
};
|
|
_bambiPlayer setPosATL [_position select 0,_position select 1,0];
|
|
_bambiPlayer disableAI "FSM";
|
|
_bambiPlayer disableAI "MOVE";
|
|
_bambiPlayer disableAI "AUTOTARGET";
|
|
_bambiPlayer disableAI "TARGET";
|
|
_bambiPlayer disableAI "CHECKVISIBLE";
|
|
_bambiPlayer setDir _direction;
|
|
_bambiPlayer setName _name;
|
|
_bambiPlayer setVariable ["ExileMoney", 0, true];
|
|
_bambiPlayer setVariable ["ExileScore", (_accountData select 0)];
|
|
_bambiPlayer setVariable ["ExileKills", (_accountData select 1)];
|
|
_bambiPlayer setVariable ["ExileDeaths", (_accountData select 2)];
|
|
_bambiPlayer setVariable ["ExileClanID", _clanID];
|
|
_bambiPlayer setVariable ["ExileClanData", _clanData];
|
|
_bambiPlayer setVariable ["ExileHunger", 100];
|
|
_bambiPlayer setVariable ["ExileThirst", 100];
|
|
_bambiPlayer setVariable ["ExileTemperature", 37];
|
|
_bambiPlayer setVariable ["ExileWetness", 0];
|
|
_bambiPlayer setVariable ["ExileAlcohol", 0];
|
|
_bambiPlayer setVariable ["ExileName", _name];
|
|
_bambiPlayer setVariable ["ExileOwnerUID", getPlayerUID _requestingPlayer];
|
|
_bambiPlayer setVariable ["ExileIsBambi", true];
|
|
_bambiPlayer setVariable ["ExileXM8IsOnline", false, true];
|
|
_bambiPlayer setVariable ["ExileLocker", (_accountData select 4), true];
|
|
_devFriendlyMode = getNumber (configFile >> "CfgSettings" >> "ServerSettings" >> "devFriendyMode");
|
|
if (_devFriendlyMode isEqualTo 1) then
|
|
{
|
|
_devs = getArray (configFile >> "CfgSettings" >> "ServerSettings" >> "devs");
|
|
{
|
|
if ((getPlayerUID _requestingPlayer) isEqualTo (_x select 0))exitWith
|
|
{
|
|
if((name _requestingPlayer) isEqualTo (_x select 1))then
|
|
{
|
|
_bambiPlayer setVariable ["ExileMoney", 500000, true];
|
|
_bambiPlayer setVariable ["ExileScore", 100000];
|
|
};
|
|
};
|
|
}
|
|
forEach _devs;
|
|
};
|
|
_parachuteNetID = "";
|
|
if ((getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "parachuteSpawning")) isEqualTo 1) then
|
|
{
|
|
_position set [2, getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "parachuteDropHeight")];
|
|
if ((getNumber(configFile >> "CfgSettings" >> "BambiSettings" >> "haloJump")) isEqualTo 1) then
|
|
{
|
|
_bambiPlayer addBackpackGlobal "B_Parachute";
|
|
_bambiPlayer setPosATL _position;
|
|
_spawnType = 2;
|
|
}
|
|
else
|
|
{
|
|
_parachuteObject = createVehicle ["Steerable_Parachute_F", _position, [], 0, "CAN_COLLIDE"];
|
|
_parachuteObject setDir _direction;
|
|
_parachuteObject setPosATL _position;
|
|
_parachuteObject enableSimulationGlobal true;
|
|
_parachuteNetID = netId _parachuteObject;
|
|
_spawnType = 1;
|
|
};
|
|
}
|
|
else
|
|
{
|
|
_spawnType = 0;
|
|
};
|
|
if((canTriggerDynamicSimulation _player) isEqualTo false) then
|
|
{
|
|
_player triggerDynamicSimulation true;
|
|
};
|
|
_bambiPlayer addMPEventHandler ["MPKilled", {_this call ExileServer_object_player_event_onMpKilled}];
|
|
_bambiPlayer call ExileServer_object_player_database_insert;
|
|
_bambiPlayer call ExileServer_object_player_database_update;
|
|
[
|
|
_sessionID,
|
|
"createPlayerResponse",
|
|
[
|
|
_bambiPlayer,
|
|
_parachuteNetID,
|
|
str (_accountData select 0),
|
|
(_accountData select 1),
|
|
(_accountData select 2),
|
|
100,
|
|
100,
|
|
0,
|
|
(getNumber (configFile >> "CfgSettings" >> "BambiSettings" >> "protectionDuration")) * 60,
|
|
_clanData,
|
|
_spawnType
|
|
]
|
|
]
|
|
call ExileServer_system_network_send_to;
|
|
[_sessionID, _bambiPlayer] call ExileServer_system_session_update;
|
|
true |