This is a read only copy without any forum functionality of the old Modcraft forum.
If there is anything that you would like to have removed, message me on Discord via Kaev#5208.
Big thanks to Alastor for making this copy!

Menu

Author Topic: 05 - Editace DBC  (Read 1166 times)

Amaroth

  • Contributors
  • Creator of Worlds
  • *****
  • Posts: 1219
    • View Profile
    • Amaroth's Tools
05 - Editace DBC
« on: September 01, 2015, 08:27:11 pm »
[paragraph:3uflqf6t]Herní klient a server používají kromě známější serverové MySQL databáze (nebo přesněji databází) ještě jednu, klientovou databázi, která je uložena v souborech s koncovkou .dbc - odtud tedy označení DBCčka. DBCčka jsou více méně obyčejné tabulky s řádky a sloupci. Mají 2 hlavní úskalí a pak ještě drobnější třetí.

1. neexistuje editor, který by uměl všechna DBCčka bez chyby otevřít, upravit a uložit. Každý si alespoň s některými neporadí.

2. neexistuje editor, který by ovládal masové úpravy (např. nastav všem řádkům co mají v poli č.5 hodnotu 50 do pole č.6 hodnotu 150). Tohle jde částečně obejít konverzí do jiného formátu (např. CSV), na který již existují profesionálnější a normálnější editory, ale osobně jsem ještě neviděl takový konvertor, který by byl 100% spolehlivý.

3. editory DBC neoznačují (nebo případně občas označují, ale často naprosto špatně nebo neúplně) názvy polí v DBC tabulkách, případně jim dávají názvy, které vám řeknou velké kulové. Pracovat v DBC znamená prakticky pořád procházet dokumentaci na naší vývojářské wiki.

Návod vypadá dlouze a složitě, ale nenechte se vyděsit a odradit, po pravdě si ale většinou (a  většina z vás) vystačíte jen s jedním primitivním editorem, ve kterém jsou (bohužel) jen naprosto základní a stejně primitivní funkce. Trik je zde spíše v tom vědět co, kde a na co upravit, abyste dosáhli chtěného výsledku, než v nějakých pokročilých technických schopnostech.[/paragraph:3uflqf6t]

Potřebné programy


[paragraph:3uflqf6t]MyDBCEditor
DBCUtil
Taliis
DBC Editor[/paragraph:3uflqf6t]

Potřebné počáteční znalosti


[paragraph:3uflqf6t]Předpokládá se, že jste si prošli Obecný přehled pojmů a systému hry, Instalace testovacího serveru (nebo máte k dispozici server, na kterém můžete pracovat) a Vytváření a editace MPQ archivů.[/paragraph:3uflqf6t]

Jak na DBC obecně


[paragraph:3uflqf6t]Doteď jste si jen hráli s přípravou, nyní ale už budete schopni reálně dělat klientové úpravy. Než se na ně vrhnete, udělejte jeden, poslední přípravný krok; vytvořte si svůj pracovní adresář, kde budete mít všechny své upravené a pracovní soubory. Můžete mít jeden společný adresář pro všechny své projekty, nebo více adresářů pro jednotlivé projekty, to je čistě na vás, ale tak či onak začněte na jednom. Já mám na příklad, bez většího matlání, složku "Noggit" na ploše. V té mám úplně vše a stačí mi to ke spokojenosti.

Ve svém pracovním adresáři si vytvořte složku DBFilesClient (název není povinný ale doporučený kvůli Noggitu, ke kterému se dostaneme někdy příště). Taktéž tam doporučuji ještě vložit složku DBC, ve které budete mít zálohy všech blizzlike DBC. Ty jste si buďto vyextrahovali sami v 3. díle těchto návodů, nebo si je můžete vypůjčit z návodového balíčku, který je ke stažení v 2. díle (složka Blizzlike335aEnGBDBCs v balíčku). Máte blizzlike DBCčka, máte adresář kam si budete dávat svoje upravené verze blizzlike DBCček, je čas se pustit do editování.

