58 lines
1.5 KiB
PL/PgSQL
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;
|