[Help] How to additem and Getclass on Code

Hi guys, im starting making to make my own scripts, but Im so noob yet, have couple of dudes, I take a npc leveler script, for now if player has correct amount of tokens get level 80, but I wanna add to code 2 new functions I wanna the npc recognize the class of player, and depending on the class send him 5 items (1 set) any can give me a example to make this? this is a fragment of the code:

case 2: // Level 80 - required 10 tokens

if (pPlayer->HasItemCount(TOKEN_ID, 108, true))

{

pPlayer->GiveLevel(80);

pPlayer->DestroyItemCount(TOKEN_ID, 10, true);

_creature->MonsterWhisper(“Youre now Level 80 & And you have now the last set of your class!”, pPlayer->GetGUID());

pPlayer->PlayerTalkClass->SendCloseGossip();

}

else

{

pPlayer->PlayerTalkClass->SendCloseGossip();

_creature->MonsterWhisper(“You dont have enough tokens.”, pPlayer->GetGUID());

return false;

}

break;

I think i Must add something like “if (pPlayer is class 1->addItem(ID1,ID2,ID3,ID4,ID5));” under " pPlayer->GiveLevel(80)" , And I must declare the classes at the begining of script but I dont secure of this, and I dont know 100% the commands for declare classes and add items, if any can give this noob an example I will be very grateful.

Thanks

ps: before ask, I try to do it by myself looking some gossip examples , but I dont find this function in any example

Use a switch.

switch (pPlayer->getClass())
{
case CLASS_DRUID:
// do stuff
break;
case CLASS_WARRIOR:
// do stuff
break;
}

To add items use pPlayer->AddItem(entry, count); It returns false if the item cant be stored.

Thanks Rochet for your help, but Im a little retard I think, because I dont use how to use switch, donw know where must it go, then I create an alternative :S Can you or any say if this code is well?

//Original LevelNPC script by - Ghostcrawler336

#include “ScriptPCH.h”
#define TOKEN_ID 90020

