Adapting AARDWOLF inventory miniwindow

Posted by Death on Wed 17 Jan 2018 04:08 PM — 21 posts, 75,856 views.

#0
Hey all,

I've been admiring the AARDWOLF inventory miniwindow (amongst others) and I've been trying to convert it to a non gmcp mud.

Here's what I've got

https://ibb.co/cOymWm

Run-time error
Plugin: Aardwolf_Health_Bars (called from world: Dark Wizardry
Function/Sub: do_prompt called by trigger
Reason: processing trigger "" when matching line: "<1818/1818 hp 9084/9084 m 2566/2566 mv>"
[string "Plugin: Aardwolf_Health_Bars"]:559: bad argument #7 to 'WindowRectOp' (number expected, got nil)
stack traceback:
[C]: in function 'WindowRectOp'
[string "Plugin: Aardwolf_Health_Bars"]:559: in function <[string "Plugin: Aardwolf_Health_Bars"]:552>




I'm not a legendary programmer or anything, and I know not everyone has time to help convert this, but I think figuring out how to fix this would help me understand how to code things in the future. If anyone can help, I'd be SO grateful.
Amended on Sun 05 Jan 2020 06:03 AM by Death
USA Global Moderator #1
Aardwolf_Health_Bars has nothing to do with inventory.

Anyway, capitalization matters. You can't use a variable called BACKGROUND_COLOUR if you only have background_colour defined.
Amended on Wed 17 Jan 2018 05:26 PM by Fiendish
Australia Forum Administrator #2
I did a tutorial about doing an inventory in a minwindow.

Template:post=9965
Please see the forum thread: http://gammon.com.au/forum/?id=9965.
#3
Sorry, I must've copied the wrong code when I was posting (VERY LATE AT NIGHT)

Nick, I've already got your inventory window, and it's awesome, but I'm really looking for something closer to the AARDWOLF one, in regard to theme (resize-able, the coloring/headers, the whole thing being far more intricate and useful with tabs and the right click-ability)

This is what I have so far, Nick (already using your inventory window)

https://ibb.co/cOymWm


Basically I've been trying to adapt the AARDWOLF miniwindow themes to NON-GMCP coding. (in my case I would have to find the strings that match circlemud and match them myself of course)


Pretty sure what I was thinking is that if I could figure out how to rework the health bars to non-gmcp I could figure out how to do the same with the inventory (basically just using the theme, but not the gmcp variables)

The aardwolf health bars miniwindow is SO nice, and it would be awesome to be able to utilize the customization of it on another mud.

I originally thought I could copy the theme parts of the code, but it doesn't seem that easy, as I'm sure there are still parts of the code in there that don't belong. Any recommendations?
Amended on Thu 18 Jan 2018 06:03 AM by Death
USA Global Moderator #4
Quote:
The aardwolf health bars miniwindow is SO nice

I'm glad you like it. Nice plugins take a lot of work.

My answer still stands for correcting the error you posted.
Amended on Thu 18 Jan 2018 06:11 AM by Fiendish
Australia Forum Administrator #5
Well, the post I made (above) was really quite minimal. There is a module that lets you drag windows around.

http://www.gammon.com.au/forum/?id=9594

Quote:

if I could figure out how to rework the health bars to non-gmcp I could figure out how to do the same with the inventory (basically just using the theme, but not the gmcp variables)


The GMCP stuff is basically input data. You can get it from other places, like triggers. If you can find a trigger that can "seed" your inventory then your work is largely done. As for the aesthetics you just add extra code to make things happen. It's actually quite fun to sit there and make things like a RH-click do something useful.
#6
Okay friends, so I should really change the subject name, but this ends up getting me to where I need to be.
I'm working on modifying the health bars to non-gmcp, which will in turn help me understand how to do the inventory as well.

My problem before was that the stats were never grabbing, so it always said "stats will show here", or whatever the prompt says. Now that I've fixed a few lines around the problem area (thanks fiendish)

It seems to want to be grabbing some stats, or have some weird drawing happening, because the health bars miniwindow is going ALL BLACK.

Here is the updated code.
http://textuploader.com/dmmnh

I've used the "do_prompt" script sequence from Nick's health miniwindows, and initially that was causing a problem, but now there are 0 things tripping the plugin (no failures), but I'm sure there's a drawing problem, and somehow still a stat grabbing problem.


If you could just steer me in the right direction, I'm happy to do the foot work. Thank you.


EDIT: (Is it something in here? Maybe "fill entire box"?
function do_prompt (name, line, wildcards)

hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])

