From 3b359d6f8528401c670667c6bab98f412d960b21 Mon Sep 17 00:00:00 2001 From: haki99 Date: Wed, 17 Dec 2025 17:10:11 +0100 Subject: [PATCH 1/5] Adjust unit growth calculations with player metrics Updated unit growth calculations based on player progression and growth factor. --- var/db/datagen-oasis-troops-regen.sql | 94 +++++++++++++++------------ 1 file changed, 53 insertions(+), 41 deletions(-) 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 + ); From 4e30e49475578ed87a2296a4447513944df3952a Mon Sep 17 00:00:00 2001 From: haki99 Date: Fri, 19 Dec 2025 22:17:21 +0100 Subject: [PATCH 2/5] Update SQL queries for player count and progression --- var/db/datagen-oasis-troops-regen.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/var/db/datagen-oasis-troops-regen.sql b/var/db/datagen-oasis-troops-regen.sql index a7c0f491..7b45027b 100644 --- a/var/db/datagen-oasis-troops-regen.sql +++ b/var/db/datagen-oasis-troops-regen.sql @@ -34,10 +34,10 @@ 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; +SELECT COUNT(*) INTO @playerCount FROM %PREFIX%users WHERE id > 6; -- 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; +SELECT IFNULL(AVG(pop + cp), 0) INTO @avgPlayerProgress FROM %PREFIX%vdata WHERE owner > 6; -- ---------------------------------------------------------------- -- Calculate growth factor based on player progression From 510421e4eda633c8a0d5fbc62629848e0433405e Mon Sep 17 00:00:00 2001 From: haki99 Date: Fri, 19 Dec 2025 22:57:21 +0100 Subject: [PATCH 3/5] Refactor oasis regeneration SQL script Refactor oasis regeneration SQL script to improve clarity and maintainability. --- var/db/datagen-oasis-troops-regen.sql | 691 ++++++++++---------------- 1 file changed, 270 insertions(+), 421 deletions(-) diff --git a/var/db/datagen-oasis-troops-regen.sql b/var/db/datagen-oasis-troops-regen.sql index 7b45027b..38dff816 100644 --- a/var/db/datagen-oasis-troops-regen.sql +++ b/var/db/datagen-oasis-troops-regen.sql @@ -2,7 +2,8 @@ -- oasis regeneration script -- used during installation, server reset, oasis reset & automation (nature repopulation) -- --- author: martinambrus +-- original author: martinambrus +-- revised and improved: haki99 -- ---------------------------------------------------------------------------------------- @@ -118,444 +119,292 @@ WHERE -- +25% lumber oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - u.u35 = u.u35 + FLOOR((5 + RAND() * 10) * @growthFactor), - u36 = u36 + FLOOR((0 + RAND() * 5) * @growthFactor), - u37 = u37 + FLOOR((0 + RAND() * 5) * @growthFactor) - WHERE - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(1,2) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND - ( - u35 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - OR u36 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - OR u37 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u.u35 = LEAST( + u.u35 + FLOOR((5 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END + ), + u.u36 = LEAST( + u.u36 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END + ), + u.u37 = LEAST( + u.u37 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END + ) +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (1,2))) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% lumber and +25% crop oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - 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 - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(3) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND - ( - u36 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - OR u37 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - OR u38 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u35 = LEAST(u35 + FLOOR((5 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u36 = LEAST(u36 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u37 = LEAST(u37 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u38 = LEAST(u38 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u40 = LEAST(u40 + FLOOR((0 + RAND() * 3) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 3)) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% clay oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - u31 = u31 + FLOOR((10 + RAND() * 15) * @growthFactor), - u32 = u32 + FLOOR((5 + RAND() * 15) * @growthFactor), - u35 = u35 + FLOOR((0 + RAND() * 10) * @growthFactor) - WHERE - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(4,5) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u32 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u35 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((10 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u32 = LEAST(u32 + FLOOR((5 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u35 = LEAST(u35 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (4,5))) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% clay and +25% crop oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - 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 - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(6) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u32 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u35 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((15 + RAND() * 20) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u32 = LEAST(u32 + FLOOR((10 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u35 = LEAST(u35 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u40 = LEAST(u40 + FLOOR((0 + RAND() * 3) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 6)) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% iron oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - u31 = u31 + FLOOR((10 + RAND() * 15) * @growthFactor), - u32 = u32 + FLOOR((5 + RAND() * 15) * @growthFactor), - u34 = u34 + FLOOR((0 + RAND() * 10) * @growthFactor) - WHERE - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(7,8) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u32 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u34 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((10 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u32 = LEAST(u32 + FLOOR((5 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u34 = LEAST(u34 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (7,8))) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% iron and +25% crop oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - 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 - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(9) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u32 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u34 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((15 + RAND() * 20) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u32 = LEAST(u32 + FLOOR((10 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u34 = LEAST(u34 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u39 = LEAST(u39 + FLOOR((0 + RAND() * 3) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 9)) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +25% crop oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - 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 - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(10,11) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u33 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u37 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u38 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((5 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u33 = LEAST(u33 + FLOOR((5 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u37 = LEAST(u37 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u38 = LEAST(u38 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u39 = LEAST(u39 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (10,11))) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); -- +50% crop oasis UPDATE %PREFIX%units u - JOIN %PREFIX%odata o - ON u.vref = o.wref - SET - 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 - ( - ( - @firstVillage = -1 - AND - vref IN( - SELECT - id - FROM - %PREFIX%wdata - WHERE - oasistype IN(12) - ) - ) - OR - ( - @firstVillage > -1 - AND - vref IN ( SELECT id FROM %PREFIX%oids ) - ) - ) - AND u31 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u33 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u37 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u38 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ) - AND u39 <= ( - CASE o.high - WHEN 0 THEN (FLOOR(@minUnitsForOasis0 + RAND() * @maxUnitsForOasis0)) - WHEN 1 THEN (FLOOR(@minUnitsForOasis1 + RAND() * @maxUnitsForOasis1)) - WHEN 2 THEN (FLOOR(@minUnitsForOasis2 + RAND() * @maxUnitsForOasis2)) - END - ); +JOIN %PREFIX%odata o ON u.vref = o.wref +SET + u31 = LEAST(u31 + FLOOR((10 + RAND() * 15) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u33 = LEAST(u33 + FLOOR((5 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u37 = LEAST(u37 + FLOOR((0 + RAND() * 10) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u38 = LEAST(u38 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u39 = LEAST(u39 + FLOOR((0 + RAND() * 5) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), + u40 = LEAST(u40 + FLOOR((0 + RAND() * 3) * @growthFactor), + CASE o.high + WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) + WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) + WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) + END), +WHERE +( + (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 12)) + OR + (@firstVillage > -1 AND u.vref IN (SELECT id FROM %PREFIX%oids)) +); From 6a555c7f391c1923c1202e47f81815aee86c3954 Mon Sep 17 00:00:00 2001 From: haki99 Date: Fri, 19 Dec 2025 23:53:06 +0100 Subject: [PATCH 4/5] Fix SQL syntax by removing parentheses --- var/db/datagen-oasis-troops-regen.sql | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/var/db/datagen-oasis-troops-regen.sql b/var/db/datagen-oasis-troops-regen.sql index 38dff816..d954d594 100644 --- a/var/db/datagen-oasis-troops-regen.sql +++ b/var/db/datagen-oasis-troops-regen.sql @@ -185,7 +185,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 3)) @@ -249,7 +249,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 6)) @@ -278,7 +278,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (7,8))) @@ -313,7 +313,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 9)) @@ -354,7 +354,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (10,11))) @@ -401,7 +401,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype = 12)) From 0f083fe4ed2e4e85a41ab32af014b4ef6f58cf10 Mon Sep 17 00:00:00 2001 From: haki99 Date: Fri, 19 Dec 2025 23:54:38 +0100 Subject: [PATCH 5/5] Refactor SQL --- var/db/datagen-oasis-troops-regen.sql | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/var/db/datagen-oasis-troops-regen.sql b/var/db/datagen-oasis-troops-regen.sql index d954d594..81c76126 100644 --- a/var/db/datagen-oasis-troops-regen.sql +++ b/var/db/datagen-oasis-troops-regen.sql @@ -121,30 +121,24 @@ WHERE UPDATE %PREFIX%units u JOIN %PREFIX%odata o ON u.vref = o.wref SET - u.u35 = LEAST( - u.u35 + FLOOR((5 + RAND() * 10) * @growthFactor), + u.u35 = LEAST(u.u35 + FLOOR((5 + RAND() * 10) * @growthFactor), CASE o.high WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END - ), - u.u36 = LEAST( - u.u36 + FLOOR((0 + RAND() * 5) * @growthFactor), + END), + u.u36 = LEAST(u.u36 + FLOOR((0 + RAND() * 5) * @growthFactor), CASE o.high WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END - ), - u.u37 = LEAST( - u.u37 + FLOOR((0 + RAND() * 5) * @growthFactor), + END), + u.u37 = LEAST(u.u37 + FLOOR((0 + RAND() * 5) * @growthFactor), CASE o.high WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END - ) + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (1,2))) @@ -214,7 +208,7 @@ SET WHEN 0 THEN FLOOR(@minUnitsForOasis0 + RAND() * (@maxUnitsForOasis0 - @minUnitsForOasis0)) WHEN 1 THEN FLOOR(@minUnitsForOasis1 + RAND() * (@maxUnitsForOasis1 - @minUnitsForOasis1)) WHEN 2 THEN FLOOR(@minUnitsForOasis2 + RAND() * (@maxUnitsForOasis2 - @minUnitsForOasis2)) - END), + END) WHERE ( (@firstVillage = -1 AND u.vref IN (SELECT id FROM %PREFIX%wdata WHERE oasistype IN (4,5)))