Joshyy Posted January 9, 2017 Report Share Posted January 9, 2017 If a player is killed within a defined range from a trader there will be a chat message notifying everyone so they can be punished. Step 1: Make a copy of player_death.sqf in your mission file and change the path in your compiles.sqf Step 2: Define your trader areas by making an array with the trader position, range, and trader name DZE_tradersarray = [ // [[position],range,"tradername"], // [[position],range,"tradername"] -- Don't forget the last one doesn't have a , at the end! ]; Example: Spoiler DZE_tradersarray = [ [[4064,11665,0],510,"Trader city Bash"], // 510 = range from trader where the notification will check if the killer or victim is within. (in meters) [[6326,7809,0],510,"Trader city Stary"], [[11447,11364,0],510,"Trader city Klen"], [[12944,12766,0],510,"Hero camp"], [[1606,7803,0],510,"Bandit camp"], [[12060,12638,0],510,"Aircraft dealer"], [[3096,3469,0],510,"Trader city Bor"] ]; Put this in your init.sqf somewhere at the top or put it inside your configVariables.sqf Step 3: Open your custom player_death.sqf and find Spoiler if (!isNull _source) then { if (!isNull _body) then { Then add this below Spoiler { private ["_pos","_dis","_loc","_rng","_rnt","_systemchat"]; _pos = _x select 0; _dis = _x select 1; _loc = _x select 2; _playerName = name _source; _rng = ((getPos _body) distance _pos); // Get victim position from trader _rnt = ((getPos _source) distance _pos); // Get attacker position from trader if (_rnt <= _dis) exitWith { // Check if victim was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,dayz_playerName,_killerName,_rng,_loc]; [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; if (_rng <= _dis) exitWith { // Check if killer was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,dayz_playerName,dayz_playerName,_rng,_loc]; [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; } forEach DZE_tradersarray; The whole block should look like Spoiler if (!isNull _source) then { if (!isNull _body) then { { private ["_pos","_dis","_loc","_rng","_rnt","_systemchat"]; _pos = _x select 0; _dis = _x select 1; _loc = _x select 2; _playerName = name _source; _rng = ((getPos _body) distance _pos); // Get victim position from trader _rnt = ((getPos _source) distance _pos); // Get attacker position from trader if (_rnt <= _dis) exitWith { // Check if victim was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,dayz_playerName,_killerName,_rng,_loc]; [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; if (_rng <= _dis) exitWith { // Check if killer was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,dayz_playerName,dayz_playerName,_rng,_loc]; [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; } forEach DZE_tradersarray; _distance = round (_body distance _source); }; _sourceVehicleType = typeOf (vehicle _source); _sourceWeapon = if (_sourceVehicleType isKindOf "LandVehicle" or _sourceVehicleType isKindOf "Air" or _sourceVehicleType isKindOf "Ship") then {_sourceVehicleType} else {currentWeapon _source}; if (_sourceWeapon == "Throw") then {_sourceWeapon = (weaponState _source) select 3;}; if (_ammo in ["PipeBomb","Mine","MineE"]) then {_sourceWeapon = _ammo;}; if (alive _source) then { _sourceName = if (isPlayer _source) then {name _source} else {localize "STR_PLAYER_AI"}; }; }; Note: This is compatible with 1.0.5.1 Comment if you have any problems! BigEgg, oldmatechoc and looter809 3 Link to comment Share on other sites More sharing options...
lwbuk Posted January 22, 2017 Report Share Posted January 22, 2017 The person getting killed gets kicked for Value Restriction #0 "remExField" = [,,"spawn",["(Server): TRADER KILL! any killed any when any was 224.19m from Trader city Stary"],{systemChat (_this select 0)}] Turn off battleye and it works except the message reads "TRADER KILL! any killed any when any was xxxxx from trader city" Its not picking up the name of either player. Link to comment Share on other sites More sharing options...
Joshyy Posted January 28, 2017 Author Report Share Posted January 28, 2017 On 23/01/2017 at 0:18 AM, lwbuk said: The person getting killed gets kicked for Value Restriction #0 "remExField" = [,,"spawn",["(Server): TRADER KILL! any killed any when any was 224.19m from Trader city Stary"],{systemChat (_this select 0)}] Turn off battleye and it works except the message reads "TRADER KILL! any killed any when any was xxxxx from trader city" Its not picking up the name of either player. You can use a remote message script, those shouldn't cause BE kicks. as for the name, make sure _killerName and _victimName are defined (_killerName = name _source;_victimName = name player;) << add this above the script somewhere Edit: updated OP with fix Link to comment Share on other sites More sharing options...
McPimpin Posted March 8, 2017 Report Share Posted March 8, 2017 I love the idea of this script! Would it be too difficult to fine the killer with say a deduction of coin even if it means he goes in the negative? Link to comment Share on other sites More sharing options...
Relentless Posted March 24, 2017 Report Share Posted March 24, 2017 (edited) Removed Edited May 16, 2017 by DAmNRelentless I was dumb Link to comment Share on other sites More sharing options...
juandayz Posted March 24, 2017 Report Share Posted March 24, 2017 @Joshyy if possible rcognize the killer as an unique entity? cuz a great punish will be attach this player to a big stick in the middle of stary trader :D using something like _stick createvehicle...................... _killer attachTo [_stick, [2, 2, 0]]; sleep 60; detach _killer; Joshyy 1 Link to comment Share on other sites More sharing options...
Clark Posted April 19, 2017 Report Share Posted April 19, 2017 player_death.sqf (this one works) Spoiler private ["_pos","_display","_body","_playerID","_array","_source","_method","_isBandit","_punishment","_humanityHit","_myKills","_humanity","_kills","_killsV","_myGroup","_model","_infected","_distance","_sourceVehicleType","_sourceWeapon","_sourceName","_ammo"]; disableSerialization; if (count _this == 0) then { //Spawned from Killed EH (engine death), this should be rare //Wait to see if sched_medical 1s loop spawns with _source and _method (blood<=0 death) uiSleep 1; }; if (deathHandled) exitWith {}; deathHandled = true; //Prevent client freezes _display = findDisplay 49; if (!isNull _display) then {_display closeDisplay 0;}; if (dialog) then {closeDialog 0;}; if (visibleMap) then {openMap false;}; _body = player; _playerID = getPlayerUID player; disableUserInput true; //add weapon on back to player if (dayz_onBack != "") then { //Add weapon on back to body. _body addWeapon dayz_onBack; /* //Add weapon on back to the ground. _pos = _body modeltoWorld [1,1,0]; //_pos set [2, 0]; _item = createVehicle ["WeaponHolder", _pos, [], 0.0, "CAN_COLLIDE"]; _item setPosATL [_pos select 0, _pos select 1, ((_pos select 2) + 0.1)]; _item addWeaponCargoGlobal [dayz_onBack,1]; */ }; _infected = if (r_player_infected && DZE_PlayerZed) then {1} else {0}; _method = "unknown"; _sourceName = "unknown"; _sourceWeapon = ""; _distance = 0; if (count _this > 0) then { _source = _this select 0; _method = _this select 1; _ammo = if (count _this > 2) then {_this select 2} else {""}; if (!isNull _source) then { if (!isNull _body) then { { private ["_pos","_dis","_loc","_rng","_rnt","_systemchat"]; _pos = _x select 0; _dis = _x select 1; _loc = _x select 2; _killerName = name _source; _victimName = name player; _playerName = name _source; _rng = ((getPos _body) distance _pos); // Get victim position from trader _rnt = ((getPos _source) distance _pos); // Get attacker position from trader if (_rnt <= _dis) exitWith { // Check if victim was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,_victimName,_killerName,_rng,_loc];// this line are working. save the file, repack and try again [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; if (_rng <= _dis) exitWith { // Check if killer was in trader range _systemchat = format["(Server): TRADER KILL! %1 killed %2 when %3 was %4m from %5",_killerName,dayz_playerName,dayz_playerName,_rng,_loc]; [nil, nil, rspawn, [_systemchat], {systemChat (_this select 0)}] call RE; }; } forEach DZE_tradersarray; _distance = round (_body distance _source); }; _sourceVehicleType = typeOf (vehicle _source); _sourceWeapon = if (_sourceVehicleType isKindOf "LandVehicle" or _sourceVehicleType isKindOf "Air" or _sourceVehicleType isKindOf "Ship") then {_sourceVehicleType} else {currentWeapon _source}; if (_sourceWeapon == "Throw") then {_sourceWeapon = (weaponState _source) select 3;}; if (_ammo in ["PipeBomb","Mine","MineE"]) then {_sourceWeapon = _ammo;}; if (alive _source) then { _sourceName = if (isPlayer _source) then {name _source} else {localize "STR_PLAYER_AI"}; }; }; }; //Send Death Notice diag_log format["Player_Death: Body:%1 BodyName:%2 Infected:%3 SourceName:%4 SourceWeapon:%5 Distance:%6 Method:%7",_body,dayz_playerName,_infected,_sourceName,_sourceWeapon,_distance,_method]; PVDZ_plr_Death = [dayz_characterID,0,_body,_playerID,toArray dayz_playerName,_infected,toArray _sourceName,toArray _sourceWeapon,_distance,toArray _method]; //Send name as array to avoid publicVariable value restrictions publicVariableServer "PVDZ_plr_Death"; _id = [player,20,true,getPosATL player] call player_alertZombies; uiSleep 0.5; player setDamage 1; if (dayz_soundMuted) then {call player_toggleSoundMute;}; // hide icon before fadeSound 0.1 fadeSound 0; player setVariable ["NORRN_unconscious", false, true]; player setVariable ["unconsciousTime", 0, true]; player setVariable ["USEC_isCardiac",false,true]; player setVariable ["medForceUpdate",true,true]; player setVariable ["bloodTaken", false, true]; player setVariable ["startcombattimer", 0]; //remove combat timer on death player setVariable ["inCombat", false, true]; r_player_unconscious = false; r_player_cardiac = false; _model = typeOf player; autoRunActive = false; _array = _this; if (count _array > 0) then { _source = _array select 0; _method = _array select 1; if (!local _source && isPlayer _source) then { _isBandit = (player getVariable["humanity",0]) <= -2000; //_isBandit = (_model in ["Bandit1_DZ","BanditW1_DZ"]); //if you are a bandit or start first - player will not recieve humanity drop _punishment = ((_isBandit or {player getVariable ["OpenTarget",false]}) && !(player isKindOf "PZombie_VB")); _humanityHit = 0; if (!_punishment) then { //I'm "not guilty" - kill me and be punished _myKills = (player getVariable ["humanKills",0]) * 33.3; // how many non bandit players have I (the dead player) killed? // punish my killer 2000 for shooting a surivor // but subtract 500 for each survivor I've murdered _humanityHit = -(2000 - _myKills); _kills = _source getVariable ["humanKills",0]; _source setVariable ["humanKills",(_kills + 1),true]; PVDZ_send = [_source,"Humanity",[_humanityHit,300]]; publicVariableServer "PVDZ_send"; } else { //i'm "guilty" - kill me as bandit _killsV = _source getVariable ["banditKills",0]; _source setVariable ["banditKills",(_killsV + 1),true]; }; //Setup for study bodys. _body setVariable ["KillingBlow",[_source,_punishment],true]; }; _body setVariable ["deathType",_method,true]; }; terminate dayz_musicH; terminate dayz_slowCheck; terminate dayz_monitor1; //Reset (just in case) //deleteVehicle dayz_playerTrigger; //disableUserInput false; r_player_dead = true; //Player is dead! 3 fadeSound 0; uiSleep 1; dayz_originalPlayer enableSimulation true; addSwitchableUnit dayz_originalPlayer; setPlayable dayz_originalPlayer; selectPlayer dayz_originalPlayer; _myGroup = group _body; [_body] joinSilent dayz_firstGroup; deleteGroup _myGroup; 80000 cutText ["","PLAIN"]; //Clear group icons 3 cutRsc ["default", "PLAIN",3]; 4 cutRsc ["default", "PLAIN",3]; _body setVariable["combattimeout", 0, true]; //due to a cleanup issue with effects this has been disabled remember to look at the cleanup before adding it back. //dayzFlies = player; //publicVariable "dayzFlies"; uiSleep 2; 1 cutRsc [if (DZE_DeathScreen) then {"DeathScreen_DZE"} else {"DeathScreen_DZ"},"BLACK OUT",3]; playMusic "dayz_track_death_1"; uiSleep 2; for "_x" from 5 to 1 step -1 do { titleText [format[localize "str_return_lobby", _x], "PLAIN DOWN", 1]; uiSleep 1; }; PVDZ_Server_Simulation = [_body, false]; publicVariableServer "PVDZ_Server_Simulation"; endMission "END1"; juandayz 1 Link to comment Share on other sites More sharing options...