-- fill entire box to clear it
check (WindowRectOp (win, 2, 0, 0, 0, 0, background_colour)) -- fill entire box

-- Edge around box rectangle
check (WindowCircleOp (win, 3, 0, 0, 0, 0, border_color, 0, 2, 0, 1))

vertical = 6 -- pixel to start at
Amended on Thu 18 Jan 2018 11:52 PM by Death
Australia Forum Administrator #7
Can you post the entire function? And use code tags please?

Template:codetag
To make your code more readable please use [code] tags as described here.
#8
Here is the do_prompt code you've designed for your original health bars mod, Nick, which is featured here..

[link]http://www.gammon.com.au/forum/bbshowpost.php?id=9270&page=1[/link]


function do_prompt (name, line, wildcards)

  hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
  mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
  move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])

  -- fill entire box to clear it
  check (WindowRectOp (win, 2, 0, 0, 0, 0, background_colour))  -- fill entire box
  
  -- Edge around box rectangle
  check (WindowCircleOp (win, 3, 0, 0, 0, 0, border_color, 0, 2, 0, 1))

  vertical = 6  -- pixel to start at


  WindowShow (win, true)
  
end -- function do_prompt




There aren't any error codes popping off in the current code (see my last comment on this thread, the URL), but my miniwindow is going all black when it gets the prompt, instead of showing the bars.
Amended on Fri 19 Jan 2018 02:14 AM by Death
Australia Forum Administrator #9
You aren't drawing any bars, that's why you don't see any. The code you linked called a function to draw the bars:


  DoGauge ("HP: ",   hp_percent,    ColourNameToRGB "darkgreen")
  DoGauge ("Mana: ", mana_percent,  ColourNameToRGB "mediumblue")
  DoGauge ("Move: ", move_percent,  ColourNameToRGB "gold")
USA Global Moderator #10
Yeah. So, you're clearing the box just fine. That is, every time your prompt comes through, you're setting the whole thing to be solid black. That's good so far, but at that point my code actually draws bars, and yours does...nothing. If your goal is to use my code with your prompt instead of GMCP, you need to be doing after your prompt comes in what I do after the GMCP data comes in.
Amended on Fri 19 Jan 2018 03:23 AM by Fiendish
#11
My code started to get really weird, so I've started over from scratch..

LINK TO CURRENT CODE BELOW
http://textuploader.com/dmhdj

My current issues is this

Run-time error
Plugin: Aardwolf_Health_Bars (called from world: Dark Wizardry
Function/Sub: DoNextSimpleBar called by trigger
Reason: processing trigger "" when matching line: "<1818/1818 hp 9084/9084 m 2566/2566 mv>"
[string "Plugin: Aardwolf_Health_Bars"]:81: attempt to index local 'wildcards' (a nil value)
stack traceback:
[string "Plugin: Aardwolf_Health_Bars"]:81: in function <[string "Plugin: Aardwolf_Health_Bars"]:79>


and of course, every time the prompt hits, I get this "Trigger function "DoNextSimpleBar" not found or had a previous error."


I've set the wildcard values and triggering system in the following way.

<triggers>
  <trigger
   enabled="y"
   match="^\&lt;(\d+)\s*\/(\d+)\s*hp (\d+)\s*\/(\d+)\s*m (\d+)\s*\/(\d+)\s*mv>"
   regexp="y"
   script="DoNextSimpleBar"
   sequence="100"
  >
  </trigger>
</triggers>


I've taken the triggering mechanism from Nick's miniwindows, and I've used it here. Instead of using the script "do_prompt", I've asked it to do the script "DoNextSimpleBar", which is what I thought fiendish said, basically (use his drawing script, which is what I wanted anyway)

I've not removed all of the GMCP values yet, but I'm trying to get a working model with HP/MANA/MOVE, and go from there.
The code started with this,

      DoNextSimpleBar("Health", gmcp_char.vitals.hp, gmcp_char.maxstats.maxhp)
      DoNextSimpleBar("Mana", gmcp_char.vitals.mana, gmcp_char.maxstats.maxmana)
      DoNextSimpleBar("Moves", gmcp_char.vitals.moves, gmcp_char.maxstats.maxmoves)


and went to this...

      DoNextSimpleBar("Health",    hp ,   max_hp)
      DoNextSimpleBar("Mana",  mana,  max_mana)
      DoNextSimpleBar("Moves",  move,  max_move)



Another part I've changed is here...


function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label)
   txt = ""
   if (showBar[bar][2] == true) then
      local num_val = tonumber(val)
      local num_maxval = tonumber(maxval)
      if showLabels == 1 then
         if stacked == 1 then
            WindowText(win, font_id, stacked_label or showBar[bar][1], xpos,  ypos, 0, 0, showBar[bar][4], false)
         else
            xpos = xpos + WindowText(win, font_id, unstacked_label or showBar[bar][3], xpos,  ypos, 0, 0, showBar[bar][4], false)
         end
      end


