Still a lot of work to do to it but it will be a big part of the server redo coming up in the next few weeks. till then, i have it open for the players to roam and explore
New work in progress.. messy and unfinished...sadly the base on sauerland never got shown as the server change to napf before i got round to videoing it:(.. shame that one was very nice!
im using BEC with wine and issue a #shutdown when the restart should happen
a simple perl script restarts the server anyhow if its away therefore no need for complex scripts (if you just want a restart and nothing else)
* * * * * /path/to/perlscript.pl for cron
$a2pid = `/usr/bin/pgrep <ARMASERVERNAME>`;
if ($a2pid eq "")
{
@do = `~/restart_server.sh`;
}
example restart.sh (in this case a wasteland server)
#/bin/bash
pkill -e arma3server
pkill -e Bec.exe
pkill -e wine
cd ~/
cd battleye
echo Starting BEC ...
screen -L -h 1024 -dmS bec wine-auto Bec.exe -f Config.cfg --dsc
cd ..
echo Starting A3 Wasteland Server
screen -L -h 1024 -dmS wasteland ./arma3server -mod="@extDB;" -config="wasteland.cfg" -port=2302 -world=empty -profile=Player -noSound -noPause -autoInit
sleep 5
echo Services up
dirty but working. Only exception is that its actually just working if there is only one instance of the armaserver running
I modiefied the part in the custom_buildings.sqf where the Plotownership ischecked to the algorythm from plotmanagement.
I added this starting around line 166 in custom_building.sqf:
// check nearby plot's ownership and then for friend status
//if plot does not belong to player
_nearestPole = _findNearestPole select 0;
_ownerID = _nearestPole getVariable["ownerPUID","0"];
if(_playerUID == _ownerID) then { //Keep ownership
_canBuildOnPlot = true;
} else {
_friendlies = _nearestPole getVariable ["plotfriends",[]];
_fuid = [];
{
_friendUID = _x select 0;
_fuid = _fuid + [_friendUID];
} forEach _friendlies;
_builder = getPlayerUID player;
// check if friendly to owner
if(_builder in _fuid) then {
_canBuildOnPlot = true;
};
};
This scripts adds a configurable file where u can set the following options:
Vechicles godmode in safezones
Vechiles godmode in plotpole areas
Locked or all vehicles godmoded
Only donaters godmode vehicles in plotpole areas.
As soon someone is in them, DESTROY THEM
Added later: Locked Vechicles all over the map.
Added later: Option to allow damage on vehicles with gear in them even when locked at plotpoles
In your compiles.sqf ABOVE:
initialized = true;
place
fnc_usec_damageVehicle = compile preprocessFileLineNumbers "zupa\fn_damageHandlerVehicle.sqf"; //Event handler run on damage
vehicle_handleDamage = compile preprocessFileLineNumbers "zupa\vehicle_handleDamage.sqf";
and make a file in "zupa" folder called "vehicle_handleDamage.sqf" with inside:
FIXED CODE
private["_selection","_state","_strH","_total","_unit"];
//***Zupa Config ****//
_godmodeVechilesEverywhere = false; // Godmode on all locked vehicles
_onlyLockedVehicles = true; //Plotarea: Godmode for Only locked vehicles (true) or locked and unlocked(false)
_onlyVehicleWithoutGear = true; // Only godmode on vehicles that hold no gear.
_safeZoneGodVehicle = true; // Godmode vehicles in safezones. (or specific zone's)
// donator plotpole only works with PLOT FOR LIFE, set FALSE if you dont have it.
_donatorsPlots = false; // True = only godmode vehicles for donaters in the list, False = godmode for every guy.
_plotDonators = ["76561198101253426","505"]; // PUID's of poeple who donated for plotpole
// Chernarus safezone area's - change these to other coordinates for other maps. ( You can also add specific locations on the map.
_safezones = [
[[5070.75,9729.54],100,"Air"],
[[1606.6443,7803.5156],100,"Bandit"],
[[4063.4226,11664.19],100,"Bash"],
[[12944.227,12766.889],100,"Hero"],
[[11447.472,11364.504],100,"Klen"],
[[6315.88,7791.3],100,"Stary"] // [[x,y],distance,"just name"]
];
//***END Config ****//
_unit = _this select 0;
_selection = _this select 1;
_total = _this select 2;
_state = true;
_HPBefore = -1;
if (_selection != "") then {
_strH = "hit_" + _selection;
_HPBefore = [_unit,_strH] call object_getHit;
} else {
_strH = "totalDmg";
_HPBefore = getDammage _unit;
};
if(_total > _HPBefore)then{
if((locked _unit && _godmodeVechilesEverywhere && (count (crew _unit)) < 1))then{_state = false;
};
if(_state)then{
if(_safeZoneGodVehicle )then{
{if ((_unit distance (_x select 0)) < (_x select 1)) then {_state = false;
};} forEach _safezones;
};
};
if(_state)then{
_gearCount = 0;
if(_onlyVehicleWithoutGear)then{
//_weaps = count(getWeaponCargo _unit);
//_mags = count(getMagazineCargo _unit);
//_backs = count(getBackpackCargo _unit);
//_gearCount = _gearCount + _weaps + _mags + _backs;
};
_plots = nearestObjects [_unit, ["Plastic_Pole_EP1_DZ"], DZE_PlotPole select 0];
if((count(_plots) > 0))then{
_thePlot = _plots select 0;
_plotOwner = _thePlot getVariable ["ownerPUID",0];
if ( (_gearCount == 0) &&(locked _unit || !(_onlyLockedVehicles) ) && (count (crew _unit)) < 1 && ( !(_donatorsPlots) || (_plotOwner in _plotDonators))) then {_state = false;
};
};
};
}; //fix
if(_state)then{
if (_total >= 0.98) then {
_total = 1.0;
};
if (local _unit) then {
if (_total > 0) then {
_unit setVariable [_strH, _total, true];
_unit setHit [_selection, _total];
if (isServer) then {
[_unit, "damage"] call server_updateObject;
} else {
PVDZE_veh_Update = [_unit,"damage"];
publicVariableServer "PVDZE_veh_Update";
};
};
} else {
// vehicle is not local to this client, ask the client which vehicle is local to set damage
/* PVS/PVC - Skaronator */
PVDZE_send = [_unit,"VehHandleDam",_this];
publicVariableServer "PVDZE_send";
};
}else{
_total = _HPBefore;
};
// all "HandleDamage event" functions should return the effective damage that the engine will record for that part
_total
AND in "zupa" folder: fn_damageHandlerVehicle.sqf
scriptName "Functions\misc\fn_damageHandler.sqf";
/***********************************************************
PROCESS DAMAGE TO A UNIT
- Function
- [unit, selectionName, damage, source, projectile] call fnc_usec_damageHandler;
************************************************************/
private ["_unit","_hit","_damage","_total"];
_unit = _this select 0;
_hit = _this select 1;
_damage = _this select 2;
//_source = _this select 3;
//_ammo = _this select 4;
_total = _damage;
_state = true;
//***Zupa Config ****//
_godmodeVechilesEverywhere = false; // Godmode on all locked vehicles
_onlyLockedVehicles = true; //Plotarea: Godmode for Only locked vehicles (true) or locked and unlocked(false)
_onlyVehicleWithoutGear = true; // Only godmode on vehicles that hold no gear.
_safeZoneGodVehicle = true; // Godmode vehicles in safezones. (or specific zone's)
// donator plotpole only works with PLOT FOR LIFE, set FALSE if you dont have it.
_donatorsPlots = false; // True = only godmode vehicles for donaters in the list, False = godmode for every guy.
_plotDonators = ["76561198101253426","505"]; // PUID's of poeple who donated for plotpole
// Chernarus safezone area's - change these to other coordinates for other maps. ( You can also add specific locations on the map.
_safezones = [
[[5070.75,9729.54],100,"Air"],
[[1606.6443,7803.5156],100,"Bandit"],
[[4063.4226,11664.19],100,"Bash"],
[[12944.227,12766.889],100,"Hero"],
[[11447.472,11364.504],100,"Klen"],
[[6315.88,7791.3],100,"Stary"] // [[x,y],distance,"just name"]
];
//***END Config ****//
systemChat "checks";
if((locked _unit && _godmodeVechilesEverywhere && (count (crew _unit)) < 1))then{_state = false;
};
if(_state)then{
if(_safeZoneGodVehicle )then{
{if ((_unit distance (_x select 0)) < (_x select 1)) then {_state = false;
};} forEach _safezones;
};
};
if(_state)then{
_gearCount = 0;
if(_onlyVehicleWithoutGear)then{
//_weaps = count(getWeaponCargo _unit);
//_mags = count(getMagazineCargo _unit);
//_backs = count(getBackpackCargo _unit);
//_gearCount = _gearCount + _weaps + _mags + _backs;
};
_plots = nearestObjects [_unit, ["Plastic_Pole_EP1_DZ"], DZE_PlotPole select 0];
if((count(_plots) > 0))then{
_thePlot = _plots select 0;
_plotOwner = _thePlot getVariable ["ownerPUID",0];
if ( (_gearCount == 0) &&(locked _unit || !(_onlyLockedVehicles) ) && (count (crew _unit)) < 1 && ( !(_donatorsPlots) || (_plotOwner in _plotDonators))) then {_state = false;
};
};
};
//diag_log ("DAMAGE VEH: " + typeof(_unit) + " / " + str(_hit) + " / " + str(_damage) + " / " + str(getDammage _unit));
if (local _unit && _state) then {
_total = [_unit,_hit,_damage] call object_setHitServer;
};
_total