PWE_PRC8/_module/nss/ff_buildtable.nss
Jaysyn904 ee1dc35889 Initial Commit
Initial Commit
2025-04-03 10:29:41 -04:00

262 lines
11 KiB
Plaintext

#include "ff_include"
void main()
{
SQLExecDirect("CREATE TABLE IF NOT EXISTS `global` ("+
"`VarName` varchar(64) NOT NULL default '',"+
"`Value` varchar(255) NOT NULL default '',"+
"PRIMARY KEY (`VarName`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `PCData` ("+
"`VarName` varchar(64) NOT NULL default '',"+
"`Id` smallint(5) unsigned NOT NULL,"+
"`Value` varchar(255) NOT NULL default '',"+
"PRIMARY KEY (`VarName`, `Id`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `areatransition` ("+
"`sTag` varchar(100) NOT NULL default '',"+
"`sName` varchar(100) NOT NULL default '',"+
"`iCount` int(11) NOT NULL default '0',"+
"PRIMARY KEY (`sTag`)"+
") TYPE=MyISAM;");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cdkeys` ("+
"`Player` char(64) NOT NULL default '',"+
"`Date` timestamp(14) NOT NULL,"+
"`Ban` tinyint(1) NOT NULL default '0',"+
"`CDKey` char(20) NOT NULL default '',"+
"PRIMARY KEY (`Player`,`CDKey`)"+
") TYPE=MyISAM");
if (FF_USING_CNR)
{
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cmd_misc` (" +
// "`player` VARCHAR(64) default NULL," +
// "`tag` VARCHAR(64) default NULL," +
"`VarName` VARCHAR(64) default NULL," +
"`Value` VARCHAR(64) default NULL," +
// "`expire` SMALLINT UNSIGNED default NULL," +
"`last` TIMESTAMP(14) NOT NULL," +
"PRIMARY KEY (`VarName`)" +
") TYPE=MyISAM" );
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cpv_misc` (" +
// "`player` VARCHAR(64) default NULL," +
// "`tag` VARCHAR(64) default NULL," +
"`VarName` VARCHAR(64) default NULL," +
"`Value` VARCHAR(64) default NULL," +
// "`expire` SMALLINT UNSIGNED default NULL," +
"`last` TIMESTAMP(14) NOT NULL," +
"PRIMARY KEY (`VarName`)" +
") TYPE=MyISAM" );
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cnr_components` ("+
"`sKeyToComponent` varchar(64) NOT NULL default '',"+
"`sTag` varchar(16) NOT NULL default '',"+
"`nQty` int(11) default '1',"+
"`nRetainQty` int(11) default '0',"+
"`sKeyToRecipe` varchar(64) NOT NULL default '',"+
"`sDeviceTag` varchar(16) NOT NULL default '',"+
"PRIMARY KEY (`sKeyToComponent`),"+
"KEY `sDeviceTag` (`sDeviceTag`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cnr_devices` ("+
"`sDeviceTag` varchar(16) NOT NULL default '',"+
"`sAnimation` varchar(16) default NULL,"+
"`bSpawnInDevice` int(11) default '0',"+
"`sInvTool` varchar(16) default NULL,"+
"`sEqpTool` varchar(16) default NULL,"+
"`nTradeType` int(11) default '0',"+
"`fInvToolBP` float default '0',"+
"`fEqpToolBP` float default '0',"+
"PRIMARY KEY (`sDeviceTag`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cnr_recipes` ("+
"`sKeyToRecipe` varchar(64) NOT NULL default '',"+
"`sDeviceTag` varchar(16) NOT NULL default '',"+
"`sDescription` varchar(64) NOT NULL default '',"+
"`sTag` varchar(16) NOT NULL default '',"+
"`nQty` int(11) default '1',"+
"`sKeyToParent` varchar(64) NOT NULL default '',"+
"`sFilter` varchar(32) default NULL,"+
"`nStr` int(11) default '0',"+
"`nDex` int(11) default '0',"+
"`nCon` int(11) default '0',"+
"`nInt` int(11) default '0',"+
"`nWis` int(11) default '0',"+
"`nCha` int(11) default '0',"+
"`nLevel` int(11) default '1',"+
"`nGameXP` int(11) default '0',"+
"`nTradeXP` int(11) default '0',"+
"`bScalarOverride` int(11) default '0',"+
"`sAnimation` varchar(16) default NULL,"+
"`sBiTag` varchar(16) default NULL,"+
"`nBiQty` int(11) default '0',"+
"`nOnFailBiQty` int(11) default '0',"+
"PRIMARY KEY (`sKeyToRecipe`),"+
"KEY `sDeviceTag` (`sDeviceTag`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `cnr_submenus` ("+
"`sKeyToMenu` varchar(64) NOT NULL default '',"+
"`sKeyToParent` varchar(64) NOT NULL default '',"+
"`sTitle` varchar(64) NOT NULL default '',"+
"`sDeviceTag` varchar(16) NOT NULL default '',"+
"PRIMARY KEY (`sKeyToMenu`),"+
"KEY `sDeviceTag` (`sDeviceTag`)"+
") TYPE=MyISAM");
SQLExecDirect("REPAIR TABLE cnr_components, cnr_devices, cnr_recipes, cnr_submenus, cmd_misc, cpv_misc");
SQLExecDirect("OPTIMIZE TABLE cnr_components, cnr_devices, cnr_recipes, cnr_submenus, cmd_misc, cpv_misc");
}
SQLExecDirect("CREATE TABLE IF NOT EXISTS `pwdata` ("+ // APS compatibility table
"`player` varchar(64) NOT NULL default '',"+
"`tag` varchar(64) NOT NULL default '',"+
"`name` varchar(64) NOT NULL default '',"+
"`val` varchar(64),"+
"`expire` smallint(5) unsigned default NULL,"+
"`last` timestamp(14) NOT NULL,"+
"PRIMARY KEY (`player`,`tag`,`name`)"+
") TYPE=MyISAM");
SQLExecDirect("ALTER TABLE `pwdata` DROP INDEX `idx`");
SQLExecDirect("ALTER TABLE `pwdata` ADD UNIQUE `idx` ( `player` , `tag` , `name` )");
SQLExecDirect("DROP TABLE IF EXISTS `deleted`");
SQLExecDirect("CREATE TEMPORARY TABLE IF NOT EXISTS `deleted` ("+
"`Id` smallint(5) unsigned NOT NULL default '0',"+
"PRIMARY KEY (`Id`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `idplayer` ("+
"`Player` char(64) NOT NULL default '',"+
"`Name` char(64) NOT NULL default '',"+
"`Creation` date NOT NULL default '0000-00-00',"+
"`Version` tinyint(4) NOT NULL default '1',"+
"`DM` tinyint(1) NOT NULL default '0',"+
"`Actif` tinyint(1) NOT NULL default '0',"+
"`DernierPassage` timestamp(14) NOT NULL,"+
"`Ban` tinyint(1) NOT NULL default '0',"+
"`Id` smallint(5) unsigned NOT NULL auto_increment,"+
"PRIMARY KEY (`Player`,`Name`),"+
"UNIQUE KEY `IdKey` (`Id`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `items` ("+
"`ResRef` char(16) NOT NULL default '',"+
"`Name` char(64) NOT NULL default '',"+
"`Tag` char(32) NOT NULL default '',"+
"`Plot` tinyint(1) NOT NULL default '0',"+
"`Stolen` tinyint(1) NOT NULL default '0',"+
"`StackSize` tinyint(3) unsigned NOT NULL default '0',"+
"`Cost` mediumint(9) NOT NULL default '0',"+
"`BaseItem` smallint(6) NOT NULL default '0',"+
"`Id` smallint(5) unsigned NOT NULL auto_increment,"+
"`Checked` tinyint(1) NOT NULL default '0',"+
"`AddCost` mediumint(9) NOT NULL default '0',"+
"PRIMARY KEY (`Cost`,`Checked`,`ResRef`),"+
"UNIQUE KEY `Id` (`Id`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `log` ("+
"`Id` smallint(5) unsigned NOT NULL default '0',"+
"`Date` timestamp(14) NOT NULL,"+
"`Categorie` varchar(40) default '(NULL)',"+
"`SubCategorie` varchar(40) default '(NULL)',"+
"`Texte` varchar(255) default '(NULL)'"+
") TYPE=MyISAM");
if (FF_USING_LOG_ACTIONS)
{
SQLExecDirect("CREATE TABLE IF NOT EXISTS `logactions` ("+
"`Id` smallint(6) NOT NULL default '0',"+
"`Action` enum('DESTROY','MESSAGE','DIALOG','DIALOG_BOOT','RUN','SQL','ANIM1','ANIM2','DM','ADMIN','CADEAU','OR','CREATE','MONSTER','ITEM') NOT NULL default 'DESTROY',"+
"`OnlyOnce` tinyint(1) NOT NULL default '1',"+
"`Date` datetime NOT NULL default '0000-00-00 00:00:00',"+
"`DelayFromLoad` double(7,2) NOT NULL default '12.00',"+
"`Value1` varchar(255) NOT NULL default '',"+
"`Value2` varchar(255) NOT NULL default '',"+
"PRIMARY KEY (`Id`)"+
") TYPE=MyISAM COMMENT='Id: Id player (0=OnModuleLoad, -1=AllPlayers)'");
SQLExecDirect("REPAIR TABLE logactions");
SQLExecDirect("OPTIMIZE TABLE logactions");
}
SQLExecDirect("CREATE TABLE IF NOT EXISTS `login` ("+
"`Id` smallint(5) unsigned NOT NULL default '0',"+
"`Event` enum('PC_IN','PC_OUT','DM_IN','DM_OUT','CONVERT','DEAD_IN','DEAD_OUT','STOP_SERVEUR','START_SERVEUR','START_MODULE','INVALIDE','EXPORT_CHARS') NOT NULL default 'INVALIDE',"+
"`Gold` int(11) default '-1',"+
"`xp` int(11) default '-1',"+
"`sKey` char(8) default '(NULL)',"+
"`IP` char(16) default '(NULL)',"+
"`Date` timestamp(14) NOT NULL,"+
"PRIMARY KEY (`Date`,`Event`,`Id`)"+
") TYPE=MyISAM");
SQLExecDirect("DROP TABLE IF EXISTS nwn_speech");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `PlayerData` ("+
"`Id` smallint(5) unsigned NOT NULL default '0',"+
"`Date` timestamp(14) NOT NULL,"+
"`Position` char(80) NOT NULL default '',"+
"`Time` int(11) NOT NULL default '0',"+
"`Damage` smallint(6) NOT NULL default '0',"+
"`Comments` char(80) default '',"+
"PRIMARY KEY (`Id`)"+
") TYPE=MyISAM");
SQLExecDirect("CREATE TABLE IF NOT EXISTS `restart` ("+
"`NbPlayerMax` tinyint(4) default '0',"+
"`NbPlayerAvg` tinyint(4) default '0',"+
"`NbPlayerLast` tinyint(4) NOT NULL default '0',"+
"`NbDMMax` tinyint(4) default '0',"+
"`NbDMAvg` tinyint(4) default '0',"+
"`NbDMLast` tinyint(4) NOT NULL default '0',"+
"`Date` timestamp(14) NOT NULL,"+
"`CPUAvg` int(11) default '0',"+
"`CPUMax` int(11) default '0',"+
"`CPULast` int(11) NOT NULL default '0',"+
"`MemoryMax` int(11) default '0',"+
"`MemoryMin` int(11) default '0',"+
"`MemoryLast` int(11) NOT NULL default '0',"+
"`sModName` char(60) NOT NULL default '',"+
"`CauseRestart` tinyint(4) NOT NULL default '0',"+
"PRIMARY KEY (`Date`)"+
") TYPE=MyISAM");
pwWriteLogCon(GetModule(), "START_MODULE");
SetLocalString(GetModule(), "PWId", "0");
SQLExecDirect("UPDATE idplayer SET Actif=0 WHERE Actif=1");
/*
* Database cleaning, repair and optimization
*/
if (FF_CLEAN_LOGIN_DAYS>0)
SQLExecDirect("DELETE FROM login WHERE Date<DATE_SUB(NOW(), INTERVAL "+IntToString(FF_CLEAN_LOGIN_DAYS)+" DAY)"); // Keep login data 4 days
if (FF_CLEAN_LOG_DAYS>0)
SQLExecDirect("DELETE FROM log WHERE Date<DATE_SUB(NOW(), INTERVAL "+IntToString(FF_CLEAN_LOG_DAYS)+" DAY)"); // Keep log data 15 days
if (FF_CLEAN_PC_DAYS>0)
SQLExecDirect("REPLACE deleted SELECT Id FROM PlayerData WHERE Date<DATE_SUB(NOW(),INTERVAL "+IntToString(FF_CLEAN_PC_DAYS)+" DAY)"); // Delete datas related to PC not played within last 2 months
if (FF_CLEAN_PC_NOT_PLAYED_DAYS>0)
SQLExecDirect("REPLACE deleted SELECT Id FROM PlayerData WHERE (PlayerData.Time<1000) AND (Date<DATE_SUB(NOW(),INTERVAL "+IntToString(FF_CLEAN_PC_NOT_PLAYED_DAYS)+" DAY))"); // Delete datas related to PC very little played within last 3 days
SQLExecDirect("DELETE PlayerData.* FROM PlayerData,deleted WHERE PlayerData.Id=deleted.Id");
SQLExecDirect("DELETE PCData.* FROM PCData,deleted WHERE PCData.Id=deleted.Id");
SQLExecDirect("UPDATE idplayer,deleted SET idplayer.Ban=1 WHERE idplayer.Ban=0 AND deleted.Id=idplayer.Id");
SQLExecDirect("REPAIR TABLE idplayer, login, log, pwdata, PlayerData, cdkeys, global, items, restart, areatransition, PCData");
SQLExecDirect("OPTIMIZE TABLE idplayer, login, log, pwdata, PlayerData, cdkeys, global, items, restart, areatransition, PCData");
}