View difference between Paste ID: BCnFZnHQ and ZV2KxbqY
SHOW: | | - or go back to the newest paste.
1-
local T = {Que}
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, '', 100000) -- Joining fee 10gold
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-
		pPlayer:DealGoldCost(100000) -- take bet
58+
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-
				pPlayer:DealGoldMerit(100000) -- refund bet
69+
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-
			pKiller:DealGoldMerit(200000) -- give 20 gold to winner (double the bet)
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)