summaryrefslogtreecommitdiff
path: root/client/data/commands.lua
diff options
context:
space:
mode:
authorU-DESKTOP-FOJ6TK1\Alex <alex@cogarr.net>2025-02-12 17:25:25 -0600
committerU-DESKTOP-FOJ6TK1\Alex <alex@cogarr.net>2025-02-12 17:25:25 -0600
commitb1c3386ca4032ac5925969d759ae2e5bc015d1f8 (patch)
tree74e7d8797afea9df12222e149e865134ddec9479 /client/data/commands.lua
parent0aae46ecc38005236210f7e243f02cac39ab1dc3 (diff)
downloadhome_text_adventure-b1c3386ca4032ac5925969d759ae2e5bc015d1f8.tar.gz
home_text_adventure-b1c3386ca4032ac5925969d759ae2e5bc015d1f8.tar.bz2
home_text_adventure-b1c3386ca4032ac5925969d759ae2e5bc015d1f8.zip
Final commitHEADmaster
Diffstat (limited to 'client/data/commands.lua')
-rw-r--r--client/data/commands.lua864
1 files changed, 438 insertions, 426 deletions
diff --git a/client/data/commands.lua b/client/data/commands.lua
index e9df205..d1328da 100644
--- a/client/data/commands.lua
+++ b/client/data/commands.lua
@@ -1,426 +1,438 @@
-local cmds = {}
-local lp = require("localplayer")
-local world = require("world")
-local net = require("net")
-local save = require("save")
-local house = require("house")
-function cmds.hints() end --A method to detour for palces to give hints
-
-local dont_hint = false
-cmds.look_hint = function(...)
- return {""} --We can always look
-end
-cmds.look = function(...)
- cls()
- if lp.location.is_location then
- out(lp.location:get_desc())
- else
- out(lp.location:get_room_desc())
- end
-end
-cmds.go = function(direction)
- local input = string.lower(direction)
- print("got input to go",input)
- set_hints(unpack(world.basic_commands))
- lp:go(direction)
- --local direction =
-end
-cmds.go_hint = function(...)
- local loc = lp.location
- local directions = {}
- if loc.go then
- for k,v in pairs(loc.go) do
- directions[#directions + 1] = v[1]
- end
- end
- return directions
-end
-cmds.goto_hint = function(tbl)
- --print("Getting goto hint")
- --print("Got loc:", loc)
- local places = {}
- if lp.location.is_location then
- for k,v in pairs(lp.location.go) do
- places[#places + 1] = v[2]().name
- end
- for k,v in pairs(lp.location.last_houses) do
- places[#places + 1] = v
- end
- end
- return places
-end
-cmds.goto = function(...)
- local place_name = table.concat({...}," ")
- local pns = string.lower(place_name)
- print("Place name:",place_name)
- local loc = lp.location
- local found_place
- for k,v in pairs(lp.location.go) do
- if string.lower(v[2]().name) == pns then
- found_place = v[2]()
- print("Found place location!",found_place.name)
- break
- end
- end
- if found_place == nil then --We haven't found what they're looking for yet
- print("Did not find place name, looking further")
- if net.house_exists(loc.name,place_name) then
- print("Found place!",loc.name,place_name)
- local place = net.get_house(loc.name,place_name)
- print("Place was:",place)
- found_place = place
- end
- end
- if found_place == nil then
- print("Places:")
- for k,v in pairs(loc.go) do
- print(k,":",v)
- end
- fail_hint("Could not find a place:", place_name)
- return
- end
- print("found_place is location:",found_place.is_location)
- if found_place.is_location then
- print("Using lp.goto_location",found_place.name)
- lp:goto_location(found_place)
- elseif found_place ~= nil then
- print("Using lp:goto_house")
- lp:goto_house(loc.name,place_name)
- end
- print("Found place was",found_place)
- --lp:goto_location(found_place)
-end
-cmds.settle = function(...)
- local oldruncommand = run_command
- cls()
- out("Enter a name for your house:")
- set_hints("")
- dont_hint = true
- command_over = function(text)
- print("Got text:",text)
- if net.is_name_available(text, lp.location.name) then
- local nhouse = house.create_new(text)
- local house_data = save.table_to_string(nhouse)
- print("Made house:",house_data)
- net.claim_house(lp.location.name,text,lp.id)
- net.write_house(lp.id,house_data)
- command_over = nil
- clear_cmdbox()
- cls()
- out(lp.location.settle_txt)
-
- dont_hint=false
- else
- fail_hint("That name is already taken! Try another!")
- end
- end
- world.basic_commands[#world.basic_commands] = nil
-end
-cmds.settle_hint = function(...)
- if lp.has_settled then
- return {"You have already setteled!"}
- else
- return {"Once you settle an area, you cannot settle again!"}
- end
-end
-cmds.test = function(...)
- lp:goto_house("City/one")
-end
-cmds.test_hint = function(...)
-
-end
-local valid_directions = {
- north = true, south = true, east = true, west = true, up = true, down = true
-}
-cmds.create_room = function(direction, ...)
- local name = table.concat({...}," ")
- print("create_room called with", direction,name)
- if not direction and name then
- fail_hint("To create a room, give it a direction (north, east, up, ect.) and a name")
- end
- direction = string.lower(direction)
- if not lp.in_house then
- fail_hint("You must be in your house to create a room!")
- return
- end
- if not valid_directions[direction] then
- fail_hint("You can't make a room \"" .. direction .. "\". Use north, east, up, ect.")
- return
- end
- local cur_house = lp.in_house
- local cur_room = lp.location
- --print("cur_house is", cur_house)
- if cur_house:has_room_in_direction(cur_room,direction) then
- cls()
- out([[
-There is already a room in this direction, would you like make a doorway to
-this room instead? (yes/no)
-]])
- dont_hint = true
- command_over = function(text)
- clear_cmdbox()
- if text == "yes" then
- cur_house:create_doorway(cur_room,direction)
- cls()
- out("You created a doorway")
- else
- cls()
- out("You don't do anything")
- end
- command_over = nil
- dont_hint = false
-
- end
- else
- cur_house:create_room(cur_room,direction,name)
- cls()
- out("You create a new room " .. direction)
- end
-
- --cur_house:create_room(cur_house,direction,name)
-end
-cmds.create_room_hint = function(...)
- return {"create_room <direction> <room_name>"}
-end
-
-cmds.edit_room = function(field)
- if field == "description" then
- enable_multibox(true)
- multibox:settext(lp.location.desc)
- --set_editbox_multi(true)
- multibox_donebut.onClick = function(self)
- print("over multibut click")
- local toset = multibox:gettext()
- print("Setting text to ", toset)
- lp.location.desc = toset
- cls()
- out(lp.location:get_room_desc())
- enable_multibox(false)
- --set_editbox_multi(false)
- end
- elseif field == "name" then
- cls()
- out("Enter the new room name")
- dont_hint = true
- command_over = function(text)
- print("Overrideing command")
- lp.location.name = text
- clear_cmdbox()
- cls()
- out("You set the room's name to " .. text)
- command_over = nil
- dont_hint = false
- end
- end
-
-end
-cmds.edit_room_hint = function(...)
- return {"edit_room (name|description)"}
-end
-
-cmds.create_item = function(...)
- local itemname = table.concat({...}," ")
- dont_hint = true
- cls()
- out("Describe the location of the item in the room")
- command_over = function(text)
- cls()
- out("Enter a description for this item")
- local item_loc = text
- enable_multibox(true)
- multibox_donebut.onClick = function(self)
- local description = multibox:gettext()
- print("Creating an item in", lp.location.name)
- lp.location:add_item(itemname,description,item_loc)
- cls()
- out(lp.location:get_room_desc())
- enable_multibox(false)
- end
- clear_cmdbox()
- command_over = nil
- dont_hint = false
- end
-end
-
-cmds.create_item_hint = function(...)
- return {"create_item item_name"}
-end
-
-cmds.edit_item = function(field,...)
- local itemname = table.concat({...}," ")
- local this_item
- if lp.location.items == nil then
- fail_hint("You can only edit items in a house")
- return
- end
- for itemnum,item in pairs(lp.location.items) do
- if item.name == itemname then
- this_item = item
- break
- end
- end
- if this_item == nil then
- fail_hint("Could not find an item named " .. itemname)
- return
- end
- if field == "name" then
- cls()
- out("Enter a new name")
- dont_hint = true
- command_over = function(text)
- this_item.name = text
- command_over = nil
- clear_cmdbox()
- out(lp.location:get_room_desc())
- dont_hint = false
- end
- elseif field == "description" then
- cls()
- enable_multibox(true)
- multibox:settext(this_item.desc)
- multibox_donebut.onClick = function(self)
- local newdesc = multibox:gettext()
- this_item.desc = newdesc
- cls()
- out(lp.location:get_room_desc())
- enable_multibox(false)
- end
- elseif field == "location" then
- cls()
- out("Enter a new location")
- dont_hint = true
- command_over = function(text)
- this_item.location = text
- command_over = nil
- clear_cmdbox()
- out(lp.location:get_room_desc())
- dont_hint = false
- end
-
- else
- fail_hint("Could not edit an item's \"" .. field .. "\".")
- end
-end
-
-cmds.edit_item_hint = function(...)
- return {"edit_item (name|description|location) item_name"}
-end
-
-cmds.examine = function(...)
- local item_name = table.concat({...}," ")
- if lp.location.items then
- local item_found = false
- cls()
- for k,item in pairs(lp.location.items) do
- if item.name == item_name then
- out(item.desc)
- item_found = true
- end
- end
- if not item_found then
- fail_hint("You couldn't find a " .. item_name .. " to examine")
- end
- else
- fail_hint("You couldn't find anything to examine")
- end
-end
-
-cmds.examine_hint = function(...)
- local itemlist = {}
- for k,item in pairs(lp.location.items) do
- itemlist[#itemlist + 1] = item.name
- end
- return itemlist
-end
-
-cmds.save = function(...)
- print("in_house:",lp.in_house)
- print("owns:",lp.owns)
- if (not lp.in_house) or (not lp.owns) then
- fail_hint("You can only save when you're in your house.")
- return
- end
- --lp.in_house["in"] = nil
- local housedata = save.table_to_string(lp.in_house)
- net.write_house(lp.id,housedata)
- cls()
- out("House saved!")
- print("House data is", housedata)
-end
-cmds.save_hint = function(...)
- return {"Save your house!"}
-end
-
-cmds.destroy_room = function(direction)
- direction = string.lower(direction)
- if not lp.in_house or not lp.owns then
- fail_hint("You can only destory rooms in your own house.")
- return
- end
- lp.in_house:destroy_room(lp.location,direction)
- cls()
- out(lp.location:get_room_desc())
- print("Room destroyed!")
-end
-
-cmds.destroy_room_hint = function(...)
- return {"destroy_room <direction>"}
-end
-
-add_cmdbox_hook(function(cmdbox)
- local text = cmdbox:gettext()
- if text == "go south" and (not lp.location.is_location) and (lp.location.south == "exit") and (lp.owns) then
- set_hints("Don't forget to save before exiting your house!")
- end
-end)
-
-add_cmdbox_hook(function(cmdbox)
- if dont_hint then return end
- local text = cmdbox:gettext()
- if string.find(text,".* $") then
- local root = string.match(text,"^([^%s]+)")
- print("root is:")
- if cmds[root] then
- local hints = cmds[root .. "_hint"]()
- assert(type(hints) == "table","Tried to set hints not a table!")
- for k,v in pairs(hints) do
- assertf(type(v) == "string","Hints table has something other than a string: %s",type(v))
- end
- set_hints(unpack(hints))
- end
- elseif string.find(text,"^[^%s]*$") then --Does not have a root command yet
- local cmd_set = {}
- for k,v in pairs(world.basic_commands) do
- cmd_set[k] = v
- end
- if lp.owns and lp.in_house then
- print("We own this place, adding extra commands")
- cmd_set[#cmd_set + 1] = "create_room"
- cmd_set[#cmd_set + 1] = "edit_room"
- cmd_set[#cmd_set + 1] = "destroy_room"
-
- cmd_set[#cmd_set + 1] = "create_item"
- cmd_set[#cmd_set + 1] = "edit_item"
- cmd_set[#cmd_set + 1] = "destroy_item"
-
- cmd_set[#cmd_set + 1] = "save"
- end
- if not lp.location.is_location and lp.location.items then
- cmd_set[#cmd_set + 1] = "examine"
- else
- cmd_set[#cmd_set + 1] = "goto"
- end
- set_hints(unpack(cmd_set))
- else
- local root = string.match(text,"^([^%s]+)%s.+")
- print("root is:")
- if cmds[root] then
- local hints = cmds[root .. "_hint"]()
- assert(type(hints) == "table","Tried to set hints not a table!")
- set_hints(unpack(hints))
- end
-
- end
-end)
-
-return cmds
+local cmds = {}
+local lp = require("localplayer")
+local world = require("world")
+local net = require("net")
+local save = require("save")
+local house = require("house")
+function cmds.hints() end --A method to detour for palces to give hints
+
+local dont_hint = false
+cmds.can_look = function(...)
+ return true --We can always look
+end
+cmds.look_hint = function(...)
+ return {""} --We can always look
+end
+cmds.look = function(...)
+ cls()
+ if lp.location.is_location then
+ out(lp.location:get_desc())
+ else
+ out(lp.location:get_room_desc())
+ end
+end
+
+cmds.can_go = function(...)
+ return true --We can always go
+end
+cmds.go = function(direction)
+ local input = string.lower(direction)
+ print("got input to go",input)
+ set_hints(unpack(world.basic_commands))
+ lp:go(direction)
+ --local direction =
+end
+cmds.go_hint = function(...)
+ local loc = lp.location
+ local directions = {}
+ if loc.go then
+ for k,v in pairs(loc.go) do
+ directions[#directions + 1] = v[1]
+ end
+ end
+ return directions
+end
+
+cmds.can_goto = function(...)
+ return lp.in_house == nil
+end
+cmds.goto_hint = function(tbl)
+ --print("Getting goto hint")
+ --print("Got loc:", loc)
+ local places = {}
+ if lp.location.is_location then
+ for k,v in pairs(lp.location.go) do
+ places[#places + 1] = v[2]().name
+ end
+ if lp.location.last_houses then
+ for k,v in pairs(lp.location.last_houses) do
+ places[#places + 1] = v
+ end
+ end
+ end
+ return places
+end
+cmds.goto = function(...)
+ local place_name = table.concat({...}," ")
+ local pns = string.lower(place_name)
+ print("Place name:",place_name)
+ local loc = lp.location
+ local found_place
+ for k,v in pairs(lp.location.go) do
+ if string.lower(v[2]().name) == pns then
+ found_place = v[2]()
+ print("Found place location!",found_place.name)
+ break
+ end
+ end
+ if found_place == nil then --We haven't found what they're looking for yet
+ print("Did not find place name, looking further")
+ if net.house_exists(loc.name,place_name) then
+ print("Found place!",loc.name,place_name)
+ local place = net.get_house(loc.name,place_name)
+ print("Place was:",place)
+ found_place = place
+ end
+ end
+ if found_place == nil then
+ print("Places:")
+ for k,v in pairs(loc.go) do
+ print(k,":",v)
+ end
+ fail_hint("Could not find a place:", place_name)
+ return
+ end
+ print("found_place is location:",found_place.is_location)
+ if found_place.is_location then
+ print("Using lp.goto_location",found_place.name)
+ lp:goto_location(found_place)
+ elseif found_place ~= nil then
+ print("Using lp:goto_house")
+ lp:goto_house(loc.name,place_name)
+ end
+ print("Found place was",found_place)
+ --lp:goto_location(found_place)
+end
+
+cmds.can_settle = function(...)
+ return not lp.has_settled
+end
+cmds.settle = function(...)
+ cls()
+ out("Enter a name for your house:")
+ set_hints("")
+ dont_hint = true
+ command_over = function(text)
+ print("Got text:",text)
+ if net.is_name_available(text, lp.location.name) then
+ local nhouse = house.create_new(text)
+ local house_data = save.table_to_string(nhouse)
+ print("Made house:",house_data)
+ net.claim_house(lp.location.name,text,lp.id)
+ net.write_house(lp.id,house_data)
+ command_over = nil
+ clear_cmdbox()
+ cls()
+ out(lp.location.settle_txt)
+ dont_hint=false
+ lp:goto_house(text,false)
+ else
+ fail_hint("That name is already taken! Try another!")
+ end
+ end
+ world.basic_commands[#world.basic_commands] = nil
+end
+cmds.settle_hint = function(...)
+ if lp.has_settled then
+ return {"You have already setteled!"}
+ else
+ return {"Once you settle an area, you cannot settle again!"}
+ end
+end
+
+local valid_directions = {"north","south","east","west","up","down"}
+local valid_directions_index = {}
+for k,v in pairs(valid_directions) do valid_directions_index[v] = true end
+
+cmds.create_room = function(direction, ...)
+ local name = table.concat({...}," ")
+ print("create_room called with", direction,name)
+ if not direction and name then
+ fail_hint("To create a room, give it a direction (north, east, up, ect.) and a name")
+ end
+ direction = string.lower(direction)
+ if not lp.in_house then
+ fail_hint("You must be in your house to create a room!")
+ return
+ end
+ if not valid_directions_index[direction] then
+ fail_hint("You can't make a room \"" .. direction .. "\". Use north, east, up, ect.")
+ return
+ end
+ local cur_house = lp.in_house
+ local cur_room = lp.location
+ --print("cur_house is", cur_house)
+ if cur_house:has_room_in_direction(cur_room,direction) then
+ cls()
+ out([[
+There is already a room in this direction, would you like make a doorway to
+this room instead? (yes/no)
+]])
+ dont_hint = true
+ command_over = function(text)
+ clear_cmdbox()
+ if text == "yes" then
+ cur_house:create_doorway(cur_room,direction)
+ cls()
+ out("You created a doorway")
+ lp:go(direction)
+ else
+ cls()
+ out("You don't do anything")
+ end
+ command_over = nil
+ dont_hint = false
+
+ end
+ else
+ cur_house:create_room(cur_room,direction,name)
+ cls()
+ out("You create a new room " .. direction)
+ lp:go(direction)
+ end
+
+ --cur_house:create_room(cur_house,direction,name)
+end
+cmds.create_room_hint = function(...)
+ return {"create_room <direction> <room_name>"}
+end
+
+cmds.edit_room = function(field)
+ if field == "description" then
+ enable_multibox(true)
+ multibox:settext(lp.location.desc)
+ --set_editbox_multi(true)
+ multibox_donebut.onClick = function(self)
+ print("over multibut click")
+ local toset = multibox:gettext()
+ print("Setting text to ", toset)
+ lp.location.desc = toset
+ cls()
+ out(lp.location:get_room_desc())
+ enable_multibox(false)
+ --set_editbox_multi(false)
+ end
+ elseif field == "name" then
+ cls()
+ out("Enter the new room name")
+ dont_hint = true
+ command_over = function(text)
+ print("Overrideing command")
+ lp.location.name = text
+ clear_cmdbox()
+ cls()
+ out("You set the room's name to " .. text)
+ command_over = nil
+ dont_hint = false
+ end
+ end
+
+end
+cmds.edit_room_hint = function(...)
+ return {"edit_room (name|description)"}
+end
+
+cmds.create_item = function(...)
+ local itemname = table.concat({...}," ")
+ dont_hint = true
+ cls()
+ out("Describe the location of the item in the room")
+ command_over = function(text)
+ cls()
+ out("Enter a description for this item")
+ local item_loc = text
+ enable_multibox(true)
+ multibox_donebut.onClick = function(self)
+ local description = multibox:gettext()
+ print("Creating an item in", lp.location.name)
+ lp.location:add_item(itemname,description,item_loc)
+ cls()
+ out(lp.location:get_room_desc())
+ enable_multibox(false)
+ end
+ clear_cmdbox()
+ command_over = nil
+ dont_hint = false
+ end
+end
+
+cmds.create_item_hint = function(...)
+ return {"create_item <item_name>"}
+end
+
+cmds.edit_item = function(field,...)
+ local itemname = table.concat({...}," ")
+ local this_item
+ if lp.location.items == nil then
+ fail_hint("You can only edit items in a house")
+ return
+ end
+ for itemnum,item in pairs(lp.location.items) do
+ if item.name == itemname then
+ this_item = item
+ break
+ end
+ end
+ if this_item == nil then
+ fail_hint("Could not find an item named " .. itemname)
+ return
+ end
+ if field == "name" then
+ cls()
+ out("Enter a new name")
+ dont_hint = true
+ command_over = function(text)
+ this_item.name = text
+ command_over = nil
+ clear_cmdbox()
+ out(lp.location:get_room_desc())
+ dont_hint = false
+ end
+ elseif field == "description" then
+ cls()
+ enable_multibox(true)
+ multibox:settext(this_item.desc)
+ multibox_donebut.onClick = function(self)
+ local newdesc = multibox:gettext()
+ this_item.desc = newdesc
+ cls()
+ out(lp.location:get_room_desc())
+ enable_multibox(false)
+ end
+ elseif field == "location" then
+ cls()
+ out("Enter a new location")
+ dont_hint = true
+ command_over = function(text)
+ this_item.location = text
+ command_over = nil
+ clear_cmdbox()
+ out(lp.location:get_room_desc())
+ dont_hint = false
+ end
+
+ else
+ fail_hint("Could not edit an item's \"" .. field .. "\".")
+ end
+end
+
+cmds.edit_item_hint = function(...)
+ return {"edit_item (name|description|location) item_name"}
+end
+
+cmds.examine = function(...)
+ local item_name = table.concat({...}," ")
+ if lp.location.items then
+ local item_found = false
+ cls()
+ for k,item in pairs(lp.location.items) do
+ if item.name == item_name then
+ out(item.desc)
+ item_found = true
+ end
+ end
+ if not item_found then
+ fail_hint("You couldn't find a " .. item_name .. " to examine")
+ end
+ else
+ fail_hint("You couldn't find anything to examine")
+ end
+end
+
+cmds.examine_hint = function(...)
+ local itemlist = {}
+ for k,item in pairs(lp.location.items) do
+ itemlist[#itemlist + 1] = item.name
+ end
+ return itemlist
+end
+
+cmds.save = function(...)
+ print("in_house:",lp.in_house)
+ print("owns:",lp.owns)
+ if (not lp.in_house) or (not lp.owns) then
+ fail_hint("You can only save when you're in your house.")
+ return
+ end
+ --lp.in_house["in"] = nil
+ local housedata = save.table_to_string(lp.in_house)
+ net.write_house(lp.id,housedata)
+ cls()
+ out("House saved!")
+ print("House data is", housedata)
+end
+cmds.save_hint = function(...)
+ return {"Save your house!"}
+end
+
+cmds.destroy_room = function(direction)
+ direction = string.lower(direction)
+ if not lp.in_house or not lp.owns then
+ fail_hint("You can only destory rooms in your own house.")
+ return
+ end
+ lp.in_house:destroy_room(lp.location,direction)
+ cls()
+ out(lp.location:get_room_desc())
+ print("Room destroyed!")
+end
+cmds.destroy_room_hint = function(...)
+ return {"destroy_room <direction>"}
+end
+add_cmdbox_hook(function(cmdbox)
+ local text = cmdbox:gettext()
+ if text == "go south" and (not lp.location.is_location) and (lp.location.south == "exit") and (lp.owns) then
+ set_hints("Don't forget to save before exiting your house!")
+ end
+end)
+
+
+add_cmdbox_hook(function(cmdbox)
+ if dont_hint then return end
+ local text = cmdbox:gettext()
+ if string.find(text,"^[^%s]*$") then --Does not have a root command yet
+ local cmd_set = {}
+ for k,v in pairs(world.basic_commands) do
+ cmd_set[k] = v
+ end
+ if lp.owns and lp.in_house then
+ print("We own this place, adding extra commands")
+ cmd_set[#cmd_set + 1] = "create_room"
+ cmd_set[#cmd_set + 1] = "edit_room"
+ cmd_set[#cmd_set + 1] = "destroy_room"
+
+ cmd_set[#cmd_set + 1] = "create_item"
+ cmd_set[#cmd_set + 1] = "edit_item"
+ cmd_set[#cmd_set + 1] = "destroy_item"
+
+ cmd_set[#cmd_set + 1] = "save"
+ end
+ if (not lp.location.is_location) and (lp.location.items) then
+ cmd_set[#cmd_set + 1] = "examine"
+ else
+ cmd_set[#cmd_set + 1] = "goto"
+ end
+ set_hints(unpack(cmd_set))
+ else
+ local root = string.match(text,"^([^%s]+)%s.+")
+ print("root is:")
+ if cmds[root] then
+ local hints = cmds[root .. "_hint"]()
+ assert(type(hints) == "table","Tried to set hints not a table!")
+ set_hints(unpack(hints))
+ end
+
+ end
+end)
+
+--Hint if we've typed the name of a command
+add_cmdbox_hook(function(cmdbox)
+ local text = cmdbox:gettext()
+ if cmds[text] and cmds[text .. "_hint"] and cmds["can_" .. text] then
+ print("Hint command")
+ local hints = cmds[text .. "_hint"]()
+ set_hints(unpack(hints))
+ end
+end)
+
+return cmds