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.
lwb5/sql/beta5/structure/10-ctf-tables.sql

99 lines
3.4 KiB
SQL

-- LegacyWorlds Beta 5
-- PostgreSQL database scripts
--
-- beta5/structure/10-ctf-tables.sql
--
-- Beta 5 games:
-- Tables specific to CTF games
--
-- Copyright(C) 2004-2008, DeepClone Development
-- --------------------------------------------------------
--
-- Target status
--
-- Targets are always listed in this table, and the status
-- of the targets is set according to who holds the system.
--
CREATE TABLE ctf_target (
system INT PRIMARY KEY REFERENCES system (id),
held_by INT REFERENCES alliance (id),
held_since INT,
grace_expires INT,
CHECK( (held_by IS NULL AND held_since IS NULL)
OR (held_by IS NOT NULL AND held_since IS NOT NULL) ),
CHECK( (held_by IS NULL AND grace_expires IS NULL) OR held_by IS NOT NULL )
);
CREATE INDEX ctf_target_alliance ON ctf_target (held_by);
GRANT SELECT,INSERT,UPDATE ON ctf_target TO legacyworlds;
--
-- Allocated system status
--
-- This is used in order to clear players out of other
-- teams' zones and to know where each player was spawned.
--
CREATE TABLE ctf_alloc (
system INT PRIMARY KEY REFERENCES system (id),
alliance INT NOT NULL CHECK( alliance > 0 AND alliance < 9 ),
spawn_point BOOLEAN NOT NULL,
player BIGINT REFERENCES player (id),
CHECK( spawn_point OR (NOT spawn_point AND player IS NULL) )
);
GRANT SELECT,INSERT,UPDATE ON ctf_alloc TO legacyworlds;
--
-- Team points
--
-- This table stores the points for each team
--
CREATE TABLE ctf_points (
team INT NOT NULL PRIMARY KEY REFERENCES alliance(id),
points INT NOT NULL DEFAULT 0 CHECK (points >= 0 AND points <= 100)
);
GRANT SELECT,INSERT,UPDATE ON ctf_points TO legacyworlds;
--
-- Game messages
--
-- The message type is one of the following:
-- 0 => Player joined the game, inform him [team]
-- 1 => Player joined a team, inform the rest of the team [team]
-- 2 => A player's team is now holding all the targets [team,time_stamp]
-- 3 => Another team is now holding all the targets [team,time_stamp]
-- 4 => A player's team is no longer holding all the targets, but there is a grace period [team,time_stamp]
-- 5 => A player's team is no longer holding all the targets, and there is no grace period [team]
-- 6 => A player's team is no longer holding all the targets, and the grace period has expired [team]
-- 7 => Another team is no longer holding all the targets, but there is a grace period [team,time_stamp]
-- 8 => Another team is no longer holding all the targets, and there is no grace period [team]
-- 9 => Another team is no longer holding all the targets, and the grace period has expired [team]
-- 10 => A player's team is still holding the targets after half the required time [team,time_stamp]
-- 11 => Another team is still holding the targets after half the required time [team,time_stamp]
-- 12 => A player's team has held the targets long enough and the game has been reset [team]
-- 13 => Another team has held the targets long enough and the game has been reset [team]
-- 14 => A player's team has won the match [team]
-- 15 => A player's team has lost the match [team]
CREATE TABLE msg_ctf (
id BIGINT NOT NULL PRIMARY KEY REFERENCES message (id) ON DELETE CASCADE,
msg_type INT NOT NULL CHECK(msg_type >= 0 AND msg_type < 16),
team INT NOT NULL REFERENCES alliance (id),
time_stamp INT
);
CREATE INDEX msg_ctf_team ON msg_ctf (team);
GRANT SELECT,INSERT,UPDATE,DELETE ON msg_ctf TO legacyworlds;