This repository has been archived on 2025-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server-data/db-structure/parts/050-updates/015-empire-resources.sql
Emmanuel BENOîT 56eddcc4f0 Game updates improvements
* Added a set of tables which define game updates and their targets.
These definitions replace the old enumerate type. Added a set of
triggers which automatically create specific update tables, insert
missing entries, etc... when game update types are being manipulated.

* Removed manual insertion of game updates from empire creation
function and universe generator.

* Added registration of core update targets (i.e. planets and empires),
updated all existing game update processing functions and added type
registrations

* Created Maven project for game updates control components, moved
existing components from the -simple project, rewritten most of what
they contained, added new components for server-side update batch
processing
2012-02-03 16:25:03 +01:00

69 lines
No EOL
2.1 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.empires_updates _upd_emp
USING ( updtgt_id , updtype_id , update_id )
INNER JOIN emp.planets _emp_planets
ON empire_id = name_id
INNER JOIN verse.planet_resources _pl_resources
USING ( planet_id )
WHERE _upd_sys.update_last = $1
AND _upd_sys.update_state = 'PROCESSING'
AND _emp_resources.empire_id = _upd_emp.name_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;
SELECT sys.register_update_type( 'Empires' , 'EmpireResources' ,
'Empires'' resources are being updated using the previous update''s results. ' ,
'process_empire_resources_updates'
);