Define Properties() inventoryWindow = 0 inventorySlots = { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0} } paperDollSlots = { head = {id=0, buttonx=60, buttony=28}, armor = {id=0, buttonx=60, buttony=66}, l_hand = {id=0, buttonx=19, buttony=66}, r_hand = {id=0, buttonx=101, buttony=66}, belt_1 = {id=0, buttonx=6, buttony=104}, belt_2 = {id=0, buttonx=44, buttony=104}, belt_3 = {id=0, buttonx=82, buttony=104}, belt_4 = {id=0, buttonx=120, buttony=104} } inventory_box_x = 161 inventory_box_y = 28 inventory_slot_width = 34 inventory_slot_height = 34 inventory_slot_pad_x = 4 inventory_slot_pad_y = 4 end Trigger showInventory(user, iflag) --Debug("iflag: %d", iflag) if (iflag == 1) then --Debug("Show window") if(self.inventoryWindow == 0) then --Debug("Create Window") createInventoryWindow(self, user) end else --Debug("Dismiss") SendTo(self, "dismissInventory", 0) end end Trigger refreshSlot(i, j) if (inventoryWindow ~= 0) then resetBackpackButton(self, i, j) end end Trigger moveInventory(user, location, i, j) --Debug("Move inventory: %s %d %d", location, i, j) local sprite = 0 local flag = 1 if (self.inHand == 0) then if ((location == "backpack") and (self.backpack[i][j]) ~= 0) then --Debug("Pickup from backpack") sprite = GetObjectById(self.backpack[i][j]).spriteId UiSetCursor(user, sprite, 32, 32) --Debug("Cursor set") self.inHand = self.backpack[i][j] self.backpack[i][j] = 0 if (self.backpack[i][j] ~= 0) then Debug("Remove unsuccessful") end -- reset button resetBackpackButton(self, i, j) else if (self.paperDoll[location] and self.paperDoll[location] ~= 0) then --Debug("Pickup from paperdoll") sprite = GetObjectById(self.paperDoll[location]).spriteId self.inHand = self.paperDoll[location] self.paperDoll[location]=0 UiSetCursor(user, sprite, 32, 32) resetPaperDollButton(self, location) SendTo(user, "ui_refreshUnitPanel", 0, self) else UiSetCursor(user, -1, 0, 0) end end else local temp = 0 -- place an object in an inventory slot if (location == "backpack") then --Debug("Drop into backpack") temp = self.backpack[i][j] self.backpack[i][j] = self.inHand -- reset button resetBackpackButton(self, i, j) else --Debug("Drop onto paperdoll") temp = self.paperDoll[location] self.paperDoll[location] = self.inHand --Debug("PaperDoll[%s]: %d temp: %d", location, self.paperDoll[location], temp) resetPaperDollButton(self, location) SendTo(user, "ui_refreshUnitPanel", 0, self) end if (temp ~= 0) then --Debug("Pickup on drop") self.inHand = temp UiSetCursor(user, GetObjectById(temp).spriteId, 32, 32) else self.inHand = 0 UiSetCursor(user, -1, 0, 0) end end end Trigger dismissInventory() if (self.inventoryWindow ~= 0) then UiDelete(self.inventoryWindow) self.inventoryWindow = 0 end -- clear buttons for i=1, 3 do for j=1, 5 do self.inventorySlots[i][j] = 0 end end end function createInventoryWindow(self, user) --Debug("createWindow") if (self.inventoryWindow ~= 0) then UiDelete(self.inventoryWindow) self.inventoryWindow = 0 end width = 6+(5*(34+4))+4 self.inventoryWindow = UiWindow(0, "unitInventoryWindow", 100, 100, width+155, 28+(3*(34+4))+4, '13197:3') UiCapability(self.inventoryWindow, "drag") createPaperDollPanel(self) createBackpackPanel(self) local label = UiLabel(self.inventoryWindow, "title", 4+155, 3, "Backpack") UiColor(label, 0, 0, 0, 1) label = UiLabel(self.inventoryWindow, "title", 4, 3, "Body/Belt") UiColor(label, 0, 0, 0, 1) UiImageButton(self.inventoryWindow, "button", width + 155 - 15, 6, 10, 10, "13197:82", "13197:83", "13197:84", "showUnitInventory 0") UiAttachUser(user, self.inventoryWindow) end function createPaperDollPanel(self) local width = 34 local height = 34 local spriteId = "0:701" -- paperdoll image -- head slot rect = UiRect(self.inventoryWindow, "frame", 60, 28, width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", 60+1, 28+1, width-2, height-2) UiColor(rect, 255, 200, 0, 1) local slot = self.paperDollSlots["head"] resetPaperDollButton(self, "head") --self.paperDollSlots["head"].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32, spriteId, spriteId, spriteId, "moveInventory head 0 0") -- armor slot rect = UiRect(self.inventoryWindow, "frame", 60, 66, width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", 60+1, 67, width-2, height-2) UiColor(rect, 255, 200, 0, 1) slot = self.paperDollSlots["armor"] --Debug("%d %d", slot.buttonx, slot.buttony) resetPaperDollButton(self, "armor") --self.paperDollSlots["armor"].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32, spriteId, spriteId, spriteId, "moveInventory armor 0 0") -- left hand rect = UiRect(self.inventoryWindow, "frame", 19, 66, width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", 19+1, 67, width-2, height-2) UiColor(rect, 255, 200, 0, 1) slot = self.paperDollSlots["l_hand"] resetPaperDollButton(self, "l_hand") --self.paperDollSlots["l_hand"].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32, spriteId, spriteId, spriteId, "moveInventory l_hand 0 0") -- right hand rect = UiRect(self.inventoryWindow, "frame", 101, 66, width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", 101+1, 67, width-2, height-2) UiColor(rect, 255, 200, 0, 1) slot = self.paperDollSlots["r_hand"] resetPaperDollButton(self, "r_hand") --self.paperDollSlots["r_hand"].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32, spriteId, spriteId, spriteId, "moveInventory r_hand 0 0") local beltSlotKey = "key" -- belt slots (4) for i=1,4 do rect = UiRect(self.inventoryWindow, "frame", 6+((i-1)*(34+4)), 104, width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", 6+((i-1)*(34+4))+1, 105, width-2, height-2) UiColor(rect, 255, 200, 0, 1) slot = self.paperDollSlots["belt_"..i] resetPaperDollButton(self, "belt_"..i) --self.paperDollSlots["belt_"..i].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32,spriteId, spriteId, spriteId, "moveInventory belt_"..i.." 0 0") end rect = UiRect (self.inventoryWindow, "separator", 157, 32, 1, 104) UiColor(rect, 0, 0, 0, .8) end function createBackpackPanel(self) -- local vars for creation of UI local rect = 0 local window = 0 local width = 34 local height = 34 local padding_x = 4 local padding_y = 4 local start_x = 161 local start_y = 28 local row = 3 local column = 5 local sprite = 0 for i=1, row do for j=1, column do --Debug("%d %d", i, j) rect = UiRect(self.inventoryWindow, "frame", start_x+((j-1)*(width+padding_x)), start_y+((i-1)*(height+padding_y)), width, height) UiColor(rect, 0, 0, 0, 1) rect = UiRect(self.inventoryWindow, "rect", start_x+((j-1)*(width+padding_x))+1, start_y+((i-1)*(height+padding_y))+1, width-2, height-2) UiColor(rect, 255, 200, 0, 1) -- parentId, name, x, y, w, h, defaultArtId, hoverArtId, pressArtId, cmd --Debug("%d", (j*5)+i+1) --Debug("%d", self.backpack[i][j] or 0) if (self.backpack[i][j] ~= 0) then --Debug("%d", self.backpack[i][j]) --sprite = GetObjectById(self.backpack[(j*5)+i+1]).spriteId sprite = "0:701" else --Debug("Blank Sprite") sprite = "12071:448" end --Debug("Create Button: %d, %d", start_x+((j-1)*(width+padding_x))+1, start_y+((i-1)*(height+padding_y))+1) --inventoryButtons[i][j] = UiImageButton(self.inventoryWindow, "inventory", -- start_x+((j-1)*(width+padding_x))+1, start_y+((i-1)*(height+padding_y))+1, -- width-2, height-2, sprite, sprite, sprite, "moveInventory backpack " .. i .. " " ..j) self.inventorySlots[i][j] = createSlotButton(self, self.inventoryWindow, i, j) end end end function createSlotButton(self, windowId, i, j) if (self.backpack[i][j] ~= 0) then local object = GetObjectById(self.backpack[i][j]) if (object) then sprite = object.spriteId else sprite = '12071:448' Debug("Object %d in backpack does not exist", self.backpack[i][j]) end else sprite = "12071:448" end return UiImageButton(windowId, "inventorySlot", calculateSlotX(self, j, i), calculateSlotY(self, j, i), self.inventory_slot_width-2, self.inventory_slot_height-2, sprite, sprite, sprite, "moveInventory backpack " .. i .. " " .. j) end function resetBackpackButton(self, i, j) -- delete the current button UiDelete(self.inventorySlots[i][j]) -- create a new button self.inventorySlots[i][j] = createSlotButton(self, self.inventoryWindow, i, j) end function resetPaperDollButton(self, location) --Debug("Reset: %s", location) local slot = self.paperDollSlots[location] local sprite local object if (slot.id ~= 0) then UiDelete(slot.id) end if (self.paperDoll[location] ~= 0) then object = GetObjectById(self.paperDoll[location]) if (object) then sprite = object.spriteId else Debug("Item %d lost from unit %d container", self.paperDoll[location], self.id) self.paperDoll[location] = 0 sprite = '12071:448' end else sprite = "12071:448" end self.paperDollSlots[location].id = UiImageButton(self.inventoryWindow, "paperDollSlot", slot.buttonx, slot.buttony, 32, 32, sprite, sprite, sprite, "moveInventory "..location.." 0 0") end function calculateSlotX(self, x, y) --Debug("%d", self.inventory_box_x) return self.inventory_box_x + ((x - 1) * (self.inventory_slot_width + self.inventory_slot_pad_x)) + 1 end function calculateSlotY(self, x, y) return self.inventory_box_y + ((y -1) * (self.inventory_slot_height + self.inventory_slot_pad_y)) + 1 end