Řešení chybových hlášení MaNGOSu

Z WoWResource Wiki
Přejít na: navigace, hledání

Řešení chyb

Player (GUID: 279) has a broken data in field `characters`.`data`

Tato chyba říká, že počet položek ve sloupci data v tabulce characters pro danou postavu neodpovídá předpokládanému což znamená, že došlo k porušení integrity dat této postavy.

Zobrazení:

USE `characters`;
CREATE FUNCTION substrCount(x LONGTEXT, delim varchar(12)) returns int
return (length(x) - length(REPLACE(x, delim, ''))) / length(delim);

Tímto povelem lze zobrazit kolik postav(RowCount) má kolik položek(DataCount) ve sloupci data. Přitom pouze jedna hodnota může být správná a často se mění při přechodu na novější verzi hry.

SELECT COUNT(*) AS `RowCount`, T1.`DataCount` FROM (SELECT `guid`, `name`, SubstrCount(`data` , ' '
) AS `DataCount` FROM `characters`) AS T1 GROUP BY T1.`DataCount`

Z tohoto výpisu je pak patrné, u kolika postav neodpovídá počet položek ve sloupci data většině.

Řešení:

Analýza a oprava položek ve sloupci data je složitá a proto nejjednodušším řešením je vymazat všechny poškozené postavy. Za číslo x do SQL dotazu je nutno dosadit správný počet položek ve sloupci data (např. 1700 pro verzi 3.0.x)

DELETE FROM `characters` WHERE SubstrCount(`data` , ' ') != x

Tímto však dojde pouze k odstranění záznamů z tabulky characters. Dále je nutno promazat všechny závislé tabulky na smazaných položkách. To lze provést SQL dotazy pro Údržba MaNGOS databáze.

Table `creature` have creature (GUID: 115913 Entry: 27604) with `creature_template`.`RegenHealth`=1 and low current health (416), `creature_template`.`minhealth`=62000.

Množství zdraví konkrétní bytosti je nastaveno na nižší hodnotu než je definované minimální množství druhu bytosti dané tabulkou creature_template.

Zobrazení:

SELECT `creature`.`guid`, `creature`.`id`, `creature`.`curhealth`, `creature_template`.`minhealth`
FROM `creature`
JOIN `creature_template` ON `creature_template`.`entry` = `creature`.`id`
WHERE `creature`.`curhealth` < `creature_template`.`minhealth`

Řešení:

Nastavit problémovým bytostem odpovídající minimální zdraví.

UPDATE `creature` SET `creature`.`curhealth` = 
(SELECT `creature_template`.`minhealth` FROM `creature_template` WHERE `creature_template`.`entry` = `creature`.`id`) 
WHERE `creature`.`curhealth` < (SELECT `creature_template`.`minhealth` FROM `creature_template` WHERE `creature_template`.`entry` = `creature`.`id`)


Creature (GUID: 128557) does not exist but has a record in `creature_addon`

Záznam v tabulce creature_addon pro neexistující bytost.

Zobrazení:

SELECT * FROM `creature_addon` WHERE `guid` NOT IN (SELECT `guid` FROM `creature`)

Řešení:

Buď doplnit chybějící záznamy bytostí a nebo jednoduše smazat odkazy z tabulky creature_addon.

DELETE FROM `creature_addon` WHERE `guid` NOT IN (SELECT `guid` FROM `creature`)


Table `creature` have creature (GUID: 1518000 Entry: 500002) with `MovementType`=0 (idle) have `spawndist`<>0, set to 0.

Zobrazení:

SELECT * FROM `creature` WHERE (`MovementType` = 0) AND (`spawndist` <> 0)

Řešení:

UPDATE `creature` SET `spawndist` = 0 WHERE (`MovementType` = 0) AND (`spawndist` <> 0)


Table `quest_end_scripts` has not existing quest (Id: 555051) as script id

Záznam v tabulce quest_end_scripts pro neexistující quest.

Zobrazení:

SELECT * FROM `quest_end_scripts` WHERE `id` NOT IN (SELECT `entry` FROM `quest_template`)

Řešení:

Buď doplnit chybějící záznamy do quest_template a nebo jednoduše smazat odkazy z tabulky quest_end_scripts.

DELETE FROM `quest_end_scripts` WHERE `id` NOT IN (SELECT `entry` FROM `quest_template`)


Summoned pet (Entry: 6412) not have pet stats data in DB

Pro některé mazlíčky chybí v tabulce mangos.pet_levelstats informace.

Zobrazení:

Tímto zobrazíte, o které bytosti se jedná.

SELECT entry FROM characters.character_pet WHERE `entry` NOT IN 
(SELECT `creature_entry` FROM mangos.`pet_levelstats`) 
GROUP BY `character_pet`.`entry` ORDER BY `character_pet`.`entry` ASC

Řešení:

V tomto případě nelze dost dobře smazat položky z character_pet, protože se zde stejně vytvoří časem znova. Naopak je potřeba doplnit údaje do tabulky pet_levelstats. Jak je doplnit, když nejsou k dispozici? Toto je věcí databázových projektů jako je UDB. Ovšem pro vlastní potřeby lze volit nedokonalé řešení a zduplikovat záznamy již existujících bytostí. Ovšem zde je problém, který již existující záznam vybrat, protože jsou tvořené pro různě silné bytosti.

INSERT INTO `pet_levelstats` SELECT x AS creature_entry, level, hp,mana,armor,str,agi,sta,"int",spi  FROM `pet_levelstats` WHERE creature_entry = y

Kde x je číslo vkládané bytosti a y číslo zdrojové kopírované.


Table `npc_trainer` for Trainer (Entry: 29194 ) has non existing spell 0, ignore

Chybný odkaz na neexistující kouzlo s id 0.

Zobrazení

SELECT * FROM `npc_trainer` WHERE `spell` = 0

Řešení

Buď zjistíte o jakého učitele se jedná a číslo kouzla nějak opravíte a nebo odkaz smažete.

DELETE FROM `npc_trainer` WHERE `spell` = 0

Player (GUID: 14104) has broken zone-data

Nastává pokud hráč má ve sloupci Zone nulovou hodnotu.

Zobrazení

SELECT * FROM `characters` WHERE `Zone` = 0

Řešení

Nejvhodnější je obnovit řádky těchto hráčů ze zálohy, ovšem pokud není k dispozici záloha, tak lze nastavit tyto řádky např. na 1.

UPDATE `characters SET Zone=1 WHERE` Zone=0

InstanceMap* MapInstanced::CreateInstance(uint32, InstanceSave*, Difficulty): Assertion `false' failed.

Zobrazení

Jde o řádky v tabulkce instance_reset, které mají sloupce mapid s neexistujícím odkazem na tabulku instance_template v databázi mangos.

SELECT * FROM `characters`.`characters` WHERE `characters`.`characters`.`map` NOT IN (SELECT `map` FROM `mangos`.`instance_template`) AND 

Řešení

Jednoduše vyprázdněte celou tabulku instance_reset nebo smažte jen ty, které nejsou správné.

DELETE FROM `characters`.`instance_reset` WHERE `characters`.`instance_reset`.`mapid` NOT IN (SELECT `map` FROM `mangos`.`instance_template`)


Podobně je potřeba zkontrolovat tabulku characters a sloupec Map. Pokud vám do logu vypisuje server např.

CreateInstance: no instance template for map 650

Tak máte postavy, které se po přihlášení mají objevit v neexistující instanci, tedy chybějí řádek pro map s daným id.


Související