1. určete si, co chcete upravovat. Podle názvů u většiny DBCček poznáte, na co asi jsou. Řekněte si, co chcete udělat (na příklad vytvořit displayID pro NPCčko) a hledejte. V našem modelovém příkladě budete chtít upravit DBC CreatureDisplayInfo. Jakmile najdete DBC, ve kterém se chcete hrabat (nebo pokud jste našli nějaké DBC, které vás z nějakého důvodu zajímá a nevíte, na co je), jděte na bod 2.

2. otevřte si Google a do vyhledávače zadejte ideálně celý název vašeho DBC (ideálně i s koncovkou .dbc) a najděte si k němu dokumentaci. Dávejte přednost WoW Dev wiki, je ve správě komunity Modcraftu a najdete v ní obvykle nejvíce (korektních) informací. Dávejte si pozor, abyste koukali do té části dokumentace, která je pro vaši verzi hry (tedy pro většinu to bude 3.3.5a rev 12340). Nepovažujte ji však za svatou, občas v ní něco chybí nebo je něco trochu chybně. Dávejte si také pozor na číslování sloupců, některé editory a články na wiki číslují 1. sloupec jako 0, jiné jako 1 a tím se vše posouvá. MyDBCEditor může na a z zero-based číslování přepínat.

3. zkopírujte si DBC, které chcete editovat, do DBFilesClient, tedy adresáře na upravená DBCčka. Ještě jednou doporučuji mít vždy snadno po ruce zálohu těch blizzlike a mít je skutečně striktně oddělená od upravených.

4. upravte DBC za pomocí jednoho z níže uvedených programů. Podle dokumentace většinou poznáte, co je na co a co jak funguje, pokud si nevíte rady, vždy se ještě můžete podívat, jak je uděláno něco blizzlike. Používejte techniku tzv. reverse engineeringu - sledujte hotové věci a postupně rozebírejte část po části, jak jsou vlastně poskládané. Tak se naučíte ve WoWku nejvíce.

5. upravená DBC přijdou do vašeho vlastního MPQ patche (viz. 4. díl návodů) do cesty /DBFilesClient/, pokud úpravy vyžadují, aby bylo změněné DBCčko k dispozici hernímu klientu (tedy zejména pokud jsou úpravy vizuálního rázu). U úprav, které se nějak týkají mechanismů ve hře, musíte DBC vložit do složky dbc ve složce s daty, kterou používá serverový emulátor. Nikdy neuděláte chybu, pokud svým upraveným DBCčkem přepíšete blizzlike/starší verzi DBCčka jak na serveru, tak ve hře, tedy ve vašem patchi. DBC úpravy na serveru vždy vyžadují restart serveru, aby se správně projevily.

6. některé úpravy, jako například zmíněná tvorba displayIDček NPCček, vyžadují také nějaké úpravy v databázi. Na databázi platí stejný postup jako na DBCčka - prohledejte tabulky, podle názvů a dokumentace dohledejte, které jsou ty, které vás zajímají a upravte je. Návod na to, jak se pracuje s MySQL databázemi tady uvádět moc nebudu, protože jednak nejsem žádný odborník na MySQL, druhak potřebné základy už jsou zmíněny v 3. dílu návodu, kde se během přípravy databází naučíte prakticky vše, co potřebujete do začátku. Je rozhodně užitečné se časem naučit i co nejvíce z jazyka SQL.


