Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Новичкам

Важная информация

Новичкам Информация для всех новичков, новичкам рекомендуется задавать свои вопросы здесь

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2011, 13:31   #1
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию character_inventory очищена

В общем случилась такая беда, что эта таблица оказалась очищена почти полностью для одного игрока.
По идее - не беда. Все данные остались в item_inctance. Я полагал, этого хватит и сервер, как обычно всё вернёт игроку служебной почтой.
Однако, этого почему-то не произошло... Записи есть, но сервер вернул всего 5-6 вещей и всё.
Есть варианты, как заставить сервер вернуть все вещи? Или вообще хоть как-то их вернуть
KiriX вне форума   Ответить с цитированием
Старый 19.09.2011, 16:57   #2
gmltA
Гость
 
Сообщений: n/a
По умолчанию

Может быть попробовать создать записи в character_inventory с неверными значениями слотов и сумок?
  Ответить с цитированием
Старый 19.09.2011, 20:14   #3
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от gmltA Посмотреть сообщение
Может быть попробовать создать записи в character_inventory с неверными значениями слотов и сумок?
Может быть... И что туда ставить вместо верных значений???
KiriX вне форума   Ответить с цитированием
Старый 19.09.2011, 20:34   #4
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Может быть... И что туда ставить вместо верных значений???
проще гм-ом добавить инвентарь...
зы и не забыть настроить регулярный дамп БД
  Ответить с цитированием
Старый 19.09.2011, 21:24   #5
gmltA
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от KiriX Посмотреть сообщение
Может быть... И что туда ставить вместо верных значений???
Ввести гуид чара, гуид из item_instance, остальное оставить нулевыми значениями.
  Ответить с цитированием
Старый 19.09.2011, 22:20   #6
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Minimajack Посмотреть сообщение
проще гм-ом добавить инвентарь...
зы и не забыть настроить регулярный дамп БД
Это не интересно...
+ вещи-то все есть в item_inctance, вот и интересно, как их оттуда можно нормально выудить
KiriX вне форума   Ответить с цитированием
Старый 19.09.2011, 22:25   #7
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Vinolentus вне форума   Ответить с цитированием
Старый 19.09.2011, 22:40   #8
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Vinolentus, спасибо, попробую
KiriX вне форума   Ответить с цитированием
Старый 22.09.2011, 13:16   #9
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Vinolentus
Отлично! Прокатило!

Только я немного поправил ваш запрос, там некоторые ошибочки были...


НО! Выяснилось, что коррозии подвергся не один перс Можно ли как-то эту процедуру модифицировать, чтобы она сразу по всем персам пробежалась???
KiriX вне форума   Ответить с цитированием
Старый 22.09.2011, 18:51   #10
Vinolentus
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 51
Сказал(а) спасибо: 14
Поблагодарили 32 раз(а) в 15 сообщениях
Vinolentus На верном пути
По умолчанию

Можно. Но не уверен, что это хорошая идея. Когда проверял, обнаружил у себя в item_instance достаточно большое (~1.4%) количество записей, не связанных с другими таблицами. Может быть, только моя ошибка.
Vinolentus вне форума   Ответить с цитированием
Старый 23.09.2011, 09:28   #11
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Vinolentus Посмотреть сообщение
Можно. Но не уверен, что это хорошая идея. Когда проверял, обнаружил у себя в item_instance достаточно большое (~1.4%) количество записей, не связанных с другими таблицами. Может быть, только моя ошибка.
Как я понимаю, используется алгоритм формирования писем как это делает сам сервер?
Тогда мне не понятно, почему же сам сервер не формирует такие письма, ведь функционал-то у него такой есть...
Прверьте, плиз, скриптик:

Так должно сработать по всем персам сразу. Просто процедуры для мускула никогда не писал
KiriX вне форума   Ответить с цитированием
Старый 23.09.2011, 14:54   #12
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Подправил скриптик, проверил, вроде работает, но нужен нормальный тест
KiriX вне форума   Ответить с цитированием
Старый 25.09.2011, 14:47   #13
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Решил сам затестить, стерев полностью таблицу 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;
Здесь идёт заполнение 12 итемов для письма и не важно кому по факту принадлежит предмет. Просто пихается 12 штук, а потом письмо отправляется игроку, чья запись была найдена/обработана последней в цикле. Не могу понять, как можно сделать проверку, чтобы 12 предметов для письма заполнялись только если эти предметы принадлежат одному игроку, если не принадлежат, выход из цикла и отправка письма, дальше формируется письмо для другого игрока.
Есть идеи?
KiriX вне форума   Ответить с цитированием
Старый 25.09.2011, 15:35   #14
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

Кирилл, а вы не думали что проще написать дополнительную процедуру; которая будет пробегаться по всем персонажам и для каждого вызовет восстановление? У вас есть рабочий код, зачем что то в нем менять?

Последний раз редактировалось Minimajack; 25.09.2011 в 15:36. Причина: сори опечатки в имени =)
  Ответить с цитированием
Старый 25.09.2011, 16:07   #15
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Цитата:
Сообщение от Minimajack Посмотреть сообщение
Кирилл, а вы не думали что проще написать дополнительную процедуру; которая будет пробегаться по всем персонажам и для каждого вызовет восстановление? У вас есть рабочий код, зачем что то в нем менять?
Дак я ж писал, не срабатывает он почему-то
Для того перса у которого обнаружилась проблема восстановил несколько предметов и всё. Ждал неделю, перезагружался сервак, процедура не восстанавливала ничего. Так что использовать её же смысла нет. Она не работает.
Если только правда в коде что-то свой написать... Просто тут вроде процедура уже рабочая есть Думал, может из неё сделать можно
Вариант рабочий - одна шмотка - одно письмо. Но хотелось бы если уж делать, так оптимально

Добавлено через 26 минут
Цитата:
Сообщение от Minimajack Посмотреть сообщение
Кирилл, а вы не думали что проще написать дополнительную процедуру; которая будет пробегаться по всем персонажам и для каждого вызовет восстановление? У вас есть рабочий код, зачем что то в нем менять?
АЙ БЛИН!!! Спасибо! Теперь дошло, что вы имели ввиду
Написать процедуру, которая для каждого перса вызовет рабочую процедуру! Щас попробую
Спасибо!
KiriX вне форума   Ответить с цитированием
Старый 25.09.2011, 16:27   #16
KiriX
Умный
Старожил
 
Аватар для KiriX
 
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
KiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человекKiriX Реально хороший человек
По умолчанию

Если я всё правильно понял, то это должно выглядеть так:
Код:
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`;
KiriX вне форума   Ответить с цитированием
Ответ


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

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



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


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot