forked from skennedysocal/WoW_Hardcore
-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathPartyChangeToken.lua
More file actions
137 lines (122 loc) · 3.84 KB
/
PartyChangeToken.lua
File metadata and controls
137 lines (122 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
-- Generated by party change requester
local function GeneratePartyChangeTokenSecret()
return math.random(1000000)
end
-- Generated by party change receiver
function GeneratePartyChangeToken(_hardcore_settings, _hardcore_character, _secret, _partner_to_change)
if _hardcore_settings.party_change_token ~= nil then
Hardcore:Print("Overwritting current party change token.")
end
_hardcore_settings.party_change_token = {
partner_to_change = _partner_to_change,
character_name = UnitName("player"),
generated_time = GetServerTime(), -- since epoch
secret = _secret,
}
Hardcore:Print("Generated Party Change Token.")
end
-- Applied by party change receiver
function ApplyPartyChangeToken(_hardcore_settings, _hardcore_character, sender, secret)
if _hardcore_settings.party_change_token == nil then
Hardcore:Print("PartyChange Token does not exist.")
return
end
if
_hardcore_settings.party_change_token.secret == nil
or _hardcore_settings.party_change_token.secret ~= secret
then
Hardcore:Print("Invalid secret for party change token. Did not apply token.")
return
end
for idx, partner in ipairs(_hardcore_character.team) do
if partner == _hardcore_settings.party_change_token.partner_to_change then
_hardcore_character.team[idx] = sender
Hardcore:Print("Applied party change token to " .. partner .. ". New partner is " .. sender)
_hardcore_settings.party_change_token = nil
return
end
end
end
-- Checked by party change receiver
function CheckForExpiredPartyChangeToken(_hardcore_settings)
if _hardcore_settings.party_change_token == nil then
return
end
local current_time = GetServerTime()
if current_time - _hardcore_settings.party_change_token.generated_time > 24 * 60 * 60 then -- one day
_hardcore_settings.party_change_token = nil
Hardcore:Print("Party Change Token expired.")
end
end
party_change_token_handler = {}
party_change_token_handler.generated_secret = nil
function party_change_token_handler:SendRequestPartyChangeToken(
_CTL,
_comm_command_header,
_comm_command_delim,
_comm_name,
_team
)
if _CTL then
party_change_token_handler.generated_secret = GeneratePartyChangeTokenSecret()
local commMessage = _comm_command_header .. _comm_command_delim .. party_change_token_handler.generated_secret
for _, partner in ipairs(_team) do
_CTL:SendAddonMessage("ALERT", _comm_name, commMessage, "WHISPER", partner)
end
end
end
function party_change_token_handler:ReceiveRequestPartyChangeToken(
_hardcore_settings,
_hardcore_character,
_secret,
_sender
)
local is_partner = false
for _, partner in ipairs(_hardcore_character.team) do
if _sender == partner then
is_partner = true
end
end
if is_partner == false then
return
end
-- GET SECRET
GeneratePartyChangeToken(_hardcore_settings, _hardcore_character, _secret, _sender)
end
function party_change_token_handler:SendApplyPartyChangeToken(
_CTL,
_comm_command_header,
_comm_command_delim,
_comm_name,
_team,
_secret
)
if _secret == nil then
Hardcore:Print("Failed to send apply party change to partners; missing secret.")
end
if _CTL then
local commMessage = _comm_command_header .. _comm_command_delim .. _secret
for _, partner in ipairs(_team) do
_CTL:SendAddonMessage("ALERT", _comm_name, commMessage, "WHISPER", partner)
end
end
end
function party_change_token_handler:ReceiveApplyPartyChangeToken(
_hardcore_settings,
_hardcore_character,
_secret,
_sender
)
-- GET SECRET
ApplyPartyChangeToken(_hardcore_settings, _hardcore_character, _sender, _secret)
end
function CheckForExpiredPartyChangeToken(_hardcore_settings)
if _hardcore_settings.party_change_token == nil then
return
end
local current_time = GetServerTime()
if current_time - _hardcore_settings.party_change_token.generated_time > 24 * 60 * 60 then -- one day
_hardcore_settings.party_change_token = nil
Hardcore:Print("Party Change Token expired.")
end
end