Jump to content

[HOW-TO] Reskin/Retexture Vehicles


Brockie

Recommended Posts

Hey @theduke,

that's an interesting question.  I didn't know about the setFlagtexture command.

Firstly a bit of a typo in your code: setFalgTexture should be setFlagTexture.

Now, looking at the difference in syntax on the bohemia wiki first thing I notice is a difference in syntax between setObjectTexture and setFlagtexture.

syntax for setObjectTexture:

object setObjectTexture [selectionNumber,texture]

syntax for setFlagTexture:

flag setFlagTexture texture

Indeed it seems there is no 'selection number' when it come to flags.  This means you shouldn't need brackets around the path to the texture file.  Try this:

if (_class == "FlagCarrierWhite_EP1") then {
	_object setVehicleInit "this setFlagTexture ''graphics\flag.jpg''" 
};

This line of code might have syntax errors but it looks good to me right now.  

 

Next, when trying to decide between _class or _type it comes down to how the stock files were written.  Use the variable that is being called for creating the vehicle.  Examples:

Server_Monitor.sqf:

createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"];

server_publishVehicle2.sqf, server_publishVehicle3.sqf

createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];

It's just how it was written by the devs for whatever reason.

Next I'm going to share some of my novice understanding of the code.  Emphasis on being 'novice'.

 

if (_class == "FlagCarrierWhite_EP1") then {
	_object setVehicleInit "this setFlagTexture ''graphics\flag.jpg''" 
};

So in this line of code, I believe (though I could be totally wrong) _class only represents which type of object we are looking for.   If you have 10 of the same type of flag on the map it's looking at all of them.  Where _object I believe has a number associated with it to identify exactly which of those 10 flags is being updated each time.

The last thing I can think of right now is the difference between server_publishVehicle.sqf,  server_publishVehicle2.sqf, server_publishVehicle3.sqf, and server_monitor.sqf.   It is important to understand which file does what.  I wish I could explain this right now but I'm way too rusty.  server_monitor.sqf seems to be the likely candidate that deals with server startup so I would start there.  Make sure the flag is called from the database and not from editor.sqf that way the server_monitor.sqf should deal with it (I think).  if that doesn't work I next I would try publishVehicle3, and last I would try publishVehicle2.  I'm going to give this a try in my game and see if I can get it to work and I will report back.

Thanks for the question.

Link to comment
Share on other sites

Cheers, thx for the fast reply.  I will surely try what you mentioned.  As far as the understand of what file does what, thats what i lack lol

I used the gem crafting to place the flags, and once placed, the flag should change to its texture. or on restart it would be. Theoretically that is lol. but it never worked.

Juandayz helped me with this for a bit, and the closest i got, i would place the flag, the flag had the custom texture during the animation of the player. Once the animation was done, the flag returned to its original texture lol

Link to comment
Share on other sites

Hey @theduke,  I've got it working.

but before I reveal the code for re-texturing flags I just want to ask about your " mission sided file...  "skins.sqf... in the init.sqf ".  This should not be necessary from what I can tell.  Unless I am mistaken re-texturing should work for all clients, including ones that join later.  Is that from another texture script?  what is the purpose of that file?

anyway here it is for your sever_monitor.sqf:

Spoiler

if (_type == "FlagCarrierWhite_EP1") then {_object setVehicleInit 'this setFlagTexture ''\ca\ca_e\data\flag_us_co.paa'';';};

 

This will re-texture the flag for you on server startup but I don't have emerald designer or whatever gem mod you are using so I can't test building a flag dynamically.  But If you find that it's not working dynamically then I would recommend adding the line also to server_publishVehicle3.sqf (i think this is for dynamic object creating) or actually maybe server_publishObject2.sqf (I'm not sure) and just remember in those files you must change _type to _class.  

Link to comment
Share on other sites

3 minutes ago, Brockie said:

Hey @theduke,  I've got it working.

but before I reveal the code for re-texturing flags I just want to ask about your " mission sided file...  "skins.sqf... in the init.sqf ".  This should not be necessary from what I can tell.  Unless I am mistaken re-texturing should work for all clients, including ones that join later.  Is that from another texture script?  what is the purpose of that file?

anyway here it is for your sever_monitor.sqf:

  Reveal hidden contents


if (_type == "FlagCarrierWhite_EP1") then {_object setVehicleInit 'this setFlagTexture ''\ca\ca_e\data\flag_us_co.paa'';';};

 

This will re-texture the flag for you on server startup but I don't have emerald designer or whatever gem mod you are using so I can't test building a flag dynamically.  But If you find that it's not working dynamically then I would recommend adding the line also to server_publishVehicle3.sqf (i think this is for dynamic object creating) and just remember in those files you must change _type to _class.  

I was never able to do it just server sided.  Maybe if i would of restarted the server, the skin would of been there. But the only way i was able to get it to work was by adding the suvskins.sqf mission sided.

This is what i have mission sided called by the init

suvskins.sqf

Spoiler

if (isServer) exitwith {};
waitUntil {sleep 1; count vehicles > 1};
sleep 1;
{
    If (typeOf _x in ["SUV_Blue_DZE4"]) then 
    {
        nul = _x setObjectTexture [0,"graphics\SUV.jpg"]
    };
    If (typeOf _x in ["SUV_Red_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVCA.jpg"]
    };
    If (typeOf _x in ["SUV_Green_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVAI.jpg"]
    };
    If (typeOf _x in ["SUV_TK_CIV_EP1_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVESLK.jpg"]
    };
    If (typeOf _x in ["SUV_White_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVUK.jpg"]
    };
    If (typeOf _x in ["SUV_Orange_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\suvweed.jpg"]
    };
    
} forEach (vehicles);

 

and i have the 3 files server sided modified also.

So with you mentioning that it only appears on restart, maybe thats what the mission one does. (i could be wrong)

But it wouldnt work if spawned in with admin tool. Just bought through trader

I will give this a try thx

Link to comment
Share on other sites

4 hours ago, theduke said:

I was never able to do it just server sided.  Maybe if i would of restarted the server, the skin would of been there. But the only way i was able to get it to work was by adding the suvskins.sqf mission sided.

This is what i have mission sided called by the init

suvskins.sqf

  Hide contents

if (isServer) exitwith {};
waitUntil {sleep 1; count vehicles > 1};
sleep 1;
{
    If (typeOf _x in ["SUV_Blue_DZE4"]) then 
    {
        nul = _x setObjectTexture [0,"graphics\SUV.jpg"]
    };
    If (typeOf _x in ["SUV_Red_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVCA.jpg"]
    };
    If (typeOf _x in ["SUV_Green_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVAI.jpg"]
    };
    If (typeOf _x in ["SUV_TK_CIV_EP1_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVESLK.jpg"]
    };
    If (typeOf _x in ["SUV_White_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\SUVUK.jpg"]
    };
    If (typeOf _x in ["SUV_Orange_DZE4"]) then
    {
        nul = _x setObjectTexture [0,"graphics\suvweed.jpg"]
    };
    
} forEach (vehicles);

 

and i have the 3 files server sided modified also.

So with you mentioning that it only appears on restart, maybe thats what the mission one does. (i could be wrong)

But it wouldnt work if spawned in with admin tool. Just bought through trader

I will give this a try thx

Indeed my edits will only handle server restart, buying a vehicle, stuff that's already in epoch (building a flag should work too)  but server_monitor.sqf is just for restarts.  Now that I think of it... the file for changing textures of building is player_build.sqf.

Admin tools is not part of epoch and those mods don't use epoch files for creating stuff, exact same goes for AI missions.  These mods use custom code for creating vehicles which is why the textures don't get applied immediately (but would take effect after a restart if the objects were persistant).  Did your skins.sqf solve the issue to texture admin spawned vehicles?  If not then it is redundant having that file.

What I would do is edit the actual admin tools that when it createVehicle it also setObjectTexture.  Same could be done with AI missions, by editing the missions code.

Link to comment
Share on other sites

Hey @theduke,

I don't have the gem mod but I do have extra right click actions, so I used that to play with building a flag and I was right,about player_build.sqf.

server_monitor.sqf will take care of texturing your flags each time you restart the server, and player_build.sqf will take care of immediately texturing objects as they are being built.  You don't need to edit any of the "publishVehicles" files and you shouldn't need the skins.sqf file either.  

so here is what I would do for player_build.sqf:  (I've added only one line here, but showing the whole block so you can see where to put it.)

 

// Start Build
		_tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];

		_tmpbuilt setdir _dir;
	
		// Get position based on object
		_location = _position;

		if (_classname == "FlagCarrierWhite_EP1") then {_tmpbuilt setVehicleInit 'this setFlagTexture ''\ca\ca_e\data\flag_us_co.paa'';';};  // I added this line

		if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then {
			_location set [2,0];
		};

 

