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/040-functions/145-resource-providers.sql
Emmanuel BENOîT 038bba896a Mining computations update
* Added a few that can be used to retrieve mining settings for resource
providers from empire-owned planets from either the empire-wide or
planet-specific settings
2012-01-10 16:28:25 +01:00

101 lines
No EOL
2.8 KiB
PL/PgSQL

-- LegacyWorlds Beta 6
-- PostgreSQL database scripts
--
-- Resource providers functions
--
-- Copyright(C) 2004-2012, DeepClone Development
-- --------------------------------------------------------
/*
* Compute resource provider regeneration
*
* This function computes the quantity in a resource provider after it has
* been regenerated.
*
* Parameters:
* _quantity The current quantity of resources in the provider
* _max The maximal amount of resources supported by the
* provider
* _recovery_rate The provider's recovery rate
*
* Returns:
* ? The new quantity of resources.
*/
CREATE OR REPLACE FUNCTION verse.compute_provider_regeneration(
_quantity DOUBLE PRECISION ,
_max DOUBLE PRECISION ,
_recovery_rate DOUBLE PRECISION )
RETURNS DOUBLE PRECISION
STRICT IMMUTABLE
SECURITY INVOKER
AS $compute_provider_regeneration$
DECLARE
_uc_recovery DOUBLE PRECISION;
_uc_dampening DOUBLE PRECISION;
_uc_ticks DOUBLE PRECISION;
_result DOUBLE PRECISION;
BEGIN
_uc_recovery := sys.get_constant( 'game.resources.recovery' );
_uc_dampening := sys.get_constant( 'game.resources.recoveryDampening' );
_uc_ticks := 1440; -- FIXME: this should be a constant
_result := ( 1 - _quantity / _max ) ^ _uc_dampening;
_result := _quantity + _result * _recovery_rate * _uc_recovery / _uc_ticks;
IF _result > _max THEN
_result := _max;
END IF;
RETURN _result;
END;
$compute_provider_regeneration$ LANGUAGE PLPGSQL;
REVOKE EXECUTE
ON FUNCTION verse.compute_provider_regeneration(
DOUBLE PRECISION , DOUBLE PRECISION ,
DOUBLE PRECISION )
FROM PUBLIC;
/*
* Mining settings view
* ---------------------
*
* This view lists mining settings being used on planets owned by empires
* for each resource providers. The settings are taken from planet-specific
* settings if they are available, or from empire-wide settings.
*
* Columns:
*
* planet_id The planet's identifier
* resource_name_id The type of resources
* mset_weight The setting to use for mining priorities
* mset_specific True if the settings are specific for this planet,
* false if empire-wise settings are in use.
*/
DROP VIEW IF EXISTS emp.mining_settings_view CASCADE;
CREATE VIEW emp.mining_settings_view
AS SELECT planet_id , resource_name_id ,
( CASE
WHEN _pl_settings.planet_id IS NULL THEN
_emp_settings.empmset_weight
ELSE
_pl_settings.emppmset_weight
END ) AS mset_weight ,
( _pl_settings.planet_id IS NOT NULL ) AS mset_specific
FROM verse.resource_providers
INNER JOIN emp.planets
USING ( planet_id )
INNER JOIN emp.mining_settings _emp_settings
USING ( empire_id , resource_name_id )
LEFT OUTER JOIN emp.planet_mining_settings _pl_settings
USING ( planet_id , empire_id , resource_name_id );
GRANT SELECT
ON emp.mining_settings_view
TO :dbuser;