Ищу MySQL запрос - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 10.11.2014, 02:40   #1
Аватар для singer
Пользователь

Автор темы (Топик Стартер) Ищу MySQL запрос

Здравствуйте господа,

Не подскажете MySQL запрос на добавление итема всем персонажам на сервере?

Благодарю.

pwsoft сборка.

Последний раз редактировалось singer; 10.11.2014 в 03:12.
singer вне форума Ответить с цитированием
Непрочитано 10.11.2014, 03:12   #2
Аватар для dorocki
Эксперт

По умолчанию Re: Ищу MySQL запрос

Если есть временная таблица типа character_items

INSERT INTO character_items (owner_id, item_id, COUNT, enchant_level) SELECT charid, 4037, 10, 0 FROM characters;
Code: SQL
4037 - ID итема
10 - количество
0 - уровень заточки


после релога любой из игроков получит итемы
__________________
Вот бы сделать дома уборку и нажать "СОХРАНИТЬ"!)
dorocki вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 10.11.2014, 03:14   #3
Аватар для singer
Пользователь

Автор темы (Топик Стартер) Re: Ищу MySQL запрос

Цитата:
Сообщение от dorocki Посмотреть сообщение
Если есть временная таблица типа character_items

INSERT INTO character_items (owner_id, item_id, COUNT, enchant_level) SELECT charid, 4037, 10, 0 FROM characters;
Code: SQL
4037 - ID итема
10 - количество
0 - уровень заточки


после релога любой из игроков получит итемы
Только Items таблица есть.
singer вне форума Ответить с цитированием
Непрочитано 10.11.2014, 03:22   #4
Аватар для Royxz
Супергерой

По умолчанию Re: Ищу MySQL запрос

ну тогда просто вместо `characters_items` поставьте `items`
Royxz вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 10.11.2014, 03:34   #5
Аватар для singer
Пользователь

Автор темы (Топик Стартер) Re: Ищу MySQL запрос

Выполнил вот такой запрос
Код:
INSERT INTO items (owner_id, item_id, COUNT, enchant_level) SELECT obj_Id, 25005, 10, 0 FROM characters;
но ошибочка вышла
Код:
1062 - Duplicate entry '0' for key 'PRIMARY'
singer вне форума Ответить с цитированием
Непрочитано 10.11.2014, 03:54   #6
Пользователь

По умолчанию Re: Ищу MySQL запрос

Такой инсерт не годится, проблема в object_id - по дефолту при инсерте он будет 0 для каждой строчки, и после вставки первого предмета второй уже не вставится, т.к. object_id - это ключ таблицы и не допускает повторений.
К тому же object_id используется для всех сущностей в Л2 поэтому вставлять свои рендомные object_id тоже недопутимо, иначе после рестарта сервера получится дикая каша и сервак можно смело восстанавливать из бекапов.

Направление действий следующее: если сервак в этот момент работает, то в базу не лезть. Когда сервак остановишь найди максимальный object_id по всем таблицам какие есть в бд, а уже после этого можно писать запрос с инкрементами опираясь на максимальный object_id.

Либо сделать программно функционал, если есть сырцы.
Mosinnik вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 10.11.2014, 03:56   #7
Аватар для singer
Пользователь

Автор темы (Топик Стартер) Re: Ищу MySQL запрос

Цитата:
Сообщение от Mosinnik Посмотреть сообщение
Такой инсерт не годится, проблема в object_id - по дефолту при инсерте он будет 0 для каждой строчки, и после вставки первого предмета второй уже не вставится, т.к. object_id - это ключ таблицы и не допускает повторений.
К тому же object_id используется для всех сущностей в Л2 поэтому вставлять свои рендомные object_id тоже недопутимо, иначе после рестарта сервера получится дикая каша и сервак можно смело восстанавливать из бекапов.

Направление действий следующее: если сервак в этот момент работает, то в базу не лезть. Когда сервак остановишь найди максимальный object_id по всем таблицам какие есть в бд, а уже после этого можно писать запрос с инкрементами опираясь на максимальный object_id.