Malý tip k hledání správných tabulek: pokud nevíte, kde je něco uloženo, nahlédněte do dokumentace tabulky, která danou věc využívá. NPCčka jsou z velké části v creature_template ve world databázi. Pokud víte tohle, můžete se podívat do dokumentace creature_template, kde zjistíte, že modelid NPCčka jsou v creature_model_data ve world databázi. V dokumentaci k této tabulce už byste měli najít odkaz na to, že je zde používáno CreatureDisplayInfo.dbc. Když půjdeme ještě dál, zjistíte, že toto DBC používá také nějaká data z CreatureModelData.dbc a CreatureDisplayInfoExtra.dbc. WoW je hodně propojené - drtivá většina tabulek v DB odkazuje na další tabulky v DB a na alespoň jedno DBC, drtivá většina DBC pak odkazuje ještě na alespoň jedno jiné DBC. Vzniká tak rozsáhlý systém vzájemného odkazování se z tabulky na tabulku. Často je třeba projít až několik referencí, než se dostanete k místu, kde je upravováno, co chcete upravit.[/paragraph:3uflqf6t]

MyDBCEditor


[paragraph:3uflqf6t]MyDBCEditor je preferovaným editorem pro úpravy DBC. Je nejspolehlivější, dokáže nejvíce DBCček otevřít, upravit a uložit aniž by je nějak poškodil či bugnul. Ostatní editory a cesty, jak upravovat DBC, vám mohou někdy usnadnit práci a mohou fungovat v případech, kdy MyDBCEditor selže (některá DBC totiž na příklad vůbec neumí otevřít, hodí u nich error), nicméně pro změnu běžne bugují DBCčka, která v nich uložíte. Proto je preferovaný tento.

MyDBCEditor má dvě hlavní vady, pomineme-li, že nedokáže otevřít úplně všechna DBC. Nepodporuje žádnou cestu jak dělat jakékoliv masové úpravy - tedy žádné scripty, podmínky, hromadné příkazy, dokonce ani napsání stejné hodnoty do  sloupců - zapomeňte na podobný "neskutečně nadstandartní" luxus. Čeká vás nimrání se jedno políčko po jednom políčku. A druhá věc je fakt, že MyDBCEditor nemá žádné klávesové zkratky. Pokud chcete na příklad zkopírovat řádek, musíte kliknout pravým na řádek, pak kliknout na Copy Row a pak napsat číslo řádku, kam se má kopie hodit. Tedy hodně štěstí s vytvářením i třeba jen hloupých 50ti nových řádků. Omlouvám se za dávku arogantního sarkasmu, ale MyDBCEditor je jednoduše peklo na zemi, a co je nejhorší, je pořád prakticky to nejlepší, co máme.

Ještě poznámka na závěr, v MyDBCEditoru se spoustu hodnot zobrazuje zapsaných v hexadecimální (šestnáckové) soustavě. Mnohé bitové masky, ale i některá normální čísla se tak zobrazují a naopak, některé bitové masky se kdo ví proč zobrazují jako normální čísla. Pokud ale někde nějaké číslo upravujete nebo vyplňujete, vždy zadávejte desítkovou verzi čísla. O číselných soustavách a o tom, jak se pracuje s bitovými maskami (nebo také flagami) je poslední sekce tohoto článku.

Níže jsou alternativní cesty, jak DBC soubory upravovat. Před zvolením jakékoliv z nich doporučuji si udělat zálohu DBC, které se chystáte upravit. Tyto cesty totiž mají rozhodně větší než zanedbatelnou šanci DBC nějak poškodit během ukládání.[/paragraph:3uflqf6t]

Taliis


[paragraph:3uflqf6t]Pokud vám nějaké DBC nejde otevřít v MyDBCEditoru, záložní cestou je Taliis. Ten najdete v návodovém balíčku ze složce Nezarazene. Taliis je napsaný v Javě, takže ji budete potřebovat k jeho spuštění. Tento program sice dokáže otevřít více různých typů souborů a umí všechno možné, problém je ale v tom, že je silně zastaralý, dělaný pro TBC. Většina věcí v něm tedy nefunguje a DBCčka v něm upravované se nezřídka bugnou, proto jej berte jen jako záložní, používejte jej s opatrností a dělejte si zálohy. Taktéž se může stát, že se bugne i přímo Taliis a nejde v něm DBCčko upravovat apod. - pár restartů aplikace a pokusů znovu mi tohle zatím vždy dokázalo vyřešit.[/paragraph:3uflqf6t]

