Advertisement
Rochet2

Untitled

Jan 16th, 2012
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local T = {Que = {}}
  2. local Running = false
  3.  
  4. function T.Exists(pPlayer)
  5.     if(pPlayer and type(pPlayer) == "userdata" and pPlayer:GetName()) then
  6.         return true
  7.     end
  8.     return false
  9. end
  10.  
  11. function T.Hello(pUnit, event, pPlayer)
  12.     pUnit:GossipCreateMenu(100, pPlayer, 0)
  13.     pUnit:GossipMenuAddItem(0, "Queuers: "..(#T), 0, 0, '', 0)
  14.     if(not T.Que[tostring(pPlayer)]) then
  15.         pUnit:GossipMenuAddItem(0, "Join the queue", 1, 0, '', 0) -- Joining fee 10gold
  16.     else
  17.         pUnit:GossipMenuAddItem(0, "Leave the queue", 2, 0, 'Leave the queue? Bet will be refunded.', 0)
  18.     end
  19.     pUnit:GossipSendMenu(pPlayer)
  20. end
  21.  
  22. function T.Teleport()
  23.     if(#T < 2) then
  24.         return
  25.     end
  26.     if(not T.Exists(T[1])) then
  27.         table.remove(T, 1)
  28.         T.Teleport()
  29.         return
  30.     end
  31.     if(not T.Exists(T[2])) then
  32.         table.remove(T, 2)
  33.         T.Teleport()
  34.         return
  35.     end
  36.     local x,y,z,o = T[1]:GetLocation()
  37.     local map = T[1]:GetMapId()
  38.     T.Loc1 = {map,x,y,z,o}
  39.     local x,y,z,o = T[2]:GetLocation()
  40.     local map = T[2]:GetMapId()
  41.     T.Loc2 = {map,x,y,z,o}
  42.    
  43.     -- Fill in the coordinates!
  44.     T[1]:Teleport(map, x, y, z, o) -- Teleport player 1
  45.     T[2]:Teleport(map, x, y, z, o) -- teleport player 2
  46.    
  47.     -- Timer to automatically end the duel/arena/bg after 10 min (10 min = 600 sec = 600000 ms)
  48.     T.Event = CreateLuaEvent(function() T.End(tostring(T[1]), tostring(T[2])) end, 600000, 1)
  49.    
  50.     Running = true
  51. end
  52.  
  53. function T.Select(pUnit, event, pPlayer, id, intid, code)
  54.     if(intid == 0) then
  55.         T.Hello(pUnit, event, pPlayer)
  56.         return
  57.     elseif(intid == 1) then
  58.         table.insert(T, pPlayer)
  59.         T.Que[tostring(pPlayer)] = true
  60.         pPlayer:SendAreaTriggerMessage("You have been added to the queue")
  61.         if(not Running and #T >= 2) then
  62.             T.Teleport()
  63.         end
  64.     elseif(intid == 2) then
  65.         local tstr = tostring(pPlayer)
  66.         for k,v in ipairs(T) do
  67.             if(tostring(v) == tstr) then
  68.                 table.remove(T, k)
  69.                 T.Que[tostring(pPlayer)] = nil
  70.                 break
  71.             end
  72.         end
  73.         pPlayer:SendAreaTriggerMessage("You have been removed from the queue")
  74.     end
  75.     pPlayer:GossipComplete()
  76. end
  77.  
  78. function T.Kill(event, pKiller, pVictim)
  79.     local strK, strV = tostring(pKiller), tostring(pVictim)
  80.     if(not Running or strK == strV) then
  81.         return
  82.     end
  83.     local str1, str2 = tostring(T[1]), tostring(T[2])
  84.     if((str1 == strK or str1 == strV) and (str2 == strK or str2 == strV)) then
  85.         -- Rewards and such go here:
  86.             pKiller:AddItem(121001, 1)
  87.            
  88.         --
  89.         DestroyLuaEvent(T.Event)
  90.         pVictim:ResurrectPlayer()
  91.         T.End(strK, strV)
  92.     end
  93. end
  94.  
  95. function T.End(str1, str2)
  96.     T[1]:Teleport(T.Loc1[1], T.Loc1[2], T.Loc1[3], T.Loc1[4], T.Loc1[5]) -- Teleport player 1 back
  97.     T[2]:Teleport(T.Loc2[1], T.Loc2[2], T.Loc2[3], T.Loc2[4], T.Loc2[5]) -- Teleport player 2 back
  98.     table.remove(T, 1)
  99.     table.remove(T, 1)
  100.     T.Que[str1] = nil
  101.     T.Que[str2] = nil
  102.     Running = false
  103.     T.Teleport()
  104. end
  105.  
  106. local Entry = 12345
  107. RegisterUnitGossipEvent(89102, 1, T.Hello)
  108. RegisterUnitGossipEvent(89102, 2, T.Select)
  109. RegisterServerHook(2, T.Kill)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement