mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 08:34:33 +00:00
refactor: installation happens at MySQL side
A lot has happened here. Here's the list: 1. autoloader was added that should prevent various "failed to open stream" errors when trying to load new classes 2. PHP-based data generation was replaced by MySQL-based one, hopefully fixing the installation problems when insert payload it too high and the DB wouldn't populate with some users 3. thanks to step 2, the installation should be really almost instantenious, instead of waiting a long time for many SQL connections and queries to populate the world 4. World Data & Oasis generation and population is done in 1 step now
This commit is contained in:
@@ -0,0 +1,535 @@
|
||||
-- ----------------------------------------------------------------------------------------
|
||||
-- oasis regeneration script
|
||||
-- used during installation, server reset, oasis reset & automation (nature repopulation)
|
||||
--
|
||||
-- author: martinambrus
|
||||
-- ----------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
-- Nature regeneration time.
|
||||
--
|
||||
-- type: int
|
||||
-- description: when > -1, used to update the last oasis reset time (Automation nature regeneration)
|
||||
-- when == -1, used to reset oasis data into original state (conquered > unoccupied)
|
||||
|
||||
SET @natureRegTime = %NATURE_REG_TIME%;
|
||||
|
||||
|
||||
|
||||
-- Oasis village ID.
|
||||
--
|
||||
-- type: int
|
||||
-- description: when > -1, used to regenerate units of a single oasis (when conquered > unoccupied)
|
||||
-- when == -1, installation or server reset in progress, all oasis data are updated
|
||||
|
||||
SET @village = %VILLAGEID%;
|
||||
|
||||
|
||||
-- minimum and maximum number of units for oasis with "high" field set to 0
|
||||
SET @minUnitsForOasis0 = 15;
|
||||
SET @maxUnitsForOasis0 = 30;
|
||||
|
||||
-- minimum and maximum number of units for oasis with "high" field set to 1
|
||||
SET @minUnitsForOasis1 = 50;
|
||||
SET @maxUnitsForOasis1 = 70;
|
||||
|
||||
-- minimum and maximum number of units for oasis with "high" field set to 2
|
||||
SET @minUnitsForOasis2 = 90;
|
||||
SET @maxUnitsForOasis2 = 120;
|
||||
|
||||
|
||||
|
||||
-- ----------------------------------------
|
||||
-- reset oasis data (conquered > unoccupied)
|
||||
-- ------------------------------------------
|
||||
UPDATE %PREFIX%odata
|
||||
SET
|
||||
conqured = 0,
|
||||
wood = 800,
|
||||
iron = 800,
|
||||
clay = 800,
|
||||
maxstore = 800,
|
||||
crop = 800,
|
||||
maxcrop = 800,
|
||||
lastupdated = UNIX_TIMESTAMP(),
|
||||
lastupdated2 = UNIX_TIMESTAMP(),
|
||||
loyalty=100,
|
||||
owner=2,
|
||||
name='Unoccupied Oasis'
|
||||
WHERE
|
||||
@natureRegTime = -1
|
||||
AND
|
||||
conqured IN ( @village );
|
||||
|
||||
-- ---------------------------------------------
|
||||
-- remove past reports (conquered > unoccupied)
|
||||
-- ---------------------------------------------
|
||||
DELETE FROM %PREFIX%ndata
|
||||
WHERE
|
||||
@natureRegTime = -1
|
||||
AND
|
||||
toWref IN ( @village );
|
||||
|
||||
|
||||
-- ----------------------------------------------------------------
|
||||
-- update next regeneration time (Automation, nature regeneration)
|
||||
-- ----------------------------------------------------------------
|
||||
UPDATE
|
||||
%PREFIX%odata
|
||||
SET
|
||||
lastupdated2 = UNIX_TIMESTAMP() + @natureRegTime
|
||||
WHERE
|
||||
@natureRegTime > -1
|
||||
AND
|
||||
wref IN ( @village );
|
||||
|
||||
|
||||
-- -----------------------------------------------------------------------
|
||||
-- update number of units depending on the oasis type --
|
||||
-- the more lucrative the oasis is, the better defense will it get :-P --
|
||||
-- -----------------------------------------------------------------------
|
||||
|
||||
|
||||
-- +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)),
|
||||
u36 = u36 + (FLOOR(0 + RAND() * 5)),
|
||||
u37 = u37 + (FLOOR(0 + RAND() * 5))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(1,2)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
)
|
||||
);
|
||||
|
||||
-- +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)),
|
||||
u36 = u36 + (FLOOR(0 + RAND() * 5)),
|
||||
u37 = u37 + (FLOOR(0 + RAND() * 5)),
|
||||
u38 = u38 + (FLOOR(0 + RAND() * 5)),
|
||||
u40 = u40 + (FLOOR(0 + RAND() * 3))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(3)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
)
|
||||
);
|
||||
|
||||
-- +25% clay oasis
|
||||
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))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(4,5)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
|
||||
-- +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)),
|
||||
u32 = u32 + (FLOOR(10 + RAND() * 15)),
|
||||
u35 = u35 + (FLOOR(0 + RAND() * 10)),
|
||||
u40 = u40 + (FLOOR(0 + RAND() * 3))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(6)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
|
||||
-- +25% iron oasis
|
||||
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))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(7,8)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
|
||||
-- +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)),
|
||||
u32 = u32 + (FLOOR(10 + RAND() * 15)),
|
||||
u34 = u34 + (FLOOR(0 + RAND() * 10)),
|
||||
u39 = u39 + (FLOOR(0 + RAND() * 3))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(9)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
|
||||
-- +25% crop oasis
|
||||
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))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(10,11)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
|
||||
-- +50% crop oasis
|
||||
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))
|
||||
WHERE
|
||||
(
|
||||
(
|
||||
@village = -1
|
||||
AND
|
||||
vref IN(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
s1_wdata
|
||||
WHERE
|
||||
oasistype IN(12)
|
||||
)
|
||||
)
|
||||
OR
|
||||
(
|
||||
@village > -1
|
||||
AND
|
||||
vref = @village
|
||||
)
|
||||
)
|
||||
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
|
||||
);
|
||||
@@ -0,0 +1,148 @@
|
||||
-- generate world map data
|
||||
INSERT INTO %PREFIX%wdata
|
||||
|
||||
-- this select gets the right number of columns for the wdata table
|
||||
SELECT 0 as id, fieldtype, oasistype, x, y, 0 as occupied, image FROM
|
||||
|
||||
-- this select prepares (i.e. generates) the world data
|
||||
(SELECT
|
||||
|
||||
-- save a random number from 1 to 1000 into a variable
|
||||
@rnd := (FLOOR(1 + RAND() * 1000)),
|
||||
|
||||
-- fieldtype is always 3 for the middle and the word border
|
||||
IF (
|
||||
(x = 0 AND y = 0) OR (x = 100 AND y = 100),
|
||||
3,
|
||||
-- get a field type based on the random number previously generated
|
||||
CASE
|
||||
WHEN @rnd <= 10 THEN @ftype := 1
|
||||
WHEN @rnd <= 90 THEN @ftype := 2
|
||||
WHEN @rnd <= 400 THEN @ftype := 3
|
||||
WHEN @rnd <= 480 THEN @ftype := 4
|
||||
WHEN @rnd <= 560 THEN @ftype := 5
|
||||
WHEN @rnd <= 570 THEN @ftype := 6
|
||||
WHEN @rnd <= 600 THEN @ftype := 7
|
||||
WHEN @rnd <= 630 THEN @ftype := 8
|
||||
WHEN @rnd <= 660 THEN @ftype := 9
|
||||
WHEN @rnd <= 740 THEN @ftype := 10
|
||||
WHEN @rnd <= 820 THEN @ftype := 11
|
||||
WHEN @rnd <= 900 THEN @ftype := 12
|
||||
WHEN @rnd <= 1000 THEN @ftype := 0
|
||||
END
|
||||
) as fieldtype,
|
||||
|
||||
-- there are no oasis' in the middle and by the word border
|
||||
IF (
|
||||
(x = 0 AND y = 0) OR (x = 100 AND y = 100),
|
||||
0,
|
||||
-- get an oasis type if the field type generated in the previous IF statement
|
||||
-- is 0, based on the random number previously generated
|
||||
CASE
|
||||
WHEN @ftype > 0 THEN @otype := 0
|
||||
WHEN @rnd <= 908 THEN @otype := 1
|
||||
WHEN @rnd <= 916 THEN @otype := 2
|
||||
WHEN @rnd <= 924 THEN @otype := 3
|
||||
WHEN @rnd <= 932 THEN @otype := 4
|
||||
WHEN @rnd <= 940 THEN @otype := 5
|
||||
WHEN @rnd <= 948 THEN @otype := 6
|
||||
WHEN @rnd <= 956 THEN @otype := 7
|
||||
WHEN @rnd <= 964 THEN @otype := 8
|
||||
WHEN @rnd <= 972 THEN @otype := 9
|
||||
WHEN @rnd <= 980 THEN @otype := 10
|
||||
WHEN @rnd <= 988 THEN @otype := 11
|
||||
ELSE @otype := 12
|
||||
END
|
||||
) as oasistype,
|
||||
|
||||
-- x and y coordinates come from the subqueries below
|
||||
x, y,
|
||||
|
||||
-- create a random image name for the field or the oasis square
|
||||
IF (@otype = 0, CONCAT("t", (FLOOR(0 + RAND() * 9)) ), CONCAT("o", @otype) ) as image
|
||||
FROM
|
||||
|
||||
-- the following select will generate a number from -%WORLDSIZE% to +%WORLDSIZE% as an X coordinate
|
||||
-- (courtesy of Unreason, https://stackoverflow.com/a/2652051/467164)
|
||||
-- this first line will keep incrementing @row until we run out of all the data provided by the "t" subselects below
|
||||
(SELECT @row := @row + 1 as x FROM
|
||||
|
||||
-- t and t2 each contain 10 rows of dummy data,
|
||||
-- cartesian product of these is 10^4, i.e. 10000 rows of dummy data
|
||||
-- and the outer select is just mysql version of rownumber
|
||||
(select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t,
|
||||
(select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
|
||||
|
||||
-- in t3, we only need 4 rows of dummy data, as 400 is currently the maximum allowed map size
|
||||
-- which brings us to `t1` x `t2` x `t3` = 10 x 10 x 4 = 400
|
||||
(select 0 union select 1 union select 2 union select 3) t3,
|
||||
|
||||
-- here we tell MySQL where to start, so if we have a world 100x100, this will set @row to -101
|
||||
-- (not -100 because the first select already increments the @row by 1, so we'd start at -99 instead)
|
||||
(SELECT @row := -(%WORLDSIZE% + 1)) as final
|
||||
|
||||
-- since we maxed out the potential of world generation to number 400, we need to use a WHERE here
|
||||
-- as to only get the number of rows we need for the current map size
|
||||
WHERE @row <= (%WORLDSIZE% - 1)) as x,
|
||||
|
||||
-- this query is the same as previous query for X coordinate but will generate numbers
|
||||
-- for the Y coordinate - both of these joined together this way will generate data such as:
|
||||
-- -100, -100; -100, -99; -100, -98 ...
|
||||
(SELECT @row2 := @row2 + 1 as y FROM
|
||||
(select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t,
|
||||
(select 0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
|
||||
(select 0 union select 1 union select 2) t3,
|
||||
(SELECT @row2 := -(%WORLDSIZE% + 1)) as final
|
||||
WHERE @row2 <= (%WORLDSIZE% - 1)) as y
|
||||
) as generator;
|
||||
|
||||
-- populate oasis data
|
||||
INSERT INTO %PREFIX%odata
|
||||
SELECT
|
||||
-- automatic ID
|
||||
id,
|
||||
-- type of oasis from wdata table
|
||||
oasistype,
|
||||
-- oasis is not conquered
|
||||
0,
|
||||
-- wood
|
||||
800,
|
||||
-- iron
|
||||
800,
|
||||
-- clay
|
||||
800,
|
||||
-- maximum storage for the 3 resources above
|
||||
800,
|
||||
-- crop
|
||||
800,
|
||||
-- maximum storage for crop
|
||||
800,
|
||||
-- last updated timestamps
|
||||
UNIX_TIMESTAMP(),
|
||||
UNIX_TIMESTAMP(),
|
||||
-- loyalty (100%)
|
||||
100,
|
||||
-- owner (2 = Nature)
|
||||
2,
|
||||
-- name for this square
|
||||
"Unoccupied Oasis",
|
||||
-- how many units would be (re)generated for this oasis, based on its type
|
||||
CASE
|
||||
WHEN oasistype < 4 THEN 1
|
||||
WHEN oasistype < 10 THEN 2
|
||||
ELSE 0
|
||||
END
|
||||
FROM
|
||||
%PREFIX%wdata
|
||||
WHERE
|
||||
oasistype <> 0;
|
||||
|
||||
|
||||
-- create some defensive units for existing oasis
|
||||
INSERT INTO %PREFIX%units (vref)
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
%PREFIX%wdata
|
||||
WHERE
|
||||
oasistype <> 0;
|
||||
+1713
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user