Inventory Miniwindow Exclusions

Posted by Nylian on Wed 29 Dec 2010 06:22 AM — 2 posts, 12,133 views.

#0
I am using the inventory miniwindow that you so kindly provided in the youtube video. My scripting knowledge is limited, but not afraid to dive in and try things out.

What I would like to do is make it so that when it grabs all of the information that "I'm holding" it excludes a certain type of item. (vials)

I'm not really sure where to start, so let me explain;

Here is an example of my inventory:

You are holding:
      vial171396          a small pinewood vial
      vial401698          an oaken vial
      vial401807          an oaken vial
      stocking125226      a silver stocking
      vial375233          an oaken vial
      vial375310          an oaken vial
      vial375349          an oaken vial
      vial375418          an oaken vial
      trousers44816       fitted black trousers


I would like it to show this instead:


You are holding:
      stocking125226      a silver stocking
      trousers44816       fitted black trousers



<aliases>
  <alias
   match="inv"
   enabled="y"
   group="General"
   send_to="12"
   sequence="100"
  >
  <send>require "wait"

wait.make (function ()  -- coroutine starts here


local win = GetPluginID () .. ":inventory"
local font = "f"

if not WindowInfo (win, 1) then
  WindowCreate (win, 0, 0, 0, 0, 6, 0, 0)
  WindowFont (win, font, "Lucida Console", 9)  
end -- if

-- request inventory

Send "info inv"


-- wait for inventory to start

local x = wait.match ("You are holding:", 10)

if not x then
  ColourNote ("white", "blue", "No inventory received within 10 seconds")
  return
end -- if

local inv = {}
local max_width = WindowTextWidth (win, font, "Inventory")

-- loop until end of inventory

while true do
  local line, wildcards, styles = wait.match ("*")

  -- see if end of inventory

  if not string.match (line, "^..... ") then
    break
  end -- if

  -- save inventory line
  table.insert (inv, styles)
  -- work out max width
  max_width = math.max (max_width, WindowTextWidth (win, font, line))

end -- while loop

local font_height = WindowFontInfo (win, font, 1)

local window_width = max_width + 10
local window_height = font_height * (#inv + 2) + 10

-- make window correct size

WindowCreate (win, 0, 0, window_width, window_height, 6, 0, ColourNameToRGB "#373737")
WindowRectOp (win, 5, 0, 0, 0, 0, 5, 15 + 0x1000)

-- heading line

WindowText (win, font, "Inventory", 5, 5, 0, 0, ColourNameToRGB  "yellow")

-- draw each inventory line

local y = font_height * 2 + 5

for i, styles in ipairs (inv) do

  local x = 5
  for _, style in ipairs (styles) do
    x = x + WindowText (win, font, style.text, x, y, 0, 0, style.textcolour)
  end -- for
  y = y + font_height

end -- for each inventory item

WindowShow (win, true)


end)   -- end of coroutine</send>
  </alias>
</aliases>
Australia Forum Administrator #1
This is where it adds items to the table which is eventually displayed:


 -- save inventory line
  table.insert (inv, styles)
  -- work out max width
  max_width = math.max (max_width, WindowTextWidth (win, font, line))


So make that conditional, like this:


  if not string.match (line, "^%s*vial") then
    -- save inventory line
    table.insert (inv, styles)
    -- work out max width
    max_width = math.max (max_width, WindowTextWidth (win, font, line))
  end -- if not a vial


The %s* means "zero or more spaces".