Skip to content

Commit 4ce2de4

Browse files
authored
admin2: add filter to some lists (#324)
* add filter to "give weapon" * add filter to "give vehicle" * add filter to "set skin" * add filter to "define interior" and refactor to match the style of the code with other scripts
1 parent cfd4c3e commit 4ce2de4

File tree

5 files changed

+199
-96
lines changed

5 files changed

+199
-96
lines changed

[admin]/admin2/client/main/admin_players.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ function aPlayersTab.onClientClick(button)
216216
elseif (source == aPlayersTab.SetSkin) then
217217
aSkin.Show(player)
218218
elseif (source == aPlayersTab.SetInterior) then
219-
aPlayerInterior(player)
219+
aInterior.Show(player)
220220
elseif (source == aPlayersTab.JetPack) then
221221
triggerServerEvent("aPlayer", getLocalPlayer(), player, "jetpack")
222222
elseif (source == aPlayersTab.SetMoney) then

[admin]/admin2/client/widgets/admin_interior.lua

Lines changed: 83 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,84 +7,118 @@
77
* Original File by lil_Toady
88
*
99
**************************************]]
10-
aInteriorForm = nil
10+
aInterior = {
11+
Form = nil,
12+
interiors = {}
13+
}
1114

12-
function aPlayerInterior(player)
13-
if (aInteriorForm == nil) then
15+
function aInterior.Show(player)
16+
if (aInterior.Form == nil) then
1417
local x, y = guiGetScreenSize()
15-
aInteriorForm = guiCreateWindow(x / 2 - 110, y / 2 - 150, 220, 300, "Player Interior Management", false)
16-
aInteriorList = guiCreateGridList(0.03, 0.08, 0.94, 0.73, true, aInteriorForm)
17-
guiGridListAddColumn(aInteriorList, "World", 0.2)
18-
guiGridListAddColumn(aInteriorList, "Description", 0.75)
19-
aInteriorSelect = guiCreateButton(0.03, 0.82, 0.94, 0.075, "Select", true, aInteriorForm)
20-
aInteriorCancel = guiCreateButton(0.03, 0.90, 0.94, 0.075, "Cancel", true, aInteriorForm)
21-
22-
local node = xmlLoadFile("conf\\interiors.xml")
23-
if (node) then
24-
local interiors = 0
25-
while (xmlFindChild(node, "interior", interiors) ~= false) do
26-
local interior = xmlFindChild(node, "interior", interiors)
27-
local row = guiGridListAddRow(aInteriorList)
28-
guiGridListSetItemText(aInteriorList, row, 1, xmlNodeGetAttribute(interior, "world"), false, true)
29-
guiGridListSetItemText(aInteriorList, row, 2, xmlNodeGetAttribute(interior, "id"), false, false)
30-
interiors = interiors + 1
31-
end
32-
end
33-
addEventHandler("onClientGUIDoubleClick", aInteriorForm, aClientInteriorDoubleClick)
34-
addEventHandler("onClientGUIClick", aInteriorForm, aClientInteriorClick)
18+
aInterior.Form = guiCreateWindow(x / 2 - 110, y / 2 - 150, 220, 300, "Player Interior Management", false)
19+
guiSetAlpha(aInterior.Form, 1)
20+
guiSetProperty(aInterior.Form, 'AlwaysOnTop', 'True')
21+
aInterior.List = guiCreateGridList(0.03, 0.17, 0.94, 0.65, true, aInterior.Form)
22+
guiGridListAddColumn(aInterior.List, "World", 0.2)
23+
guiGridListAddColumn(aInterior.List, "Description", 0.75)
24+
aInterior.Edit = guiCreateEdit(0.03, 0.08, 0.94, 0.08, '', true, aInterior.Form)
25+
aInterior.Select = guiCreateButton(0.03, 0.82, 0.94, 0.075, "Select", true, aInterior.Form)
26+
aInterior.Cancel = guiCreateButton(0.03, 0.90, 0.94, 0.075, "Cancel", true, aInterior.Form)
27+
28+
aInterior.Load()
29+
aInterior.Refresh()
30+
31+
addEventHandler("onClientGUIDoubleClick", aInterior.Form, aInterior.onDoubleClick)
32+
addEventHandler("onClientGUIClick", aInterior.Form, aInterior.onClick)
33+
addEventHandler("onClientGUIChanged", aInterior.Form, aInterior.onGUIChange)
34+
3535
--Register With Admin Form
36-
aRegister("PlayerInterior", aInteriorForm, aPlayerInterior, aPlayerInteriorClose)
36+
aRegister("PlayerInterior", aInterior.Form, aInterior.Show, aInterior.Close)
3737
end
38-
aInteriorSelectPointer = player
39-
guiSetVisible(aInteriorForm, true)
40-
guiBringToFront(aInteriorForm)
38+
aInterior.SelectPointer = player
39+
guiSetVisible(aInterior.Form, true)
40+
guiBringToFront(aInterior.Form)
4141
end
4242

