This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server/legacyworlds-server-data/db-structure/parts/functions/120-map-functions.sql

58 lines
1.5 KiB
PL/PgSQL

-- LegacyWorlds Beta 6
-- PostgreSQL database scripts
--
-- Map display functions and related types
--
-- Copyright(C) 2004-2010, DeepClone Development
-- --------------------------------------------------------
-- Map entry
CREATE TYPE map_entry_type AS (
x INT ,
y INT ,
orbit INT ,
id INT ,
picture INT ,
name TEXT ,
tag TEXT ,
display empire_relation_type
);
--
-- Generates the map from an empire's point of view
--
-- Parameters:
-- e_id the empire viewing the map
-- min_x minimal X coordinate
-- min_y minimal Y coordinate
-- max_x maximal X coordinate
-- max_y maximal Y coordinate
--
-- Returns:
-- a set of map entries
--
CREATE OR REPLACE FUNCTION verse.get_map( e_id INT , min_x INT , min_y INT , max_x INT , max_y INT )
RETURNS SETOF map_entry_type
STRICT STABLE
SECURITY DEFINER
AS $$
SELECT mv.x AS x , mv.y AS y , mv.orbit AS orbit , mv.id AS id , mv.picture AS picture ,
mv.name AS name , mv.tag AS tag ,
(CASE
WHEN mv.owner = $1 THEN 'OWN'
WHEN mv.alliance_id IS NOT NULL AND mv.alliance_id = ea.alliance_id THEN 'ALLIED'
WHEN en.alliance_id IS NOT NULL THEN 'ENEMY'
ELSE NULL
END )::empire_relation_type AS display
FROM verse.map_view mv
LEFT OUTER JOIN emp.alliance_members ea
ON ea.empire_id = $1 AND NOT is_pending
LEFT OUTER JOIN emp.enemy_alliances en
ON en.empire_id = $1 AND en.alliance_id = mv.alliance_id
WHERE x BETWEEN $2 AND $4 AND y BETWEEN $3 AND $5;
$$ LANGUAGE SQL;
GRANT EXECUTE ON FUNCTION verse.get_map( INT , INT , INT , INT , INT ) TO :dbuser;