I've added this line RIGHT after
function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label)


hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
  mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
  move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])

and I also added "wildcards" to the end of

function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label)


I ended up with
function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label, wildcards)
  
hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
  mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
  move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])
   
txt = ""
   if (showBar[bar][2] == true) then
      local num_val = tonumber(val)
      local num_maxval = tonumber(maxval)
      if showLabels == 1 then
         if stacked == 1 then
            WindowText(win, font_id, stacked_label or showBar[bar][1], xpos,  ypos, 0, 0, showBar[bar][4], false)
         else
            xpos = xpos + WindowText(win, font_id, unstacked_label or showBar[bar][3], xpos,  ypos, 0, 0, showBar[bar][4], false)
         end
      end

      if num_maxval and num_val then
         if flip then
            val = tostring(num_maxval-num_val)
            num_val = tonumber(val)
         end
         if overlay_numbers == 1 or overlay_numbers == 3 or (graphicalMode == 0 and overlay_numbers ~= 2) then
            maxlen = math.max(#maxval, #val)
            txt = string.lpad(val, maxlen, ' ').."/"..string.rpad(maxval,maxlen,' ')
         end
         if overlay_numbers == 2 or overlay_numbers == 3 then
            txt = txt..((overlay_numbers == 3 and " (") or "")..string.lpad(string.format('%u',100*num_val/num_maxval).."%",4,' ')..((overlay_numbers == 3 and ")") or "")
         end
      end

without changing anything else. (I know that's not the end of the function, but I've not changed anything else)

Maybe that's not the correct order, maybe I don't understand that part, or maybe I've put the wildcards part in the wrong part of the script?

I appreciate working with me on this...
Amended on Sun 05 Jan 2020 06:04 AM by Death
USA Global Moderator #12
Quote:
function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label, wildcards)

You don't get to just make up whatever parameters you want going into the function that is called from your trigger.


Per https://www.gammon.com.au/script/doc.php?general=triggers

Quote:

The script subroutine must have three arguments (four for Lua), as follows:

Name of the trigger
The matching line
An array of the first 10 wildcards (Lua - all wildcards)
Lua only - a table of all the styles in the line


If you were thinking that you could just slap something called wildcards on the end of that function's arguments list and then have it called directly from the trigger, then you might need to start with a beginner's course in basic programming fundamentals and/or some of Nick's excellent MUSHclient scripting tutorial videos. This indicates a pretty serious misunderstanding of how functions work.
Amended on Fri 19 Jan 2018 05:59 AM by Fiendish
Australia Forum Administrator #13

      DoNextSimpleBar("Health",    hp ,   max_hp)


...


function DoNextSimpleBar(bar, val, maxval, flip, stacked_label, unstacked_label)


When you call a function that you invent (DoNextSimpleBar) then you are supposed to supply the arguments that it expects.

So you are expecting:


bar, val, maxval, flip, stacked_label, unstacked_label



And you are sending:


