Guest User

voteskip.lua

a guest
Dec 12th, 2014
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.50 KB | None | 0 0
  1. -- Script by giraffe
  2.  
  3. api_version = "1.6.0.0"
  4.  
  5. -- In seconds the time required before you can vote to skip
  6. required_time = 300
  7.  
  8. -- Percent value between 0 through 100
  9. required_percent = 40
  10.  
  11. -- In seconds the time to check if map should be skipped
  12. skip_check_time = 1.5
  13.  
  14. -- DO NOT EDIT --
  15. has_voted_to_skip = {}
  16. time_waited = {}
  17. map_skipped = false
  18.  
  19. function OnScriptLoad()
  20.     timer(1000, "AddTime")
  21.     timer(skip_check_time * 1000, "SkipCheck")
  22.     register_callback(cb['EVENT_GAME_START'], "OnGameStart")
  23.     register_callback(cb['EVENT_CHAT'], "OnChatMessage")
  24.     register_callback(cb['EVENT_LEAVE'], "OnPlayerLeave")
  25.     register_callback(cb['EVENT_GAME_END'], "OnGameEnd")
  26.  
  27. end
  28.  
  29. function OnScriptUnload() end
  30.  
  31. function OnGameStart()
  32.     map_skipped = false
  33.     has_voted_to_skip = {}
  34.     time_waited = {}
  35. end
  36.  
  37. function OnChatMessage(PlayerIndex, Message)
  38.     if(Message:lower() == "skip") then
  39.         if(map_skipped) then
  40.             say(PlayerIndex, "Map is already changing.")
  41.         elseif(has_voted_to_skip[PlayerIndex] == true) then
  42.             say(PlayerIndex, "You have already voted to skip")
  43.         elseif((required_time - time_waited[PlayerIndex]) <= 0) then
  44.             has_voted_to_skip[PlayerIndex] = true
  45.             players_needed = playersNeeded()
  46.             say_all(get_var(PlayerIndex, "$name") .. " has voted to skip this map.")
  47.             if(players_needed == 0) then
  48.                 say_all("Enough players have voted to skip. Map is changing.")
  49.             elseif(players_needed == 1) then
  50.                 say_all("1 more player vote is needed to skip the map.")
  51.             else
  52.                 say_all(players_needed .. " more player votes are needed to skip the map.")
  53.             end
  54.         else
  55.             say(PlayerIndex, "You must wait " .. (required_time - time_waited[PlayerIndex]) .. " more seconds before voting to skip.")
  56.         end
  57.         return false
  58.     end
  59.     return true
  60. end
  61.  
  62. function OnPlayerLeave(PlayerIndex)
  63.     time_waited[PlayerIndex] = 0
  64.     has_voted_to_skip[PlayerIndex] = false
  65. end
  66.  
  67. function OnGameEnd()
  68.     map_skipped = true
  69. end
  70.  
  71. function AddTime()
  72.     for i=1,16 do
  73.         if(player_present(i) and (time_waited[i] == nil or time_waited[i] < required_time)) then
  74.             if(time_waited[i] == nil) then
  75.                 time_waited[i] = 1
  76.             else
  77.                 time_waited[i] = time_waited[i] + 1
  78.             end
  79.         end
  80.     end
  81.     return true
  82. end
  83.  
  84. function playersNeeded()
  85.     active_players = 0
  86.     players_voted_skip = 0
  87.     for i=1,16 do
  88.         if(player_present(i)) then
  89.             active_players = active_players + 1
  90.         end
  91.         if(has_voted_to_skip[i] ~= nil and has_voted_to_skip[i] == true) then
  92.             players_voted_skip = players_voted_skip + 1
  93.         end
  94.     end
  95.     return math.ceil((active_players) * (required_percent / 100)) - players_voted_skip
  96. end
  97.  
  98. function SkipCheck()
  99.     if(not map_skipped) then
  100.         active_players = 0
  101.         players_voted_skip = 0
  102.         for i=1,16 do
  103.             if(player_present(i)) then
  104.                 active_players = active_players + 1
  105.             end
  106.             if(has_voted_to_skip[i] ~= nil and has_voted_to_skip[i] == true) then
  107.                 players_voted_skip = players_voted_skip + 1
  108.             end
  109.         end
  110.         if((players_voted_skip / active_players) >= (required_percent / 100)) then
  111.             execute_command("sv_map_next")
  112.             map_skipped = true
  113.        end
  114.     end
  115.     return true
  116. end
Advertisement
Add Comment
Please, Sign In to add comment