Adjust unit growth calculations with player metrics

Updated unit growth calculations based on player progression and growth factor.
This commit is contained in:
haki99
2025-12-17 17:10:11 +01:00
committed by GitHub
parent 7f182ff7e7
commit 3b359d6f85
+53 -41
View File
@@ -33,25 +33,37 @@ INSERT INTO %PREFIX%oids VALUES %VILLAGEID%;
SET @noVillage = ((SELECT id FROM %PREFIX%oids LIMIT 1) = -1);
-- Get the number of players
SELECT COUNT(*) INTO @playerCount FROM %PREFIX%users WHERE tribe != 0;
-- Calculate average progression for all real players (owner > 6) from culture points (CP) and population of villages (pop)
SELECT AVG(pop + cp) INTO @avgPlayerProgress FROM %PREFIX%vdata WHERE owner > 6;
-- ----------------------------------------------------------------
-- Calculate growth factor based on player progression
-- Scale between 0.3 and 3.0
-- ----------------------------------------------------------------
SET @growthFactor = LEAST(3.0, GREATEST(0.3, @avgPlayerProgress / 1000));
-- faster access to first oasis ID, so we don't need to reselect all the time below
SET @firstVillage = (SELECT id FROM %PREFIX%oids LIMIT 1);
-- minimum and maximum number of units for oasis with "high" field set to 0
SET @minUnitsForOasis0 = 15;
SET @maxUnitsForOasis0 = 30;
SET @minUnitsForOasis0 = GREATEST(5, FLOOR(5 * @growthFactor));
SET @maxUnitsForOasis0 = LEAST(FLOOR(@minUnitsForOasis0 + 5 + (@playerCount * 1.5) * @growthFactor), 30);
-- minimum and maximum number of units for oasis with "high" field set to 1
SET @minUnitsForOasis1 = 50;
SET @maxUnitsForOasis1 = 70;
SET @minUnitsForOasis1 = GREATEST(10, FLOOR(10 * @growthFactor));
SET @maxUnitsForOasis1 = LEAST(FLOOR(@minUnitsForOasis1 + 10 + (@playerCount * 2) * @growthFactor), 60);
-- minimum and maximum number of units for oasis with "high" field set to 2
SET @minUnitsForOasis2 = 90;
SET @maxUnitsForOasis2 = 120;
SET @minUnitsForOasis2 = GREATEST(20, FLOOR(20 * @growthFactor));
SET @maxUnitsForOasis2 = LEAST(FLOOR(@minUnitsForOasis2 + 15 + (@playerCount * 3) * @growthFactor), 90);
-- Setting a maximum for every type of Oasis so large servers won't turn oasis into fortresses
SET @maxUnitsForOasis0 = LEAST(@maxUnitsForOasis0, 30);
SET @maxUnitsForOasis1 = LEAST(@maxUnitsForOasis1, 60);
SET @maxUnitsForOasis2 = LEAST(@maxUnitsForOasis2, 90);
-- ----------------------------------------
-- reset oasis data (conquered > unoccupied)
@@ -109,9 +121,9 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u.u35 = u.u35 + (FLOOR(5 + RAND() * 10)),
u36 = u36 + (FLOOR(0 + RAND() * 5)),
u37 = u37 + (FLOOR(0 + RAND() * 5))
u.u35 = u.u35 + FLOOR((5 + RAND() * 10) * @growthFactor),
u36 = u36 + FLOOR((0 + RAND() * 5) * @growthFactor),
u37 = u37 + FLOOR((0 + RAND() * 5) * @growthFactor)
WHERE
(
(
@@ -163,11 +175,11 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u35 = u35 + (FLOOR(5 + RAND() * 15)),
u36 = u36 + (FLOOR(0 + RAND() * 5)),
u37 = u37 + (FLOOR(0 + RAND() * 5)),
u38 = u38 + (FLOOR(0 + RAND() * 5)),
u40 = u40 + (FLOOR(0 + RAND() * 3))
u35 = u35 + FLOOR((5 + RAND() * 15) * @growthFactor),
u36 = u36 + FLOOR((0 + RAND() * 5) * @growthFactor),
u37 = u37 + FLOOR((0 + RAND() * 5) * @growthFactor),
u38 = u38 + FLOOR((0 + RAND() * 5) * @growthFactor),
u40 = u40 + FLOOR((0 + RAND() * 3) * @growthFactor)
WHERE
(
(
@@ -219,9 +231,9 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(10 + RAND() * 15)),
u32 = u32 + (FLOOR(5 + RAND() * 15)),
u35 = u35 + (FLOOR(0 + RAND() * 10))
u31 = u31 + FLOOR((10 + RAND() * 15) * @growthFactor),
u32 = u32 + FLOOR((5 + RAND() * 15) * @growthFactor),
u35 = u35 + FLOOR((0 + RAND() * 10) * @growthFactor)
WHERE
(
(
@@ -270,10 +282,10 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(15 + RAND() * 20)),
u32 = u32 + (FLOOR(10 + RAND() * 15)),
u35 = u35 + (FLOOR(0 + RAND() * 10)),
u40 = u40 + (FLOOR(0 + RAND() * 3))
u31 = u31 + FLOOR((15 + RAND() * 20) * @growthFactor),
u32 = u32 + FLOOR((10 + RAND() * 15) * @growthFactor),
u35 = u35 + FLOOR((0 + RAND() * 10) * @growthFactor),
u40 = u40 + FLOOR((0 + RAND() * 3) * @growthFactor)
WHERE
(
(
@@ -322,9 +334,9 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(10 + RAND() * 15)),
u32 = u32 + (FLOOR(5 + RAND() * 15)),
u34 = u34 + (FLOOR(0 + RAND() * 10))
u31 = u31 + FLOOR((10 + RAND() * 15) * @growthFactor),
u32 = u32 + FLOOR((5 + RAND() * 15) * @growthFactor),
u34 = u34 + FLOOR((0 + RAND() * 10) * @growthFactor)
WHERE
(
(
@@ -373,10 +385,10 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(15 + RAND() * 20)),
u32 = u32 + (FLOOR(10 + RAND() * 15)),
u34 = u34 + (FLOOR(0 + RAND() * 10)),
u39 = u39 + (FLOOR(0 + RAND() * 3))
u31 = u31 + FLOOR((15 + RAND() * 20) * @growthFactor),
u32 = u32 + FLOOR((10 + RAND() * 15) * @growthFactor),
u34 = u34 + FLOOR((0 + RAND() * 10) * @growthFactor),
u39 = u39 + FLOOR((0 + RAND() * 3) * @growthFactor)
WHERE
(
(
@@ -425,11 +437,11 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(5 + RAND() * 15)),
u33 = u33 + (FLOOR(5 + RAND() * 10)),
u37 = u37 + (FLOOR(0 + RAND() * 10)),
u38 = u38 + (FLOOR(0 + RAND() * 5)),
u39 = u39 + (FLOOR(0 + RAND() * 5))
u31 = u31 + FLOOR((5 + RAND() * 15) * @growthFactor),
u33 = u33 + FLOOR((5 + RAND() * 10) * @growthFactor),
u37 = u37 + FLOOR((0 + RAND() * 10) * @growthFactor),
u38 = u38 + FLOOR((0 + RAND() * 5) * @growthFactor),
u39 = u39 + FLOOR((0 + RAND() * 5) * @growthFactor)
WHERE
(
(
@@ -485,12 +497,12 @@ UPDATE %PREFIX%units u
JOIN %PREFIX%odata o
ON u.vref = o.wref
SET
u31 = u31 + (FLOOR(10 + RAND() * 15)),
u33 = u33 + (FLOOR(5 + RAND() * 10)),
u37 = u37 + (FLOOR(0 + RAND() * 10)),
u38 = u38 + (FLOOR(0 + RAND() * 5)),
u39 = u39 + (FLOOR(0 + RAND() * 5)),
u40 = u40 + (FLOOR(0 + RAND() * 3))
u31 = u31 + FLOOR((10 + RAND() * 15) * @growthFactor),
u33 = u33 + FLOOR((5 + RAND() * 10) * @growthFactor),
u37 = u37 + FLOOR((0 + RAND() * 10) * @growthFactor),
u38 = u38 + FLOOR((0 + RAND() * 5) * @growthFactor),
u39 = u39 + FLOOR((0 + RAND() * 5) * @growthFactor),
u40 = u40 + FLOOR((0 + RAND() * 3) * @growthFactor)
WHERE
(
(
@@ -546,4 +558,4 @@ UPDATE %PREFIX%units u
WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1))
WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2))
END
);
);