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:  

Lukasas

Members
  • Content count

    332
  • Joined

  • Last visited

  • Days Won

    14

Everything posted by Lukasas

  1. Co budeme potřebovat ? NPC Zdrojový kód emulátoru TrinityCore Visual Studio 2008 / Visual C++ 2008 CMake Takže, začneme tím že nainstalujeme CMake, poté rozbalíme Zdrojový kód TrinityCore například do 'C:\trinitycore\Core\' . Jakmile budeme mít rozbaleno, spustíme CMake Jak máme kolonku Where is the source code (Kde je zdrojový kód): dáme C:\trinitycore\Core (CMake dá obrácené lomítka '/', necháme tak ) Do kolonky Where to build binares ( Kde vytvořit binární soubory ( projektové soubory do VS ze kterých vytvoříme binární soubory ) ): C:/trinitycore/Core/win po vyplnění dáme Configure Otevře se nám okno s výběrem Generování projektu a výběrem kompilátorů. My si vybereme Visual Studio 9 2008 ( pro 32-bitový systém) nebo Visual Studio 9 2008 Win64 ( pro 64-bitový systém ) a kompilátor necháme výchozí ( Use default native compilers ) a Finish jak budeme mít vše nastaveno (viz screen) dáme Generate. Po vypsání Generating done můžeme CMake zavřít a otevřít Visual Studio 2008 / Visual C++ 2008 kde dáme File -> Open -> Project/Solution... a najedeme si do složky C:\trinitycore\Core\win\ a otevřeme project TrinityCore.sln Zde si otevřeme project scripts a v něm filter Source Files. Zde si můžeme udělat vlastní filter například Moje NPC. Klikneme pravým tlačítkem na náš nový filtr a dáme Add -> New Item... a vybereme C++ File (.cpp), do Name: napíšeme název našeho NPC ( ať víme co tento soubor obsahuje ) Já použiju pro tento tutoriál Patchwerk . Uplně nazačátek musíme vložit soubor ScriptPCH.h který nám otevře všechny možnosti tvoření #include "ScriptPCH.h" pod náš includ si můžeme nadefinovat spelly, texty, atd... , které naše NPC bude používat. Já použiju Cleave , Death Coil. #define spell_cleave 845 #define spell_death_coil 6789 nyní si vytvoříme třídu my_patchwerk která bude dědit CreatureScript a ve které budeme všechno tvořit. class my_patchwerk : public CreatureScript { public: // po tomto bude všechno dále veřejné (bude mít do věcí pod public přístup "cokoli" viz. Zapouzdření) my_patchwerk() : CreatureScript("my_patchwerk") { } // budeme potřebovat do databáze struct my_patchwerkAI : public ScriptedAI { my_patchwerkAI(Creature *c) : ScriptedAI(c) {} uint32 tcleave; // vytvoříme si proměnnou která bude sloužit jako timer pro cleave uint32 tdeathcoil; // ----------------||----------------------------------- death coil void Reset() { tcleave = 15000; // Čas v milisekundách kdy použije Cleave (15 sekund) 1 sekunda = 1000 milisekund tdeathcoil = 30000; } void EnterCombat(Unit* /*who*/) // co se stane když vstoupí do kombatu { me->MonsterYell("Teď zemřeš červe.", LANG_UNIVERSAL, NULL); // zakřičí v univerzálním jazyku pro všechny } void JustDied(Unit* /*killer*/) { me->MonsterYell("Patchwerk .... neeeumííírááááááá.... ehl ...", LANG_UNIVERSAL, NULL); } void KilledUnit(Unit* /*victim*/) // co se stane když zabije hráče { me->MonsterYell("Takhle vás pozabíjím všechny !!!", LANG_UNIVERSAL, NULL); } void UpdateAI(const uint32 diff) { if (!UpdateVictim()) // pokud nemá cíl, nebude nic dělat return; if (tcleave <= diff) { DoCast(me->getVictim(), spell_cleave, true); // vykastí spell na svůj cíl tcleave = 15000; // znovu nastaví tcleave na 15 sekund } else tcleave -= diff; // odečítá z tcleave UpdateMapy (100 - 60 v configu MapUpdateInterval) if (tdeathcoil <= diff) { DoCast(me->getVictim(), spell_death_coil, true); me->MonsterYell("Eat This !", LANG_UNIVERSAL, NULL); tdeathcoil = 30000; } else tdeathcoil -= diff; DoMeleeAttackIfReady(); // bude útočit, když bude moci } }; CreatureAI* GetAI(Creature* pCreature) const { return new my_patchwerkAI (pCreature); } }; void AddSC_my_patchwerk() { new my_patchwerk(); } Nyní máme hlavní kód hotový a musíme zapsat naše NPC do souboru ScriptLoader.cpp který najdeme v projektu game -> Source Files v ScriptLoader.cpp najdeme řádek #ifdef SCRIPTS a přidáme void AddSC_my_patchwerk(); poté v tom samém souboru najdeme řádek void AddCustomScripts() a pod #ifdef SCRIPTS přidáme AddSC_my_patchwerk(); a nyní můžeme zdojový kód zkompilovat (Build -> Build Solution...) Práci se zdrojovým kódem máme hotovou a pustíme se do DB části. Do Databáze world aplikujeme SQL příkaz: UPDATE `creature_template` SET `ScriptName` = "my_patchwerk" WHERE `entry` = 31099; tento příkaz nastaví NPC s ID 31099 ScriptName "my_patchwerk". Nyní máme vše hotové a můžeme jít otestovat Chyby které mohou nastat s CMake: OPENSSL_EXTRA_LIBRARIES-NOTFOUND ---\ OPENSSL_INCLUDE_DIR-NOTFOUND -----------| http://code.google.com/p/openssl-for-windows/downloads/list OPENSSL_LIBRARIES-NOTFOUND ---------------/ po stažení rozbalte a zadejde cestu do CMake: nebo: http://www.wowresource.eu/index.php?showtopic=21503 Dekuji za pozornost a přeji hodně štěstí se scriptováním.
  2. Online Hráči <Cataclysm Ready>

    Jednoho dlouhého nudného večera ( 16.2.2011 ) jsem napsal web pro zobrazení online hráčů. Jsou zde i charactery z Cataclysmu (Worgen, Goblin). Doufám že to využijete a že se vám to bude líbit. Nová verze: http://filebeam.com/f240e38bc1eda7880d7afba7f4ee4dd1 Zde máte Screenshot: Odkazy ke stažení: http://filebeam.com/866e777ec0b1868aacbb03b73feca1c9
  3. Problém se mysql_num_rows

    mysql_num_rows má jeden parametr a to je výsledek nějakýho dotazu takže ne: $dotaz = mysql_num_rows("SELECT kod FROM s1_code WHERE kod='f1v02l'"); ale: $dotaz = mysql_num_rows(mysql_query("SELECT kod FROM s1_code WHERE kod='f1v02l'")); a to ti potom vrátí počet vybraných řádků v tabulce
  4. PHP dynamika

    no, to je jedno, nesmysl jsem viděl už v tom, že to tam vůbec je. Možná ne složitý, ale určitě zbytečné
  5. PHP dynamika

    Aneb proč to dělat jednoduše ?: if(strlen($page) > 11){ die("Neplatný pokus o změnu interní stránky!"); } Když to jde složite. :
  6. Realmd nefunguje

    dost by pomohlo, kdyby jsi sem dal log od serveru...
  7. EPGP web system

    mohl bych poprosit o reupload ? Děkuji.
  8. Jak Nascriptovat NPC v TC

    Co k tomu budeme potřebovat ? NPC Zdrojový kód emulátoru TrinityCore Visual Studio 2008 / Visual C++ 2008 Klávesnici Monitor Bednu Pokud máme všechny potřebné věci, můžeme začít ! Otevřeme si projekt TrinityCore&Script VC90 ve Visual Studio 2008 / Visual C++, a najedeme si do game>>Scripting>>Custom (ale můžete si vytvořit vlastní Filtr, je v podstatě jedno kam to dáte ale je v tom aspoň pořádek) Nascriptujeme třeba General Marcus Jonathan a vytvoříme si zde nový soubor ADD>>New Item>>C++ File(.cpp) a název dáme General_Marcus_Jonathan.cpp takže, na začátek si naincludujeme scripty TrinityCore: #include "ScriptPCH.h" nyní si můžeme nadefinovat nějaké spely třeba Bone Slice od Lorda Marrowgara a Holy Light od Paladinů #define BoneSlice 69055 #define HolyLight 48782 Definice jsou pouze taková malá pomůcka aby si programátor nemusel pořád pamatovat čísla ale aby místo nich psal "jména" (BoneSlice místo 69055, HolyLight místo 48782) nyní si nadefinujeme ID našeho NPC #define GeMaJo 466 definice máme zasebou, teď se putíme do scriptování takže musíme vytvořit struktůru (scriptovou) našeho NPC a do ní budeme psat, co naše NPC bude dělat. struct boss_GeMaJo : public BossAI { boss_GeMaJo(Creature* c) : BossAI(c, GeMaJo) {} //nyní si nadefinujeme timery, vpodstatě jsou to neoznačené čisla (uint32) max 32-bitové uint32 t_holylight; uint32 t_boneslice; //teď reset, což znamená, že když se dostane do kombatu, tak aby se nejdřív resetovaly všechny věci (aby hned nekastil všechny spely... a rovnou si nadefinujeme, co kdy má kastit ( v milisekundách 1 sekunda = 1000 milisekund) void Reset() { t_holylight = 10000; t_boneslice = 3000; } // teď můžeme udělat, co udělá naše NPC když se dostane do kombatu ? nic mě nenapadá void EnterCombat(Unit * target) { me->MonsterYell("Za Alianci !!",LANG_UNIVERSAL,NULL); } // nebo, když někoho zabije co udělá, nic mě nenapadá void KilledUnit(Unit * victim) { me->MonsterYell("Kdo další chce okusit hňěv aliance ?!",LANG_UNIVERSAL,NULL); } // nebo, když zmře, nic mě nenapadá void JustDied(Unit * killer) { me->MonsterYell("Padnout za Alianci !",LANG_UNIVERSAL,NULL); } // a nakonec zprovoznit ty timery, to uiDiff je takovej timer, kterej je napsanej v configách jako MapUpdateInterval void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; // musíme vytvořit podmínku, že pokud je náš timer menší nebo se rovná uiDiff tak se daná věc provede if(t_holylight <= uiDiff) { DoCast(me, HolyLight, false); //to znamená že, DoCast - Casti, "me" je cíl, což znamená nasebe, HolyLight je ID toho spelu a false to je jestli je to triggered // a znovu nastavíme odpočítávání timeru t_holylight = 10000; // a nebo pokud není náš timer mentší nebo se rovná uiDiff tak budeme odpočítávat }else t_holylight -= uiDiff; // a to samé s druhým spelem ( me->getVictim() znamená že to použije na cíl (na co právě utočí)) if(t_boneslice <= uiDiff) { DoCast(me->getVictim(), BoneSlice, false); t_boneslice = 3000; }else t_boneslice -= uiDiff; // a nakonec aby potom normálně útočil DoMeleeAttackIfReady(); } // tady tou závorkou zavíráme UpdateAI }; // a tadytou celou strukturu //nyní zaregistrovat NPC CreatureAI* GetAI_boss_GeMaJo(Creature* c) { return new boss_GeMaJo (c); } // a registrace scriptu void AddSC_boss_GeMaJo() { Script *newscript; newscript = new Script; newscript->Name = "boss_GeMaJo"; // to boss_GeMaJo budeme potřebovat do databáze newscript->GetAI = &GetAI_boss_GeMaJo; newscript->RegisterSelf(); } takže script našeho NPC máme, ale musíme ho ještě přidat do scriptloaderu takže: game>>Scripting>>System a otevřeme si ScriptLoader.cpp najdeme si řádek //custom a pod něj vložíme void AddSC_boss_GeMaJo(); potom si najdeme #ifdef DO_SCRIPTS //custom a pod //custom vložíme: AddSC_boss_GeMaJo(); a C++ sekci máme zasebou, teď musíme náš script dat NPC do databáze takže: UPDATE `creature_template` SET ScriptName = "boss_GeMaJo" WHERE entry = 466; a máme hotovo ! Doufám že vám to pomůže. Edit 1 : už mě neco napadlo Edit 2 : bLuma: zapomněl jsem, jsem jenom člověk a k tomu BossAI, napadlo mě na bosa tak dělám na bosa Edit 3 : odkazyyy
  9. Prosba o pomoc

    správně ".NET Framework 3.5" máš to nainstalované ?
  10. Tc World nejde zapnout a Db problem

    Chtěl bych jen dodat, že je dost nepravděpodobné aby se nějaká data ztratila jelikož mysql využívá TCP které je spíše bezeztrátové. Takže jestli když použije jakýkoli mysql client(konzole, sqlyog, navicat...), bude to jedno
  11. Malá rada k PHP

    Pro čekání 24 hodin by jsi mohl při odeslání formuláře vytvořit soubor ve kterém bude uloženo datum/čas odeslání a poté budeš jen porovnávat jestli už je to 24 hodin. V tvém tvém kódu vidím že ve funkci nahodne heslo definuješ proměnnou $heslo a poté pro připojení do db používáš také proměnnou heslo. Pokud se nepletu tak proměnná vytvořená ve funkci existuje pouze v té funkci takže by tu funkci chtělo poupravit aby vracela hodnotu (to heslo)
  12. Proč by jsi měl vytvářek každýmu vlákno sender ? Vytvoř si nějaký dynamický pole či mapu a vkládej to tam. Potom můžeš jen přes hlavní vlákno odeslat všem nebo jen někomu data který chceš.
  13. Nevím proč řešíš kolik těch vláken poběží... Já bych to všechno nechal připojovat do vláken, tam bych to zadržel read a přes jiný vlákno (třeba hlavní) bych všem připojeným klientům poslal zprávu. Ty "dis" si ukládej do nějakého pole nebo mapy a potom je cyklem odtud "vyděláš" a pošleš přes to zprávu edit: sice o java moc nevím, ale tímto způsobem bych to asi udělal já
  14. Existuje ta složka Logs ? pokud ne, logy se vytvářet nebudou... Je jedno jestli se tam napíše Logs nebo ./Logs
  15. [C++]Gunship Battle

    Requiere datos de posiciones, correcciones y concluir soporte SQL Vyžaduje údaje o poloze, opravy a kompletní podporu SQL const Position SpawnZafodAlliance = {0.0f, 0.0f, 0.0f, 0.0f}; const Position SpawnZafodHorde = {0.0f, 0.0f, 0.0f, 0.0f}; tady bude nejspíš chyba
  16. Víš že v C# můžeš odchytit všechny chyby a dokonce si udělat takový menší "trasování" který by se ti potom do toho logu psalo ? Měl by jsi to přehlednější a uživatelé by se nemuseli zhrozit, když tu hlášku uvidí
  17. Bug Report: V logu mám toto: Ale crash který nastal při generování buněk se tam nezapsal
  18. Ten program je zajímavý nápad ale máš docela divný věci v zdrojovém kódu . Ve funkci readXML_toObject(string path_filename... kontroluješ jestli path_filename existuje, pokud ne vypíše zprávu "File not found" ale script dále pokračuje což může zapříčinit pád , to samé funkce readSettings, ve funkci importTemplate by jsi mohl ověřit zda byl nějaký soubor vybrán jelikož když nic nevybereš program crashne a řekl bych že funkce progressProgBar je tam zbytečně. Když to všechno doladíš bude to perfektní věcička
  19. Plná odinstalace Microsoft Office 2010 [Win7]

    Dej spustit(Win + R) a tam napiš %appdata% . Tam to skus promazat.
  20. Icc buff do jinych raid instaci?

    Toto by ti mohlo pomoct: http://www.trinitycore.info/Spell_area_tc2
  21. Jak vytvořit vlastní titul na MaNGOSU

    Jde, úpravou clienta a DBC souborů.
  22. ArcEmu Pripojeni k MySQL (Problém)

    chibu ? co to je ? Access deined for user 'root'@'localhost' (using password : YES) Přistup odepřen pro uživatele 'root'@'localhost' (používání hesla : ANO) Žeby špatné heslo ?!
  23. Nastaveni ? :(

    otevíráš starý topic tím, že si sám sobě odpovíš ?
  24. using System.IO; byte[] psat = Encoding.ASCII.GetBytes("Text k psaní..."); FS.Write(psat, 0, psat.Length); byte[] cist = new byte[1024]; FS.Read(cist, 0, cist.Length); textBox1.Text = Encoding.ASCII.GetString(cist);
  25. Použiješ FileStream: FileStream FS = new FileStream("./test.txt", FileMode.Open, FileAccess.ReadWrite); poté jen FS.Write FS.Read
×