-- 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;