mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
oops! all dumb cat
This commit is contained in:
174
SQL/ban_conversion_2018-10-28.py
Normal file
174
SQL/ban_conversion_2018-10-28.py
Normal file
@@ -0,0 +1,174 @@
|
||||
#Python 3+ Script for converting ban table format as of 2018-10-28 made by Jordie0608
|
||||
#
|
||||
#Before starting ensure you have installed the mysqlclient package https://github.com/PyMySQL/mysqlclient-python
|
||||
#It can be downloaded from command line with pip:
|
||||
#pip install mysqlclient
|
||||
#
|
||||
#You will also have to create a new ban table for inserting converted data to per the schema:
|
||||
#CREATE TABLE `ban` (
|
||||
# `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
# `bantime` DATETIME NOT NULL,
|
||||
# `server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
# `server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
# `round_id` INT(11) UNSIGNED NOT NULL,
|
||||
# `role` VARCHAR(32) NULL DEFAULT NULL,
|
||||
# `expiration_time` DATETIME NULL DEFAULT NULL,
|
||||
# `applies_to_admins` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
|
||||
# `reason` VARCHAR(2048) NOT NULL,
|
||||
# `ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
# `ip` INT(10) UNSIGNED NULL DEFAULT NULL,
|
||||
# `computerid` VARCHAR(32) NULL DEFAULT NULL,
|
||||
# `a_ckey` VARCHAR(32) NOT NULL,
|
||||
# `a_ip` INT(10) UNSIGNED NOT NULL,
|
||||
# `a_computerid` VARCHAR(32) NOT NULL,
|
||||
# `who` VARCHAR(2048) NOT NULL,
|
||||
# `adminwho` VARCHAR(2048) NOT NULL,
|
||||
# `edits` TEXT NULL DEFAULT NULL,
|
||||
# `unbanned_datetime` DATETIME NULL DEFAULT NULL,
|
||||
# `unbanned_ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
# `unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL,
|
||||
# `unbanned_computerid` VARCHAR(32) NULL DEFAULT NULL,
|
||||
# `unbanned_round_id` INT(11) UNSIGNED NULL DEFAULT NULL,
|
||||
# PRIMARY KEY (`id`),
|
||||
# KEY `idx_ban_isbanned` (`ckey`,`role`,`unbanned_datetime`,`expiration_time`),
|
||||
# KEY `idx_ban_isbanned_details` (`ckey`,`ip`,`computerid`,`role`,`unbanned_datetime`,`expiration_time`),
|
||||
# KEY `idx_ban_count` (`bantime`,`a_ckey`,`applies_to_admins`,`unbanned_datetime`,`expiration_time`)
|
||||
#) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
#This is to prevent the destruction of existing data and allow rollbacks to be performed in the event of an error during conversion
|
||||
#Once conversion is complete remember to rename the old and new ban tables; it's up to you if you want to keep the old table
|
||||
#
|
||||
#To view the parameters for this script, execute it with the argument --help
|
||||
#All the positional arguments are required, remember to include prefixes in your table names if you use them
|
||||
#An example of the command used to execute this script from powershell:
|
||||
#python ban_conversion_2018-10-28.py "localhost" "root" "password" "feedback" "SS13_ban" "SS13_ban_new"
|
||||
#I found that this script would complete conversion of 35000 rows in approximately 20 seconds, results will depend on the size of your ban table and computer used
|
||||
#
|
||||
#The script has been tested to complete with tgstation's ban table as of 2018-09-02 02:19:56
|
||||
#In the event of an error the new ban table is automatically truncated
|
||||
#The source table is never modified so you don't have to worry about losing any data due to errors
|
||||
#Some additional error correction is performed to fix problems specific to legacy and invalid data in tgstation's ban table, these operations are tagged with a 'TG:' comment
|
||||
#Even if you don't have any of these specific problems in your ban table the operations won't have matter as they have an insignificant effect on runtime
|
||||
#
|
||||
#While this script is safe to run with your game server(s) active, any bans created after the script has started won't be converted
|
||||
#You will also have to ensure that the code and table names are updated between rounds as neither will be compatible
|
||||
|
||||
import MySQLdb
|
||||
import argparse
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
def parse_role(bantype, job):
|
||||
if bantype in ("PERMABAN", "TEMPBAN", "ADMIN_PERMABAN", "ADMIN_TEMPBAN"):
|
||||
role = "Server"
|
||||
else:
|
||||
#TG: Some legacy jobbans are missing the last character from their job string.
|
||||
job_name_fixes = {"A":"AI", "Captai":"Captain", "Cargo Technicia":"Cargo Technician", "Chaplai":"Chaplain", "Che":"Chef", "Chemis":"Chemist", "Chief Enginee":"Chief Engineer", "Chief Medical Office":"Chief Medical Officer", "Cybor":"Cyborg", "Detectiv":"Detective", "Head of Personne":"Head of Personnel", "Head of Securit":"Head of Security", "Mim":"Mime", "pA":"pAI", "Quartermaste":"Quartermaster", "Research Directo":"Research Director", "Scientis":"Scientist", "Security Office":"Security Officer", "Station Enginee":"Station Engineer", "Syndicat":"Syndicate", "Warde":"Warden"}
|
||||
keep_job_names = ("AI", "Head of Personnel", "Head of Security", "OOC", "pAI")
|
||||
if job in job_name_fixes:
|
||||
role = job_name_fixes[job]
|
||||
#Some job names we want to keep the same as .title() would return a different string.
|
||||
elif job in keep_job_names:
|
||||
role = job
|
||||
#And then there's this asshole.
|
||||
elif job == "servant of Ratvar":
|
||||
role = "Servant of Ratvar"
|
||||
else:
|
||||
role = job.title()
|
||||
return role
|
||||
|
||||
def parse_admin(bantype):
|
||||
if bantype in ("ADMIN_PERMABAN", "ADMIN_TEMPBAN"):
|
||||
return 1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def parse_datetime(bantype, expiration_time):
|
||||
if bantype in ("PERMABAN", "JOB_PERMABAN", "ADMIN_PERMABAN"):
|
||||
expiration_time = None
|
||||
#TG: two bans with an invalid expiration_time due to admins setting the duration to approx. 19 billion years, I'm going to count them as permabans.
|
||||
elif expiration_time == "0000-00-00 00:00:00":
|
||||
expiration_time = None
|
||||
elif not expiration_time:
|
||||
expiration_time = None
|
||||
return expiration_time
|
||||
|
||||
def parse_not_null(field):
|
||||
if not field:
|
||||
field = 0
|
||||
return field
|
||||
|
||||
def parse_for_empty(field):
|
||||
if not field:
|
||||
field = None
|
||||
#TG: Several bans from 2012, probably from clients disconnecting while a ban was being made.
|
||||
elif field == "BLANK CKEY ERROR":
|
||||
field = None
|
||||
return field
|
||||
|
||||
if sys.version_info[0] < 3:
|
||||
raise Exception("Python must be at least version 3 for this script.")
|
||||
current_round = 0
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("address", help="MySQL server address (use localhost for the current computer)")
|
||||
parser.add_argument("username", help="MySQL login username")
|
||||
parser.add_argument("password", help="MySQL login username")
|
||||
parser.add_argument("database", help="Database name")
|
||||
parser.add_argument("curtable", help="Name of the current ban table (remember prefixes if you use them)")
|
||||
parser.add_argument("newtable", help="Name of the new table to insert to, can't be same as the source table (remember prefixes)")
|
||||
args = parser.parse_args()
|
||||
db=MySQLdb.connect(host=args.address, user=args.username, passwd=args.password, db=args.database)
|
||||
cursor=db.cursor()
|
||||
current_table = args.curtable
|
||||
new_table = args.newtable
|
||||
#TG: Due to deleted rows and a legacy ban import being inserted from id 3140 id order is not contiguous or in line with date order. While technically valid, it's confusing and I don't like that.
|
||||
#TG: So instead of just running through to MAX(id) we're going to reorder the records by bantime as we go.
|
||||
cursor.execute("SELECT id FROM " + current_table + " ORDER BY bantime ASC")
|
||||
id_list = cursor.fetchall()
|
||||
start_time = datetime.now()
|
||||
print("Beginning conversion at {0}".format(start_time.strftime("%Y-%m-%d %H:%M:%S")))
|
||||
try:
|
||||
for current_id in id_list:
|
||||
if current_id[0] % 5000 == 0:
|
||||
cur_time = datetime.now()
|
||||
print("Reached row ID {0} Duration: {1}".format(current_id[0], cur_time - start_time))
|
||||
cursor.execute("SELECT * FROM " + current_table + " WHERE id = %s", [current_id[0]])
|
||||
query_row = cursor.fetchone()
|
||||
if not query_row:
|
||||
continue
|
||||
else:
|
||||
#TG: bans with an empty reason which were somehow created with almost every field being null or empty, we can't do much but skip this
|
||||
if not query_row[6]:
|
||||
continue
|
||||
bantime = query_row[1]
|
||||
server_ip = query_row[2]
|
||||
server_port = query_row[3]
|
||||
round_id = query_row[4]
|
||||
applies_to_admins = parse_admin(query_row[5])
|
||||
reason = query_row[6]
|
||||
role = parse_role(query_row[5], query_row[7])
|
||||
expiration_time = parse_datetime(query_row[5], query_row[9])
|
||||
ckey = parse_for_empty(query_row[10])
|
||||
computerid = parse_for_empty(query_row[11])
|
||||
ip = parse_for_empty(query_row[12])
|
||||
a_ckey = parse_not_null(query_row[13])
|
||||
a_computerid = parse_not_null(query_row[14])
|
||||
a_ip = parse_not_null(query_row[15])
|
||||
who = query_row[16]
|
||||
adminwho = query_row[17]
|
||||
edits = parse_for_empty(query_row[18])
|
||||
unbanned_datetime = parse_datetime(None, query_row[20])
|
||||
unbanned_ckey = parse_for_empty(query_row[21])
|
||||
unbanned_computerid = parse_for_empty(query_row[22])
|
||||
unbanned_ip = parse_for_empty(query_row[23])
|
||||
cursor.execute("INSERT INTO " + new_table + " (bantime, server_ip, server_port, round_id, role, expiration_time, applies_to_admins, reason, ckey, ip, computerid, a_ckey, a_ip, a_computerid, who, adminwho, edits, unbanned_datetime, unbanned_ckey, unbanned_ip, unbanned_computerid) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", (bantime, server_ip, server_port, round_id, role, expiration_time, applies_to_admins, reason, ckey, ip, computerid, a_ckey, a_ip, a_computerid, who, adminwho, edits, unbanned_datetime, unbanned_ckey, unbanned_ip, unbanned_computerid))
|
||||
db.commit()
|
||||
end_time = datetime.now()
|
||||
print("Conversion completed at {0}".format(datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
|
||||
print("Script duration: {0}".format(end_time - start_time))
|
||||
except Exception as e:
|
||||
end_time = datetime.now()
|
||||
print("Error encountered on row ID {0} at {1}".format(current_id[0], datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
|
||||
print("Script duration: {0}".format(end_time - start_time))
|
||||
cursor.execute("TRUNCATE {0} ".format(new_table))
|
||||
raise e
|
||||
cursor.close()
|
||||
@@ -1,13 +1,256 @@
|
||||
Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255.
|
||||
|
||||
The latest database version is 4.7; The query to update the schema revision table is:
|
||||
The latest database version is 5.12; The query to update the schema revision table is:
|
||||
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (4, 7);
|
||||
INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 12);
|
||||
or
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (4, 7);
|
||||
INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 12);
|
||||
|
||||
In any query remember to add a prefix to the table names if you use one.
|
||||
|
||||
####################################################################################################
|
||||
NOTICE! BANS AND OTHERS ARENT SET TO THEIR LATEST FORMAT YET AS THE BACKEND DOES NOT SUPPORT IT YET!
|
||||
####################################################################################################
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.12, 29 December 2020, by Missfox
|
||||
Modified table `messages`, adding column `playtime` to show the user's playtime when the note was created.
|
||||
|
||||
ALTER TABLE `messages` ADD `playtime` INT(11) NULL DEFAULT(NULL) AFTER `severity`
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.11, 7 September 2020, by bobbahbrown, MrStonedOne, and Jordie0608
|
||||
|
||||
Adds indices to support search operations on the adminhelp ticket tables. This is to support improved performance on Atlanta Ned's Statbus.
|
||||
|
||||
CREATE INDEX `idx_ticket_act_recip` (`action`, `recipient`)
|
||||
CREATE INDEX `idx_ticket_act_send` (`action`, `sender`)
|
||||
CREATE INDEX `idx_ticket_tic_rid` (`ticket`, `round_id`)
|
||||
CREATE INDEX `idx_ticket_act_time_rid` (`action`, `timestamp`, `round_id`)
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.10, 7 August 2020, by oranges
|
||||
|
||||
Changes how the discord verification process works.
|
||||
Adds the discord_links table, and migrates discord id entries from player table to the discord links table in a once off operation and then removes the discord id
|
||||
on the player table
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
DROP TABLE IF EXISTS `discord_links`;
|
||||
CREATE TABLE `discord_links` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`discord_id` BIGINT(20) DEFAULT NULL,
|
||||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`one_time_token` VARCHAR(100) NOT NULL,
|
||||
`valid` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO `discord_links` (`ckey`, `discord_id`, `one_time_token`, `valid`) SELECT `ckey`, `discord_id`, CONCAT("presync_from_player_table_", `ckey`), TRUE FROM `player` WHERE discord_id IS NOT NULL;
|
||||
|
||||
ALTER TABLE `player` DROP COLUMN `discord_id`;
|
||||
|
||||
COMMIT;
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.9, 19 April 2020, by Jordie0608
|
||||
Updates and improvements to poll handling.
|
||||
Added the `deleted` column to tables 'poll_option', 'poll_textreply' and 'poll_vote' and the columns `created_datetime`, `subtitle`, `allow_revoting` and `deleted` to 'poll_question'.
|
||||
Changes table 'poll_question' column `createdby_ckey` to be NOT NULL and index `idx_pquest_time_admin` to be `idx_pquest_time_deleted_id` and 'poll_textreply' column `adminrank` to have no default.
|
||||
Added procedure `set_poll_deleted` that's called when deleting a poll to set deleted to true on each poll table where rows matching a poll_id argument.
|
||||
|
||||
ALTER TABLE `poll_option`
|
||||
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `default_percentage_calc`;
|
||||
|
||||
ALTER TABLE `poll_question`
|
||||
CHANGE COLUMN `createdby_ckey` `createdby_ckey` VARCHAR(32) NOT NULL AFTER `multiplechoiceoptions`,
|
||||
ADD COLUMN `created_datetime` datetime NOT NULL AFTER `polltype`,
|
||||
ADD COLUMN `subtitle` VARCHAR(255) NULL DEFAULT NULL AFTER `question`,
|
||||
ADD COLUMN `allow_revoting` TINYINT(1) UNSIGNED NOT NULL AFTER `dontshow`,
|
||||
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `allow_revoting`,
|
||||
DROP INDEX `idx_pquest_time_admin`,
|
||||
ADD INDEX `idx_pquest_time_deleted_id` (`starttime`, `endtime`, `deleted`, `id`);
|
||||
|
||||
ALTER TABLE `poll_textreply`
|
||||
CHANGE COLUMN `adminrank` `adminrank` varchar(32) NOT NULL AFTER `replytext`,
|
||||
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `adminrank`;
|
||||
|
||||
ALTER TABLE `poll_vote`
|
||||
ADD COLUMN `deleted` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' AFTER `rating`;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `set_poll_deleted`(
|
||||
IN `poll_id` INT
|
||||
)
|
||||
SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
UPDATE `poll_question` SET deleted = 1 WHERE id = poll_id;
|
||||
UPDATE `poll_option` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `poll_vote` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
|
||||
END
|
||||
$$
|
||||
DELIMITER ;
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.8, 7 April 2020, by Jordie0608
|
||||
Modified table `messages`, adding column `deleted_ckey` to record who deleted a message.
|
||||
|
||||
ALTER TABLE `messages` ADD COLUMN `deleted_ckey` VARCHAR(32) NULL DEFAULT NULL AFTER `deleted`;
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.7, 10 January 2020 by Atlanta-Ned
|
||||
Added ticket table for tracking ahelp tickets in the database.
|
||||
|
||||
DROP TABLE IF EXISTS `ticket`;
|
||||
CREATE TABLE `ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.6, 6 December 2019 by Anturke
|
||||
Added achievement_name and achievement_description columns to achievement_metadata table.
|
||||
|
||||
|
||||
ALTER TABLE `achievement_metadata` ADD COLUMN (`achievement_name` VARCHAR(64) NULL DEFAULT NULL, `achievement_description` VARCHAR(512) NULL DEFAULT NULL);
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.5, 26 October 2019 by Anturke
|
||||
Added achievement_metadata table.
|
||||
|
||||
DROP TABLE IF EXISTS `achievement_metadata`;
|
||||
CREATE TABLE `achievement_metadata` (
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`achievement_version` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`achievement_type` enum('achievement','score','award') NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
|
||||
-----------------------------------------------------
|
||||
|
||||
Version 5.4, 5 October 2019 by Anturke
|
||||
Added achievements table.
|
||||
See hub migration verb in _achievement_data.dm for details on migrating.
|
||||
|
||||
CREATE TABLE `achievements` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`value` INT NULL,
|
||||
`last_updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`,`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
----------------------------------------------------
|
||||
|
||||
Version 5.3, 6 July 2019, by Atlanta-Ned
|
||||
Added a `feedback` column to the admin table, used for linking to individual admin feedback threads. Currently this is only used for statistics tracking tools such as Statbus and isn't used by the game.
|
||||
|
||||
ALTER TABLE `admin` ADD `feedback` VARCHAR(255) NULL DEFAULT NULL AFTER `rank`;
|
||||
|
||||
----------------------------------------------------
|
||||
|
||||
Version 5.2, 30 May 2019, by AffectedArc07
|
||||
Added a field to the `player` table to track ckey and discord ID relationships
|
||||
|
||||
ALTER TABLE `player`
|
||||
ADD COLUMN `discord_id` BIGINT NULL DEFAULT NULL AFTER `flags`;
|
||||
----------------------------------------------------
|
||||
|
||||
Version 5.1, 25 Feb 2018, by MrStonedOne
|
||||
Added four tables to enable storing of stickybans in the database since byond can lose them, and to enable disabling stickybans for a round without depending on a crash free round. Existing stickybans are automagically imported to the tables.
|
||||
|
||||
CREATE TABLE `stickyban` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`reason` VARCHAR(2048) NOT NULL,
|
||||
`banning_admin` VARCHAR(32) NOT NULL,
|
||||
`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `stickyban_matched_ckey` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ckey` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`exempt` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`stickyban`, `matched_ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `stickyban_matched_ip` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ip` INT UNSIGNED NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_ip`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `stickyban_matched_cid` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_cid` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_cid`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
----------------------------------------------------
|
||||
|
||||
Version 5.0, 28 October 2018, by Jordie0608
|
||||
Modified ban table to remove the need for the `bantype` column, a python script is used to migrate data to this new format.
|
||||
|
||||
See the file 'ban_conversion_2018-10-28.py' for instructions on how to use the script.
|
||||
|
||||
A new ban table can be created with the query:
|
||||
CREATE TABLE `ban` (
|
||||
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bantime` DATETIME NOT NULL,
|
||||
`server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
`round_id` INT(11) UNSIGNED NOT NULL,
|
||||
`role` VARCHAR(32) NULL DEFAULT NULL,
|
||||
`expiration_time` DATETIME NULL DEFAULT NULL,
|
||||
`applies_to_admins` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`reason` VARCHAR(2048) NOT NULL,
|
||||
`ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
`ip` INT(10) UNSIGNED NULL DEFAULT NULL,
|
||||
`computerid` VARCHAR(32) NULL DEFAULT NULL,
|
||||
`a_ckey` VARCHAR(32) NOT NULL,
|
||||
`a_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`a_computerid` VARCHAR(32) NOT NULL,
|
||||
`who` VARCHAR(2048) NOT NULL,
|
||||
`adminwho` VARCHAR(2048) NOT NULL,
|
||||
`edits` TEXT NULL DEFAULT NULL,
|
||||
`unbanned_datetime` DATETIME NULL DEFAULT NULL,
|
||||
`unbanned_ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
`unbanned_ip` INT(10) UNSIGNED NULL DEFAULT NULL,
|
||||
`unbanned_computerid` VARCHAR(32) NULL DEFAULT NULL,
|
||||
`unbanned_round_id` INT(11) UNSIGNED NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ban_isbanned` (`ckey`,`role`,`unbanned_datetime`,`expiration_time`),
|
||||
KEY `idx_ban_isbanned_details` (`ckey`,`ip`,`computerid`,`role`,`unbanned_datetime`,`expiration_time`),
|
||||
KEY `idx_ban_count` (`bantime`,`a_ckey`,`applies_to_admins`,`unbanned_datetime`,`expiration_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
|
||||
----------------------------------------------------
|
||||
|
||||
Version 4.7, 18 August 2018, by CitrusGender
|
||||
@@ -50,8 +293,7 @@ Added table `role_time_log` and triggers `role_timeTlogupdate`, `role_timeTlogin
|
||||
|
||||
CREATE TABLE `role_time_log` ( `id` BIGINT NOT NULL AUTO_INCREMENT , `ckey` VARCHAR(32) NOT NULL , `job` VARCHAR(128) NOT NULL , `delta` INT NOT NULL , `datetime` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`), INDEX (`ckey`), INDEX (`job`), INDEX (`datetime`)) ENGINE = InnoDB;
|
||||
|
||||
DELIMITER
|
||||
$$
|
||||
DELIMITER $$
|
||||
CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
@@ -61,7 +303,7 @@ $$
|
||||
CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
|
||||
DELIMITER ;
|
||||
----------------------------------------------------
|
||||
|
||||
Version 4.2, 17 April 2018, by Jordie0608
|
||||
|
||||
@@ -19,8 +19,9 @@ DROP TABLE IF EXISTS `admin`;
|
||||
CREATE TABLE `admin` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`rank` varchar(32) NOT NULL,
|
||||
`feedback` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -40,7 +41,7 @@ CREATE TABLE `admin_log` (
|
||||
`target` varchar(32) NOT NULL,
|
||||
`log` varchar(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -56,7 +57,7 @@ CREATE TABLE `admin_ranks` (
|
||||
`exclude_flags` smallint(5) unsigned NOT NULL,
|
||||
`can_edit_flags` smallint(5) unsigned NOT NULL,
|
||||
PRIMARY KEY (`rank`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -67,11 +68,11 @@ DROP TABLE IF EXISTS `ban`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `ban` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`bantime` datetime NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) NOT NULL,
|
||||
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bantime` DATETIME NOT NULL,
|
||||
`server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
`round_id` INT(11) UNSIGNED NOT NULL,
|
||||
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
|
||||
`reason` varchar(2048) NOT NULL,
|
||||
`job` varchar(32) DEFAULT NULL,
|
||||
@@ -95,7 +96,7 @@ CREATE TABLE `ban` (
|
||||
KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`),
|
||||
KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`),
|
||||
KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -115,7 +116,7 @@ CREATE TABLE `connection_log` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(45) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -152,7 +153,7 @@ CREATE TABLE `death` (
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -171,7 +172,7 @@ CREATE TABLE `feedback` (
|
||||
`version` tinyint(3) unsigned NOT NULL,
|
||||
`json` json NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -187,7 +188,7 @@ CREATE TABLE `ipintel` (
|
||||
`intel` double NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ip`),
|
||||
KEY `idx_ipintel` (`ip`,`intel`,`date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -206,7 +207,7 @@ CREATE TABLE `legacy_population` (
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -231,7 +232,7 @@ CREATE TABLE `library` (
|
||||
KEY `idx_lib_id_del` (`id`,`deleted`),
|
||||
KEY `idx_lib_del_title` (`deleted`,`title`),
|
||||
KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -255,14 +256,16 @@ CREATE TABLE `messages` (
|
||||
`secret` tinyint(1) unsigned NOT NULL,
|
||||
`expire_timestamp` datetime DEFAULT NULL,
|
||||
`severity` enum('high','medium','minor','none') DEFAULT NULL,
|
||||
`playtime` int(11) unsigned NULL DEFAULT NULL,
|
||||
`lasteditor` varchar(32) DEFAULT NULL,
|
||||
`edits` text,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`deleted_ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`),
|
||||
KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`),
|
||||
KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -299,7 +302,7 @@ CREATE TABLE IF NOT EXISTS `role_time_log` (
|
||||
KEY `ckey` (`ckey`),
|
||||
KEY `job` (`job`),
|
||||
KEY `datetime` (`datetime`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -324,7 +327,7 @@ CREATE TABLE `player` (
|
||||
PRIMARY KEY (`ckey`),
|
||||
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
|
||||
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -344,9 +347,10 @@ CREATE TABLE `poll_option` (
|
||||
`descmid` varchar(32) DEFAULT NULL,
|
||||
`descmax` varchar(32) DEFAULT NULL,
|
||||
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pop_pollid` (`pollid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -359,19 +363,23 @@ DROP TABLE IF EXISTS `poll_question`;
|
||||
CREATE TABLE `poll_question` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
|
||||
`created_datetime` datetime NOT NULL,
|
||||
`starttime` datetime NOT NULL,
|
||||
`endtime` datetime NOT NULL,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`subtitle` varchar(255) DEFAULT NULL,
|
||||
`adminonly` tinyint(1) unsigned NOT NULL,
|
||||
`multiplechoiceoptions` int(2) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) NOT NULL,
|
||||
`createdby_ip` int(10) unsigned NOT NULL,
|
||||
`dontshow` tinyint(1) unsigned NOT NULL,
|
||||
`allow_revoting` tinyint(1) unsigned NOT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
|
||||
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
|
||||
KEY `idx_pquest_time_deleted_id` (`starttime`,`endtime`, `deleted`, `id`),
|
||||
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -388,10 +396,11 @@ CREATE TABLE `poll_textreply` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`replytext` varchar(2048) NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -410,10 +419,11 @@ CREATE TABLE `poll_vote` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`rating` int(2) DEFAULT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
|
||||
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -438,7 +448,7 @@ CREATE TABLE `round` (
|
||||
`map_name` VARCHAR(32) NULL,
|
||||
`station_name` VARCHAR(80) NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
@@ -451,9 +461,113 @@ CREATE TABLE `schema_revision` (
|
||||
`minor` TINYINT(3) unsigned NOT NULL,
|
||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`major`, `minor`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
--
|
||||
-- Table structure for table `stickyban`
|
||||
--
|
||||
DROP TABLE IF EXISTS `stickyban`;
|
||||
CREATE TABLE `stickyban` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`reason` VARCHAR(2048) NOT NULL,
|
||||
`banning_admin` VARCHAR(32) NOT NULL,
|
||||
`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `stickyban_matched_ckey`
|
||||
--
|
||||
DROP TABLE IF EXISTS `stickyban_matched_ckey`;
|
||||
CREATE TABLE `stickyban_matched_ckey` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ckey` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`exempt` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`stickyban`, `matched_ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `stickyban_matched_ip`
|
||||
--
|
||||
DROP TABLE IF EXISTS `stickyban_matched_ip`;
|
||||
CREATE TABLE `stickyban_matched_ip` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ip` INT UNSIGNED NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_ip`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `stickyban_matched_cid`
|
||||
--
|
||||
DROP TABLE IF EXISTS `stickyban_matched_cid`;
|
||||
CREATE TABLE `stickyban_matched_cid` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_cid` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_cid`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `achievements`
|
||||
--
|
||||
DROP TABLE IF EXISTS `achievements`;
|
||||
CREATE TABLE `achievements` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`value` INT NULL,
|
||||
`last_updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`,`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DROP TABLE IF EXISTS `achievement_metadata`;
|
||||
CREATE TABLE `achievement_metadata` (
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`achievement_version` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`achievement_type` enum('achievement','score','award') NULL DEFAULT NULL,
|
||||
`achievement_name` VARCHAR(64) NULL DEFAULT NULL,
|
||||
`achievement_description` VARCHAR(512) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `ticket`
|
||||
--
|
||||
DROP TABLE IF EXISTS `ticket`;
|
||||
CREATE TABLE `ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ticket_act_recip` (`action`, `recipient`),
|
||||
KEY `idx_ticket_act_send` (`action`, `sender`),
|
||||
KEY `idx_ticket_tic_rid` (`ticket`, `round_id`),
|
||||
KEY `idx_ticket_act_time_rid` (`action`, `timestamp`, `round_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `set_poll_deleted`(
|
||||
IN `poll_id` INT
|
||||
)
|
||||
SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
UPDATE `poll_question` SET deleted = 1 WHERE id = poll_id;
|
||||
UPDATE `poll_option` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `poll_vote` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
|
||||
END
|
||||
$$
|
||||
CREATE TRIGGER `role_timeTlogupdate` AFTER UPDATE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
@@ -463,6 +577,21 @@ $$
|
||||
CREATE TRIGGER `role_timeTlogdelete` AFTER DELETE ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
DELIMITER ;
|
||||
|
||||
--
|
||||
-- Table structure for table `discord_links`
|
||||
--
|
||||
DROP TABLE IF EXISTS `discord_links`;
|
||||
CREATE TABLE `discord_links` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`discord_id` BIGINT(20) DEFAULT NULL,
|
||||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`one_time_token` VARCHAR(100) NOT NULL,
|
||||
`valid` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
|
||||
@@ -19,8 +19,9 @@ DROP TABLE IF EXISTS `SS13_admin`;
|
||||
CREATE TABLE `SS13_admin` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`rank` varchar(32) NOT NULL,
|
||||
`feedback` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -40,7 +41,7 @@ CREATE TABLE `SS13_admin_log` (
|
||||
`target` varchar(32) NOT NULL,
|
||||
`log` varchar(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -56,7 +57,7 @@ CREATE TABLE `SS13_admin_ranks` (
|
||||
`exclude_flags` smallint(5) unsigned NOT NULL,
|
||||
`can_edit_flags` smallint(5) unsigned NOT NULL,
|
||||
PRIMARY KEY (`rank`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -67,11 +68,11 @@ DROP TABLE IF EXISTS `SS13_ban`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `SS13_ban` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`bantime` datetime NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) NOT NULL,
|
||||
`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`bantime` DATETIME NOT NULL,
|
||||
`server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
`round_id` INT(11) UNSIGNED NOT NULL,
|
||||
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
|
||||
`reason` varchar(2048) NOT NULL,
|
||||
`job` varchar(32) DEFAULT NULL,
|
||||
@@ -95,7 +96,7 @@ CREATE TABLE `SS13_ban` (
|
||||
KEY `idx_ban_checkban` (`ckey`,`bantype`,`expiration_time`,`unbanned`,`job`),
|
||||
KEY `idx_ban_isbanned` (`ckey`,`ip`,`computerid`,`bantype`,`expiration_time`,`unbanned`),
|
||||
KEY `idx_ban_count` (`id`,`a_ckey`,`bantype`,`expiration_time`,`unbanned`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -115,7 +116,7 @@ CREATE TABLE `SS13_connection_log` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(45) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -152,7 +153,7 @@ CREATE TABLE `SS13_death` (
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -171,7 +172,7 @@ CREATE TABLE `SS13_feedback` (
|
||||
`key_type` enum('text', 'amount', 'tally', 'nested tally', 'associative') NOT NULL,
|
||||
`json` json NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -187,7 +188,7 @@ CREATE TABLE `SS13_ipintel` (
|
||||
`intel` double NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ip`),
|
||||
KEY `idx_ipintel` (`ip`,`intel`,`date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -206,7 +207,7 @@ CREATE TABLE `SS13_legacy_population` (
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -231,7 +232,7 @@ CREATE TABLE `SS13_library` (
|
||||
KEY `idx_lib_id_del` (`id`,`deleted`),
|
||||
KEY `idx_lib_del_title` (`deleted`,`title`),
|
||||
KEY `idx_lib_search` (`deleted`,`author`,`title`,`category`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -255,14 +256,16 @@ CREATE TABLE `SS13_messages` (
|
||||
`secret` tinyint(1) unsigned NOT NULL,
|
||||
`expire_timestamp` datetime DEFAULT NULL,
|
||||
`severity` enum('high','medium','minor','none') DEFAULT NULL,
|
||||
`playtime` int(11) unsigned NULL DEFAULT NULL,
|
||||
`lasteditor` varchar(32) DEFAULT NULL,
|
||||
`edits` text,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
`deleted_ckey` VARCHAR(32) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`),
|
||||
KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`),
|
||||
KEY `idx_msg_type_ckey_time_odr` (`type`,`targetckey`,`timestamp`, `deleted`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -299,7 +302,7 @@ CREATE TABLE IF NOT EXISTS `SS13_role_time_log` (
|
||||
KEY `ckey` (`ckey`),
|
||||
KEY `job` (`job`),
|
||||
KEY `datetime` (`datetime`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -324,7 +327,7 @@ CREATE TABLE `SS13_player` (
|
||||
PRIMARY KEY (`ckey`),
|
||||
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
|
||||
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -344,9 +347,10 @@ CREATE TABLE `SS13_poll_option` (
|
||||
`descmid` varchar(32) DEFAULT NULL,
|
||||
`descmax` varchar(32) DEFAULT NULL,
|
||||
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pop_pollid` (`pollid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -359,19 +363,23 @@ DROP TABLE IF EXISTS `SS13_poll_question`;
|
||||
CREATE TABLE `SS13_poll_question` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
|
||||
`created_datetime` datetime NOT NULL,
|
||||
`starttime` datetime NOT NULL,
|
||||
`endtime` datetime NOT NULL,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`subtitle` varchar(255) DEFAULT NULL,
|
||||
`adminonly` tinyint(1) unsigned NOT NULL,
|
||||
`multiplechoiceoptions` int(2) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) NOT NULL,
|
||||
`createdby_ip` int(10) unsigned NOT NULL,
|
||||
`dontshow` tinyint(1) unsigned NOT NULL,
|
||||
`allow_revoting` tinyint(1) unsigned NOT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pquest_question_time_ckey` (`question`,`starttime`,`endtime`,`createdby_ckey`,`createdby_ip`),
|
||||
KEY `idx_pquest_time_admin` (`starttime`,`endtime`,`adminonly`),
|
||||
KEY `idx_pquest_time_deleted_id` (`starttime`,`endtime`, `deleted`, `id`),
|
||||
KEY `idx_pquest_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -388,10 +396,11 @@ CREATE TABLE `SS13_poll_textreply` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`replytext` varchar(2048) NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -410,10 +419,11 @@ CREATE TABLE `SS13_poll_vote` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`rating` int(2) DEFAULT NULL,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
|
||||
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -438,7 +448,7 @@ CREATE TABLE `SS13_round` (
|
||||
`map_name` VARCHAR(32) NULL,
|
||||
`station_name` VARCHAR(80) NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
@@ -451,9 +461,113 @@ CREATE TABLE `SS13_schema_revision` (
|
||||
`minor` TINYINT(3) unsigned NOT NULL,
|
||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`major`,`minor`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_stickyban`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_stickyban`;
|
||||
CREATE TABLE `SS13_stickyban` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`reason` VARCHAR(2048) NOT NULL,
|
||||
`banning_admin` VARCHAR(32) NOT NULL,
|
||||
`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_stickyban_matched_ckey`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_stickyban_matched_ckey`;
|
||||
CREATE TABLE `SS13_stickyban_matched_ckey` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ckey` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`exempt` TINYINT(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`stickyban`, `matched_ckey`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_stickyban_matched_ip`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_stickyban_matched_ip`;
|
||||
CREATE TABLE `SS13_stickyban_matched_ip` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_ip` INT UNSIGNED NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_ip`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_stickyban_matched_cid`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_stickyban_matched_cid`;
|
||||
CREATE TABLE `SS13_stickyban_matched_cid` (
|
||||
`stickyban` VARCHAR(32) NOT NULL,
|
||||
`matched_cid` VARCHAR(32) NOT NULL,
|
||||
`first_matched` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`last_matched` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`stickyban`, `matched_cid`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_achievements`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_achievements`;
|
||||
CREATE TABLE `SS13_achievements` (
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`value` INT NULL,
|
||||
`last_updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`ckey`,`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
DROP TABLE IF EXISTS `SS13_achievement_metadata`;
|
||||
CREATE TABLE `SS13_achievement_metadata` (
|
||||
`achievement_key` VARCHAR(32) NOT NULL,
|
||||
`achievement_version` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`achievement_type` enum('achievement','score','award') NULL DEFAULT NULL,
|
||||
`achievement_name` VARCHAR(64) NULL DEFAULT NULL,
|
||||
`achievement_description` VARCHAR(512) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`achievement_key`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `SS13_ticket`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_ticket`;
|
||||
CREATE TABLE `SS13_ticket` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ticket` smallint(11) unsigned NOT NULL,
|
||||
`action` varchar(20) NOT NULL DEFAULT 'Message',
|
||||
`message` text NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`recipient` varchar(32) DEFAULT NULL,
|
||||
`sender` varchar(32) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ticket_act_recip` (`action`, `recipient`),
|
||||
KEY `idx_ticket_act_send` (`action`, `sender`),
|
||||
KEY `idx_ticket_tic_rid` (`ticket`, `round_id`),
|
||||
KEY `idx_ticket_act_time_rid` (`action`, `timestamp`, `round_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
DELIMITER $$
|
||||
CREATE PROCEDURE `set_poll_deleted`(
|
||||
IN `poll_id` INT
|
||||
)
|
||||
SQL SECURITY INVOKER
|
||||
BEGIN
|
||||
UPDATE `SS13_poll_question` SET deleted = 1 WHERE id = poll_id;
|
||||
UPDATE `SS13_poll_option` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `SS13_poll_vote` SET deleted = 1 WHERE pollid = poll_id;
|
||||
UPDATE `SS13_poll_textreply` SET deleted = 1 WHERE pollid = poll_id;
|
||||
END
|
||||
$$
|
||||
CREATE TRIGGER `SS13_role_timeTlogupdate` AFTER UPDATE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (NEW.CKEY, NEW.job, NEW.minutes-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
@@ -463,6 +577,21 @@ $$
|
||||
CREATE TRIGGER `SS13_role_timeTlogdelete` AFTER DELETE ON `SS13_role_time` FOR EACH ROW BEGIN INSERT into SS13_role_time_log (ckey, job, delta) VALUES (OLD.ckey, OLD.job, 0-OLD.minutes);
|
||||
END
|
||||
$$
|
||||
DELIMITER ;
|
||||
|
||||
--
|
||||
-- Table structure for table `discord_links`
|
||||
--
|
||||
DROP TABLE IF EXISTS `SS13_discord_links`;
|
||||
CREATE TABLE `SS13_discord_links` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` VARCHAR(32) NOT NULL,
|
||||
`discord_id` BIGINT(20) DEFAULT NULL,
|
||||
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`one_time_token` VARCHAR(100) NOT NULL,
|
||||
`valid` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
|
||||
@@ -100,7 +100,18 @@
|
||||
if(computer_id)
|
||||
cidquery = " OR computerid = '[computer_id]' "
|
||||
|
||||
var/datum/db_query/query_ban_check = SSdbcore.NewQuery("SELECT IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), ckey), IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey), a_ckey), reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")] WHERE (ckey = '[ckey]' [ipquery] [cidquery]) AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN') AND expiration_time > Now())) AND isnull(unbanned)")
|
||||
var/datum/db_query/query_ban_check = SSdbcore.NewQuery({"
|
||||
SELECT IFNULL((SELECT byond_key
|
||||
FROM [format_table_name("player")]
|
||||
WHERE [format_table_name("player")].ckey = [format_table_name("ban")].ckey), ckey),
|
||||
IFNULL((SELECT byond_key FROM [format_table_name("player")]
|
||||
WHERE [format_table_name("player")].ckey = [format_table_name("ban")].a_ckey), a_ckey), reason, expiration_time, duration, bantime, bantype, id, round_id FROM [format_table_name("ban")]
|
||||
WHERE (ckey = :ckey [ipquery] [cidquery])
|
||||
AND (bantype = 'PERMABAN' OR bantype = 'ADMIN_PERMABAN' OR ((bantype = 'TEMPBAN' OR bantype = 'ADMIN_TEMPBAN')
|
||||
AND expiration_time > Now())) AND isnull(unbanned)
|
||||
"}, list(
|
||||
"ckey" = ckey
|
||||
))
|
||||
if(!query_ban_check.Execute(async = TRUE))
|
||||
qdel(query_ban_check)
|
||||
key_cache[key] = 0
|
||||
|
||||
@@ -107,7 +107,10 @@
|
||||
descmax = input("Optional: Set description for maximum rating","Maximum rating description") as message|null
|
||||
if(descmax == null)
|
||||
return
|
||||
sql_option_list += list(list("text" = "'[option]'", "minval" = "'[minval]'", "maxval" = "'[maxval]'", "descmin" = "'[descmin]'", "descmid" = "'[descmid]'", "descmax" = "'[descmax]'", "default_percentage_calc" = "'[default_percentage_calc]'"))
|
||||
sql_option_list += list(list(
|
||||
"text" = option, "minval" = minval, "maxval" = maxval,
|
||||
"descmin" = descmin, "descmid" = descmid, "descmax" = descmax,
|
||||
"default_percentage_calc" = default_percentage_calc))
|
||||
switch(alert(" ",,"Add option","Finish", "Cancel"))
|
||||
if("Add option")
|
||||
add_option = 1
|
||||
@@ -119,8 +122,9 @@
|
||||
var/m2 = "[key_name_admin(usr)] has created a new server poll. Poll type: [polltype] - Admin Only: [adminonly ? "Yes" : "No"]<br>Question: [question]"
|
||||
var/datum/db_query/query_polladd_question = SSdbcore.NewQuery({"
|
||||
INSERT INTO [format_table_name("poll_question")] (polltype, starttime, endtime, question, adminonly, multiplechoiceoptions, createdby_ckey, createdby_ip, dontshow)
|
||||
VALUES (:polltype, :starttime, :endtime, :question, :adminonly, :choice_amount, :ckey, INET_ATON(:address), '[dontshow]')
|
||||
"}, list("polltype" = polltype, "starttime" = starttime, "endtime" = endtime,
|
||||
VALUES (:polltype, :starttime, :endtime, :question, :adminonly, :choice_amount, :ckey, INET_ATON(:address), :dontshow)
|
||||
"}, list(
|
||||
"polltype" = polltype, "starttime" = starttime, "endtime" = endtime,
|
||||
"question" = question, "adminonly" = adminonly, "choice_amount" = choice_amount,
|
||||
"ckey" = ckey, "address" = address, "dontshow" = dontshow
|
||||
))
|
||||
@@ -139,6 +143,6 @@
|
||||
qdel(query_get_id)
|
||||
for(var/list/i in sql_option_list)
|
||||
i |= list("pollid" = "'[pollid]'")
|
||||
SSdbcore.MassInsert(format_table_name("poll_option"), sql_option_list, warn = 1)
|
||||
SSdbcore.MassInsert(format_table_name("poll_option"), sql_option_list, warn = TRUE)
|
||||
log_admin(m1)
|
||||
message_admins(m2)
|
||||
|
||||
Reference in New Issue
Block a user