Emmanuel BENOîT
cb65a6e643
* Modified the empire resources update to check for vacation mode and apply the modifier from vacation.cashDivider if necessary. * Some parts of the database need to be reloaded: -> 050-updates/015-empire-resources.sql
85 lines
No EOL
2.5 KiB
SQL
85 lines
No EOL
2.5 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 + _raw.res_delta > 0 THEN
|
|
_emp_resources.empres_possessed + _raw.res_delta
|
|
ELSE
|
|
0
|
|
END ,
|
|
empres_owed = CASE
|
|
WHEN _emp_resources.empres_possessed + _raw.res_delta < 0 THEN
|
|
-( _emp_resources.empres_possessed + _raw.res_delta )
|
|
ELSE
|
|
0
|
|
END
|
|
|
|
FROM (
|
|
SELECT _upd_emp.name_id AS empire_id , _pl_resources.resource_name_id ,
|
|
( _pl_resources.pres_income - _pl_resources.pres_upkeep ) / ( CASE
|
|
WHEN _vacation.account_id IS NULL THEN
|
|
1
|
|
ELSE
|
|
sys.get_constant( 'vacation.cashDivider' )
|
|
END ) AS res_delta
|
|
|
|
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 )
|
|
INNER JOIN naming.empire_names _emp_name
|
|
ON _emp_name.id = _upd_emp.name_id
|
|
LEFT OUTER JOIN users.vacations _vacation
|
|
ON _vacation.account_id = _emp_name.owner_id
|
|
AND _vacation.status = 'PROCESSED'
|
|
|
|
WHERE _upd_sys.update_last = $1
|
|
AND _upd_sys.update_state = 'PROCESSING'
|
|
) _raw
|
|
|
|
WHERE _emp_resources.empire_id = _raw.empire_id
|
|
AND _emp_resources.resource_name_id = _raw.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'
|
|
); |