Postby Gregory » 13 Apr 2011, 17:38
Dnes v noci proběhne shutdown kvůli vymazání všech petů! Je to nejsnazší cesta k opravě Call Pet a příbuzných spellů.
Vysvětlení:
Vývojáři SkyFire od nichž fetchujeme jejich změny (nebojte, není trestné, počítají s tím :) ) nechali v kódu chybu, která inkrementovala neinicializovanou proměnnou. To potom udělá pěkný bordel v tom, co chceme uložit a dělá si to co chce ( příklad: int pp; pp++;, v pp bude nyní uloženo předem neodhadnutelné číslo vysokých hodnot ). Tak to bylo s hunter pety - při vytvoření huntera se sice alokovalo místo pro petslotused a currentpetslot, ale už se neinicializovalo. Problém byl pak při tamování peta a tím, že se pomocí metody do proměnné petslotused uložilo číslo astronomických hodnot. To se bohužel promítlo i na slotech petů, kteří se uložili do tabulky character_pet pod čísly takovými, které si emulátor bohužel špatně přebírá. To že se lognete s vyndaným petem je důsledkem právě sloupce currentpetslot, který je nastaven na tu hodnotu z character_pet, ale hlavní problém je v tom, že spelly Call Pet 1-5 používají čísla 0-4, což právě způsobí to, že pet nejde přivolat, protože pod tímhle slotem v DB jednoduše nic není.
Teď proč je to pro nás nejsnazší řešení:
Hlavně je to kvůli tomu, že pro napravení těchto dat by byl potřeba nějaký program, který by pety nějakým způsobem seřadil a nastavil hodnoty v currentpetslot a petslotused na správné hodnoty podle počtu záznamů a hodnotě sloupců v character_pet. To je bohužel složitější, a SQL query by to nejspíše nezvládla.
Proto je lepší vymazat všechny pety, a vynulovat sloupce petslotused a currentpetslot - zabere to tisíckrát méně času, a budeme moci ten čas zužitkovat na opravu jiných věcí.
Omlouváme se, ale vypadá to na nejsnazší řešení. Doufám že pro vás nebude problém si dojít tamnout jiného.