diff --git a/var/db/datagen-oasis-troops-regen.sql b/var/db/datagen-oasis-troops-regen.sql index 6cd3efe0..a7c0f491 100644 --- a/var/db/datagen-oasis-troops-regen.sql +++ b/var/db/datagen-oasis-troops-regen.sql @@ -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 - ); \ No newline at end of file + );