DBCUtil


[paragraph:3uflqf6t]DBCUtil je konvertor, který vám DBC, které na něj přetáhnete myší, upraví na CSV soubor. CSV je jednoduchý typ tabulky, podobně jako je třeba TXT jednoduchý typ textového souboru. Kromě toho, že můžete CSV upravovat ve WordPadu, poznámkáči nebo čemkoliv podobném na něj existují také editory, které jej otevřou jako tabulku. Tyto editory dokonce podporují i (mnohdy i dost pokročilé a hezké) hromadné úpravy a mělo by také jít dostat CSV přímo do MySQL serveru jako DB tabulku. Vše věci, které se mohou velice hodit. CSV soubor přetažený myší na DBCUtil je zase konvertován na DBC verzi. Jaký je v této cestě jak upravovat DBCčka háček? Více méně jen ten, že DBCčka vytvořená DBCUtilem občas nefungují jak mají nebo nefungují vůbec. To jde s trochou štěstí opravit, pokud se vyznáte přímo ve struktuře DBC a ovládáte úpravy skrze hexa editory, ale to je čistě něco pro programátory. Když už to tady naťukávám, dokumentace ke strukturám jednotlivých souborů užívaných ve WoW také najdete na WoW Devu. Kdyby se někdo měl k sestavení skutečně pořádného DBC editoru, má od komunity snad 1000 sušenek.

Pokud chcete jen upravit jedno číslo někde v jednom řádku, je konverze do CSV a pak zpátky zbytečně zdlouhavá.[/paragraph:3uflqf6t]

DBC Editor


[paragraph:3uflqf6t]V podstatě obdoba MyDBCEditoru, fungující velice podobně, jen s tím rozdílem, že ovládá alespoň úplně základní seřazování řádků podle hodnot v jednom sloupci. DBC Editor však bohužel občas blbne, viděl jsem jej několikrát poškodit DBCčko během ukládání, což mi MyDBCEditor nikdy neudělal, pokud něco už dokázal alespoň otevřít. V praxi jej vůbec nepoužívám a sem jej dávám spíše jen pro pořádek a jako naprosto záložní cestu.[/paragraph:3uflqf6t]

Na závěr něco k bitovým maskám


[paragraph:3uflqf6t]Věc, se kterou lidé, kteří nemají zkušenosti s programováním, často zápasí, jsou bitové masky. Najdete je v dokumentaci označené jako bitMask u typu proměnné ve sloupci. Někde jsou také označovány jako takzvané flagy. Pokud máte zkušenosti zejména s úpravami NPCček a částečně i itemů v DB, jistě jste se s nimi už setkali, i když o tom třeba nevíte.

Bitová maska je vždy celé číslo, které vyjadřuje, které možnosti vyjádřené maskou jsou "zaškrtnuté", a které ne. Jako modelový příklad použijeme třeba hratelné rasy.:
1. Human
2. Orc
3. Dwarf

Tyhle 3 nám budou pro ukázku stačit. Budeme mít bitovou masku, která nám každou z těchto 3 možností buďto zapne, nebo vypne. Přiřadí ji tedy 0 (vypnuto), nebo 1 (zapnuto). Z našich 3 možností některé náhodně označím jako zapnuté:
1. Human - 1
2. Orc - 0
3. Dwarf - 1

Dejme tomu, že naše bitová maska vyjadřuje, jaké rasy mohou používat item. Náš item můžou používat lidé a trpaslíci, ale orkové ne, mají nastavenou 0. Problém systému, který je výše je ten, že pro 3 možnosti potřebujeme 3 políčka, do kterých napíšeme 0 nebo 1. Pro 10 možností bychom potřebovali těch políček 10. Bitová maska nám vše zjednoduší do jednoho políčka, a to následovně.:

