Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Custom Script Broken?

Initiate Mage
Joined
Nov 30, 2013
Messages
1
Reaction score
0
Can anyone tell my why my custom script wont work it compiles fine with no error or syntax errors in vs 2017 for trinitycore but when i assign it to my custom npc talking to it returns nothing...?

Code:
#include "Item.h"
#include "DBCStores.h"
#include "Log.h"
#include "DatabaseEnv.h"
#include "CharacterDatabase.h"
#include "Player.h"
#include "WorldSession.h"
#include "ScriptedGossip.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "GossipDef.h"
#include "Creature.h"
#include "ObjectMgr.h"
#include "ScriptedCreature.h"
#include "PassiveAI.h"
#include "Bag.h"
#include "Common.h"
#include "Config.h"
#include "DBCStructure.h"
#include "Define.h"
#include "Field.h"
#include "GameEventMgr.h"
#include "ItemTemplate.h"
#include "Language.h"
#include "ObjectGuid.h"
#include "QueryResult.h"
#include "SharedDefines.h"
#include "Transaction.h"
#include <sstream>
#include <string>

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

    class my_scriptAI : public ScriptedAI
    {
    public:
        my_scriptAI(Creature* pCreature) : ScriptedAI(pCreature) {}

        void RewardItem(Player* pPlayer, Creature* pCreature, int item, int count, int cost)
        {
            QueryResult result;
            result = LoginDatabase.PQuery("SELECT points FROM account WHERE id = '%u'", pPlayer->GetSession()->GetAccountId());
            if (!result) // check
            {
                pPlayer->GetSession()->SendAreaTriggerMessage("I'm Broken! Contact a gamemaster!");
                pPlayer->PlayerTalkClass->ClearMenus();
                OnGossipHello(pPlayer, pCreature);
                return;
            }
            Field *fields = result->Fetch();
            uint32 points = fields[0].GetUInt32();

            if (item == 0)
            {
                pPlayer->GetSession()->SendAreaTriggerMessage("You got %u voting points!", points);
            }
            else
            {
                if (points < cost)
                {
                    pPlayer->GetSession()->SendAreaTriggerMessage("You don't have enough points for this item!");
                }
                else
                {
                    if (pPlayer->AddItem(item, count))
                    {
                        LoginDatabase.PQuery("Update account Set points = points - '%u' WHERE id = '%u'", cost, pPlayer->GetSession()->GetAccountId());
                        pPlayer->GetSession()->SendAreaTriggerMessage("Your points are taken and your item is given!!!");
                    }
                    else
                    {
                        pPlayer->GetSession()->SendAreaTriggerMessage("Item can't be given(your bag is full or you already got the item!)!");
                    }

                }
            }
            pPlayer->PlayerTalkClass->ClearMenus();
            OnGossipHello(pPlayer, pCreature);
        }

        bool OnGossipHello(Player* pPlayer, Creature* pCreature)
        {
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Homuch voting points do i have ?", GOSSIP_SENDER_MAIN, 1000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Mounts", GOSSIP_SENDER_MAIN, 2000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Starter Items", GOSSIP_SENDER_MAIN, 3000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Promo 200 Token 250>VP", GOSSIP_SENDER_MAIN, 4000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Promo 200 Token 250>VP", GOSSIP_SENDER_MAIN, 5000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Goodies", GOSSIP_SENDER_MAIN, 6000);
            SendGossipMenuFor(pPlayer, 600000, pCreature->GetGUID());
            return true;
        }

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

            switch (uiAction)
            {
            case 1000:
                RewardItem(pPlayer, pCreature, 0, 0, 0);
                break;
            case 2000:
                pPlayer->PlayerTalkClass->ClearMenus();
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Mechano-hog 50>VP", GOSSIP_SENDER_MAIN, 2001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Mekgineer's Chopper 50>VP", GOSSIP_SENDER_MAIN, 2002);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Celestial Steed 200>VP", GOSSIP_SENDER_MAIN, 2003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Invincible's Reins 200>VP", GOSSIP_SENDER_MAIN, 2004);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Invincible's Reins 200>VP", GOSSIP_SENDER_MAIN, 2003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 9999);
                SendGossipMenuFor(pPlayer, 600000, pCreature->GetGUID());
                return true;
                break;
            case 2001:
                RewardItem(pPlayer, pCreature, 41508, 1, 50);
                break;
            case 2002:
                RewardItem(pPlayer, pCreature, 44413, 1, 50);
                break;
            case 2003:
                RewardItem(pPlayer, pCreature, 54811, 1, 200);
                break;
            case 2004:
                RewardItem(pPlayer, pCreature, 50818, 1, 200);
                break;
            case 2005:
                RewardItem(pPlayer, pCreature, 50734, 1, 70);
                break;
            case 2006:
                RewardItem(pPlayer, pCreature, 50730, 1, 120);
                break;
            case 2007:
                RewardItem(pPlayer, pCreature, 50732, 1, 70);
                break;
            case 2008:
                RewardItem(pPlayer, pCreature, 50736, 1, 70);
                break;
            case 2009:
                RewardItem(pPlayer, pCreature, 50735, 1, 120);
                break;
            case 3000:
                pPlayer->PlayerTalkClass->ClearMenus();
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Exp Booster: 30% quest and kill 20>VP", GOSSIP_SENDER_MAIN, 3001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 999);
                SendGossipMenuFor(pPlayer, 600000, pCreature->GetGUID());
                return true;
                break;
            case 3001:
                RewardItem(pPlayer, pCreature, 90000, 1, 20);
                break;
            case 4000:
                RewardItem(pPlayer, pCreature, 58000, 1, 300);
                break;
            case 5000:
                pPlayer->PlayerTalkClass->ClearMenus();
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Murloc Costume 20>VP", GOSSIP_SENDER_MAIN, 5001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Muradin's Favor 20>VP", GOSSIP_SENDER_MAIN, 5002);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Core Hound Pup 15>VP", GOSSIP_SENDER_MAIN, 5003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Phoenix Hatchling 15>VP", GOSSIP_SENDER_MAIN, 5004);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Lil' Ragnaros 15>VP", GOSSIP_SENDER_MAIN, 5005);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Landro's Lil' XT 15>VP", GOSSIP_SENDER_MAIN, 5006);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Gryphon Hatchling 15>VP", GOSSIP_SENDER_MAIN, 5007);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Perky Pug 15>VP", GOSSIP_SENDER_MAIN, 5008);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Toothy's Bucket 15>VP", GOSSIP_SENDER_MAIN, 5009);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Warbot Ignition Key 15>VP", GOSSIP_SENDER_MAIN, 5010);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "The Flag of Ownership 20>VP", GOSSIP_SENDER_MAIN, 5011);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 9999);
                SendGossipMenuFor(pPlayer, 600000, pCreature->GetGUID());
                return true;
                break;
            case 5001:
                RewardItem(pPlayer, pCreature, 33079, 1, 20);
                break;
            case 5002:
                RewardItem(pPlayer, pCreature, 52201, 1, 20);
                break;
            case 5003:
                RewardItem(pPlayer, pCreature, 49646, 1, 15);
                break;
            case 5004:
                RewardItem(pPlayer, pCreature, 49646, 1, 15);
                break;
            case 5005:
                RewardItem(pPlayer, pCreature, 68385, 1, 15);
                break;
            case 5006:
                RewardItem(pPlayer, pCreature, 67128, 1, 15);
                break;
            case 5007:
                RewardItem(pPlayer, pCreature, 49662, 1, 15);
                break;
            case 5008:
                RewardItem(pPlayer, pCreature, 49912, 1, 15);
                break;
            case 5009:
                RewardItem(pPlayer, pCreature, 33816, 1, 15);
                break;
            case 5010:
                RewardItem(pPlayer, pCreature, 46767, 1, 15);
                break;
            case 5011:
                RewardItem(pPlayer, pCreature, 38578, 1, 20);
                break;
            case 9999:
                pPlayer->PlayerTalkClass->ClearMenus();
                OnGossipHello(pPlayer, pCreature);
                break;
            }


            return true;
        }
    };

    CreatureAI* GetAI(Creature* pCreature) const override
    {
        return  new my_scriptAI(pCreature);
    }
};

