MichaelCrow

Untitled

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