43-
function aPlayerInteriorClose(destroy)
44-
if ((destroy) or (guiCheckBoxGetSelected(aPerformanceInterior))) then
45-
if (aInteriorForm) then
46-
removeEventHandler("onClientGUIDoubleClick", aInteriorForm, aClientInteriorDoubleClick)
47-
removeEventHandler("onClientGUIClick", aInteriorForm, aClientInteriorClick)
48-
destroyElement(aInteriorForm)
49-
aInteriorForm = nil
43+
function aInterior.Close(destroy)
44+
if (destroy) then
45+
aInterior.interiors = {}
46+
if (aInterior.Form) then
47+
removeEventHandler("onClientGUIDoubleClick", aInterior.Form, aInterior.onDoubleClick)
48+
removeEventHandler("onClientGUIClick", aInterior.Form, aInterior.onClick)
49+
destroyElement(aInterior.Form)
50+
aInterior.Form = nil
5051
end
5152
else
52-
guiSetVisible(aInteriorForm, false)
53+
guiSetVisible(aInterior.Form, false)
5354
end
5455
end
5556

56-
function aClientInteriorDoubleClick(button)
57+
function aInterior.onDoubleClick(button)
5758
if (button == "left") then
58-
if (source == aInteriorList) then
59-
if (guiGridListGetSelectedItem(aInteriorList) ~= -1) then
59+
if (source == aInterior.List) then
60+
if (guiGridListGetSelectedItem(aInterior.List) ~= -1) then
6061
triggerServerEvent(
6162
"aPlayer",
6263
getLocalPlayer(),
63-
aInteriorSelectPointer,
64+
aInterior.SelectPointer,
6465
"setinterior",
65-
guiGridListGetItemText(aInteriorList, guiGridListGetSelectedItem(aInteriorList), 2)
66+
guiGridListGetItemText(aInterior.List, guiGridListGetSelectedItem(aInterior.List), 2)
6667
)
67-
aPlayerInteriorClose(false)
68+
aInterior.Close(false)
6869
end
6970
end
7071
end
7172
end
7273