class Level_NPC : public CreatureScript
{
public:
Level_NPC() : CreatureScript(“Level_NPC”) {}
bool OnGossipHello(Player* pPlayer, Creature* _creature)
{
pPlayer->ADD_GOSSIP_ITEM(7, “Los sets son PVE, ¡¡Asegurate de tener 15 Espacios en el inventario!!”, GOSSIP_SENDER_MAIN, 111212);
pPlayer->ADD_GOSSIP_ITEM(10, “Druida: Nivel 80 + Healer & Feral & Caster Sets (20 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 1);
pPlayer->ADD_GOSSIP_ITEM(10, “Chaman: Nivel 80 + Healer & DPS & Caster Sets (20 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 2);
pPlayer->ADD_GOSSIP_ITEM(10, “Paladin: Nivel 80 + Healer & DPS & Tank (20 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 3);
pPlayer->ADD_GOSSIP_ITEM(10, “Guerrero: Nivel 80 + DPS & Tank Sets (15 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 4);
pPlayer->ADD_GOSSIP_ITEM(10, “Sacerdote: Nivel 80 + Healer & DPS Sets (15 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 5);
pPlayer->ADD_GOSSIP_ITEM(10, “DK: Nivel 80 + DPS & Tank Sets (15 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 6);
pPlayer->ADD_GOSSIP_ITEM(10, “Picaro: Nivel 80 + DPS Set (10 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 7);
pPlayer->ADD_GOSSIP_ITEM(10, “Cazador: Nivel 80 + DPS Set (10 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 8);
pPlayer->ADD_GOSSIP_ITEM(10, “Mago: Nivel 80 + DPS Set (10 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 9);
pPlayer->ADD_GOSSIP_ITEM(10, “Brujo: Nivel 80 + DPS Set (10 Monedas Conejo)”, GOSSIP_SENDER_MAIN, 10);

           pPlayer->PlayerTalkClass->SendGossipMenu(907, _creature->GetGUID());
           return true;

}
bool OnGossipSelect(Player* pPlayer, Creature* _creature, uint32 uiSender, uint32 uiAction)
{
pPlayer->PlayerTalkClass->ClearMenus();

                           switch(uiAction)
                           {      
                                                     
                               case 1: // Druid: Level 80 + Healer & Feral & Caster Sets (20 Tokens)
                      if (pPlayer->HasItemCount(TOKEN_ID, 20, true))
                      {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200045, 1);
pPlayer->AddItem(200046, 1);
pPlayer->AddItem(200047, 1);
pPlayer->AddItem(200048, 1);
pPlayer->AddItem(200049, 1);
pPlayer->AddItem(200050, 1);
pPlayer->AddItem(200051, 1);
pPlayer->AddItem(200052, 1);
pPlayer->AddItem(200053, 1);
pPlayer->AddItem(200054, 1);
pPlayer->AddItem(200055, 1);
pPlayer->AddItem(200056, 1);
pPlayer->AddItem(200057, 1);
pPlayer->AddItem(200058, 1);
pPlayer->AddItem(200059, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 20, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

                  case 2: // Shaman: Level 80 + Healer & DPS & Caster Sets (20 Tokens)
         if (pPlayer->HasItemCount(TOKEN_ID, 20, true))
              {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200067, 1);
pPlayer->AddItem(200068, 1);
pPlayer->AddItem(200069, 1);
pPlayer->AddItem(200070, 1);
pPlayer->AddItem(200071, 1);
pPlayer->AddItem(200072, 1);
pPlayer->AddItem(200073, 1);
pPlayer->AddItem(200074, 1);
pPlayer->AddItem(200075, 1);
pPlayer->AddItem(200076, 1);
pPlayer->AddItem(200077, 1);
pPlayer->AddItem(200078, 1);
pPlayer->AddItem(200079, 1);
pPlayer->AddItem(200066, 1);
pPlayer->AddItem(200065, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 20, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

            case 3: // Paladin: Level 80 + Healer & DPS & Paladin (20 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 20, true))
        {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200000, 1);
pPlayer->AddItem(200001, 1);
pPlayer->AddItem(200002, 1);
pPlayer->AddItem(200003, 1);
pPlayer->AddItem(200004, 1);
pPlayer->AddItem(200035, 1);
pPlayer->AddItem(200036, 1);
pPlayer->AddItem(200037, 1);
pPlayer->AddItem(200038, 1);
pPlayer->AddItem(200039, 1);
pPlayer->AddItem(200040, 1);
pPlayer->AddItem(200041, 1);
pPlayer->AddItem(200042, 1);
pPlayer->AddItem(200043, 1);
pPlayer->AddItem(200044, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 20, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

            case 4: // Warrior: Level 80 + DPS & Tank Sets (15 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 15, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200005, 1);
pPlayer->AddItem(200006, 1);
pPlayer->AddItem(200007, 1);
pPlayer->AddItem(200008, 1);
pPlayer->AddItem(200009, 1);
pPlayer->AddItem(200010, 1);
pPlayer->AddItem(200011, 1);
pPlayer->AddItem(200012, 1);
pPlayer->AddItem(200013, 1);
pPlayer->AddItem(200014, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 15, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

            case 5: // Priest: Level 80 + Healer & DPS Sets (15 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 15, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200060, 1);
pPlayer->AddItem(200061, 1);
pPlayer->AddItem(200062, 1);
pPlayer->AddItem(200063, 1);
pPlayer->AddItem(200064, 1);
pPlayer->AddItem(200025, 1);
pPlayer->AddItem(200026, 1);
pPlayer->AddItem(200027, 1);
pPlayer->AddItem(200028, 1);
pPlayer->AddItem(200029, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 15, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

            case 6: // DK: Level 80 + DPS & Tank Sets (15 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 15, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200085, 1);
pPlayer->AddItem(200086, 1);
pPlayer->AddItem(200087, 1);
pPlayer->AddItem(200088, 1);
pPlayer->AddItem(200089, 1);
pPlayer->AddItem(200090, 1);
pPlayer->AddItem(200091, 1);
pPlayer->AddItem(200092, 1);
pPlayer->AddItem(200093, 1);
pPlayer->AddItem(200094, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 15, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

           case 7: // Rogue: Level 80 + DPS Set (10 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 10, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200020, 1);
pPlayer->AddItem(200021, 1);
pPlayer->AddItem(200022, 1);
pPlayer->AddItem(200023, 1);
pPlayer->AddItem(200024, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 10, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

            case 8: // Hunter: Level 80 + DPS Set (10 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 10, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200080, 1);
pPlayer->AddItem(200081, 1);
pPlayer->AddItem(200082, 1);
pPlayer->AddItem(200083, 1);
pPlayer->AddItem(200084, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 10, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

       case 9: // Mage: Level 80 + DPS Set (10 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 10, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200030, 1);
pPlayer->AddItem(200031, 1);
pPlayer->AddItem(200032, 1);
pPlayer->AddItem(200033, 1);
pPlayer->AddItem(200034, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 10, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;

       case 10: // Warlock: Level 80 + DPS Set (10 Tokens)
   if (pPlayer->HasItemCount(TOKEN_ID, 10, true))
   {
               pPlayer->GiveLevel(80);

pPlayer->AddItem(200015, 1);
pPlayer->AddItem(200016, 1);
pPlayer->AddItem(200017, 1);
pPlayer->AddItem(200018, 1);
pPlayer->AddItem(200019, 1);
pPlayer->DestroyItemCount(TOKEN_ID, 10, true);
_creature->MonsterWhisper(“Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase”, pPlayer->GetGUID());
pPlayer->PlayerTalkClass->SendCloseGossip();
}
else
{
pPlayer->PlayerTalkClass->SendCloseGossip();
_creature->MonsterWhisper(“No tienes suficientes monedas conejo.”, pPlayer->GetGUID());
return false;
}
break;
}
}
};
void AddSC_Level_NPC()
{
new Level_NPC();
}

if the code is Ok,Exist any method to show only 1 gossip per class ? For example If druid talk with npc, only show “Druid: Level 80 + Healer & Feral & Caster Sets (20 Tokens)”

EDIT: Maybe in each case I must change return false for return true for can store items like Rochet say me? Or if not neccesary at this form?

First you ask and then you ignore it totally…

To me that code looks horrible.

repeating things could be avoided with simple tricks.

I would code it a bit differently, but I modified your code to be a bit cleaner and show only the class’ own option in the menu.

I also managed to shorten the code from 380 rows to 190, while still preserving the additem switch structure of yours.

[CODE]
//Original LevelNPC script by - Ghostcrawler336

#include “ScriptPCH.h”
#define TOKEN_ID 90020

class Level_NPC : public CreatureScript
{
public:
Level_NPC() : CreatureScript(“Level_NPC”) {}
bool OnGossipHello(Player* player, Creature* creature)
{
player->ADD_GOSSIP_ITEM(7, “Los sets son PVE, ¡¡Asegurate de tener 15 Espacios en el inventario!!”, 0, 111212);
switch (player->getClass())
{
// (icon, text, tokencost, action)
case CLASS_DRUID: player->ADD_GOSSIP_ITEM(10, “Druida: Nivel 80 + Healer & Feral & Caster Sets (20 Monedas Conejo)”, 20, 1); break;
case CLASS_SHAMAN: player->ADD_GOSSIP_ITEM(10, “Chaman: Nivel 80 + Healer & DPS & Caster Sets (20 Monedas Conejo)”, 20, 2); break;
case CLASS_PALADIN: player->ADD_GOSSIP_ITEM(10, “Paladin: Nivel 80 + Healer & DPS & Tank (20 Monedas Conejo)”, 20, 3); break;
case CLASS_WARRIOR: player->ADD_GOSSIP_ITEM(10, “Guerrero: Nivel 80 + DPS & Tank Sets (15 Monedas Conejo)”, 15, 4); break;
case CLASS_PRIEST: player->ADD_GOSSIP_ITEM(10, “Sacerdote: Nivel 80 + Healer & DPS Sets (15 Monedas Conejo)”, 15, 5); break;
case CLASS_DEATH_KNIGHT: player->ADD_GOSSIP_ITEM(10, “DK: Nivel 80 + DPS & Tank Sets (15 Monedas Conejo)”, 15, 6); break;
case CLASS_ROGUE: player->ADD_GOSSIP_ITEM(10, “Picaro: Nivel 80 + DPS Set (10 Monedas Conejo)”, 10, 7); break;
case CLASS_HUNTER: player->ADD_GOSSIP_ITEM(10, “Cazador: Nivel 80 + DPS Set (10 Monedas Conejo)”, 10, 8); break;
case CLASS_MAGE: player->ADD_GOSSIP_ITEM(10, “Mago: Nivel 80 + DPS Set (10 Monedas Conejo)”, 10, 9); break;
case CLASS_WARLOCK: player->ADD_GOSSIP_ITEM(10, “Brujo: Nivel 80 + DPS Set (10 Monedas Conejo)”, 10, 10); break;
}
player->SEND_GOSSIP_MENU(907, creature->GetGUID());
return true;
}

bool OnGossipSelect(Player* player, Creature* creature, uint32 token_count, uint32 action)
{
    player->PlayerTalkClass->ClearMenus();
    if (!token_count)
    {
        if(action == 111212)
        {
            player->CLOSE_GOSSIP_MENU();
            return false;
        }
    }
    else
    {
        if (!player->HasItemCount(TOKEN_ID, token_count))
        {
            player->GetSession()->SendNotification("No tienes suficientes monedas conejo");
        }
        else
        {
            player->DestroyItemCount(TOKEN_ID, token_count, true);
            player->GiveLevel(80);
            player->GetSession()->SendAreaTriggerMessage("Ahora eres nivel 80, y tienes los últimos sets PvE de tu Clase");
            switch(action)
            {
            case 1: // Druid: Level 80 + Healer & Feral & Caster Sets (20 Tokens)
                player->AddItem(200045, 1);
                player->AddItem(200046, 1);
                player->AddItem(200047, 1);
                player->AddItem(200048, 1);
                player->AddItem(200049, 1);
                player->AddItem(200050, 1);
                player->AddItem(200051, 1);
                player->AddItem(200052, 1);
                player->AddItem(200053, 1);
                player->AddItem(200054, 1);
                player->AddItem(200055, 1);
                player->AddItem(200056, 1);
                player->AddItem(200057, 1);
                player->AddItem(200058, 1);
                player->AddItem(200059, 1);
                break;

            case 2: // Shaman: Level 80 + Healer & DPS & Caster Sets (20 Tokens)
                player->AddItem(200067, 1);
                player->AddItem(200068, 1);
                player->AddItem(200069, 1);
                player->AddItem(200070, 1);
                player->AddItem(200071, 1);
                player->AddItem(200072, 1);
                player->AddItem(200073, 1);
                player->AddItem(200074, 1);
                player->AddItem(200075, 1);
                player->AddItem(200076, 1);
                player->AddItem(200077, 1);
                player->AddItem(200078, 1);
                player->AddItem(200079, 1);
                player->AddItem(200066, 1);
                player->AddItem(200065, 1);
                break;

            case 3: // Paladin: Level 80 + Healer & DPS & Paladin (20 Tokens)
                player->AddItem(200000, 1);
                player->AddItem(200001, 1);
                player->AddItem(200002, 1);
                player->AddItem(200003, 1);
                player->AddItem(200004, 1);
                player->AddItem(200035, 1);
                player->AddItem(200036, 1);
                player->AddItem(200037, 1);
                player->AddItem(200038, 1);
                player->AddItem(200039, 1);
                player->AddItem(200040, 1);
                player->AddItem(200041, 1);
                player->AddItem(200042, 1);
                player->AddItem(200043, 1);
                player->AddItem(200044, 1);
                break;

            case 4: // Warrior: Level 80 + DPS & Tank Sets (15 Tokens)
                player->AddItem(200005, 1);
                player->AddItem(200006, 1);
                player->AddItem(200007, 1);
                player->AddItem(200008, 1);
                player->AddItem(200009, 1);
                player->AddItem(200010, 1);
                player->AddItem(200011, 1);
                player->AddItem(200012, 1);
                player->AddItem(200013, 1);
                player->AddItem(200014, 1);
                break;

            case 5: // Priest: Level 80 + Healer & DPS Sets (15 Tokens)
                player->AddItem(200060, 1);
                player->AddItem(200061, 1);
                player->AddItem(200062, 1);
                player->AddItem(200063, 1);
                player->AddItem(200064, 1);
                player->AddItem(200025, 1);
                player->AddItem(200026, 1);
                player->AddItem(200027, 1);
                player->AddItem(200028, 1);
                player->AddItem(200029, 1);
                break;

            case 6: // DK: Level 80 + DPS & Tank Sets (15 Tokens)
                player->AddItem(200085, 1);
                player->AddItem(200086, 1);
                player->AddItem(200087, 1);
                player->AddItem(200088, 1);
                player->AddItem(200089, 1);
                player->AddItem(200090, 1);
                player->AddItem(200091, 1);
                player->AddItem(200092, 1);
                player->AddItem(200093, 1);
                player->AddItem(200094, 1);
                break;

            case 7: // Rogue: Level 80 + DPS Set (10 Tokens)
                player->AddItem(200020, 1);
                player->AddItem(200021, 1);
                player->AddItem(200022, 1);
                player->AddItem(200023, 1);
                player->AddItem(200024, 1);
                break;

            case 8: // Hunter: Level 80 + DPS Set (10 Tokens)
                player->AddItem(200080, 1);
                player->AddItem(200081, 1);
                player->AddItem(200082, 1);
                player->AddItem(200083, 1);
                player->AddItem(200084, 1);
                break;

            case 9: // Mage: Level 80 + DPS Set (10 Tokens)
                player->AddItem(200030, 1);
                player->AddItem(200031, 1);
                player->AddItem(200032, 1);
                player->AddItem(200033, 1);
                player->AddItem(200034, 1);
                break;

            case 10: // Warlock: Level 80 + DPS Set (10 Tokens)
                player->AddItem(200015, 1);
                player->AddItem(200016, 1);
                player->AddItem(200017, 1);
                player->AddItem(200018, 1);
                player->AddItem(200019, 1);
                break;
            }
        }
    }
    OnGossipHello(player, creature);
    return true;
}

};
void AddSC_Level_NPC()
{
new Level_NPC();
}[/CODE]

Rochet Sorry, I did not mean to ignore your post, the problem is that I did not know how to apply it, I’m still learning, then base your advice I tried to do something, I do not like to say “can you do me” without just try to do it by myself, now you made ​​a correction, and thanks to it I have learned which failed, and learned too how to use switch so I thank you because thanks to you I learned something new. Now I try to think some basic script to make it alone and apply my new knowledges, I will show it when its done.

That’s fair and noble. The “switch” statement is basic part of the C++ programming language that the Trinity core is written in. If you really want to be more independent with your changes, then you definitely should find an online tutorial for C++ so that you can better understand the code.