Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  

Spichy

Members
  • Content count

    333
  • Joined

  • Last visited

  • Days Won

    10

Posts posted by Spichy


  1. float ADDS_COORDS[9][3] =
    {
    	{3269.590f, -3161.287f, 297.423f},
    	{3277.797f, -3170.352f, 297.423f},
    	{3267.049f, -3172.820f, 297.423f},
    	{3252.157f, -3132.135f, 297.423f},
    	{3259.990f, -3126.590f, 297.423f},
    	{3259.815f, -3137.576f, 297.423f},
    	{3308.030f, -3132.135f, 297.423f},
    	{3303.046f, -3180.682f, 297.423f},
    	{3313.283f, -3180.766f, 297.423f}
    };
    
    ......
    ......
    ......
    
    Unit* SummonedZombies[9];
    
    for(int i = 0; i < 9; i++)
    {
     SummonedZombies[i] = me->SummonCreature(16360,ADDS_COORDS[i][0],ADDS_COORDS[i][1],ADDS_COORDS[i][2],0,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,80000);
     if(SummonedZombie[i])
     {
    	   pTarget = SelectUnit(SELECT_TARGET_RANDOM,0);
    	   if (pTarget)
    	   SummonedZombie[i]->AddThreat(pTarget,1.0f);
     }
    }
    

     

    Psal jsem to na rychlo, nevím jestli tam mam nějakou chybu, kdyžtak si to uprav :)

    • Upvote 1

  2. Zdravím, nevím jestli je toto fórum ještě aktivní, dlouho jsem tu nebyl, ale přesto se zeptám.

     

    Tak trochu si hraji s klientem a dělám vlastní spell systém, ale mam problém s itemy.

    Itemy i sockety jsem vytvořil vlastní v DBC, ale stále se mi nezobrazují správně v inventáři a sockety mi v itemech mizí úplně (co mají dělat dělají, ale vizualizace chybí)

     

     

    zde je ukázka jak systém funguje a pro představu co myslím tou špatnou vizualizací.

    Za každou radu děkuji.

     

    (Patch mám vytvořený)

     

    S pozdravem, Spichy.


  3. Datový typ sloupce `deleteInfos_Account` nechce přijmout zadanou hodnotu - nekompatibilní tabulka `characters` s jádrem. Nějaký update jste vynechal, pokud ne, napište sem strukturu tabulky.

     

    Edit: Error sice popisuje co jsem napsal výše, ale dotaz používá pro tento sloupec nulovou hodnotu. Zkuste sem spolu se strukturou vložit celý výpis logu.

     

    Dotaz pasuje do této struktury:

    DROP TABLE IF EXISTS `characters`;

     

    CREATE TABLE `characters` (

    `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier',

    `account` int(11) unsigned NOT NULL default '0' COMMENT 'Account Identifier',

    `data` longtext,

    `name` varchar(12) NOT NULL default '',

    `race` tinyint(3) unsigned NOT NULL default '0',

    `class` tinyint(3) unsigned NOT NULL default '0',

    `gender` TINYINT UNSIGNED NOT NULL default '0',

    `level` TINYINT UNSIGNED NOT NULL default '0',

    `xp` INT UNSIGNED NOT NULL default '0',

    `money` INT UNSIGNED NOT NULL default '0',

    `playerBytes` INT UNSIGNED NOT NULL default '0',

    `playerBytes2` INT UNSIGNED NOT NULL default '0',

    `playerFlags` INT UNSIGNED NOT NULL default '0',

    `position_x` float NOT NULL default '0',

    `position_y` float NOT NULL default '0',

    `position_z` float NOT NULL default '0',

    `map` int(11) unsigned NOT NULL default '0' COMMENT 'Map Identifier',

    `instance_id` int(11) unsigned NOT NULL default '0',

    `dungeon_difficulty` tinyint(1) unsigned NOT NULL default '0',

    `orientation` float NOT NULL default '0',

    `taximask` longtext,

    `online` tinyint(3) unsigned NOT NULL default '0',

    `cinematic` tinyint(3) unsigned NOT NULL default '0',

    `totaltime` int(11) unsigned NOT NULL default '0',

    `leveltime` int(11) unsigned NOT NULL default '0',

    `logout_time` bigint(20) unsigned NOT NULL default '0',

    `is_logout_resting` tinyint(3) unsigned NOT NULL default '0',

    `rest_bonus` float NOT NULL default '0',

    `resettalents_cost` int(11) unsigned NOT NULL default '0',

    `resettalents_time` bigint(20) unsigned NOT NULL default '0',

    `trans_x` float NOT NULL default '0',

    `trans_y` float NOT NULL default '0',

    `trans_z` float NOT NULL default '0',

    `trans_o` float NOT NULL default '0',

    `transguid` bigint(20) unsigned NOT NULL default '0',

    `extra_flags` int(11) unsigned NOT NULL default '0',

    `stable_slots` tinyint(1) unsigned NOT NULL default '0',

    `at_login` int(11) unsigned NOT NULL default '0',

    `zone` int(11) unsigned NOT NULL default '0',

    `death_expire_time` bigint(20) unsigned NOT NULL default '0',

    `taxi_path` text,

    `arenaPoints` int(10) unsigned NOT NULL default'0',

    `totalHonorPoints` int(10) unsigned NOT NULL default'0',

    `todayHonorPoints` int(10) unsigned NOT NULL default'0',

    `yesterdayHonorPoints` int(10) unsigned NOT NULL default'0',

    `totalKills` int(10) unsigned NOT NULL default'0',

    `todayKills` smallint(5) unsigned NOT NULL default'0',

    `yesterdayKills` smallint(5) unsigned NOT NULL default'0',

    `chosenTitle` int(10) unsigned NOT NULL default'0',

    `watchedFaction` int(10) unsigned NOT NULL default'0',

    `drunk` smallint(5) unsigned NOT NULL default'0',

    `health` int(10) unsigned NOT NULL default'0',

    `powerMana` int(10) unsigned NOT NULL default'0',

    `powerRage` int(10) unsigned NOT NULL default'0',

    `powerFocus` int(10) unsigned NOT NULL default'0',

    `powerEnergy` int(10) unsigned NOT NULL default'0',

    `powerHappiness` int(10) unsigned NOT NULL default'0',

    `deleteInfos_Account` int(11) UNSIGNED default NULL,

    `deleteInfos_Name` varchar(12) default NULL,

    `deleteDate` bigint(20) default NULL,

    `latency` int(11) unsigned NOT NULL default '0',

    PRIMARY KEY (`guid`),

    KEY `idx_account` (`account`),

    KEY `idx_online` (`online`),

    KEY `idx_name` (`name`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Player System';

     

     

    Prosím o kontrolu datových typů u sloupců této tabulky.


  4. Musíte si nejprve vytvořit složku build, ze které použijete příkaz cmake. (mkdir build && cd build && cmake [parametry])

    Neboli nelze kompilovat ze source složky, vždy se musí vytvořit složka rozdílná.


  5. Postupujte tak, jak jste postupoval, chybu nemáte v revizi nebo špatné kompilaci, chyba je pouze na straně databáze. Vše co potřebujete k plné funkčností je pouze nahrání zmiňovaných sql`s ze složky sql\updates. Složku sql jste určitě otvíral, jsou v ní také sql`s pro prázdné databáze realm a characters.

    Edit: doporučuji projít link viz výše a dodělat body v postupu pro zprovoznění serveru, které jste doposud neudělal.

    Snad jsem pomohl, přeji hezký večer.


  6. Proměnná "me" je chráněnou součástí třídy UnitAI a plní se v jejím konstruktoru. Tato proměnná je však v základu trinitycore, takže nevím, co by jste chtěl definovat. Možná jsem tak úplně nepochopil otázku. V této http://www.trinitycore.net/ dokumentaci můžete hledat veškeré funkce, proměnné, které trinitycore ubsahuje, možná díky ní najdete odpověď na svou otázku rychleji.

    • Upvote 1

  7. Aha, to je přesně to co jsem potřeboval vědět..

    MTEX udává zero-terminated odkazy k *.BLP, MMDX udává zero-terminated odkazy k *.M2, které se v mapě nachází. MMID pak udává offset který referuje pro MDDF blok s doodads,.

     

    Zkusím načíst blok do bufferu a s 0x00 explodovat data do vektoru, pak dám vědět. Zatím děkuji.

     

    Edit:

    char * ReadInFile(int pos, int len)
    {
     char * ret = new char[len];
     _mInFile.seekg(pos);
     _mInFile.read(ret, len);
     _mInFile.seekg(mInFilePos);
     return ret;
    }
    ...
    struct MTEX
    {
     uint32 signature;
     int size;
    //char* fileList[1024];
     std::vector<std::string> filenames;
    };
    ...
    void AdtFile::LoadMTEX(int len)
    {
     mTexData.signature = 'XETM';
     mTexData.size = len;
     char * buffer = ReadInFile(mHdrData.ofsMtex + 28, len);
     vector<string> vec;
     stringstream ss;
     for(int i = 0; i < len; i++)
     {
    if(buffer[i] != 0x00)
      ss << buffer[i];
    else {
      vec.push_back(ss.str());
      ss.str("");
      ss.clear();
    }
     }
     mTexData.filenames = vec;
     for(vector<string>::iterator iter = mTexData.filenames.begin(); iter != mTexData.filenames.end(); ++iter)
       printf("%s \n", *iter);
    }
    

     

    Output:

    Tileset\Wetlands\Wetlandsdirt01.blp
    Tileset\TirisFall\TirisFallDirtRock07.blp
    Tileset\TirisFall\TirisFallRockyMudGrass.blp
    Tileset\TirisFall\TirisFallRockyMudGrassHighlight.blp
    Tileset\TirisFall\TirisfallShore.blp
    Tileset\RedRidge\RedridgeRockRoadBase.blp
    Tileset\Elwynn\ElwynnDirtBase2.blp
    Tileset\TirisFall\TirisFallgrass01.blp
    Tileset\Duskwood\DuskwoodRockGravel.blp
    Tileset\Deadwind Pass\DeadwindPassRockBase.blp
    

     

    Děkuji mockrát :)

    • Upvote 2

  8. Jde o soubory *.ADT, ze hry World of Warcraft (World/Maps/). Abych pravdu řekl, nenapadá mě způsob jakým využít nothrow, osobně si myslím, že je jednodušší načíst data rovnou jako char, jelikož data udávají cestu k texturám uložené v MPQ.(Tileset\Wetlands\Wetlandsdirt01.blp,...) Daná data ze souboru ukládám do několika struktur, abych je mohl později editovat a upravená data uložit do nového souboru.


  9. vektor by byl dobrý, pokud by šlo o blok dat pro array, tady jsem potřeboval použít buffer pro text s neurčenou délkou.

     

    EDIT:

    Tak jsem to vyřešil. Přepsal jsem to do OOP, přidal templates pro zmenšení kódu.

    Snippet:

     

     

     

    template<typename T> T ReadInFile()  
    {
     T ret;
     _mInFile.read((char*)&ret, sizeof(T));
     mInFilePos = (int)_mInFile.tellg();
     return ret;
    }
    template<typename T> void ReadInFile(T& var, int size = 0)
    {
     int s = size > 0 ? sizeof(var) : size;
     _mInFile.read((char*)&var, s);
     mInFilePos = (int)_mInFile.tellg();
    }
    ...
    struct MTEX
    {
    uint32 signature;
    int size;
    char* fileList[1024];
    };
    ...
    mVerData = ReadInFile<MVER>();
    mHdrData = ReadInFile<MHDR>();
    int mTexDataSize  = (int)ReadInFile<uint32>(mHdrData.ofsMtex + 24); //24 bytes = MVER(12) + MHDR hdr(4) + MHDR size(4) + MHDR flags(4)
    ReadInFile<MTEX>(mTexData, mTexDataSize);
    ...
    

     

     

     

    Stále se zajímám, zda je možný jiný způsob, který by více šetřil paměť.

    Díky, Spichy.

×