Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Флудильня (http://mangos.ytdb.ru/forumdisplay.php?f=30)
-   -   работа с базой characters извне (http://mangos.ytdb.ru/showthread.php?t=2299)

Energy 29.08.2010 04:51

работа с базой characters извне
 
Всем привет. Появилась пара интересных мыслишек для работы с базой персонажей, а именно - создание/копирование/перенос персонажей через вебморду.
Насколько я понимаю, при генерации гуидов шмоток/персонажей, используются максимальные значения, берущиеся из базы при запуске сервера, и автоматически им увеличиваемые. Это позволяет уменьшить количество запросов в базу данных при добавлении записей о вещах/персонажах.
Но при этом возникает проблема следующего характера: если вручную добавить запись в таблицу characters или item_instance, то сервер заменит эту запись, как только будет создан новый персонаж/копия предмета в игре.
Таким образом, подобные операции невозможны при включенном сервере.

Возможные варианты решения проблемы:
а) Разрешить в базе создание записей с отрицательным значением гуида, и написать патч для ядра, который при построении списка персонажей будет пересоздавать персонажей с отрицательным гуидом. Например, из пхп скрипта мы создаем в базе чара с гуидом -1, а при следующем входе на экран выбора персонажей для этого аккаунта он будет автоматически пересоздан, с нормальными гуидами. Это наиболее удобный вариант на мой взгляд


б) Написать патч для ядра, с добавлением таблиц в БД characters, и обрабатывать их так же, как в предыдущем варианте, за исключением того, что в этих таблицах будет свой порядок гуидов. Главный недостаток - лишние несколько таблиц, дублирующих уже имеющиеся, и которые нужно подгружать.

в) Написать патч для ядра, позволяющий создавать персонажей и добавлять им предметы через консоль сервера (имхо наиболее неудобный вариант)

Соответственно прежде чем что-то на эту тему думать, хотелось бы узнать у разработчиков, какой из вышеперечисленных вариантов наиболее приемлем, и имеет шанс попасть в виде патча в ядро мангоса. Или может быть есть еще какие-то варианты реализации данной функции?

LordJZ 29.08.2010 05:06

Я думаю с реализацией различных HIGHGUID для игроков можно будет реализовать перенос персонажей между реалмами более корректно. Можно даже хранить персонажей с разных реалмов в одной таблице.

А сейчас это сделать достаточно проблематично, т.к. гуид персонажа хранится во многих других полях. Например, item_instance.data.

Vladimir 29.08.2010 05:40

Вообще-то есть команды .pdump

Energy 29.08.2010 07:40

Цитата:

Сообщение от Vladimir (Сообщение 13176)
Вообще-то есть команды .pdump

Которые работают с файлами дампов. А задача стоит работать с базой, и желательно напрямую.

Грубо говоря представьте себе близовские странички копирования персонажей на птр. Вообще идея в чем - у меня 2 рилма. Один из них так сказать "лайв", то есть стабильный отлаженный билд мангоса с некоторым количеством патчей. Второй - "тестовый". На нем я отлаживаю новые билды (либо просто с обновленной ревизией мангоса, или с добавлением патчей, которых не было ранее). Соответственно, с тех пор когда было убрано поле data у персонажей, у меня крутится идея реализации премейд чаров. Это позволит ускорить тестирование, например, рейдового контента. Не придется мудрить со специальными неписями для быстрой прокачки проф, и можно будет реализовать копирование персонажей с основного рилма.

Создаю персонажа, делаю ему левелап, учу спеллы, покупаю дуалспек, одеваю его. Проще говоря - создаю готового персонажа, вроде премейд чара у близов. Скорее всего таких персонажей будет 20 - по 1 каждого класса для каждой фракции. Потом я переношу этих самых премейд персонажей на специальный аккаунт, ид которго я храню в пхп скрипте.

При входе на страничку тестового сервера у игрока есть возможность скопировать одного из этих персонажей себе на аккаунт. При этом исходный чар не должен быть удален. Скрипт создает копию этого чара в базе тестового сервера, на аккаунте пользователя. Сейчас это реализуемо, если на время добавления копии в базу тестового сервера выключать его. Но это, естесственно, не вариант.

Соответственно, чтобы можно было создать в базе тестового рилма персонажа в то время, когда сервер включен, нужно решить проблему с тем, что сервер заменяет записи, сделанные извне, своими.

dj--alex 30.08.2010 00:40

я долго думал при заливке через Dbscript 4 правильно ли заливается дамп.
и пришёл к выводу что лучше всего заливать в _первый пустой гуид.

