Скажи пожалуйста,а какой смысл от этого? То что плагин выполнит после смены карты через 120 секунд обновление випов от этого лучшую сторону ничего не поменяется,хотелось бы увидеть полноценный фикс а не костыли.
Скажи пожалуйста,а какой смысл от этого? То что плагин выполнит после смены карты через 120 секунд обновление випов от этого лучшую сторону ничего не поменяется,хотелось бы увидеть полноценный фикс а не костыли.
Выкладываю свои скрипты, которыми очень долгое время помогал людям переносить VIP-игроков из SQLite в MySQL базу, и наоборот.
SQLite2MySQL.php - из SQLite в MySQL MySQL2SQLite.php - из MySQL в SQLite
Как пользоваться?
Открыть нужный скрипт редактором Notepad++, или любым иным, поддерживающим кодировку UTF-8 без BOM (строго без BOM).
Найти настройки скрипта. Они помечены специальным комментарием:
PHP:
/**
* Настройки скрипта.
*/
Произвести настройку, загрузить на удалённый веб-хостинг.
Открыть в веб-браузере.
Обращаю внимание: в базе, в которую производится импорт, уже должна существовать структура. Для MySQL достаточно хотя бы один раз подключить плагин к нему.
Если нет возможности, или желания, прикладываю запросы для MySQL базы, которые надо выполнить через phpMyAdmin / HeidiSQL / любой иной менеджер БД.
SQL:
CREATE TABLE IF NOT EXISTS `vip_users` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`auth` VARCHAR(64) UNIQUE NOT NULL,
`name` VARCHAR(64) NOT NULL default 'unknown',
`auth_type` TINYINT(2) UNSIGNED NOT NULL default '0',
`pass_key` VARCHAR(64) default NULL,
`password` VARCHAR(64) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `auth_id` (`auth`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS `vip_overrides` (
`user_id` INT(10) UNSIGNED NOT NULL,
`server_id` INT(10) UNSIGNED NOT NULL,
`group` VARCHAR(64) default NULL,
`expires` INT(10) UNSIGNED NOT NULL default '0',
PRIMARY KEY (`user_id`, `server_id`),
UNIQUE KEY `user_id` (`user_id`, `server_id`),
CONSTRAINT `vip_overrides_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `vip_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) DEFAULT CHARSET=utf8;
Выкладываю свои скрипты, которыми очень долгое время помогал людям переносить VIP-игроков из SQLite в MySQL базу, и наоборот.
SQLite2MySQL.php - из SQLite в MySQL MySQL2SQLite.php - из MySQL в SQLite
Как пользоваться?
Открыть нужный скрипт редактором Notepad++, или любым иным, поддерживающим кодировку UTF-8 без BOM (строго без BOM).
Найти настройки скрипта. Они помечены специальным комментарием:
PHP:
/**
* Настройки скрипта.
*/
Произвести настройку, загрузить на удалённый веб-хостинг.
Открыть в веб-браузере.
Обращаю внимание: в базе, в которую производится импорт, уже должна существовать структура. Для MySQL достаточно хотя бы один раз подключить плагин к нему.
Если нет возможности, или желания, прикладываю запросы для MySQL базы, которые надо выполнить через phpMyAdmin / HeidiSQL / любой иной менеджер БД.
SQL:
CREATE TABLE IF NOT EXISTS `vip_users` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`auth` VARCHAR(64) UNIQUE NOT NULL,
`name` VARCHAR(64) NOT NULL default 'unknown',
`auth_type` TINYINT(2) UNSIGNED NOT NULL default '0',
`pass_key` VARCHAR(64) default NULL,
`password` VARCHAR(64) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `auth_id` (`auth`)
) DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE IF NOT EXISTS `vip_overrides` (
`user_id` INT(10) UNSIGNED NOT NULL,
`server_id` INT(10) UNSIGNED NOT NULL,
`group` VARCHAR(64) default NULL,
`expires` INT(10) UNSIGNED NOT NULL default '0',
PRIMARY KEY (`user_id`, `server_id`),
UNIQUE KEY `user_id` (`user_id`, `server_id`),
CONSTRAINT `vip_overrides_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `vip_users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) DEFAULT CHARSET=utf8;
L 11/04/2018 - 15:28:59: Пытаемся подключиться к БД...
L 11/04/2018 - 15:28:59: Успешно подключился к SQLite базе!
L 11/04/2018 - 15:28:59: Успешно подключился к MySQL базе!
L 11/04/2018 - 15:28:59: Загрузка пользователей...
L 11/04/2018 - 15:28:59: Подготовка SQL запросов...
L 11/04/2018 - 15:28:59: Запуск транзакции...
<br />
<b>Notice</b>: Undefined index: auth in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>72</b><br />
L 11/04/2018 - 15:28:59: Обрабатываю игрока will_rock ()...
<br />
<b>Notice</b>: Undefined index: auth in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>74</b><br />
<br />
<b>Notice</b>: Undefined index: auth in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>75</b><br />
<br />
<b>Notice</b>: Undefined index: auth_type in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>75</b><br />
<br />
<b>Notice</b>: Undefined index: pass_key in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>75</b><br />
<br />
<b>Notice</b>: Undefined index: password in <b>/var/www/***/data/www/***.ru/SQLite2MySQL.php</b> on line <b>75</b><br />
<br />
L 11/04/2018 - 15:28:59: Завершаем транзакцию к БД...
L 11/04/2018 - 15:28:59: Готово.
И так с каждым игроком. Игра css v34, mysql 5.7, php 5.6-7.0 пробовал
Расскажите дураку какие манипуляции проводить с базой данных?
Сделал еще 1 запись в databases с базой vip_core и так же заменил базу с vip на vip_core, поставил плагин, ввел команду и ничего не произошло, бд пустая
@spazm, сервер перезагружали? SM кеширует содержимое файла databases.cfg до смены карты, как минимум.
Если SM свежий - можно выполнить sm_reload_databases. Его не так давно добавили.
L 11/04/2018 - 17:01:26: SourceMod error session started
L 11/04/2018 - 17:01:26: Info (map "jb_summer_jail_v2") (file "errors_20181104.log")
L 11/04/2018 - 17:01:26: [SM] Exception reported: Client 17 is not in game
L 11/04/2018 - 17:01:26: [SM] Blaming: vip/VIP_Core.smx
L 11/04/2018 - 17:01:26: [SM] Call stack trace:
L 11/04/2018 - 17:01:26: [SM] [0] ShowVGUIPanel
L 11/04/2018 - 17:01:26: [SM] [1] Line 164, vip/Info.sp::DisplayInfo
L 11/04/2018 - 17:01:26: [SM] [2] Line 31, vip/Info.sp::DisplayClientInfo
L 11/04/2018 - 17:01:26: [SM] [3] Line 286, vip/CMD.sp::VIPMenu_CMD
L 11/04/2018 - 17:01:26: [SM] Exception reported: Client 17 is not in game
L 11/04/2018 - 17:01:26: [SM] Blaming: vip/VIP_Core.smx
L 11/04/2018 - 17:01:26: [SM] Call stack trace:
L 11/04/2018 - 17:01:26: [SM] [0] ShowVGUIPanel
L 11/04/2018 - 17:01:26: [SM] [1] Line 164, vip/Info.sp::DisplayInfo
L 11/04/2018 - 17:01:26: [SM] [2] Line 31, vip/Info.sp::DisplayClientInfo
L 11/04/2018 - 17:01:26: [SM] [3] Line 286, vip/CMD.sp::VIPMenu_CMD
L 11/04/2018 - 17:01:26: [SM] Exception reported: Client 17 is not in game
L 11/04/2018 - 17:01:26: [SM] Blaming: vip/VIP_Core.smx
L 11/04/2018 - 17:01:26: [SM] Call stack trace:
L 11/04/2018 - 17:01:26: [SM] [0] ShowVGUIPanel
L 11/04/2018 - 17:01:26: [SM] [1] Line 164, vip/Info.sp::DisplayInfo
L 11/04/2018 - 17:01:26: [SM] [2] Line 31, vip/Info.sp::DisplayClientInfo
L 11/04/2018 - 17:01:26: [SM] [3] Line 286, vip/CMD.sp::VIPMenu_CMD
L 11/04/2018 - 17:35:45: Error log file session closed.
Спасибо, буду знать. Мы с @Kr1kuzya уже все решили. Не работало по причине того, что там было под вторую версию. --- Добавлено позже --- @R1KO, подскажи как разшифровать стим ид))? В реале такой STEAM_0:0:1194441779 а в бд -1906083738 (css v34) Перешел на mysql чтобы было удобно менять стим ид игрокам через phpmyadmin а получается не все так просто :beee:
Краткая инструкция переноса Базы данных VIP игроков с SQLite на MySQL под версией ядра 3.0 (vip_core.sq3).
1) Использовать данный сайт Convert SQLite to MySQL online - RebaseData
Пояснение: Первый импорт сайт дает сделать бесплатно (фулл версия), второй, третий и т.д. импорт, он делает в "лайт" версии (не более 100 строк переносит), в целом, в итоговой версии выходит 54 строчки (я импортировал 5 разных баз с 5 серверов). Если вам ппц как надо чтобы все версии импорта были фулл (ну вот вдруг), то используйте ВПН для замены IP. 1 IP = 1 полному импорту.
2) После того, как вы сделали импорт, открываем итоговый файл "data.sql". Вы конечно можете сразу его залить в базу, но толку мало. Не хватает 1 столбца. Решаем проблему.
3) Находим в открывшемся файле следующее (открывать через Notepad++)
C-подобный:
--
-- Table structure for table `vip_users`
--
DROP TABLE IF EXISTS `vip_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vip_users` (
`account_id` int(11) DEFAULT NULL,
`name` varchar(64) DEFAULT NULL,
`lastvisit` int(11) DEFAULT NULL,
`group` varchar(64) DEFAULT NULL,
`expires` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
Ткну носом, не хватает конкретно 1 столбца для работоспособности таблицы. Столбца "SID", сайт его по какой-то причине игнорит. Не беда.
Вставляем данную строку `sid` int(10) unsigned NOT NULL, чтобы получилось вот так
C-подобный:
--
-- Table structure for table `vip_users`
--
DROP TABLE IF EXISTS `vip_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `vip_users` (
`account_id` int(11) DEFAULT NULL,
`name` varchar(64) DEFAULT NULL,
`lastvisit` int(11) DEFAULT NULL,
`sid` int(10) unsigned NOT NULL,
`group` varchar(64) DEFAULT NULL,
`expires` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
Именно так, никак иначе. Поздравляю, вы добавили столбец, но в перенесенных игроках не прописан данный столбец и соответственно, при импорте в базу, будет выдавать ошибку. Так же исправляем (занимает мало времени).
4) Находим данную строчку (ЭТО НА ПРИМЕРЕ МОИХ ВИПОВ, У ВАС СВОИ ИГРОКИ, НО ПРИНЦИП ТОТ ЖЕ)
C-подобный:
INSERT INTO `vip_users` VALUES (12069075,'?hhhistoria?',1540653434,'VIP',1544477605),(71839886,'dloC',1541336842,'VIP',1541694370),(96046283,'Lourence',1541264850,'VIP',1542392351), И ТАК ДАЛЕЕ (СМОТРЯ СКОЛЬКО ВИПОВ)
Краткий разбор. Первое значение это "account_id", второе "name", третье "lastvisit", четвертое ТО ЧТО МЫ ПРОПИСАЛИ В ТАБЛИЦУ это "SID", так как мы его только прописали, у игроков нет данного значения, у меня по дефолту это "0" (у вас скорее всего тоже, если вы не прописывали номера сервера в vip_core.cfg, если меняли с 0 на другой номер, пишите свой номер), соответственно каждому ВИПу я дописываю после последнего визита данное значение "0", выходит так
C-подобный:
INSERT INTO `vip_users` VALUES (12069075,'?hhhistoria?',1540653434, 0, 'VIP',1544477605),(71839886,'dloC',1541336842, 0, 'VIP',1541694370),(96046283,'Lourence',1541264850, 0, 'VIP',1542392351), И ТАК ДАЛЕЕ (СМОТРЯ СКОЛЬКО ВИПОВ)
Я думаю, логика понятна, дальше идет "group" и "expires".
5) Заливаем данный sql в базу
6) Прописываем в database.cfg
"vip_core"
{
"driver" "mysql"
"host" "Ip" // ip сервера где находится ваш mysql
"database" "Название БД" // название базы данных
"user" "Имя юзера Бд" // имя пользователя базы данных
"pass" "Пароль юзера БД" // пароль для этого пользователя
}
7) Рестартим сервер и проверяем. Выдаем себе ВИПку и лезем базу, прописалась ли она там или нет, если да, все окей, если нет, проверяйте по пунктам, у меня все получилось, у вас тоже получится. В целом, будут вопросы, пишите.
Пояснение: Первый импорт сайт дает сделать бесплатно (фулл версия), второй, третий и т.д. импорт, он делает в "лайт" версии (не более 100 строк переносит), в целом, в итоговой версии выходит 54 строчки (я импортировал 5 разных баз с 5 серверов). Если вам ппц как надо чтобы все версии импорта были фулл (ну вот вдруг), то используйте ВПН для замены IP. 1 IP = 1 полному импорту.
можно просто найти другой сайт, я скинул 1-й попавшийся из результатов гугла
3-й пункт вообще не нужен если ядро уже было подключено к mysql хоть раз и создало базу. Тогда запросы
и вообще лучше удалить, следовательно 4 и все остальные тоже получаются не нужными
Возможно, я просто шел простым путем понятным мне :D Не хотелось уже беспокоить лишний раз) Вот и пришло такое решение (Ну я дундук, что еще сказать)
P.s. В итоге все же инструкция родилась) Из двух комментариев)