Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
CREATE DEFINER=`dayz`@`localhost` PROCEDURE `pSpawnVehicles`(IN `i` int)
BEGIN
#---------------------------------------------------------------
#Change this to affect the maximum number of vehicles on the server.
DECLARE MaxVehicles INT DEFAULT 80;
#Change this to affect the radius that is checked for existing vehicles when spawning.
#If set to 0 or negative vehicles will always spawn despite blocking vehicles.
DECLARE SearchRadius DOUBLE DEFAULT 10;
#---------------------------------------------------------------
DECLARE ServerInstance INT DEFAULT i;
DECLARE MaxNumSpawn INT DEFAULT MaxVehicles - countVehicles(ServerInstance);
DROP TEMPORARY TABLE IF EXISTS temp_objects;
CREATE TEMPORARY TABLE temp_objects AS
(
SELECT CONVERT(SUBSTRING(SUBSTRING_INDEX(@ws, ",", 2), LENGTH(SUBSTRING_INDEX(@ws, ",", 1)) + 2), DECIMAL(10, 5)) AS X,
CONVERT(SUBSTRING(SUBSTRING_INDEX(@ws, ",", 3), LENGTH(SUBSTRING_INDEX(@ws, ",", 2)) + 2), DECIMAL(10, 5)) AS Y
FROM object_data
WHERE CharacterID = 0
AND Instance = ServerInstance
AND (@ws := Worldspace) IS NOT NULL
AND (@ws := REPLACE(@ws, "[", "")) IS NOT NULL
AND (@ws := REPLACE(@ws, "]", "")) IS NOT NULL
);
DROP TEMPORARY TABLE IF EXISTS temp_locations;
CREATE TEMPORARY TABLE temp_locations AS
(
SELECT vehicle_locations.ID, temp2.Worldspace
FROM
(
SELECT Worldspace
FROM
(
SELECT Worldspace,
CONVERT(SUBSTRING(SUBSTRING_INDEX(@ws, ",", 2), LENGTH(SUBSTRING_INDEX(@ws, ",", 1)) + 2), DECIMAL(10, 5)) AS X,
CONVERT(SUBSTRING(SUBSTRING_INDEX(@ws, ",", 3), LENGTH(SUBSTRING_INDEX(@ws, ",", 2)) + 2), DECIMAL(10, 5)) AS Y
FROM (SELECT Worldspace FROM vehicle_locations GROUP BY Worldspace) AS temp
WHERE (@ws := Worldspace) IS NOT NULL
AND (@ws := REPLACE(@ws, "[", "")) IS NOT NULL
AND (@ws := REPLACE(@ws, "]", "")) IS NOT NULL
) AS temp1
WHERE
(
@distance :=
(
SELECT MIN(SQRT((temp_objects.X - temp1.X) * (temp_objects.X - temp1.X) + (temp_objects.Y - temp1.Y) * (temp_objects.Y - temp1.Y)))
FROM temp_objects
)
) IS NULL OR @distance > SearchRadius
) AS temp2
JOIN vehicle_locations
ON vehicle_locations.Worldspace = temp2.Worldspace
);
DROP TEMPORARY TABLE IF EXISTS temp_spawns;
CREATE TEMPORARY TABLE temp_spawns AS
(
SELECT temp.ID, Classname, Worldspace, Chance, MinFuel, MaxFuel, MinDamage, MaxDamage
FROM
(
SELECT *
FROM vehicle_spawns
WHERE (@numSpawnable := getNumSpawnable(ServerInstance, ID)) IS NOT NULL
AND @numSpawnable > 0
ORDER BY RAND()
) AS temp
JOIN temp_locations
ON temp_locations.ID = temp.Location
ORDER BY RAND()
);
SET @numSpawned = 0;
WHILE (@numSpawned < MaxNumSpawn AND (SELECT COUNT(*) FROM temp_spawns) > 0) DO
SET @spawnid = (SELECT ID FROM temp_spawns LIMIT 1);
SET @chance = (SELECT Chance FROM temp_spawns LIMIT 1);
SET @numSpawnable = getNumSpawnable(ServerInstance, @spawnid);
IF (@numSpawnable > 0 AND RAND() < @chance) THEN
SET @worldspace = (SELECT Worldspace FROM temp_spawns LIMIT 1);
INSERT INTO object_data (ObjectUID, Classname, Instance, CharacterID, Worldspace, Inventory, Hitpoints, Fuel, Damage, Datestamp)
SELECT generateUID(ServerInstance), Classname, ServerInstance, 0, Worldspace,
randomizeVehicleInventory(Classname),
randomizeVehicleHitpoints(Classname),
MinFuel + RAND() * (MaxFuel - MinFuel),
MinDamage + RAND() * (MaxDamage - MinDamage),
SYSDATE()
FROM temp_spawns
LIMIT 1;
DELETE FROM temp_spawns WHERE Worldspace = @worldspace;
SET @numSpawned = @numSpawned + 1;
END IF;
SET @numSpawnable = @numSpawnable - 1;
IF (@numSpawnable < 1) THEN
DELETE FROM temp_spawns WHERE ID = @spawnid;
END IF;
END WHILE;
SELECT CONCAT(@numSpawned, " vehicles spawned.");
END
I didnt look closely at the spawn function, just guessing from the tables and what they contain. I would say to add spawns you create a "location" in vehicle_locations that contains the "id" of the vehicle_spawns classname and information.
So this is a spawn location which will spawn a vehicle of ID 12
![]()
And from vehicle_spawns table here is ID #12
![]()
[/SPOILER]