Token váltó

Indította zack01, 2011 július 01, 07:49:50 DÉLUTÁN

Előző téma - Következő téma

zack01

bocsi az új témáért, de úgy gondoltam ez sokaknak segíthet.
Valaki tudna nekem segíteni abba,hogy hogyan lehet gossip menüvel váltó npc-t csinálni?(pl. 15000 honor legyen 50 BOJ.)
Ha ez egyáltalán lehetséges akk plz help!
ez komolyan teljesen meg!

IrOn

miért nem csinálod meg questtel? (az egyszerübb)

zack01

gossip egyszerűbb a playereknek..
ezért gondoltam gossippal, de ha nem lehet maradok a questnnél
ez komolyan teljesen meg!

Davidoff

#3

Cleaver93

Csináld, Questel, én is azzal csináltam, kicsit macerás, vagy vendorral, én elkeztem questel, de szentem egyszerűbb egy vendorral pl: 12000 honor legyen 50 BOJ =  .npc add item 29434 0 0 2588. de ehez át kell álítanod hogy a BOJ-t 50-es csomagban lehessen állítani, de egyszerűbb kissebb packban, pl: 5-ösével adni, és a player majd kiválasztja hogy mennyit szeretne venni, csak a stackable-t kell átállítani a DB-be és kész...

Archangel

#5
//Item swap npc Created by Chronic
//

#include "ScriptPCH.h"

#define SWAP_ITEM1_GIVE   111 //Írd át a 111-es számokat arra az id-re, amire cserélni szeretnél. a GIVE amit ad, a TAKE amit elvesz.
#define SWAP_ITEM1_TAKE   111
#define SWAP_ITEM2_GIVE   111
#define SWAP_ITEM2_TAKE   111
#define SWAP_ITEM3_GIVE   111
#define SWAP_ITEM3_TAKE   111
#define SWAP_ITEM4_GIVE   111
#define SWAP_ITEM4_TAKE   111
#define SWAP_ITEM5_GIVE   111
#define SWAP_ITEM5_TAKE   111
#define SWAP_ITEM6_GIVE   111
#define SWAP_ITEM6_TAKE   111
#define SWAP_ITEM7_GIVE   111
#define SWAP_ITEM7_TAKE   111
#define SWAP_ITEM8_GIVE   111
#define SWAP_ITEM8_TAKE   111
#define SWAP_ITEM9_GIVE   111
#define SWAP_ITEM9_TAKE   111
#define SWAP_ITEM10_GIVE   111
#define SWAP_ITEM10_TAKE   111

class npc_Swap_Item : public CreatureScript
{
public:
    npc_Swap_Item() : CreatureScript("npc_Swap_Item") { }