Hodnoty z masky se zapíšou od poslední po první za sebe. Tedy nejdříve hodnota u trpaslíka, pak u orka a pak u člověka. Tedy 1 0 1. Vznikne nám tak jedno číšlo. Toto číslo je v binární soustavě. Než začnete vyděšeně řvát, k čemu je binární číslo a že jim nerozumíte, pokud jste se s nimi nikdy nesetkali, převést binární číslo do klasického, decimálního, na jaká jsme zvyklí, je velice jednoduché.

Každou cifru v čísle použijete jako číslo u řádu. Malinko odbočím, ukažme si třeba číslo 153. Toto číslo můžeme rozložit na řády jako 1 stovka, 5 desítek a 3 jednotky. Když chceme toto číslo zase složit, stačí jen počet u každého řádu vynásobit hodnotou toho řádu - tedy 1×100 + 5×10 + 3×1 = 153. A úplně stejně to jde i u jiné než desítkové soustavy. V binární (dvojkové) soustavě vše funguje stejně, jen máme jiné hodnoty řádů. Jednotky jsou všude jednotky, ale místo desítek máme dvojky, místo stovek čtyřky, místo tisíců osmičky... šestnácky, 32ky, 64ky... A tak dále. Takže číslo 1 1 1 0 1 je v desítkové soustavě 1×16 + 1×8 + 1×4 + 1×0 + 1×1 = 29. Pokud chápete tohle, je dost jednoduché zjistit, co je číslo 1 0 1 v desítkové soustavě - je to 5, jedna čtyřka, nula dvojek a jedna jednotka. Číslo 5 vložené jako hodnota do bitové masky znamená, že 1. a 3. možnost jsou zapnuté, všechny ostatní vypnuté.

Je tu ještě jedna výjimka (tedy, ona to žádná výjimka není pokud rozumíte problematice z pohledu programátora, ale pro laika to nazývejme výjimkou) pro usnadnění. Hodnota -1 znamená vše zapnuto.

Proč tohle ukazuju? Mno, protože bitmapy nebo flagy se používají velice často. Podívejme se třeba na AreaTable.dbc. V tomto DBC se nastavují názvy lokací v mapě a jejich další nastavení. Můžete si všimnout, že sloupec číslo 5 je označený jako Flags s tím, že jednotlivé flagy, možnosti k zapínání a vypínání v bitové masce, jsou vypsány a vysvětleny níže. V tabulce nadepsané "enum AREATABLE_FLAGS" jsou všechny tyto možnosti napsány pod sebou.

Čísla, která jsou u jednotlivých možností jsou pro zkušenější s převody mezi číselnými soustavami usnadněním - jsou označena na začátku 0x, což vyjadřuje, že jde o čísla zapsaná v hexadecimální (šestnáckové) soustavě. Pro vás budou ale asi jen ošklivě matoucí. Bystřejší z vás si odvodí podle návodu k binární soustavě, jak funguje hexadecimální (tip pro opravdu hloubavé, ale vysvětlovat to tu už ani nebudu - každá 1 pozice v hexadecimální soustavě se dá zapsat přesně 4mi pozicemi v soustavě binární, tedy 0x10 je 0 0 0 1  0 0 0 0, tedy 1×16 = 16), ti méně matematicky založení si mohou prostě ručně odpočítat u každé možnosti k zapnutí, kolikátá je.

