• Unfortunately, we have experienced significant hard drive damage that requires urgent maintenance and rebuilding. The forum will be a state of read only until we install our new drives and rebuild all the configurations needed. Please follow our Facebook page for updates, we will be back up shortly! (The forum could go offline at any given time due to the nature of the failed drives whilst awaiting the upgrades.) When you see an Incapsula error, you know we are in the process of migration.

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