"Health",    hp ,   max_h


They three things you are sending don't seem to match the six things the function wants.

Plus, as Fiendish points out, you are using wildcards which aren't in the function arguments.
#14
Sorry guys, I guess I'm picking apart the wrong parts of the code then....



I tried to emulate this from Nick's health bars
 DoGauge ("HP: ",    hp ,   max_hp,    ColourNameToRGB "darkgreen")
  DoGauge ("Mana: ",  mana,  max_mana,  ColourNameToRGB "mediumblue")
  DoGauge ("Move: ",  move,  max_move,  ColourNameToRGB "gold")
, and replace it with DoNextSimpleBar

I obviously have no idea what I'm doing, so I'll have to do more research.

I've tried to define the wildcards via the prompt via do_prompt, like
  hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
  mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
  move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])
in nick's health bar plugin.

I obviously have no idea how to link the defining of the wildcards to the calling of that information, and more importantly calling that information after I've drawn the windows. I'll do more research. If anything, thank you guys so much for even responding to my horrible attempts to adapt this awesome plugin.

Also, the entire plugin is original to fiendish except the lines I've spoken of. I'm basically just trying to change the information that's called, and change how it's called (prompt, instead of gmcp). I guess it's a lot harder than I initially thought, since I don't understand the code enough. I'll research LUA more.
Australia Forum Administrator #15
It's not that hard, I think you are confusing yourself.

You basically need two functions. One that the trigger calls, that needs to take the wildcards and work out the values for the bars.

It can also make the window and draw the background, etc.

The second function (DoGauge) draws the actual bars (so it is called three times). That draws the text of what the bar represents, followed by the box which is the bar itself. If you put this in your script file it should work:


-- where to start each gauge
GAUGE_LEFT = 55
-- height of gauge
GAUGE_HEIGHT = 15

-- width of health bar window
WINDOW_WIDTH = 200
-- height of it
WINDOW_HEIGHT = 65
-- how many ticks to draw
NUMBER_OF_TICKS = 5
  
-- assorted colours
BACKGROUND_COLOUR = ColourNameToRGB "rosybrown"
FONT_COLOUR       = ColourNameToRGB "darkred"
BORDER_COLOUR     = ColourNameToRGB "darkorchid"
FILL_COLOUR       = ColourNameToRGB "lightgrey"
GAUGE_BORDER      = ColourNameToRGB "dimgray"

function DoGauge (sPrompt, Percent, Colour)

  local Fraction = tonumber (Percent)
  
  if Fraction > 1 then Fraction = 1 end
  if Fraction < 0 then Fraction = 0 end
   
  local width = WindowTextWidth (win, font_id, sPrompt)
  
  -- prompt on left (eg. "HP:")
  WindowText (win, font_id, sPrompt,
                             GAUGE_LEFT - width, vertical, 0, 0, FONT_COLOUR)

  -- fill entire box with "unused" colour
  WindowRectOp (win, 2, GAUGE_LEFT, vertical, WINDOW_WIDTH - 5, vertical + GAUGE_HEIGHT, 
                          FILL_COLOUR)  -- fill entire box
 
  
  local gauge_width = (WINDOW_WIDTH - GAUGE_LEFT - 5) * Fraction
  
   -- box size must be > 0 or WindowGradient fills the whole thing 
  if math.floor (gauge_width) > 0 then
    
    -- top half
    WindowGradient (win, GAUGE_LEFT, vertical, GAUGE_LEFT + gauge_width, vertical + GAUGE_HEIGHT / 2, 
                    0x000000,
                    Colour, 2) 
    
    -- bottom half
    WindowGradient (win, GAUGE_LEFT, vertical + GAUGE_HEIGHT / 2, 
                    GAUGE_LEFT + gauge_width, vertical +  GAUGE_HEIGHT,   
                    Colour,
                    0x000000,
                    2) 

  end -- non-zero
  
  -- show ticks
  local ticks_at = (WINDOW_WIDTH - GAUGE_LEFT - 5) / (NUMBER_OF_TICKS + 1)
  
  -- ticks
  for i = 1, NUMBER_OF_TICKS do
    WindowLine (win, GAUGE_LEFT + (i * ticks_at), vertical, 
                GAUGE_LEFT + (i * ticks_at), vertical + GAUGE_HEIGHT, ColourNameToRGB ("silver"), 0, 1)
  end -- for

  -- draw a box around it
  check (WindowRectOp (win, 1, GAUGE_LEFT, vertical, WINDOW_WIDTH - 5, vertical + GAUGE_HEIGHT, 
          GAUGE_BORDER))  -- frame entire box
  
  vertical = vertical + font_height + 3
end -- function DoGauge

function DoNextSimpleBar (name, line, wildcards, styles)
  
  win = GetPluginID () .. "_health_bar"
  
  font_id = "fn"
  font_name = "Fixedsys"    -- the actual font

    -- make miniwindow so I can grab the font info
  check (WindowCreate (win, 
                 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT,  
                 miniwin.pos_top_left,   
                 0,   
                 BACKGROUND_COLOUR) )

  -- add the font to the window                                  
  check (WindowFont (win, font_id, font_name, 9, false, false, false, false, 0, 0))  -- normal
  font_height = WindowFontInfo (win, font_id, 1)  -- height
  

  -- copy hp, mana, movements points from wildcards
  hp, max_hp = tonumber (wildcards [1]), tonumber (wildcards [2])
  mana, max_mana = tonumber (wildcards [3]), tonumber (wildcards [4])
  move, max_move = tonumber (wildcards [5]), tonumber (wildcards [6])

  -- fill entire box to clear it
  check (WindowRectOp (win, 2, 0, 0, 0, 0, BACKGROUND_COLOUR))  -- fill entire box
  
  -- Edge around box rectangle
  check (WindowCircleOp (win, 3, 0, 0, 0, 0, BORDER_COLOUR, 0, 2, 0, 1))

  -- calculate what percentage we are of each one
  local hp_percent = hp / max_hp
  local mana_percent = mana / max_mana
  local move_percent = move / max_move

  -- where to start the first gauge
  vertical = 6
  
  -- draw the gauges
  DoGauge ("HP: ",   hp_percent,    ColourNameToRGB "darkgreen")
  DoGauge ("Mana: ", mana_percent,  ColourNameToRGB "mediumblue")
  DoGauge ("Move: ", move_percent,  ColourNameToRGB "gold")

  WindowShow (win, true)

end -- DoNextSimpleBar
Amended on Sat 20 Jan 2018 05:23 AM by Nick Gammon
#16
Thanks Nick.

This fix seemed to just draw the original hp bar plugin onto the screen, while still having the awesome aardwolf one on the bottom, any when I resized the one on the bottom, the top one would get weird.

I'm trying to put my stats into the AARDWOLF one, the one that's fully customizable. I'm not just trying to make a basic HP/MANA/MOVE one with a standard theme, as I've already modified and made use of the original HP/MANA/MOVE theme you made.

--=================================================================================
-- Called when plugin receives telnet data - main entry point for actually running
-- the plugin.
--=================================================================================
function OnPluginBroadcast (msg, id, name, text)

   -- Look for GMCP handler.
   if (id == '3e7dedbe37e44942dd46d264') then
      if (text == 'reload') then
         -- invalidate current data
         page_built = false
         return
      end

      if (text == "char.base" or text == "char.vitals" or text == "char.status" or text == "char.maxstats") then
         if text == "char.base" then
            gmcp_char.base = gmcp("char.base")
         elseif text == "char.vitals" then
            gmcp_char.vitals = gmcp("char.vitals")
         elseif text == "char.status" then
            gmcp_char.status = gmcp("char.status")
         else
            gmcp_char.maxstats = gmcp("char.maxstats")
         end

         if gmcp_char.base and gmcp_char.vitals and gmcp_char.status and gmcp_char.maxstats then
            page_built = true
            DisplayStatsPage()
         end
      end
   elseif (id == "462b665ecb569efbf261422f" and msg==996 and text == "re-register z") then
      CallPlugin("462b665ecb569efbf261422f", "registerMiniwindow", win)
   end
end



