mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-06-28 00:24:23 +00:00
1066fff9a2
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
535 lines
18 KiB
SQL
535 lines
18 KiB
SQL
-- ----------------------------------------------------------------------------------------
|
|
-- 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
|
|
); |