Emmanuel BENOîT
04e550709a
* Added a new update that computes the amount of resources possessed and owed by empires. At the moment this computation ignores fleets, as their upkeep does not use the resource system.
63 lines
1.9 KiB
SQL
63 lines
1.9 KiB
SQL
-- LegacyWorlds Beta 6
|
|
-- PostgreSQL database scripts
|
|
--
|
|
-- Game updates - empire resources
|
|
--
|
|
-- Copyright(C) 2004-2012, DeepClone Development
|
|
-- --------------------------------------------------------
|
|
|
|
|
|
/*
|
|
* Empire resources update
|
|
*
|
|
* For each empire in the update batch, compute the new amount of resources
|
|
* based on the upkeep and income from planets.
|
|
*
|
|
* FIXME: this should also include fleet upkeeps. This situation will be
|
|
* resolved once the system is modified to rely solely on resources.
|
|
*
|
|
* Parameters:
|
|
* _tick The identifier of the game update
|
|
*/
|
|
DROP FUNCTION IF EXISTS sys.process_empire_resources_updates( BIGINT );
|
|
CREATE FUNCTION sys.process_empire_resources_updates( _tick BIGINT )
|
|
RETURNS VOID
|
|
STRICT VOLATILE
|
|
SECURITY INVOKER
|
|
AS $process_empire_resources_updates$
|
|
|
|
UPDATE emp.resources _emp_resources
|
|
|
|
SET empres_possessed = CASE
|
|
WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep > 0 THEN
|
|
_emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep
|
|
ELSE
|
|
0
|
|
END ,
|
|
empres_owed = CASE
|
|
WHEN _emp_resources.empres_possessed + _pl_resources.pres_income - _pl_resources.pres_upkeep < 0 THEN
|
|
_pl_resources.pres_upkeep - _emp_resources.empres_possessed - _pl_resources.pres_income
|
|
ELSE
|
|
0
|
|
END
|
|
|
|
FROM sys.updates _upd_sys
|
|
INNER JOIN emp.updates _upd_emp
|
|
ON _upd_emp.update_id = _upd_sys.id
|
|
INNER JOIN emp.planets _emp_planets
|
|
USING ( empire_id )
|
|
INNER JOIN verse.planet_resources _pl_resources
|
|
USING ( planet_id )
|
|
|
|
WHERE _upd_sys.last_tick = $1
|
|
AND _upd_sys.status = 'PROCESSING'
|
|
AND _upd_sys.gu_type = 'EMPIRE_RESOURCES'
|
|
AND _emp_resources.empire_id = _upd_emp.empire_id
|
|
AND _emp_resources.resource_name_id = _pl_resources.resource_name_id;
|
|
|
|
$process_empire_resources_updates$ LANGUAGE SQL;
|
|
|
|
|
|
REVOKE EXECUTE
|
|
ON FUNCTION sys.process_empire_resources_updates( BIGINT )
|
|
FROM PUBLIC;
|