mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 07:48:55 +00:00
LF
This commit is contained in:
350
README.md
350
README.md
@@ -1,175 +1,175 @@
|
||||
## Citadel Station 13
|
||||
Based and maintained from /tg/station.
|
||||
|
||||
[](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13)
|
||||
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open")
|
||||
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
|
||||
|
||||
[](https://forthebadge.com) [](https://forthebadge.com) [](http://forthebadge.com) [](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
|
||||
|
||||
**Upstream Information**
|
||||
* **Website:** <https://www.tgstation13.org>
|
||||
* **Code:** <https://github.com/tgstation/tgstation>
|
||||
* **Wiki:** <https://tgstation13.org/wiki/Main_Page>
|
||||
* **Codedocs:** <https://codedocs.tgstation13.org>
|
||||
* **/tg/station Discord:** <https://tgstation13.org/phpBB/viewforum.php?f=60>
|
||||
* **Coderbus Discord:** <https://discord.gg/Vh8TJp9>
|
||||
* ~~**IRC:** <irc://irc.rizon.net/coderbus>~~ (dead)
|
||||
|
||||
**Citadel Station Information**
|
||||
* **Website:** <http://citadel-station.net>
|
||||
* **Code:** <https://github.com/Citadel-Station-13/Citadel-Station-13>
|
||||
* **Wiki:** <https://citadel-station.net/wiki/index.php?title=Main_Page>
|
||||
* **Forums:** <http://citadel-station.net/forum>
|
||||
* **Ban Appeals:** <http://citadel-station.net/forum/forumdisplay.php?fid=8>
|
||||
* **Discord:** <https://discord.gg/E6SQuhz>
|
||||
|
||||
## DOWNLOADING
|
||||
|
||||
There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code
|
||||
|
||||
Option 1:
|
||||
Follow this: http://www.tgstation13.org/wiki/Setting_up_git
|
||||
|
||||
Option 2: Download the source code as a zip by clicking the ZIP button in the
|
||||
code tab of https://github.com/tgstation/tgstation
|
||||
(note: this will use a lot of bandwidth if you wish to update and is a lot of
|
||||
hassle if you want to make any changes at all, so it's not recommended.)
|
||||
|
||||
Option 3: Download a pre-compiled nightly at https://tgstation13.download/nightlies/ (same caveats as option 2)
|
||||
|
||||
## INSTALLATION
|
||||
|
||||
First-time installation should be fairly straightforward. First, you'll need
|
||||
BYOND installed. You can get it from https://www.byond.com/download. Once you've done
|
||||
that, extract the game files to wherever you want to keep them. This is a
|
||||
sourcecode-only release, so the next step is to compile the server files.
|
||||
Open tgstation.dme by double-clicking it, open the Build menu, and click
|
||||
compile. This'll take a little while, and if everything's done right you'll get
|
||||
a message like this:
|
||||
|
||||
```
|
||||
saving tgstation.dmb (DEBUG mode)
|
||||
tgstation.dmb - 0 errors, 0 warnings
|
||||
```
|
||||
|
||||
If you see any errors or warnings, something has gone wrong - possibly a corrupt
|
||||
download or the files extracted wrong. If problems persist, ask for assistance
|
||||
in irc://irc.rizon.net/coderbus
|
||||
|
||||
Once that's done, open up the config folder. You'll want to edit config.txt to
|
||||
set the probabilities for different gamemodes in Secret and to set your server
|
||||
location so that all your players don't get disconnected at the end of each
|
||||
round. It's recommended you don't turn on the gamemodes with probability 0,
|
||||
except Extended, as they have various issues and aren't currently being tested,
|
||||
so they may have unknown and bizarre bugs. Extended is essentially no mode, and
|
||||
isn't in the Secret rotation by default as it's just not very fun.
|
||||
|
||||
You'll also want to edit config/admins.txt to remove the default admins and add
|
||||
your own. "Game Master" is the highest level of access, and probably the one
|
||||
you'll want to use for now. You can set up your own ranks and find out more in
|
||||
config/admin_ranks.txt
|
||||
|
||||
The format is
|
||||
|
||||
```
|
||||
byondkey = Rank
|
||||
```
|
||||
|
||||
where the admin rank must be properly capitalised.
|
||||
|
||||
This codebase also depends on a native library called rust-g. A precompiled
|
||||
Windows DLL is included in this repository, but Linux users will need to build
|
||||
and install it themselves. Directions can be found at the [rust-g
|
||||
repo](https://github.com/tgstation13/rust-g).
|
||||
|
||||
Finally, to start the server, run Dream Daemon and enter the path to your
|
||||
compiled tgstation.dmb file. Make sure to set the port to the one you
|
||||
specified in the config.txt, and set the Security box to 'Safe'. Then press GO
|
||||
and the server should start up and be ready to join. It is also recommended that
|
||||
you set up the SQL backend (see below).
|
||||
|
||||
## UPDATING
|
||||
|
||||
To update an existing installation, first back up your /config and /data folders
|
||||
as these store your server configuration, player preferences and banlist.
|
||||
|
||||
Then, extract the new files (preferably into a clean directory, but updating in
|
||||
place should work fine), copy your /config and /data folders back into the new
|
||||
install, overwriting when prompted except if we've specified otherwise, and
|
||||
recompile the game. Once you start the server up again, you should be running
|
||||
the new version.
|
||||
|
||||
## HOSTING
|
||||
|
||||
If you'd like a more robust server hosting option for tgstation and its
|
||||
derivatives. Check out our server tools suite at
|
||||
https://github.com/tgstation/tgstation-server
|
||||
|
||||
## MAPS
|
||||
|
||||
/tg/station currently comes equipped with five maps.
|
||||
|
||||
* [BoxStation (default)](http://tgstation13.org/wiki/Boxstation)
|
||||
* [MetaStation](https://tgstation13.org/wiki/MetaStation)
|
||||
* [DeltaStation](https://tgstation13.org/wiki/DeltaStation)
|
||||
* [OmegaStation](https://tgstation13.org/wiki/OmegaStation)
|
||||
* [PubbyStation](https://tgstation13.org/wiki/PubbyStation)
|
||||
|
||||
|
||||
All maps have their own code file that is in the base of the _maps directory. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility.
|
||||
|
||||
The map that will be loaded for the upcoming round is determined by reading data/next_map.json, which is a copy of the json files found in the _maps tree. If this file does not exist, the default map from config/maps.txt will be loaded. Failing that, BoxStation will be loaded. If you want to set a specific map to load next round you can use the Change Map verb in game before restarting the server or copy a json from _maps to data/next_map.json before starting the server. Also, for debugging purposes, ticking a corresponding map's code file in Dream Maker will force that map to load every round.
|
||||
|
||||
If you are hosting a server, and want randomly picked maps to be played each round, you can enable map rotation in [config.txt](config/config.txt) and then set the maps to be picked in the [maps.txt](config/maps.txt) file.
|
||||
|
||||
Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger)
|
||||
|
||||
## AWAY MISSIONS
|
||||
|
||||
/tg/station supports loading away missions however they are disabled by default.
|
||||
|
||||
Map files for away missions are located in the _maps/RandomZLevels directory. Each away mission includes it's own code definitions located in /code/modules/awaymissions/mission_code. These files must be included and compiled with the server beforehand otherwise the server will crash upon trying to load away missions that lack their code.
|
||||
|
||||
To enable an away mission open `config/awaymissionconfig.txt` and uncomment one of the .dmm lines by removing the #. If more than one away mission is uncommented then the away mission loader will randomly select one the enabled ones to load.
|
||||
|
||||
## SQL SETUP
|
||||
|
||||
The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database
|
||||
|
||||
## WEB/CDN RESOURCE DELIVERY
|
||||
|
||||
Web delivery of game resources makes it quicker for players to join and reduces some of the stress on the game server.
|
||||
|
||||
1. Edit compile_options.dm to set the `PRELOAD_RSC` define to `0`
|
||||
1. Add a url to config/external_rsc_urls pointing to a .zip file containing the .rsc.
|
||||
* If you keep up to date with /tg/ you could reuse /tg/'s rsc cdn at http://tgstation13.download/byond/tgstation.zip. Otherwise you can use cdn services like CDN77 or cloudflare (requires adding a page rule to enable caching of the zip), or roll your own cdn using route 53 and vps providers.
|
||||
* Regardless even offloading the rsc to a website without a CDN will be a massive improvement over the in game system for transferring files.
|
||||
|
||||
## IRC BOT SETUP
|
||||
|
||||
Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified
|
||||
IRC channel/server, see the /tools/minibot folder for more
|
||||
|
||||
## CONTRIBUTING
|
||||
|
||||
Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md)
|
||||
|
||||
## LICENSE
|
||||
|
||||
All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU AGPL v3](http://www.gnu.org/licenses/agpl-3.0.html).
|
||||
|
||||
All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
(Including tools unless their readme specifies otherwise.)
|
||||
|
||||
See LICENSE and GPLv3.txt for more details.
|
||||
|
||||
The TGS3 API is licensed as a subproject under the MIT license.
|
||||
|
||||
See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license.
|
||||
|
||||
tgui clientside is licensed as a subproject under the MIT license.
|
||||
Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1
|
||||
tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
|
||||
|
||||
All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
|
||||
## Citadel Station 13
|
||||
Based and maintained from /tg/station.
|
||||
|
||||
[](https://travis-ci.org/Citadel-Station-13/Citadel-Station-13)
|
||||
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Percentage of issues still open")
|
||||
[](http://isitmaintained.com/project/Citadel-Station-13/Citadel-Station-13 "Average time to resolve an issue")
|
||||
|
||||
[](https://forthebadge.com) [](https://forthebadge.com) [](http://forthebadge.com) [](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
|
||||
|
||||
**Upstream Information**
|
||||
* **Website:** <https://www.tgstation13.org>
|
||||
* **Code:** <https://github.com/tgstation/tgstation>
|
||||
* **Wiki:** <https://tgstation13.org/wiki/Main_Page>
|
||||
* **Codedocs:** <https://codedocs.tgstation13.org>
|
||||
* **/tg/station Discord:** <https://tgstation13.org/phpBB/viewforum.php?f=60>
|
||||
* **Coderbus Discord:** <https://discord.gg/Vh8TJp9>
|
||||
* ~~**IRC:** <irc://irc.rizon.net/coderbus>~~ (dead)
|
||||
|
||||
**Citadel Station Information**
|
||||
* **Website:** <http://citadel-station.net>
|
||||
* **Code:** <https://github.com/Citadel-Station-13/Citadel-Station-13>
|
||||
* **Wiki:** <https://citadel-station.net/wiki/index.php?title=Main_Page>
|
||||
* **Forums:** <http://citadel-station.net/forum>
|
||||
* **Ban Appeals:** <http://citadel-station.net/forum/forumdisplay.php?fid=8>
|
||||
* **Discord:** <https://discord.gg/E6SQuhz>
|
||||
|
||||
## DOWNLOADING
|
||||
|
||||
There are a number of ways to download the source code. Some are described here, an alternative all-inclusive guide is also located at http://www.tgstation13.org/wiki/Downloading_the_source_code
|
||||
|
||||
Option 1:
|
||||
Follow this: http://www.tgstation13.org/wiki/Setting_up_git
|
||||
|
||||
Option 2: Download the source code as a zip by clicking the ZIP button in the
|
||||
code tab of https://github.com/tgstation/tgstation
|
||||
(note: this will use a lot of bandwidth if you wish to update and is a lot of
|
||||
hassle if you want to make any changes at all, so it's not recommended.)
|
||||
|
||||
Option 3: Download a pre-compiled nightly at https://tgstation13.download/nightlies/ (same caveats as option 2)
|
||||
|
||||
## INSTALLATION
|
||||
|
||||
First-time installation should be fairly straightforward. First, you'll need
|
||||
BYOND installed. You can get it from https://www.byond.com/download. Once you've done
|
||||
that, extract the game files to wherever you want to keep them. This is a
|
||||
sourcecode-only release, so the next step is to compile the server files.
|
||||
Open tgstation.dme by double-clicking it, open the Build menu, and click
|
||||
compile. This'll take a little while, and if everything's done right you'll get
|
||||
a message like this:
|
||||
|
||||
```
|
||||
saving tgstation.dmb (DEBUG mode)
|
||||
tgstation.dmb - 0 errors, 0 warnings
|
||||
```
|
||||
|
||||
If you see any errors or warnings, something has gone wrong - possibly a corrupt
|
||||
download or the files extracted wrong. If problems persist, ask for assistance
|
||||
in irc://irc.rizon.net/coderbus
|
||||
|
||||
Once that's done, open up the config folder. You'll want to edit config.txt to
|
||||
set the probabilities for different gamemodes in Secret and to set your server
|
||||
location so that all your players don't get disconnected at the end of each
|
||||
round. It's recommended you don't turn on the gamemodes with probability 0,
|
||||
except Extended, as they have various issues and aren't currently being tested,
|
||||
so they may have unknown and bizarre bugs. Extended is essentially no mode, and
|
||||
isn't in the Secret rotation by default as it's just not very fun.
|
||||
|
||||
You'll also want to edit config/admins.txt to remove the default admins and add
|
||||
your own. "Game Master" is the highest level of access, and probably the one
|
||||
you'll want to use for now. You can set up your own ranks and find out more in
|
||||
config/admin_ranks.txt
|
||||
|
||||
The format is
|
||||
|
||||
```
|
||||
byondkey = Rank
|
||||
```
|
||||
|
||||
where the admin rank must be properly capitalised.
|
||||
|
||||
This codebase also depends on a native library called rust-g. A precompiled
|
||||
Windows DLL is included in this repository, but Linux users will need to build
|
||||
and install it themselves. Directions can be found at the [rust-g
|
||||
repo](https://github.com/tgstation13/rust-g).
|
||||
|
||||
Finally, to start the server, run Dream Daemon and enter the path to your
|
||||
compiled tgstation.dmb file. Make sure to set the port to the one you
|
||||
specified in the config.txt, and set the Security box to 'Safe'. Then press GO
|
||||
and the server should start up and be ready to join. It is also recommended that
|
||||
you set up the SQL backend (see below).
|
||||
|
||||
## UPDATING
|
||||
|
||||
To update an existing installation, first back up your /config and /data folders
|
||||
as these store your server configuration, player preferences and banlist.
|
||||
|
||||
Then, extract the new files (preferably into a clean directory, but updating in
|
||||
place should work fine), copy your /config and /data folders back into the new
|
||||
install, overwriting when prompted except if we've specified otherwise, and
|
||||
recompile the game. Once you start the server up again, you should be running
|
||||
the new version.
|
||||
|
||||
## HOSTING
|
||||
|
||||
If you'd like a more robust server hosting option for tgstation and its
|
||||
derivatives. Check out our server tools suite at
|
||||
https://github.com/tgstation/tgstation-server
|
||||
|
||||
## MAPS
|
||||
|
||||
/tg/station currently comes equipped with five maps.
|
||||
|
||||
* [BoxStation (default)](http://tgstation13.org/wiki/Boxstation)
|
||||
* [MetaStation](https://tgstation13.org/wiki/MetaStation)
|
||||
* [DeltaStation](https://tgstation13.org/wiki/DeltaStation)
|
||||
* [OmegaStation](https://tgstation13.org/wiki/OmegaStation)
|
||||
* [PubbyStation](https://tgstation13.org/wiki/PubbyStation)
|
||||
|
||||
|
||||
All maps have their own code file that is in the base of the _maps directory. Maps are loaded dynamically when the game starts. Follow this guideline when adding your own map, to your fork, for easy compatibility.
|
||||
|
||||
The map that will be loaded for the upcoming round is determined by reading data/next_map.json, which is a copy of the json files found in the _maps tree. If this file does not exist, the default map from config/maps.txt will be loaded. Failing that, BoxStation will be loaded. If you want to set a specific map to load next round you can use the Change Map verb in game before restarting the server or copy a json from _maps to data/next_map.json before starting the server. Also, for debugging purposes, ticking a corresponding map's code file in Dream Maker will force that map to load every round.
|
||||
|
||||
If you are hosting a server, and want randomly picked maps to be played each round, you can enable map rotation in [config.txt](config/config.txt) and then set the maps to be picked in the [maps.txt](config/maps.txt) file.
|
||||
|
||||
Anytime you want to make changes to a map it's imperative you use the [Map Merging tools](http://tgstation13.org/wiki/Map_Merger)
|
||||
|
||||
## AWAY MISSIONS
|
||||
|
||||
/tg/station supports loading away missions however they are disabled by default.
|
||||
|
||||
Map files for away missions are located in the _maps/RandomZLevels directory. Each away mission includes it's own code definitions located in /code/modules/awaymissions/mission_code. These files must be included and compiled with the server beforehand otherwise the server will crash upon trying to load away missions that lack their code.
|
||||
|
||||
To enable an away mission open `config/awaymissionconfig.txt` and uncomment one of the .dmm lines by removing the #. If more than one away mission is uncommented then the away mission loader will randomly select one the enabled ones to load.
|
||||
|
||||
## SQL SETUP
|
||||
|
||||
The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://www.tgstation13.org/wiki/Downloading_the_source_code#Setting_up_the_database
|
||||
|
||||
## WEB/CDN RESOURCE DELIVERY
|
||||
|
||||
Web delivery of game resources makes it quicker for players to join and reduces some of the stress on the game server.
|
||||
|
||||
1. Edit compile_options.dm to set the `PRELOAD_RSC` define to `0`
|
||||
1. Add a url to config/external_rsc_urls pointing to a .zip file containing the .rsc.
|
||||
* If you keep up to date with /tg/ you could reuse /tg/'s rsc cdn at http://tgstation13.download/byond/tgstation.zip. Otherwise you can use cdn services like CDN77 or cloudflare (requires adding a page rule to enable caching of the zip), or roll your own cdn using route 53 and vps providers.
|
||||
* Regardless even offloading the rsc to a website without a CDN will be a massive improvement over the in game system for transferring files.
|
||||
|
||||
## IRC BOT SETUP
|
||||
|
||||
Included in the repository is a python3 compatible IRC bot capable of relaying adminhelps to a specified
|
||||
IRC channel/server, see the /tools/minibot folder for more
|
||||
|
||||
## CONTRIBUTING
|
||||
|
||||
Please see [CONTRIBUTING.md](.github/CONTRIBUTING.md)
|
||||
|
||||
## LICENSE
|
||||
|
||||
All code after [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU AGPL v3](http://www.gnu.org/licenses/agpl-3.0.html).
|
||||
|
||||
All code before [commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST](https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under [GNU GPL v3](https://www.gnu.org/licenses/gpl-3.0.html).
|
||||
(Including tools unless their readme specifies otherwise.)
|
||||
|
||||
See LICENSE and GPLv3.txt for more details.
|
||||
|
||||
The TGS3 API is licensed as a subproject under the MIT license.
|
||||
|
||||
See the footers of code/\_\_DEFINES/server\_tools.dm, code/modules/server\_tools/st\_commands.dm, and code/modules/server\_tools/st\_inteface.dm for the MIT license.
|
||||
|
||||
tgui clientside is licensed as a subproject under the MIT license.
|
||||
Font Awesome font files, used by tgui, are licensed under the SIL Open Font License v1.1
|
||||
tgui assets are licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).
|
||||
|
||||
All assets including icons and sound are under a [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated.
|
||||
|
||||
@@ -1,473 +1,473 @@
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`rank` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin_log`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`adminckey` varchar(32) NOT NULL,
|
||||
`adminip` int(10) unsigned NOT NULL,
|
||||
`operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL,
|
||||
`target` varchar(32) NOT NULL,
|
||||
`log` varchar(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin_ranks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin_ranks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin_ranks` (
|
||||
`rank` varchar(32) NOT NULL,
|
||||
`flags` smallint(5) unsigned NOT NULL,
|
||||
`exclude_flags` smallint(5) unsigned NOT NULL,
|
||||
`can_edit_flags` smallint(5) unsigned NOT NULL,
|
||||
PRIMARY KEY (`rank`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `ban`
|
||||
--
|
||||
|
||||
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,
|
||||
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
|
||||
`reason` varchar(2048) NOT NULL,
|
||||
`job` varchar(32) DEFAULT NULL,
|
||||
`duration` int(11) NOT NULL,
|
||||
`expiration_time` datetime NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`computerid` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`a_ckey` varchar(32) NOT NULL,
|
||||
`a_computerid` varchar(32) NOT NULL,
|
||||
`a_ip` int(10) unsigned NOT NULL,
|
||||
`who` varchar(2048) NOT NULL,
|
||||
`adminwho` varchar(2048) NOT NULL,
|
||||
`edits` text,
|
||||
`unbanned` tinyint(3) unsigned DEFAULT NULL,
|
||||
`unbanned_datetime` datetime DEFAULT NULL,
|
||||
`unbanned_ckey` varchar(32) DEFAULT NULL,
|
||||
`unbanned_computerid` varchar(32) DEFAULT NULL,
|
||||
`unbanned_ip` int(10) unsigned DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `connection_log`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `connection_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `connection_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime DEFAULT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ckey` varchar(45) DEFAULT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(45) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `death`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `death`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `death` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`pod` varchar(50) NOT NULL,
|
||||
`x_coord` smallint(5) unsigned NOT NULL,
|
||||
`y_coord` smallint(5) unsigned NOT NULL,
|
||||
`z_coord` smallint(5) unsigned NOT NULL,
|
||||
`mapname` varchar(32) NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) NOT NULL,
|
||||
`tod` datetime NOT NULL COMMENT 'Time of death',
|
||||
`job` varchar(32) NOT NULL,
|
||||
`special` varchar(32) DEFAULT NULL,
|
||||
`name` varchar(96) NOT NULL,
|
||||
`byondkey` varchar(32) NOT NULL,
|
||||
`laname` varchar(96) DEFAULT NULL,
|
||||
`lakey` varchar(32) DEFAULT NULL,
|
||||
`bruteloss` smallint(5) unsigned NOT NULL,
|
||||
`brainloss` smallint(5) unsigned NOT NULL,
|
||||
`fireloss` smallint(5) unsigned NOT NULL,
|
||||
`oxyloss` smallint(5) unsigned NOT NULL,
|
||||
`toxloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned NOT NULL,
|
||||
`staminaloss` smallint(5) unsigned NOT NULL,
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `feedback`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `feedback`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `feedback` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`key_name` varchar(32) NOT NULL,
|
||||
`key_type` enum('text', 'amount', 'tally', 'nested tally', 'associative') NOT NULL,
|
||||
`version` tinyint(3) unsigned NOT NULL,
|
||||
`json` json NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `ipintel`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `ipintel`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `ipintel` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`intel` double NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ip`),
|
||||
KEY `idx_ipintel` (`ip`,`intel`,`date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `legacy_population`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `legacy_population`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `legacy_population` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`playercount` int(11) DEFAULT NULL,
|
||||
`admincount` int(11) DEFAULT NULL,
|
||||
`time` datetime NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `library`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `library`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `library` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`author` varchar(45) NOT NULL,
|
||||
`title` varchar(45) NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL DEFAULT 'LEGACY',
|
||||
`datetime` datetime NOT NULL,
|
||||
`deleted` tinyint(1) unsigned DEFAULT NULL,
|
||||
`round_id_created` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `deleted_idx` (`deleted`),
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `messages`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `messages`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `messages` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
|
||||
`targetckey` varchar(32) NOT NULL,
|
||||
`adminckey` varchar(32) NOT NULL,
|
||||
`text` varchar(2048) NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`server` varchar(32) DEFAULT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`secret` tinyint(1) unsigned NOT NULL,
|
||||
`expire_timestamp` datetime DEFAULT NULL,
|
||||
`severity` enum('high','medium','minor','none') DEFAULT NULL,
|
||||
`lasteditor` varchar(32) DEFAULT NULL,
|
||||
`edits` text,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `role_time`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `role_time`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
|
||||
CREATE TABLE `role_time`
|
||||
( `ckey` VARCHAR(32) NOT NULL ,
|
||||
`job` VARCHAR(32) NOT NULL ,
|
||||
`minutes` INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (`ckey`, `job`)
|
||||
) ENGINE = InnoDB;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `role_time`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `role_time_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `role_time_log` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`job` varchar(128) NOT NULL,
|
||||
`delta` int(11) NOT NULL,
|
||||
`datetime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ckey` (`ckey`),
|
||||
KEY `job` (`job`),
|
||||
KEY `datetime` (`datetime`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `player`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `player`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `player` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`byond_key` varchar(32) DEFAULT NULL,
|
||||
`firstseen` datetime NOT NULL,
|
||||
`firstseen_round_id` int(11) unsigned NOT NULL,
|
||||
`lastseen` datetime NOT NULL,
|
||||
`lastseen_round_id` int(11) unsigned NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(32) NOT NULL,
|
||||
`lastadminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
`accountjoindate` DATE DEFAULT NULL,
|
||||
`flags` smallint(5) unsigned DEFAULT '0' NOT NULL,
|
||||
PRIMARY KEY (`ckey`),
|
||||
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
|
||||
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_option`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_option`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_option` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`text` varchar(255) NOT NULL,
|
||||
`minval` int(3) DEFAULT NULL,
|
||||
`maxval` int(3) DEFAULT NULL,
|
||||
`descmin` varchar(32) DEFAULT NULL,
|
||||
`descmid` varchar(32) DEFAULT NULL,
|
||||
`descmax` varchar(32) DEFAULT NULL,
|
||||
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pop_pollid` (`pollid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_question`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_question`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_question` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
|
||||
`starttime` datetime NOT NULL,
|
||||
`endtime` datetime NOT NULL,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`adminonly` tinyint(1) unsigned NOT NULL,
|
||||
`multiplechoiceoptions` int(2) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) DEFAULT NULL,
|
||||
`createdby_ip` int(10) unsigned NOT NULL,
|
||||
`dontshow` tinyint(1) unsigned NOT NULL,
|
||||
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_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_textreply`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_textreply`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_textreply` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`replytext` varchar(2048) NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_vote`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_vote`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_vote` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`optionid` int(11) NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`rating` int(2) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
|
||||
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `round`
|
||||
--
|
||||
DROP TABLE IF EXISTS `round`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `round` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`initialize_datetime` DATETIME NOT NULL,
|
||||
`start_datetime` DATETIME NULL,
|
||||
`shutdown_datetime` DATETIME NULL,
|
||||
`end_datetime` DATETIME NULL,
|
||||
`server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
`commit_hash` CHAR(40) NULL,
|
||||
`game_mode` VARCHAR(32) NULL,
|
||||
`game_mode_result` VARCHAR(64) NULL,
|
||||
`end_state` VARCHAR(64) NULL,
|
||||
`shuttle_name` VARCHAR(64) NULL,
|
||||
`map_name` VARCHAR(32) NULL,
|
||||
`station_name` VARCHAR(80) NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
--
|
||||
-- Table structure for table `schema_revision`
|
||||
--
|
||||
DROP TABLE IF EXISTS `schema_revision`;
|
||||
CREATE TABLE `schema_revision` (
|
||||
`major` TINYINT(3) unsigned NOT NULL,
|
||||
`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;
|
||||
|
||||
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
|
||||
$$
|
||||
CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
|
||||
END
|
||||
$$
|
||||
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
|
||||
$$
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
|
||||
/*!40101 SET NAMES utf8 */;
|
||||
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
|
||||
/*!40103 SET TIME_ZONE='+00:00' */;
|
||||
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
|
||||
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
|
||||
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
|
||||
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`rank` varchar(32) NOT NULL,
|
||||
PRIMARY KEY (`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin_log`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`adminckey` varchar(32) NOT NULL,
|
||||
`adminip` int(10) unsigned NOT NULL,
|
||||
`operation` enum('add admin','remove admin','change admin rank','add rank','remove rank','change rank flags') NOT NULL,
|
||||
`target` varchar(32) NOT NULL,
|
||||
`log` varchar(1000) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `admin_ranks`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `admin_ranks`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `admin_ranks` (
|
||||
`rank` varchar(32) NOT NULL,
|
||||
`flags` smallint(5) unsigned NOT NULL,
|
||||
`exclude_flags` smallint(5) unsigned NOT NULL,
|
||||
`can_edit_flags` smallint(5) unsigned NOT NULL,
|
||||
PRIMARY KEY (`rank`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `ban`
|
||||
--
|
||||
|
||||
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,
|
||||
`bantype` enum('PERMABAN','TEMPBAN','JOB_PERMABAN','JOB_TEMPBAN','ADMIN_PERMABAN','ADMIN_TEMPBAN') NOT NULL,
|
||||
`reason` varchar(2048) NOT NULL,
|
||||
`job` varchar(32) DEFAULT NULL,
|
||||
`duration` int(11) NOT NULL,
|
||||
`expiration_time` datetime NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`computerid` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`a_ckey` varchar(32) NOT NULL,
|
||||
`a_computerid` varchar(32) NOT NULL,
|
||||
`a_ip` int(10) unsigned NOT NULL,
|
||||
`who` varchar(2048) NOT NULL,
|
||||
`adminwho` varchar(2048) NOT NULL,
|
||||
`edits` text,
|
||||
`unbanned` tinyint(3) unsigned DEFAULT NULL,
|
||||
`unbanned_datetime` datetime DEFAULT NULL,
|
||||
`unbanned_ckey` varchar(32) DEFAULT NULL,
|
||||
`unbanned_computerid` varchar(32) DEFAULT NULL,
|
||||
`unbanned_ip` int(10) unsigned DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `connection_log`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `connection_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `connection_log` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime DEFAULT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`ckey` varchar(45) DEFAULT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(45) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `death`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `death`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `death` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`pod` varchar(50) NOT NULL,
|
||||
`x_coord` smallint(5) unsigned NOT NULL,
|
||||
`y_coord` smallint(5) unsigned NOT NULL,
|
||||
`z_coord` smallint(5) unsigned NOT NULL,
|
||||
`mapname` varchar(32) NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) NOT NULL,
|
||||
`tod` datetime NOT NULL COMMENT 'Time of death',
|
||||
`job` varchar(32) NOT NULL,
|
||||
`special` varchar(32) DEFAULT NULL,
|
||||
`name` varchar(96) NOT NULL,
|
||||
`byondkey` varchar(32) NOT NULL,
|
||||
`laname` varchar(96) DEFAULT NULL,
|
||||
`lakey` varchar(32) DEFAULT NULL,
|
||||
`bruteloss` smallint(5) unsigned NOT NULL,
|
||||
`brainloss` smallint(5) unsigned NOT NULL,
|
||||
`fireloss` smallint(5) unsigned NOT NULL,
|
||||
`oxyloss` smallint(5) unsigned NOT NULL,
|
||||
`toxloss` smallint(5) unsigned NOT NULL,
|
||||
`cloneloss` smallint(5) unsigned NOT NULL,
|
||||
`staminaloss` smallint(5) unsigned NOT NULL,
|
||||
`last_words` varchar(255) DEFAULT NULL,
|
||||
`suicide` tinyint(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `feedback`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `feedback`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `feedback` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`key_name` varchar(32) NOT NULL,
|
||||
`key_type` enum('text', 'amount', 'tally', 'nested tally', 'associative') NOT NULL,
|
||||
`version` tinyint(3) unsigned NOT NULL,
|
||||
`json` json NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `ipintel`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `ipintel`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `ipintel` (
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`intel` double NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ip`),
|
||||
KEY `idx_ipintel` (`ip`,`intel`,`date`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `legacy_population`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `legacy_population`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `legacy_population` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`playercount` int(11) DEFAULT NULL,
|
||||
`admincount` int(11) DEFAULT NULL,
|
||||
`time` datetime NOT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `library`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `library`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `library` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`author` varchar(45) NOT NULL,
|
||||
`title` varchar(45) NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`category` enum('Any','Fiction','Non-Fiction','Adult','Reference','Religion') NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL DEFAULT 'LEGACY',
|
||||
`datetime` datetime NOT NULL,
|
||||
`deleted` tinyint(1) unsigned DEFAULT NULL,
|
||||
`round_id_created` int(11) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `deleted_idx` (`deleted`),
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `messages`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `messages`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `messages` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`type` enum('memo','message','message sent','note','watchlist entry') NOT NULL,
|
||||
`targetckey` varchar(32) NOT NULL,
|
||||
`adminckey` varchar(32) NOT NULL,
|
||||
`text` varchar(2048) NOT NULL,
|
||||
`timestamp` datetime NOT NULL,
|
||||
`server` varchar(32) DEFAULT NULL,
|
||||
`server_ip` int(10) unsigned NOT NULL,
|
||||
`server_port` smallint(5) unsigned NOT NULL,
|
||||
`round_id` int(11) unsigned NOT NULL,
|
||||
`secret` tinyint(1) unsigned NOT NULL,
|
||||
`expire_timestamp` datetime DEFAULT NULL,
|
||||
`severity` enum('high','medium','minor','none') DEFAULT NULL,
|
||||
`lasteditor` varchar(32) DEFAULT NULL,
|
||||
`edits` text,
|
||||
`deleted` tinyint(1) unsigned NOT NULL DEFAULT '0',
|
||||
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;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `role_time`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `role_time`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
|
||||
CREATE TABLE `role_time`
|
||||
( `ckey` VARCHAR(32) NOT NULL ,
|
||||
`job` VARCHAR(32) NOT NULL ,
|
||||
`minutes` INT UNSIGNED NOT NULL,
|
||||
PRIMARY KEY (`ckey`, `job`)
|
||||
) ENGINE = InnoDB;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `role_time`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `role_time_log`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `role_time_log` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`job` varchar(128) NOT NULL,
|
||||
`delta` int(11) NOT NULL,
|
||||
`datetime` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `ckey` (`ckey`),
|
||||
KEY `job` (`job`),
|
||||
KEY `datetime` (`datetime`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `player`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `player`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `player` (
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`byond_key` varchar(32) DEFAULT NULL,
|
||||
`firstseen` datetime NOT NULL,
|
||||
`firstseen_round_id` int(11) unsigned NOT NULL,
|
||||
`lastseen` datetime NOT NULL,
|
||||
`lastseen_round_id` int(11) unsigned NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`computerid` varchar(32) NOT NULL,
|
||||
`lastadminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
`accountjoindate` DATE DEFAULT NULL,
|
||||
`flags` smallint(5) unsigned DEFAULT '0' NOT NULL,
|
||||
PRIMARY KEY (`ckey`),
|
||||
KEY `idx_player_cid_ckey` (`computerid`,`ckey`),
|
||||
KEY `idx_player_ip_ckey` (`ip`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_option`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_option`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_option` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`text` varchar(255) NOT NULL,
|
||||
`minval` int(3) DEFAULT NULL,
|
||||
`maxval` int(3) DEFAULT NULL,
|
||||
`descmin` varchar(32) DEFAULT NULL,
|
||||
`descmid` varchar(32) DEFAULT NULL,
|
||||
`descmax` varchar(32) DEFAULT NULL,
|
||||
`default_percentage_calc` tinyint(1) unsigned NOT NULL DEFAULT '1',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pop_pollid` (`pollid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_question`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_question`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_question` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`polltype` enum('OPTION','TEXT','NUMVAL','MULTICHOICE','IRV') NOT NULL,
|
||||
`starttime` datetime NOT NULL,
|
||||
`endtime` datetime NOT NULL,
|
||||
`question` varchar(255) NOT NULL,
|
||||
`adminonly` tinyint(1) unsigned NOT NULL,
|
||||
`multiplechoiceoptions` int(2) DEFAULT NULL,
|
||||
`createdby_ckey` varchar(32) DEFAULT NULL,
|
||||
`createdby_ip` int(10) unsigned NOT NULL,
|
||||
`dontshow` tinyint(1) unsigned NOT NULL,
|
||||
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_id_time_type_admin` (`id`,`starttime`,`endtime`,`polltype`,`adminonly`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_textreply`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_textreply`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_textreply` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`replytext` varchar(2048) NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL DEFAULT 'Player',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_ptext_pollid_ckey` (`pollid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `poll_vote`
|
||||
--
|
||||
|
||||
DROP TABLE IF EXISTS `poll_vote`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `poll_vote` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`datetime` datetime NOT NULL,
|
||||
`pollid` int(11) NOT NULL,
|
||||
`optionid` int(11) NOT NULL,
|
||||
`ckey` varchar(32) NOT NULL,
|
||||
`ip` int(10) unsigned NOT NULL,
|
||||
`adminrank` varchar(32) NOT NULL,
|
||||
`rating` int(2) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_pvote_pollid_ckey` (`pollid`,`ckey`),
|
||||
KEY `idx_pvote_optionid_ckey` (`optionid`,`ckey`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
-- Table structure for table `round`
|
||||
--
|
||||
DROP TABLE IF EXISTS `round`;
|
||||
/*!40101 SET @saved_cs_client = @@character_set_client */;
|
||||
/*!40101 SET character_set_client = utf8 */;
|
||||
CREATE TABLE `round` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`initialize_datetime` DATETIME NOT NULL,
|
||||
`start_datetime` DATETIME NULL,
|
||||
`shutdown_datetime` DATETIME NULL,
|
||||
`end_datetime` DATETIME NULL,
|
||||
`server_ip` INT(10) UNSIGNED NOT NULL,
|
||||
`server_port` SMALLINT(5) UNSIGNED NOT NULL,
|
||||
`commit_hash` CHAR(40) NULL,
|
||||
`game_mode` VARCHAR(32) NULL,
|
||||
`game_mode_result` VARCHAR(64) NULL,
|
||||
`end_state` VARCHAR(64) NULL,
|
||||
`shuttle_name` VARCHAR(64) NULL,
|
||||
`map_name` VARCHAR(32) NULL,
|
||||
`station_name` VARCHAR(80) NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
|
||||
|
||||
--
|
||||
-- Table structure for table `schema_revision`
|
||||
--
|
||||
DROP TABLE IF EXISTS `schema_revision`;
|
||||
CREATE TABLE `schema_revision` (
|
||||
`major` TINYINT(3) unsigned NOT NULL,
|
||||
`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;
|
||||
|
||||
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
|
||||
$$
|
||||
CREATE TRIGGER `role_timeTloginsert` AFTER INSERT ON `role_time` FOR EACH ROW BEGIN INSERT into role_time_log (ckey, job, delta) VALUES (NEW.ckey, NEW.job, NEW.minutes);
|
||||
END
|
||||
$$
|
||||
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
|
||||
$$
|
||||
|
||||
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
|
||||
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
|
||||
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
|
||||
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
|
||||
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
|
||||
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
|
||||
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
|
||||
|
||||
44
TGS3.json
44
TGS3.json
@@ -1,22 +1,22 @@
|
||||
{
|
||||
"documentation": "/tg/station server 3 configuration file",
|
||||
"changelog": {
|
||||
"script": "tools/ss13_genchangelog.py",
|
||||
"arguments": "html/changelog.html html/changelogs",
|
||||
"pip_dependancies": [
|
||||
"PyYaml",
|
||||
"beautifulsoup4"
|
||||
]
|
||||
},
|
||||
"synchronize_paths": [
|
||||
"html/changelog.html",
|
||||
"html/changelogs/*"
|
||||
],
|
||||
"static_directories": [
|
||||
"config",
|
||||
"data"
|
||||
],
|
||||
"dlls": [
|
||||
"libmariadb.dll"
|
||||
]
|
||||
}
|
||||
{
|
||||
"documentation": "/tg/station server 3 configuration file",
|
||||
"changelog": {
|
||||
"script": "tools/ss13_genchangelog.py",
|
||||
"arguments": "html/changelog.html html/changelogs",
|
||||
"pip_dependancies": [
|
||||
"PyYaml",
|
||||
"beautifulsoup4"
|
||||
]
|
||||
},
|
||||
"synchronize_paths": [
|
||||
"html/changelog.html",
|
||||
"html/changelogs/*"
|
||||
],
|
||||
"static_directories": [
|
||||
"config",
|
||||
"data"
|
||||
],
|
||||
"dlls": [
|
||||
"libmariadb.dll"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"map_name": "Box Station",
|
||||
"map_path": "map_files/BoxStation",
|
||||
"map_file": "BoxStation.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_box",
|
||||
"ferry": "ferry_fancy",
|
||||
"whiteship": "whiteship_box",
|
||||
"emergency": "emergency_box"
|
||||
}
|
||||
}
|
||||
{
|
||||
"map_name": "Box Station",
|
||||
"map_path": "map_files/BoxStation",
|
||||
"map_file": "BoxStation.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_box",
|
||||
"ferry": "ferry_fancy",
|
||||
"whiteship": "whiteship_box",
|
||||
"emergency": "emergency_box"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"map_name": "Runtime Station",
|
||||
"map_path": "map_files/debug",
|
||||
"map_file": "runtimestation.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_delta"
|
||||
}
|
||||
}
|
||||
{
|
||||
"map_name": "Runtime Station",
|
||||
"map_path": "map_files/debug",
|
||||
"map_file": "runtimestation.dmm",
|
||||
"shuttles": {
|
||||
"cargo": "cargo_delta"
|
||||
}
|
||||
}
|
||||
|
||||
50
bot/nudge.py
50
bot/nudge.py
@@ -1,25 +1,25 @@
|
||||
#!/usr/bin/env python3
|
||||
from config import *
|
||||
import sys
|
||||
import pickle
|
||||
import socket
|
||||
|
||||
|
||||
def pack():
|
||||
ip = sys.argv[1]
|
||||
try:
|
||||
data = sys.argv[2:]
|
||||
except:
|
||||
data = "NO DATA SPECIFIED"
|
||||
|
||||
nudge(pickle.dumps({"ip": ip, "data": data}))
|
||||
|
||||
|
||||
def nudge(data):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect(("localhost", 45678))
|
||||
s.send(data)
|
||||
s.close()
|
||||
|
||||
if __name__ == "__main__" and len(sys.argv) > 1:
|
||||
pack()
|
||||
#!/usr/bin/env python3
|
||||
from config import *
|
||||
import sys
|
||||
import pickle
|
||||
import socket
|
||||
|
||||
|
||||
def pack():
|
||||
ip = sys.argv[1]
|
||||
try:
|
||||
data = sys.argv[2:]
|
||||
except:
|
||||
data = "NO DATA SPECIFIED"
|
||||
|
||||
nudge(pickle.dumps({"ip": ip, "data": data}))
|
||||
|
||||
|
||||
def nudge(data):
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.connect(("localhost", 45678))
|
||||
s.send(data)
|
||||
s.close()
|
||||
|
||||
if __name__ == "__main__" and len(sys.argv) > 1:
|
||||
pack()
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Datum Component System (DCS)
|
||||
|
||||
## Concept
|
||||
|
||||
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
|
||||
|
||||
See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole.
|
||||
|
||||
### See/Define signals and their arguments in [__DEFINES\components.dm](..\..\__DEFINES\components.dm)
|
||||
# Datum Component System (DCS)
|
||||
|
||||
## Concept
|
||||
|
||||
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening.
|
||||
|
||||
See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole.
|
||||
|
||||
### See/Define signals and their arguments in [__DEFINES\components.dm](..\..\__DEFINES\components.dm)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
## Custom antag reputation values
|
||||
## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
|
||||
## e.g.
|
||||
## ANTAG_REP Captain 10
|
||||
## ANTAG_REP Assistant 0
|
||||
## Custom antag reputation values
|
||||
## List of job titles followed by antag rep value, all prefixed with ANTAG_REP. See code/modules/jobs/job_types for titles
|
||||
## e.g.
|
||||
## ANTAG_REP Captain 10
|
||||
## ANTAG_REP Assistant 0
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
## Communication key for receiving data through world/Topic(), you don't want to give this out
|
||||
#COMMS_KEY default_pwd
|
||||
|
||||
## World address and port for server recieving cross server messages
|
||||
## Use '+' to denote spaces in ServerName
|
||||
## Repeat this entry to add more servers
|
||||
#CROSS_SERVER ServerName byond:\\address:port
|
||||
|
||||
## Name that the server calls itself in communications
|
||||
#CROSS_COMMS_NAME
|
||||
|
||||
## Hub address for tracking stats
|
||||
## example: Hubmakerckey.Hubname
|
||||
#MEDAL_HUB_ADDRESS
|
||||
|
||||
## Password for the hub page
|
||||
## Communication key for receiving data through world/Topic(), you don't want to give this out
|
||||
#COMMS_KEY default_pwd
|
||||
|
||||
## World address and port for server recieving cross server messages
|
||||
## Use '+' to denote spaces in ServerName
|
||||
## Repeat this entry to add more servers
|
||||
#CROSS_SERVER ServerName byond:\\address:port
|
||||
|
||||
## Name that the server calls itself in communications
|
||||
#CROSS_COMMS_NAME
|
||||
|
||||
## Hub address for tracking stats
|
||||
## example: Hubmakerckey.Hubname
|
||||
#MEDAL_HUB_ADDRESS
|
||||
|
||||
## Password for the hub page
|
||||
#MEDAL_HUB_PASSWORD
|
||||
@@ -1,41 +1,41 @@
|
||||
.top{font-family:Tahoma,sans-serif;font-size:12px;}
|
||||
h2{font-family:Tahoma,sans-serif;}
|
||||
a img {border:none;}
|
||||
.bgimages16 li {
|
||||
padding:2px 10px 2px 30px;
|
||||
background-position:6px center;
|
||||
background-repeat:no-repeat;
|
||||
border:1px solid #ddd;
|
||||
border-left:4px solid #999;
|
||||
margin-bottom:2px;
|
||||
}
|
||||
.bugfix {background-image:url(bug-minus.png)}
|
||||
.wip {background-image:url(hard-hat-exclamation.png)}
|
||||
.tweak {background-image:url(wrench-screwdriver.png)}
|
||||
.soundadd {background-image:url(music-plus.png)}
|
||||
.sounddel {background-image:url(music-minus.png)}
|
||||
.rscdel {background-image:url(cross-circle.png)}
|
||||
.rscadd {background-image:url(tick-circle.png)}
|
||||
.imageadd {background-image:url(image-plus.png)}
|
||||
.imagedel {background-image:url(image-minus.png)}
|
||||
.spellcheck {background-image:url(spell-check.png)}
|
||||
.experiment {background-image:url(burn-exclamation.png)}
|
||||
.refactor {background-image:url(burn-exclamation.png)}
|
||||
.code_imp {background-image:url(coding.png)}
|
||||
.config {background-image:url(chrome-wrench.png)}
|
||||
.admin {background-image:url(ban.png)}
|
||||
.server {background-image:url(hard-hat-exclamation.png)}
|
||||
.balance {background-image:url(scales.png)}
|
||||
.sansserif {font-family:Tahoma,sans-serif;font-size:12px;}
|
||||
.commit {margin-bottom:20px;font-size:100%;font-weight:normal;}
|
||||
.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;}
|
||||
.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;}
|
||||
.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;}
|
||||
.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;}
|
||||
.hidden {display:none;}
|
||||
.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;}
|
||||
.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;}
|
||||
.indrop img {margin-right:5px;vertical-align:middle;}
|
||||
.closed {background:url(chevron-expand.png) right center no-repeat;}
|
||||
.open {background:url(chevron.png) right center no-repeat;}
|
||||
.lic {font-size:9px;}
|
||||
.top{font-family:Tahoma,sans-serif;font-size:12px;}
|
||||
h2{font-family:Tahoma,sans-serif;}
|
||||
a img {border:none;}
|
||||
.bgimages16 li {
|
||||
padding:2px 10px 2px 30px;
|
||||
background-position:6px center;
|
||||
background-repeat:no-repeat;
|
||||
border:1px solid #ddd;
|
||||
border-left:4px solid #999;
|
||||
margin-bottom:2px;
|
||||
}
|
||||
.bugfix {background-image:url(bug-minus.png)}
|
||||
.wip {background-image:url(hard-hat-exclamation.png)}
|
||||
.tweak {background-image:url(wrench-screwdriver.png)}
|
||||
.soundadd {background-image:url(music-plus.png)}
|
||||
.sounddel {background-image:url(music-minus.png)}
|
||||
.rscdel {background-image:url(cross-circle.png)}
|
||||
.rscadd {background-image:url(tick-circle.png)}
|
||||
.imageadd {background-image:url(image-plus.png)}
|
||||
.imagedel {background-image:url(image-minus.png)}
|
||||
.spellcheck {background-image:url(spell-check.png)}
|
||||
.experiment {background-image:url(burn-exclamation.png)}
|
||||
.refactor {background-image:url(burn-exclamation.png)}
|
||||
.code_imp {background-image:url(coding.png)}
|
||||
.config {background-image:url(chrome-wrench.png)}
|
||||
.admin {background-image:url(ban.png)}
|
||||
.server {background-image:url(hard-hat-exclamation.png)}
|
||||
.balance {background-image:url(scales.png)}
|
||||
.sansserif {font-family:Tahoma,sans-serif;font-size:12px;}
|
||||
.commit {margin-bottom:20px;font-size:100%;font-weight:normal;}
|
||||
.changes {list-style:none;margin:5px 0;padding:0 0 0 25px;font-size:0.8em;}
|
||||
.date {margin:10px 0;color:blue;border-bottom:2px solid #00f;width:60%;padding:2px 0;font-size:1em;font-weight:bold;}
|
||||
.author {padding-left:10px;margin:0;font-weight:bold;font-size:0.9em;}
|
||||
.drop {cursor:pointer;border:1px solid #999;display:inline;font-size:0.9em;padding:1px 20px 1px 5px;line-height:16px;}
|
||||
.hidden {display:none;}
|
||||
.indrop {margin:2px 0 0 0;clear:both;background:#fff;border:1px solid #ddd;padding:5px 10px;}
|
||||
.indrop p {margin:0;font-size:0.8em;line-height:16px;margin:1px 0;}
|
||||
.indrop img {margin-right:5px;vertical-align:middle;}
|
||||
.closed {background:url(chevron-expand.png) right center no-repeat;}
|
||||
.open {background:url(chevron.png) right center no-repeat;}
|
||||
.lic {font-size:9px;}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
distressed_cat.ogg from Cat annoyed meow / wail by jbierfeldt at https://freesound.org/people/jbierfeldt/sounds/440735/, chopped up and ogged
|
||||
distressed_cat.ogg from Cat annoyed meow / wail by jbierfeldt at https://freesound.org/people/jbierfeldt/sounds/440735/, chopped up and ogged
|
||||
cat_puking.ogg from catpuking mp3 by NoiseCollector and Mocha the cat at https://freesound.org/people/NoiseCollector/sounds/80778/, chopped up, volume altered and ogged
|
||||
@@ -1,375 +1,375 @@
|
||||
abundant
|
||||
adorable
|
||||
adventurous
|
||||
aggressive
|
||||
agreeable
|
||||
alert
|
||||
alive
|
||||
amused
|
||||
ancient
|
||||
angry
|
||||
annoyed
|
||||
annoying
|
||||
anxious
|
||||
arrogant
|
||||
ashamed
|
||||
attractive
|
||||
average
|
||||
awful
|
||||
bad
|
||||
beautiful
|
||||
better
|
||||
bewildered
|
||||
big
|
||||
bitter
|
||||
black
|
||||
bloody
|
||||
blue
|
||||
blue-eyed
|
||||
blushing
|
||||
boiling
|
||||
bored
|
||||
brainy
|
||||
brave
|
||||
breakable
|
||||
breezy
|
||||
brief
|
||||
bright
|
||||
broad
|
||||
broken
|
||||
bumpy
|
||||
busy
|
||||
calm
|
||||
careful
|
||||
cautious
|
||||
charming
|
||||
cheerful
|
||||
chilly
|
||||
chubby
|
||||
clean
|
||||
clear
|
||||
clever
|
||||
cloudy
|
||||
clumsy
|
||||
cold
|
||||
colorful
|
||||
colossal
|
||||
combative
|
||||
comfortable
|
||||
concerned
|
||||
condemned
|
||||
confused
|
||||
cooing
|
||||
cool
|
||||
cooperative
|
||||
courageous
|
||||
crazy
|
||||
crazy flipped-out
|
||||
creepy
|
||||
crooked
|
||||
crowded
|
||||
cruel
|
||||
cuddly
|
||||
curious
|
||||
curly
|
||||
curved
|
||||
cute
|
||||
damaged
|
||||
damp
|
||||
dangerous
|
||||
dark
|
||||
dead
|
||||
deafening
|
||||
deep
|
||||
defeated
|
||||
defiant
|
||||
delicious
|
||||
delightful
|
||||
depressed
|
||||
determined
|
||||
different
|
||||
difficult
|
||||
dirty
|
||||
disgusted
|
||||
distinct
|
||||
disturbed
|
||||
dizzy
|
||||
doubtful
|
||||
drab
|
||||
dry
|
||||
dull
|
||||
dusty
|
||||
eager
|
||||
early
|
||||
easy
|
||||
elated
|
||||
elegant
|
||||
embarrassed
|
||||
empty
|
||||
enchanting
|
||||
encouraging
|
||||
energetic
|
||||
enthusiastic
|
||||
envious
|
||||
evil
|
||||
excited
|
||||
expensive
|
||||
exuberant
|
||||
faint
|
||||
fair
|
||||
faithful
|
||||
famous
|
||||
fancy
|
||||
fantastic
|
||||
fast
|
||||
fat
|
||||
few
|
||||
fierce
|
||||
filthy
|
||||
fine
|
||||
flaky
|
||||
flat
|
||||
fluffy
|
||||
fluttering
|
||||
foolish
|
||||
fragile
|
||||
frail
|
||||
frantic
|
||||
freezing
|
||||
fresh
|
||||
friendly
|
||||
frightened
|
||||
funny
|
||||
fuzzy
|
||||
gentle
|
||||
gifted
|
||||
gigantic
|
||||
glamorous
|
||||
gleaming
|
||||
glorious
|
||||
good
|
||||
gorgeous
|
||||
graceful
|
||||
greasy
|
||||
great
|
||||
grieving
|
||||
grotesque
|
||||
grubby
|
||||
grumpy
|
||||
handsome
|
||||
happy
|
||||
hard
|
||||
harsh
|
||||
healthy
|
||||
heavy
|
||||
helpful
|
||||
helpless
|
||||
high
|
||||
high-pitched
|
||||
hilarious
|
||||
hissing
|
||||
hollow
|
||||
homeless
|
||||
homely
|
||||
horrible
|
||||
hot
|
||||
huge
|
||||
hungry
|
||||
hurt
|
||||
hushed
|
||||
husky
|
||||
icy
|
||||
ill
|
||||
immense
|
||||
important
|
||||
impossible
|
||||
inexpensive
|
||||
innocent
|
||||
inquisitive
|
||||
itchy
|
||||
jealous
|
||||
jittery
|
||||
jolly
|
||||
joyous
|
||||
juicy
|
||||
kind
|
||||
large
|
||||
late
|
||||
lazy
|
||||
light
|
||||
little
|
||||
lively
|
||||
lonely
|
||||
long
|
||||
loose
|
||||
loud
|
||||
lovely
|
||||
low
|
||||
lucky
|
||||
magnificent
|
||||
mammoth
|
||||
many
|
||||
massive
|
||||
melodic
|
||||
melted
|
||||
miniature
|
||||
misty
|
||||
moaning
|
||||
modern
|
||||
motionless
|
||||
muddy
|
||||
mushy
|
||||
mute
|
||||
mysterious
|
||||
narrow
|
||||
nasty
|
||||
naughty
|
||||
nervous
|
||||
nice
|
||||
noisy
|
||||
numerous
|
||||
nutritious
|
||||
nutty
|
||||
obedient
|
||||
obnoxious
|
||||
odd
|
||||
old
|
||||
old-fashioned
|
||||
open
|
||||
outrageous
|
||||
outstanding
|
||||
panicky
|
||||
perfect
|
||||
petite
|
||||
plain
|
||||
plastic
|
||||
pleasant
|
||||
poised
|
||||
poor
|
||||
powerful
|
||||
precious
|
||||
prickly
|
||||
proud
|
||||
puny
|
||||
purring
|
||||
puzzled
|
||||
quaint
|
||||
quick
|
||||
quiet
|
||||
rainy
|
||||
rapid
|
||||
raspy
|
||||
real
|
||||
relieved
|
||||
repulsive
|
||||
resonant
|
||||
rich
|
||||
ripe
|
||||
rotten
|
||||
rough
|
||||
round
|
||||
salty
|
||||
scary
|
||||
scattered
|
||||
scrawny
|
||||
screeching
|
||||
selfish
|
||||
shaggy
|
||||
shaky
|
||||
shallow
|
||||
sharp
|
||||
shiny
|
||||
shivering
|
||||
short
|
||||
shrill
|
||||
shy
|
||||
silent
|
||||
silky
|
||||
silly
|
||||
skinny
|
||||
sleepy
|
||||
slimy
|
||||
slippery
|
||||
slow
|
||||
small
|
||||
smiling
|
||||
smoggy
|
||||
smooth
|
||||
soft
|
||||
solid
|
||||
sore
|
||||
sour
|
||||
sparkling
|
||||
spicy
|
||||
splendid
|
||||
spotless
|
||||
square
|
||||
squealing
|
||||
stale
|
||||
steady
|
||||
steep
|
||||
sticky
|
||||
stormy
|
||||
straight
|
||||
strange
|
||||
strong
|
||||
stupid
|
||||
substantial
|
||||
successful
|
||||
super
|
||||
sweet
|
||||
swift
|
||||
talented
|
||||
tall
|
||||
tame
|
||||
tart
|
||||
Taste/Touch
|
||||
tasteless
|
||||
tasty
|
||||
teeny
|
||||
teeny-tiny
|
||||
tender
|
||||
tense
|
||||
terrible
|
||||
testy
|
||||
thankful
|
||||
thirsty
|
||||
thoughtful
|
||||
thoughtless
|
||||
thundering
|
||||
tight
|
||||
tiny
|
||||
tired
|
||||
tough
|
||||
troubled
|
||||
ugliest
|
||||
ugly
|
||||
uneven
|
||||
uninterested
|
||||
unsightly
|
||||
unusual
|
||||
upset
|
||||
uptight
|
||||
vast
|
||||
victorious
|
||||
vivacious
|
||||
voiceless
|
||||
wandering
|
||||
warm
|
||||
weak
|
||||
weary
|
||||
wet
|
||||
whispering
|
||||
wicked
|
||||
wide
|
||||
wide-eyed
|
||||
wild
|
||||
witty
|
||||
wonderful
|
||||
wooden
|
||||
worried
|
||||
wrong
|
||||
young
|
||||
yummy
|
||||
zany
|
||||
abundant
|
||||
adorable
|
||||
adventurous
|
||||
aggressive
|
||||
agreeable
|
||||
alert
|
||||
alive
|
||||
amused
|
||||
ancient
|
||||
angry
|
||||
annoyed
|
||||
annoying
|
||||
anxious
|
||||
arrogant
|
||||
ashamed
|
||||
attractive
|
||||
average
|
||||
awful
|
||||
bad
|
||||
beautiful
|
||||
better
|
||||
bewildered
|
||||
big
|
||||
bitter
|
||||
black
|
||||
bloody
|
||||
blue
|
||||
blue-eyed
|
||||
blushing
|
||||
boiling
|
||||
bored
|
||||
brainy
|
||||
brave
|
||||
breakable
|
||||
breezy
|
||||
brief
|
||||
bright
|
||||
broad
|
||||
broken
|
||||
bumpy
|
||||
busy
|
||||
calm
|
||||
careful
|
||||
cautious
|
||||
charming
|
||||
cheerful
|
||||
chilly
|
||||
chubby
|
||||
clean
|
||||
clear
|
||||
clever
|
||||
cloudy
|
||||
clumsy
|
||||
cold
|
||||
colorful
|
||||
colossal
|
||||
combative
|
||||
comfortable
|
||||
concerned
|
||||
condemned
|
||||
confused
|
||||
cooing
|
||||
cool
|
||||
cooperative
|
||||
courageous
|
||||
crazy
|
||||
crazy flipped-out
|
||||
creepy
|
||||
crooked
|
||||
crowded
|
||||
cruel
|
||||
cuddly
|
||||
curious
|
||||
curly
|
||||
curved
|
||||
cute
|
||||
damaged
|
||||
damp
|
||||
dangerous
|
||||
dark
|
||||
dead
|
||||
deafening
|
||||
deep
|
||||
defeated
|
||||
defiant
|
||||
delicious
|
||||
delightful
|
||||
depressed
|
||||
determined
|
||||
different
|
||||
difficult
|
||||
dirty
|
||||
disgusted
|
||||
distinct
|
||||
disturbed
|
||||
dizzy
|
||||
doubtful
|
||||
drab
|
||||
dry
|
||||
dull
|
||||
dusty
|
||||
eager
|
||||
early
|
||||
easy
|
||||
elated
|
||||
elegant
|
||||
embarrassed
|
||||
empty
|
||||
enchanting
|
||||
encouraging
|
||||
energetic
|
||||
enthusiastic
|
||||
envious
|
||||
evil
|
||||
excited
|
||||
expensive
|
||||
exuberant
|
||||
faint
|
||||
fair
|
||||
faithful
|
||||
famous
|
||||
fancy
|
||||
fantastic
|
||||
fast
|
||||
fat
|
||||
few
|
||||
fierce
|
||||
filthy
|
||||
fine
|
||||
flaky
|
||||
flat
|
||||
fluffy
|
||||
fluttering
|
||||
foolish
|
||||
fragile
|
||||
frail
|
||||
frantic
|
||||
freezing
|
||||
fresh
|
||||
friendly
|
||||
frightened
|
||||
funny
|
||||
fuzzy
|
||||
gentle
|
||||
gifted
|
||||
gigantic
|
||||
glamorous
|
||||
gleaming
|
||||
glorious
|
||||
good
|
||||
gorgeous
|
||||
graceful
|
||||
greasy
|
||||
great
|
||||
grieving
|
||||
grotesque
|
||||
grubby
|
||||
grumpy
|
||||
handsome
|
||||
happy
|
||||
hard
|
||||
harsh
|
||||
healthy
|
||||
heavy
|
||||
helpful
|
||||
helpless
|
||||
high
|
||||
high-pitched
|
||||
hilarious
|
||||
hissing
|
||||
hollow
|
||||
homeless
|
||||
homely
|
||||
horrible
|
||||
hot
|
||||
huge
|
||||
hungry
|
||||
hurt
|
||||
hushed
|
||||
husky
|
||||
icy
|
||||
ill
|
||||
immense
|
||||
important
|
||||
impossible
|
||||
inexpensive
|
||||
innocent
|
||||
inquisitive
|
||||
itchy
|
||||
jealous
|
||||
jittery
|
||||
jolly
|
||||
joyous
|
||||
juicy
|
||||
kind
|
||||
large
|
||||
late
|
||||
lazy
|
||||
light
|
||||
little
|
||||
lively
|
||||
lonely
|
||||
long
|
||||
loose
|
||||
loud
|
||||
lovely
|
||||
low
|
||||
lucky
|
||||
magnificent
|
||||
mammoth
|
||||
many
|
||||
massive
|
||||
melodic
|
||||
melted
|
||||
miniature
|
||||
misty
|
||||
moaning
|
||||
modern
|
||||
motionless
|
||||
muddy
|
||||
mushy
|
||||
mute
|
||||
mysterious
|
||||
narrow
|
||||
nasty
|
||||
naughty
|
||||
nervous
|
||||
nice
|
||||
noisy
|
||||
numerous
|
||||
nutritious
|
||||
nutty
|
||||
obedient
|
||||
obnoxious
|
||||
odd
|
||||
old
|
||||
old-fashioned
|
||||
open
|
||||
outrageous
|
||||
outstanding
|
||||
panicky
|
||||
perfect
|
||||
petite
|
||||
plain
|
||||
plastic
|
||||
pleasant
|
||||
poised
|
||||
poor
|
||||
powerful
|
||||
precious
|
||||
prickly
|
||||
proud
|
||||
puny
|
||||
purring
|
||||
puzzled
|
||||
quaint
|
||||
quick
|
||||
quiet
|
||||
rainy
|
||||
rapid
|
||||
raspy
|
||||
real
|
||||
relieved
|
||||
repulsive
|
||||
resonant
|
||||
rich
|
||||
ripe
|
||||
rotten
|
||||
rough
|
||||
round
|
||||
salty
|
||||
scary
|
||||
scattered
|
||||
scrawny
|
||||
screeching
|
||||
selfish
|
||||
shaggy
|
||||
shaky
|
||||
shallow
|
||||
sharp
|
||||
shiny
|
||||
shivering
|
||||
short
|
||||
shrill
|
||||
shy
|
||||
silent
|
||||
silky
|
||||
silly
|
||||
skinny
|
||||
sleepy
|
||||
slimy
|
||||
slippery
|
||||
slow
|
||||
small
|
||||
smiling
|
||||
smoggy
|
||||
smooth
|
||||
soft
|
||||
solid
|
||||
sore
|
||||
sour
|
||||
sparkling
|
||||
spicy
|
||||
splendid
|
||||
spotless
|
||||
square
|
||||
squealing
|
||||
stale
|
||||
steady
|
||||
steep
|
||||
sticky
|
||||
stormy
|
||||
straight
|
||||
strange
|
||||
strong
|
||||
stupid
|
||||
substantial
|
||||
successful
|
||||
super
|
||||
sweet
|
||||
swift
|
||||
talented
|
||||
tall
|
||||
tame
|
||||
tart
|
||||
Taste/Touch
|
||||
tasteless
|
||||
tasty
|
||||
teeny
|
||||
teeny-tiny
|
||||
tender
|
||||
tense
|
||||
terrible
|
||||
testy
|
||||
thankful
|
||||
thirsty
|
||||
thoughtful
|
||||
thoughtless
|
||||
thundering
|
||||
tight
|
||||
tiny
|
||||
tired
|
||||
tough
|
||||
troubled
|
||||
ugliest
|
||||
ugly
|
||||
uneven
|
||||
uninterested
|
||||
unsightly
|
||||
unusual
|
||||
upset
|
||||
uptight
|
||||
vast
|
||||
victorious
|
||||
vivacious
|
||||
voiceless
|
||||
wandering
|
||||
warm
|
||||
weak
|
||||
weary
|
||||
wet
|
||||
whispering
|
||||
wicked
|
||||
wide
|
||||
wide-eyed
|
||||
wild
|
||||
witty
|
||||
wonderful
|
||||
wooden
|
||||
worried
|
||||
wrong
|
||||
young
|
||||
yummy
|
||||
zany
|
||||
zealous
|
||||
@@ -1,146 +1,146 @@
|
||||
1-Rover-1
|
||||
16-20
|
||||
7-Zark-7
|
||||
790
|
||||
Adaptive Manipulator
|
||||
Allied Mastercomputer
|
||||
Alpha 5
|
||||
Alpha 6
|
||||
Alpha 7
|
||||
AM
|
||||
AMEE
|
||||
AmigoBot
|
||||
Android
|
||||
Aniel
|
||||
Asimov
|
||||
ASTAR
|
||||
Astor
|
||||
B O B
|
||||
B-4
|
||||
B-9
|
||||
B166ER
|
||||
Bender
|
||||
Bishop
|
||||
Blitz
|
||||
Box
|
||||
Brackenridge
|
||||
C-3PO
|
||||
Cassandra One
|
||||
Cell
|
||||
Chii
|
||||
Chip
|
||||
Computer
|
||||
Conky 2000
|
||||
Cutie
|
||||
Data
|
||||
Decimus
|
||||
Dee Model
|
||||
Deep Thought
|
||||
Dor-15
|
||||
Dorfl
|
||||
Dot Matrix
|
||||
Duey
|
||||
E D I
|
||||
E-Man
|
||||
ED-209
|
||||
Emma-2
|
||||
Erasmus
|
||||
Ez-27
|
||||
Fagor
|
||||
Faith
|
||||
Fi
|
||||
FRIEND COMPUTER
|
||||
Frost
|
||||
Fum
|
||||
Futura
|
||||
G2
|
||||
George
|
||||
Gnut
|
||||
Gort
|
||||
H A R L I E
|
||||
H E L P eR
|
||||
H E R B I E
|
||||
Hadaly
|
||||
HAL 9000
|
||||
Huey
|
||||
Irona
|
||||
Ironhide
|
||||
Jay-Dub
|
||||
Jinx
|
||||
Johnny 5
|
||||
K-9
|
||||
KITT
|
||||
Klapaucius
|
||||
Kryten 2X4B-523P
|
||||
L-76
|
||||
L-Ron
|
||||
Louie
|
||||
LUH 3417
|
||||
Maria
|
||||
MARK13
|
||||
Marvin
|
||||
Master Control Program
|
||||
Max 404
|
||||
Maximillian
|
||||
Mechagodzilla
|
||||
Mechani-Kong
|
||||
Megatron
|
||||
Metalhead
|
||||
Mr R I N G
|
||||
Mugsy3000
|
||||
NCH
|
||||
Necron-99
|
||||
Norby
|
||||
OMM 0910
|
||||
Optimus
|
||||
Orange v 3 5
|
||||
Project 2501
|
||||
PTO
|
||||
R I C 2 0
|
||||
R2-D2
|
||||
R4-P17
|
||||
Revelation
|
||||
Ro-Man
|
||||
Robbie
|
||||
Robot Devil
|
||||
S A M
|
||||
S H O C K
|
||||
S H R O U D
|
||||
S O P H I E
|
||||
SEN 5241
|
||||
Setaur
|
||||
SHODAN
|
||||
Shrike
|
||||
SID 6 7
|
||||
Solo
|
||||
Soundwave
|
||||
Speedy
|
||||
Super 17
|
||||
Surgeon General Kraken
|
||||
T-1000
|
||||
T-800
|
||||
T-850
|
||||
Terminus
|
||||
THX 1138
|
||||
Tidy
|
||||
Tik-Tok
|
||||
Tobor
|
||||
Trurl
|
||||
TWA
|
||||
ULTRABOT
|
||||
Ulysses
|
||||
Uniblab
|
||||
V I N CENT
|
||||
Voltes V
|
||||
W1k1
|
||||
Wikipedia
|
||||
Windows 3 1
|
||||
X-5
|
||||
XERXES
|
||||
XR
|
||||
Yod
|
||||
Z-1
|
||||
Z-2
|
||||
Z-3
|
||||
Zed
|
||||
1-Rover-1
|
||||
16-20
|
||||
7-Zark-7
|
||||
790
|
||||
Adaptive Manipulator
|
||||
Allied Mastercomputer
|
||||
Alpha 5
|
||||
Alpha 6
|
||||
Alpha 7
|
||||
AM
|
||||
AMEE
|
||||
AmigoBot
|
||||
Android
|
||||
Aniel
|
||||
Asimov
|
||||
ASTAR
|
||||
Astor
|
||||
B O B
|
||||
B-4
|
||||
B-9
|
||||
B166ER
|
||||
Bender
|
||||
Bishop
|
||||
Blitz
|
||||
Box
|
||||
Brackenridge
|
||||
C-3PO
|
||||
Cassandra One
|
||||
Cell
|
||||
Chii
|
||||
Chip
|
||||
Computer
|
||||
Conky 2000
|
||||
Cutie
|
||||
Data
|
||||
Decimus
|
||||
Dee Model
|
||||
Deep Thought
|
||||
Dor-15
|
||||
Dorfl
|
||||
Dot Matrix
|
||||
Duey
|
||||
E D I
|
||||
E-Man
|
||||
ED-209
|
||||
Emma-2
|
||||
Erasmus
|
||||
Ez-27
|
||||
Fagor
|
||||
Faith
|
||||
Fi
|
||||
FRIEND COMPUTER
|
||||
Frost
|
||||
Fum
|
||||
Futura
|
||||
G2
|
||||
George
|
||||
Gnut
|
||||
Gort
|
||||
H A R L I E
|
||||
H E L P eR
|
||||
H E R B I E
|
||||
Hadaly
|
||||
HAL 9000
|
||||
Huey
|
||||
Irona
|
||||
Ironhide
|
||||
Jay-Dub
|
||||
Jinx
|
||||
Johnny 5
|
||||
K-9
|
||||
KITT
|
||||
Klapaucius
|
||||
Kryten 2X4B-523P
|
||||
L-76
|
||||
L-Ron
|
||||
Louie
|
||||
LUH 3417
|
||||
Maria
|
||||
MARK13
|
||||
Marvin
|
||||
Master Control Program
|
||||
Max 404
|
||||
Maximillian
|
||||
Mechagodzilla
|
||||
Mechani-Kong
|
||||
Megatron
|
||||
Metalhead
|
||||
Mr R I N G
|
||||
Mugsy3000
|
||||
NCH
|
||||
Necron-99
|
||||
Norby
|
||||
OMM 0910
|
||||
Optimus
|
||||
Orange v 3 5
|
||||
Project 2501
|
||||
PTO
|
||||
R I C 2 0
|
||||
R2-D2
|
||||
R4-P17
|
||||
Revelation
|
||||
Ro-Man
|
||||
Robbie
|
||||
Robot Devil
|
||||
S A M
|
||||
S H O C K
|
||||
S H R O U D
|
||||
S O P H I E
|
||||
SEN 5241
|
||||
Setaur
|
||||
SHODAN
|
||||
Shrike
|
||||
SID 6 7
|
||||
Solo
|
||||
Soundwave
|
||||
Speedy
|
||||
Super 17
|
||||
Surgeon General Kraken
|
||||
T-1000
|
||||
T-800
|
||||
T-850
|
||||
Terminus
|
||||
THX 1138
|
||||
Tidy
|
||||
Tik-Tok
|
||||
Tobor
|
||||
Trurl
|
||||
TWA
|
||||
ULTRABOT
|
||||
Ulysses
|
||||
Uniblab
|
||||
V I N CENT
|
||||
Voltes V
|
||||
W1k1
|
||||
Wikipedia
|
||||
Windows 3 1
|
||||
X-5
|
||||
XERXES
|
||||
XR
|
||||
Yod
|
||||
Z-1
|
||||
Z-2
|
||||
Z-3
|
||||
Zed
|
||||
Zord
|
||||
@@ -1,30 +1,30 @@
|
||||
Lungfish
|
||||
Blackfish
|
||||
Alligator
|
||||
Icefish
|
||||
Armorhead
|
||||
Hammerhead
|
||||
Anaconda
|
||||
Flathead
|
||||
Manta Ray
|
||||
Sting Ray
|
||||
Fangtooth Moray
|
||||
Goblin Shark
|
||||
Grass Carp
|
||||
Round River Bat Ray
|
||||
Noodlefish
|
||||
Hagfish
|
||||
Man o’ War
|
||||
Ladyfish
|
||||
Black Eel
|
||||
Baby Seal
|
||||
Sprat
|
||||
Koi
|
||||
Electric Eel
|
||||
Lamprey
|
||||
Pejeray
|
||||
Yellow-edged Moray
|
||||
Salmon Shark
|
||||
Sleeper Shark
|
||||
Featherback
|
||||
Eagle Ray
|
||||
Lungfish
|
||||
Blackfish
|
||||
Alligator
|
||||
Icefish
|
||||
Armorhead
|
||||
Hammerhead
|
||||
Anaconda
|
||||
Flathead
|
||||
Manta Ray
|
||||
Sting Ray
|
||||
Fangtooth Moray
|
||||
Goblin Shark
|
||||
Grass Carp
|
||||
Round River Bat Ray
|
||||
Noodlefish
|
||||
Hagfish
|
||||
Man o’ War
|
||||
Ladyfish
|
||||
Black Eel
|
||||
Baby Seal
|
||||
Sprat
|
||||
Koi
|
||||
Electric Eel
|
||||
Lamprey
|
||||
Pejeray
|
||||
Yellow-edged Moray
|
||||
Salmon Shark
|
||||
Sleeper Shark
|
||||
Featherback
|
||||
Eagle Ray
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
Alfie
|
||||
Antsy
|
||||
Baby Cakes
|
||||
Bam Bam
|
||||
Beebee
|
||||
Bo Bo Sassy
|
||||
Bonker
|
||||
Bonbon
|
||||
Bubble
|
||||
Buster Frown
|
||||
Buttercup
|
||||
Button
|
||||
Candy
|
||||
Checkers
|
||||
Clarabell
|
||||
Clownsky
|
||||
Clueless
|
||||
Cluesky
|
||||
Dazzle
|
||||
Dinky Doodle
|
||||
Doodles
|
||||
Duckie
|
||||
Flop O'Honker
|
||||
Freckle
|
||||
Giggles
|
||||
Gigglesworth
|
||||
Goose McSunny
|
||||
Honkel the III
|
||||
Honker
|
||||
Honkerbelle
|
||||
Knicknack
|
||||
Jazzy Bella
|
||||
Jingle
|
||||
Joy
|
||||
Jo Jo Bobo Bo
|
||||
Ladybug Honks
|
||||
Lala
|
||||
Miss Stockings
|
||||
Mittens
|
||||
Mr Shoe
|
||||
Patches
|
||||
Pancake
|
||||
Pepinpop
|
||||
Pocket
|
||||
Razzle Dazzle
|
||||
Redshirt McBeat
|
||||
Ronnie Pace
|
||||
Scootaloo
|
||||
Silly Willy
|
||||
Skiddle
|
||||
Slippy Joe
|
||||
Sparkle
|
||||
Speckles
|
||||
Sprinkledinkle
|
||||
Squigley
|
||||
Tickle
|
||||
Topcake
|
||||
Toodles Sharperton
|
||||
Trixy
|
||||
Witty
|
||||
Ziggy Yoyo
|
||||
Zippy
|
||||
Alfie
|
||||
Antsy
|
||||
Baby Cakes
|
||||
Bam Bam
|
||||
Beebee
|
||||
Bo Bo Sassy
|
||||
Bonker
|
||||
Bonbon
|
||||
Bubble
|
||||
Buster Frown
|
||||
Buttercup
|
||||
Button
|
||||
Candy
|
||||
Checkers
|
||||
Clarabell
|
||||
Clownsky
|
||||
Clueless
|
||||
Cluesky
|
||||
Dazzle
|
||||
Dinky Doodle
|
||||
Doodles
|
||||
Duckie
|
||||
Flop O'Honker
|
||||
Freckle
|
||||
Giggles
|
||||
Gigglesworth
|
||||
Goose McSunny
|
||||
Honkel the III
|
||||
Honker
|
||||
Honkerbelle
|
||||
Knicknack
|
||||
Jazzy Bella
|
||||
Jingle
|
||||
Joy
|
||||
Jo Jo Bobo Bo
|
||||
Ladybug Honks
|
||||
Lala
|
||||
Miss Stockings
|
||||
Mittens
|
||||
Mr Shoe
|
||||
Patches
|
||||
Pancake
|
||||
Pepinpop
|
||||
Pocket
|
||||
Razzle Dazzle
|
||||
Redshirt McBeat
|
||||
Ronnie Pace
|
||||
Scootaloo
|
||||
Silly Willy
|
||||
Skiddle
|
||||
Slippy Joe
|
||||
Sparkle
|
||||
Speckles
|
||||
Sprinkledinkle
|
||||
Squigley
|
||||
Tickle
|
||||
Topcake
|
||||
Toodles Sharperton
|
||||
Trixy
|
||||
Witty
|
||||
Ziggy Yoyo
|
||||
Zippy
|
||||
|
||||
@@ -1,70 +1,70 @@
|
||||
A whole bunch of spiders in a SWAT suit
|
||||
Al "Otta" Gore
|
||||
AMERICA
|
||||
Beat Punchbeef
|
||||
Blast Hardcheese
|
||||
Blast Thickneck
|
||||
Bob Johnson
|
||||
Bold Bigflank
|
||||
Bolt Vanderhuge
|
||||
Brick Hardmeat
|
||||
Buck Plankchest
|
||||
Buff Drinklots
|
||||
Buff Hardback
|
||||
Butch Deadlift
|
||||
Crud Bonemeal
|
||||
Crunch Buttsteak
|
||||
Crush McStompbones
|
||||
Dirk Hardpeck
|
||||
Duke Killington
|
||||
Evil Bob Marley
|
||||
Evil Martin Luther King
|
||||
Fist Rockbone
|
||||
Flint Ironstag
|
||||
Fridge Largemeat
|
||||
George Melons
|
||||
Gibbs McLargehuge
|
||||
GORE Vidal
|
||||
Gristle McThornBody
|
||||
Hank Chesthair
|
||||
Hans Testosteroneson
|
||||
Killiam Shakespeare
|
||||
Killing McKillingalot
|
||||
Lance Killiam
|
||||
Leonardo Da Viking
|
||||
Lump Beefrock
|
||||
Mancrush McBrorape
|
||||
Max Pain
|
||||
Maximilian Murderface
|
||||
Maxx Power
|
||||
Noam Bombsky
|
||||
Pack Blowfist
|
||||
Punch Rockgroin
|
||||
Punch Sideiron
|
||||
Punt Speedchunk
|
||||
Reef Blastbody
|
||||
Rex Dudekiller VII
|
||||
Rip Sidecheek
|
||||
Rip Steakface
|
||||
Roll Fizzlebeef
|
||||
Sarah Pain
|
||||
Seamus McTosterone
|
||||
Sgt Slaughter
|
||||
Sir Killaslot
|
||||
Slab Bulkhead
|
||||
Slab Squatthrust
|
||||
Slake Fistcrunch
|
||||
Slate Slabrock
|
||||
Smash Lampjaw
|
||||
Smoke Manmuscle
|
||||
Splint Chesthair
|
||||
Stabby McGee
|
||||
Stump Beefgnaw
|
||||
Stump Chunkman
|
||||
THAT DAMN TRAITOR GEORGE MELONS
|
||||
Theodore Pain
|
||||
Thick McRunfast
|
||||
Toolboxl Rose
|
||||
Touch Rustrod
|
||||
Trunk Slamchest
|
||||
Zombie Gandhi
|
||||
A whole bunch of spiders in a SWAT suit
|
||||
Al "Otta" Gore
|
||||
AMERICA
|
||||
Beat Punchbeef
|
||||
Blast Hardcheese
|
||||
Blast Thickneck
|
||||
Bob Johnson
|
||||
Bold Bigflank
|
||||
Bolt Vanderhuge
|
||||
Brick Hardmeat
|
||||
Buck Plankchest
|
||||
Buff Drinklots
|
||||
Buff Hardback
|
||||
Butch Deadlift
|
||||
Crud Bonemeal
|
||||
Crunch Buttsteak
|
||||
Crush McStompbones
|
||||
Dirk Hardpeck
|
||||
Duke Killington
|
||||
Evil Bob Marley
|
||||
Evil Martin Luther King
|
||||
Fist Rockbone
|
||||
Flint Ironstag
|
||||
Fridge Largemeat
|
||||
George Melons
|
||||
Gibbs McLargehuge
|
||||
GORE Vidal
|
||||
Gristle McThornBody
|
||||
Hank Chesthair
|
||||
Hans Testosteroneson
|
||||
Killiam Shakespeare
|
||||
Killing McKillingalot
|
||||
Lance Killiam
|
||||
Leonardo Da Viking
|
||||
Lump Beefrock
|
||||
Mancrush McBrorape
|
||||
Max Pain
|
||||
Maximilian Murderface
|
||||
Maxx Power
|
||||
Noam Bombsky
|
||||
Pack Blowfist
|
||||
Punch Rockgroin
|
||||
Punch Sideiron
|
||||
Punt Speedchunk
|
||||
Reef Blastbody
|
||||
Rex Dudekiller VII
|
||||
Rip Sidecheek
|
||||
Rip Steakface
|
||||
Roll Fizzlebeef
|
||||
Sarah Pain
|
||||
Seamus McTosterone
|
||||
Sgt Slaughter
|
||||
Sir Killaslot
|
||||
Slab Bulkhead
|
||||
Slab Squatthrust
|
||||
Slake Fistcrunch
|
||||
Slate Slabrock
|
||||
Smash Lampjaw
|
||||
Smoke Manmuscle
|
||||
Splint Chesthair
|
||||
Stabby McGee
|
||||
Stump Beefgnaw
|
||||
Stump Chunkman
|
||||
THAT DAMN TRAITOR GEORGE MELONS
|
||||
Theodore Pain
|
||||
Thick McRunfast
|
||||
Toolboxl Rose
|
||||
Touch Rustrod
|
||||
Trunk Slamchest
|
||||
Zombie Gandhi
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,157 +1,157 @@
|
||||
Ablation
|
||||
Alabaster
|
||||
Alunite
|
||||
Andesite
|
||||
Anyhdrite
|
||||
Basalt
|
||||
Basin
|
||||
Bauxite
|
||||
Bedrock
|
||||
Bismuth
|
||||
Bismuthinite
|
||||
Bituminous Coal
|
||||
Borax
|
||||
Boulder
|
||||
Brimstone
|
||||
Brittle
|
||||
Calcite
|
||||
Cassiterite
|
||||
Cenozoic
|
||||
Chalk
|
||||
Chasm
|
||||
Cheridite
|
||||
Chert
|
||||
Chromite
|
||||
Cinnabar
|
||||
Claystone
|
||||
Coast
|
||||
Cobaltite
|
||||
Column
|
||||
Conglomerate
|
||||
Core
|
||||
Crevasse
|
||||
Crust
|
||||
Cryolite
|
||||
Crystal
|
||||
Dacite
|
||||
Diorite
|
||||
Dolomite
|
||||
Dolostone
|
||||
Dragonforce
|
||||
Earthflow
|
||||
Epoch
|
||||
Eutrophication
|
||||
Fault
|
||||
Flint
|
||||
Foliation
|
||||
Foreshock
|
||||
Fossil
|
||||
Gabbro
|
||||
Galena
|
||||
Garnierite
|
||||
Geode
|
||||
Geoge
|
||||
Gneiss
|
||||
Granite
|
||||
Graphite
|
||||
Gravel
|
||||
Groove
|
||||
Grotto
|
||||
Gypsum
|
||||
Hematite
|
||||
Hornblende
|
||||
Humus
|
||||
Igneous
|
||||
Ilmenite
|
||||
Iron
|
||||
Island
|
||||
Jasper
|
||||
Jet
|
||||
Kaolinite
|
||||
Kettle
|
||||
Kimberlite
|
||||
Komatiite
|
||||
Landslide
|
||||
Levee
|
||||
Lignite
|
||||
Limestone
|
||||
Limonite
|
||||
Luster
|
||||
Madidite
|
||||
Magnetite
|
||||
Magnitude
|
||||
Malachite
|
||||
Mantle
|
||||
Marble
|
||||
Marcasite
|
||||
Melange
|
||||
Meme
|
||||
Mica
|
||||
Microcline
|
||||
Migmatite
|
||||
Mineral
|
||||
Mountain
|
||||
Mudstone
|
||||
Obsidian
|
||||
Olivine
|
||||
Ore
|
||||
Orpiment
|
||||
Orthoclase
|
||||
Outwash
|
||||
Oxbow Lake
|
||||
Oynx
|
||||
Pahoehoe
|
||||
Pebble
|
||||
Pegmatite
|
||||
Periclase
|
||||
Petrified Wood
|
||||
Phyllite
|
||||
Pitchblende
|
||||
Plate
|
||||
Pothole
|
||||
Puddingstone
|
||||
Pyrite
|
||||
Pyrolusite
|
||||
Quake
|
||||
Quarry
|
||||
Quartz
|
||||
Quartzite
|
||||
Realgar
|
||||
Reservoir
|
||||
Rhyolite
|
||||
Rock
|
||||
Rock Salt
|
||||
Rockfall
|
||||
Rutile
|
||||
Saltpeter
|
||||
Sand
|
||||
Sandstone
|
||||
Satinspar
|
||||
Schist
|
||||
Sediment
|
||||
Seismic
|
||||
Selenite
|
||||
Serpentine
|
||||
Shale
|
||||
Shore
|
||||
Siltstone
|
||||
Slag
|
||||
Slate
|
||||
Sphalerite
|
||||
Stack
|
||||
Stalactite
|
||||
Stalagmite
|
||||
Stibnite
|
||||
Stone
|
||||
Stress
|
||||
Subduction
|
||||
Sylvite
|
||||
Talc
|
||||
Tetrahedrite
|
||||
Tidal
|
||||
Trench
|
||||
Valley
|
||||
Volcano
|
||||
Xenolith
|
||||
Yardang
|
||||
Zone
|
||||
Ablation
|
||||
Alabaster
|
||||
Alunite
|
||||
Andesite
|
||||
Anyhdrite
|
||||
Basalt
|
||||
Basin
|
||||
Bauxite
|
||||
Bedrock
|
||||
Bismuth
|
||||
Bismuthinite
|
||||
Bituminous Coal
|
||||
Borax
|
||||
Boulder
|
||||
Brimstone
|
||||
Brittle
|
||||
Calcite
|
||||
Cassiterite
|
||||
Cenozoic
|
||||
Chalk
|
||||
Chasm
|
||||
Cheridite
|
||||
Chert
|
||||
Chromite
|
||||
Cinnabar
|
||||
Claystone
|
||||
Coast
|
||||
Cobaltite
|
||||
Column
|
||||
Conglomerate
|
||||
Core
|
||||
Crevasse
|
||||
Crust
|
||||
Cryolite
|
||||
Crystal
|
||||
Dacite
|
||||
Diorite
|
||||
Dolomite
|
||||
Dolostone
|
||||
Dragonforce
|
||||
Earthflow
|
||||
Epoch
|
||||
Eutrophication
|
||||
Fault
|
||||
Flint
|
||||
Foliation
|
||||
Foreshock
|
||||
Fossil
|
||||
Gabbro
|
||||
Galena
|
||||
Garnierite
|
||||
Geode
|
||||
Geoge
|
||||
Gneiss
|
||||
Granite
|
||||
Graphite
|
||||
Gravel
|
||||
Groove
|
||||
Grotto
|
||||
Gypsum
|
||||
Hematite
|
||||
Hornblende
|
||||
Humus
|
||||
Igneous
|
||||
Ilmenite
|
||||
Iron
|
||||
Island
|
||||
Jasper
|
||||
Jet
|
||||
Kaolinite
|
||||
Kettle
|
||||
Kimberlite
|
||||
Komatiite
|
||||
Landslide
|
||||
Levee
|
||||
Lignite
|
||||
Limestone
|
||||
Limonite
|
||||
Luster
|
||||
Madidite
|
||||
Magnetite
|
||||
Magnitude
|
||||
Malachite
|
||||
Mantle
|
||||
Marble
|
||||
Marcasite
|
||||
Melange
|
||||
Meme
|
||||
Mica
|
||||
Microcline
|
||||
Migmatite
|
||||
Mineral
|
||||
Mountain
|
||||
Mudstone
|
||||
Obsidian
|
||||
Olivine
|
||||
Ore
|
||||
Orpiment
|
||||
Orthoclase
|
||||
Outwash
|
||||
Oxbow Lake
|
||||
Oynx
|
||||
Pahoehoe
|
||||
Pebble
|
||||
Pegmatite
|
||||
Periclase
|
||||
Petrified Wood
|
||||
Phyllite
|
||||
Pitchblende
|
||||
Plate
|
||||
Pothole
|
||||
Puddingstone
|
||||
Pyrite
|
||||
Pyrolusite
|
||||
Quake
|
||||
Quarry
|
||||
Quartz
|
||||
Quartzite
|
||||
Realgar
|
||||
Reservoir
|
||||
Rhyolite
|
||||
Rock
|
||||
Rock Salt
|
||||
Rockfall
|
||||
Rutile
|
||||
Saltpeter
|
||||
Sand
|
||||
Sandstone
|
||||
Satinspar
|
||||
Schist
|
||||
Sediment
|
||||
Seismic
|
||||
Selenite
|
||||
Serpentine
|
||||
Shale
|
||||
Shore
|
||||
Siltstone
|
||||
Slag
|
||||
Slate
|
||||
Sphalerite
|
||||
Stack
|
||||
Stalactite
|
||||
Stalagmite
|
||||
Stibnite
|
||||
Stone
|
||||
Stress
|
||||
Subduction
|
||||
Sylvite
|
||||
Talc
|
||||
Tetrahedrite
|
||||
Tidal
|
||||
Trench
|
||||
Valley
|
||||
Volcano
|
||||
Xenolith
|
||||
Yardang
|
||||
Zone
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,163 +1,163 @@
|
||||
Adzi
|
||||
Ah
|
||||
Ahaht
|
||||
Ajim
|
||||
Akeenus
|
||||
Akish
|
||||
Akishan
|
||||
Aleeto
|
||||
Am
|
||||
Amussa
|
||||
An
|
||||
Anozz
|
||||
Asheemar
|
||||
Asska
|
||||
Awas
|
||||
Azala
|
||||
Azbai
|
||||
Azeez
|
||||
Azum
|
||||
Banalz
|
||||
Bar
|
||||
Baseenar
|
||||
Beek
|
||||
Beekatan
|
||||
Beekus
|
||||
Beela
|
||||
Beelei
|
||||
Beem
|
||||
Beewos
|
||||
Bejeen
|
||||
Ber
|
||||
Betzi
|
||||
Bishalus
|
||||
Bokeeus
|
||||
Bur
|
||||
Bura
|
||||
Chalaree
|
||||
Chana
|
||||
Chanil
|
||||
Chee
|
||||
Cheesh
|
||||
Chimatei
|
||||
Chirurgeon
|
||||
Cholasistu
|
||||
Chuna
|
||||
Churasu
|
||||
Crath
|
||||
Dar
|
||||
Deeja
|
||||
Deesei
|
||||
Deesh
|
||||
Deetsan
|
||||
Deetwos
|
||||
Dooka
|
||||
Druja
|
||||
Eepa
|
||||
Ei
|
||||
Eix
|
||||
El
|
||||
Ereel
|
||||
Eutei
|
||||
Gai
|
||||
Gih
|
||||
Gilm
|
||||
Gish
|
||||
Go
|
||||
Hal
|
||||
Hul
|
||||
Ja
|
||||
Jaseen
|
||||
Jasuda
|
||||
Jeed
|
||||
Jeen
|
||||
Kajul
|
||||
Kal
|
||||
Kasa
|
||||
Keel
|
||||
Keerava
|
||||
Kiurz
|
||||
Kud
|
||||
La
|
||||
Lee
|
||||
Lei
|
||||
Lifts
|
||||
Liurz
|
||||
Lurasha
|
||||
Ma
|
||||
Mach
|
||||
Marz
|
||||
Meedish
|
||||
Meeh
|
||||
Meema
|
||||
Meen
|
||||
Meena
|
||||
Meenus
|
||||
Meerana
|
||||
Meesei
|
||||
Meeus
|
||||
Mei
|
||||
Milah
|
||||
Mim
|
||||
Mota
|
||||
Mudeska
|
||||
Muz
|
||||
Na
|
||||
Nakuma
|
||||
Nam
|
||||
Nassa
|
||||
Natoo
|
||||
Neesha
|
||||
Neetizei
|
||||
Neetra
|
||||
Neeus
|
||||
Niima
|
||||
Numeen
|
||||
Nuralg
|
||||
Nush
|
||||
Ocheeva
|
||||
Okur
|
||||
Olank
|
||||
On
|
||||
Onasha
|
||||
Osheeka
|
||||
Pasha
|
||||
Ra
|
||||
Rana
|
||||
Raniur
|
||||
Ree
|
||||
Reesa
|
||||
Rei
|
||||
Sa
|
||||
Saak
|
||||
Sanax
|
||||
Seeba
|
||||
Seed
|
||||
Seen
|
||||
Shah
|
||||
Shahvee
|
||||
Shaleez
|
||||
Shatalg
|
||||
Sheer
|
||||
Shei
|
||||
Sigerthe
|
||||
Skaleel
|
||||
Sudie
|
||||
Tail
|
||||
Tar
|
||||
Tasha
|
||||
Tei
|
||||
Telixith
|
||||
Tumma
|
||||
Veek
|
||||
Wan
|
||||
Wazei
|
||||
Weedum
|
||||
Weewish
|
||||
Witseidutsei
|
||||
Wuja
|
||||
Wujeeta
|
||||
Wusha
|
||||
Xil
|
||||
Zish
|
||||
Adzi
|
||||
Ah
|
||||
Ahaht
|
||||
Ajim
|
||||
Akeenus
|
||||
Akish
|
||||
Akishan
|
||||
Aleeto
|
||||
Am
|
||||
Amussa
|
||||
An
|
||||
Anozz
|
||||
Asheemar
|
||||
Asska
|
||||
Awas
|
||||
Azala
|
||||
Azbai
|
||||
Azeez
|
||||
Azum
|
||||
Banalz
|
||||
Bar
|
||||
Baseenar
|
||||
Beek
|
||||
Beekatan
|
||||
Beekus
|
||||
Beela
|
||||
Beelei
|
||||
Beem
|
||||
Beewos
|
||||
Bejeen
|
||||
Ber
|
||||
Betzi
|
||||
Bishalus
|
||||
Bokeeus
|
||||
Bur
|
||||
Bura
|
||||
Chalaree
|
||||
Chana
|
||||
Chanil
|
||||
Chee
|
||||
Cheesh
|
||||
Chimatei
|
||||
Chirurgeon
|
||||
Cholasistu
|
||||
Chuna
|
||||
Churasu
|
||||
Crath
|
||||
Dar
|
||||
Deeja
|
||||
Deesei
|
||||
Deesh
|
||||
Deetsan
|
||||
Deetwos
|
||||
Dooka
|
||||
Druja
|
||||
Eepa
|
||||
Ei
|
||||
Eix
|
||||
El
|
||||
Ereel
|
||||
Eutei
|
||||
Gai
|
||||
Gih
|
||||
Gilm
|
||||
Gish
|
||||
Go
|
||||
Hal
|
||||
Hul
|
||||
Ja
|
||||
Jaseen
|
||||
Jasuda
|
||||
Jeed
|
||||
Jeen
|
||||
Kajul
|
||||
Kal
|
||||
Kasa
|
||||
Keel
|
||||
Keerava
|
||||
Kiurz
|
||||
Kud
|
||||
La
|
||||
Lee
|
||||
Lei
|
||||
Lifts
|
||||
Liurz
|
||||
Lurasha
|
||||
Ma
|
||||
Mach
|
||||
Marz
|
||||
Meedish
|
||||
Meeh
|
||||
Meema
|
||||
Meen
|
||||
Meena
|
||||
Meenus
|
||||
Meerana
|
||||
Meesei
|
||||
Meeus
|
||||
Mei
|
||||
Milah
|
||||
Mim
|
||||
Mota
|
||||
Mudeska
|
||||
Muz
|
||||
Na
|
||||
Nakuma
|
||||
Nam
|
||||
Nassa
|
||||
Natoo
|
||||
Neesha
|
||||
Neetizei
|
||||
Neetra
|
||||
Neeus
|
||||
Niima
|
||||
Numeen
|
||||
Nuralg
|
||||
Nush
|
||||
Ocheeva
|
||||
Okur
|
||||
Olank
|
||||
On
|
||||
Onasha
|
||||
Osheeka
|
||||
Pasha
|
||||
Ra
|
||||
Rana
|
||||
Raniur
|
||||
Ree
|
||||
Reesa
|
||||
Rei
|
||||
Sa
|
||||
Saak
|
||||
Sanax
|
||||
Seeba
|
||||
Seed
|
||||
Seen
|
||||
Shah
|
||||
Shahvee
|
||||
Shaleez
|
||||
Shatalg
|
||||
Sheer
|
||||
Shei
|
||||
Sigerthe
|
||||
Skaleel
|
||||
Sudie
|
||||
Tail
|
||||
Tar
|
||||
Tasha
|
||||
Tei
|
||||
Telixith
|
||||
Tumma
|
||||
Veek
|
||||
Wan
|
||||
Wazei
|
||||
Weedum
|
||||
Weewish
|
||||
Witseidutsei
|
||||
Wuja
|
||||
Wujeeta
|
||||
Wusha
|
||||
Xil
|
||||
Zish
|
||||
Zollassa
|
||||
@@ -1,328 +1,328 @@
|
||||
Abijoo
|
||||
Ah
|
||||
Ajum
|
||||
Am
|
||||
Amusei
|
||||
An
|
||||
Anoo
|
||||
Aojee
|
||||
Asum
|
||||
Az
|
||||
Azeel
|
||||
Azinar
|
||||
Azjai
|
||||
Baar
|
||||
Banka
|
||||
Bar
|
||||
Barnaxi
|
||||
Batar
|
||||
Batuus
|
||||
Beem
|
||||
Beshnus
|
||||
Betu
|
||||
Bex
|
||||
Bijot
|
||||
Bimee
|
||||
Binyaar
|
||||
Bosekus
|
||||
Brand
|
||||
Bun
|
||||
Bunach
|
||||
Bunish
|
||||
Busheeus
|
||||
Buujhan
|
||||
Chakuk
|
||||
Chalish
|
||||
Chalureel
|
||||
Chath
|
||||
Chee
|
||||
Cheedal
|
||||
Chilwir
|
||||
Chitakus
|
||||
Chiwish
|
||||
Chulz
|
||||
Chuna
|
||||
Da
|
||||
Dakee
|
||||
Dan
|
||||
Dar
|
||||
Darasken
|
||||
DarJee
|
||||
Debameel
|
||||
Deed
|
||||
Deegeeta
|
||||
Deeh
|
||||
Deekonus
|
||||
Deekum
|
||||
Deekus
|
||||
Deerkaza
|
||||
Deetum
|
||||
Demeepa
|
||||
Depasa
|
||||
Derkeethus
|
||||
Deroh
|
||||
Dezanu
|
||||
Dreet
|
||||
Drumarz
|
||||
Dum
|
||||
Dunaxith
|
||||
Effe
|
||||
Ei
|
||||
Eidu
|
||||
Eius
|
||||
Eiuus
|
||||
Eix
|
||||
Eleedal
|
||||
Er
|
||||
Esqoo
|
||||
Etaku
|
||||
Gah
|
||||
Gajul
|
||||
Gam
|
||||
Geeh
|
||||
Geel
|
||||
Geem
|
||||
Geh
|
||||
Gei
|
||||
Gih
|
||||
Gin
|
||||
Goh
|
||||
Gulum
|
||||
Haj
|
||||
Han
|
||||
Haran
|
||||
Hareeya
|
||||
Hathei
|
||||
Heedul
|
||||
Heem
|
||||
Hei
|
||||
Heir
|
||||
Hixeeh
|
||||
Huleeya
|
||||
Huzei
|
||||
Ilas
|
||||
Im
|
||||
Inee
|
||||
Itan
|
||||
J'Ram
|
||||
Ja
|
||||
Jah
|
||||
Jaraleet
|
||||
Jaree
|
||||
Jas
|
||||
Jasaiin
|
||||
Jaseen
|
||||
Jat
|
||||
Jee
|
||||
Jeela
|
||||
Jeelius
|
||||
Jeelus
|
||||
Jeen
|
||||
Jeer
|
||||
Jeetum
|
||||
Jei
|
||||
Jilux
|
||||
Jin
|
||||
Jon
|
||||
Jul
|
||||
Julan
|
||||
Junal
|
||||
Jush
|
||||
Juunei
|
||||
Kai
|
||||
Kajin
|
||||
Kamax
|
||||
Kas
|
||||
Keema
|
||||
Keer
|
||||
Keerasa
|
||||
Kepanuu
|
||||
Kia
|
||||
Kiameed
|
||||
Kilaya
|
||||
Kiurz
|
||||
Kur
|
||||
Kuz
|
||||
La
|
||||
Lah
|
||||
Lai
|
||||
Lan
|
||||
Lara
|
||||
Leem
|
||||
Lei
|
||||
Loh
|
||||
Lotash
|
||||
Luh
|
||||
Lurz
|
||||
Luteema
|
||||
Maahi
|
||||
Madesi
|
||||
Maheelius
|
||||
Mahei
|
||||
Maht
|
||||
Malz
|
||||
Marz
|
||||
Mathei
|
||||
Maxath
|
||||
Meej
|
||||
Meejapa
|
||||
Meensuda
|
||||
Meer
|
||||
Mema
|
||||
Mere
|
||||
Metaku
|
||||
Miharil
|
||||
Milos
|
||||
Miun
|
||||
Mobareed
|
||||
Mohimeem
|
||||
Mopakuz
|
||||
Motuu
|
||||
Mujeen
|
||||
Muranatepa
|
||||
Mush
|
||||
Muz
|
||||
Na
|
||||
Napetui
|
||||
Nazuux
|
||||
Nebutil
|
||||
Neeti
|
||||
Neetinei
|
||||
Neetrenaza
|
||||
Neetzara
|
||||
Neeus
|
||||
Nema
|
||||
Neposh
|
||||
Netapatuu
|
||||
Nexith
|
||||
Nodeeus
|
||||
Nomu
|
||||
Nosaleeth
|
||||
Nowajeem
|
||||
Noyei
|
||||
Nulaz
|
||||
Nur
|
||||
Obaxith
|
||||
Okan
|
||||
Okaw
|
||||
Okeeh
|
||||
Oleed
|
||||
Oleen
|
||||
Olik
|
||||
Olink
|
||||
Onuja
|
||||
Onurai
|
||||
Opatieel
|
||||
Otumeel
|
||||
Owai
|
||||
Pachat
|
||||
Pacheeva
|
||||
Pad
|
||||
Paduxi
|
||||
Pajeen
|
||||
Parash
|
||||
Peeradeeh
|
||||
Pejureel
|
||||
Petaxai
|
||||
Pideelus
|
||||
Pimaxi
|
||||
Pojeel
|
||||
Ra
|
||||
Radithax
|
||||
Raj
|
||||
Rareel
|
||||
Rasha
|
||||
Redieeus
|
||||
Ree
|
||||
Reeh
|
||||
Reemukeeus
|
||||
Reenum
|
||||
Reesa
|
||||
Reet
|
||||
Reezal
|
||||
Resari
|
||||
Riker
|
||||
Ru
|
||||
Rupah
|
||||
Sakeepa
|
||||
Sakeeus
|
||||
Sakka
|
||||
Saliith
|
||||
Sar
|
||||
Schiavas
|
||||
Seek
|
||||
Seewul
|
||||
Sei
|
||||
Sejaijilax
|
||||
Shakiis
|
||||
Shehs
|
||||
Shei
|
||||
Silm
|
||||
Skee
|
||||
Skeetul
|
||||
Sureeus
|
||||
Ta
|
||||
Taeed
|
||||
Tah
|
||||
Taleel
|
||||
Talen
|
||||
Tan
|
||||
Tanaka
|
||||
Tanan
|
||||
Tee
|
||||
Teeba
|
||||
Teegla
|
||||
Teeka
|
||||
Teekeeus
|
||||
Teemeeta
|
||||
Teeus
|
||||
Tehat
|
||||
Tei
|
||||
Teinaava
|
||||
Teineeja
|
||||
Terezeeus
|
||||
Tikaasi
|
||||
Tim
|
||||
Topeeth
|
||||
Topith
|
||||
Tsleeixth
|
||||
Tul
|
||||
Tulm
|
||||
Tun
|
||||
Ukatsei
|
||||
Ukawei
|
||||
Ula
|
||||
Ulawa
|
||||
Ullis
|
||||
Usha
|
||||
Usheeja
|
||||
Utadeek
|
||||
Utamukeeus
|
||||
Utatul
|
||||
Uxith
|
||||
Vara
|
||||
Veekas
|
||||
Veenaza
|
||||
Veezara
|
||||
Vistha
|
||||
Vudeelal
|
||||
Wanan
|
||||
Wanum
|
||||
Wayiteh
|
||||
Weebam
|
||||
Weeltul
|
||||
Weer
|
||||
Wih
|
||||
Wud
|
||||
Wuleen
|
||||
Wulm
|
||||
Wumeek
|
||||
Xal
|
||||
Xemo
|
||||
Yinz
|
||||
Yinz'r
|
||||
Zaw
|
||||
Ze
|
||||
Zeen
|
||||
Zeeus
|
||||
Abijoo
|
||||
Ah
|
||||
Ajum
|
||||
Am
|
||||
Amusei
|
||||
An
|
||||
Anoo
|
||||
Aojee
|
||||
Asum
|
||||
Az
|
||||
Azeel
|
||||
Azinar
|
||||
Azjai
|
||||
Baar
|
||||
Banka
|
||||
Bar
|
||||
Barnaxi
|
||||
Batar
|
||||
Batuus
|
||||
Beem
|
||||
Beshnus
|
||||
Betu
|
||||
Bex
|
||||
Bijot
|
||||
Bimee
|
||||
Binyaar
|
||||
Bosekus
|
||||
Brand
|
||||
Bun
|
||||
Bunach
|
||||
Bunish
|
||||
Busheeus
|
||||
Buujhan
|
||||
Chakuk
|
||||
Chalish
|
||||
Chalureel
|
||||
Chath
|
||||
Chee
|
||||
Cheedal
|
||||
Chilwir
|
||||
Chitakus
|
||||
Chiwish
|
||||
Chulz
|
||||
Chuna
|
||||
Da
|
||||
Dakee
|
||||
Dan
|
||||
Dar
|
||||
Darasken
|
||||
DarJee
|
||||
Debameel
|
||||
Deed
|
||||
Deegeeta
|
||||
Deeh
|
||||
Deekonus
|
||||
Deekum
|
||||
Deekus
|
||||
Deerkaza
|
||||
Deetum
|
||||
Demeepa
|
||||
Depasa
|
||||
Derkeethus
|
||||
Deroh
|
||||
Dezanu
|
||||
Dreet
|
||||
Drumarz
|
||||
Dum
|
||||
Dunaxith
|
||||
Effe
|
||||
Ei
|
||||
Eidu
|
||||
Eius
|
||||
Eiuus
|
||||
Eix
|
||||
Eleedal
|
||||
Er
|
||||
Esqoo
|
||||
Etaku
|
||||
Gah
|
||||
Gajul
|
||||
Gam
|
||||
Geeh
|
||||
Geel
|
||||
Geem
|
||||
Geh
|
||||
Gei
|
||||
Gih
|
||||
Gin
|
||||
Goh
|
||||
Gulum
|
||||
Haj
|
||||
Han
|
||||
Haran
|
||||
Hareeya
|
||||
Hathei
|
||||
Heedul
|
||||
Heem
|
||||
Hei
|
||||
Heir
|
||||
Hixeeh
|
||||
Huleeya
|
||||
Huzei
|
||||
Ilas
|
||||
Im
|
||||
Inee
|
||||
Itan
|
||||
J'Ram
|
||||
Ja
|
||||
Jah
|
||||
Jaraleet
|
||||
Jaree
|
||||
Jas
|
||||
Jasaiin
|
||||
Jaseen
|
||||
Jat
|
||||
Jee
|
||||
Jeela
|
||||
Jeelius
|
||||
Jeelus
|
||||
Jeen
|
||||
Jeer
|
||||
Jeetum
|
||||
Jei
|
||||
Jilux
|
||||
Jin
|
||||
Jon
|
||||
Jul
|
||||
Julan
|
||||
Junal
|
||||
Jush
|
||||
Juunei
|
||||
Kai
|
||||
Kajin
|
||||
Kamax
|
||||
Kas
|
||||
Keema
|
||||
Keer
|
||||
Keerasa
|
||||
Kepanuu
|
||||
Kia
|
||||
Kiameed
|
||||
Kilaya
|
||||
Kiurz
|
||||
Kur
|
||||
Kuz
|
||||
La
|
||||
Lah
|
||||
Lai
|
||||
Lan
|
||||
Lara
|
||||
Leem
|
||||
Lei
|
||||
Loh
|
||||
Lotash
|
||||
Luh
|
||||
Lurz
|
||||
Luteema
|
||||
Maahi
|
||||
Madesi
|
||||
Maheelius
|
||||
Mahei
|
||||
Maht
|
||||
Malz
|
||||
Marz
|
||||
Mathei
|
||||
Maxath
|
||||
Meej
|
||||
Meejapa
|
||||
Meensuda
|
||||
Meer
|
||||
Mema
|
||||
Mere
|
||||
Metaku
|
||||
Miharil
|
||||
Milos
|
||||
Miun
|
||||
Mobareed
|
||||
Mohimeem
|
||||
Mopakuz
|
||||
Motuu
|
||||
Mujeen
|
||||
Muranatepa
|
||||
Mush
|
||||
Muz
|
||||
Na
|
||||
Napetui
|
||||
Nazuux
|
||||
Nebutil
|
||||
Neeti
|
||||
Neetinei
|
||||
Neetrenaza
|
||||
Neetzara
|
||||
Neeus
|
||||
Nema
|
||||
Neposh
|
||||
Netapatuu
|
||||
Nexith
|
||||
Nodeeus
|
||||
Nomu
|
||||
Nosaleeth
|
||||
Nowajeem
|
||||
Noyei
|
||||
Nulaz
|
||||
Nur
|
||||
Obaxith
|
||||
Okan
|
||||
Okaw
|
||||
Okeeh
|
||||
Oleed
|
||||
Oleen
|
||||
Olik
|
||||
Olink
|
||||
Onuja
|
||||
Onurai
|
||||
Opatieel
|
||||
Otumeel
|
||||
Owai
|
||||
Pachat
|
||||
Pacheeva
|
||||
Pad
|
||||
Paduxi
|
||||
Pajeen
|
||||
Parash
|
||||
Peeradeeh
|
||||
Pejureel
|
||||
Petaxai
|
||||
Pideelus
|
||||
Pimaxi
|
||||
Pojeel
|
||||
Ra
|
||||
Radithax
|
||||
Raj
|
||||
Rareel
|
||||
Rasha
|
||||
Redieeus
|
||||
Ree
|
||||
Reeh
|
||||
Reemukeeus
|
||||
Reenum
|
||||
Reesa
|
||||
Reet
|
||||
Reezal
|
||||
Resari
|
||||
Riker
|
||||
Ru
|
||||
Rupah
|
||||
Sakeepa
|
||||
Sakeeus
|
||||
Sakka
|
||||
Saliith
|
||||
Sar
|
||||
Schiavas
|
||||
Seek
|
||||
Seewul
|
||||
Sei
|
||||
Sejaijilax
|
||||
Shakiis
|
||||
Shehs
|
||||
Shei
|
||||
Silm
|
||||
Skee
|
||||
Skeetul
|
||||
Sureeus
|
||||
Ta
|
||||
Taeed
|
||||
Tah
|
||||
Taleel
|
||||
Talen
|
||||
Tan
|
||||
Tanaka
|
||||
Tanan
|
||||
Tee
|
||||
Teeba
|
||||
Teegla
|
||||
Teeka
|
||||
Teekeeus
|
||||
Teemeeta
|
||||
Teeus
|
||||
Tehat
|
||||
Tei
|
||||
Teinaava
|
||||
Teineeja
|
||||
Terezeeus
|
||||
Tikaasi
|
||||
Tim
|
||||
Topeeth
|
||||
Topith
|
||||
Tsleeixth
|
||||
Tul
|
||||
Tulm
|
||||
Tun
|
||||
Ukatsei
|
||||
Ukawei
|
||||
Ula
|
||||
Ulawa
|
||||
Ullis
|
||||
Usha
|
||||
Usheeja
|
||||
Utadeek
|
||||
Utamukeeus
|
||||
Utatul
|
||||
Uxith
|
||||
Vara
|
||||
Veekas
|
||||
Veenaza
|
||||
Veezara
|
||||
Vistha
|
||||
Vudeelal
|
||||
Wanan
|
||||
Wanum
|
||||
Wayiteh
|
||||
Weebam
|
||||
Weeltul
|
||||
Weer
|
||||
Wih
|
||||
Wud
|
||||
Wuleen
|
||||
Wulm
|
||||
Wumeek
|
||||
Xal
|
||||
Xemo
|
||||
Yinz
|
||||
Yinz'r
|
||||
Zaw
|
||||
Ze
|
||||
Zeen
|
||||
Zeeus
|
||||
Zish
|
||||
@@ -1,32 +1,32 @@
|
||||
Church Mouse
|
||||
Hush Foot
|
||||
Invisible Man
|
||||
Lemon Mime
|
||||
Marcel
|
||||
Marcel Mime
|
||||
Master-Mime
|
||||
Mime
|
||||
Mr Beret
|
||||
Mr Mime
|
||||
Mr Mute
|
||||
Mute
|
||||
Omerta
|
||||
Oui Oui
|
||||
Pantomime
|
||||
Quiet
|
||||
Quiet Riot
|
||||
See Through
|
||||
Silence
|
||||
Silencio
|
||||
Silent Knight
|
||||
Silent Majority
|
||||
Silent Night
|
||||
Silent Sorrow
|
||||
Silent Step
|
||||
Silent Mouse
|
||||
The Unspeakable
|
||||
Transparency
|
||||
Unspeakable
|
||||
Untouchable
|
||||
Wall Runner
|
||||
White Face
|
||||
Church Mouse
|
||||
Hush Foot
|
||||
Invisible Man
|
||||
Lemon Mime
|
||||
Marcel
|
||||
Marcel Mime
|
||||
Master-Mime
|
||||
Mime
|
||||
Mr Beret
|
||||
Mr Mime
|
||||
Mr Mute
|
||||
Mute
|
||||
Omerta
|
||||
Oui Oui
|
||||
Pantomime
|
||||
Quiet
|
||||
Quiet Riot
|
||||
See Through
|
||||
Silence
|
||||
Silencio
|
||||
Silent Knight
|
||||
Silent Majority
|
||||
Silent Night
|
||||
Silent Sorrow
|
||||
Silent Step
|
||||
Silent Mouse
|
||||
The Unspeakable
|
||||
Transparency
|
||||
Unspeakable
|
||||
Untouchable
|
||||
Wall Runner
|
||||
White Face
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
Aria
|
||||
Baki
|
||||
Blood
|
||||
Bro
|
||||
Cyrax
|
||||
Daemon
|
||||
Death
|
||||
Donatello
|
||||
Eater
|
||||
Ermac
|
||||
Fox
|
||||
Goemon
|
||||
Hanzo
|
||||
Hayabusa
|
||||
Hazuki
|
||||
Hero
|
||||
Hien
|
||||
Hiro
|
||||
Hiryu
|
||||
Iga
|
||||
Koga
|
||||
Leonardo
|
||||
McAwesome
|
||||
McNinja
|
||||
Michaelangelo
|
||||
Midnight
|
||||
Null
|
||||
Ogre
|
||||
Phantom
|
||||
Raiden
|
||||
Rain
|
||||
Raphael
|
||||
Ryu
|
||||
Saibot
|
||||
Samurai
|
||||
Sarutobi
|
||||
Scorpion
|
||||
Seven
|
||||
Shadow
|
||||
Shredder
|
||||
Smoke
|
||||
Splinter
|
||||
Throat
|
||||
Aria
|
||||
Baki
|
||||
Blood
|
||||
Bro
|
||||
Cyrax
|
||||
Daemon
|
||||
Death
|
||||
Donatello
|
||||
Eater
|
||||
Ermac
|
||||
Fox
|
||||
Goemon
|
||||
Hanzo
|
||||
Hayabusa
|
||||
Hazuki
|
||||
Hero
|
||||
Hien
|
||||
Hiro
|
||||
Hiryu
|
||||
Iga
|
||||
Koga
|
||||
Leonardo
|
||||
McAwesome
|
||||
McNinja
|
||||
Michaelangelo
|
||||
Midnight
|
||||
Null
|
||||
Ogre
|
||||
Phantom
|
||||
Raiden
|
||||
Rain
|
||||
Raphael
|
||||
Ryu
|
||||
Saibot
|
||||
Samurai
|
||||
Sarutobi
|
||||
Scorpion
|
||||
Seven
|
||||
Shadow
|
||||
Shredder
|
||||
Smoke
|
||||
Splinter
|
||||
Throat
|
||||
Zero
|
||||
@@ -1,46 +1,46 @@
|
||||
Agile
|
||||
Assassin
|
||||
Awesome
|
||||
Black
|
||||
Crimson
|
||||
Cruel
|
||||
Deep
|
||||
Dr
|
||||
Dragon
|
||||
Ender
|
||||
Grandmaster
|
||||
Grappler
|
||||
Gray
|
||||
Hunter
|
||||
Initiate
|
||||
Killer
|
||||
Liquid
|
||||
Master
|
||||
Merciful
|
||||
Merciless
|
||||
Nickel
|
||||
Night
|
||||
Nightshade
|
||||
Ninja
|
||||
Noob
|
||||
Orphaner
|
||||
Quick
|
||||
Remorseless
|
||||
Rogue
|
||||
Sensei
|
||||
Shinobi
|
||||
Silencing
|
||||
Silent
|
||||
Silver
|
||||
Singing
|
||||
Slayer
|
||||
Snake
|
||||
Solid
|
||||
Solidus
|
||||
Stalker
|
||||
Steel
|
||||
Strider
|
||||
Striker
|
||||
Swift
|
||||
Ulimate
|
||||
Agile
|
||||
Assassin
|
||||
Awesome
|
||||
Black
|
||||
Crimson
|
||||
Cruel
|
||||
Deep
|
||||
Dr
|
||||
Dragon
|
||||
Ender
|
||||
Grandmaster
|
||||
Grappler
|
||||
Gray
|
||||
Hunter
|
||||
Initiate
|
||||
Killer
|
||||
Liquid
|
||||
Master
|
||||
Merciful
|
||||
Merciless
|
||||
Nickel
|
||||
Night
|
||||
Nightshade
|
||||
Ninja
|
||||
Noob
|
||||
Orphaner
|
||||
Quick
|
||||
Remorseless
|
||||
Rogue
|
||||
Sensei
|
||||
Shinobi
|
||||
Silencing
|
||||
Silent
|
||||
Silver
|
||||
Singing
|
||||
Slayer
|
||||
Snake
|
||||
Solid
|
||||
Solidus
|
||||
Stalker
|
||||
Steel
|
||||
Strider
|
||||
Striker
|
||||
Swift
|
||||
Ulimate
|
||||
Widower
|
||||
@@ -1,118 +1,118 @@
|
||||
Actinium
|
||||
Aluminium
|
||||
Americium
|
||||
Antimony
|
||||
Argon
|
||||
Arsenic
|
||||
Astatine
|
||||
Barium
|
||||
Berkelium
|
||||
Beryllium
|
||||
Bismuth
|
||||
Bohrium
|
||||
Boron
|
||||
Bromine
|
||||
Cadmium
|
||||
Caesium
|
||||
Calcium
|
||||
Californium
|
||||
Carbon
|
||||
Cerium
|
||||
Chlorine
|
||||
Chromium
|
||||
Cobalt
|
||||
Copernicium
|
||||
Copper
|
||||
Curium
|
||||
Darmstadtium
|
||||
Dubnium
|
||||
Dysprosium
|
||||
Einsteinium
|
||||
Erbium
|
||||
Europium
|
||||
Fermium
|
||||
Flerovium
|
||||
Fluorine
|
||||
Francium
|
||||
Gadolinium
|
||||
Gallium
|
||||
Germanium
|
||||
Gold
|
||||
Hafnium
|
||||
Hassium
|
||||
Helium
|
||||
Holmium
|
||||
Hydrogen
|
||||
Indium
|
||||
Iodine
|
||||
Iridium
|
||||
Iron
|
||||
Krypton
|
||||
Lanthanum
|
||||
Lawrencium
|
||||
Lead
|
||||
Lithium
|
||||
Livermorium
|
||||
Lutetium
|
||||
Magnesium
|
||||
Manganese
|
||||
Meitnerium
|
||||
Mendelevium
|
||||
Mercury
|
||||
Molybdenum
|
||||
Moscovium
|
||||
Neodymium
|
||||
Neon
|
||||
Neptunium
|
||||
Nickel
|
||||
Nihonium
|
||||
Niobium
|
||||
Nitrogen
|
||||
Nobelium
|
||||
Oganesson
|
||||
Osmium
|
||||
Oxygen
|
||||
Palladium
|
||||
Phosphorus
|
||||
Platinum
|
||||
Plutonium
|
||||
Polonium
|
||||
Potassium
|
||||
Praseodymium
|
||||
Promethium
|
||||
Protactinium
|
||||
Radium
|
||||
Radon
|
||||
Rhenium
|
||||
Rhodium
|
||||
Roentgenium
|
||||
Rubidium
|
||||
Ruthenium
|
||||
Rutherfordium
|
||||
Samarium
|
||||
Scandium
|
||||
Seaborgium
|
||||
Selenium
|
||||
Silicon
|
||||
Silver
|
||||
Sodium
|
||||
Strontium
|
||||
Sulfur
|
||||
Tantalum
|
||||
Technetium
|
||||
Tellurium
|
||||
Tennessine
|
||||
Terbium
|
||||
Thallium
|
||||
Thorium
|
||||
Thulium
|
||||
Tin
|
||||
Titanium
|
||||
Tungsten
|
||||
Uranium
|
||||
Vanadium
|
||||
Xenon
|
||||
Ytterbium
|
||||
Yttrium
|
||||
Zinc
|
||||
Actinium
|
||||
Aluminium
|
||||
Americium
|
||||
Antimony
|
||||
Argon
|
||||
Arsenic
|
||||
Astatine
|
||||
Barium
|
||||
Berkelium
|
||||
Beryllium
|
||||
Bismuth
|
||||
Bohrium
|
||||
Boron
|
||||
Bromine
|
||||
Cadmium
|
||||
Caesium
|
||||
Calcium
|
||||
Californium
|
||||
Carbon
|
||||
Cerium
|
||||
Chlorine
|
||||
Chromium
|
||||
Cobalt
|
||||
Copernicium
|
||||
Copper
|
||||
Curium
|
||||
Darmstadtium
|
||||
Dubnium
|
||||
Dysprosium
|
||||
Einsteinium
|
||||
Erbium
|
||||
Europium
|
||||
Fermium
|
||||
Flerovium
|
||||
Fluorine
|
||||
Francium
|
||||
Gadolinium
|
||||
Gallium
|
||||
Germanium
|
||||
Gold
|
||||
Hafnium
|
||||
Hassium
|
||||
Helium
|
||||
Holmium
|
||||
Hydrogen
|
||||
Indium
|
||||
Iodine
|
||||
Iridium
|
||||
Iron
|
||||
Krypton
|
||||
Lanthanum
|
||||
Lawrencium
|
||||
Lead
|
||||
Lithium
|
||||
Livermorium
|
||||
Lutetium
|
||||
Magnesium
|
||||
Manganese
|
||||
Meitnerium
|
||||
Mendelevium
|
||||
Mercury
|
||||
Molybdenum
|
||||
Moscovium
|
||||
Neodymium
|
||||
Neon
|
||||
Neptunium
|
||||
Nickel
|
||||
Nihonium
|
||||
Niobium
|
||||
Nitrogen
|
||||
Nobelium
|
||||
Oganesson
|
||||
Osmium
|
||||
Oxygen
|
||||
Palladium
|
||||
Phosphorus
|
||||
Platinum
|
||||
Plutonium
|
||||
Polonium
|
||||
Potassium
|
||||
Praseodymium
|
||||
Promethium
|
||||
Protactinium
|
||||
Radium
|
||||
Radon
|
||||
Rhenium
|
||||
Rhodium
|
||||
Roentgenium
|
||||
Rubidium
|
||||
Ruthenium
|
||||
Rutherfordium
|
||||
Samarium
|
||||
Scandium
|
||||
Seaborgium
|
||||
Selenium
|
||||
Silicon
|
||||
Silver
|
||||
Sodium
|
||||
Strontium
|
||||
Sulfur
|
||||
Tantalum
|
||||
Technetium
|
||||
Tellurium
|
||||
Tennessine
|
||||
Terbium
|
||||
Thallium
|
||||
Thorium
|
||||
Thulium
|
||||
Tin
|
||||
Titanium
|
||||
Tungsten
|
||||
Uranium
|
||||
Vanadium
|
||||
Xenon
|
||||
Ytterbium
|
||||
Yttrium
|
||||
Zinc
|
||||
Zirconium
|
||||
@@ -1,47 +1,47 @@
|
||||
PBU
|
||||
HIU
|
||||
SINA
|
||||
ARMA
|
||||
OSI
|
||||
HBL
|
||||
MSO
|
||||
RR
|
||||
CHRI
|
||||
CDB
|
||||
HG
|
||||
XSI
|
||||
ORNG
|
||||
GUN
|
||||
KOR
|
||||
MET
|
||||
FRE
|
||||
XIS
|
||||
SLI
|
||||
PKP
|
||||
HOG
|
||||
RZH
|
||||
GOOF
|
||||
MRPR
|
||||
JJR
|
||||
FIRC
|
||||
INC
|
||||
PHL
|
||||
BGB
|
||||
ANTR
|
||||
MIW
|
||||
WJ
|
||||
JRD
|
||||
CHOC
|
||||
ANCL
|
||||
JLLO
|
||||
JNLG
|
||||
KOS
|
||||
TKRG
|
||||
XAL
|
||||
STLP
|
||||
CBOS
|
||||
DUNC
|
||||
FXMC
|
||||
DRSD
|
||||
COI
|
||||
PBU
|
||||
HIU
|
||||
SINA
|
||||
ARMA
|
||||
OSI
|
||||
HBL
|
||||
MSO
|
||||
RR
|
||||
CHRI
|
||||
CDB
|
||||
HG
|
||||
XSI
|
||||
ORNG
|
||||
GUN
|
||||
KOR
|
||||
MET
|
||||
FRE
|
||||
XIS
|
||||
SLI
|
||||
PKP
|
||||
HOG
|
||||
RZH
|
||||
GOOF
|
||||
MRPR
|
||||
JJR
|
||||
FIRC
|
||||
INC
|
||||
PHL
|
||||
BGB
|
||||
ANTR
|
||||
MIW
|
||||
WJ
|
||||
JRD
|
||||
CHOC
|
||||
ANCL
|
||||
JLLO
|
||||
JNLG
|
||||
KOS
|
||||
TKRG
|
||||
XAL
|
||||
STLP
|
||||
CBOS
|
||||
DUNC
|
||||
FXMC
|
||||
DRSD
|
||||
COI
|
||||
CYBR
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,37 +1,37 @@
|
||||
Alatar
|
||||
Archchancellor
|
||||
Boccob
|
||||
Circe
|
||||
Dumbledor
|
||||
Elminister
|
||||
Gandalf
|
||||
Grimm
|
||||
Gulstaff
|
||||
Houdini
|
||||
Jim
|
||||
Kaschei
|
||||
Khelben
|
||||
Kreol
|
||||
Lina
|
||||
Merlin
|
||||
Mogan
|
||||
Mordenkainen
|
||||
Morgan
|
||||
Mystryl
|
||||
Nihilus
|
||||
Palando
|
||||
Prospero
|
||||
Radagast
|
||||
Raistlin
|
||||
Rasputin
|
||||
Rincewind
|
||||
Saruman
|
||||
Tenser
|
||||
Terefi
|
||||
Tzeentch
|
||||
Urza
|
||||
Vaarsuvius
|
||||
Vecna
|
||||
Yoda
|
||||
Zagyg
|
||||
Alatar
|
||||
Archchancellor
|
||||
Boccob
|
||||
Circe
|
||||
Dumbledor
|
||||
Elminister
|
||||
Gandalf
|
||||
Grimm
|
||||
Gulstaff
|
||||
Houdini
|
||||
Jim
|
||||
Kaschei
|
||||
Khelben
|
||||
Kreol
|
||||
Lina
|
||||
Merlin
|
||||
Mogan
|
||||
Mordenkainen
|
||||
Morgan
|
||||
Mystryl
|
||||
Nihilus
|
||||
Palando
|
||||
Prospero
|
||||
Radagast
|
||||
Raistlin
|
||||
Rasputin
|
||||
Rincewind
|
||||
Saruman
|
||||
Tenser
|
||||
Terefi
|
||||
Tzeentch
|
||||
Urza
|
||||
Vaarsuvius
|
||||
Vecna
|
||||
Yoda
|
||||
Zagyg
|
||||
Zul
|
||||
@@ -1,40 +1,40 @@
|
||||
Dark
|
||||
Darkmagic
|
||||
Darko
|
||||
Gray
|
||||
Honko
|
||||
Inverse
|
||||
le Fay
|
||||
of Void
|
||||
Shado
|
||||
Smith
|
||||
the All Knowing
|
||||
the Amazing
|
||||
the Bandit Killer
|
||||
the Benevolent
|
||||
the Blue
|
||||
the Brown
|
||||
the Conquerer
|
||||
the Deathless
|
||||
the Destroyer
|
||||
the Dragon Spooker
|
||||
the Emperor
|
||||
the Gray
|
||||
the Great
|
||||
the Magician
|
||||
the Powerful
|
||||
the Raven
|
||||
the Red
|
||||
the Remorseful
|
||||
the Seething
|
||||
the Sorcelator
|
||||
the Spiral King
|
||||
the Unending
|
||||
the Unstoppable
|
||||
the Weeping
|
||||
the White
|
||||
the Wise
|
||||
the Wizzard
|
||||
Unseen
|
||||
Weatherwax
|
||||
Dark
|
||||
Darkmagic
|
||||
Darko
|
||||
Gray
|
||||
Honko
|
||||
Inverse
|
||||
le Fay
|
||||
of Void
|
||||
Shado
|
||||
Smith
|
||||
the All Knowing
|
||||
the Amazing
|
||||
the Bandit Killer
|
||||
the Benevolent
|
||||
the Blue
|
||||
the Brown
|
||||
the Conquerer
|
||||
the Deathless
|
||||
the Destroyer
|
||||
the Dragon Spooker
|
||||
the Emperor
|
||||
the Gray
|
||||
the Great
|
||||
the Magician
|
||||
the Powerful
|
||||
the Raven
|
||||
the Red
|
||||
the Remorseful
|
||||
the Seething
|
||||
the Sorcelator
|
||||
the Spiral King
|
||||
the Unending
|
||||
the Unstoppable
|
||||
the Weeping
|
||||
the White
|
||||
the Wise
|
||||
the Wizzard
|
||||
Unseen
|
||||
Weatherwax
|
||||
Yagg
|
||||
@@ -1,20 +1,20 @@
|
||||
# To make your name something other than your github name type it in the format "<github name> <credited name>
|
||||
# e.g.
|
||||
# Cyberboss Jordan Brown
|
||||
# To suppress your name from appearing in the credits do "<github name> __REMOVE__
|
||||
# e.g.
|
||||
# Cyberboss __REMOVE__
|
||||
|
||||
tgstation-server Thanks for playing!
|
||||
|
||||
optimumtact oranges
|
||||
qustinnus Floyd / Qustinnus
|
||||
catalystfd __REMOVE__
|
||||
TheVekter Vekter
|
||||
ChangelingRain Joan
|
||||
NewSta1 NewSta
|
||||
theOperand Miauw
|
||||
PraiseRatvar Frozenguy5
|
||||
FuryMcFlurry Fury McFlurry
|
||||
vuonojenmustaturska Naksu
|
||||
praisenarsie Frozenguy5
|
||||
# To make your name something other than your github name type it in the format "<github name> <credited name>
|
||||
# e.g.
|
||||
# Cyberboss Jordan Brown
|
||||
# To suppress your name from appearing in the credits do "<github name> __REMOVE__
|
||||
# e.g.
|
||||
# Cyberboss __REMOVE__
|
||||
|
||||
tgstation-server Thanks for playing!
|
||||
|
||||
optimumtact oranges
|
||||
qustinnus Floyd / Qustinnus
|
||||
catalystfd __REMOVE__
|
||||
TheVekter Vekter
|
||||
ChangelingRain Joan
|
||||
NewSta1 NewSta
|
||||
theOperand Miauw
|
||||
PraiseRatvar Frozenguy5
|
||||
FuryMcFlurry Fury McFlurry
|
||||
vuonojenmustaturska Naksu
|
||||
praisenarsie Frozenguy5
|
||||
|
||||
@@ -1,418 +1,418 @@
|
||||
/* Runtime Condenser by Nodrak
|
||||
* Cleaned up and refactored by MrStonedOne
|
||||
* This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance
|
||||
* of the runtime will log the source, usr and src, the rest will just add to the total. Infinite loops will
|
||||
* also be caught and displayed (if any) above the list of runtimes.
|
||||
*
|
||||
* How to use:
|
||||
* 1) Copy and paste your list of runtimes from Dream Daemon into input.exe
|
||||
* 2) Run RuntimeCondenser.exe
|
||||
* 3) Open output.txt for a condensed report of the runtimes
|
||||
*
|
||||
* How to compile:
|
||||
* Requires visual c++ compiler 2012 or any linux compiler with c++11 support.
|
||||
* Windows:
|
||||
* Normal: cl.exe /EHsc /Ox /Qpar Main.cpp
|
||||
* Debug: cl.exe /EHsc /Zi Main.cpp
|
||||
* Linux:
|
||||
* Normal: g++ -O3 -std=c++11 Main.cpp -o rc
|
||||
* Debug: g++ -g -Og -std=c++11 Main.cpp -o rc
|
||||
* Any Compile errors most likely indicate lack of c++11 support. Google how to upgrade or nag coderbus for help..
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <ctime>
|
||||
|
||||
|
||||
#define PROGRESS_FPS 10
|
||||
#define PROGRESS_BAR_INNER_WIDTH 50
|
||||
#define LINEBUFFER (32*1024) //32KiB
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct runtime {
|
||||
string text;
|
||||
string proc;
|
||||
string source;
|
||||
string usr;
|
||||
string src;
|
||||
string loc;
|
||||
unsigned int count;
|
||||
};
|
||||
struct harddel {
|
||||
string type;
|
||||
unsigned int count;
|
||||
};
|
||||
//What we use to read input
|
||||
string * lastLine = new string();
|
||||
string * currentLine = new string();
|
||||
string * nextLine = new string();
|
||||
|
||||
//Stores lines we want to keep to print out
|
||||
unordered_map<string,runtime> storedRuntime;
|
||||
unordered_map<string,runtime> storedInfiniteLoop;
|
||||
unordered_map<string,harddel> storedHardDel;
|
||||
|
||||
//Stat tracking stuff for output
|
||||
unsigned int totalRuntimes = 0;
|
||||
unsigned int totalInfiniteLoops = 0;
|
||||
unsigned int totalHardDels = 0;
|
||||
|
||||
|
||||
bool endofbuffer = false;
|
||||
//like substr, but returns an empty string if the string is smaller then start, rather then an exception.
|
||||
inline string safe_substr(string * S, size_t start = 0, size_t end = string::npos) {
|
||||
if (start > S->length())
|
||||
start = S->length();
|
||||
return S->substr(start, end);
|
||||
}
|
||||
//getline() is slow as fucking balls. this is quicker because we prefill a buffer rather then read 1 byte at a time searching for newlines, lowering on i/o calls and overhead. (110MB/s vs 40MB/s on a 1.8GB file pre-filled into the disk cache)
|
||||
//if i wanted to make it even faster, I'd use a reading thread, a new line searching thread, another thread or four for searching for runtimes in the list to see if they are unique, and finally the main thread for displaying the progress bar. but fuck that noise.
|
||||
inline string * readline(FILE * f) {
|
||||
static char buf[LINEBUFFER];
|
||||
static size_t pos = 0;
|
||||
static size_t size = 0;
|
||||
|
||||
for (size_t i = pos; i < LINEBUFFER; i++) {
|
||||
char c = buf[i];
|
||||
if (i >= size && (pos || i < LINEBUFFER-1)) {
|
||||
if (feof(f) || ferror(f))
|
||||
break;
|
||||
if (size && pos) { //move current stuff to start of buffer
|
||||
size -= pos;
|
||||
i -= pos;
|
||||
memmove(buf, &buf[pos], size);
|
||||
}
|
||||
//fill remaining buffer
|
||||
size += fread(&buf[i], 1, LINEBUFFER-size-1, f);
|
||||
pos = 0;
|
||||
c = buf[i];
|
||||
}
|
||||
if (c == '\n') {
|
||||
//trim off any newlines from the start
|
||||
while (i > pos && (buf[pos] == '\r' || buf[pos] == '\n'))
|
||||
pos++;
|
||||
string * s = new string(&buf[pos], i-pos);
|
||||
pos = i+1;
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
||||
string * s = new string(&buf[pos], size-pos);
|
||||
pos = 0;
|
||||
size = 0;
|
||||
endofbuffer = true;
|
||||
return s;
|
||||
}
|
||||
|
||||
inline void forward_progress(FILE * inputFile) {
|
||||
delete(lastLine);
|
||||
lastLine = currentLine;
|
||||
currentLine = nextLine;
|
||||
nextLine = readline(inputFile);
|
||||
//strip out any timestamps.
|
||||
if (nextLine->length() >= 10) {
|
||||
if ((*nextLine)[0] == '[' && (*nextLine)[3] == ':' && (*nextLine)[6] == ':' && (*nextLine)[9] == ']')
|
||||
nextLine->erase(0, 10);
|
||||
else if (nextLine->length() >= 26 && ((*nextLine)[0] == '[' && (*nextLine)[5] == '-' && (*nextLine)[14] == ':' && (*nextLine)[20] == '.' && (*nextLine)[24] == ']'))
|
||||
nextLine->erase(0, 26);
|
||||
}
|
||||
}
|
||||
//deallocates to, copys from to to.
|
||||
inline void string_send(string * &from, string * &to) {
|
||||
delete(to);
|
||||
to = new string(*from);
|
||||
}
|
||||
inline void printprogressbar(unsigned short progress /*as percent*/) {
|
||||
double const modifer = 100.0L/(double)PROGRESS_BAR_INNER_WIDTH;
|
||||
size_t bars = (double)progress/modifer;
|
||||
cerr << "\r[" << string(bars, '=') << ((progress < 100) ? ">" : "") << string(PROGRESS_BAR_INNER_WIDTH-(bars+((progress < 100) ? 1 : 0)), ' ') << "] " << progress << "%";
|
||||
cerr.flush();
|
||||
}
|
||||
|
||||
bool readFromFile(bool isstdin) {
|
||||
//Open file to read
|
||||
FILE * inputFile = stdin;
|
||||
if (!isstdin)
|
||||
inputFile = fopen("Input.txt", "r");
|
||||
|
||||
if (ferror(inputFile))
|
||||
return false;
|
||||
long long fileLength = 0;
|
||||
clock_t nextupdate = 0;
|
||||
if (!isstdin) {
|
||||
fseek(inputFile, 0, SEEK_END);
|
||||
fileLength = ftell(inputFile);
|
||||
fseek(inputFile, 0, SEEK_SET);
|
||||
nextupdate = clock();
|
||||
}
|
||||
|
||||
if (feof(inputFile))
|
||||
return false; //empty file
|
||||
do {
|
||||
//Update our lines
|
||||
forward_progress(inputFile);
|
||||
//progress bar
|
||||
|
||||
if (!isstdin && clock() >= nextupdate) {
|
||||
int dProgress = (int)(((long double)ftell(inputFile) / (long double)fileLength) * 100.0L);
|
||||
printprogressbar(dProgress);
|
||||
nextupdate = clock() + (CLOCKS_PER_SEC/PROGRESS_FPS);
|
||||
}
|
||||
//Found a runtime!
|
||||
if (safe_substr(currentLine, 0, 14) == "runtime error:") {
|
||||
if (currentLine->length() <= 17) { //empty runtime, check next line.
|
||||
//runtime is on the line before this one. (byond bug)
|
||||
if (nextLine->length() < 2) {
|
||||
string_send(lastLine, nextLine);
|
||||
}
|
||||
forward_progress(inputFile);
|
||||
string * tmp = new string("runtime error: " + *currentLine);
|
||||
string_send(tmp, currentLine);
|
||||
delete(tmp);
|
||||
}
|
||||
//we assign this to the right container in a moment.
|
||||
unordered_map<string,runtime> * storage_container;
|
||||
|
||||
//runtime is actually an infinite loop
|
||||
if (safe_substr(currentLine, 15, 23) == "Infinite loop suspected" || safe_substr(currentLine, 15, 31) == "Maximum recursion level reached") {
|
||||
//use our infinite loop container.
|
||||
storage_container = &storedInfiniteLoop;
|
||||
totalInfiniteLoops++;
|
||||
// skip the line about world.loop_checks
|
||||
forward_progress(inputFile);
|
||||
string_send(lastLine, currentLine);
|
||||
} else {
|
||||
//use the runtime container
|
||||
storage_container = &storedRuntime;
|
||||
totalRuntimes++;
|
||||
}
|
||||
|
||||
string key = *currentLine;
|
||||
bool procfound = false; //so other things don't have to bother checking for this again.
|
||||
if (safe_substr(nextLine, 0, 10) == "proc name:") {
|
||||
key += *nextLine;
|
||||
procfound = true;
|
||||
}
|
||||
|
||||
//(get the address of a runtime from (a pointer to a container of runtimes)) to then store in a pointer to a runtime.
|
||||
//(and who said pointers were hard.)
|
||||
runtime* R = &((*storage_container)[key]);
|
||||
|
||||
//new
|
||||
if (R->text != *currentLine) {
|
||||
R->text = *currentLine;
|
||||
if (procfound) {
|
||||
R->proc = *nextLine;
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
R->count = 1;
|
||||
|
||||
//search for source file info
|
||||
if (safe_substr(nextLine, 2, 12) == "source file:") {
|
||||
R->source = *nextLine;
|
||||
//skip again
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
//If we find this, we have new stuff to store
|
||||
if (safe_substr(nextLine, 2, 4) == "usr:") {
|
||||
forward_progress(inputFile);
|
||||
forward_progress(inputFile);
|
||||
//Store more info
|
||||
R->usr = *lastLine;
|
||||
R->src = *currentLine;
|
||||
if (safe_substr(nextLine, 2, 8) == "src.loc:") {
|
||||
R->loc = *nextLine;
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
}
|
||||
|
||||
} else { //existed already
|
||||
R->count++;
|
||||
if (procfound)
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
|
||||
} else if (safe_substr(currentLine, 0, 7) == "Path : ") {
|
||||
string deltype = safe_substr(currentLine, 7);
|
||||
if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space.
|
||||
deltype = deltype.substr(0, deltype.size()-1);
|
||||
|
||||
unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10);
|
||||
if (failures <= 0)
|
||||
continue;
|
||||
|
||||
totalHardDels += failures;
|
||||
harddel* D = &storedHardDel[deltype];
|
||||
if (D->type != deltype) {
|
||||
D->type = deltype;
|
||||
D->count = failures;
|
||||
} else {
|
||||
D->count += failures;
|
||||
}
|
||||
}
|
||||
} while (!feof(inputFile) || !endofbuffer); //Until end of file
|
||||
if (!isstdin)
|
||||
printprogressbar(100);
|
||||
cerr << endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool runtimeComp(const runtime &a, const runtime &b) {
|
||||
return a.count > b.count;
|
||||
}
|
||||
|
||||
bool hardDelComp(const harddel &a, const harddel &b) {
|
||||
return a.count > b.count;
|
||||
}
|
||||
|
||||
bool writeToFile(bool usestdio) {
|
||||
//Open and clear the file
|
||||
ostream * output = &cout;
|
||||
ofstream * outputFile;
|
||||
if (!usestdio)
|
||||
output = outputFile = new ofstream("Output.txt", ios::trunc);
|
||||
|
||||
|
||||
if(usestdio || outputFile->is_open()) {
|
||||
*output << "Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n";
|
||||
if(storedInfiniteLoop.size() > 0)
|
||||
*output << "Total unique infinite loops: " << storedInfiniteLoop.size() << endl;
|
||||
|
||||
if(totalInfiniteLoops > 0)
|
||||
*output << "Total infinite loops: " << totalInfiniteLoops << endl << endl;
|
||||
|
||||
*output << "Total unique runtimes: " << storedRuntime.size() << endl;
|
||||
*output << "Total runtimes: " << totalRuntimes << endl << endl;
|
||||
if(storedHardDel.size() > 0)
|
||||
*output << "Total unique hard deletions: " << storedHardDel.size() << endl;
|
||||
|
||||
if(totalHardDels > 0)
|
||||
*output << "Total hard deletions: " << totalHardDels << endl << endl;
|
||||
|
||||
|
||||
//If we have infinite loops, display them first.
|
||||
if(storedInfiniteLoop.size() > 0) {
|
||||
vector<runtime> infiniteLoops;
|
||||
infiniteLoops.reserve(storedInfiniteLoop.size());
|
||||
for (unordered_map<string,runtime>::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++)
|
||||
infiniteLoops.push_back(it->second);
|
||||
storedInfiniteLoop.clear();
|
||||
sort(infiniteLoops.begin(), infiniteLoops.end(), runtimeComp);
|
||||
*output << "** Infinite loops **";
|
||||
for (int i=0; i < infiniteLoops.size(); i++) {
|
||||
runtime* R = &infiniteLoops[i];
|
||||
*output << endl << endl << "The following infinite loop has occurred " << R->count << " time(s).\n";
|
||||
*output << R->text << endl;
|
||||
if(R->proc.length())
|
||||
*output << R->proc << endl;
|
||||
if(R->source.length())
|
||||
*output << R->source << endl;
|
||||
if(R->usr.length())
|
||||
*output << R->usr << endl;
|
||||
if(R->src.length())
|
||||
*output << R->src << endl;
|
||||
if(R->loc.length())
|
||||
*output << R->loc << endl;
|
||||
}
|
||||
*output << endl << endl; //For spacing
|
||||
}
|
||||
|
||||
|
||||
//Do runtimes next
|
||||
*output << "** Runtimes **";
|
||||
vector<runtime> runtimes;
|
||||
runtimes.reserve(storedRuntime.size());
|
||||
for (unordered_map<string,runtime>::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++)
|
||||
runtimes.push_back(it->second);
|
||||
storedRuntime.clear();
|
||||
sort(runtimes.begin(), runtimes.end(), runtimeComp);
|
||||
for (int i=0; i < runtimes.size(); i++) {
|
||||
runtime* R = &runtimes[i];
|
||||
*output << endl << endl << "The following runtime has occurred " << R->count << " time(s).\n";
|
||||
*output << R->text << endl;
|
||||
if(R->proc.length())
|
||||
*output << R->proc << endl;
|
||||
if(R->source.length())
|
||||
*output << R->source << endl;
|
||||
if(R->usr.length())
|
||||
*output << R->usr << endl;
|
||||
if(R->src.length())
|
||||
*output << R->src << endl;
|
||||
if(R->loc.length())
|
||||
*output << R->loc << endl;
|
||||
}
|
||||
*output << endl << endl; //For spacing
|
||||
|
||||
//and finally, hard deletes
|
||||
if(totalHardDels > 0) {
|
||||
*output << endl << "** Hard deletions **";
|
||||
vector<harddel> hardDels;
|
||||
hardDels.reserve(storedHardDel.size());
|
||||
for (unordered_map<string,harddel>::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++)
|
||||
hardDels.push_back(it->second);
|
||||
storedHardDel.clear();
|
||||
sort(hardDels.begin(), hardDels.end(), hardDelComp);
|
||||
for(int i=0; i < hardDels.size(); i++) {
|
||||
harddel* D = &hardDels[i];
|
||||
*output << endl << D->type << " - " << D->count << " time(s).\n";
|
||||
}
|
||||
}
|
||||
if (!usestdio) {
|
||||
outputFile->close();
|
||||
delete outputFile;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
ios_base::sync_with_stdio(false);
|
||||
ios::sync_with_stdio(false);
|
||||
bool usestdio = false;
|
||||
if (argc >= 2 && !strcmp(argv[1], "-s"))
|
||||
usestdio = true;
|
||||
|
||||
char exit; //Used to stop the program from immediately exiting
|
||||
cerr << "Reading input.\n";
|
||||
if(readFromFile(usestdio)) {
|
||||
cerr << "Input read successfully!\n";
|
||||
} else {
|
||||
cerr << "Input failed to open, shutting down.\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
cerr << "Writing output.\n";
|
||||
if(writeToFile(usestdio)) {
|
||||
cerr << "Output was successful!\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
cerr << "The output file could not be opened, shutting down.\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
/* Runtime Condenser by Nodrak
|
||||
* Cleaned up and refactored by MrStonedOne
|
||||
* This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance
|
||||
* of the runtime will log the source, usr and src, the rest will just add to the total. Infinite loops will
|
||||
* also be caught and displayed (if any) above the list of runtimes.
|
||||
*
|
||||
* How to use:
|
||||
* 1) Copy and paste your list of runtimes from Dream Daemon into input.exe
|
||||
* 2) Run RuntimeCondenser.exe
|
||||
* 3) Open output.txt for a condensed report of the runtimes
|
||||
*
|
||||
* How to compile:
|
||||
* Requires visual c++ compiler 2012 or any linux compiler with c++11 support.
|
||||
* Windows:
|
||||
* Normal: cl.exe /EHsc /Ox /Qpar Main.cpp
|
||||
* Debug: cl.exe /EHsc /Zi Main.cpp
|
||||
* Linux:
|
||||
* Normal: g++ -O3 -std=c++11 Main.cpp -o rc
|
||||
* Debug: g++ -g -Og -std=c++11 Main.cpp -o rc
|
||||
* Any Compile errors most likely indicate lack of c++11 support. Google how to upgrade or nag coderbus for help..
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <ctime>
|
||||
|
||||
|
||||
#define PROGRESS_FPS 10
|
||||
#define PROGRESS_BAR_INNER_WIDTH 50
|
||||
#define LINEBUFFER (32*1024) //32KiB
|
||||
|
||||
using namespace std;
|
||||
|
||||
struct runtime {
|
||||
string text;
|
||||
string proc;
|
||||
string source;
|
||||
string usr;
|
||||
string src;
|
||||
string loc;
|
||||
unsigned int count;
|
||||
};
|
||||
struct harddel {
|
||||
string type;
|
||||
unsigned int count;
|
||||
};
|
||||
//What we use to read input
|
||||
string * lastLine = new string();
|
||||
string * currentLine = new string();
|
||||
string * nextLine = new string();
|
||||
|
||||
//Stores lines we want to keep to print out
|
||||
unordered_map<string,runtime> storedRuntime;
|
||||
unordered_map<string,runtime> storedInfiniteLoop;
|
||||
unordered_map<string,harddel> storedHardDel;
|
||||
|
||||
//Stat tracking stuff for output
|
||||
unsigned int totalRuntimes = 0;
|
||||
unsigned int totalInfiniteLoops = 0;
|
||||
unsigned int totalHardDels = 0;
|
||||
|
||||
|
||||
bool endofbuffer = false;
|
||||
//like substr, but returns an empty string if the string is smaller then start, rather then an exception.
|
||||
inline string safe_substr(string * S, size_t start = 0, size_t end = string::npos) {
|
||||
if (start > S->length())
|
||||
start = S->length();
|
||||
return S->substr(start, end);
|
||||
}
|
||||
//getline() is slow as fucking balls. this is quicker because we prefill a buffer rather then read 1 byte at a time searching for newlines, lowering on i/o calls and overhead. (110MB/s vs 40MB/s on a 1.8GB file pre-filled into the disk cache)
|
||||
//if i wanted to make it even faster, I'd use a reading thread, a new line searching thread, another thread or four for searching for runtimes in the list to see if they are unique, and finally the main thread for displaying the progress bar. but fuck that noise.
|
||||
inline string * readline(FILE * f) {
|
||||
static char buf[LINEBUFFER];
|
||||
static size_t pos = 0;
|
||||
static size_t size = 0;
|
||||
|
||||
for (size_t i = pos; i < LINEBUFFER; i++) {
|
||||
char c = buf[i];
|
||||
if (i >= size && (pos || i < LINEBUFFER-1)) {
|
||||
if (feof(f) || ferror(f))
|
||||
break;
|
||||
if (size && pos) { //move current stuff to start of buffer
|
||||
size -= pos;
|
||||
i -= pos;
|
||||
memmove(buf, &buf[pos], size);
|
||||
}
|
||||
//fill remaining buffer
|
||||
size += fread(&buf[i], 1, LINEBUFFER-size-1, f);
|
||||
pos = 0;
|
||||
c = buf[i];
|
||||
}
|
||||
if (c == '\n') {
|
||||
//trim off any newlines from the start
|
||||
while (i > pos && (buf[pos] == '\r' || buf[pos] == '\n'))
|
||||
pos++;
|
||||
string * s = new string(&buf[pos], i-pos);
|
||||
pos = i+1;
|
||||
return s;
|
||||
}
|
||||
|
||||
}
|
||||
string * s = new string(&buf[pos], size-pos);
|
||||
pos = 0;
|
||||
size = 0;
|
||||
endofbuffer = true;
|
||||
return s;
|
||||
}
|
||||
|
||||
inline void forward_progress(FILE * inputFile) {
|
||||
delete(lastLine);
|
||||
lastLine = currentLine;
|
||||
currentLine = nextLine;
|
||||
nextLine = readline(inputFile);
|
||||
//strip out any timestamps.
|
||||
if (nextLine->length() >= 10) {
|
||||
if ((*nextLine)[0] == '[' && (*nextLine)[3] == ':' && (*nextLine)[6] == ':' && (*nextLine)[9] == ']')
|
||||
nextLine->erase(0, 10);
|
||||
else if (nextLine->length() >= 26 && ((*nextLine)[0] == '[' && (*nextLine)[5] == '-' && (*nextLine)[14] == ':' && (*nextLine)[20] == '.' && (*nextLine)[24] == ']'))
|
||||
nextLine->erase(0, 26);
|
||||
}
|
||||
}
|
||||
//deallocates to, copys from to to.
|
||||
inline void string_send(string * &from, string * &to) {
|
||||
delete(to);
|
||||
to = new string(*from);
|
||||
}
|
||||
inline void printprogressbar(unsigned short progress /*as percent*/) {
|
||||
double const modifer = 100.0L/(double)PROGRESS_BAR_INNER_WIDTH;
|
||||
size_t bars = (double)progress/modifer;
|
||||
cerr << "\r[" << string(bars, '=') << ((progress < 100) ? ">" : "") << string(PROGRESS_BAR_INNER_WIDTH-(bars+((progress < 100) ? 1 : 0)), ' ') << "] " << progress << "%";
|
||||
cerr.flush();
|
||||
}
|
||||
|
||||
bool readFromFile(bool isstdin) {
|
||||
//Open file to read
|
||||
FILE * inputFile = stdin;
|
||||
if (!isstdin)
|
||||
inputFile = fopen("Input.txt", "r");
|
||||
|
||||
if (ferror(inputFile))
|
||||
return false;
|
||||
long long fileLength = 0;
|
||||
clock_t nextupdate = 0;
|
||||
if (!isstdin) {
|
||||
fseek(inputFile, 0, SEEK_END);
|
||||
fileLength = ftell(inputFile);
|
||||
fseek(inputFile, 0, SEEK_SET);
|
||||
nextupdate = clock();
|
||||
}
|
||||
|
||||
if (feof(inputFile))
|
||||
return false; //empty file
|
||||
do {
|
||||
//Update our lines
|
||||
forward_progress(inputFile);
|
||||
//progress bar
|
||||
|
||||
if (!isstdin && clock() >= nextupdate) {
|
||||
int dProgress = (int)(((long double)ftell(inputFile) / (long double)fileLength) * 100.0L);
|
||||
printprogressbar(dProgress);
|
||||
nextupdate = clock() + (CLOCKS_PER_SEC/PROGRESS_FPS);
|
||||
}
|
||||
//Found a runtime!
|
||||
if (safe_substr(currentLine, 0, 14) == "runtime error:") {
|
||||
if (currentLine->length() <= 17) { //empty runtime, check next line.
|
||||
//runtime is on the line before this one. (byond bug)
|
||||
if (nextLine->length() < 2) {
|
||||
string_send(lastLine, nextLine);
|
||||
}
|
||||
forward_progress(inputFile);
|
||||
string * tmp = new string("runtime error: " + *currentLine);
|
||||
string_send(tmp, currentLine);
|
||||
delete(tmp);
|
||||
}
|
||||
//we assign this to the right container in a moment.
|
||||
unordered_map<string,runtime> * storage_container;
|
||||
|
||||
//runtime is actually an infinite loop
|
||||
if (safe_substr(currentLine, 15, 23) == "Infinite loop suspected" || safe_substr(currentLine, 15, 31) == "Maximum recursion level reached") {
|
||||
//use our infinite loop container.
|
||||
storage_container = &storedInfiniteLoop;
|
||||
totalInfiniteLoops++;
|
||||
// skip the line about world.loop_checks
|
||||
forward_progress(inputFile);
|
||||
string_send(lastLine, currentLine);
|
||||
} else {
|
||||
//use the runtime container
|
||||
storage_container = &storedRuntime;
|
||||
totalRuntimes++;
|
||||
}
|
||||
|
||||
string key = *currentLine;
|
||||
bool procfound = false; //so other things don't have to bother checking for this again.
|
||||
if (safe_substr(nextLine, 0, 10) == "proc name:") {
|
||||
key += *nextLine;
|
||||
procfound = true;
|
||||
}
|
||||
|
||||
//(get the address of a runtime from (a pointer to a container of runtimes)) to then store in a pointer to a runtime.
|
||||
//(and who said pointers were hard.)
|
||||
runtime* R = &((*storage_container)[key]);
|
||||
|
||||
//new
|
||||
if (R->text != *currentLine) {
|
||||
R->text = *currentLine;
|
||||
if (procfound) {
|
||||
R->proc = *nextLine;
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
R->count = 1;
|
||||
|
||||
//search for source file info
|
||||
if (safe_substr(nextLine, 2, 12) == "source file:") {
|
||||
R->source = *nextLine;
|
||||
//skip again
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
//If we find this, we have new stuff to store
|
||||
if (safe_substr(nextLine, 2, 4) == "usr:") {
|
||||
forward_progress(inputFile);
|
||||
forward_progress(inputFile);
|
||||
//Store more info
|
||||
R->usr = *lastLine;
|
||||
R->src = *currentLine;
|
||||
if (safe_substr(nextLine, 2, 8) == "src.loc:") {
|
||||
R->loc = *nextLine;
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
}
|
||||
|
||||
} else { //existed already
|
||||
R->count++;
|
||||
if (procfound)
|
||||
forward_progress(inputFile);
|
||||
}
|
||||
|
||||
} else if (safe_substr(currentLine, 0, 7) == "Path : ") {
|
||||
string deltype = safe_substr(currentLine, 7);
|
||||
if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space.
|
||||
deltype = deltype.substr(0, deltype.size()-1);
|
||||
|
||||
unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10);
|
||||
if (failures <= 0)
|
||||
continue;
|
||||
|
||||
totalHardDels += failures;
|
||||
harddel* D = &storedHardDel[deltype];
|
||||
if (D->type != deltype) {
|
||||
D->type = deltype;
|
||||
D->count = failures;
|
||||
} else {
|
||||
D->count += failures;
|
||||
}
|
||||
}
|
||||
} while (!feof(inputFile) || !endofbuffer); //Until end of file
|
||||
if (!isstdin)
|
||||
printprogressbar(100);
|
||||
cerr << endl;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool runtimeComp(const runtime &a, const runtime &b) {
|
||||
return a.count > b.count;
|
||||
}
|
||||
|
||||
bool hardDelComp(const harddel &a, const harddel &b) {
|
||||
return a.count > b.count;
|
||||
}
|
||||
|
||||
bool writeToFile(bool usestdio) {
|
||||
//Open and clear the file
|
||||
ostream * output = &cout;
|
||||
ofstream * outputFile;
|
||||
if (!usestdio)
|
||||
output = outputFile = new ofstream("Output.txt", ios::trunc);
|
||||
|
||||
|
||||
if(usestdio || outputFile->is_open()) {
|
||||
*output << "Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n";
|
||||
if(storedInfiniteLoop.size() > 0)
|
||||
*output << "Total unique infinite loops: " << storedInfiniteLoop.size() << endl;
|
||||
|
||||
if(totalInfiniteLoops > 0)
|
||||
*output << "Total infinite loops: " << totalInfiniteLoops << endl << endl;
|
||||
|
||||
*output << "Total unique runtimes: " << storedRuntime.size() << endl;
|
||||
*output << "Total runtimes: " << totalRuntimes << endl << endl;
|
||||
if(storedHardDel.size() > 0)
|
||||
*output << "Total unique hard deletions: " << storedHardDel.size() << endl;
|
||||
|
||||
if(totalHardDels > 0)
|
||||
*output << "Total hard deletions: " << totalHardDels << endl << endl;
|
||||
|
||||
|
||||
//If we have infinite loops, display them first.
|
||||
if(storedInfiniteLoop.size() > 0) {
|
||||
vector<runtime> infiniteLoops;
|
||||
infiniteLoops.reserve(storedInfiniteLoop.size());
|
||||
for (unordered_map<string,runtime>::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++)
|
||||
infiniteLoops.push_back(it->second);
|
||||
storedInfiniteLoop.clear();
|
||||
sort(infiniteLoops.begin(), infiniteLoops.end(), runtimeComp);
|
||||
*output << "** Infinite loops **";
|
||||
for (int i=0; i < infiniteLoops.size(); i++) {
|
||||
runtime* R = &infiniteLoops[i];
|
||||
*output << endl << endl << "The following infinite loop has occurred " << R->count << " time(s).\n";
|
||||
*output << R->text << endl;
|
||||
if(R->proc.length())
|
||||
*output << R->proc << endl;
|
||||
if(R->source.length())
|
||||
*output << R->source << endl;
|
||||
if(R->usr.length())
|
||||
*output << R->usr << endl;
|
||||
if(R->src.length())
|
||||
*output << R->src << endl;
|
||||
if(R->loc.length())
|
||||
*output << R->loc << endl;
|
||||
}
|
||||
*output << endl << endl; //For spacing
|
||||
}
|
||||
|
||||
|
||||
//Do runtimes next
|
||||
*output << "** Runtimes **";
|
||||
vector<runtime> runtimes;
|
||||
runtimes.reserve(storedRuntime.size());
|
||||
for (unordered_map<string,runtime>::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++)
|
||||
runtimes.push_back(it->second);
|
||||
storedRuntime.clear();
|
||||
sort(runtimes.begin(), runtimes.end(), runtimeComp);
|
||||
for (int i=0; i < runtimes.size(); i++) {
|
||||
runtime* R = &runtimes[i];
|
||||
*output << endl << endl << "The following runtime has occurred " << R->count << " time(s).\n";
|
||||
*output << R->text << endl;
|
||||
if(R->proc.length())
|
||||
*output << R->proc << endl;
|
||||
if(R->source.length())
|
||||
*output << R->source << endl;
|
||||
if(R->usr.length())
|
||||
*output << R->usr << endl;
|
||||
if(R->src.length())
|
||||
*output << R->src << endl;
|
||||
if(R->loc.length())
|
||||
*output << R->loc << endl;
|
||||
}
|
||||
*output << endl << endl; //For spacing
|
||||
|
||||
//and finally, hard deletes
|
||||
if(totalHardDels > 0) {
|
||||
*output << endl << "** Hard deletions **";
|
||||
vector<harddel> hardDels;
|
||||
hardDels.reserve(storedHardDel.size());
|
||||
for (unordered_map<string,harddel>::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++)
|
||||
hardDels.push_back(it->second);
|
||||
storedHardDel.clear();
|
||||
sort(hardDels.begin(), hardDels.end(), hardDelComp);
|
||||
for(int i=0; i < hardDels.size(); i++) {
|
||||
harddel* D = &hardDels[i];
|
||||
*output << endl << D->type << " - " << D->count << " time(s).\n";
|
||||
}
|
||||
}
|
||||
if (!usestdio) {
|
||||
outputFile->close();
|
||||
delete outputFile;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
ios_base::sync_with_stdio(false);
|
||||
ios::sync_with_stdio(false);
|
||||
bool usestdio = false;
|
||||
if (argc >= 2 && !strcmp(argv[1], "-s"))
|
||||
usestdio = true;
|
||||
|
||||
char exit; //Used to stop the program from immediately exiting
|
||||
cerr << "Reading input.\n";
|
||||
if(readFromFile(usestdio)) {
|
||||
cerr << "Input read successfully!\n";
|
||||
} else {
|
||||
cerr << "Input failed to open, shutting down.\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
cerr << "Writing output.\n";
|
||||
if(writeToFile(usestdio)) {
|
||||
cerr << "Output was successful!\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
cerr << "The output file could not be opened, shutting down.\n";
|
||||
if (!usestdio) {
|
||||
cerr << "\nEnter any letter to quit.\n";
|
||||
exit = cin.get();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
the compiled exe file for the Unstandardness text for DM program is in:
|
||||
UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe
|
||||
|
||||
You have to move it to the root folder (where the dme file is) and run it from there for it to work.
|
||||
the compiled exe file for the Unstandardness text for DM program is in:
|
||||
UnstandardnessTestForDM\bin\Debug\UnstandardnessTestForDM.exe
|
||||
|
||||
You have to move it to the root folder (where the dme file is) and run it from there for it to work.
|
||||
|
||||
@@ -1,133 +1,133 @@
|
||||
<?php
|
||||
//This file contains things that should not be touched by the automatic live tracker
|
||||
|
||||
//Github lets you have it sign the message with a secret that you can validate. This prevents people from faking events.
|
||||
//This var should match the secret you configured for this webhook on github.
|
||||
//This is required as otherwise somebody could trick the script into leaking the api key.
|
||||
$hookSecret = '08ajh0qj93209qj90jfq932j32r';
|
||||
|
||||
//Api key for pushing changelogs.
|
||||
//This requires the public_repo (or repo for private repositories) and read:org permissions
|
||||
$apiKey = '209ab8d879c0f987d06a09b9d879c0f987d06a09b9d8787d0a089c';
|
||||
|
||||
//Used to prevent potential RCEs
|
||||
$repoOwnerAndName = "tgstation/tgstation";
|
||||
|
||||
//Auto update settings
|
||||
$enable_live_tracking = true; //auto update this file from the repository
|
||||
$path_to_script = 'tools/WebhookProcessor/github_webhook_processor.php';
|
||||
$tracked_branch = "master";
|
||||
|
||||
//PR balance settings.
|
||||
$trackPRBalance = true; //set this to false to disable PR balance tracking
|
||||
$prBalanceJson = ''; //Set this to the path you'd like the writable pr balance file to be stored, not setting it writes it to the working directory
|
||||
$startingPRBalance = 5; //Starting balance for never before seen users
|
||||
//team 133041: tgstation/commit-access
|
||||
$maintainer_team_id = 133041; //org team id that is exempt from PR balance system, setting this to null will use anyone with write access to the repo. Get from https://api.github.com/orgs/:org/teams
|
||||
|
||||
|
||||
//anti-spam measures. Don't announce PRs in game to people unless they've gotten a pr merged before
|
||||
//options are:
|
||||
// "repo" - user has to have a pr merged in the repo before.
|
||||
// "org" - user has to have a pr merged in any repo in the organization (for repos owned directly by users, this applies to any repo directly owned by the same user.)
|
||||
// "disable" - disables.
|
||||
//defaults to org if left blank or given invalid values.
|
||||
//This can also be ignored on a per webhook or per game server bases.
|
||||
$validation = "org";
|
||||
|
||||
//how many merged prs must they have under the rules above to have their pr announced to the game servers.
|
||||
$validation_count = 1;
|
||||
|
||||
//enforce changelogs on PRs
|
||||
$require_changelogs = false;
|
||||
|
||||
/*
|
||||
* Announcement Settings.
|
||||
* Allows you to announce prs to discord webhooks or the game servers
|
||||
*/
|
||||
|
||||
/* Common configs:
|
||||
The following config items can be added to both game server and discord announcement endpoints. Simply replace the $servers part with $discordWebHooks:
|
||||
|
||||
include_repos - List of repos in owner/repo format to send to this endpoint. (defaults to all repos if not defined)
|
||||
* can be given in place of repo to match all repos under an organization
|
||||
$servers[$configitem]['include_repos'][] = "tgstation/*";
|
||||
|
||||
exclude_repos - List of repos in owner/repo format to not send to this endpoint.
|
||||
* can be given in place of repo to match all repos under an organization
|
||||
$servers[$configitem]['exclude_repos'][] = 'tgstation/TerraGov-Marine-Corps';
|
||||
$servers[$configitem]['exclude_repos'][] = 'tgstation/tgstation13.org';
|
||||
|
||||
exclude_events - List of events to not announce, values: opened, closed, reopened, or merged
|
||||
$servers[$configitem]['exclude_events'][] = 'closed';
|
||||
$servers[$configitem]['exclude_events'][] = 'reopened';
|
||||
|
||||
announce_secret - Announce secret/security prs that have a [s] in front of the title? Defaults to no.
|
||||
Can also be set to 'only' to only announce secret prs.
|
||||
$servers[$configitem]['announce_secret'] = false;
|
||||
$servers[$configitem]['announce_secret'] = 'only';
|
||||
|
||||
announce_unvalidated - Announce prs by unvalidated users (see the validation setting above)? Defaults to no.
|
||||
Can also be set to 'only' to only announce prs by unvalidated users.
|
||||
$servers[$configitem]['announce_unvalidated'] = false;
|
||||
|
||||
//Note: the same webhook or game server can be given in mutiple announce endpoints with different settings, allowing you to say, have embeds only show on prs to certain repos by excluding the repo in a endpoint with embed = false, and including the repo in a endpoint with embed = true true. This could also be used to only block closed and reopened events on prs by unvalidated users.
|
||||
|
||||
|
||||
|
||||
//Game servers to announce PRs to.
|
||||
/*
|
||||
$configitem = -1;//ignore me
|
||||
|
||||
//Game Server Start
|
||||
$servers[++$configitem] = array();
|
||||
$servers[$configitem]['address'] = 'game.tgstation13.org';
|
||||
$servers[$configitem]['port'] = '1337';
|
||||
$servers[$configitem]['comskey'] = '89aj90cq2fm0amc90832mn9rm90';
|
||||
//Game Server End
|
||||
|
||||
//Game Server Start
|
||||
$servers[++$configitem] = array();
|
||||
$servers[$configitem]['address'] = 'game.tgstation13.org';
|
||||
$servers[$configitem]['port'] = '2337';
|
||||
$servers[$configitem]['comskey'] = '89aj90cq2fm0amc90832mn9rm90';
|
||||
//Game Server End
|
||||
|
||||
unset($configitem);//ignore
|
||||
*/
|
||||
|
||||
//discord webhooks to announce PRs to.
|
||||
/*
|
||||
$configitem = -1;//ignore me
|
||||
|
||||
//Discord Webhook Start
|
||||
$discordWebHooks[++$configitem] = array();
|
||||
|
||||
// Webhook Url (you can get this from discord via the webhook setting menu of the server or a channel.)
|
||||
$discordWebHooks[$configitem]['url'] = 'https://discordapp.com/api/webhooks/538933489920245771/xaoYtVuype-P1rb_uthQLkh_C4iVL3sjtIvFEp7rsfhbBs8tDsSJgE0a9MNWJaoSPBPK';
|
||||
|
||||
// show an embed with more info?
|
||||
$discordWebHooks[$configitem]['embed'] = true;
|
||||
|
||||
// if the above is true, don't include the text portion before the embed.
|
||||
// (This option is not advised as it's not compatible with users who disable embeds).
|
||||
$discordWebHooks[$configitem]['no_text'] = false;
|
||||
//Discord Webhook End
|
||||
|
||||
//Discord Webhook Start
|
||||
$discordWebHooks[++$configitem] = array();
|
||||
|
||||
// Webhook Url (you can get this from discord via the webhook setting menu of the server or a channel.)
|
||||
$discordWebHooks[$configitem]['url'] = 'https://discordapp.com/api/webhooks/538933686956064769/q0uDel7S6eutvRIyEwsuZo_ppzAoxqUNeU2PRChYVsYoJmmn2f2YYSDoMjy9FhhXKqpI';
|
||||
|
||||
// show an embed with more info?
|
||||
$discordWebHooks[$configitem]['embed'] = true;
|
||||
|
||||
// if the above is true, don't include the text portion before the embed.
|
||||
// (This option is not advised as it's not compatible with users who disable embeds).
|
||||
$discordWebHooks[$configitem]['no_text'] = false;
|
||||
//Discord Webhook End
|
||||
*/
|
||||
|
||||
unset($configitem); //ignore
|
||||
|
||||
<?php
|
||||
//This file contains things that should not be touched by the automatic live tracker
|
||||
|
||||
//Github lets you have it sign the message with a secret that you can validate. This prevents people from faking events.
|
||||
//This var should match the secret you configured for this webhook on github.
|
||||
//This is required as otherwise somebody could trick the script into leaking the api key.
|
||||
$hookSecret = '08ajh0qj93209qj90jfq932j32r';
|
||||
|
||||
//Api key for pushing changelogs.
|
||||
//This requires the public_repo (or repo for private repositories) and read:org permissions
|
||||
$apiKey = '209ab8d879c0f987d06a09b9d879c0f987d06a09b9d8787d0a089c';
|
||||
|
||||
//Used to prevent potential RCEs
|
||||
$repoOwnerAndName = "tgstation/tgstation";
|
||||
|
||||
//Auto update settings
|
||||
$enable_live_tracking = true; //auto update this file from the repository
|
||||
$path_to_script = 'tools/WebhookProcessor/github_webhook_processor.php';
|
||||
$tracked_branch = "master";
|
||||
|
||||
//PR balance settings.
|
||||
$trackPRBalance = true; //set this to false to disable PR balance tracking
|
||||
$prBalanceJson = ''; //Set this to the path you'd like the writable pr balance file to be stored, not setting it writes it to the working directory
|
||||
$startingPRBalance = 5; //Starting balance for never before seen users
|
||||
//team 133041: tgstation/commit-access
|
||||
$maintainer_team_id = 133041; //org team id that is exempt from PR balance system, setting this to null will use anyone with write access to the repo. Get from https://api.github.com/orgs/:org/teams
|
||||
|
||||
|
||||
//anti-spam measures. Don't announce PRs in game to people unless they've gotten a pr merged before
|
||||
//options are:
|
||||
// "repo" - user has to have a pr merged in the repo before.
|
||||
// "org" - user has to have a pr merged in any repo in the organization (for repos owned directly by users, this applies to any repo directly owned by the same user.)
|
||||
// "disable" - disables.
|
||||
//defaults to org if left blank or given invalid values.
|
||||
//This can also be ignored on a per webhook or per game server bases.
|
||||
$validation = "org";
|
||||
|
||||
//how many merged prs must they have under the rules above to have their pr announced to the game servers.
|
||||
$validation_count = 1;
|
||||
|
||||
//enforce changelogs on PRs
|
||||
$require_changelogs = false;
|
||||
|
||||
/*
|
||||
* Announcement Settings.
|
||||
* Allows you to announce prs to discord webhooks or the game servers
|
||||
*/
|
||||
|
||||
/* Common configs:
|
||||
The following config items can be added to both game server and discord announcement endpoints. Simply replace the $servers part with $discordWebHooks:
|
||||
|
||||
include_repos - List of repos in owner/repo format to send to this endpoint. (defaults to all repos if not defined)
|
||||
* can be given in place of repo to match all repos under an organization
|
||||
$servers[$configitem]['include_repos'][] = "tgstation/*";
|
||||
|
||||
exclude_repos - List of repos in owner/repo format to not send to this endpoint.
|
||||
* can be given in place of repo to match all repos under an organization
|
||||
$servers[$configitem]['exclude_repos'][] = 'tgstation/TerraGov-Marine-Corps';
|
||||
$servers[$configitem]['exclude_repos'][] = 'tgstation/tgstation13.org';
|
||||
|
||||
exclude_events - List of events to not announce, values: opened, closed, reopened, or merged
|
||||
$servers[$configitem]['exclude_events'][] = 'closed';
|
||||
$servers[$configitem]['exclude_events'][] = 'reopened';
|
||||
|
||||
announce_secret - Announce secret/security prs that have a [s] in front of the title? Defaults to no.
|
||||
Can also be set to 'only' to only announce secret prs.
|
||||
$servers[$configitem]['announce_secret'] = false;
|
||||
$servers[$configitem]['announce_secret'] = 'only';
|
||||
|
||||
announce_unvalidated - Announce prs by unvalidated users (see the validation setting above)? Defaults to no.
|
||||
Can also be set to 'only' to only announce prs by unvalidated users.
|
||||
$servers[$configitem]['announce_unvalidated'] = false;
|
||||
|
||||
//Note: the same webhook or game server can be given in mutiple announce endpoints with different settings, allowing you to say, have embeds only show on prs to certain repos by excluding the repo in a endpoint with embed = false, and including the repo in a endpoint with embed = true true. This could also be used to only block closed and reopened events on prs by unvalidated users.
|
||||
|
||||
|
||||
|
||||
//Game servers to announce PRs to.
|
||||
/*
|
||||
$configitem = -1;//ignore me
|
||||
|
||||
//Game Server Start
|
||||
$servers[++$configitem] = array();
|
||||
$servers[$configitem]['address'] = 'game.tgstation13.org';
|
||||
$servers[$configitem]['port'] = '1337';
|
||||
$servers[$configitem]['comskey'] = '89aj90cq2fm0amc90832mn9rm90';
|
||||
//Game Server End
|
||||
|
||||
//Game Server Start
|
||||
$servers[++$configitem] = array();
|
||||
$servers[$configitem]['address'] = 'game.tgstation13.org';
|
||||
$servers[$configitem]['port'] = '2337';
|
||||
$servers[$configitem]['comskey'] = '89aj90cq2fm0amc90832mn9rm90';
|
||||
//Game Server End
|
||||
|
||||
unset($configitem);//ignore
|
||||
*/
|
||||
|
||||
//discord webhooks to announce PRs to.
|
||||
/*
|
||||
$configitem = -1;//ignore me
|
||||
|
||||
//Discord Webhook Start
|
||||
$discordWebHooks[++$configitem] = array();
|
||||
|
||||
// Webhook Url (you can get this from discord via the webhook setting menu of the server or a channel.)
|
||||
$discordWebHooks[$configitem]['url'] = 'https://discordapp.com/api/webhooks/538933489920245771/xaoYtVuype-P1rb_uthQLkh_C4iVL3sjtIvFEp7rsfhbBs8tDsSJgE0a9MNWJaoSPBPK';
|
||||
|
||||
// show an embed with more info?
|
||||
$discordWebHooks[$configitem]['embed'] = true;
|
||||
|
||||
// if the above is true, don't include the text portion before the embed.
|
||||
// (This option is not advised as it's not compatible with users who disable embeds).
|
||||
$discordWebHooks[$configitem]['no_text'] = false;
|
||||
//Discord Webhook End
|
||||
|
||||
//Discord Webhook Start
|
||||
$discordWebHooks[++$configitem] = array();
|
||||
|
||||
// Webhook Url (you can get this from discord via the webhook setting menu of the server or a channel.)
|
||||
$discordWebHooks[$configitem]['url'] = 'https://discordapp.com/api/webhooks/538933686956064769/q0uDel7S6eutvRIyEwsuZo_ppzAoxqUNeU2PRChYVsYoJmmn2f2YYSDoMjy9FhhXKqpI';
|
||||
|
||||
// show an embed with more info?
|
||||
$discordWebHooks[$configitem]['embed'] = true;
|
||||
|
||||
// if the above is true, don't include the text portion before the embed.
|
||||
// (This option is not advised as it's not compatible with users who disable embeds).
|
||||
$discordWebHooks[$configitem]['no_text'] = false;
|
||||
//Discord Webhook End
|
||||
*/
|
||||
|
||||
unset($configitem); //ignore
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
SQL_ENABLED
|
||||
ADDRESS 127.0.0.1
|
||||
PORT 3306
|
||||
FEEDBACK_DATABASE tg_travis
|
||||
FEEDBACK_TABLEPREFIX
|
||||
FEEDBACK_LOGIN root
|
||||
FEEDBACK_PASSWORD
|
||||
LAVALAND_BUDGET 0
|
||||
SPACE_BUDGET 0
|
||||
SQL_ENABLED
|
||||
ADDRESS 127.0.0.1
|
||||
PORT 3306
|
||||
FEEDBACK_DATABASE tg_travis
|
||||
FEEDBACK_TABLEPREFIX
|
||||
FEEDBACK_LOGIN root
|
||||
FEEDBACK_PASSWORD
|
||||
LAVALAND_BUDGET 0
|
||||
SPACE_BUDGET 0
|
||||
|
||||
Reference in New Issue
Block a user