· 8 years ago · Feb 23, 2018, 06:33 PM
1local busChanges = {} -- busChanges = {varying amount of strings}
2local busCache = {} -- busCache[name] = {ownerAcc, employees, value}
3local busUserCache = {}
4local busUserInvites = {}
5local busTasks = {}
6
7-- Create SQL databases
8local dbcon = dbConnect("sqlite", ":/registry.db")
9
10dbExec(dbcon, "CREATE TABLE IF NOT EXISTS bus (name TEXT, owner TEXT, employees TEXT, value TEXT)")
11dbExec(dbcon, "CREATE TABLE IF NOT EXISTS busUser (acc TEXT, bus TEXT, level TEXT)")
12
13function fireUp()
14 dbQuery(fireUpTwo, {}, dbcon, "SELECT * FROM bus")
15end
16addEventHandler("onResourceStart", resourceRoot, fireUp)
17
18function fireUpTwo(qh)
19 local businesses = dbPoll(qh, 0)
20 for ind, bus in ipairs(businesses) do
21 busCache[bus.name] = {bus.owner, tonumber(bus.employees), tonumber(bus.value)}
22 end
23 dbQuery(fireUpThree, {}, dbcon, "SELECT * FROM busUser")
24end
25
26function fireUpThree(qh)
27 local busPlayers = dbPoll(qh, 0)
28 for ind, dat in ipairs(busPlayers) do
29 busUserCache[dat.acc] = {dat.bus, tonumber(dat.level)}
30 end
31end
32
33function addBusUser(accName, busName, level)
34 busUserCache[accName] = {busName, level}
35 dbExec(dbcon, "INSERT INTO busUser VALUES (?, ?, ?)", accName, busName, level)
36end
37
38function addBusiness(bus, ownerAcc)
39 busCache[bus] = {ownerAcc, 1, 0}
40 dbExec(dbcon, "INSERT INTO bus VALUES (?, ?, ?, ?)", bus, ownerAcc, "1", "0")
41end
42
43function isPlayerInBusiness(plr)
44 if (busUserCache[GAN(plr)]) then
45 return true
46 end
47 return false
48end
49
50function getPlayerLevel(plr)
51 if (busUserCache[GAN(plr)]) then
52 return busUserCache[GAN(plr)][2] or 0
53 end
54 return 0
55end
56
57function getBusUserData(plr)
58 return busUserCache[GAN(plr)] or false
59end
60
61function GAN(plr)
62 return getAccountName(getPlayerAccount(plr))
63end
64
65function demotePlayerInBusiness(plr)
66 busUserCache[GAN(plr)][2] = 1
67 dbExec(dbcon, "UPDATE busUser SET level=? WHERE acc=?", "1", GAN(plr))
68end
69
70function promotePlayerInBusiness(plr)
71 busUserCache[GAN(plr)][2] = 2
72 dbExec(dbcon, "UPDATE busUser SET level=? WHERE acc=?", "2", GAN(plr))
73end
74
75function removePlayerFromBusiness(plr)
76 busUserCache[GAN(plr)] = nil
77 dbExec(dbcon, "DELETE FROM busUser WHERE acc=?", GAN(plr))
78end
79
80function doesBusinessExist(bus)
81 return busCache[bus] or false
82end
83
84function invitePlayerToBusiness(plr, bus)
85 busUserInvites[GAN(plr)] = bus
86end
87
88function removeBusinessInvite(plr)
89 busUserInvites[GAN(plr)] = nil
90end
91
92function getPlayerBusinessInvite(plr)
93 return busUserInvites[GAN(plr)] or false
94end
95
96function getBusinessMessages(bus)
97 return busChanges[bus] or {}
98end
99
100function prepareBusinessMessages(bus)
101 local msgs = busChanges[bus] or {}
102 local new = {}
103 for i = 0, #msgs do
104 if (i > #msgs - 50) then
105 new[#new + 1] = msgs[#msgs - i]
106 end
107 end
108 return new
109end
110
111function givePlayerTask(plr, tsk)
112 local acc = GAN(plr)
113 if (busTasks[acc]) then
114 busTasks[acc][#busTasks[acc] + 1] = tsk
115 else
116 busTasks[acc] = {tsk}
117 end
118end
119
120function getPlayerTasks(plr)
121 local plr = GAN(plr)
122 return busTasks[plr] or false
123end
124
125function removePlayerTask(plr, tsk, all)
126 local plr = GAN(plr)
127 if (all) then
128 busTasks[plr] = nil
129 elseif (busTasks[plr]) then
130 for ind, ent in pairs(busTasks[plr]) do
131 if (ent == tsk) then
132 busTasks[plr][ind] = nil
133 end
134 end
135 end
136end
137
138function addBusinessMessage(bus, msg)
139 if (not bus) then return end
140 local msg = tostring(msg)
141 local time = getRealTime()
142 local hour, minute, second = tostring(time.hour), tostring(time.minute), tostring(time.second)
143 if (#hour == 1) then hour = "0"..hour end
144 if (#minute == 1) then minute = "0"..minute end
145 if (#second == 1) then second = "0"..second end
146 local time = "["..hour..":"..minute..":"..second.."]"
147 local msg = time.." "..msg
148
149 if (not busChanges[bus]) then
150 busChanges[bus] = {msg}
151 else
152 busChanges[bus][#busChanges[bus] + 1] = msg
153 end
154 return true
155end
156
157function getBusUserData(plr)
158 local accName = GAN(plr)
159 if (busUserCache[accName]) then
160 return busUserCache[accName]
161 end
162 return false
163end
164
165function getBusinessData(bus)
166 if (busCache[bus]) then
167 return busCache[bus] or {"N/A", "N/A"}
168 end
169 return {"N/A", "N/A"}
170end
171
172function receiveMessage(msg)
173 addBusinessMessage(getBusUserData(client)[1], getPlayerName(client)..": "..msg)
174 viewMyJobInfo(client, false)
175end
176addEvent("CITbusiness.leaveMessage", true)
177addEventHandler("CITbusiness.leaveMessage", root, receiveMessage)
178
179function backEndDeleteBusiness(name)
180 busChanges[name] = nil
181 busCache[name] = nil
182 busChanges[name] = nil
183 dbExec(dbcon, "DELETE FROM bus WHERE name=?", name)
184 dbExec(dbcon, "DELETE FROM busUser WHERE bus=?", name)
185 for accName, data in pairs(busUserCache) do
186 if (data[1] == name) then
187 busUserCache[accName] = nil
188 busTasks[accName] = nil
189 local accPlayer = getAccountPlayer(getAccount(accName))
190 if (accPlayer) then
191 exports.CIThelp:dm(name.." has been deleted", accPlayer, 0, 255, 0)
192 end
193 end
194 end
195end