62 lines
1.6 KiB
MySQL
62 lines
1.6 KiB
MySQL
|
-- 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;
|