73-
function aClientInteriorClick(button)
74+
function aInterior.onGUIChange()
75+
aInterior.Refresh()
76+
end
77+
78+
function aInterior.onClick(button)
7479
if (button == "left") then
75-
if (source == aInteriorSelect) then
76-
if (guiGridListGetSelectedItem(aInteriorList) ~= -1) then
80+
if (source == aInterior.Select) then
81+
if (guiGridListGetSelectedItem(aInterior.List) ~= -1) then
7782
triggerServerEvent(
7883
"aPlayer",
7984
getLocalPlayer(),
80-
aInteriorSelectPointer,
85+
aInterior.SelectPointer,
8186
"setinterior",
82-
guiGridListGetItemText(aInteriorList, guiGridListGetSelectedItem(aInteriorList), 2)
87+
guiGridListGetItemText(aInterior.List, guiGridListGetSelectedItem(aInterior.List), 2)
8388
)
84-
guiSetVisible(aInteriorForm, false)
89+
guiSetVisible(aInterior.Form, false)
8590
end
86-
elseif (source == aInteriorCancel) then
87-
aPlayerInteriorClose(false)
91+
elseif (source == aInterior.Cancel) then
92+
aInterior.Close(false)
93+
end
94+
end
95+
end
96+
97+
function aInterior.Load()
98+
local table = {}
99+
local node = xmlLoadFile("conf\\interiors.xml")
100+
if (node) then
101+
local interiors = 0
102+
while (xmlFindChild(node, "interior", interiors) ~= false) do
103+
local interior = xmlFindChild(node, "interior", interiors)
104+
local id = #table + 1
105+
table[id] = {}
106+
table[id]["id"] = xmlNodeGetAttribute(interior, "id")
107+
table[id]["world"] = xmlNodeGetAttribute(interior, "world")
108+
interiors = interiors + 1
109+
end
110+
end
111+
aInterior.interiors = table
112+
end
113+
114+
function aInterior.Refresh()
115+
local filter = guiGetText(aInterior.Edit):lower()
116+
guiGridListClear(aInterior.List)
117+
for k, v in ipairs(aInterior.interiors) do
118+
if v.world:find(filter) or v.id:lower():find(filter) then
119+
local row = guiGridListAddRow(aInterior.List)
120+
guiGridListSetItemText(aInterior.List, row, 1, v.world, false, true)
121+
guiGridListSetItemText(aInterior.List, row, 2, v.id, false, false)
88122
end
89123
end
90124
end

[admin]/admin2/client/widgets/admin_skin.lua

