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!
miért nem csinálod meg questtel? (az egyszerübb)
gossip egyszerűbb a playereknek..
ezért gondoltam gossippal, de ha nem lehet maradok a questnnél
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...
//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.
ez most hülye kérdés lesz!
ezt hova kell importálni?<kicsit még kezdő vok ilyen téren>
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
}
Ha ehhez még hozzá akarok adni vagy kivenni belőle akkor mennyit kell módosítanom? ???
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
ésplayer->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.
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.
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.
A probléma az volt, hogy nem cpp hanem cc volt a fájl. Megoldódott
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 ?
Ü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!!