    bool OnGossipHello(Player *player, Creature *_creature)
    {
        if (player->isInCombat())
        {
            player->CLOSE_GOSSIP_MENU();
            _creature->MonsterWhisper("Combatban vagy!", player->GetGUID());
            return true;
        }
        else
        {
                player->ADD_GOSSIP_ITEM( 10, "CSERE 1"                    , GOSSIP_SENDER_MAIN, 22);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 2"                              , GOSSIP_SENDER_MAIN, 24);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 3"                          , GOSSIP_SENDER_MAIN, 26);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 4"                               , GOSSIP_SENDER_MAIN, 28);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 5"                         , GOSSIP_SENDER_MAIN, 30);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 6"                          , GOSSIP_SENDER_MAIN, 32);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 7"                           , GOSSIP_SENDER_MAIN, 34);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 8"                             , GOSSIP_SENDER_MAIN, 36);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 9"                         , GOSSIP_SENDER_MAIN, 38);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 10"                         , GOSSIP_SENDER_MAIN, 40);
        }

        player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
        return true;
    }

    bool TryToSellItem(Player *player, Creature *_creature, unsigned int reqID, unsigned int rewardID)
    {
        if (player->HasItemCount( reqID, 1, false ))
        {
            player->CLOSE_GOSSIP_MENU();

            //no room
            uint32 noSpaceForCount = 0;

            //No room in bags
            ItemPosCountVec dest;
            uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, rewardID, 1, &noSpaceForCount );
             unsigned int count = 1;
            if( msg != EQUIP_ERR_OK )                               
                count -= noSpaceForCount;

            if( count == 0 || dest.empty())                         
            {
                ChatHandler(player).PSendSysMessage(LANG_ITEM_CANNOT_CREATE, rewardID, noSpaceForCount );
                return false;
            }
            player->DestroyItemCount(reqID, 1, true, false);
            Item* item = player->StoreNewItem( dest, rewardID, true, Item::GenerateItemRandomPropertyId(rewardID));

            return true;
        }

        player->CLOSE_GOSSIP_MENU();
        _creature->MonsterWhisper("Item Traded!", player->GetGUID());
        return false;
    }

    bool OnGossipSelect(Player *player, Creature *_creature, uint32 sender, uint32 uiAction)
    {
        if (sender == GOSSIP_SENDER_MAIN)
        {
            player->PlayerTalkClass->ClearMenus();
            switch(uiAction)
            {
            case 11://[Main Menu]
                player->ADD_GOSSIP_ITEM( 10, "CSERE 1"                    , GOSSIP_SENDER_MAIN, 22);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 2"                              , GOSSIP_SENDER_MAIN, 24);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 3"                          , GOSSIP_SENDER_MAIN, 26);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 4"                               , GOSSIP_SENDER_MAIN, 28);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 5"                         , GOSSIP_SENDER_MAIN, 30);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 6"                          , GOSSIP_SENDER_MAIN, 32);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 7"                           , GOSSIP_SENDER_MAIN, 34);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 8"                             , GOSSIP_SENDER_MAIN, 36);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 9"                         , GOSSIP_SENDER_MAIN, 38);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 10"                         , GOSSIP_SENDER_MAIN, 40);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 22://Swap Item 1
                return TryToSellItem(player, _creature, SWAP_ITEM1_TAKE, SWAP_ITEM1_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 24://Swap Item 2
                return TryToSellItem(player, _creature, SWAP_ITEM2_TAKE, SWAP_ITEM2_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 26://Swap Item 3
                return TryToSellItem(player, _creature, SWAP_ITEM3_TAKE, SWAP_ITEM3_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 28://Swap Item 4
                return TryToSellItem(player, _creature, SWAP_ITEM4_TAKE, SWAP_ITEM4_GIVE);


                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 30://Swap Item 5
                return TryToSellItem(player, _creature, SWAP_ITEM5_TAKE, SWAP_ITEM5_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 32://Swap Item 6
                return TryToSellItem(player, _creature, SWAP_ITEM6_TAKE, SWAP_ITEM6_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 34://Swap Item 7
                return TryToSellItem(player, _creature, SWAP_ITEM7_TAKE, SWAP_ITEM7_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 36://Swap Item 8
                return TryToSellItem(player, _creature, SWAP_ITEM8_TAKE, SWAP_ITEM8_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 38://Swap Item 9
                return TryToSellItem(player, _creature, SWAP_ITEM9_TAKE, SWAP_ITEM9_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 40://Swap Item 10
                return TryToSellItem(player, _creature, SWAP_ITEM10_TAKE, SWAP_ITEM10_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;
   }
    }
};

void AddSC_npcSwap_Item()
{
    new npc_Swap_Item();
}


Main menuba "CSERE 1" et átírod, az id-ket is. Kommentbe le van írva az elején. Ha nem sikerül szólj.

zack01

ez most hülye kérdés lesz!
ezt hova kell importálni?<kicsit még kezdő vok ilyen téren>
ez komolyan teljesen meg!

Archangel

#7
Ha revisiont forgatsz be, akkor bele kell tenned ide:
X:\[TRINITY FORRÁSKÓD MAPPA NEVE]\src\server\scripts\Custom

Utána bele kell írnod a cmakelists.txt fájlba.
X:\[TRINITY FORRÁSKÓD MAPPA NEVE]\src\server\scripts\Custom\CMakeLists.txt

set(scripts_STAT_SRCS
 ${scripts_STAT_SRCS}
Custom/TokenTrader.cpp
)

message("  -> Prepared: Custom")

Itt majd a váltód nevét be kell helyettesítened, melyet egy .cpp fájlba másoltál és nevet adtál neki. A példában a "TokenTrader" nevet választottam.
Ezek után már csak Cmake-el elkészíted a Projectet, és leforgatod a compileredbe. (Visual Studio C++)

Ennyi  ;)

SZERK.: Elnézést, de kimaradt az a rész, hogy be kell írni a scriptet a scriptloadrbe.
X:\[TRINITY FORRÁSKÓD MAPPA NEVE]\src\server\game\Scripting\ScriptLoader.cpp

Ezket a sorokat:

#ifdef SCRIPTS
/* This is where custom scripts' loading functions should be declared. */

#endif

void AddCustomScripts()
{
#ifdef SCRIPTS
    /* This is where custom scripts should be added. */

#endif
}

Cseréljük ki ezekre:

#ifdef SCRIPTS
/* This is where custom scripts' loading functions should be declared. */
AddSC_npc_Swap_Item();
#endif

void AddCustomScripts()
{
#ifdef SCRIPTS
    /* This is where custom scripts should be added. */
void AddSC_npc_Swap_Item();
#endif
}

zack01

Ha ehhez még hozzá akarok adni vagy kivenni belőle akkor mennyit kell módosítanom? ???
ez komolyan teljesen meg!

ident

#9
Idézetet írta: zack01 Dátum 2011 augusztus 30, 05:01:11 DÉLUTÁN
Ha ehhez még hozzá akarok adni vagy kivenni belőle akkor mennyit kell módosítanom? ???

A define sorokban a GIVE/TAKE-hez újat adni

#define SWAP_ITEM11_GIVE   111
#define SWAP_ITEM11_TAKE   111

és

player->ADD_GOSSIP_ITEM( 10, "CSERE 11"                              , GOSSIP_SENDER_MAIN, 42);

és

           case 42://Swap Item 11
               return TryToSellItem(player, _creature, SWAP_ITEM11_TAKE, SWAP_ITEM11_GIVE);

               player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());        
               break;

ehhez is, a számozást látod a mintában, de átírtam itt is.

Átrakom script témába.
Fhatys, a sors által kirótt, elkerülhetetlen feladat szava.
http://eu.battle.net/wow/en/character/arathor/Ident/advanced

Endurance

Sziasztok!

A következő problémám van. Szervert szeretnék leforgatni és betettem egy Costum scriptet, úgy ahogy itt a fórumon le van írva ( http://infobarkacs.hu/index.php/topic,6631.0.html ). Viszont a CMake hibát dob ki.. :(.

1 Kép: http://postimage.org/image/7ansoapef/

2 Kép (CMake): http://i46.tinypic.com/sxhona.jpg

Miért dobja ki az Error t? Ha valaki tudna segíteni megköszönném.


zerus

Idézetet írta: Endurance Dátum 2012 augusztus 18, 12:11:57 DÉLELŐTT
Sziasztok!

A következő problémám van. Szervert szeretnék leforgatni és betettem egy Costum scriptet, úgy ahogy itt a fórumon le van írva ( http://infobarkacs.hu/index.php/topic,6631.0.html ). Viszont a CMake hibát dob ki.. :(.

1 Kép: http://postimage.org/image/7ansoapef/

2 Kép (CMake): http://i46.tinypic.com/sxhona.jpg

Miért dobja ki az Error t? Ha valaki tudna segíteni megköszönném.

A második képen tisztán látszódik hogy mi a baj. Nem találja a forrás fájlt, rosszul adtad meg az útvonalat.
Ami az első képen is látszódik, mivel a cmake-ben Custom/akármi.cpp útvonalt adtál meg, miközben egymás mellett van a két fájl.

Endurance

A probléma az volt, hogy nem cpp hanem cc volt a fájl. Megoldódott

Dark

#13
Sziasztok nekem is van olyan problémám hogy lehet én vagyok a hülye biztos de

itt van a script ugye :


//Item swap npc Created by Chronic
//

#include "ScriptPCH.h"

#define SWAP_ITEM1_GIVE   38186 //Írd át a 111-es számokat arra az id-re, amire cserélni szeretnél. a GIVE amit ad, a TAKE amit elvesz.
#define SWAP_ITEM1_TAKE   20560
#define SWAP_ITEM2_GIVE   38186
#define SWAP_ITEM2_TAKE   20558
#define SWAP_ITEM3_GIVE   38186
#define SWAP_ITEM3_TAKE   20559
#define SWAP_ITEM4_GIVE   38186
#define SWAP_ITEM4_TAKE   29024
#define SWAP_ITEM5_GIVE   20560
#define SWAP_ITEM5_TAKE   38186
#define SWAP_ITEM6_GIVE   20558
#define SWAP_ITEM6_TAKE   38186
#define SWAP_ITEM7_GIVE   20559
#define SWAP_ITEM7_TAKE   38186
#define SWAP_ITEM8_GIVE   29024
#define SWAP_ITEM8_TAKE   38186
#define SWAP_ITEM9_GIVE   49426
#define SWAP_ITEM9_TAKE   47241
#define SWAP_ITEM10_GIVE   47241
#define SWAP_ITEM10_TAKE   49426

class npc_Swap_Item : public CreatureScript
{
public:
    npc_Swap_Item() : CreatureScript("npc_Swap_Item") { }

    bool OnGossipHello(Player *player, Creature *_creature)
    {
        if (player->isInCombat())
        {
            player->CLOSE_GOSSIP_MENU();
            _creature->MonsterWhisper("Combatban vagy!", player->GetGUID());
            return true;
        }
        else
        {
                player->ADD_GOSSIP_ITEM( 10, "CSERE 1"                    , GOSSIP_SENDER_MAIN, 22);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 2"                              , GOSSIP_SENDER_MAIN, 24);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 3"                          , GOSSIP_SENDER_MAIN, 26);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 4"                               , GOSSIP_SENDER_MAIN, 28);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 5"                         , GOSSIP_SENDER_MAIN, 30);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 6"                          , GOSSIP_SENDER_MAIN, 32);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 7"                           , GOSSIP_SENDER_MAIN, 34);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 8"                             , GOSSIP_SENDER_MAIN, 36);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 9"                         , GOSSIP_SENDER_MAIN, 38);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 10"                         , GOSSIP_SENDER_MAIN, 40);
        }

        player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
        return true;
    }

    bool TryToSellItem(Player *player, Creature *_creature, unsigned int reqID, unsigned int rewardID)
    {
        if (player->HasItemCount( reqID, 1, false ))
        {
            player->CLOSE_GOSSIP_MENU();

            //no room
            uint32 noSpaceForCount = 0;

            //No room in bags
            ItemPosCountVec dest;
            uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, rewardID, 1, &noSpaceForCount );
             unsigned int count = 1;
            if( msg != EQUIP_ERR_OK )                               
                count -= noSpaceForCount;

            if( count == 0 || dest.empty())                         
            {
                ChatHandler(player).PSendSysMessage(LANG_ITEM_CANNOT_CREATE, rewardID, noSpaceForCount );
                return false;
            }
            player->DestroyItemCount(reqID, 1, true, false);
            Item* item = player->StoreNewItem( dest, rewardID, true, Item::GenerateItemRandomPropertyId(rewardID));

            return true;
        }

        player->CLOSE_GOSSIP_MENU();
        _creature->MonsterWhisper("Item Traded!", player->GetGUID());
        return false;
    }

    bool OnGossipSelect(Player *player, Creature *_creature, uint32 sender, uint32 uiAction)
    {
        if (sender == GOSSIP_SENDER_MAIN)
        {
            player->PlayerTalkClass->ClearMenus();
            switch(uiAction)
            {
            case 11://[Main Menu]
                player->ADD_GOSSIP_ITEM( 10, "CSERE 1"                    , GOSSIP_SENDER_MAIN, 22);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 2"                              , GOSSIP_SENDER_MAIN, 24);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 3"                          , GOSSIP_SENDER_MAIN, 26);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 4"                               , GOSSIP_SENDER_MAIN, 28);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 5"                         , GOSSIP_SENDER_MAIN, 30);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 6"                          , GOSSIP_SENDER_MAIN, 32);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 7"                           , GOSSIP_SENDER_MAIN, 34);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 8"                             , GOSSIP_SENDER_MAIN, 36);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 9"                         , GOSSIP_SENDER_MAIN, 38);
                player->ADD_GOSSIP_ITEM( 10, "CSERE 10"                         , GOSSIP_SENDER_MAIN, 40);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 22://Swap Item 1
                return TryToSellItem(player, _creature, SWAP_ITEM1_TAKE, SWAP_ITEM1_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 24://Swap Item 2
                return TryToSellItem(player, _creature, SWAP_ITEM2_TAKE, SWAP_ITEM2_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 26://Swap Item 3
                return TryToSellItem(player, _creature, SWAP_ITEM3_TAKE, SWAP_ITEM3_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 28://Swap Item 4
                return TryToSellItem(player, _creature, SWAP_ITEM4_TAKE, SWAP_ITEM4_GIVE);


                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 30://Swap Item 5
                return TryToSellItem(player, _creature, SWAP_ITEM5_TAKE, SWAP_ITEM5_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 32://Swap Item 6
                return TryToSellItem(player, _creature, SWAP_ITEM6_TAKE, SWAP_ITEM6_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 34://Swap Item 7
                return TryToSellItem(player, _creature, SWAP_ITEM7_TAKE, SWAP_ITEM7_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 36://Swap Item 8
                return TryToSellItem(player, _creature, SWAP_ITEM8_TAKE, SWAP_ITEM8_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 38://Swap Item 9
                return TryToSellItem(player, _creature, SWAP_ITEM9_TAKE, SWAP_ITEM9_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;

            case 40://Swap Item 10
                return TryToSellItem(player, _creature, SWAP_ITEM10_TAKE, SWAP_ITEM10_GIVE);

                player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID());         
                break;
   }
    }
};

void AddSC_npcSwap_Item()
{
    new npc_Swap_Item();
}


és az lenne a gondom hogy,
például azt szeretném hogy ne 1 db. itemért cseréljen 1 et hanem pl 2 vegyen el és 1 et adjon azt hogy lehet beállítani ?

Azzeroth

Üdv.

Nekem lenne egy olyan kérdésem, hogy mi van akkor, ha például:
Egy értéket akarok kiolvasni adatbázisból, perpillanat kredit és azt akarom mondjuk token-re váltani?
Vagy Arena/Honor pontot tokenné?
Ebben tudna valaki segíteni?
Megköszönnöm!!

Powered by EzPortal