Řekněme, že budu chtít, aby měla má zóna zapnuto "AREA_FLAG_SNOW", "AREA_FLAG_ARENA" a z nějakého důvodu i "AREA_FLAG_SLAVE_CAPITAL". Chci sněžnou arénu co je hlavní město otroků. SNOW je 1. možnost, SLAVE_CAPITAL je 4. možnost a ARENA je 8. možnost. Binární číslo píšu odzadu (nezapomínat) a bude mít tedy 1čku na 1., 4. a 8. místě od zadu. Tedy 10001001. 9. a další možnosti zapínat nebudu, takže začátek čísla by byla jen dlouhá řada 0, nemusím ji tedy ani psát. 10001001 převedu do desítkové soustavy, tedy na 1×128 + 1×8 + 1×1 = 137. 137 je číslo, které zapíšu do 5. políčka v DBC, a to bude vyjadřovat, že zóna, ke které to napíšu, je SNOW, SLAVE_CAPITAL a ARENA.

Drobný tip: Truice, pokud jej máte, počítá hodnoty bitových masek za vás, pouze v něm zaškrtáváte možnosti. Můžete si přes něj výpočty hodnot usnadnit.

<- 04 - Vytváření a editace MPQ archivů
-> 06 - WoW Model Viewer (WMV)[/paragraph:3uflqf6t]
« Last Edit: September 15, 2015, 05:41:48 pm by Admin »
English YT tutorial channel. Check it out if you preffer videos over walls of text.:
https://www.youtube.com/AmarothEng

Want to support me for my releases and/or tutorials? You can send donation via Paypal to:
jantoms@seznam.cz

Alastor

  • Contributors
  • Creator of Worlds
  • *****
  • Posts: 1105
    • View Profile
Re: 05 - Editace DBC
« Reply #1 on: September 01, 2015, 08:50:33 pm »
Jen bych chtěl dodat že bod 1. už není tak úplně pravda

Vývoj člověk nezastaví a říct že to prostě " Není " se může ze dne na den změnit proto bych se v těchto vývojářských věcech k takovým obratům neotáčel ale to jedno pointa je jiná


Tento program mi byl dodán když jsem měl problémy s DBc z novějších expanzí ( vše nad Wotlkem )
omlouvám se ale už nevím kdo je skutečný autor každopádně je to program ve fázi vývoje a na naštěstí není psán jediným jazykem který bych zvládl a umí kompilovat .exe ( visual basic ) tahle sranda je jiné kafe ( C#)
každopádně - mě otevřela 100% DBCček a taky je umí exportovat do SQL a podobně ale opravdu chci připomenout že je to alfa a je tu tisícero způsobů jenž najdete nebo shledáte za nefunkčí části programu nebo prostě bugy v něm samozřejmě pokud má někdo chuť vývoj si může zkusit nebo respektive může zkusit si stím hrát a vytvořit tak něco lepšího než teď máme :D
« Last Edit: January 01, 1970, 01:00:00 am by Admin »
No matter how fast light travels it finds the darkness has always got there first and is waiting for it
Star Citizen Referral Code : STAR-XNFS-HVL9

Amaroth

  • Contributors
  • Creator of Worlds
  • *****
  • Posts: 1219
    • View Profile
    • Amaroth's Tools
Re: 05 - Editace DBC
« Reply #2 on: September 01, 2015, 08:57:20 pm »
Že by se na to konečně někdo podíval? Huráááá.
« Last Edit: January 01, 1970, 01:00:00 am by Admin »
English YT tutorial channel. Check it out if you preffer videos over walls of text.:
https://www.youtube.com/AmarothEng

Want to support me for my releases and/or tutorials? You can send donation via Paypal to:
jantoms@seznam.cz

Alastor

  • Contributors
  • Creator of Worlds
  • *****
  • Posts: 1105
    • View Profile
Re: 05 - Editace DBC
« Reply #3 on: September 01, 2015, 09:06:11 pm »
Osobně bych to svěřil Valanirovi s Céčkem mu to jde a když mu dávám přesné pokyny co to má dělat tak je schopný vytvořit opravdu efektivní programy :D ( jakože mi už 2. napsal )
« Last Edit: January 01, 1970, 01:00:00 am by Admin »
No matter how fast light travels it finds the darkness has always got there first and is waiting for it
Star Citizen Referral Code : STAR-XNFS-HVL9