MichaelCrow

Untitled

Jan 11th, 2023
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 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. local week_number = WorldDBQuery("SELECT week_number FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  55.  
  56. --Get the lottery numbers for the current week
  57. local number1 = WorldDBQuery("SELECT number1 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  58. local number2 = WorldDBQuery("SELECT number2 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  59. local number3 = WorldDBQuery("SELECT number3 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  60. local number4 = WorldDBQuery("SELECT number4 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  61. local number5 = WorldDBQuery("SELECT number5 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  62. local number6 = WorldDBQuery("SELECT number6 FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  63. local amount = WorldDBQuery("SELECT amount FROM lottery WHERE week_number="..week_number):GetUInt32(0);
  64.  
  65. --Loop through all lottery tickets and check if any of them match the lottery numbers
  66. if(lottery_tickets)then
  67. for key, ticket in pairs(lottery_tickets) do
  68. for ticket_id,ticket in pairs(ticket) do
  69. local ticket_number1 = ticket.number1;
  70. local ticket_number2 = ticket.number2;
  71. local ticket_number3 = ticket.number3;
  72. local ticket_number4 = ticket.number4;
  73. local ticket_number5 = ticket.number5;
  74. local ticket_number6 = ticket.number6;
  75. local player_lowguid = ticket.player_guid;
  76.  
  77. 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
  78. --Send mail to the player with the amount of money won
  79. SendMail(player_lowguid, "Lottery Winner!", "Congratulations! You have won the lottery and have been awarded "..amount.." copper!", 0, 0, 0, 0);
  80. end
  81. end
  82. end
  83. end
  84. end
  85. RegisterServerEvent(LotteryTicketEventEnd, 33)
  86.  
  87. -----------------------------------------------------
  88.  
  89. --Generates the initial lottery numbers.
  90. local function LotteryTicketEventBegin(event, gameeventid)
  91. local week_number = WorldDBQuery("SELECT week_number FROM lottery ORDER BY week_number DESC LIMIT 1"):GetUInt32(0);
  92. local week = 0;
  93. if (week_number == 0) then
  94. week = 1;
  95. else
  96. week = week_number + 1;
  97. end
  98.  
  99. local number1 = math.random(1,32);
  100. local number2 = math.random(1,32);
  101. local number3 = math.random(1,32);
  102. local number4 = math.random(1,32);
  103. local number5 = math.random(1,32);
  104. local number6 = math.random(1,32);
  105.  
  106. WorldDBExecute("REPLACE lottery (week_number, number1, number2, number3, number4, number5, number6, amount) VALUES ("..week..", "..number1..", "..number2..", "..number3..", "..number4..", "..number5..", "..number6..", 0)");
  107. end
  108. RegisterServerEvent(LotteryTicketEventBegin, 34);
  109.  
  110. --------------------------------------------------------------------------------------------------------------------
  111.  
  112. local function LotteryGossipNpc(event, player, creature)
  113. local ticket_count = 0;
  114. for key, tickets in pairs(lottery_tickets) do
  115. if(key == player:GetGUIDLow()) then
  116. for ticket_key, ticket in pairs(tickets) do
  117. 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);
  118. creature:GossipMenuAddItem(0, ticket_string, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF)
  119. ticket_count = ticket_count + 1;
  120. end
  121. end
  122.  
  123. if(ticket_count < 3)then
  124. creature:GossipMenuAddItem(0, "Purchase Lottery Ticket", 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1)
  125. end
  126. end
  127.  
  128. creature:GossipSendMenu(player)
  129. end
  130.  
  131.  
  132. local function LotteryGossipNpcSelect(event, player, creature, sender, intid)
  133.  
  134. if (intid == GOSSIP_ACTION_INFO_DEF) then
  135. creature:GossipComplete(player)
  136. end
  137.  
  138. if(intid == GOSSIP_ACTION_INFO_DEF+1)then
  139. --Check if the player has enough money
  140. if(player:GetMoney() < 100000)then
  141. creature:SendUnitSay("You do not have enough money to buy a lottery ticket!", 0)
  142. else
  143. --Subtract the money from the player
  144. player:ModifyMoney(-100000);
  145.  
  146. --Generate the 6 lottery numbers
  147. local number1 = math.random(1, 32);
  148. local number2 = math.random(1, 32);
  149. local number3 = math.random(1, 32);
  150. local number4 = math.random(1, 32);
  151. local number5 = math.random(1, 32);
  152. local number6 = math.random(1, 32);
  153.  
  154. --Get the current week number
  155. local week_number = WorldDBQuery("SELECT week_number FROM lottery ORDER BY week_number DESC LIMIT 1"):GetUInt32(0);
  156.  
  157. --Insert the ticket into the database
  158. 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..")");
  159.  
  160. --Add the ticket to the players session
  161.  
  162. local new_ticket = {
  163. ticket_id = WorldDBQuery("SELECT ticket_id FROM lottery_tickets ORDER BY ticket_id DESC LIMIT 1"):GetUInt32(0),
  164. week_number = week_number,
  165. player_guid = player:GetGUIDLow(),
  166. player_account_id = player:GetAccountId(),
  167. number1 = number1,
  168. number2 = number2,
  169. number3 = number3,
  170. number4 = number4,
  171. number5 = number5,
  172. number6 = number6
  173. }
  174.  
  175. if (lottery_tickets[player:GetGUIDLow()] == nil) then
  176. lottery_tickets[player:GetGUIDLow()] = {}
  177. end
  178.  
  179. lottery_tickets[player:GetGUIDLow()][new_ticket.ticket_id] = new_ticket;
  180. creature:SendUnitSay("Your lottery ticket has been purchased! Good luck!", 0)
  181. end
  182. end
  183.  
  184. creature:GossipComplete(player)
  185. end
  186. RegisterCreatureGossipEvent(12345, 1, LotteryGossipNpc)
  187. RegisterCreatureGossipEvent(12345, 2, LotteryGossipNpcSelect)
Advertisement
Add Comment
Please, Sign In to add comment