MichaelCrow

Untitled

Jan 11th, 2023
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.08 KB | None | 0 0
  1.  
  2. local lottery_tickets = {}
  3.  
  4. local GOSSIP_ACTION_INFO_DEF = 1000
  5. local GOSSIP_SENDER_MAIN = 1
  6.  
  7. local function LotteryOnLogin(event, player)
  8. --Get all lottery tickets for the player
  9. local tickets = WorldDBQuery("SELECT * FROM lottery_tickets WHERE player_guid="..player:GetGUIDLow());
  10.  
  11. --Loop through all tickets and add them to the table
  12. if(tickets)then
  13. while(tickets:NextRow())do
  14.  
  15. local ticket = {
  16. ticket_id = tickets:GetUInt32(0),
  17. week_number = tickets:GetUInt32(1),
  18. player_guid = tickets:GetUInt32(2),
  19. player_account_id = tickets:GetUInt32(3),
  20. number1 = tickets:GetUInt32(4),
  21. number2 = tickets:GetUInt32(5),
  22. number3 = tickets:GetUInt32(6),
  23. number4 = tickets:GetUInt32(7),
  24. number5 = tickets:GetUInt32(8),
  25. number6 = tickets:GetUInt32(9)
  26. }
  27.  
  28. --Add the ticket to the lookup table
  29. if lottery_tickets[player:GetGUIDLow()] == nil then
  30. lottery_tickets[player:GetGUIDLow()] = {}
  31. end
  32. lottery_tickets[player:GetGUIDLow()][ticket.ticket_id] = ticket;
  33. end
  34. end
  35.  
  36. end
  37. RegisterPlayerEvent(LotteryOnLogin, 3)
  38.  
  39. --------------------------------------------------------
  40.  
  41. --RegisterPlayerEvent for when a player logs out
  42. local function LotteryOnLogout(event, player)
  43.  
  44. --Remove the entry from the lottery_tickets table
  45. if(lottery_tickets[player:GetGUIDLow()])then
  46. lottery_tickets[player:GetGUIDLow()] = nil;
  47. end
  48. end
  49. RegisterPlayerEvent(LotteryOnLogout, 4)
  50.  
  51. --------------------------------------------------------------------------------------------------------------------
  52.  
  53. local function LotteryTicketEventEnd(event, gameeventid)
  54. if (gameeventid == 89) then
  55. local week_number = WorldDBQuery("SELECT week_number FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  56.  
  57. --Get the lottery numbers for the current week
  58. local number1 = WorldDBQuery("SELECT number1 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  59. local number2 = WorldDBQuery("SELECT number2 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  60. local number3 = WorldDBQuery("SELECT number3 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  61. local number4 = WorldDBQuery("SELECT number4 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  62. local number5 = WorldDBQuery("SELECT number5 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  63. local number6 = WorldDBQuery("SELECT number6 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  64. local amount = WorldDBQuery("SELECT amount FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  65. local winners = 0
  66. local winnings = 0
  67.  
  68. --Get all lottery tickets for the current week
  69. local tickets = WorldDBQuery("SELECT * FROM lottery_tickets WHERE week_number="..week_number);
  70.  
  71. --Loop through all tickets and check if any of them match the lottery numbers
  72. if(tickets)then
  73. while(tickets:NextRow())do
  74. local ticket_number1 = tickets:GetUInt32(4);
  75. local ticket_number2 = tickets:GetUInt32(5);
  76. local ticket_number3 = tickets:GetUInt32(6);
  77. local ticket_number4 = tickets:GetUInt32(7);
  78. local ticket_number5 = tickets:GetUInt32(8);
  79. local ticket_number6 = tickets:GetUInt32(9);
  80. local player_lowguid = tickets:GetUInt32(2);
  81.  
  82. if(ticket_number1 == number1 and ticket_number2 == number2 and ticket_number3 == number3 and ticket_number4 == number4 and ticket_number5 == number5 and ticket_number6 == number6)then
  83. --Send mail to the player with the amount of money won
  84. winners = winners + 1;
  85. end
  86. winnings = amount / winners
  87. SendMail(player_lowguid, "Lottery Winner!", "Congratulations! You have won the lottery and have been awarded "..winnings.." copper!", 0, 0, 0, 0);
  88. end
  89. end
  90. end
  91. end
  92. RegisterServerEvent(LotteryTicketEventEnd, 35)
  93.  
  94. -----------------------------------------------------
  95.  
  96. --Generates the initial lottery numbers.
  97. local function LotteryTicketEventBegin(event, gameeventid)
  98. if (gameeventid == 89) then
  99. local week_number = WorldDBQuery("SELECT week_number FROM lottery ORDER BY week_number DESC LIMIT 1"):GetUInt32(0);
  100. local week = 0;
  101. if (week_number == 0) then
  102. week = 1;
  103. else
  104. week = week_number + 1;
  105. end
  106.  
  107. local number1 = math.random(1,32);
  108. local number2 = math.random(1,32);
  109. local number3 = math.random(1,32);
  110. local number4 = math.random(1,32);
  111. local number5 = math.random(1,32);
  112. local number6 = math.random(1,32);
  113.  
  114. WorldDBExecute("REPLACE lottery (week_number, number1, number2, number3, number4, number5, number6, amount) VALUES ("..week..", "..number1..", "..number2..", "..number3..", "..number4..", "..number5..", "..number6..", 0)");
  115. end
  116. end
  117. RegisterServerEvent(LotteryTicketEventBegin, 34);
  118.  
  119. --------------------------------------------------------------------------------------------------------------------
  120.  
  121. local function LotteryGossipNpc(event, player, creature)
  122. local ticket_count = 0;
  123. for key, tickets in pairs(lottery_tickets) do
  124. if(key == player:GetGUIDLow()) then
  125. for ticket_key, ticket in pairs(tickets) do
  126. local ticket_string = string.format("Ticket #%u: %u, %u, %u, %u, %u, %u", ticket.ticket_id, ticket.number1, ticket.number2, ticket.number3, ticket.number4, ticket.number5, ticket.number6);
  127. creature:GossipMenuAddItem(0, ticket_string, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF)
  128. ticket_count = ticket_count + 1;
  129. end
  130. end
  131.  
  132. if(ticket_count < 3)then
  133. creature:GossipMenuAddItem(0, "Purchase Lottery Ticket", 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1)
  134. end
  135. end
  136.  
  137. creature:GossipSendMenu(player)
  138. end
  139.  
  140.  
  141. local function LotteryGossipNpcSelect(event, player, creature, sender, intid)
  142.  
  143. if (intid == GOSSIP_ACTION_INFO_DEF) then
  144. creature:GossipComplete(player)
  145. end
  146.  
  147. if(intid == GOSSIP_ACTION_INFO_DEF+1)then
  148. --Check if the player has enough money
  149. if(player:GetMoney() < 100000)then
  150. creature:SendUnitSay("You do not have enough money to buy a lottery ticket!", 0)
  151. else
  152. --Subtract the money from the player
  153. player:ModifyMoney(-100000);
  154.  
  155. --Generate the 6 lottery numbers
  156. local number1 = math.random(1, 32);
  157. local number2 = math.random(1, 32);
  158. local number3 = math.random(1, 32);
  159. local number4 = math.random(1, 32);
  160. local number5 = math.random(1, 32);
  161. local number6 = math.random(1, 32);
  162.  
  163. --Get the current week number
  164. local week_number = WorldDBQuery("SELECT week_number FROM lottery ORDER BY week_number DESC LIMIT 1"):GetUInt32(0);
  165.  
  166. --Increase the amount in the pot by 70000 copper
  167. WorldDBQuery("UPDATE lottery SET amount=amount+70000 WHERE week_number="..week_number);
  168.  
  169. --Insert the ticket into the database
  170. WorldDBQuery("INSERT INTO lottery_tickets (week_number, player_guid, player_account_id, number1, number2, number3, number4, number5, number6) VALUES ("..week_number..", "..player:GetGUIDLow()..", "..player:GetAccountId()..", "..number1..", "..number2..", "..number3..", "..number4..", "..number5..", "..number6..")");
  171.  
  172. --Add the ticket to the players session
  173.  
  174. local new_ticket = {
  175. ticket_id = WorldDBQuery("SELECT ticket_id FROM lottery_tickets ORDER BY ticket_id DESC LIMIT 1"):GetUInt32(0),
  176. week_number = week_number,
  177. player_guid = player:GetGUIDLow(),
  178. player_account_id = player:GetAccountId(),
  179. number1 = number1,
  180. number2 = number2,
  181. number3 = number3,
  182. number4 = number4,
  183. number5 = number5,
  184. number6 = number6
  185. }
  186.  
  187. if (lottery_tickets[player:GetGUIDLow()] == nil) then
  188. lottery_tickets[player:GetGUIDLow()] = {}
  189. end
  190.  
  191. lottery_tickets[player:GetGUIDLow()][new_ticket.ticket_id] = new_ticket;
  192. creature:SendUnitSay("Your lottery ticket has been purchased! Good luck!", 0)
  193. end
  194. end
  195. creature:GossipComplete(player)
  196. end
  197. RegisterCreatureGossipEvent(1900067, 1, LotteryGossipNpc)
  198. RegisterCreatureGossipEvent(1900067, 2, LotteryGossipNpcSelect)
Advertisement
Add Comment
Please, Sign In to add comment