Lines changed: 39 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,23 @@ aSkin = {
1818
function aSkin.Show(player)
1919
if (aSkin.Form == nil) then
2020
local x, y = guiGetScreenSize()
21-
aSkin.Form = guiCreateWindow(x / 2 - 140, y / 2 - 125, 280, 250, "Player Skin Select", false)
21+
aSkin.Form = guiCreateWindow(x / 2 - 140, y / 2 - 140, 280, 280, "Player Skin Select", false)
22+
guiSetAlpha(aSkin.Form, 1)
23+
guiSetProperty(aSkin.Form, 'AlwaysOnTop', 'True')
2224
aSkin.Label =
2325
guiCreateLabel(0.03, 0.09, 0.94, 0.07, "Select a skin from the list or enter the id", true, aSkin.Form)
2426
guiLabelSetHorizontalAlign(aSkin.Label, "center")
2527
guiLabelSetColor(aSkin.Label, 255, 0, 0)
28+
29+
aSkin.Edit = guiCreateEdit(0.03, 0.18, 0.70, 0.09, '', true, aSkin.Form)
30+
guiCreateInnerImage("client\\images\\search.png", aSkin.Edit)
31+
2632
aSkin.Groups = guiCreateCheckBox(0.03, 0.90, 0.70, 0.09, "Sort by groups", false, true, aSkin.Form)
2733
if (aGetSetting("skinsGroup")) then
2834
guiCheckBoxSetSelected(aSkin.Groups, true)
2935
end
3036

31-
aSkin.List = guiCreateGridList(0.03, 0.18, 0.70, 0.71, true, aSkin.Form)
37+
aSkin.List = guiCreateGridList(0.03, 0.27, 0.70, 0.625, true, aSkin.Form)
3238
guiGridListAddColumn(aSkin.List, "ID", 0.20)
3339
guiGridListAddColumn(aSkin.List, "", 0.75)
3440

@@ -39,10 +45,12 @@ function aSkin.Show(player)
3945
aSkin.Cancel = guiCreateButton(0.75, 0.88, 0.27, 0.09, "Cancel", true, aSkin.Form)
4046

4147
aSkin.Load()
42-
aSkin.Refresh(guiCheckBoxGetSelected(aSkin.Groups))
48+
aSkin.Refresh()
4349

4450
addEventHandler("onClientGUIClick", aSkin.Form, aSkin.onClick)
4551
addEventHandler("onClientGUIDoubleClick", aSkin.Form, aSkin.onDoubleClick)
52+
addEventHandler("onClientGUIChanged", aSkin.Form, aSkin.onGUIChange)
53+
4654
--Register With Admin Form
4755
aRegister("PlayerSkin", aSkin.Form, aSkin.Show, aSkin.Close)
4856
end
@@ -78,6 +86,12 @@ function aSkin.onDoubleClick(button)
7886
end
7987
end
8088

89+
function aSkin.onGUIChange()
90+
if (source == aSkin.Edit) then
91+
aSkin.Refresh()
92+
end
93+
end
94+
8195
function aSkin.onClick(button)
8296
if (button == "left") then
8397
if (source == aSkin.Accept) then
@@ -101,7 +115,7 @@ function aSkin.onClick(button)
101115
elseif (source == aSkin.Cancel) then
102116
aSkin.Close(false)
103117
elseif (source == aSkin.Groups) then
104-
aSkin.Refresh(guiCheckBoxGetSelected(aSkin.Groups))
118+
aSkin.Refresh()
105119
end
106120
end
107121
end
@@ -130,14 +144,26 @@ function aSkin.Load()
130144
aSkin.skins = table
131145
end
132146

133-
function aSkin.Refresh(groups)
134-
aSetSetting("skinsGroup", groups)
147+
function aSkin.Refresh()
148+
aSetSetting("skinsGroup", guiCheckBoxGetSelected(aSkin.Groups))
135149
guiGridListClear(aSkin.List)
136-
if (groups) then
150+
local filter = guiGetText(aSkin.Edit):lower()
151+
if (guiCheckBoxGetSelected(aSkin.Groups)) then
152+
local skins = {}
137153
for name, group in pairs(aSkin.skins) do
154+
for _, skin in ipairs(group) do
155+
if skin.model:find(filter) or skin.name:lower():find(filter) then
156+
if (not skins[name]) then
157+
skins[name] = {}
158+
end
159+
table.insert(skins[name], skin)
160+
end
161+
end
162+
end
163+
for name, group in pairs(skins) do
138164
local row = guiGridListAddRow(aSkin.List)
139165
guiGridListSetItemText(aSkin.List, row, 2, name, true, false)
140-
for id, skin in ipairs(aSkin.skins[name]) do
166+
for id, skin in ipairs(group) do
141167
row = guiGridListAddRow(aSkin.List)
142168
guiGridListSetItemText(aSkin.List, row, 1, skin.model, false, true)
143169
guiGridListSetItemText(aSkin.List, row, 2, skin.name, false, false)
@@ -148,18 +174,15 @@ function aSkin.Refresh(groups)
148174
local skins = {}
149175
for name, group in pairs(aSkin.skins) do
150176
for id, skin in pairs(group) do
151-
local id = tonumber(skin.model)
152-
skins[id] = skin.name
177+
skins[skin.model] = skin.name
153178
end
154179
end
155-
local i = 0
156-
while (i <= 288) do
157-
if (skins[i] ~= nil) then
180+
for model, skinName in pairs(skins) do
181+
if model:find(filter) or skinName:lower():find(filter) then
158182
local row = guiGridListAddRow(aSkin.List)
159-
guiGridListSetItemText(aSkin.List, row, 1, tostring(i), false, true)
160-
guiGridListSetItemText(aSkin.List, row, 2, skins[i], false, false)
183+
guiGridListSetItemText(aSkin.List, row, 1, model, false, true)
184+
guiGridListSetItemText(aSkin.List, row, 2, skinName, false, false)
161185
end
162-
i = i + 1
163186
end
164187
guiGridListSetSortingEnabled(aSkin.List, true)
165188
end

0 commit comments

Comments
 (0)