-
-
Save callmephil/a81e20990eb749934dff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "ScriptPCH.h" | |
class gamble_npc : public CreatureScript | |
{ | |
public: | |
gamble_npc() : CreatureScript("gamble_npc") { } | |
std::string colorstring(int8 type) | |
{ | |
std::string _color; | |
switch(type) | |
{ | |
case 1: | |
_color = "black"; | |
case 2: | |
_color = "red"; | |
case 3: | |
_color = "green"; | |
} | |
return _color; | |
} | |
int8 GenerateNumberMessage(int8 numbervalue) | |
{ | |
int8 black[18] = {2, 28, 26, 11, 20, 17, 22, 15, 24, 13, 10, 29, 8, 31, 6, 33, 4, 35}; | |
int8 red[18] = {9, 30, 7, 32, 5, 34, 3, 36, 1, 27, 25, 12, 19, 18, 21, 16, 23, 14}; | |
int8 green[2] = {0, 00}; | |
int8 _number; | |
for(int8 i = 0; i < 18; i++) | |
{ | |
if (numbervalue == black[i]) | |
_number = 2; | |
else if (numbervalue == red[i]) | |
_number = 3; | |
else if (numbervalue == 37 || 0) | |
_number = 4; | |
} | |
return _number; | |
} | |
bool OnGossipHello(Player * player, Creature * creature) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "I want to play Roulette!", GOSSIP_SENDER_MAIN, 1337); | |
player->ADD_GOSSIP_ITEM(3, "How does this Game work?", GOSSIP_SENDER_MAIN, 999); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
return true; | |
} | |
bool OnGossipSelect(Player * player, Creature * creature, uint32 sender, uint32 uiAction) | |
{ | |
player->PlayerTalkClass->ClearMenus(); | |
if (uiAction == 1337) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "I want to bet on a number.", GOSSIP_SENDER_MAIN,997); | |
player->ADD_GOSSIP_ITEM(3, "I want to bet on a color.", GOSSIP_SENDER_MAIN, 996); | |
player->ADD_GOSSIP_ITEM(3, "I want to bet on a number set.", GOSSIP_SENDER_MAIN, 995); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 997) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "Stats for this table:\nOdds 35:1 (1-36, 0, and 00)\n Payout: x35", GOSSIP_SENDER_MAIN, 997); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 0.", GOSSIP_SENDER_MAIN, 0, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 1.", GOSSIP_SENDER_MAIN, 1, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 2.", GOSSIP_SENDER_MAIN, 2, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 3.", GOSSIP_SENDER_MAIN, 3, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 4.", GOSSIP_SENDER_MAIN, 4, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 5.", GOSSIP_SENDER_MAIN, 5, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 6.", GOSSIP_SENDER_MAIN, 6, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 7.", GOSSIP_SENDER_MAIN, 7, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 8.", GOSSIP_SENDER_MAIN, 8, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 9.", GOSSIP_SENDER_MAIN, 9, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Next", GOSSIP_SENDER_MAIN, 1338); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 1337); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 1338) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "Stats for this table:\nOdds 35:1 (1-36, 0, and 00)\n Payout: x35", GOSSIP_SENDER_MAIN, 997); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 10.", GOSSIP_SENDER_MAIN, 10, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 11.", GOSSIP_SENDER_MAIN, 11, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 12.", GOSSIP_SENDER_MAIN, 12, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 13.", GOSSIP_SENDER_MAIN, 13, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 14.", GOSSIP_SENDER_MAIN, 14, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 15.", GOSSIP_SENDER_MAIN, 15, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 16.", GOSSIP_SENDER_MAIN, 16, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 17.", GOSSIP_SENDER_MAIN, 17, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 18.", GOSSIP_SENDER_MAIN, 18, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Next", GOSSIP_SENDER_MAIN, 1339); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 997); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 1339) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "Stats for this table:\nOdds 35:1 (1-36, 0, and 00)\n Payout: x35", GOSSIP_SENDER_MAIN, 997); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 19.", GOSSIP_SENDER_MAIN, 19, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 20.", GOSSIP_SENDER_MAIN, 20, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 21.", GOSSIP_SENDER_MAIN, 21, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 22.", GOSSIP_SENDER_MAIN, 22, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 23.", GOSSIP_SENDER_MAIN, 23, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 24.", GOSSIP_SENDER_MAIN, 24, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 25.", GOSSIP_SENDER_MAIN, 25, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 26.", GOSSIP_SENDER_MAIN, 26, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 27.", GOSSIP_SENDER_MAIN, 27, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Next", GOSSIP_SENDER_MAIN, 1340); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 1338); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 1340) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "Stats for this table:\nOdds 35:1 (1-36, 0, and 00)\n Payout: x35", GOSSIP_SENDER_MAIN, 997); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 28.", GOSSIP_SENDER_MAIN, 28, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 29.", GOSSIP_SENDER_MAIN, 29, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 30.", GOSSIP_SENDER_MAIN, 30, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 31.", GOSSIP_SENDER_MAIN, 31, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 32.", GOSSIP_SENDER_MAIN, 32, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 33.", GOSSIP_SENDER_MAIN, 33, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 34.", GOSSIP_SENDER_MAIN, 34, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 35.", GOSSIP_SENDER_MAIN, 35, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 36.", GOSSIP_SENDER_MAIN, 36, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 00.", GOSSIP_SENDER_MAIN, 37, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 1339); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 996) | |
{ | |
player->ADD_GOSSIP_ITEM(3, "Stats for this table:\nOdds 1:1 (green is 1:17, as it is 0 and 00)\n Payout: x1 (x17) ", GOSSIP_SENDER_MAIN, 996); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet red.", GOSSIP_SENDER_MAIN, 800, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet black.", GOSSIP_SENDER_MAIN, 810, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet green. (The leprechauns jackpot!)", GOSSIP_SENDER_MAIN, 818, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 1337); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 995) | |
{ | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 1-12. 2:1, Payout: 3x", GOSSIP_SENDER_MAIN, 700, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 13-24. 2:1, Payout: 3x", GOSSIP_SENDER_MAIN, 701, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 25-36. 2:1, Payout: 3x", GOSSIP_SENDER_MAIN, 702, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 1-5. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 703, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 6-10. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 704, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 11-15. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 705, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 16-20. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 706, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 21-25. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 707, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 26-30. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 708, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM_EXTENDED(3, "I want to bet on 31-35. 7:1 Payout: 7x", GOSSIP_SENDER_MAIN, 709, "How much gold do you want to bet?", 0, true); | |
player->ADD_GOSSIP_ITEM(3, "Back", GOSSIP_SENDER_MAIN, 1337); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
if(uiAction == 999) | |
{ | |
player->ADD_GOSSIP_ITEM(7, "A ball is thrown onto the roulette table wheel, when the ball stops on a colored number, you either win or lose your bet. You may bet on specific numbers, even numbers, odd numbers, colors or ranges of 1-18 and 19-36. Your winnings will be The colored numbers are the following:\n Black: 2, 28, 26, 11, 20, 17, 22, 15, 24, 13, 10, 29, 8, 31, 6, 33, 4, 35\n Red: 9, 30, 7, 32, 5, 34, 3, 36, 1, 27, 25, 12, 19, 18, 21, 16, 23, 14\n Green: 0, 00", GOSSIP_SENDER_MAIN, 666); | |
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, creature->GetGUID()); | |
} | |
else if(uiAction == 666) | |
{ | |
OnGossipHello(player, creature); | |
} | |
return true; | |
} | |
bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 uiAction, const char* code) // happens when an extended gossip item is selected and the code is set to true for the gossip item. | |
{ | |
player->PlayerTalkClass->ClearMenus(); | |
uint32 betnumber = 0; | |
uint32 gold = uint32(atol(code)) * 1000; | |
std::ostringstream message; | |
if(uiAction >= 0 && uiAction <= 37) | |
{ | |
Gamblemode(player, creature, gold, 35, uiAction, uiAction, 0); | |
} | |
else | |
{ | |
switch(uiAction) | |
{ | |
case 700: | |
Gamblemode(player, creature, gold, 3, 1, 12, 0); | |
break; | |
case 701: | |
Gamblemode(player, creature, gold, 3, 13, 24, 0); | |
break; | |
case 702: | |
Gamblemode(player, creature, gold, 3, 25, 36, 0); | |
break; | |
case 703: | |
Gamblemode(player, creature, gold, 7, 1, 5, 0); | |
break; | |
case 704: | |
Gamblemode(player, creature, gold, 7, 6, 10, 0); | |
break; | |
case 705: | |
Gamblemode(player, creature, gold, 7, 11, 15, 0); | |
break; | |
case 706: | |
Gamblemode(player, creature, gold, 7, 16, 20, 0); | |
break; | |
case 707: | |
Gamblemode(player, creature, gold, 7, 21, 25, 0); | |
break; | |
case 708: | |
Gamblemode(player, creature, gold, 7, 26, 30, 0); | |
break; | |
case 709: | |
Gamblemode(player, creature, gold, 7, 31, 35, 0); | |
break; | |
case 800: | |
Gamblemode(player, creature, gold, 2, 0, 37, 2); | |
break; | |
case 810: | |
Gamblemode(player, creature, gold, 2, 0, 37, 1); | |
break; | |
case 818: | |
Gamblemode(player, creature, gold, 17, 0, 37, 3); | |
break; | |
} | |
} | |
OnGossipHello(player, creature); | |
return true; | |
} | |
bool Gamblemode(Player* player, Creature * creature, uint32 moneybet, uint32 multiplier, uint32 minimum, uint32 maximum, int8 color) | |
{ | |
std::ostringstream message; | |
uint32 winningnumber = 0; | |
winningnumber = urand(0,37); | |
uint32 winnings = moneybet * multiplier; | |
if (winningnumber == 37) | |
winningnumber = 00; | |
if(player->GetMoney() < moneybet) | |
{ | |
player->GetSession()->SendNotification("You don't have enough gold!"); | |
return false; | |
} | |
if(color) | |
{ | |
if(GenerateNumberMessage(winningnumber) == color) | |
{ | |
player->ModifyMoney(player->GetMoney() + winnings); | |
player->PlayDirectSound(3337); | |
player->CastSpell(player, 47292); | |
player->CastSpell(player, 44940); | |
message << "AAAAAND the ball lands on" << std::setw(1) << colorstring(color) << std::setw(1) << "Congratulations" << std::setw(1) << player->GetName() << std::setw(1) << " You've won" << std::setw(1) << winnings << std::setw(1) << "gold!"; | |
player->MonsterWhisper(message.str().c_str(), player->GetGUID()); | |
return true; | |
} | |
else | |
{ | |
player->ModifyMoney(player->GetMoney() - moneybet); | |
message << "AAAAAND the ball lands on" << std::setw(1) << colorstring(color) << std::setw(1) << ". So sorry, " << std::setw(1) << player->GetName() << std::setw(1) << ", but you've lost. Better luck next time!"; | |
player->MonsterWhisper(message.str().c_str(), player->GetGUID()); | |
return false; | |
} | |
} | |
else | |
{ | |
if(winningnumber >= minimum && winningnumber <= maximum) | |
{ | |
player->ModifyMoney(player->GetMoney() + winnings); | |
player->PlayDirectSound(3337); | |
player->CastSpell(player, 47292); | |
player->CastSpell(player, 44940); | |
message << "AAAAAND the ball lands on" << std::setw(1) << winningnumber << std::setw(1) << "Congratulations" << std::setw(1) << player->GetName() << std::setw(1) << " You've won" << std::setw(1) << winnings << std::setw(1) << "gold!"; | |
player->MonsterWhisper(message.str().c_str(), player->GetGUID()); | |
return true; | |
} | |
else | |
{ | |
player->ModifyMoney(player->GetMoney() - moneybet); | |
message << "AAAAAND the ball lands on" << std::setw(1) << winningnumber << std::setw(1) << ". So sorry, " << std::setw(1) << player->GetName() << std::setw(1) << ", but you've lost. Better luck next time!"; | |
player->MonsterWhisper(message.str().c_str(), player->GetGUID()); | |
return false; | |
} | |
} | |
} | |
struct gambler_passivesAI : public ScriptedAI | |
{ | |
gambler_passivesAI(Creature * c) : ScriptedAI(c){ } | |
uint32 uiAdATimer; | |
uint32 uiAdBTimer; | |
uint32 uiAdCTimer; | |
void Reset() | |
{ | |
uiAdATimer = 1000; | |
uiAdBTimer = 23000; | |
uiAdCTimer = 11000; | |
} | |
void UpdateAI(uint32 diff) | |
{ | |
if(uiAdATimer <= diff) | |
{ | |
me->MonsterSay("Come one, come all! Step right up to Crow's Casino! place your bets, place your bets!", LANG_UNIVERSAL, NULL); | |
me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); | |
me->CastSpell(me, 44940); | |
uiAdATimer = 61000; | |
} | |
else | |
uiAdATimer -= diff; | |
if(uiAdBTimer <= diff) | |
{ | |
me->MonsterSay("Come on guys! Place your bets, Don't be a chicken, Go hard or go home!", LANG_UNIVERSAL, NULL); | |
me->HandleEmoteCommand(EMOTE_ONESHOT_CHICKEN); | |
uiAdBTimer = 61000; | |
} | |
else | |
uiAdBTimer -= diff; | |
if(uiAdCTimer <= diff) | |
{ | |
me->MonsterSay("OH C'MON! YOU'RE MAKIN' ME CRY, Come and gamble! Step right up and win big today!", LANG_UNIVERSAL, NULL); | |
me->HandleEmoteCommand(EMOTE_ONESHOT_CRY); | |
uiAdCTimer = 61000; | |
} | |
else | |
uiAdCTimer -= diff; | |
} | |
}; | |
CreatureAI * GetAI(Creature * pCreature) const | |
{ | |
return new gambler_passivesAI(pCreature); | |
} | |
}; | |
void AddSC_gamble_npc() | |
{ | |
new gamble_npc(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment