Empire resources and vacation mode

* 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
This commit is contained in:
Emmanuel BENOîT 2012-02-16 10:22:30 +01:00
parent 96670d45be
commit cb65a6e643
3 changed files with 83 additions and 26 deletions
legacyworlds-server-data/db-structure/parts/050-updates

View file

@ -29,30 +29,46 @@ 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
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 + _pl_resources.pres_income - _pl_resources.pres_upkeep < 0 THEN
_pl_resources.pres_upkeep - _emp_resources.empres_possessed - _pl_resources.pres_income
WHEN _emp_resources.empres_possessed + _raw.res_delta < 0 THEN
-( _emp_resources.empres_possessed + _raw.res_delta )
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 )
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
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;
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;