and you need to add processInitCommands; near the end.  This shows where I would put it:

			};
			processInitCommands;   // I added this line
		} else { //if magazine was not removed, cancel publish

 

Once you've done this people will probably get kicked for BattlEye remoteexec restrictions when they build the flag. 

Here's what you will want to add to your remoteexec.txt:

!"setFlagTexture"

like this:

//new
5 "" !"setFlagTexture" (more script here that I'm not showing)

 

Link to comment
Share on other sites

  • 4 weeks later...

@theduke Need a little help.   Can someone show me their server_monitor.sqf for 1.0.6.1

so I can see where to put this. 

 Step 5. Again in your server_monitor.sqf find this:

	// # END SPAWN OBJECTS #

                   And below it put this:

	processInitCommands; 

My server_monitor does not have  // #END SPAWN OBJECTS #

Link to comment
Share on other sites

On 8/10/2014 at 1:37 PM, 2sugars said:

Are you spawning it in via antihack admin or buying through traders?

 

& is your image 1024 by 1024 pixels?

buying through traders and yes.

When I buy it comes in green and then is invisible. All you can see is glass and rems.

if i relog it show the skin and all is good.

 

Link to comment
Share on other sites

2 hours ago, Thug said:

@theduke Need a little help.   Can someone show me their server_monitor.sqf for 1.0.6.1

so I can see where to put this. 

 Step 5. Again in your server_monitor.sqf find this:


	// # END SPAWN OBJECTS #

                   And below it put this:


	processInitCommands; 

My server_monitor does not have  // #END SPAWN OBJECTS #

I have it above

if (dayz_townGenerator) then {

Link to comment
Share on other sites

  • 8 months later...

I have one little problem. Suv skins scripr work allright. but I dont sell suv with skins at trader. epoch 1061

server_publishVehicle2.sqf

Spoiler

private ["_activatingPlayer","_isOK","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey"];
//PVDZE_veh_Publish2 = [[_dir,_location],_part_out,false,_keySelected,_activatingPlayer];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

_worldspace =     _this select 0;
_class =         _this select 1;
_donotusekey =    _this select 2;
_keySelected =  _this select 3;
_activatingPlayer =  _this select 4;

if(_donotusekey) then {
    _isOK = true;
} else {
    _isOK = isClass(configFile >> "CfgWeapons" >> _keySelected);
};

if(!_isOK) exitWith { diag_log ("HIVE: CARKEY DOES NOT EXIST: "+ str(_keySelected));  };

if(_donotusekey) then {
    _characterID = _keySelected;
} else {
    _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid"));
};

_dir =         _worldspace select 0;
_location = _worldspace select 1;
_uid = _worldspace call dayz_objectUID2;

//Send request
_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid];

#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key)); 
#endif

_key call server_hiveWrite;

// Switched to spawn so we can wait a bit for the ID
[_uid,_characterID,_class,_dir,_location,_donotusekey,_activatingPlayer] spawn {
   private ["_object","_uid","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_location","_object_para","_donotusekey","_activatingPlayer"];

   _uid = _this select 0;
   _characterID = _this select 1;
   _class = _this select 2;
   //_dir = _this select 3;
   _location = _this select 4;
   _donotusekey = _this select 5;
   _activatingPlayer = _this select 6;

   _done = false;
    _retry = 0;
    // TODO: Needs major overhaul for 1.1
    while {_retry < 10} do {
        // GET DB ID
        _key = format["CHILD:388:%1:",_uid];
        #ifdef OBJECT_DEBUG
        diag_log ("HIVE: WRITE: "+ str(_key));
        #endif
        
        _result = _key call server_hiveReadWrite;
        _outcome = _result select 0;
        if (_outcome == "PASS") then {
            _oid = _result select 1;
            #ifdef OBJECT_DEBUG
            diag_log("CUSTOM: Selected " + str(_oid));
            #endif
            
            _done = true;
            _retry = 100;

        } else {
            diag_log("CUSTOM: trying again to get id for: " + str(_uid));
            _done = false;
            _retry = _retry + 1;
            uiSleep 1;
        };
    };

    if(!_done) exitWith { diag_log("CUSTOM: failed to get id for : " + str(_uid)); };

    if(DZE_TRADER_SPAWNMODE) then {
        //_object_para = createVehicle ["ParachuteMediumWest", [0,0,0], [], 0, "CAN_COLLIDE"];
        _object_para = "ParachuteMediumWest" createVehicle [0,0,0];
        _object_para setPos [_location select 0, _location select 1,(_location select 2) + 65];
        //_object = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
        _object = _class createVehicle [0,0,0];
    } else {
        //_object = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"];
        // Don't use setPos or CAN_COLLIDE here. It will spawn inside other vehicles
        _object = _class createVehicle _location;
    };
    _type = typeof _object;
    if  (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
    if(!_donotusekey) then {
        // Lock vehicle
        _object setvehiclelock "locked";
    };

    clearWeaponCargoGlobal  _object;
    clearMagazineCargoGlobal  _object;
    dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
    _object setVariable ["ObjectID", _oid, true];
    _object setVariable ["lastUpdate",time];
    _object setVariable ["CharacterID", _characterID, true];
    
    //годмод
    _szs = _activatingPlayer getVariable ['inSafeZone',0];
    if (_szs == 1) then
    {
        [_object] spawn
        {
            _object = _this select 0;
            player_fired = {
                deleteVehicle (nearestObject [_this select 0,_this select 4]);
                cutText ['You can not fire in a SafeZone!','WHITE IN'];
            };
            zombie_generate = {};
        
            fnc_usec_damageHandler = {};
            
            _object removeAllEventHandlers 'Fired';
            _object addEventHandler ['Fired', {_this call player_fired;}];
            {
                _x removeAllEventHandlers 'Fired';
                _x addEventHandler ['Fired', {_this call player_fired;}];
            } forEach (crew _object);
            fnc_veh_handleDam = {false};
            _object removeAllEventHandlers 'HandleDamage';
            _object addeventhandler ['HandleDamage',{ _this call fnc_veh_handleDam } ];
            _object allowDamage false;
        };
    };
    diag_log format["server_publishVehicle.sqf:%1",typeof _object];
    
    //_object setVelocity [0,0,1];

    if(DZE_TRADER_SPAWNMODE) then {
        _object attachTo [_object_para, [0,0,-1.6]];
        uiSleep 1;
        WaitUntil{(([_object] call FNC_GetPos) select 2) < 0.1};
        detach _object;
        deleteVehicle _object_para;
    };
    
    _object call fnc_veh_ResetEH;
    
    // for non JIP users this should make sure everyone has eventhandlers for vehicles.
    PVDZE_veh_Init = _object;
    publicVariable "PVDZE_veh_Init";
    processInitCommands;
    diag_log format["PUBLISH: %1(%2) bought %3 with ObjectUID %4",if (alive _activatingPlayer) then {name _activatingPlayer} else {"DeadPlayer"},getPlayerUID _activatingPlayer,_class,_uid];
};
 


server_publishVehicle3.sqf

Spoiler

private ["_activatingPlayer","_isOK","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey"];
//PVDZE_veh_Publish2 = [_veh,[_dir,_location],_part_out,false,_keySelected,_activatingPlayer];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

_object =         _this select 0;
_worldspace =     _this select 1;
_class =         _this select 2;
_donotusekey =    _this select 3;
_keySelected =  _this select 4;
_activatingPlayer =  _this select 5;
_characterID = _keySelected;

_isOK = isClass(configFile >> "CfgVehicles" >> _class);
if (!_isOK || isNull _object) exitWith {
    diag_log ("HIVE-pv3: Vehicle does not exist: "+ str(_class));
    dze_waiting = "fail";
    (owner _activatingPlayer) publicVariableClient "dze_waiting";
};

#ifdef OBJECT_DEBUG
diag_log ("PUBLISH: Attempt " + str(_object));
#endif

_dir =         _worldspace select 0;
_location = _worldspace select 1;
_uid = _worldspace call dayz_objectUID2;

//Send request
_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid];
#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key)); 
#endif

_key call server_hiveWrite;

// Switched to spawn so we can wait a bit for the ID
[_object,_uid,_characterID,_class,_dir,_location,_donotusekey,_activatingPlayer] spawn {
   private ["_object","_uid","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_location","_donotusekey","_activatingPlayer","_countr","_objectID","_objectUID","_dir","_newobject","_weapons","_magazines","_backpacks","_objWpnTypes","_objWpnQty"];

   _object = _this select 0;
   _objectID     = _object getVariable ["ObjectID","0"];
   _objectUID    = _object getVariable ["ObjectUID","0"];
   _uid = _this select 1;
   _characterID = _this select 2;
   _class = _this select 3;
   _dir = _this select 4;
   // _location = _this select 5;
   _location = getPosATL _object;
   _donotusekey = _this select 6;
   _activatingPlayer = _this select 7;

   _done = false;
    _retry = 0;
    // TODO: Needs major overhaul for 1.1
    while {_retry < 10} do {
        // GET DB ID
        _key = format["CHILD:388:%1:",_uid];
        #ifdef OBJECT_DEBUG
        diag_log ("HIVE: WRITE: "+ str(_key));
        #endif
        
        _result = _key call server_hiveReadWrite;
        _outcome = _result select 0;
        if (_outcome == "PASS") then {
            _oid = _result select 1;
            //_object setVariable ["ObjectID", _oid, true];
            #ifdef OBJECT_DEBUG
            diag_log("CUSTOM: Selected " + str(_oid));
            #endif
            
            _done = true;
            _retry = 100;

        } else {
            diag_log("CUSTOM: trying again to get id for: " + str(_uid));
            _done = false;
            _retry = _retry + 1;
            uiSleep 1;
        };
    };

    if (!_done) exitWith {
        diag_log("HIVE-pv3: failed to get id for : " + str(_uid));
        _key = format["CHILD:310:%1:",_uid];
        _key call server_hiveWrite;
        
        dze_waiting = "fail";
        (owner _activatingPlayer) publicVariableClient "dze_waiting";
    };

    // add items from previous vehicle here
    _weapons =         getWeaponCargo _object;
    _magazines =     getMagazineCargo _object;
    _backpacks =     getBackpackCargo _object;

    clearWeaponCargoGlobal  _object;
    clearMagazineCargoGlobal  _object;
    clearBackpackCargoGlobal _object;

    // Remove marker
    deleteVehicle _object;

    //_newobject = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
    _newobject = _class createVehicle [0,0,0];

    // remove old vehicle from DB
    [_objectID,_objectUID,_activatingPlayer] call server_deleteObj;

    // switch var to new vehicle at this point.
    _object = _newobject;

    _object setDir _dir;
    _object setPosATL _location;
                        
    //Add weapons
    _objWpnTypes =     _weapons select 0;
    _objWpnQty =     _weapons select 1;
    _countr = 0;
    {
        _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;
    if (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
    //Add Magazines
    _objWpnTypes = _magazines select 0;
    _objWpnQty = _magazines select 1;
    _countr = 0;
    {
        _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;

    //Add Backpacks
    _objWpnTypes = _backpacks select 0;
    _objWpnQty = _backpacks select 1;
    _countr = 0;
    {
        _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;

    _object setVariable ["ObjectID", _oid, true];
    _object setVariable ["lastUpdate",time];
    _object setVariable ["CharacterID", _characterID, true];

    dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];

    _object call fnc_veh_ResetEH;
    
    // for non JIP users this should make sure everyone has eventhandlers for vehicles.
    PVDZE_veh_Init = _object;
    publicVariable "PVDZE_veh_Init";
    
    dze_waiting = "success";
    (owner _activatingPlayer) publicVariableClient "dze_waiting";
    processInitCommands;
    diag_log ("PUBLISH: " + str(_activatingPlayer) + " Upgraded " + (_class) + " with ID " + str(_uid));
};
 

server_monitor.sqf

Spoiler

private ["_date","_year","_month","_day","_hour","_minute","_date1","_key","_objectCount","_dir","_point","_i","_action","_dam","_selection","_wantExplosiveParts","_entity","_worldspace","_damage","_booleans","_rawData","_ObjectID","_class","_CharacterID","_inventory","_hitpoints","_fuel","_id","_objectArray","_script","_result","_outcome","_shutdown","_res"];
[] execVM "\z\addons\dayz_server\system\s_fps.sqf"; //server monitor FPS (writes each ~181s diag_fps+181s diag_fpsmin*)
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

waitUntil {!isNil "BIS_MPF_InitDone" && initialized};
if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
sm_done = false;

_legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation.

dayz_serverIDMonitor = [];
_DZE_VehObjects = [];
dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
_hiveLoaded = false;
_serverVehicleCounter = [];
_tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
diag_log "HIVE: Starting";

//Set the Time
_key = "CHILD:307:";
_result = _key call server_hiveReadWrite;
_outcome = _result select 0;
if (_outcome == "PASS") then {
    _date = _result select 1;
    _year = _date select 0;
    _month = _date select 1;
    _day = _date select 2;
    _hour = _date select 3;
    _minute = _date select 4;

    if (dayz_ForcefullmoonNights) then {_date = [2012,8,2,_hour,_minute];};
    diag_log ["TIME SYNC: Local Time set to:", _date, "Fullmoon:",dayz_ForcefullmoonNights,"Date given by HiveExt.dll:",_result select 1];
    setDate _date;
    dayzSetDate = _date;
    publicVariable "dayzSetDate";
};

//Stream in objects
/* STREAM OBJECTS */
//Send the key
_timeStart = diag_tickTime;

for "_i" from 1 to 5 do {
    diag_log "HIVE: trying to get objects";
    _key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod];
    _result = _key call server_hiveReadWrite;  
    if (typeName _result == "STRING") then {
        _shutdown = format["CHILD:400:%1:",(profileNamespace getVariable "SUPERKEY")];
        _res = _shutdown call server_hiveReadWrite;
        diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
    } else {
        diag_log ("HIVE: found "+str(_result select 1)+" objects" );
        _i = 99; // break
    };
};

if (typeName _result == "STRING") exitWith {
    diag_log "HIVE: Connection error. Server_monitor.sqf is exiting.";
};    

diag_log "HIVE: Request sent";
_myArray = [];
_val = 0;
_status = _result select 0; //Process result
_val = _result select 1;
if (_legacyStreamingMethod) then {
    if (_status == "ObjectStreamStart") then {
        profileNamespace setVariable ["SUPERKEY",(_result select 2)];
        _hiveLoaded = true;
        //Stream Objects
        diag_log ("HIVE: Commence Object Streaming...");
        for "_i" from 1 to _val do  {
            _result = _key call server_hiveReadWriteLarge;
            _status = _result select 0;
            _myArray set [count _myArray,_result];
        };
    };
} else {
    if (_val > 0) then {
        _fileName = _key call server_hiveReadWrite;
        _lastFN = profileNamespace getVariable["lastFN",""];
        profileNamespace setVariable["lastFN",_fileName];
        saveProfileNamespace;
        if (_status == "ObjectStreamStart") then {
            profileNamespace setVariable ["SUPERKEY",(_result select 2)];
            _hiveLoaded = true;
            _myArray = Call Compile PreProcessFile _fileName;
            _key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod];
            _result = _key call server_hiveReadWrite; //deletes previous object data dump
        };
    } else {
        if (_status == "ObjectStreamStart") then {
            profileNamespace setVariable ["SUPERKEY",(_result select 2)];
            _hiveLoaded = true;
        };
    };
};

diag_log ("HIVE: Streamed " + str(_val) + " objects");

// Don't spawn objects if no clients are online (createVehicle fails with Ref to nonnetwork object)
if ((playersNumber west + playersNumber civilian) == 0) exitWith {
    diag_log "All clients disconnected. Server_monitor.sqf is exiting.";
};

{
    private ["_object","_posATL"];
    //Parse Array
    _action =         _x select 0; 
    _idKey =         _x select 1;
    _type =            _x select 2;
    _ownerID =         _x select 3;
    _worldspace =     _x select 4;
    _inventory =    _x select 5;
    _hitPoints =    _x select 6;
    _fuel =            _x select 7;
    _damage =         _x select 8;
    _storageMoney = _x select 9;

    //set object to be in maintenance mode
    _maintenanceMode = false;
    _maintenanceModeVars = [];
    
    _dir = 90;
    _pos = [0,0,0];
    _wsDone = false;
    _wsCount = count _worldspace;

    //Vector building
    _vector = [[0,0,0],[0,0,0]];
    _vecExists = false;
    _ownerPUID = "0";

    if (_wsCount >= 2) then {
        _dir = _worldspace select 0;
        _posATL = _worldspace select 1;
        if (count _posATL == 3) then {
            _pos = _posATL;
            _wsDone = true;                    
        };
        if (_wsCount >= 3) then{
            _ws2TN = typename (_worldspace select 2);
            _ws3TN = typename (_worldspace select 3);
            if (_wsCount == 3) then{
                    if (_ws2TN == "STRING") then{
                        _ownerPUID = _worldspace select 2;
                    } else {
                         if (_ws2TN == "ARRAY") then{
                            _vector = _worldspace select 2;
                            _vecExists = true;
                        };                  
                    };
            } else {
                if (_wsCount == 4) then{
                    if (_ws3TN == "STRING") then{
                        _ownerPUID = _worldspace select 3;
                    } else {
                        if (_ws2TN == "STRING") then{
                            _ownerPUID = _worldspace select 2;
                        };
                    };
                    if (_ws2TN == "ARRAY") then{
                        _vector = _worldspace select 2;
                        _vecExists = true;
                    } else {
                        if (_ws3TN == "ARRAY") then{
                            _vector = _worldspace select 3;
                            _vecExists = true;
                        };
                    };
                };
            };
        } else {
            _worldspace set [count _worldspace, "0"];
        };
    };

    if (!_wsDone) then {
        if ((count _posATL) >= 2) then {
            _pos = [_posATL select 0,_posATL select 1,0];
            diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: %4",_idKey,_type,_worldspace,_pos];
        } else {
            diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: [0,0,0]",_idKey,_type,_worldspace];
        };
    };

    //diag_log format["OBJ: %1 - %2,%3,%4,%5,%6,%7,%8", _idKey,_type,_ownerID,_worldspace,_inventory,_hitPoints,_fuel,_damage];
    /*
        if (_type in _tempMaint) then {
            //Use hitpoints for Maintenance system and other systems later.
            //Enable model swap for a damaged model.
            if ("Maintenance" in _hitPoints) then {
                _maintenanceModeVars = [_type,_pos];
                _type = _type + "_Damaged";
            };    
            //TODO add remove object and readd old fence (hideobject would be nice to use here :-( )
            //Pending change to new fence models\Layout
        };
    */
        _nonCollide = _type in DayZ_nonCollide;    
        //Create it
        if (_nonCollide) then {
            _object = createVehicle [_type, [0,0,0], [], 0, "NONE"];
        } else {
            _object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array
        };
        _object setDir _dir;
        _object setPosATL _pos;
        _object setDamage _damage;
        if (_vecExists) then {
            _object setVectorDirAndUp _vector;
        };
        _object enableSimulation false;

        _doorLocked = _type in DZE_DoorsLocked;
        _isPlot = _type == "Plastic_Pole_EP1_DZ";
        
        // prevent immediate hive write when vehicle parts are set up
        _object setVariable ["lastUpdate",diag_ticktime];
        _object setVariable ["ObjectID", _idKey, true];
        _object setVariable ["OwnerPUID", _ownerPUID, true];
        if (Z_SingleCurrency && {(_type in DZE_MoneyStorageClasses) || (_object isKindOf "AllVehicles")}) then {
            _object setVariable [Z_MoneyVariable, _storageMoney, true];
        };

        dayz_serverIDMonitor set [count dayz_serverIDMonitor,_idKey];
        
        if (!_wsDone) then {[_object,"position",true] call server_updateObject;};
        if (_type == "Base_Fire_DZ") then {_object spawn base_fireMonitor;};
        
        _isDZ_Buildable = _object isKindOf "DZ_buildables";
        _isTrapItem = _object isKindOf "TrapItems";
        _isSafeObject = _type in DayZ_SafeObjects;
        
        //Dont add inventory for traps.
        if (!_isDZ_Buildable && !_isTrapItem) then {
            clearWeaponCargoGlobal _object;
            clearMagazineCargoGlobal _object;
            clearBackpackCargoGlobal _object;
            if( (count _inventory > 0) && !_isPlot && !_doorLocked) then {
                if (_type in DZE_LockedStorage) then {
                    // Do not send big arrays over network! Only server needs these
                    _object setVariable ["WeaponCargo",(_inventory select 0),false];
                    _object setVariable ["MagazineCargo",(_inventory select 1),false];
                    _object setVariable ["BackpackCargo",(_inventory select 2),false];
                } else {
                    _weaponcargo = _inventory select 0 select 0;
                    _magcargo = _inventory select 1 select 0;
                    _backpackcargo = _inventory select 2 select 0;
                   _weaponqty = _inventory select 0 select 1;
                    {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo;

                    _magqty = _inventory select 1 select 1;
                    {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];} foreach _magcargo;

                    _backpackqty = _inventory select 2 select 1;
                    {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
                };
            } else {
                if (DZE_permanentPlot && _isPlot) then {
                    _object setVariable ["plotfriends", _inventory, true];
                };
                if (DZE_doorManagement && _doorLocked) then {
                    _object setVariable ["doorfriends", _inventory, true];
                };
            };
        };
    if (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
        if (_object isKindOf "AllVehicles") then {
            _object setVariable ["CharacterID", _ownerID, true];
            _isAir = _object isKindOf "Air";
            {
                _selection = _x select 0;
                _dam = if (!_isAir && {_selection in dayZ_explosiveParts}) then {(_x select 1) min 0.8;} else {_x select 1;};
                _strH = "hit_" + (_selection);
                _object setHit[_selection,_dam];
                _object setVariable [_strH,_dam,true];
            } foreach _hitpoints;
            [_object,"damage"] call server_updateObject;

            _object setFuel _fuel;
            if (!_isSafeObject) then {
                _DZE_VehObjects set [count _DZE_VehObjects,_object]; 
                _object call fnc_veh_ResetEH;
                if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
                _serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle
            } else {
                _object enableSimulation true;
            };[_object] execVM "dayz_code\compile\server_deleteSafezones.sqf";
        } else {
            // Fix for leading zero issues on safe codes after restart
            _lockable = getNumber (configFile >> "CfgVehicles" >> _type >> "lockable");
            _codeCount = count (toArray _ownerID);
            switch (_lockable) do {
                case 4: {
                    switch (_codeCount) do {
                        case 3: {_ownerID = format["0%1",_ownerID];};
                        case 2: {_ownerID = format["00%1",_ownerID];};
                        case 1: {_ownerID = format["000%1",_ownerID];};
                    };
                };
                case 3: {
                    switch (_codeCount) do {
                        case 2: {_ownerID = format["0%1",_ownerID];};
                        case 1: {_ownerID = format["00%1",_ownerID];};
                    };
                };
            };
            _object setVariable ["CharacterID", _ownerID, true];
            if (_isDZ_Buildable || {(_isSafeObject && !_isTrapItem)}) then {
                _object setVariable["memDir",_dir,true];
                if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then {
                    _object addEventHandler ["HandleDamage",{false}];
                } else {
                    _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
                };
                _object setVariable ["OEMPos",_pos,true]; // used for inplace upgrades and lock/unlock of safe
            } else {
                _object enableSimulation true;
            };
            if (_isDZ_Buildable || {_isTrapItem}) then {
                //Use inventory for owner/clan info and traps armed state
                {
                    _xTypeName = typeName _x;
                    switch (_xTypeName) do {
                        case "ARRAY": {
                            _x1 = _x select 1;
                            switch (_x select 0) do {
                                case "ownerArray" : { _object setVariable ["ownerArray", _x1, true]; };
                                case "clanArray" : { _object setVariable ["clanArray", _x1, true]; };
                                case "armed" : { _object setVariable ["armed", _x1, true]; };
                                case "padlockCombination" : { _object setVariable ["dayz_padlockCombination", _x1, false]; };
                                case "BuildLock" : { _object setVariable ["BuildLock", _x1, true]; };
                            };
                        };
                        case "STRING": {_object setVariable ["ownerArray", [_x], true]; };
                        case "BOOLEAN": {_object setVariable ["armed", _x, true]};
                    };
                } foreach _inventory;
                
                if (_maintenanceMode) then { _object setVariable ["Maintenance", true, true]; _object setVariable ["MaintenanceVars", _maintenanceModeVars]; };
            };
        };
        dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; //Monitor the object
} forEach _myArray;

//enable simulation on vehicles after all buildables are spawned
{
    _x enableSimulation true;
    _x setVelocity [0,0,1];
} forEach _DZE_VehObjects;

diag_log format["HIVE: BENCHMARK - Server_monitor.sqf finished streaming %1 objects in %2 seconds (unscheduled)",_val,diag_tickTime - _timeStart];

// # END OF STREAMING #
processInitCommands;
if (dayz_townGenerator) then {
    call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_plantSpawner.sqf"; // Draw the pseudo random seeds
};

[] execFSM "\z\addons\dayz_server\system\server_vehicleSync.fsm"; 
[] execVM "\z\addons\dayz_server\system\scheduler\sched_init.sqf"; // launch the new task scheduler

createCenter civilian;

actualSpawnMarkerCount = 0;
// count valid spawn markers, since different maps have different amounts
for "_i" from 0 to 10 do {
    if ((getMarkerPos format["spawn%1",_i]) distance [0,0,0] > 0) then {
        actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
    } else {
        _i = 11; // exit since we did not find any further markers 
    };
};
diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];

if (isDedicated) then {endLoadingScreen;};
allowConnection = true;
sm_done = true;
publicVariable "sm_done";

// Trap loop
[] spawn {
    private ["_array","_array2","_array3","_script","_armed"];
    _array = str dayz_traps;
    _array2 = str dayz_traps_active;
    _array3 = str dayz_traps_trigger;

    while {1 == 1} do {
        if ((str dayz_traps != _array) || (str dayz_traps_active != _array2) || (str dayz_traps_trigger != _array3)) then {
            _array = str dayz_traps;
            _array2 = str dayz_traps_active;
            _array3 = str dayz_traps_trigger;
            //diag_log "DEBUG: traps";
            //diag_log format["dayz_traps (%2) -> %1", dayz_traps, count dayz_traps];
            //diag_log format["dayz_traps_active (%2) -> %1", dayz_traps_active, count dayz_traps_active];
            //diag_log format["dayz_traps_trigger (%2) -> %1", dayz_traps_trigger, count dayz_traps_trigger];
            //diag_log "DEBUG: end traps";
        };

        {
            if (isNull _x) then {
                dayz_traps = dayz_traps - [_x];
                _armed = false;
                _script = {};
            } else {
                _armed = _x getVariable ["armed", false];
                _script = call compile getText (configFile >> "CfgVehicles" >> typeOf _x >> "script");
            };
            
            if (_armed) then {
                if !(_x in dayz_traps_active) then {["arm", _x] call _script;};
            } else {
                if (_x in dayz_traps_active) then {["disarm", _x] call _script;};
            };
            uiSleep 0.01;
        } forEach dayz_traps;
        uiSleep 1;
    };
};

//Points of interest
//[] execVM "\z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf"; //Adds random spawned camps in the woods with corpses and loot tents (negatively impacts FPS)
[] execVM "\z\addons\dayz_server\compile\server_spawnCarePackages.sqf";
[] execVM "\z\addons\dayz_server\compile\server_spawnCrashSites.sqf";

if (dayz_townGenerator) then {execVM "\z\addons\dayz_server\system\lit_fireplaces.sqf";};

"PVDZ_sec_atp" addPublicVariableEventHandler {
    _x = _this select 1;
    switch (1==1) do {
        case (typeName (_x select 0) == "SCALAR") : { // just some logs from the client
            diag_log (toString _x);
        };
        case (count _x == 2) : { // wrong side
            diag_log format["P1ayer %1 reports possible 'side' hack. Server may be compromised!",(_x select 1) call fa_plr2Str];
        };
        default { // player hit
_unit = _x select 0;
_source = _x select 1;
_victim_pos = getPosATL _unit;
_agressor_pos = getPosATL _source;
if (!isNull _source) then {
diag_log format ["P1ayer %1%7(%8) hit by %2%9(%10) %3 from %4 meters in %5 for %6 damage",
_unit call fa_plr2Str, _source call fa_plr2Str, toString (_x select 2), _x select 3, _x select 4, _x select 5, _victim_pos, mapGridPosition(_victim_pos), _agressor_pos, mapGridPosition(_agressor_pos)];
};
};
};
};

"PVDZ_objgather_Knockdown" addPublicVariableEventHandler {
    _tree = (_this select 1) select 0;
    _player = (_this select 1) select 1;
    _dis = _player distance _tree;
    _name = if (alive _player) then {name _player} else {"DeadPlayer"};
    _uid = getPlayerUID _player;
    _treeModel = _tree call fn_getModelName;

    if ((_dis < 30) && (_treeModel in dayz_trees) && (_uid != "")) then {
        _tree setDamage 1;
        dayz_choppedTrees set [count dayz_choppedTrees,_tree];
        diag_log format["Server setDamage on tree %1 chopped down by %2(%3)",_treeModel,_name,_uid];
    };
};

// preload server traders menu data into cache
if !(DZE_ConfigTrader) then {
    {
        // get tids
        _traderData = call compile format["menu_%1;",_x];
        if (!isNil "_traderData") then {
            {
                _traderid = _x select 1;
                _retrader = [];

                _key = format["CHILD:399:%1:",_traderid];
                _data = "HiveEXT" callExtension _key;
                _result = call compile format["%1",_data];
                _status = _result select 0;
        
                if (_status == "ObjectStreamStart") then {
                    _val = _result select 1;
                    call compile format["ServerTcache_%1 = [];",_traderid];
                    for "_i" from 1 to _val do {
                        _data = "HiveEXT" callExtension _key;
                        _result = call compile format ["%1",_data];
                        call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
                        _retrader set [count _retrader,_result];
                    };
                };
            } forEach (_traderData select 0);
        };
    } forEach serverTraders;
};

if (_hiveLoaded) then {
    _serverVehicleCounter spawn {
        //  spawn_vehicles
        // Get all buildings and roads only once. Very taxing, but only on first startup
        _serverVehicleCounter = _this;
        _vehiclesToUpdate = [];
        _startTime = diag_tickTime;
        _buildingList = [];
        _cfgLootFile = missionConfigFile >> "CfgLoot" >> "Buildings";
        {
            if (isClass (_cfgLootFile >> typeOf _x)) then {
                _buildingList set [count _buildingList,_x];
            };
        } count (getMarkerPos "center" nearObjects ["building",((getMarkerSize "center") select 1)]);
        _roadList = getMarkerPos "center" nearRoads ((getMarkerSize "center") select 1);
        
        _vehLimit = MaxVehicleLimit - (count _serverVehicleCounter);
        if (_vehLimit > 0) then {
            diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
            for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
        } else {
            diag_log "HIVE: Vehicle Spawn limit reached!";
            _vehLimit = 0;
        };
        
        if (dayz_townGenerator) then {
            // Vanilla town generator spawns debris locally on each client
            MaxDynamicDebris = 0;
        } else {
            // Epoch global dynamic debris
            diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
            for "_x" from 1 to MaxDynamicDebris do {call spawn_roadblocks;};
        };

        diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
        for "_x" from 1 to MaxAmmoBoxes do {call spawn_ammosupply;};

        diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
        for "_x" from 1 to MaxMineVeins do {call spawn_mineveins;};
        
        diag_log format["HIVE: BENCHMARK - Server finished spawning %1 DynamicVehicles, %2 Debris, %3 SupplyCrates and %4 MineVeins in %5 seconds (scheduled)",_vehLimit,MaxDynamicDebris,MaxAmmoBoxes,MaxMineVeins,diag_tickTime - _startTime];
        
        //Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
        {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
    };
};

[] spawn server_spawnEvents;
/* //Causes issues with changing clothes
_debugMarkerPosition = [(respawn_west_original select 0),(respawn_west_original select 1),1];
_vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
_vehicle_0 setPos _debugMarkerPosition;
_vehicle_0 setVariable ["ObjectID","1",true];
*/
 

 

Link to comment
Share on other sites

On 12/16/2017 at 1:56 PM, Shelf74 said:

I have one little problem. Suv skins scripr work allright. but I dont sell suv with skins at trader. epoch 1061

server_publishVehicle2.sqf

  Reveal hidden contents

private ["_activatingPlayer","_isOK","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey"];
//PVDZE_veh_Publish2 = [[_dir,_location],_part_out,false,_keySelected,_activatingPlayer];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

_worldspace =     _this select 0;
_class =         _this select 1;
_donotusekey =    _this select 2;
_keySelected =  _this select 3;
_activatingPlayer =  _this select 4;

if(_donotusekey) then {
    _isOK = true;
} else {
    _isOK = isClass(configFile >> "CfgWeapons" >> _keySelected);
};

if(!_isOK) exitWith { diag_log ("HIVE: CARKEY DOES NOT EXIST: "+ str(_keySelected));  };

if(_donotusekey) then {
    _characterID = _keySelected;
} else {
    _characterID = str(getNumber(configFile >> "CfgWeapons" >> _keySelected >> "keyid"));
};

_dir =         _worldspace select 0;
_location = _worldspace select 1;
_uid = _worldspace call dayz_objectUID2;

//Send request
_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid];

#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key)); 
#endif

_key call server_hiveWrite;

// Switched to spawn so we can wait a bit for the ID
[_uid,_characterID,_class,_dir,_location,_donotusekey,_activatingPlayer] spawn {
   private ["_object","_uid","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_location","_object_para","_donotusekey","_activatingPlayer"];

   _uid = _this select 0;
   _characterID = _this select 1;
   _class = _this select 2;
   //_dir = _this select 3;
   _location = _this select 4;
   _donotusekey = _this select 5;
   _activatingPlayer = _this select 6;

   _done = false;
    _retry = 0;
    // TODO: Needs major overhaul for 1.1
    while {_retry < 10} do {
        // GET DB ID
        _key = format["CHILD:388:%1:",_uid];
        #ifdef OBJECT_DEBUG
        diag_log ("HIVE: WRITE: "+ str(_key));
        #endif
        
        _result = _key call server_hiveReadWrite;
        _outcome = _result select 0;
        if (_outcome == "PASS") then {
            _oid = _result select 1;
            #ifdef OBJECT_DEBUG
            diag_log("CUSTOM: Selected " + str(_oid));
            #endif
            
            _done = true;
            _retry = 100;

        } else {
            diag_log("CUSTOM: trying again to get id for: " + str(_uid));
            _done = false;
            _retry = _retry + 1;
            uiSleep 1;
        };
    };

    if(!_done) exitWith { diag_log("CUSTOM: failed to get id for : " + str(_uid)); };

    if(DZE_TRADER_SPAWNMODE) then {
        //_object_para = createVehicle ["ParachuteMediumWest", [0,0,0], [], 0, "CAN_COLLIDE"];
        _object_para = "ParachuteMediumWest" createVehicle [0,0,0];
        _object_para setPos [_location select 0, _location select 1,(_location select 2) + 65];
        //_object = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
        _object = _class createVehicle [0,0,0];
    } else {
        //_object = createVehicle [_class, _location, [], 0, "CAN_COLLIDE"];
        // Don't use setPos or CAN_COLLIDE here. It will spawn inside other vehicles
        _object = _class createVehicle _location;
    };
    _type = typeof _object;
    if  (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
    if(!_donotusekey) then {
        // Lock vehicle
        _object setvehiclelock "locked";
    };

    clearWeaponCargoGlobal  _object;
    clearMagazineCargoGlobal  _object;
    dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];
    _object setVariable ["ObjectID", _oid, true];
    _object setVariable ["lastUpdate",time];
    _object setVariable ["CharacterID", _characterID, true];
    
    //годмод
    _szs = _activatingPlayer getVariable ['inSafeZone',0];
    if (_szs == 1) then
    {
        [_object] spawn
        {
            _object = _this select 0;
            player_fired = {
                deleteVehicle (nearestObject [_this select 0,_this select 4]);
                cutText ['You can not fire in a SafeZone!','WHITE IN'];
            };
            zombie_generate = {};
        
            fnc_usec_damageHandler = {};
            
            _object removeAllEventHandlers 'Fired';
            _object addEventHandler ['Fired', {_this call player_fired;}];
            {
                _x removeAllEventHandlers 'Fired';
                _x addEventHandler ['Fired', {_this call player_fired;}];
            } forEach (crew _object);
            fnc_veh_handleDam = {false};
            _object removeAllEventHandlers 'HandleDamage';
            _object addeventhandler ['HandleDamage',{ _this call fnc_veh_handleDam } ];
            _object allowDamage false;
        };
    };
    diag_log format["server_publishVehicle.sqf:%1",typeof _object];
    
    //_object setVelocity [0,0,1];

    if(DZE_TRADER_SPAWNMODE) then {
        _object attachTo [_object_para, [0,0,-1.6]];
        uiSleep 1;
        WaitUntil{(([_object] call FNC_GetPos) select 2) < 0.1};
        detach _object;
        deleteVehicle _object_para;
    };
    
    _object call fnc_veh_ResetEH;
    
    // for non JIP users this should make sure everyone has eventhandlers for vehicles.
    PVDZE_veh_Init = _object;
    publicVariable "PVDZE_veh_Init";
    processInitCommands;
    diag_log format["PUBLISH: %1(%2) bought %3 with ObjectUID %4",if (alive _activatingPlayer) then {name _activatingPlayer} else {"DeadPlayer"},getPlayerUID _activatingPlayer,_class,_uid];
};
 


server_publishVehicle3.sqf

  Reveal hidden contents

private ["_activatingPlayer","_isOK","_object","_worldspace","_location","_dir","_class","_uid","_key","_keySelected","_characterID","_donotusekey"];
//PVDZE_veh_Publish2 = [_veh,[_dir,_location],_part_out,false,_keySelected,_activatingPlayer];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

_object =         _this select 0;
_worldspace =     _this select 1;
_class =         _this select 2;
_donotusekey =    _this select 3;
_keySelected =  _this select 4;
_activatingPlayer =  _this select 5;
_characterID = _keySelected;

_isOK = isClass(configFile >> "CfgVehicles" >> _class);
if (!_isOK || isNull _object) exitWith {
    diag_log ("HIVE-pv3: Vehicle does not exist: "+ str(_class));
    dze_waiting = "fail";
    (owner _activatingPlayer) publicVariableClient "dze_waiting";
};

#ifdef OBJECT_DEBUG
diag_log ("PUBLISH: Attempt " + str(_object));
#endif

_dir =         _worldspace select 0;
_location = _worldspace select 1;
_uid = _worldspace call dayz_objectUID2;

//Send request
_key = format["CHILD:308:%1:%2:%3:%4:%5:%6:%7:%8:%9:",dayZ_instance, _class, 0 , _characterID, _worldspace, [], [], 1,_uid];
#ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: "+ str(_key)); 
#endif

_key call server_hiveWrite;

// Switched to spawn so we can wait a bit for the ID
[_object,_uid,_characterID,_class,_dir,_location,_donotusekey,_activatingPlayer] spawn {
   private ["_object","_uid","_characterID","_done","_retry","_key","_result","_outcome","_oid","_class","_location","_donotusekey","_activatingPlayer","_countr","_objectID","_objectUID","_dir","_newobject","_weapons","_magazines","_backpacks","_objWpnTypes","_objWpnQty"];

   _object = _this select 0;
   _objectID     = _object getVariable ["ObjectID","0"];
   _objectUID    = _object getVariable ["ObjectUID","0"];
   _uid = _this select 1;
   _characterID = _this select 2;
   _class = _this select 3;
   _dir = _this select 4;
   // _location = _this select 5;
   _location = getPosATL _object;
   _donotusekey = _this select 6;
   _activatingPlayer = _this select 7;

   _done = false;
    _retry = 0;
    // TODO: Needs major overhaul for 1.1
    while {_retry < 10} do {
        // GET DB ID
        _key = format["CHILD:388:%1:",_uid];
        #ifdef OBJECT_DEBUG
        diag_log ("HIVE: WRITE: "+ str(_key));
        #endif
        
        _result = _key call server_hiveReadWrite;
        _outcome = _result select 0;
        if (_outcome == "PASS") then {
            _oid = _result select 1;
            //_object setVariable ["ObjectID", _oid, true];
            #ifdef OBJECT_DEBUG
            diag_log("CUSTOM: Selected " + str(_oid));
            #endif
            
            _done = true;
            _retry = 100;

        } else {
            diag_log("CUSTOM: trying again to get id for: " + str(_uid));
            _done = false;
            _retry = _retry + 1;
            uiSleep 1;
        };
    };

    if (!_done) exitWith {
        diag_log("HIVE-pv3: failed to get id for : " + str(_uid));
        _key = format["CHILD:310:%1:",_uid];
        _key call server_hiveWrite;
        
        dze_waiting = "fail";
        (owner _activatingPlayer) publicVariableClient "dze_waiting";
    };

    // add items from previous vehicle here
    _weapons =         getWeaponCargo _object;
    _magazines =     getMagazineCargo _object;
    _backpacks =     getBackpackCargo _object;

    clearWeaponCargoGlobal  _object;
    clearMagazineCargoGlobal  _object;
    clearBackpackCargoGlobal _object;

    // Remove marker
    deleteVehicle _object;

    //_newobject = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
    _newobject = _class createVehicle [0,0,0];

    // remove old vehicle from DB
    [_objectID,_objectUID,_activatingPlayer] call server_deleteObj;

    // switch var to new vehicle at this point.
    _object = _newobject;

    _object setDir _dir;
    _object setPosATL _location;
                        
    //Add weapons
    _objWpnTypes =     _weapons select 0;
    _objWpnQty =     _weapons select 1;
    _countr = 0;
    {
        _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;
    if (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
    //Add Magazines
    _objWpnTypes = _magazines select 0;
    _objWpnQty = _magazines select 1;
    _countr = 0;
    {
        _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;

    //Add Backpacks
    _objWpnTypes = _backpacks select 0;
    _objWpnQty = _backpacks select 1;
    _countr = 0;
    {
        _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)];
        _countr = _countr + 1;
    } count _objWpnTypes;

    _object setVariable ["ObjectID", _oid, true];
    _object setVariable ["lastUpdate",time];
    _object setVariable ["CharacterID", _characterID, true];

    dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object];

    _object call fnc_veh_ResetEH;
    
    // for non JIP users this should make sure everyone has eventhandlers for vehicles.
    PVDZE_veh_Init = _object;
    publicVariable "PVDZE_veh_Init";
    
    dze_waiting = "success";
    (owner _activatingPlayer) publicVariableClient "dze_waiting";
    processInitCommands;
    diag_log ("PUBLISH: " + str(_activatingPlayer) + " Upgraded " + (_class) + " with ID " + str(_uid));
};
 

server_monitor.sqf

  Reveal hidden contents

private ["_date","_year","_month","_day","_hour","_minute","_date1","_key","_objectCount","_dir","_point","_i","_action","_dam","_selection","_wantExplosiveParts","_entity","_worldspace","_damage","_booleans","_rawData","_ObjectID","_class","_CharacterID","_inventory","_hitpoints","_fuel","_id","_objectArray","_script","_result","_outcome","_shutdown","_res"];
[] execVM "\z\addons\dayz_server\system\s_fps.sqf"; //server monitor FPS (writes each ~181s diag_fps+181s diag_fpsmin*)
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

waitUntil {!isNil "BIS_MPF_InitDone" && initialized};
if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
sm_done = false;

_legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation.

dayz_serverIDMonitor = [];
_DZE_VehObjects = [];
dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
_hiveLoaded = false;
_serverVehicleCounter = [];
_tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
diag_log "HIVE: Starting";

//Set the Time
_key = "CHILD:307:";
_result = _key call server_hiveReadWrite;
_outcome = _result select 0;
if (_outcome == "PASS") then {
    _date = _result select 1;
    _year = _date select 0;
    _month = _date select 1;
    _day = _date select 2;
    _hour = _date select 3;
    _minute = _date select 4;

    if (dayz_ForcefullmoonNights) then {_date = [2012,8,2,_hour,_minute];};
    diag_log ["TIME SYNC: Local Time set to:", _date, "Fullmoon:",dayz_ForcefullmoonNights,"Date given by HiveExt.dll:",_result select 1];
    setDate _date;
    dayzSetDate = _date;
    publicVariable "dayzSetDate";
};

//Stream in objects
/* STREAM OBJECTS */
//Send the key
_timeStart = diag_tickTime;

for "_i" from 1 to 5 do {
    diag_log "HIVE: trying to get objects";
    _key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod];
    _result = _key call server_hiveReadWrite;  
    if (typeName _result == "STRING") then {
        _shutdown = format["CHILD:400:%1:",(profileNamespace getVariable "SUPERKEY")];
        _res = _shutdown call server_hiveReadWrite;
        diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
    } else {
        diag_log ("HIVE: found "+str(_result select 1)+" objects" );
        _i = 99; // break
    };
};

if (typeName _result == "STRING") exitWith {
    diag_log "HIVE: Connection error. Server_monitor.sqf is exiting.";
};    

diag_log "HIVE: Request sent";
_myArray = [];
_val = 0;
_status = _result select 0; //Process result
_val = _result select 1;
if (_legacyStreamingMethod) then {
    if (_status == "ObjectStreamStart") then {
        profileNamespace setVariable ["SUPERKEY",(_result select 2)];
        _hiveLoaded = true;
        //Stream Objects
        diag_log ("HIVE: Commence Object Streaming...");
        for "_i" from 1 to _val do  {
            _result = _key call server_hiveReadWriteLarge;
            _status = _result select 0;
            _myArray set [count _myArray,_result];
        };
    };
} else {
    if (_val > 0) then {
        _fileName = _key call server_hiveReadWrite;
        _lastFN = profileNamespace getVariable["lastFN",""];
        profileNamespace setVariable["lastFN",_fileName];
        saveProfileNamespace;
        if (_status == "ObjectStreamStart") then {
            profileNamespace setVariable ["SUPERKEY",(_result select 2)];
            _hiveLoaded = true;
            _myArray = Call Compile PreProcessFile _fileName;
            _key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod];
            _result = _key call server_hiveReadWrite; //deletes previous object data dump
        };
    } else {
        if (_status == "ObjectStreamStart") then {
            profileNamespace setVariable ["SUPERKEY",(_result select 2)];
            _hiveLoaded = true;
        };
    };
};

diag_log ("HIVE: Streamed " + str(_val) + " objects");

// Don't spawn objects if no clients are online (createVehicle fails with Ref to nonnetwork object)
if ((playersNumber west + playersNumber civilian) == 0) exitWith {
    diag_log "All clients disconnected. Server_monitor.sqf is exiting.";
};

{
    private ["_object","_posATL"];
    //Parse Array
    _action =         _x select 0; 
    _idKey =         _x select 1;
    _type =            _x select 2;
    _ownerID =         _x select 3;
    _worldspace =     _x select 4;
    _inventory =    _x select 5;
    _hitPoints =    _x select 6;
    _fuel =            _x select 7;
    _damage =         _x select 8;
    _storageMoney = _x select 9;

    //set object to be in maintenance mode
    _maintenanceMode = false;
    _maintenanceModeVars = [];
    
    _dir = 90;
    _pos = [0,0,0];
    _wsDone = false;
    _wsCount = count _worldspace;

    //Vector building
    _vector = [[0,0,0],[0,0,0]];
    _vecExists = false;
    _ownerPUID = "0";

    if (_wsCount >= 2) then {
        _dir = _worldspace select 0;
        _posATL = _worldspace select 1;
        if (count _posATL == 3) then {
            _pos = _posATL;
            _wsDone = true;                    
        };
        if (_wsCount >= 3) then{
            _ws2TN = typename (_worldspace select 2);
            _ws3TN = typename (_worldspace select 3);
            if (_wsCount == 3) then{
                    if (_ws2TN == "STRING") then{
                        _ownerPUID = _worldspace select 2;
                    } else {
                         if (_ws2TN == "ARRAY") then{
                            _vector = _worldspace select 2;
                            _vecExists = true;
                        };                  
                    };
            } else {
                if (_wsCount == 4) then{
                    if (_ws3TN == "STRING") then{
                        _ownerPUID = _worldspace select 3;
                    } else {
                        if (_ws2TN == "STRING") then{
                            _ownerPUID = _worldspace select 2;
                        };
                    };
                    if (_ws2TN == "ARRAY") then{
                        _vector = _worldspace select 2;
                        _vecExists = true;
                    } else {
                        if (_ws3TN == "ARRAY") then{
                            _vector = _worldspace select 3;
                            _vecExists = true;
                        };
                    };
                };
            };
        } else {
            _worldspace set [count _worldspace, "0"];
        };
    };

    if (!_wsDone) then {
        if ((count _posATL) >= 2) then {
            _pos = [_posATL select 0,_posATL select 1,0];
            diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: %4",_idKey,_type,_worldspace,_pos];
        } else {
            diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: [0,0,0]",_idKey,_type,_worldspace];
        };
    };

    //diag_log format["OBJ: %1 - %2,%3,%4,%5,%6,%7,%8", _idKey,_type,_ownerID,_worldspace,_inventory,_hitPoints,_fuel,_damage];
    /*
        if (_type in _tempMaint) then {
            //Use hitpoints for Maintenance system and other systems later.
            //Enable model swap for a damaged model.
            if ("Maintenance" in _hitPoints) then {
                _maintenanceModeVars = [_type,_pos];
                _type = _type + "_Damaged";
            };    
            //TODO add remove object and readd old fence (hideobject would be nice to use here :-( )
            //Pending change to new fence models\Layout
        };
    */
        _nonCollide = _type in DayZ_nonCollide;    
        //Create it
        if (_nonCollide) then {
            _object = createVehicle [_type, [0,0,0], [], 0, "NONE"];
        } else {
            _object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array
        };
        _object setDir _dir;
        _object setPosATL _pos;
        _object setDamage _damage;
        if (_vecExists) then {
            _object setVectorDirAndUp _vector;
        };
        _object enableSimulation false;

        _doorLocked = _type in DZE_DoorsLocked;
        _isPlot = _type == "Plastic_Pole_EP1_DZ";
        
        // prevent immediate hive write when vehicle parts are set up
        _object setVariable ["lastUpdate",diag_ticktime];
        _object setVariable ["ObjectID", _idKey, true];
        _object setVariable ["OwnerPUID", _ownerPUID, true];
        if (Z_SingleCurrency && {(_type in DZE_MoneyStorageClasses) || (_object isKindOf "AllVehicles")}) then {
            _object setVariable [Z_MoneyVariable, _storageMoney, true];
        };

        dayz_serverIDMonitor set [count dayz_serverIDMonitor,_idKey];
        
        if (!_wsDone) then {[_object,"position",true] call server_updateObject;};
        if (_type == "Base_Fire_DZ") then {_object spawn base_fireMonitor;};
        
        _isDZ_Buildable = _object isKindOf "DZ_buildables";
        _isTrapItem = _object isKindOf "TrapItems";
        _isSafeObject = _type in DayZ_SafeObjects;
        
        //Dont add inventory for traps.
        if (!_isDZ_Buildable && !_isTrapItem) then {
            clearWeaponCargoGlobal _object;
            clearMagazineCargoGlobal _object;
            clearBackpackCargoGlobal _object;
            if( (count _inventory > 0) && !_isPlot && !_doorLocked) then {
                if (_type in DZE_LockedStorage) then {
                    // Do not send big arrays over network! Only server needs these
                    _object setVariable ["WeaponCargo",(_inventory select 0),false];
                    _object setVariable ["MagazineCargo",(_inventory select 1),false];
                    _object setVariable ["BackpackCargo",(_inventory select 2),false];
                } else {
                    _weaponcargo = _inventory select 0 select 0;
                    _magcargo = _inventory select 1 select 0;
                    _backpackcargo = _inventory select 2 select 0;
                   _weaponqty = _inventory select 0 select 1;
                    {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo;

                    _magqty = _inventory select 1 select 1;
                    {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];} foreach _magcargo;

                    _backpackqty = _inventory select 2 select 1;
                    {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
                };
            } else {
                if (DZE_permanentPlot && _isPlot) then {
                    _object setVariable ["plotfriends", _inventory, true];
                };
                if (DZE_doorManagement && _doorLocked) then {
                    _object setVariable ["doorfriends", _inventory, true];
                };
            };
        };
    if (_type == "SUV_TK_CIV_EP1_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_TK_CIV_EP1_DZE4.jpg''];';};
    if    (_type == "SUV_Charcoal_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Charcoal_DZE4.jpg''];';};
    if    (_type == "SUV_Green_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Green_DZE4.jpg''];';};
    if    (_type == "SUV_Yellow_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Yellow_DZE4.jpg''];';};
    if    (_type == "SUV_White_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_White_DZE4.jpg''];';};
    if    (_type == "SUV_Silver_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Silver_DZE4.jpg''];';};
    if    (_type == "SUV_Red_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Red_DZE4.jpg''];';};
    if    (_type == "SUV_Pink_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Pink_DZE4.jpg''];';};
    if    (_type == "SUV_Orange_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Orange_DZE4.jpg''];';};
    if    (_type == "SUV_Blue_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Blue_DZE4.jpg''];';};
    if    (_type == "SUV_Camo_DZE4") then {_object setVehicleInit 'this setObjectTexture [0, ''scripts\SUVskins\SUV_Camo_DZE4.jpg''];';};
        
        if (_object isKindOf "AllVehicles") then {
            _object setVariable ["CharacterID", _ownerID, true];
            _isAir = _object isKindOf "Air";
            {
                _selection = _x select 0;
                _dam = if (!_isAir && {_selection in dayZ_explosiveParts}) then {(_x select 1) min 0.8;} else {_x select 1;};
                _strH = "hit_" + (_selection);
                _object setHit[_selection,_dam];
                _object setVariable [_strH,_dam,true];
            } foreach _hitpoints;
            [_object,"damage"] call server_updateObject;

            _object setFuel _fuel;
            if (!_isSafeObject) then {
                _DZE_VehObjects set [count _DZE_VehObjects,_object]; 
                _object call fnc_veh_ResetEH;
                if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
                _serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle
            } else {
                _object enableSimulation true;
            };[_object] execVM "dayz_code\compile\server_deleteSafezones.sqf";
        } else {
            // Fix for leading zero issues on safe codes after restart
            _lockable = getNumber (configFile >> "CfgVehicles" >> _type >> "lockable");
            _codeCount = count (toArray _ownerID);
            switch (_lockable) do {
                case 4: {
                    switch (_codeCount) do {
                        case 3: {_ownerID = format["0%1",_ownerID];};
                        case 2: {_ownerID = format["00%1",_ownerID];};
                        case 1: {_ownerID = format["000%1",_ownerID];};
                    };
                };
                case 3: {
                    switch (_codeCount) do {
                        case 2: {_ownerID = format["0%1",_ownerID];};
                        case 1: {_ownerID = format["00%1",_ownerID];};
                    };
                };
            };
            _object setVariable ["CharacterID", _ownerID, true];
            if (_isDZ_Buildable || {(_isSafeObject && !_isTrapItem)}) then {
                _object setVariable["memDir",_dir,true];
                if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then {
                    _object addEventHandler ["HandleDamage",{false}];
                } else {
                    _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
                };
                _object setVariable ["OEMPos",_pos,true]; // used for inplace upgrades and lock/unlock of safe
            } else {
                _object enableSimulation true;
            };
            if (_isDZ_Buildable || {_isTrapItem}) then {
                //Use inventory for owner/clan info and traps armed state
                {
                    _xTypeName = typeName _x;
                    switch (_xTypeName) do {
                        case "ARRAY": {
                            _x1 = _x select 1;
                            switch (_x select 0) do {
                                case "ownerArray" : { _object setVariable ["ownerArray", _x1, true]; };
                                case "clanArray" : { _object setVariable ["clanArray", _x1, true]; };
                                case "armed" : { _object setVariable ["armed", _x1, true]; };
                                case "padlockCombination" : { _object setVariable ["dayz_padlockCombination", _x1, false]; };
                                case "BuildLock" : { _object setVariable ["BuildLock", _x1, true]; };
                            };
                        };
                        case "STRING": {_object setVariable ["ownerArray", [_x], true]; };
                        case "BOOLEAN": {_object setVariable ["armed", _x, true]};
                    };
                } foreach _inventory;
                
                if (_maintenanceMode) then { _object setVariable ["Maintenance", true, true]; _object setVariable ["MaintenanceVars", _maintenanceModeVars]; };
            };
        };
        dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; //Monitor the object
} forEach _myArray;

//enable simulation on vehicles after all buildables are spawned
{
    _x enableSimulation true;
    _x setVelocity [0,0,1];
} forEach _DZE_VehObjects;

diag_log format["HIVE: BENCHMARK - Server_monitor.sqf finished streaming %1 objects in %2 seconds (unscheduled)",_val,diag_tickTime - _timeStart];

// # END OF STREAMING #
processInitCommands;
if (dayz_townGenerator) then {
    call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_plantSpawner.sqf"; // Draw the pseudo random seeds
};

[] execFSM "\z\addons\dayz_server\system\server_vehicleSync.fsm"; 
[] execVM "\z\addons\dayz_server\system\scheduler\sched_init.sqf"; // launch the new task scheduler

createCenter civilian;

actualSpawnMarkerCount = 0;
// count valid spawn markers, since different maps have different amounts
for "_i" from 0 to 10 do {
    if ((getMarkerPos format["spawn%1",_i]) distance [0,0,0] > 0) then {
        actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
    } else {
        _i = 11; // exit since we did not find any further markers 
    };
};
diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];

if (isDedicated) then {endLoadingScreen;};
allowConnection = true;
sm_done = true;
publicVariable "sm_done";

// Trap loop
[] spawn {
    private ["_array","_array2","_array3","_script","_armed"];
    _array = str dayz_traps;
    _array2 = str dayz_traps_active;
    _array3 = str dayz_traps_trigger;

    while {1 == 1} do {
        if ((str dayz_traps != _array) || (str dayz_traps_active != _array2) || (str dayz_traps_trigger != _array3)) then {
            _array = str dayz_traps;
            _array2 = str dayz_traps_active;
            _array3 = str dayz_traps_trigger;
            //diag_log "DEBUG: traps";
            //diag_log format["dayz_traps (%2) -> %1", dayz_traps, count dayz_traps];
            //diag_log format["dayz_traps_active (%2) -> %1", dayz_traps_active, count dayz_traps_active];
            //diag_log format["dayz_traps_trigger (%2) -> %1", dayz_traps_trigger, count dayz_traps_trigger];
            //diag_log "DEBUG: end traps";
        };

        {
            if (isNull _x) then {
                dayz_traps = dayz_traps - [_x];
                _armed = false;
                _script = {};
            } else {
                _armed = _x getVariable ["armed", false];
                _script = call compile getText (configFile >> "CfgVehicles" >> typeOf _x >> "script");
            };
            
            if (_armed) then {
                if !(_x in dayz_traps_active) then {["arm", _x] call _script;};
            } else {
                if (_x in dayz_traps_active) then {["disarm", _x] call _script;};
            };
            uiSleep 0.01;
        } forEach dayz_traps;
        uiSleep 1;
    };
};

//Points of interest
//[] execVM "\z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf"; //Adds random spawned camps in the woods with corpses and loot tents (negatively impacts FPS)
[] execVM "\z\addons\dayz_server\compile\server_spawnCarePackages.sqf";
[] execVM "\z\addons\dayz_server\compile\server_spawnCrashSites.sqf";

if (dayz_townGenerator) then {execVM "\z\addons\dayz_server\system\lit_fireplaces.sqf";};

"PVDZ_sec_atp" addPublicVariableEventHandler {
    _x = _this select 1;
    switch (1==1) do {
        case (typeName (_x select 0) == "SCALAR") : { // just some logs from the client
            diag_log (toString _x);
        };
        case (count _x == 2) : { // wrong side
            diag_log format["P1ayer %1 reports possible 'side' hack. Server may be compromised!",(_x select 1) call fa_plr2Str];
        };
        default { // player hit
_unit = _x select 0;
_source = _x select 1;
_victim_pos = getPosATL _unit;
_agressor_pos = getPosATL _source;
if (!isNull _source) then {
diag_log format ["P1ayer %1%7(%8) hit by %2%9(%10) %3 from %4 meters in %5 for %6 damage",
_unit call fa_plr2Str, _source call fa_plr2Str, toString (_x select 2), _x select 3, _x select 4, _x select 5, _victim_pos, mapGridPosition(_victim_pos), _agressor_pos, mapGridPosition(_agressor_pos)];
};
};
};
};

"PVDZ_objgather_Knockdown" addPublicVariableEventHandler {
    _tree = (_this select 1) select 0;
    _player = (_this select 1) select 1;
    _dis = _player distance _tree;
    _name = if (alive _player) then {name _player} else {"DeadPlayer"};
    _uid = getPlayerUID _player;
    _treeModel = _tree call fn_getModelName;

    if ((_dis < 30) && (_treeModel in dayz_trees) && (_uid != "")) then {
        _tree setDamage 1;
        dayz_choppedTrees set [count dayz_choppedTrees,_tree];
        diag_log format["Server setDamage on tree %1 chopped down by %2(%3)",_treeModel,_name,_uid];
    };
};

// preload server traders menu data into cache
if !(DZE_ConfigTrader) then {
    {
        // get tids
        _traderData = call compile format["menu_%1;",_x];
        if (!isNil "_traderData") then {
            {
                _traderid = _x select 1;
                _retrader = [];

                _key = format["CHILD:399:%1:",_traderid];
                _data = "HiveEXT" callExtension _key;
                _result = call compile format["%1",_data];
                _status = _result select 0;
        
                if (_status == "ObjectStreamStart") then {
                    _val = _result select 1;
                    call compile format["ServerTcache_%1 = [];",_traderid];
                    for "_i" from 1 to _val do {
                        _data = "HiveEXT" callExtension _key;
                        _result = call compile format ["%1",_data];
                        call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
                        _retrader set [count _retrader,_result];
                    };
                };
            } forEach (_traderData select 0);
        };
    } forEach serverTraders;
};

if (_hiveLoaded) then {
    _serverVehicleCounter spawn {
        //  spawn_vehicles
        // Get all buildings and roads only once. Very taxing, but only on first startup
        _serverVehicleCounter = _this;
        _vehiclesToUpdate = [];
        _startTime = diag_tickTime;
        _buildingList = [];
        _cfgLootFile = missionConfigFile >> "CfgLoot" >> "Buildings";
        {
            if (isClass (_cfgLootFile >> typeOf _x)) then {
                _buildingList set [count _buildingList,_x];
            };
        } count (getMarkerPos "center" nearObjects ["building",((getMarkerSize "center") select 1)]);
        _roadList = getMarkerPos "center" nearRoads ((getMarkerSize "center") select 1);
        
        _vehLimit = MaxVehicleLimit - (count _serverVehicleCounter);
        if (_vehLimit > 0) then {
            diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
            for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
        } else {
            diag_log "HIVE: Vehicle Spawn limit reached!";
            _vehLimit = 0;
        };
        
        if (dayz_townGenerator) then {
            // Vanilla town generator spawns debris locally on each client
            MaxDynamicDebris = 0;
        } else {
            // Epoch global dynamic debris
            diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
            for "_x" from 1 to MaxDynamicDebris do {call spawn_roadblocks;};
        };

        diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
        for "_x" from 1 to MaxAmmoBoxes do {call spawn_ammosupply;};

        diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
        for "_x" from 1 to MaxMineVeins do {call spawn_mineveins;};
        
        diag_log format["HIVE: BENCHMARK - Server finished spawning %1 DynamicVehicles, %2 Debris, %3 SupplyCrates and %4 MineVeins in %5 seconds (scheduled)",_vehLimit,MaxDynamicDebris,MaxAmmoBoxes,MaxMineVeins,diag_tickTime - _startTime];
        
        //Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
        {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
    };
};

[] spawn server_spawnEvents;
/* //Causes issues with changing clothes
_debugMarkerPosition = [(respawn_west_original select 0),(respawn_west_original select 1),1];
_vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
_vehicle_0 setPos _debugMarkerPosition;
_vehicle_0 setVariable ["ObjectID","1",true];
*/
 

 

Thats most likely because of he classname of the vehicle.

SUV_TK_CIV_EP1_DZE4  is the Upgraded version of the regular SUV which the classname would be SUV_TK_CIV_EP1_DZE. Notice the 4 is not there at the end.

You'll need to add those specific vehicles to your trader files.

Link to comment
Share on other sites

On 18.12.2017 at 3:29 AM, theduke said:

Thats most likely because of he classname of the vehicle.

SUV_TK_CIV_EP1_DZE4  is the Upgraded version of the regular SUV which the classname would be SUV_TK_CIV_EP1_DZE. Notice the 4 is not there at the end.

You'll need to add those specific vehicles to your trader files.

I dont think so.
config trader:
 

Spoiler

class Category_565 {
    class SUV_TK_CIV_EP1_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Charcoal_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Green_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Yellow_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_White_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Silver_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Red_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Pink_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Orange_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Blue_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Camo_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};    


 

 

Link to comment
Share on other sites

3 hours ago, Shelf74 said:

I dont think so.
config trader:
 

  Reveal hidden contents

class Category_565 {
    class SUV_TK_CIV_EP1_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Charcoal_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Green_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Yellow_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_White_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Silver_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Red_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Pink_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Orange_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Blue_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};
    class SUV_Camo_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"Coins"};sell[] = {10000,"Coins"};};    


 

 

your trader files seem wrong. If im not mistaken. its "worth" not "coins".

Link to comment
Share on other sites

5 hours ago, salival said:

Nah, that doesn't matter

would this be a possibility? seems fixed in 1062 when it comes out

[FIXED] Unable to sell upgraded _DZE[1-4] vehicle variants if their base vehicle class is removed from the trader configs

Link to comment
Share on other sites

On 21.12.2017 at 1:52 AM, theduke said:

your trader files seem wrong. If im not mistaken. its "worth" not "coins".

i replase Coins to worth.
no resault, suv dont's selling. but i can buy suv's with skin.
and i can sell item if i choose: Sell from vichel

 

Quote

[FIXED] Unable to sell upgraded _DZE[1-4] vehicle variants if their base vehicle class is removed from the trader configs

where is this file - trader configs

Link to comment
Share on other sites

4 hours ago, Shelf74 said:

i replase Coins to worth.
no resault, suv dont's selling. but i can buy suv's with skin.
and i can sell item if i choose: Sell from vichel

 

where is this file - trader configs

this means the base class of the vehicle must be in the trader files also. I would assume they are as they are there as default. unless you removed them.

 

SUV_Green_DZE4 < Fully upgraded

SUV_Green_DZE < Base Class

Link to comment
Share on other sites

1 hour ago, theduke said:

this means the base class of the vehicle must be in the trader files also. I would assume they are as they are there as default. unless you removed them.

 

SUV_Green_DZE4 < Fully upgraded

SUV_Green_DZE < Base Class

Spoiler

class Category_565 {
    class SUV_Green_DZE {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {5000,"worth"};};
    class SUV_Green_DZE4 {type = "trade_any_vehicle";buy[] = {20000,"worth"};sell[] = {5000,"worth"};};

dont working (((

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...