forked from Zarant/WoW_Hardcore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.lua
More file actions
161 lines (136 loc) · 3.61 KB
/
Copy pathutils.lua
File metadata and controls
161 lines (136 loc) · 3.61 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
function Hardcore_stringOrNumberToUnicode(val)
local str
if Hardcore_IsNumber(val) then
str = tostring(val)
else
str = val
end
local unicode = ""
for i = 1, #str do
local char = str:sub(i, i)
unicode = unicode..string.byte(char)..Hardcore_generateRandomString(Hardcore_generateRandomIntegerInRange(2, 3))
end
return unicode
end
function Hardcore_tableToUnicode(tbl)
local unicode = ""
for i, _ in ipairs(tbl) do
for k, v in pairs(tbl[i]) do
unicode = unicode..Hardcore_stringOrNumberToUnicode(v).."%"
end
unicode = strsub(unicode, 0, #unicode - 1).."?"
end
return strsub(unicode, 0, #unicode - 1)
end
function Hardcore_generateRandomString(character_count)
local str = ""
for i = 1, character_count do
str = str..Hardcore_generateRandomLetter()
end
return str
end
function Hardcore_generateRandomLetter()
local validLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
local randomIndex = math.floor(math.random() * #validLetters)
return validLetters:sub(randomIndex, randomIndex)
end
function Hardcore_generateRandomIntegerInRange(min, max)
return math.floor(math.random() * (max - min + 1)) + min;
end
function Hardcore_map(tbl, f)
local t = {}
for k,v in pairs(tbl) do
t[k] = f(v)
end
return t
end
function Hardcore_join(tbl, separator)
local str = ""
for k, v in pairs(tbl) do
if str == "" then
str = v
else
str = str..separator..v
end
end
return str
end
-- function borrowed from Questie
function Hardcore_GetAddonVersionInfo(version_string)
local name = GetAddOnInfo("Hardcore")
local version
if version_string then
version = version_string
else
version = GetAddOnMetadata(name, "Version")
end
local major, minor, patch = string.match(version, "(%d+)%p(%d+)%p(%d+)")
local hash = "nil"
local buildType
return tonumber(major), tonumber(minor), tonumber(patch), tostring(hash), tostring(buildType)
end
local versionToValue = {}
function Hardcore_GetVersionParts(version_string)
local cached = versionToValue[version_string]
if cached then
return cached.major, cached.minor, cached.patch
end
local major, minor, patch = string.match(version_string, "(%d+)%p(%d+)%p(%d+)")
major = major or 0
minor = minor or 0
patch = patch or 0
versionToValue[version_string] = {
major = tonumber(major),
minor = tonumber(minor),
patch = tonumber(patch)
}
local thisVersionParts = versionToValue[version_string]
return thisVersionParts.major, thisVersionParts.minor, thisVersionParts.patch
end
function Hardcore_GetGreaterVersion(version_stringA, version_stringB)
local majorA, minorA, patchA = Hardcore_GetVersionParts(version_stringA)
local majorB, minorB, patchB = Hardcore_GetVersionParts(version_stringB)
-- Compare Majors
if majorA > majorB then
return version_stringA
elseif majorA < majorB then
return version_stringB
else
-- Compare Minors
if minorA > minorB then
return version_stringA
elseif minorA < minorB then
return version_stringB
else
-- Compare Patches
if patchA > patchB then
return version_stringA
elseif patchA < patchB then
return version_stringB
else
return version_stringA
end
end
end
end
-- Useful for getting full player name
-- Same format as CHAT_MSG_ADDON
function Hardcore_GetPlayerPlusRealmName()
local longName, serverName = UnitFullName("player")
local FULL_PLAYER_NAME = longName..'-'..serverName
return FULL_PLAYER_NAME
end
function Hardcore_IsNumber(val)
return type(val) == "number"
end
function Hardcore_FilterUnique(tbl)
local hash = {}
local res = {}
for _,v in ipairs(tbl) do
if (not hash[v]) then
res[#res+1] = v
hash[v] = true
end
end
return res
end