Guess Some.
This is a challenging npc that's testing your nerves. The npc generate a random number between 0-9, if you break the number on your one chance shot, you gain 500g.
I made these out of my freetime, enjoy. 
Code:
/*
Guesser NPC
Made by Link_S of MMOwned.
Brief Description:
You have one chance on you to guess an random generated number. If you guess right, gold is received.
*/
#include "StdAfx.h"
#define NPCID 0 //<<<<---- Set this. Otherwise it won't work!
map<Player*, int> numbers;
typedef pair<Player*, int> Pairs;
class GuessNumberNPC : public GossipScript
{
public:
void GossipHello(Object * pObject, Player* plr, bool AutoSend)
{
GossipMenu *menu;
objmgr.CreateGossipMenuForPlayer(&menu, pObject->GetGUID(), 1, plr);
menu->AddItem(0, "I'm thinking about a number between 0-9. Do you think you can break it. If you try me again, I change the number to another.", 999);
menu->AddItem(0, "I can easiely break it.", 11);
menu->AddItem(0, "I don't dare to.", 22);
if(AutoSend)
menu->SendTo(plr);
};
void GossipSelectOption(Object * pObject, Player* plr, uint32 id, uint32 intId, const char * code)
{
switch(intId)
{
case 11:
{
GossipMenu *menu;
objmgr.CreateGossipMenuForPlayer(&menu, pObject->GetGUID(), 1, plr);
//We don't want the user to enter the options, make it easier for them and list them as menu options.
for(int i = 0; i < 9; i++)
{
char text[20];
snprintf(text, 20, "%s", i);
menu->AddItem(0, text, i);
}
int random = rand()%9;
numbers.insert(Pairs(plr, random));
menu->SendTo(plr);
}break;
case 22:
static_cast<Creature*>(pObject)->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Such a coward.");
plr->Gossip_Complete();
break;
default:
{
for(map<Player*, int>::iterator itr = numbers.begin(); itr != numbers.end(); itr++)
{
if(itr->first == plr)
{
if(intId == itr->second)
{
plr->SendAreaTriggerMessage("Good, that's the right number.");
plr->BroadcastMessage("Good, that's the right number.");
//Give the player 5g as an reward.
plr->SetUInt32Value(PLAYER_FIELD_COINAGE, (plr->GetUInt32Value(PLAYER_FIELD_COINAGE) + (500 * 10000)));
numbers.erase(itr);
}
else
{
plr->SendAreaTriggerMessage("Wrong number, try again.");
plr->BroadcastMessage("Wrong number, try again.");
GossipHello(pObject, plr, true);
}
}
}
}break;
}
};
void Destroy()
{
delete this;
};
};
void SetupGuessNumberNPC(ScriptMgr * mgr)
{
mgr->register_gossip_script(NPCID, (GossipScript*)new GuessNumberNPC());
}
NOTE: I haven't got the opportunity to test this.