[Ошибка][Решено] war3ft.amxx MYSQLX Error in querying database, location: 1

  • 1 Ответов
  • 307 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн sheckler

  • *****
  • 47
  • 1
    • Просмотр профиля
В последней версии Warcaft 3 Fronzen Throne v.3.0 RC13 для Counter-Strike 1.6 существует достаточно нашумевшая проблема несовместимости с наиболее новыми версиями MYSQL, если опция сохранения XP включена в war3ft.cfg.

При включении работы с MYSQL в данном случае вылезает ошибка:

[WAR3FT] MySQL X database connection successful
L 0*/1*/20** - 02:14:44: [war3ft.amxx] [MYSQLX] Error in querying database, location: 1
L 0*/1*/20** - 02:14:44: [MYSQLX] Error in querying database, location: 1
L 0*/1*/20** - 02:14:44: [war3ft.amxx] [MYSQLX] Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(14) NOT NULL, PRIMARY KEY  (`player_id`), KEY `player_name` (`player_name`), KE' at line 1 (1064)
L 0*/1*/20* - 02:14:44: [MYSQLX] Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(14) NOT NULL, PRIMARY KEY  (`player_id`), KEY `player_name` (`player_name`), KE' at line 1 (1064)
L 0*/1*/20** - 02:14:44: [war3ft.amxx] [MYSQLX] Query statement: CREATE TABLE IF NOT EXISTS `wc3_player` ( `player_id` int(8) unsigned NOT NULL auto_increment, `player_steamid` varchar(25) NOT NULL default '', `player_ip` varchar(20) NOT NULL default '', `player_name` varchar(35) NOT NULL default '', `time` timestamp(14) NOT NULL, PRIMARY KEY  (`player_id`), KEY `player_name` (`pL 02/13/2017 - 02:14:44: [MYSQLX] Query statement: CREATE TABLE IF NOT EXISTS `wc3_player` ( `player_id` int(8) unsigned NOT NULL auto_increment, `player_steamid` varchar(25) NOT NULL default '', `player_ip` varchar(20) NOT NULL default '', `player_name` varchar(35) NOT NULL default '', `time` timestamp(14) NOT NULL, PRIMARY KEY  (`player_id`), KEY `player_name` (`player_name`), L 0*/1*/201* - 02:14:48: World triggered "Round_Start"

А теперь если мы пройдемся по тому, что пишут нам в консоли, то увидим, что MYSQL ругается на синтаксис, а это говорит о неправильном SQL запросе. Как выяснилось, для того, чтобы исправить ошибку [war3ft.amxx] [MYSQLX] Error in querying database, location: 1 капать нужно в исходниках, а именно открываем файл /cstrike/addons/amxmodx/scipting/war3ft/db/db_mysqlx.inl и находим:

"CREATE TABLE IF NOT EXISTS `wc3_player` ( `player_id` int(8) unsigned NOT NULL auto_increment, `player_steamid` varchar(25) NOT NULL default '', `player_ip` varchar(20) NOT NULL default '', `player_name` varchar(35) NOT NULL default '', `time` timestamp(14) NOT NULL, PRIMARY KEY  (`player_id`), KEY `player_name` (`player_name`), KEY `player_ip` (`player_ip`), KEY `player_steamid` (`player_steamid`) ) TYPE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_player_extra` ( `player_id` INT( 8 ) UNSIGNED NOT NULL , `player_steamid` VARCHAR( 25 ) NOT NULL , `player_ip` VARCHAR( 20 ) NOT NULL , `player_name` VARCHAR( 35 ) NOT NULL , PRIMARY KEY ( `player_id` )) TYPE=MyISAM ;",
"CREATE TABLE IF NOT EXISTS `wc3_player_race` ( `player_id` int(8) unsigned NOT NULL default '0', `race_id` tinyint(4) unsigned NOT NULL default '0', `race_xp` int(8) default NULL, PRIMARY KEY  (`player_id`,`race_id`) ) TYPE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_player_skill` ( `player_id` int(8) unsigned NOT NULL default '0', `skill_id` tinyint(4) unsigned NOT NULL default '0', `skill_level` tinyint(4) unsigned NOT NULL default '0', PRIMARY KEY  (`player_id`,`skill_id`) ) TYPE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_web_race` ( `race_id` tinyint(4) unsigned NOT NULL default '0', `race_lang` char(2) NOT NULL default '', `race_name` varchar(100) default NULL, `race_description` text NOT NULL, PRIMARY KEY  (`race_id`,`race_lang`) ) TYPE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_web_skill` ( `skill_id` tinyint(4) unsigned NOT NULL default '0', `skill_lang` char(2) NOT NULL default '', `skill_name` varchar(100) default NULL, `skill_description` text NOT NULL, `skill_type` tinyint(4) unsigned NOT NULL default '0', `skill_owner` tinyint(4) unsigned NOT NULL default '0', PRIMARY KEY  (`skill_id`,`skill_lang`) ) TYPE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_config` ( `config_id` varchar(50) NOT NULL, `config_value` varchar(255) NOT NULL, PRIMARY KEY  (`config_id`) ) TYPE=MyISAM;"

Заменяем на этот код:

"CREATE TABLE IF NOT EXISTS `wc3_player` ( `player_id` int(8) unsigned NOT NULL auto_increment, `player_steamid` varchar(25) NOT NULL, `player_ip` varchar(20) NOT NULL, `player_name` varchar(35) NOT NULL, `time` timestamp NOT NULL, PRIMARY KEY  (`player_id`)) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_player_extra` ( `player_id` INT(8) UNSIGNED NOT NULL , `player_steamid` VARCHAR( 25 ) NOT NULL , `player_ip` VARCHAR( 20 ) NOT NULL , `player_name` VARCHAR( 35 ) NOT NULL , PRIMARY KEY ( `player_id` )) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_player_race` ( `player_id` int(8) unsigned NOT NULL default '0', `race_id` tinyint(4) unsigned NOT NULL default '0', `race_xp` int(8) default NULL, PRIMARY KEY  (`player_id`,`race_id`) ) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_player_skill` ( `player_id` int(8) unsigned NOT NULL default '0', `skill_id` tinyint(4) unsigned NOT NULL default '0', `skill_level` tinyint(4) unsigned NOT NULL default '0', PRIMARY KEY  (`player_id`,`skill_id`) ) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_web_race` ( `race_id` tinyint(4) unsigned NOT NULL default '0', `race_lang` char(2) NOT NULL default '', `race_name` varchar(100) default NULL, `race_description` text NOT NULL, PRIMARY KEY  (`race_id`,`race_lang`) ) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_web_skill` ( `skill_id` tinyint(4) unsigned NOT NULL default '0', `skill_lang` char(2) NOT NULL default '', `skill_name` varchar(100) default NULL, `skill_description` text NOT NULL, `skill_type` tinyint(4) unsigned NOT NULL default '0', `skill_owner` tinyint(4) unsigned NOT NULL default '0', PRIMARY KEY  (`skill_id`,`skill_lang`) ) ENGINE=MyISAM;",
"CREATE TABLE IF NOT EXISTS `wc3_config` ( `config_id` varchar(50) NOT NULL, `config_value` varchar(255) NOT NULL, PRIMARY KEY  (`config_id`) ) ENGINE=MyISAM;"

Теперь наши SQL запросы правильные, но нам требуется заново скомпилировать файл war3ft.amxx из файла war3ft.sma, чтобы плагин содержал в себе обновленный запрос.

Таким образом мы получили FIX MYSQL War3ft v3.0 RC13, неофициально где-то на форумах его провозгласили также как RC14, правда никаких изменений в их файлах мы так и не нашли, поэтому пришлось разбираться как исправить эту ошибку самостоятельно.

Вот и всё  ;)
« Последнее редактирование: 13.02.2017, 02:02 от sheckler »
  • Отдаю предпочтение CS / CS:CZ / CSS / CS:GO
  • Использую Steam клиент.

*

Оффлайн VMDev

  • *
  • 9
  • 2
  • Valvemon Team
    • Просмотр профиля
Прикрепил бы уже обновленный скомпилированный файл war3ft.amxx (исправленный) для War3ft v3.0 RC13
  • Отдаю предпочтение CS / CS:CZ / CSS / CS:GO
  • Использую Steam клиент.