This piece of code is in the original plugin, and it seems to be the entry point of the stats to enter the bars...
I'm not sure how I'd change it to fit the new scheme.

Where originally the code would be
      DoNextSimpleBar("Health", gmcp_char.vitals.hp, gmcp_char.maxstats.maxhp)
      DoNextSimpleBar("Mana", gmcp_char.vitals.mana, gmcp_char.maxstats.maxmana)
      DoNextSimpleBar("Moves", gmcp_char.vitals.moves, gmcp_char.maxstats.maxmoves)


I've added (with your help)
      DoNextSimpleBar("Health",    hp ,   max_hp)
      DoNextSimpleBar("Mana",  mana,  max_mana)
      DoNextSimpleBar("Moves",  move,  max_move)



For the initial code posted in this specific reply, would I need to add multiple instances (HP/MANA/MOVE) to replace each instance of "gmcp_char.vitals), because there is no mention of gmcp_char.vitals.mana, or gmcp_char.vitals.move, etc.

Meaning, would I need to do something around the lines (of course not exactly) of this?

      if (text == "char.base" or text == "hp, mana, move" or text == "char.status" or text == "max_hp, max_mana, max_moves") then
         if text == "char.base" then
            gmcp_char.base = gmcp("char.base")
         elseif text == "char.vitals" then
            gmcp_char.vitals = gmcp("hp, mana, move")
         elseif text == "char.status" then
            gmcp_char.status = gmcp("char.status")
         else
            gmcp_char.maxstats = gmcp("max_hp, max_mana, max_move")
         end

         if gmcp_char.base and gmcp_char.vitals and gmcp_char.status and gmcp_char.maxstats then
            page_built = true


I'm looking for my hp/mana/move bar to be exactly like this.
(Standard AArdwolf bar, absolutely amazing, by fiendish)
https://www.dropbox.com/preview/Screenshots/Screenshot%202018-01-25%2022.27.54.png

The code you gave me produces TWO hp bars, in the existing hp bar plugin I'm looking to modify...
Seen here.
https://www.dropbox.com/s/8wbffn7r7gecrig/Screenshot%202018-01-25%2022.30.08.png?dl=0

I'm still missing something, I guess.. All help is appreciated.
USA Global Moderator #17
Quote:
Meaning, would I need to do something around the lines (of course not exactly) of this? ...

No. That is very very wrong.

You appear to be fumbling in the dark with something that you really don't understand at all.
Maybe it will help if I explain about entry points to you.
The entry point into any agglomeration of code is the place at which that code goes from sitting idle doing nothing to being activated to do something by some external force.

My entry point is the OnPluginBroadcast method which runs whenever any new GMCP data arrives.
Your entry point is a trigger that fires on your prompt.

That is the only difference between what I've done and what you want to do.

All that my entry point does is appropriately populate a table called gmcp_char using the GMCP data that just arrived and then call DisplayStatsPage().
Therefore, all that your entry point should do is appropriately populate a table called gmcp_char using your prompt data that just arrived and then call DisplayStatsPage().

That's it.
Amended on Thu 25 Jan 2018 04:07 PM by Fiendish
USA Global Moderator #18
On a hopefully unrelated note, your game's website is broken. The server is distributing raw php code.
Amended on Thu 25 Jan 2018 04:42 PM by Fiendish
Australia Forum Administrator #19
Agreed - something is very wrong with the permissions or configuration of the darkwizardry.com web site.
Australia Forum Administrator #20
Master Vivi said:

I'm not sure how I'd change it to fit the new scheme.
...
I'm still missing something, I guess.. All help is appreciated.


Judging by the screenshot that I could read, you have taken the Aardwolf code and are trying to retro-fit your own MUD's output into it. This might be possible but you need to understand what the code is doing.

The GMCP messages arrive "out of band" as telnet subnegotiations, and your MUD would have them in triggers. As Fiendish said, maybe you could "dummy up" GMCP tables using triggers and let the bars and other things draw themselves.

However I would be removing most of those plugins and start with something simple, and when you understand how that works, gradually improve it. For example, you could add dragging the bars around to the code I gave above, fairly simply. There is a module (movewindow.lua) which you can find by following the "modules" link at the bottom of this page.