|
Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь |
|
Опции темы | Поиск в этой теме | Опции просмотра |
19.09.2011, 13:31 | #1 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
character_inventory очищена
В общем случилась такая беда, что эта таблица оказалась очищена почти полностью для одного игрока.
По идее - не беда. Все данные остались в item_inctance. Я полагал, этого хватит и сервер, как обычно всё вернёт игроку служебной почтой. Однако, этого почему-то не произошло... Записи есть, но сервер вернул всего 5-6 вещей и всё. Есть варианты, как заставить сервер вернуть все вещи? Или вообще хоть как-то их вернуть |
19.09.2011, 16:57 | #2 |
Гость
Сообщений: n/a
|
Может быть попробовать создать записи в character_inventory с неверными значениями слотов и сумок?
|
19.09.2011, 20:34 | #4 |
Гость
Сообщений: n/a
|
|
19.09.2011, 21:24 | #5 |
Гость
Сообщений: n/a
|
|
19.09.2011, 22:25 | #7 |
Пользователь
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
|
|
22.09.2011, 18:51 | #10 |
Пользователь
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
|
Можно. Но не уверен, что это хорошая идея. Когда проверял, обнаружил у себя в item_instance достаточно большое (~1.4%) количество записей, не связанных с другими таблицами. Может быть, только моя ошибка.
|
23.09.2011, 09:28 | #11 | |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
Тогда мне не понятно, почему же сам сервер не формирует такие письма, ведь функционал-то у него такой есть... Прверьте, плиз, скриптик: Так должно сработать по всем персам сразу. Просто процедуры для мускула никогда не писал |
|
25.09.2011, 14:47 | #13 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Решил сам затестить, стерев полностью таблицу character_inventory. Обнаружил, что мой вариант не работает. Приходят персу чужие шмотки. Нашёл ошибку, но не знаю как побороть:
Код:
WHILE (mail_item_idx < MAX_MAIL_ITEMS AND next_row) DO FETCH res INTO out_guid, out_entry, char_guid; IF next_row != 0 THEN INSERT INTO mail_items (`mail_id`, `item_guid`, `item_template`, `receiver`) VALUES (mail_id, out_guid, out_entry, char_guid); SET mail_item_idx = mail_item_idx + 1; END IF; END WHILE; Есть идеи? |
25.09.2011, 15:35 | #14 |
Гость
Сообщений: n/a
|
Кирилл, а вы не думали что проще написать дополнительную процедуру; которая будет пробегаться по всем персонажам и для каждого вызовет восстановление? У вас есть рабочий код, зачем что то в нем менять?
Последний раз редактировалось Minimajack; 25.09.2011 в 15:36. Причина: сори опечатки в имени =) |
25.09.2011, 16:07 | #15 | ||
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Цитата:
Для того перса у которого обнаружилась проблема восстановил несколько предметов и всё. Ждал неделю, перезагружался сервак, процедура не восстанавливала ничего. Так что использовать её же смысла нет. Она не работает. Если только правда в коде что-то свой написать... Просто тут вроде процедура уже рабочая есть Думал, может из неё сделать можно Вариант рабочий - одна шмотка - одно письмо. Но хотелось бы если уж делать, так оптимально Добавлено через 26 минут Цитата:
Написать процедуру, которая для каждого перса вызовет рабочую процедуру! Щас попробую Спасибо! |
||
25.09.2011, 16:27 | #16 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Если я всё правильно понял, то это должно выглядеть так:
Код:
BEGIN DECLARE char_guid INT UNSIGNED; DECLARE next_row TINYINT DEFAULT 1; DECLARE res CURSOR FOR SELECT `guid` FROM `characters` ORDER BY `guid`; DECLARE CONTINUE HANDLER FOR NOT FOUND SET next_row = 0; OPEN res; WHILE next_row != 0 DO FETCH res INTO char_guid; CALL RestoreItems(char_guid); END WHILE; CLOSE res; END; Код:
SELECT `item_instance`.`owner_guid` FROM `item_instance` LEFT JOIN `character_inventory` ON `item_instance`.`guid` = `character_inventory`.`item` LEFT JOIN `mail_items` ON `item_instance`.`guid` = `mail_items`.`item_guid` LEFT JOIN `auction` ON `item_instance`.`guid` = `auction`.`itemguid` LEFT JOIN `guild_bank_item` ON `item_instance`.`guid` = `guild_bank_item`.`item_guid` WHERE ( `item_instance`.`owner_guid` <> 0 AND `character_inventory`.`item` IS NULL AND `mail_items`.`item_guid` IS NULL AND `auction`.`itemguid` IS NULL AND `guild_bank_item`.`item_guid` IS NULL ) GROUP BY `item_instance`.`owner_guid`; |