summaryrefslogtreecommitdiffstats
path: root/Server/Functions/Server_BuildingKilled.sqf
diff options
context:
space:
mode:
Diffstat (limited to 'Server/Functions/Server_BuildingKilled.sqf')
-rw-r--r--Server/Functions/Server_BuildingKilled.sqf72
1 files changed, 72 insertions, 0 deletions
diff --git a/Server/Functions/Server_BuildingKilled.sqf b/Server/Functions/Server_BuildingKilled.sqf
new file mode 100644
index 0000000..77b3f2c
--- /dev/null
+++ b/Server/Functions/Server_BuildingKilled.sqf
@@ -0,0 +1,72 @@
+Private ['_current','_find','_killer','_structure','_structures','_side','_tked','_type','_uid'];
+_structure = _this select 0;
+_killer = _this select 1;
+_side = _this select 2;
+_type = _this select 3;
+
+diag_log Format["[WFBE (INFORMATION)][frameno:%3 | ticktime:%4] Server_BuildingKilled: A %1 %2 Structure has been destroyed (By: %5)",str _side,_type,diag_frameno,diag_tickTime,_killer];
+
+//--- Building Teamkill.
+if ((side _killer == _side)&&(isPlayer(_killer))) then {
+ _uid = getPlayerUID _killer;
+ if !(paramShowUID) then {_uid = "xxxxxxx"};
+ _tked = [_type, 'displayName'] Call GetConfigInfo;
+ WFBE_LocalizeMessage = [_side,'CLTFNCLOCALIZEMESSAGE',['BuildingTeamkill',name _killer,_uid,_tked]];
+ publicVariable 'WFBE_LocalizeMessage';
+ if (isHostedServer) then {[_side,'CLTFNCLOCALIZEMESSAGE',['BuildingTeamkill',name _killer,_uid,_tked]] Spawn HandlePVF};
+ if (mysql) then {
+ WF_Logic setVariable ["WF_MYSQL_SERVER",(WF_Logic getVariable "WF_MYSQL_SERVER") + [Format ["MYSQLDATA?WFBE_Update?%1?%2?teamkillstr?%3",_uid,name _killer,worldName]]];
+ };
+
+ diag_log Format["[WFBE (INFORMATION)][frameno:%3 | ticktime:%4] Server_BuildingKilled: Player %1 (%2) has teamkilled a friendly building.",name _killer,_uid,diag_frameno,diag_tickTime];
+};
+
+if (mysql) then {
+ if ((side _killer != _side)&&(isPlayer(_killer))) then {
+ WF_Logic setVariable ["WF_MYSQL_SERVER",(WF_Logic getVariable "WF_MYSQL_SERVER") + [Format ["MYSQLDATA?WFBE_InsertOrUpdate_PKAI?%1?%2?%3?%4?3?%5",_type,getPlayerUID _killer,name _killer,"killed",worldName]]];
+ };
+};
+
+//--- Decrement building limit.
+_find = (Format ['WFBE_%1STRUCTURENAMES',_side] Call GetNamespace) find _type;
+if (_find != -1) then {
+ _current = Call Compile Format ['%1BuildingsCurrent',_side];
+ _current set [_find - 1, (_current select (_find-1)) - 1];
+ Call Compile Format ['%1BuildingsCurrent = _current',_side];
+ publicVariable Format ['%1BuildingsCurrent',_side];
+};
+
+Call Compile Format ["%1BaseStructures = %1BaseStructures - [_structure] - [objNull]; publicVariable '%1BaseStructures';",str _side];
+
+["Destroyed",_type,_side] Spawn SideMessage;
+
+//--- Can be fixed with workers.
+if (paramUseWorkers) then {
+ Private ["_nearLogic","_position","_sold"];
+
+ _sold = _structure getVariable "sold";
+
+ if (isNil '_sold') then {
+ //--- Grab the logic.
+ _position = getPos _structure;
+ _nearLogic = _position nearEntities [["LocationLogicStart"],15];
+ if (count _nearLogic > 0) then {_nearLogic = ([_position, _nearLogic] Call SortByDistance) select 0} else {_nearLogic = objNull};
+
+ if (isNull _nearLogic) exitWith {};
+
+ //--- Completed at 25% on destruction, dropping until it reach 0 (delete).
+ _nearLogic setVariable ["WFBE_B_Completion", 25];
+ //--- The ratio gets lower after each destruction.
+ _nearLogic setVariable ["WFBE_B_CompletionRatio", (_nearLogic getVariable "WFBE_B_CompletionRatio")*0.8];
+ //--- Can be repaired.
+ _nearLogic setVariable ["WFBE_B_Repair", true];
+
+ [Format ["WFBE_WORKERS_%1LOGIC",str _side],((Format ["WFBE_WORKERS_%1LOGIC",str _side]) Call GetNamespace) + [_nearLogic],true] Call SetNamespace;
+
+ [_nearLogic, typeOf _structure, _side, _find - 1] Spawn HandleBuildingRepair;
+ };
+};
+
+sleep 10;
+
+deleteVehicle _structure;