Либо сделать программно функционал, если есть сырцы.
Исходников нет, а можно пример запроса?
singer вне форума Ответить с цитированием
Непрочитано 10.11.2014, 04:29   #8
Пользователь

По умолчанию Re: Ищу MySQL запрос

Базы pw под рукой нету, поэтому на том что есть накидал. Сделал допущение что предметы обновляются чаще всего и не очень интенсивно. соответственно заменить item_id, count,enchant_level на свои

INSERT INTO `items`
(`owner_id`,
`object_id`,
`item_id`,
`count`,
`enchant_level`)
SELECT
t2.charId AS `owner_id`,
@n:=@n+1 AS `object_id`,
999999 AS `item_id`,
1 AS`count`,
0 AS `enchant_level`
FROM ( SELECT ch.obj_Id AS charId, @n:=(SELECT MAX( items.object_id )+10000 FROM items ) FROM characters ch ) t2



вкратце:
берем максимальное object_id из items к нему прибавляем 10к (можно поставить 100к например) и считаем что id и считаем что в базе нету большего id, (если есть то будет лажа, например какойнить клан с подобным id и вскроется оно не скоро)
затем начиная с этого object_id генерируем для каждого нового предмета, увеличивая каждый раз на 1

И еще раз напоминаю: делать при запущеном серваке только на свой страх и риск!
Mosinnik вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 10.11.2014, 04:38   #9
Аватар для singer
Пользователь

Автор темы (Топик Стартер) Re: Ищу MySQL запрос

Цитата:
Сообщение от Mosinnik Посмотреть сообщение
Базы pw под рукой нету, поэтому на том что есть накидал. Сделал допущение что предметы обновляются чаще всего и не очень интенсивно. соответственно заменить item_id, count,enchant_level на свои

INSERT INTO `items`
(`owner_id`,
`object_id`,
`item_id`,
`count`,
`enchant_level`)
SELECT
t2.charId AS `owner_id`,
@n:=@n+1 AS `object_id`,
999999 AS `item_id`,
1 AS`count`,
0 AS `enchant_level`
FROM ( SELECT ch.obj_Id AS charId, @n:=(SELECT MAX( items.object_id )+10000 FROM items ) FROM characters ch ) t2



вкратце:
берем максимальное object_id из items к нему прибавляем 10к (можно поставить 100к например) и считаем что id и считаем что в базе нету большего id, (если есть то будет лажа, например какойнить клан с подобным id и вскроется оно не скоро)
затем начиная с этого object_id генерируем для каждого нового предмета, увеличивая каждый раз на 1

И еще раз напоминаю: делать при запущеном серваке только на свой страх и риск!
Простите за мою глупость, а можно вот на примере моей базы. дабы было достоверно.

characters.sql:
Свернуть ↑Развернуть ↓

items.sql:
Свернуть ↑Развернуть ↓


Собственно сюда суть такова, мне нужно предмет с ID 25005 добавить всем персонажам.

Буду благодарен за помощь.
singer вне форума Ответить с цитированием
Непрочитано 10.11.2014, 11:11   #10
Аватар для Donatte
Герой

По умолчанию Re: Ищу MySQL запрос

А что вам мешает это сделать через ядро? К тому же в ядре взять новый (следующий) номер объекта куда проще чем городить костыли.
__________________
Родился, живу и когда-нибудь умру.
Donatte вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с базой MySQL... Сергей_98 Lineage II 5 14.06.2013 09:19
Установка последней версии mysql на Debian Place Lineage II 1 24.10.2011 20:50
Руководство по поднятию сервера AiON на Linux платформе sotariz Документация 26 27.07.2011 07:05
AION X EMU + Ubuntu 10.04.1 Практикум ruso Серверная часть 56 01.03.2011 16:03
Oracle выпустил MySQL 5.5 TieLay Курилка / Yak floor 4 17.12.2010 19:08


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 11:04. Часовой пояс GMT +3.

Вверх