diff --git a/[admin]/admin2/client/main/admin_players.lua b/[admin]/admin2/client/main/admin_players.lua index fafda7752..abeafb2a9 100644 --- a/[admin]/admin2/client/main/admin_players.lua +++ b/[admin]/admin2/client/main/admin_players.lua @@ -216,7 +216,7 @@ function aPlayersTab.onClientClick(button) elseif (source == aPlayersTab.SetSkin) then aSkin.Show(player) elseif (source == aPlayersTab.SetInterior) then - aPlayerInterior(player) + aInterior.Show(player) elseif (source == aPlayersTab.JetPack) then triggerServerEvent("aPlayer", getLocalPlayer(), player, "jetpack") elseif (source == aPlayersTab.SetMoney) then diff --git a/[admin]/admin2/client/widgets/admin_interior.lua b/[admin]/admin2/client/widgets/admin_interior.lua index b1ba5674d..5d0db5b98 100644 --- a/[admin]/admin2/client/widgets/admin_interior.lua +++ b/[admin]/admin2/client/widgets/admin_interior.lua @@ -7,84 +7,118 @@ * Original File by lil_Toady * **************************************]] -aInteriorForm = nil +aInterior = { + Form = nil, + interiors = {} +} -function aPlayerInterior(player) - if (aInteriorForm == nil) then +function aInterior.Show(player) + if (aInterior.Form == nil) then local x, y = guiGetScreenSize() - aInteriorForm = guiCreateWindow(x / 2 - 110, y / 2 - 150, 220, 300, "Player Interior Management", false) - aInteriorList = guiCreateGridList(0.03, 0.08, 0.94, 0.73, true, aInteriorForm) - guiGridListAddColumn(aInteriorList, "World", 0.2) - guiGridListAddColumn(aInteriorList, "Description", 0.75) - aInteriorSelect = guiCreateButton(0.03, 0.82, 0.94, 0.075, "Select", true, aInteriorForm) - aInteriorCancel = guiCreateButton(0.03, 0.90, 0.94, 0.075, "Cancel", true, aInteriorForm) - - local node = xmlLoadFile("conf\\interiors.xml") - if (node) then - local interiors = 0 - while (xmlFindChild(node, "interior", interiors) ~= false) do - local interior = xmlFindChild(node, "interior", interiors) - local row = guiGridListAddRow(aInteriorList) - guiGridListSetItemText(aInteriorList, row, 1, xmlNodeGetAttribute(interior, "world"), false, true) - guiGridListSetItemText(aInteriorList, row, 2, xmlNodeGetAttribute(interior, "id"), false, false) - interiors = interiors + 1 - end - end - addEventHandler("onClientGUIDoubleClick", aInteriorForm, aClientInteriorDoubleClick) - addEventHandler("onClientGUIClick", aInteriorForm, aClientInteriorClick) + aInterior.Form = guiCreateWindow(x / 2 - 110, y / 2 - 150, 220, 300, "Player Interior Management", false) + guiSetAlpha(aInterior.Form, 1) + guiSetProperty(aInterior.Form, 'AlwaysOnTop', 'True') + aInterior.List = guiCreateGridList(0.03, 0.17, 0.94, 0.65, true, aInterior.Form) + guiGridListAddColumn(aInterior.List, "World", 0.2) + guiGridListAddColumn(aInterior.List, "Description", 0.75) + aInterior.Edit = guiCreateEdit(0.03, 0.08, 0.94, 0.08, '', true, aInterior.Form) + aInterior.Select = guiCreateButton(0.03, 0.82, 0.94, 0.075, "Select", true, aInterior.Form) + aInterior.Cancel = guiCreateButton(0.03, 0.90, 0.94, 0.075, "Cancel", true, aInterior.Form) + + aInterior.Load() + aInterior.Refresh() + + addEventHandler("onClientGUIDoubleClick", aInterior.Form, aInterior.onDoubleClick) + addEventHandler("onClientGUIClick", aInterior.Form, aInterior.onClick) + addEventHandler("onClientGUIChanged", aInterior.Form, aInterior.onGUIChange) + --Register With Admin Form - aRegister("PlayerInterior", aInteriorForm, aPlayerInterior, aPlayerInteriorClose) + aRegister("PlayerInterior", aInterior.Form, aInterior.Show, aInterior.Close) end - aInteriorSelectPointer = player - guiSetVisible(aInteriorForm, true) - guiBringToFront(aInteriorForm) + aInterior.SelectPointer = player + guiSetVisible(aInterior.Form, true) + guiBringToFront(aInterior.Form) end -function aPlayerInteriorClose(destroy) - if ((destroy) or (guiCheckBoxGetSelected(aPerformanceInterior))) then - if (aInteriorForm) then - removeEventHandler("onClientGUIDoubleClick", aInteriorForm, aClientInteriorDoubleClick) - removeEventHandler("onClientGUIClick", aInteriorForm, aClientInteriorClick) - destroyElement(aInteriorForm) - aInteriorForm = nil +function aInterior.Close(destroy) + if (destroy) then + aInterior.interiors = {} + if (aInterior.Form) then + removeEventHandler("onClientGUIDoubleClick", aInterior.Form, aInterior.onDoubleClick) + removeEventHandler("onClientGUIClick", aInterior.Form, aInterior.onClick) + destroyElement(aInterior.Form) + aInterior.Form = nil end else - guiSetVisible(aInteriorForm, false) + guiSetVisible(aInterior.Form, false) end end -function aClientInteriorDoubleClick(button) +function aInterior.onDoubleClick(button) if (button == "left") then - if (source == aInteriorList) then - if (guiGridListGetSelectedItem(aInteriorList) ~= -1) then + if (source == aInterior.List) then + if (guiGridListGetSelectedItem(aInterior.List) ~= -1) then triggerServerEvent( "aPlayer", getLocalPlayer(), - aInteriorSelectPointer, + aInterior.SelectPointer, "setinterior", - guiGridListGetItemText(aInteriorList, guiGridListGetSelectedItem(aInteriorList), 2) + guiGridListGetItemText(aInterior.List, guiGridListGetSelectedItem(aInterior.List), 2) ) - aPlayerInteriorClose(false) + aInterior.Close(false) end end end end -function aClientInteriorClick(button) +function aInterior.onGUIChange() + aInterior.Refresh() +end + +function aInterior.onClick(button) if (button == "left") then - if (source == aInteriorSelect) then - if (guiGridListGetSelectedItem(aInteriorList) ~= -1) then + if (source == aInterior.Select) then + if (guiGridListGetSelectedItem(aInterior.List) ~= -1) then triggerServerEvent( "aPlayer", getLocalPlayer(), - aInteriorSelectPointer, + aInterior.SelectPointer, "setinterior", - guiGridListGetItemText(aInteriorList, guiGridListGetSelectedItem(aInteriorList), 2) + guiGridListGetItemText(aInterior.List, guiGridListGetSelectedItem(aInterior.List), 2) ) - guiSetVisible(aInteriorForm, false) + guiSetVisible(aInterior.Form, false) end - elseif (source == aInteriorCancel) then - aPlayerInteriorClose(false) + elseif (source == aInterior.Cancel) then + aInterior.Close(false) + end + end +end + +function aInterior.Load() + local table = {} + local node = xmlLoadFile("conf\\interiors.xml") + if (node) then + local interiors = 0 + while (xmlFindChild(node, "interior", interiors) ~= false) do + local interior = xmlFindChild(node, "interior", interiors) + local id = #table + 1 + table[id] = {} + table[id]["id"] = xmlNodeGetAttribute(interior, "id") + table[id]["world"] = xmlNodeGetAttribute(interior, "world") + interiors = interiors + 1 + end + end + aInterior.interiors = table +end + +function aInterior.Refresh() + local filter = guiGetText(aInterior.Edit):lower() + guiGridListClear(aInterior.List) + for k, v in ipairs(aInterior.interiors) do + if v.world:find(filter) or v.id:lower():find(filter) then + local row = guiGridListAddRow(aInterior.List) + guiGridListSetItemText(aInterior.List, row, 1, v.world, false, true) + guiGridListSetItemText(aInterior.List, row, 2, v.id, false, false) end end end diff --git a/[admin]/admin2/client/widgets/admin_skin.lua b/[admin]/admin2/client/widgets/admin_skin.lua index 124c08e3b..aa3e99def 100644 --- a/[admin]/admin2/client/widgets/admin_skin.lua +++ b/[admin]/admin2/client/widgets/admin_skin.lua @@ -18,17 +18,23 @@ aSkin = { function aSkin.Show(player) if (aSkin.Form == nil) then local x, y = guiGetScreenSize() - aSkin.Form = guiCreateWindow(x / 2 - 140, y / 2 - 125, 280, 250, "Player Skin Select", false) + aSkin.Form = guiCreateWindow(x / 2 - 140, y / 2 - 140, 280, 280, "Player Skin Select", false) + guiSetAlpha(aSkin.Form, 1) + guiSetProperty(aSkin.Form, 'AlwaysOnTop', 'True') aSkin.Label = guiCreateLabel(0.03, 0.09, 0.94, 0.07, "Select a skin from the list or enter the id", true, aSkin.Form) guiLabelSetHorizontalAlign(aSkin.Label, "center") guiLabelSetColor(aSkin.Label, 255, 0, 0) + + aSkin.Edit = guiCreateEdit(0.03, 0.18, 0.70, 0.09, '', true, aSkin.Form) + guiCreateInnerImage("client\\images\\search.png", aSkin.Edit) + aSkin.Groups = guiCreateCheckBox(0.03, 0.90, 0.70, 0.09, "Sort by groups", false, true, aSkin.Form) if (aGetSetting("skinsGroup")) then guiCheckBoxSetSelected(aSkin.Groups, true) end - aSkin.List = guiCreateGridList(0.03, 0.18, 0.70, 0.71, true, aSkin.Form) + aSkin.List = guiCreateGridList(0.03, 0.27, 0.70, 0.625, true, aSkin.Form) guiGridListAddColumn(aSkin.List, "ID", 0.20) guiGridListAddColumn(aSkin.List, "", 0.75) @@ -39,10 +45,12 @@ function aSkin.Show(player) aSkin.Cancel = guiCreateButton(0.75, 0.88, 0.27, 0.09, "Cancel", true, aSkin.Form) aSkin.Load() - aSkin.Refresh(guiCheckBoxGetSelected(aSkin.Groups)) + aSkin.Refresh() addEventHandler("onClientGUIClick", aSkin.Form, aSkin.onClick) addEventHandler("onClientGUIDoubleClick", aSkin.Form, aSkin.onDoubleClick) + addEventHandler("onClientGUIChanged", aSkin.Form, aSkin.onGUIChange) + --Register With Admin Form aRegister("PlayerSkin", aSkin.Form, aSkin.Show, aSkin.Close) end @@ -78,6 +86,12 @@ function aSkin.onDoubleClick(button) end end +function aSkin.onGUIChange() + if (source == aSkin.Edit) then + aSkin.Refresh() + end +end + function aSkin.onClick(button) if (button == "left") then if (source == aSkin.Accept) then @@ -101,7 +115,7 @@ function aSkin.onClick(button) elseif (source == aSkin.Cancel) then aSkin.Close(false) elseif (source == aSkin.Groups) then - aSkin.Refresh(guiCheckBoxGetSelected(aSkin.Groups)) + aSkin.Refresh() end end end @@ -130,14 +144,26 @@ function aSkin.Load() aSkin.skins = table end -function aSkin.Refresh(groups) - aSetSetting("skinsGroup", groups) +function aSkin.Refresh() + aSetSetting("skinsGroup", guiCheckBoxGetSelected(aSkin.Groups)) guiGridListClear(aSkin.List) - if (groups) then + local filter = guiGetText(aSkin.Edit):lower() + if (guiCheckBoxGetSelected(aSkin.Groups)) then + local skins = {} for name, group in pairs(aSkin.skins) do + for _, skin in ipairs(group) do + if skin.model:find(filter) or skin.name:lower():find(filter) then + if (not skins[name]) then + skins[name] = {} + end + table.insert(skins[name], skin) + end + end + end + for name, group in pairs(skins) do local row = guiGridListAddRow(aSkin.List) guiGridListSetItemText(aSkin.List, row, 2, name, true, false) - for id, skin in ipairs(aSkin.skins[name]) do + for id, skin in ipairs(group) do row = guiGridListAddRow(aSkin.List) guiGridListSetItemText(aSkin.List, row, 1, skin.model, false, true) guiGridListSetItemText(aSkin.List, row, 2, skin.name, false, false) @@ -148,18 +174,15 @@ function aSkin.Refresh(groups) local skins = {} for name, group in pairs(aSkin.skins) do for id, skin in pairs(group) do - local id = tonumber(skin.model) - skins[id] = skin.name + skins[skin.model] = skin.name end end - local i = 0 - while (i <= 288) do - if (skins[i] ~= nil) then + for model, skinName in pairs(skins) do + if model:find(filter) or skinName:lower():find(filter) then local row = guiGridListAddRow(aSkin.List) - guiGridListSetItemText(aSkin.List, row, 1, tostring(i), false, true) - guiGridListSetItemText(aSkin.List, row, 2, skins[i], false, false) + guiGridListSetItemText(aSkin.List, row, 1, model, false, true) + guiGridListSetItemText(aSkin.List, row, 2, skinName, false, false) end - i = i + 1 end guiGridListSetSortingEnabled(aSkin.List, true) end diff --git a/[admin]/admin2/client/widgets/admin_vehicle.lua b/[admin]/admin2/client/widgets/admin_vehicle.lua index cb8fb334d..4f6a40b32 100644 --- a/[admin]/admin2/client/widgets/admin_vehicle.lua +++ b/[admin]/admin2/client/widgets/admin_vehicle.lua @@ -15,17 +15,23 @@ aVehicle = { function aVehicle.Show(player) if (aVehicle.Form == nil) then local x, y = guiGetScreenSize() - aVehicle.Form = guiCreateWindow(x / 2 - 140, y / 2 - 125, 280, 250, "Player Vehicle Select", false) + aVehicle.Form = guiCreateWindow(x / 2 - 140, y / 2 - 140, 280, 280, "Player Vehicle Select", false) + guiSetAlpha(aVehicle.Form, 1) + guiSetProperty(aVehicle.Form, 'AlwaysOnTop', 'True') aVehicle.Label = guiCreateLabel(0.03, 0.09, 0.94, 0.07, "Select a vehicle from the list or enter the id", true, aVehicle.Form) guiLabelSetHorizontalAlign(aVehicle.Label, "center") guiLabelSetColor(aVehicle.Label, 255, 0, 0) + + aVehicle.Edit = guiCreateEdit(0.03, 0.18, 0.70, 0.09, '', true, aVehicle.Form) + guiCreateInnerImage("client\\images\\search.png", aVehicle.Edit) + aVehicle.Groups = guiCreateCheckBox(0.03, 0.90, 0.70, 0.09, "Sort by groups", false, true, aVehicle.Form) if (aGetSetting("weaponsGroup")) then guiCheckBoxSetSelected(aVehicle.Groups, true) end - aVehicle.List = guiCreateGridList(0.03, 0.18, 0.70, 0.71, true, aVehicle.Form) + aVehicle.List = guiCreateGridList(0.03, 0.27, 0.70, 0.625, true, aVehicle.Form) guiGridListAddColumn(aVehicle.List, "ID", 0.20) guiGridListAddColumn(aVehicle.List, "", 0.75) @@ -36,10 +42,11 @@ function aVehicle.Show(player) aVehicle.Cancel = guiCreateButton(0.75, 0.88, 0.27, 0.09, "Cancel", true, aVehicle.Form) aVehicle.Load() - aVehicle.Refresh(guiCheckBoxGetSelected(aVehicle.Groups)) + aVehicle.Refresh() addEventHandler("onClientGUIClick", aVehicle.Form, aVehicle.onClick) addEventHandler("onClientGUIDoubleClick", aVehicle.Form, aVehicle.onDoubleClick) + addEventHandler("onClientGUIChanged", aVehicle.Form, aVehicle.onGUIChange) --Register With Admin Form aRegister("PlayerVehicle", aVehicle.Form, aVehicle.Show, aVehicle.Close) end @@ -75,6 +82,12 @@ function aVehicle.onDoubleClick(button) end end +function aVehicle.onGUIChange() + if (source == aVehicle.Edit) then + aVehicle.Refresh() + end +end + function aVehicle.onClick(button) if (button == "left") then if (source == aVehicle.Accept) then @@ -98,7 +111,7 @@ function aVehicle.onClick(button) elseif (source == aVehicle.Cancel) then aVehicle.Close(false) elseif (source == aVehicle.Groups) then - aVehicle.Refresh(guiCheckBoxGetSelected(aVehicle.Groups)) + aVehicle.Refresh() end end end @@ -127,14 +140,26 @@ function aVehicle.Load() aVehicle.vehicles = table end -function aVehicle.Refresh(groups) - aSetSetting("weaponsGroup", groups) +function aVehicle.Refresh() + aSetSetting("weaponsGroup", guiCheckBoxGetSelected(aVehicle.Groups)) guiGridListClear(aVehicle.List) - if (groups) then + local filter = guiGetText(aVehicle.Edit):lower() + if (guiCheckBoxGetSelected(aVehicle.Groups)) then + local vehicles = {} for name, group in pairs(aVehicle.vehicles) do + for _, vehicle in ipairs(group) do + if vehicle.id:find(filter) or vehicle.name:lower():find(filter) then + if (not vehicles[name]) then + vehicles[name] = {} + end + table.insert(vehicles[name], vehicle) + end + end + end + for name, group in pairs(vehicles) do local row = guiGridListAddRow(aVehicle.List) guiGridListSetItemText(aVehicle.List, row, 2, name, true, false) - for id, vehicle in ipairs(aVehicle.vehicles[name]) do + for id, vehicle in ipairs(group) do row = guiGridListAddRow(aVehicle.List) guiGridListSetItemText(aVehicle.List, row, 1, vehicle.id, false, true) guiGridListSetItemText(aVehicle.List, row, 2, vehicle.name, false, false) @@ -145,18 +170,15 @@ function aVehicle.Refresh(groups) local vehicles = {} for name, group in pairs(aVehicle.vehicles) do for id, vehicle in pairs(group) do - local id = tonumber(vehicle.id) - vehicles[id] = vehicle.name + vehicles[vehicle.id] = vehicle.name end end - local i = 0 - while (i <= 100000) do - if (vehicles[i] ~= nil) then + for model, vehicleName in pairs(vehicles) do + if model:find(filter) or vehicleName:lower():find(filter:lower()) then local row = guiGridListAddRow(aVehicle.List) - guiGridListSetItemText(aVehicle.List, row, 1, tostring(i), false, true) - guiGridListSetItemText(aVehicle.List, row, 2, vehicles[i], false, false) + guiGridListSetItemText(aVehicle.List, row, 1, model, false, true) + guiGridListSetItemText(aVehicle.List, row, 2, vehicleName, false, false) end - i = i + 1 end guiGridListSetSortingEnabled(aVehicle.List, true) end diff --git a/[admin]/admin2/client/widgets/admin_weapon.lua b/[admin]/admin2/client/widgets/admin_weapon.lua index 8e2e851f4..149ab190a 100644 --- a/[admin]/admin2/client/widgets/admin_weapon.lua +++ b/[admin]/admin2/client/widgets/admin_weapon.lua @@ -17,17 +17,23 @@ aWeapon = { function aWeapon.Show(player) if (aWeapon.Form == nil) then local x, y = guiGetScreenSize() - aWeapon.Form = guiCreateWindow(x / 2 - 140, y / 2 - 125, 280, 250, "Player Weapon Select", false) + aWeapon.Form = guiCreateWindow(x / 2 - 140, y / 2 - 140, 280, 280, "Player Weapon Select", false) + guiSetAlpha(aWeapon.Form, 1) + guiSetProperty(aWeapon.Form, 'AlwaysOnTop', 'True') aWeapon.Label = guiCreateLabel(0.03, 0.09, 0.94, 0.07, "Select a weapon from the list or enter the id", true, aWeapon.Form) guiLabelSetHorizontalAlign(aWeapon.Label, "center") guiLabelSetColor(aWeapon.Label, 255, 0, 0) + + aWeapon.Edit = guiCreateEdit(0.03, 0.18, 0.70, 0.09, '', true, aWeapon.Form) + guiCreateInnerImage("client\\images\\search.png", aWeapon.Edit) + aWeapon.Groups = guiCreateCheckBox(0.03, 0.90, 0.70, 0.09, "Sort by groups", false, true, aWeapon.Form) if (aGetSetting("weaponsGroup")) then guiCheckBoxSetSelected(aWeapon.Groups, true) end - aWeapon.List = guiCreateGridList(0.03, 0.18, 0.70, 0.71, true, aWeapon.Form) + aWeapon.List = guiCreateGridList(0.03, 0.27, 0.70, 0.625, true, aWeapon.Form) guiGridListAddColumn(aWeapon.List, "ID", 0.20) guiGridListAddColumn(aWeapon.List, "", 0.75) @@ -43,10 +49,12 @@ function aWeapon.Show(player) aWeapon.Cancel = guiCreateButton(0.75, 0.88, 0.27, 0.09, "Cancel", true, aWeapon.Form) aWeapon.Load() - aWeapon.Refresh(guiCheckBoxGetSelected(aWeapon.Groups)) + aWeapon.Refresh() addEventHandler("onClientGUIClick", aWeapon.Form, aWeapon.onClick) addEventHandler("onClientGUIDoubleClick", aWeapon.Form, aWeapon.onDoubleClick) + addEventHandler("onClientGUIChanged", aWeapon.Form, aWeapon.onGUIChange) + --Register With Admin Form aRegister("PlayerWeapon", aWeapon.Form, aWeapon.Show, aWeapon.Close) end @@ -83,6 +91,12 @@ function aWeapon.onDoubleClick(button) end end +function aWeapon.onGUIChange() + if (source == aWeapon.Edit) then + aWeapon.Refresh() + end +end + function aWeapon.onClick(button) if (button == "left") then if (source == aWeapon.Accept) then @@ -108,7 +122,7 @@ function aWeapon.onClick(button) elseif (source == aWeapon.Cancel) then aWeapon.Close(false) elseif (source == aWeapon.Groups) then - aWeapon.Refresh(guiCheckBoxGetSelected(aWeapon.Groups)) + aWeapon.Refresh() end end end @@ -137,14 +151,27 @@ function aWeapon.Load() aWeapon.weapons = table end -function aWeapon.Refresh(groups) +function aWeapon.Refresh() + local groups = guiCheckBoxGetSelected(aWeapon.Groups) + local filter = guiGetText(aWeapon.Edit):lower() aSetSetting("weaponsGroup", groups) guiGridListClear(aWeapon.List) if (groups) then + local weapons = {} for name, group in pairs(aWeapon.weapons) do + for _, vehicle in ipairs(group) do + if vehicle.id:find(filter) or vehicle.name:lower():find(filter) then + if (not weapons[name]) then + weapons[name] = {} + end + table.insert(weapons[name], vehicle) + end + end + end + for name, group in pairs(weapons) do local row = guiGridListAddRow(aWeapon.List) guiGridListSetItemText(aWeapon.List, row, 2, name, true, false) - for id, weapon in ipairs(aWeapon.weapons[name]) do + for id, weapon in ipairs(group) do row = guiGridListAddRow(aWeapon.List) guiGridListSetItemText(aWeapon.List, row, 1, weapon.id, false, true) guiGridListSetItemText(aWeapon.List, row, 2, weapon.name, false, false) @@ -155,18 +182,15 @@ function aWeapon.Refresh(groups) local weapons = {} for name, group in pairs(aWeapon.weapons) do for id, weapon in pairs(group) do - local id = tonumber(weapon.id) - weapons[id] = weapon.name + weapons[weapon.id] = weapon.name end end - local i = 0 - while (i <= 288) do - if (weapons[i] ~= nil) then + for id, weaponName in pairs(weapons) do + if id:find(filter) or weaponName:lower():find(filter) then local row = guiGridListAddRow(aWeapon.List) - guiGridListSetItemText(aWeapon.List, row, 1, tostring(i), false, true) - guiGridListSetItemText(aWeapon.List, row, 2, weapons[i], false, false) + guiGridListSetItemText(aWeapon.List, row, 1, id, false, true) + guiGridListSetItemText(aWeapon.List, row, 2, weaponName, false, false) end - i = i + 1 end guiGridListSetSortingEnabled(aWeapon.List, true) end