diff options
| author | U-DESKTOP-FOJ6TK1\Alex <alex@cogarr.net> | 2025-02-12 17:25:25 -0600 |
|---|---|---|
| committer | U-DESKTOP-FOJ6TK1\Alex <alex@cogarr.net> | 2025-02-12 17:25:25 -0600 |
| commit | b1c3386ca4032ac5925969d759ae2e5bc015d1f8 (patch) | |
| tree | 74e7d8797afea9df12222e149e865134ddec9479 /client/data/commands.lua | |
| parent | 0aae46ecc38005236210f7e243f02cac39ab1dc3 (diff) | |
| download | home_text_adventure-master.tar.gz home_text_adventure-master.tar.bz2 home_text_adventure-master.zip | |
Diffstat (limited to 'client/data/commands.lua')
| -rw-r--r-- | client/data/commands.lua | 864 |
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
|
