80 lines
2.9 KiB
Lua
80 lines
2.9 KiB
Lua
require("TOC/Debug")
|
|
require("NPCs/BodyLocations")
|
|
local StaticData = require("TOC/StaticData")
|
|
|
|
local BodyLocationsAPI = {}
|
|
local function customGetVal(obj, int) return getClassFieldVal(obj, getClassField(obj, int)) end
|
|
local group = BodyLocations.getGroup("Human")
|
|
|
|
---@type ArrayList
|
|
local list = customGetVal(group, 1)
|
|
|
|
---@param bodyLoc string
|
|
function BodyLocationsAPI.New(bodyLoc)
|
|
local curItem
|
|
if StaticData.COMPAT_42 then
|
|
curItem = BodyLocation.new(group, bodyLoc) -- create new item
|
|
group:getAllLocations():add(curItem) -- add to the list
|
|
else
|
|
curItem = group:getOrCreateLocation(bodyLoc) -- get current item - or create
|
|
end
|
|
return curItem
|
|
end
|
|
|
|
-- TODO Not sure if this method actually works as intende with b42, but for our use case it's fine...
|
|
---@param toRelocateOrCreate string
|
|
---@param locationElement string
|
|
---@param afterBoolean boolean
|
|
---@return BodyLocation
|
|
function BodyLocationsAPI.MoveOrCreateBeforeOrAfter(toRelocateOrCreate, locationElement, afterBoolean)
|
|
-- Check type of arg 2 == string - if not error out.
|
|
if type(locationElement) ~= "string" then error("Argument 2 is not of type string. Please re-check!", 2) end
|
|
local itemToMoveTo = group:getLocation(locationElement) -- get location to move to
|
|
if itemToMoveTo ~= nil then
|
|
-- Check type of arg 1 == string - if not, error out.
|
|
if type(toRelocateOrCreate) ~= "string" then error("Argument 1 is not of type string. Please re-check!", 2) end
|
|
|
|
local curItem = BodyLocationsAPI.New(toRelocateOrCreate)
|
|
list:remove(curItem) -- remove from the list
|
|
local index = group:indexOf(locationElement) -- get current index after removal of the location to move to
|
|
if afterBoolean then index = index + 1 end -- if we want it after it, we increase the index to move to by one
|
|
list:add(index, curItem) -- we add the item again
|
|
|
|
|
|
return curItem
|
|
else -- we did not find the location to move to, so we throw an error.
|
|
error("Could not find the BodyLocation [".. tostring(locationElement) .."] - please check the passed arguments!", 2)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
-- function TestBodyLocations()
|
|
-- local group = BodyLocations.getGroup("Human")
|
|
-- local x = group:getAllLocations()
|
|
|
|
-- for i=0, x:size() -1 do
|
|
|
|
-- ---@type BodyLocation
|
|
-- local bl = x:get(i)
|
|
|
|
-- print(bl:getId())
|
|
-- end
|
|
-- end
|
|
|
|
-- MultiItem causes a ton of issues... fucking hell
|
|
|
|
-- local curItem = BodyLocation.new(group, "TOC_Arm_L")
|
|
-- group:getAllLocations():add(curItem)
|
|
|
|
-- local curItem = BodyLocation.new(group, "TOC_Arm_R")
|
|
-- group:getAllLocations():add(curItem)
|
|
|
|
|
|
BodyLocationsAPI.New("TOC_Arm_L")
|
|
BodyLocationsAPI.New("TOC_Arm_R")
|
|
BodyLocationsAPI.New("TOC_Arm_LR")
|
|
BodyLocationsAPI.New("TOC_ArmProst_L")
|
|
BodyLocationsAPI.New("TOC_ArmProst_R")
|
|
BodyLocationsAPI.New("TOC_ArmAccessory_L")
|
|
BodyLocationsAPI.New("TOC_ArmAccessory_R") |