т.е. у нас есть номераа 1,2,4,5,8,9.
кто то по разным причинам выпадает и всегда есть пустое место которое более не используется, даже если персонаж удален - поэтому восстанавлвать именно на это место вроде как удобно

Energy 30.08.2010 08:48

Цитата:

Сообщение от dj--alex (Сообщение 13244)
я долго думал при заливке через Dbscript 4 правильно ли заливается дамп.
и пришёл к выводу что лучше всего заливать в _первый пустой гуид.

т.е. у нас есть номераа 1,2,4,5,8,9.
кто то по разным причинам выпадает и всегда есть пустое место которое более не используется, даже если персонаж удален - поэтому восстанавлвать именно на это место вроде как удобно

Пустых гуидов может не оказаться или не хватить. Тем более на сервере, где регулярно производится вайп.

Vladimir 31.08.2010 05:43

Цитата:

Сообщение от Energy (Сообщение 13178)
Которые работают с файлами дампов. А задача стоит работать с базой, и желательно напрямую.

Напрямую вы не можете при включенном сервере - потому что счетчики в памяти. А если делать командой, то принципы работы не будет отличаться от .pdump load - только запросы проще делать будет из базы... чем шаманство с подменой строк...

т.е вполне можно написать команду типа .character clone

Energy 31.08.2010 10:48

Цитата:

Сообщение от Vladimir (Сообщение 13327)
Напрямую вы не можете при включенном сервере - потому что счетчики в памяти. А если делать командой, то принципы работы не будет отличаться от .pdump load - только запросы проще делать будет из базы... чем шаманство с подменой строк...

т.е вполне можно написать команду типа .character clone

Получается, из пхп скрипта это не реализуемо, да и копирование персонажей из базы другого сервера тоже. Грустно.

rsa 31.08.2010 11:40

Вообще это давно реализовано именно на пхп и именно через .pdump
Или нужен какой-то очередной велосипед?

Energy 31.08.2010 11:44

Цитата:

Сообщение от rsa (Сообщение 13342)
Вообще это давно реализовано именно на пхп и именно через .pdump
Или нужен какой-то очередной велосипед?

Реализовано как? Пхп скрипт создает файл дампа и его в игре нужно ручками грузить? Мне кажется что в данном случае это не лучшее решение. Тогда уж проще написать патч, добавляющий таблицы в базу characters, в которых будут содержаться персонажи для копирования, а сервер их будет автоматом оттуда вытягивать.

31.08.2010 13:23

Цитата:

Сообщение от Energy (Сообщение 13343)
Реализовано как? Пхп скрипт создает файл дампа и его в игре нужно ручками грузить? Мне кажется что в данном случае это не лучшее решение. Тогда уж проще написать патч, добавляющий таблицы в базу characters, в которых будут содержаться персонажи для копирования, а сервер их будет автоматом оттуда вытягивать.

http://github.com/mangos/mangos/tree.../contrib/soap/
1. шлем pdump write
2. редактируем
3. шлем pdump load
все - делов на 10 минут

Vladimir 31.08.2010 17:13

Имеено. Я только предложил что если исходные чары в той-же базе то возможно было бы удобно добавить команду аналогичную .pdump load работающую напрямую с даными базы

rsa 31.08.2010 18:17

Цитата:

Сообщение от Energy (Сообщение 13343)
Реализовано как? Пхп скрипт создает файл дампа и его в игре нужно ручками грузить? Мне кажется что в данном случае это не лучшее решение. Тогда уж проще написать патч, добавляющий таблицы в базу characters, в которых будут содержаться персонажи для копирования, а сервер их будет автоматом оттуда вытягивать.

учите командную оболочку мангоса или soap. любые возможные через них функции доступны из любого языка сисшелла.

Energy 31.08.2010 18:23

Цитата:

Сообщение от rsa (Сообщение 13369)
учите командную оболочку мангоса или soap. любые возможные через них функции доступны из любого языка сисшелла.

Изначально идея подразумевала отсутствие работы с файлами дампов. Спасибо, я уже понял в каком направлении копать.

rsa 31.08.2010 18:28

Цитата:

Сообщение от Energy (Сообщение 13370)
Изначально идея подразумевала отсутствие работы с файлами дампов. Спасибо, я уже понял в каком направлении копать.

сэр впервые слышит про туннели, очереди и перенаправление? какие файлы к черту?

Energy 31.08.2010 19:10

Цитата:

Сообщение от rsa (Сообщение 13371)
сэр впервые слышит про туннели, очереди и перенаправление? какие файлы к черту?

Насколько я помню, команды pdump работают с файлами. Это не повод для сарказма.


Текущее время: 16:03. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS