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:  
Sign in to follow this  
Oronor

[Otázka]Pomoc s c++ scriptem

Recommended Posts

Chtěl bych vytvořit NPC ,které by poskytlo začáteční equip podle toho ,kterou class by si u nej hráč vybral.

Existuje nějaký příkaz jako add_item nebo tak něco ? Popřípadě šlo by využít Player->Getclass ,aby to hráči dalo eq rovnou na class bez vybirani ?

Děkuji za odpovědi.

Share this post


Link to post
Share on other sites

Zkus tuhle metodu, měla by fungovat

bool GiveItem(uint32 itemId, int32 count, Creature* pCreature, Player* pPlayer) 
{     
   uint32 noSpaceForCount = 0; 
   ItemPosCountVec dest; 
   uint8 msg = pPlayer->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, count &noSpaceForCount ); 

   if( msg != EQUIP_ERR_OK )      
       count -= noSpaceForCount; 

   if( count == 0 || dest.empty())   
   { 
       pCreature->MonsterWhisper("Unable to create item", pPlayer->GetGUID()); 
       return false;
   } 

   Item* item = pPlayer->StoreNewItem( dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId)); 

   if(count > 0 && item) 
   { 
       pPlayer->SendNewItem(item,count,false,true); 
   } 

   if(noSpaceForCount > 0) 
   {
       pCreature->MonsterWhisper("Unable to create item", pPlayer->GetGUID()); 
       return false;
   }
   return true;
}  

 

Vrací true - false, podle toho jestli se item podařilo přidat či ne.

Edited by Hkarta

Share this post


Link to post
Share on other sites

Ještě s c++ moc neumím natož při tvorbě pro trinity core ,ale kde mám definovat ID itemu ?

Nebo mám ID doplnit všude kde je itemId a mnozstvi do count ? A co je v kodu dest ?

 

Omlouvám se za tyhle stupidní dotazy :( .

Share this post


Link to post
Share on other sites

bool GiveItem(uint32 itemId, int32 count, Creature* pCreature, Player* pPlayer)

{

uint32 noSpaceForCount = 0;

ItemPosCountVec dest;

uint8 msg = pPlayer->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, itemId, count &noSpaceForCount );

 

if( msg != EQUIP_ERR_OK )

count -= noSpaceForCount;

 

if( count == 0 || dest.empty())

{

pCreature->MonsterWhisper("Unable to create item", pPlayer->GetGUID());

return false;

}

 

Item* item = pPlayer->StoreNewItem( dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));

 

if(count > 0 && item)

{

pPlayer->SendNewItem(item,count,false,true);

}

 

if(noSpaceForCount > 0)

{

pCreature->MonsterWhisper("Unable to create item", pPlayer->GetGUID());

return false;

}

return true;

}

 

 

Kde jsem to zvětšil a barevně označil tam bys to měl hodit

Edited by Nex

Share this post


Link to post
Share on other sites

Kdyz se pokusím o kompilaci tak mi to vyhodí tyto chyby .

..\..\src\scripts\custom\telenpc.cpp(660) : error C2065: 'pCreature' : undeclared identifier

..\..\src\scripts\custom\telenpc.cpp(660) : error C2275: 'Creature' : illegal use of this type as an expression

e:\iso\wotlk\!!!!\trinity\src\game\Creature.h(396) : see declaration of 'Creature'

..\..\src\scripts\custom\telenpc.cpp(660) : error C2065: 'pPlayer' : undeclared identifier

..\..\src\scripts\custom\telenpc.cpp(660) : error C2275: 'Player' : illegal use of this type as an expression

e:\iso\wotlk\!!!!\trinity\src\game\Player.h(923) : see declaration of 'Player'

..\..\src\scripts\custom\telenpc.cpp(660) : error C3861: 'GiveItem': identifier not found

Share this post


Link to post
Share on other sites

Kdyz se pokusím o kompilaci tak mi to vyhodí tyto chyby .

..\..\src\scripts\custom\telenpc.cpp(660) : error C2065: 'pCreature' : undeclared identifier

..\..\src\scripts\custom\telenpc.cpp(660) : error C2275: 'Creature' : illegal use of this type as an expression

e:\iso\wotlk\!!!!\trinity\src\game\Creature.h(396) : see declaration of 'Creature'

..\..\src\scripts\custom\telenpc.cpp(660) : error C2065: 'pPlayer' : undeclared identifier

..\..\src\scripts\custom\telenpc.cpp(660) : error C2275: 'Player' : illegal use of this type as an expression

e:\iso\wotlk\!!!!\trinity\src\game\Player.h(923) : see declaration of 'Player'

..\..\src\scripts\custom\telenpc.cpp(660) : error C3861: 'GiveItem': identifier not found

 

Tak na pPlayer skus -> player a na Creature -> creature na pCreature -> pcreature nebo creature skus to a na Player -> player ono je problém s 'V' a 'v' jako rozlišení písmen ale říkám předem nevím co je v TC2

Share this post


Link to post
Share on other sites

Ty vole je to METODA. To znamená, že to přidáš do kódu a zavoláš tohle:

 

GiveItem(ID ITEMU, POČET, Pointer na creaturu, která to má davat. Může se jmenovat různě., Pointer na hráče, může se jmenovat různě);

 

Jestli neznáš ani základy programování, tak se na to abys to dělal přes c++ script vykašli.

 

edit: A Nex: když něčemu nerozumíš o nic víc než autor, tak radši neraď, napsals úplnou volovinu. ;)

 

Jinak kdybys fakt netušil kde ten pointer hledat a neplánoval se na to vykašlat, tak si najdi metodu ve který to voláš a koukej po

 

bool GossipSelect_npc_player_wp(Player *player, Creature *_creature, uint32 sender, uint32 action )

{

if (sender != GOSSIP_SENDER_MAIN)

return false;

 

if (action == GOSSIP_ACTION_INFO_DEF + 20)

{

player->playerControlledMovement = new PlayerControlledMovement(player);

player->Unmount();

player->SetPosition(_creature->GetPositionX(), _creature->GetPositionY(), _creature->GetPositionZ(), _creature->GetOrientation(), true);

player->PlayerTalkClass->CloseGossip();

player->playerControlledMovement->LoadPath(3); // tohle je důležité, číslo v závorce udává číslo cesty z databáze

player->PlayerControlledMovementEnabled = true;

}

 

return true;

}

 

(tahle metoda jest pouze příklad)

 

A na závěr něco málo čtení: http://www.cadforum.cz/cadforum/Vyvojove-prostredky-AutoCADu/Pasmo/Casti/ObjectARX/ARXZakladyProg/ARXFunkce.htm#ARX_metodyO

Edited by Hkarta

Share this post


Link to post
Share on other sites

edit: A Nex: když něčemu nerozumíš o nic víc než autor, tak radši neraď, napsals úplnou volovinu. ;)

 

To víš hele já TC2 nedělám

Share this post


Link to post
Share on other sites

tohle není záležitost tc2, to je základ programování v prakticky jakémkoliv programovacím jazyku. ;)

Share this post


Link to post
Share on other sites

Ano, ale to je tzv vstupní parametr. Jinýmy slovy se pointr na creaturu v reálném programu může jmenovat třeba krecek a na hráče bivoj. Vstupní parametr je řekněme taková zástupná proměná, se kterou pracuje jen ta proměnná. Když to potom voláš, zavoláš JménoMetody(parametr1, parametr2); a třeba konkrétně tahle metoda si to přloží jako pPlayer, pCreature a dál s tím pracuje.

 

Takže pokud bys ji volal z programu/metody ve které(m) se pointr na hráče jmenuje bivoj a na creaturu krecek, tak to bude fungovat úplně stejně, jako bys to volal odjinud a pointe na hráče se jmenoval pHrac a na creaturu pPotvora. Jen bys jednou zavolal JménoMetody(bivoj, krecek); a podruhý JménoMetody(pHrac, pPotvora);

 

Ovšem jak říkám; pokud neumíš ani základy programování, tak se na to přes C++ vykašli.

Edited by Hkarta

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×