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:  

filipoliko

Members
  • Content count

    343
  • Joined

  • Last visited

  • Days Won

    12

Posts posted by filipoliko


  1. Doporučuju se učit smartAI, je jednoduchý a dokážeš s ním skoro všecko:P Na tom se není ani moc co učit, stačí stáhnout Truice a tam máš popisky :-)


  2. ok, tak můj poslední nápad(asi) :X

                void OnPlayerEnter(Player* player)
               {
                   QueryResult result = CharacterDatabase.PQuery("SELECT icc FROM characters WHERE guid='%u'", player->GetGUIDLow());
                   uint32 icc_id = (*result)[0].GetUInt32();
                   if (icc_id == 0)
                   {
                     player->TeleportTo(571.0f, 5790.0f, 2071.47998f, 636.065002f, 3.475029f, 0);
                     player->GetSession()->SendNotification("You haven't got any permission for this instance!");
                   }
                   else
                   {
                                             if (!TeamInInstance)
                                             {
                                                TeamInInstance = player->GetTeam();                
                     }                
                   }
               }

    • Upvote 1

  3. zkus takhle :) snad ani není potřeba ten cyklus, když máš jen jednu hodnotu ..

                void OnPlayerEnter(Player* player)
               {
                   QueryResult result = CharacterDatabase.PQuery("SELECT icc FROM characters WHERE guid='%u'", player->GetGUIDLow());
    
                   if (result == 0)
                   {
                     player->TeleportTo(571.0f, 5790.0f, 2071.47998f, 636.065002f, 3.475029f, 0);
                     player->GetSession()->SendNotification("You haven't got any permission for this instance!");
                   }
                   else
                   {
                                             if (!TeamInInstance)
                                             {
                                                TeamInInstance = player->GetTeam();                
                     }                
                   }
               }


  4. ...

    PS: Všimli jste si toho TODO? Možná by stálo za zvážení dopsat tam ten systém posílání itemů poštou, když hráč nemá místo v bágu. Co vy na to? :huh:

    Koukal jsem teď na to, jak to proplést s fcí SendMailTo, ale nějak jsem se nedopátral k tomu jak přiřadit k mailu item.

    Nejspíš by šlo uplně jednoduše to udělat pomoci tabulky mail_external..

    bool Player::AddItem(uint32 itemId, uint32 count)
    {
       uint32 noSpaceForCount = 0;
       uint32 origCount = count;
       ItemPosCountVec dest;
       uint8 msg = CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count, &noSpaceForCount);
       if (msg != EQUIP_ERR_OK)   // convert to possible store amount
           count = noSpaceForCount;
    
       if (count == 0 || dest.empty()) // can't add any
       {
           WorldDatabase.PExecute("INSERT INTO mail_external VALUES (NULL,%u,'Support','Here it is.',0,%u,%u)",GetGuid(),itemId,origCount)
           ChatHandler(this).PSendSysMessage("You don't have any space in your bags. Check mailbox.");
           return true;
       }
    
       Item* item = StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
       if (item)
           SendNewItem(item, count, true, false);
       else
           return false;
       return true;
    }

     

    -- Pokud chápu dobře, tak count nabere před posláním mail hodnotu noSpaceForCount, tak jsem přihodil pomocnou proměnnou. PS: šlo by to udělat krásněji, ale nevím vůbec, jestli s mail_external je to dobrej nápad:P

    • Upvote 2

  5. a38e77abafc81f4cef1756c9d9b8938d81af0fa9.png

     

    Patch opravuje quest The Scryer's Scryer.

     

    Core:

    diff -r dbd97508aefc -r 3520da75bacf src/game/GameObject.cpp
    --- a/src/game/GameObject.cpp    Sun Oct 02 17:05:38 2011 +0200
    +++ b/src/game/GameObject.cpp    Sun Oct 02 18:58:50 2011 +0200
    @@ -1074,6 +1074,9 @@
                   if (info->camera.eventID)
                   GetMap()->ScriptsStart(sEventScripts, info->camera.eventID, player, this);
    
    +               if (GetEntry() == 187578)
    +               SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
    +
                   return;
           }
           //fishing bobber

     

    SQL:

    UPDATE gameobject_template SET type=13, data1=164, data2=16547 WHERE entry = 187578;

    • Upvote 4

  6. a38e77abafc81f4cef1756c9d9b8938d81af0fa9.png

     

    Po aplikaci tohoto patche se už nestane, že se hráč po vstupu do SwP objeví na balkónku nad vchodem.

    Testováno na poslední revizi.

     

    Core:

     

    # HG changeset patch
    # User Filipoliko
    # Date 1316955174 -7200
    # Node ID eb27e211a7f520aafb34bfa8d6303c43ce5a2d84
    # Parent  5c5fa18894c6197b9c7a6c9a1f5a97f579f71c30
    Sunwell: [hack]Fixed player position on enter.
    
    diff -r 5c5fa18894c6 -r eb27e211a7f5 src/game/ScriptLoader.cpp
    --- a/src/game/ScriptLoader.cpp	Sun Sep 25 00:17:16 2011 -0400
    +++ b/src/game/ScriptLoader.cpp	Sun Sep 25 14:52:54 2011 +0200
    @@ -29,6 +29,7 @@
    void AddSC_npc_innkeeper();
    void AddSC_npcs_special();
    void AddSC_npc_taxi();
    +void AddSC_npcs_custom();
    
    //eastern kingdoms
    void AddSC_alterac_valley();                 //Alterac Valley
    @@ -383,6 +384,7 @@
    //    AddSC_custom_example();
    //    AddSC_custom_gossip_codebox();
    //    AddSC_test();
    +
        AddSC_areatrigger_scripts();
        AddSC_boss_emeriss();
        AddSC_boss_taerar();
    @@ -395,6 +397,7 @@
        AddSC_npc_innkeeper();
        AddSC_npcs_special();
        AddSC_npc_taxi();
    +	AddSC_npcs_custom();
    
        //eastern kingdoms
        AddSC_alterac_valley();                 //Alterac Valley
    diff -r 5c5fa18894c6 -r eb27e211a7f5 src/scripts/World/npcs_custom.cpp
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/src/scripts/World/npcs_custom.cpp	Sun Sep 25 14:52:54 2011 +0200
    @@ -0,0 +1,52 @@
    +/* ScriptData
    +SDName: Npcs_custom
    +SD%Complete: 100
    +SDComment: Custom non-blizzlike scripts.
    +SDCategory: NPCs
    +EndScriptData
    +*/
    +
    +/* ContentData
    +npc_sunwell_enter_recall      100%    Teleport player, which enter SWP first to the right position.
    +EndContentData */
    +
    +#include "ScriptPCH.h"
    +#include "ScriptedEscortAI.h"
    +
    +/*######
    +## npc_sunwell_enter_recall
    +######*/
    +
    +struct npc_sunwell_enter_recall : public ScriptedAI
    +{
    +    npc_sunwell_enter_recall(Creature *c) : ScriptedAI(c) {me->SetVisibility(VISIBILITY_OFF); Reset();}
    +    void Reset() {}
    +    void Aggro(Unit * /*who*/){}
    +	void MoveInLineOfSight(Unit *who)
    +          {
    +              if (who->GetTypeId() != TYPEID_PLAYER || me->IsWithinDistInMap(who, 5.0f) || !me->IsWithinLOSInMap(who))
    +                  return;
    +                          
    +      
    +              Player* player = (Player *) who;
    +			  if(player->GetSession()->GetSecurity() < SEC_MODERATOR)
    +			      player->TeleportTo(580, 1790.65f, 925.67f, 15.15f, 3.1f);
    +          }
    +    void UpdateAI(const uint32 diff){}
    +};
    +
    +CreatureAI* GetAI_npc_sunwell_enter_recall(Creature* pCreature)
    +{
    +    return new npc_sunwell_enter_recall (pCreature);
    +}
    +
    +void AddSC_npcs_custom()
    +{
    +    Script *newscript;
    +
    +    newscript = new Script;
    +    newscript->Name = "npc_sunwell_enter_recall";
    +    newscript->GetAI = &GetAI_npc_sunwell_enter_recall;
    +    newscript->RegisterSelf();
    +}
    +
    

     

     

    SQL:

     

    -- Creature template
    DELETE FROM `creature_template` WHERE (`entry`=900001);
    INSERT INTO `creature_template` (`entry`, `heroic_entry`, `modelid_A`, `modelid_A2`, `modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`, `maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `baseattacktime`, `rangeattacktime`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `class`, `race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `RacialLeader`, `RegenHealth`, `equipment_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`) VALUES (900001, 0, 10045, 10045, 10045, 10045, 'Sunwell trigger', 'Visible only for GM', '', 70, 70, 1, 1, 0, 0, 0, 35, 35, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 3, 0, 1, 0, 0, 0, 'npc_sunwell_enter_recall');
    -- Spawn position
    DELETE FROM `creature` WHERE `id`=900001;
    INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`DeathState`,`MovementType`) VALUES
    (NULL, 900001, 580, 1, 0, 0, 1790.65, 925.67, 39.8824, 3.1, 25, 0, 0, 1, 0, 0, 0);
    

     

    • Upvote 3

  7. Design parádní, akorád, když děláš design, tak ti hodně doporučuju strukturovat to do složek a odělit jima header, menu, main content, patičku,... a taky vhodně pojmenovávat jednotlivé vrstvy pro lepší orientaci. Hodně to ulehčí kódování. Jinak GJ :-)


  8. #include "ScriptPCH.h"
    #define TEXT "Vítej na Sitix BG Serveru!"
    
    class npc_say : public CreatureScript
    {
    public:
       npc_say() : CreatureScript("npc_say") { }
    
           struct example_creatureAI : public ScriptedAI
           {
               npc_sayAI(Creature* c) : ScriptedAI(c) {}
    
    
               uint32 m_uiSayTimer;                                    // Timer for random chat
    
       	    void Reset()
        {
    	m_uiSayTimer = 60000;
               }
    
    
    
    +/-            void UpdateAI(const uint32 diff)
               {
    
                       //Random Say timer
    +/-                    if (m_uiSayTimer <= diff)
                       {
                           DoScriptText(TEXT, me);  
    
                           m_uiSayTimer = 60000;   // 60sekund - 1 000 = 1s                  
                       }
    +                    else
    +                        m_uiSayTimer -= diff;
               };          
    
           CreatureAI* GetAI(Creature* creature) const
           {
               return new npc_sayAI(creature);
           }
    
    };
    
    void AddSC_npc_say()
    {
       new npc_say();
    };


  9. Zkusil bych totok, ale asi bude dělat problémy :D zkusit se má vše :X

     

    /***** player.cpp *****/
    @@ -7642,6 +7642,11 @@
        duel->opponent->duel = NULL;
        delete duel;
        duel = NULL;
    +	if(area && area->isSanctuary)
    +	{
    +	 SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
    +        CombatStopWithPets();
    +	}
    }
    
    //---------------------------------------------------------//
    @@ -19139,6 +19144,8 @@
        duel->startTime  = currTime;
        duel->opponent->duel->startTimer = 0;
        duel->opponent->duel->startTime  = currTime;
    +	if(area && area->isSanctuary)
    +	   RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
    }
    
    Pet* Player::GetPet() const
    


  10. Já osobně s úpravou DBC mám problém :D

     

    Takže používám cestu v core, třeba někomu pomůže :-)

     

    /************ player.cpp ************/
    @@ -7375,7 +7375,7 @@
    
        // previously this was in UpdateZone (but after UpdateArea) so nothing will break
        pvpInfo.inNoPvPArea = false;
    -    if (area && area->IsSanctuary())    // in sanctuary
    +    if (area && area->IsSanctuary() || GetZoneId(ZoneID))    // in sanctuary
        {
            SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY);
            pvpInfo.inNoPvPArea = true;
    

×