trickerer / Trinity-Bots

NPCBots for TrinityCore and AzerothCore 3.3.5
https://github.com/trickerer/TrinityCore-3.3.5-with-NPCBots/
465 stars 155 forks source link

[TC] [Question] [Core] Вопрос по поводу одного коммита #815

Closed DykeRz closed 3 months ago

DykeRz commented 4 months ago

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

Description

Привет, у меня вопрос по поводу коммита "NPCBots: Report assigned bot items if not found in DB"

Теперь в логе сервера пишет: InitEquips: bot 80640 Bromosi has item guid 2486445 assigned to slot 0 which doesn't exist in DB!

Что это значит, ошибка ли это или нет и как исправить?

TrinityCore or AzerothCore

TrinityCore

Core rev. hash/commit

TrinityCore rev. d2417736cfd2 2024-05-29 12:49:14 +0300 (main branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon)

Operating system

debian 12

trickerer commented 4 months ago

Эта ошибка значит что в какой-то момент на бота был надет предмет, в данном случае оружие, который позже по неизвестным причинам исчез из базы данных (item_instance). Последние коммиты для логирования направлены на то чтобы иметь документальную базу происходящего.

"Исправить" её можно, удалив предмет из соотвутствующего пересечения в таблице characters_npcbot, слот 0 это equipMhEx.

Если в дальнейшем подобная ошибка снова вылезет её можно репортнуть, приложив дамп таблицы characters_npcbot_logs.

DykeRz commented 4 months ago

https://gist.github.com/DykeRz/83b5b278fdb846339494fb06c4a6885b

Вот репорт

Их очень много оказалось)

trickerer commented 4 months ago

https://gist.github.com/DykeRz/83b5b278fdb846339494fb06c4a6885b

Вот репорт

Их очень много оказалось)

  1. Правильно я понимаю что ты исправил все вылезшие ошибки, но через какое-то время они снова появились?
  2. Ты неправильно понял смысл того что я сказал выше. Сам дамп базы репортом не является, это логи которые следует приложить к репорту.
DykeRz commented 4 months ago

а, я понял, я ничего не исправлял, только применил все коммиты и запустил сервер, и я не знаю как это исправить

вот лог Server.log

trickerer commented 4 months ago

"Исправить" её можно, удалив предмет из соотвутствующего пересечения в таблице characters_npcbot, слот 0 это equipMhEx.

UPDATE characters_npcbot SET equipmhex = 0 WHERE equipmhex != 0 AND equipmhex NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipohex = 0 WHERE equipohex != 0 AND equipohex NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiprhex = 0 WHERE equiprhex != 0 AND equiprhex NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiphead = 0 WHERE equiphead != 0 AND equiphead NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipshoulders = 0 WHERE equipshoulders != 0 AND equipshoulders NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipchest = 0 WHERE equipchest != 0 AND equipchest NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipwaist = 0 WHERE equipwaist != 0 AND equipwaist NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiplegs = 0 WHERE equiplegs != 0 AND equiplegs NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipfeet = 0 WHERE equipfeet != 0 AND equipfeet NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipwrist = 0 WHERE equipwrist != 0 AND equipwrist NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiphands = 0 WHERE equiphands != 0 AND equiphands NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipback = 0 WHERE equipback != 0 AND equipback NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipbody = 0 WHERE equipbody != 0 AND equipbody NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipfinger1 = 0 WHERE equipfinger1 != 0 AND equipfinger1 NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipfinger2 = 0 WHERE equipfinger2 != 0 AND equipfinger2 NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiptrinket1 = 0 WHERE equiptrinket1 != 0 AND equiptrinket1 NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equiptrinket2 = 0 WHERE equiptrinket2 != 0 AND equiptrinket2 NOT IN (SELECT guid FROM item_instance);
UPDATE characters_npcbot SET equipneck = 0 WHERE equipneck != 0 AND equipneck NOT IN (SELECT guid FROM item_instance);

Затем запускаешь сервер и .npcbot log clear

Теперь лог будет содержать информацию о получении и отъёме предметов. После этого можно начать отслеживать указанные ошибки. Если / когда появятся снова - тогда кидаешь лог сервера (или копипастишь ошибки) и прикладываешь дамп таблицы логов. Всё.

trickerer commented 3 months ago

812