Jump to content
  • 0

randall421

Question

The loot spawning on my server will respawn or cycle right infrnt of you if you move more than 5m away or if someone else near you moves 5ft away. I check player_spawncheck.sqf and it looks fine. 

player_spawncheck.sqf 

//player_spawncheck.sqf 
private ["_isWreck","_maxControlledZombies","_looted","_zombied","_doNothing","_spawnZedRadius","_serverTime","_age","_nearbyBuildings","_position","_speed","_radius","_maxlocalspawned","_maxWeaponHolders","_currentWeaponHolders","_maxtoCreate","_inVehicle","_isAir","_isLand","_isSea","_Controlledzeddivided","_totalcrew","_nearby","_type","_config","_canSpawn","_dis","_checkLoot","_islocal","_bPos","_zombiesNum"];
_age = -1;
//_nearbyBuildings = [];
_position = [player] call fnc_getPos;
_speed = speed (vehicle player);
_radius = 200; //150*0.707; Pointless Processing (106.5)
_spawnZedRadius = 20;

/*
//Tick Time
PVDZ_getTickTime = player;
publicVariableServer "PVDZ_getTickTime";
*/

//Total Counts
_maxlocalspawned = round(dayz_spawnZombies);
_maxControlledZombies = round(dayz_maxLocalZombies);
_maxWeaponHolders = round(dayz_maxMaxWeaponHolders);
_currentWeaponHolders = round(dayz_currentWeaponHolders);

//Limits (Land,Sea,Air)
_inVehicle = (vehicle player != player);
/*
	_isAir = vehicle player iskindof "Air";
	_isLand =  vehicle player iskindof "Land";
	_isSea =  vehicle player iskindof "Sea";
	if (_isLand) then { } else {  };
	if (_isAir) then { } else {  };
	if (_isSea) then { } else {  };
*/

_doNothing = false;
if (_inVehicle) then {
    _Controlledzeddivided = 0;
    //exit if too fast
    if (_speed > 25) exitwith {_doNothing = true;};

    //Crew can spawn zeds.
    _totalcrew = count (crew (vehicle player));
    if (_totalcrew > 1) then {
        _Controlledzeddivided = 2;
        
        //Dont allow driver to spawn if we have other crew members.
        if (player == driver (vehicle player)) exitwith {_doNothing = true;};
    } else {
        _Controlledzeddivided = 4;
    };
    
    if (_Controlledzeddivided > 0) then {
        _maxControlledZombies = round(_maxControlledZombies / _Controlledzeddivided);
        r_player_divideinvehicle = _Controlledzeddivided;
    };
};

if (_doNothing) exitwith {};

/*if ("ItemMap_Debug" in items player) then {
	deleteMarkerLocal "MaxZeds";
	deleteMarkerLocal "Counter";
	deleteMarkerLocal "Loot30";
	deleteMarkerLocal "Loot120";
	deleteMarkerLocal "Agro80";

	_markerstr = createMarkerLocal ["MaxZeds", _position];
	_markerstr setMarkerColorLocal "ColorYellow";
	_markerstr setMarkerShapeLocal "ELLIPSE";
	_markerstr setMarkerBrushLocal "Border";
	_markerstr setMarkerSizeLocal [_radius, _radius];

	_markerstr1 = createMarkerLocal ["Counter", _position];
	_markerstr1 setMarkerColorLocal "ColorRed";
	_markerstr1 setMarkerShapeLocal "ELLIPSE";
	_markerstr1 setMarkerBrushLocal "Border";
	_markerstr1 setMarkerSizeLocal [_radius+100, _radius+100];

	_markerstr2 = createMarkerLocal ["Agro80", _position];
	_markerstr2 setMarkerColorLocal "ColorRed";
	_markerstr2 setMarkerShapeLocal "ELLIPSE";
	_markerstr2 setMarkerBrushLocal "Border";
	_markerstr2 setMarkerSizeLocal [80, 80];

	_markerstr2 = createMarkerLocal ["Loot30", _position];
	_markerstr2 setMarkerColorLocal "ColorRed";
	_markerstr2 setMarkerShapeLocal "ELLIPSE";
	_markerstr2 setMarkerBrushLocal "Border";
	_markerstr2 setMarkerSizeLocal [30, 30];

	_markerstr3 = createMarkerLocal ["Loot120", _position];
	_markerstr3 setMarkerColorLocal "ColorBlue";
	_markerstr3 setMarkerShapeLocal "ELLIPSE";
	_markerstr3 setMarkerBrushLocal "Border";
	_markerstr3 setMarkerSizeLocal [120, 120];

	diag_log ("LocalZombies: " +str(dayz_spawnZombies) + "/" +str(dayz_maxLocalZombies));

	//Logging
	diag_log (format["%1 Local.Agents: %2/%3, NearBy.Agents: %8/%9, Global.Agents: %6/%7, W.holders: %10/%11, (radius:%4m %5fps).","SpawnCheck",
		_maxlocalspawned, _maxControlledZombies, _radius, round diag_fpsmin,dayz_currentGlobalZombies, 
		dayz_maxGlobalZeds, dayz_CurrentNearByZombies, dayz_maxNearByZombies, _currentWeaponHolders,_maxWeaponHolders]);
};*/

// nearObjects is faster than nearestObjects when sorting by distance isn't needed
// "Building" includes House and all of its child classes (Crashsite, IC_Fireplace1, IC_Tent, etc.)
_nearby = _position nearObjects ["Building",_radius];
_maxlocalspawned = _maxlocalspawned max floor(_maxControlledZombies*.8);
if (_maxlocalspawned > 0) then { _spawnZedRadius = _spawnZedRadius * 3; };

//Spawn Zeds & loot in buildings
{
    _type = typeOf _x;
    _config = missionConfigFile >> "CfgLoot" >> "Buildings" >> _type;
    _canSpawn = isClass (_config);

    if (_canSpawn) then {
	    _dis = _x distance player;
		_checkLoot = (count (getArray (_config >> "lootPos"))) > 0;
		_islocal = _x getVariable ["", false]; // object created locally via TownGenerator.

		//Make sure wrecks always spawn Zeds
		_isWreck = _x isKindOf "CrashSite";
		
	//Loot
		if (getNumber(_config >> "lootChance") > 0) then {
			if (_currentWeaponHolders < _maxWeaponHolders) then {
				//Basic loot check
				if ((_dis < 125) and (_dis > 30) and !_inVehicle and _checkLoot) then {
					_serverTime = serverTime;
					_looted = (_x getVariable ["looted",_serverTime]);
					_age = _serverTime - _looted;
					//Building refresh rate
					if (_age == 0 or (_age > getNumber(_config >> "lootRefreshTimer"))) then { 
						_x setVariable ["looted",_serverTime,!_islocal];
						_x call building_spawnLoot;
						if (!(_x in dayz_buildingBubbleMonitor)) then {
							dayz_buildingBubbleMonitor set [count dayz_buildingBubbleMonitor, _x];
						};
						//diag_log [ diag_tickTime, "new loot at",_x,"age:", _age, "serverTime:", _serverTime];
					}/*
					else {
						diag_log [ diag_tickTime, "won't spawn loot at",_x,"age:", _age, "serverTime:", _serverTime];
					}*/;
				};
			};
		};

    //Zeds
		if (getNumber(_config >> "zombieChance") > 0) then {
			if (_dis > _spawnZedRadius) then {
				_serverTime = serverTime;
				_zombied = (_x getVariable ["zombieSpawn",_serverTime]);
				_age = _serverTime - _zombied;
				if ((_age == 0) or (_age > 300)) then { 			
					if (!_isWreck) then {
						if ((dayz_spawnZombies < _maxControlledZombies) and (dayz_CurrentNearByZombies < dayz_maxNearByZombies) and (dayz_currentGlobalZombies < dayz_maxGlobalZeds)) then {
							_bPos = getPosATL _x;
							_zombiesNum = count (_bPos nearEntities ["zZombie_Base",(((sizeOf _type) * 2) + 10)]);
						
							if (_zombiesNum == 0) then {    
								_x setVariable ["zombieSpawn",_serverTime,!_islocal];
								
								if (!(_x in dayz_buildingBubbleMonitor)) then {
									//add active zed to var
									dayz_buildingBubbleMonitor set [count dayz_buildingBubbleMonitor, _x];
								};
								
								//start spawn
								[_x] call building_spawnZombies;
							};							
							//diag_log (format["%1 building. %2", __FILE__, _x]);
						};
					} else {
						_bPos = getPosATL _x;
						_zombiesNum = count (_bPos nearEntities ["zZombie_Base",(((sizeOf _type) * 2) + 30)]);
						//Should be a wreck
					   if (_zombiesNum == 0) then { [_x,_isWreck] call building_spawnZombies; };
					};
				};
			};
		};
    };
} forEach _nearby;

At first I thought it was a respawn timer issue or something like that but if you don't move the loot will stay, you have to back away from it or someone else has to get within range and its not like you have to run away for this to happen, you can just back up a few steps and watch the loot change right infront of you. I have been playing around with it just trying to see if i can figure it out but if anyone knows what i should do or can at least point me in the right direction it would be a huge help.

 

Thanks

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Discord

×
×
  • Create New...