void AddSC_my_script()
{
    new my_script();
}



Sorry for double post i may have found the issue ill report back!



Got it working with this Enjoy =)
ps. remove the goodies section as there is no case 6000 and rename the previes menu item as goodies instead

Code:
#include "Item.h"
#include "DBCStores.h"
#include "Log.h"
#include "DatabaseEnv.h"
#include "CharacterDatabase.h"
#include "Player.h"
#include "WorldSession.h"
#include "ScriptedGossip.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "GossipDef.h"
#include "Creature.h"
#include "ObjectMgr.h"
#include "ScriptedCreature.h"
#include "PassiveAI.h"
#include "Bag.h"
#include "Common.h"
#include "Config.h"
#include "DBCStructure.h"
#include "Define.h"
#include "Field.h"
#include "GameEventMgr.h"
#include "ItemTemplate.h"
#include "Language.h"
#include "ObjectGuid.h"
#include "QueryResult.h"
#include "SharedDefines.h"
#include "Transaction.h"
#include <sstream>
#include <string>

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

    class my_scriptAI : public ScriptedAI
    {
    public:
        my_scriptAI(Creature* pCreature) : ScriptedAI(pCreature) {}


        bool GossipHello(Player* pPlayer) override
        {

            return OnGossipHello(pPlayer, me);
        }

        void RewardItem(Player* pPlayer, Creature* pCreature, int item, int count, int cost)
        {
            QueryResult result;
            result = LoginDatabase.PQuery("SELECT points FROM account WHERE id = '%u'", pPlayer->GetSession()->GetAccountId());
            if (!result) // check
            {
                pPlayer->GetSession()->SendAreaTriggerMessage("I'm Broken! Contact a gamemaster!");
                ClearGossipMenuFor(pPlayer);
                OnGossipHello(pPlayer, pCreature);
                return;
            }
            Field *fields = result->Fetch();
            uint32 points = fields[0].GetUInt32();

            if (item == 0)
            {
                pPlayer->GetSession()->SendAreaTriggerMessage("You got %u voting points!", points);
            }
            else
            {
                if (points < cost)
                {
                    pPlayer->GetSession()->SendAreaTriggerMessage("You don't have enough points for this item!");
                }
                else
                {
                    if (pPlayer->AddItem(item, count))
                    {
                        LoginDatabase.PQuery("Update account Set points = points - '%u' WHERE id = '%u'", cost, pPlayer->GetSession()->GetAccountId());
                        pPlayer->GetSession()->SendAreaTriggerMessage("Your points are taken and your item is given!!!");
                    }
                    else
                    {
                        pPlayer->GetSession()->SendAreaTriggerMessage("Item can't be given(your bag is full or you already got the item!)!");
                    }

                }
            }
            pPlayer->PlayerTalkClass->ClearMenus();
            OnGossipHello(pPlayer, pCreature);
        }

        bool GossipSelect(Player* pPlayer, uint32 /*menu_id*/, uint32 gossipListId) override
        {
            uint32 sender = pPlayer->PlayerTalkClass->GetGossipOptionSender(gossipListId);
            uint32 action = pPlayer->PlayerTalkClass->GetGossipOptionAction(gossipListId);
            return OnGossipSelect(pPlayer, me, sender, action);
        }

        bool OnGossipHello(Player* pPlayer, Creature* pCreature)
        {
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Homuch voting points do i have ?", GOSSIP_SENDER_MAIN, 1000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Mounts", GOSSIP_SENDER_MAIN, 2000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Starter Items", GOSSIP_SENDER_MAIN, 3000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Promo 200 Token 250>VP", GOSSIP_SENDER_MAIN, 4000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Promo 200 Token 250>VP", GOSSIP_SENDER_MAIN, 5000);
            AddGossipItemFor(pPlayer, GOSSIP_ICON_CHAT, "Goodies", GOSSIP_SENDER_MAIN, 6000);
            SendGossipMenuFor(pPlayer, DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
            return true;
        }

        bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
        {
            ClearGossipMenuFor(pPlayer);

            switch (uiAction)
            {
            case 1000:
                RewardItem(pPlayer, pCreature, 0, 0, 0);
                break;
            case 2000:
                pPlayer->PlayerTalkClass->ClearMenus();
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Mechano-hog 50>VP", GOSSIP_SENDER_MAIN, 2001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Mekgineer's Chopper 50>VP", GOSSIP_SENDER_MAIN, 2002);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Celestial Steed 200>VP", GOSSIP_SENDER_MAIN, 2003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Invincible's Reins 200>VP", GOSSIP_SENDER_MAIN, 2004);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Invincible's Reins 200>VP", GOSSIP_SENDER_MAIN, 2003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 9999);
                SendGossipMenuFor(pPlayer, DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
                return true;
                break;
            case 2001:
                RewardItem(pPlayer, pCreature, 41508, 1, 50);
                break;
            case 2002:
                RewardItem(pPlayer, pCreature, 44413, 1, 50);
                break;
            case 2003:
                RewardItem(pPlayer, pCreature, 54811, 1, 200);
                break;
            case 2004:
                RewardItem(pPlayer, pCreature, 50818, 1, 200);
                break;
            case 2005:
                RewardItem(pPlayer, pCreature, 50734, 1, 70);
                break;
            case 2006:
                RewardItem(pPlayer, pCreature, 50730, 1, 120);
                break;
            case 2007:
                RewardItem(pPlayer, pCreature, 50732, 1, 70);
                break;
            case 2008:
                RewardItem(pPlayer, pCreature, 50736, 1, 70);
                break;
            case 2009:
                RewardItem(pPlayer, pCreature, 50735, 1, 120);
                break;
            case 3000:
                ClearGossipMenuFor(pPlayer);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Exp Booster: 30% quest and kill 20>VP", GOSSIP_SENDER_MAIN, 3001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 999);
                SendGossipMenuFor(pPlayer, DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
                return true;
                break;
            case 3001:
                RewardItem(pPlayer, pCreature, 90000, 1, 20);
                break;
            case 4000:
                RewardItem(pPlayer, pCreature, 58000, 1, 300);
                break;
            case 5000:
                ClearGossipMenuFor(pPlayer);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Murloc Costume 20>VP", GOSSIP_SENDER_MAIN, 5001);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Muradin's Favor 20>VP", GOSSIP_SENDER_MAIN, 5002);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Core Hound Pup 15>VP", GOSSIP_SENDER_MAIN, 5003);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Phoenix Hatchling 15>VP", GOSSIP_SENDER_MAIN, 5004);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Lil' Ragnaros 15>VP", GOSSIP_SENDER_MAIN, 5005);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Landro's Lil' XT 15>VP", GOSSIP_SENDER_MAIN, 5006);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Gryphon Hatchling 15>VP", GOSSIP_SENDER_MAIN, 5007);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Perky Pug 15>VP", GOSSIP_SENDER_MAIN, 5008);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Toothy's Bucket 15>VP", GOSSIP_SENDER_MAIN, 5009);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Warbot Ignition Key 15>VP", GOSSIP_SENDER_MAIN, 5010);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "The Flag of Ownership 20>VP", GOSSIP_SENDER_MAIN, 5011);
                AddGossipItemFor(pPlayer, GOSSIP_ICON_DOT, "Return", GOSSIP_SENDER_MAIN, 9999);
                SendGossipMenuFor(pPlayer, DEFAULT_GOSSIP_MESSAGE, pCreature->GetGUID());
                return true;
                break;
            case 5001:
                RewardItem(pPlayer, pCreature, 33079, 1, 20);
                break;
            case 5002:
                RewardItem(pPlayer, pCreature, 52201, 1, 20);
                break;
            case 5003:
                RewardItem(pPlayer, pCreature, 49646, 1, 15);
                break;
            case 5004:
                RewardItem(pPlayer, pCreature, 49646, 1, 15);
                break;
            case 5005:
                RewardItem(pPlayer, pCreature, 68385, 1, 15);
                break;
            case 5006:
                RewardItem(pPlayer, pCreature, 67128, 1, 15);
                break;
            case 5007:
                RewardItem(pPlayer, pCreature, 49662, 1, 15);
                break;
            case 5008:
                RewardItem(pPlayer, pCreature, 49912, 1, 15);
                break;
            case 5009:
                RewardItem(pPlayer, pCreature, 33816, 1, 15);
                break;
            case 5010:
                RewardItem(pPlayer, pCreature, 46767, 1, 15);
                break;
            case 5011:
                RewardItem(pPlayer, pCreature, 38578, 1, 20);
                break;
            case 9999:
                ClearGossipMenuFor(pPlayer);
                OnGossipHello(pPlayer, pCreature);
                break;
            }


            return true;
        }
    };

    CreatureAI* GetAI(Creature* pCreature) const override
    {
        return  new my_scriptAI(pCreature);
    }
};

void AddSC_my_script()
{
    new my_script();
}
 
Back
Top