-- LegacyWorlds Beta 6 -- PostgreSQL database scripts -- -- Game updates - planet income and upkeep -- -- Copyright(C) 2004-2010, DeepClone Development -- -------------------------------------------------------- CREATE OR REPLACE FUNCTION sys.process_planet_money_updates( c_tick BIGINT ) RETURNS VOID STRICT VOLATILE SECURITY INVOKER AS $$ DECLARE rec RECORD; incme REAL; BEGIN FOR rec IN SELECT p.name_id AS id , p.population AS pop , ( ph.current / p.population )::REAL AS happiness , ( ea.planet_id IS NULL ) AS produces_income FROM sys.updates su INNER JOIN verse.updates vu ON vu.update_id = su.id INNER JOIN verse.planets p ON vu.planet_id = p.name_id INNER JOIN verse.planet_happiness ph ON ph.planet_id = p.name_id INNER JOIN verse.planet_money pm ON pm.planet_id = p.name_id LEFT OUTER JOIN emp.abandon ea ON ea.planet_id = p.name_id WHERE su.last_tick = c_tick AND su.status = 'PROCESSING' AND su.gu_type = 'PLANET_MONEY' FOR UPDATE OF p, pm LOOP IF rec.produces_income THEN incme := verse.compute_income( rec.pop , rec.happiness , verse.get_raw_production( rec.id , 'CASH' ) ); ELSE incme := 0; END IF; UPDATE verse.planet_money SET income = incme , upkeep = verse.get_planet_upkeep( rec.id ) WHERE planet_id = rec.id; END LOOP; END; $$ LANGUAGE plpgsql;