# File: oedit.rb # Author: Craig Smith # Version: 0.2 # This source code copyright (C) 2009 Craig Smith # All rights reserved. # # Released under the terms of the GNU Public License # See COPYING file for additional information. # require 'utility/log' class Oedit < Olc logger "DEBUG" attr_accessor :default_attr, :default_hash, :default_modifiers def initialize(id, oid, args=nil) self.title = "Object Editor" if not title if not obj and not oid self.obj = GameObject.new(args, id, nil) if not oid self.newobj = true end super(id,oid,args) if not is_valid?(obj) ch.sendto("Not a valid editor for that object.") exit_olc(true) return end self.default_attr = [ "fixed", "light", "buried", "shovel", "ATM" ] self.default_hash = { "worn" => [ "head","face","eyes","forehead","ears","mouth","neck","waist","back","chest","arm","arms","hand","hands","leg","legs","foot","feet","wrist" ], "fountain" => nil, "damagetype" => [ "bludgeon", "piercing", "slashing" ] } self.default_modifiers = { "damage" => [ 1, 2, 3, 5, 7, 10, 15, 25, -1, -2, -3, -5, -10 ], "accuracy" => [ 1, 2, 3, 5, 7, 10, -1, -2, -3, -5, -7, -10 ], "critical" => [ 1,5,10,15,20,25 ], "toughness" => [ 1,2,3,4,5,7,10,13,15,17,20 ] } @cur_key = "" setup_main show_menu end # checks for a valid object type. Can be overridden # [+obj+] object to check # [+return+] true if valid def is_valid?(obj) if obj.is_a? GameObject if obj.is_a? Character or obj.is_a? Account or obj.is_a? Body or obj.is_a? BodyPart or obj.is_a? Room return false else return true end end false end # setup main menu def setup_main(m=nil) self.menu = olc_basemenu(title, self, :setup_main) menu.add_std_option(nil,"Name",obj.name,self,:set_name) menu.add_text_option(nil,"Aliases",self,:setup_aliases, obj.aliases) menu.add_editor_option(nil,"Description",obj.desc,self,:set_desc) menu.add_text_option(nil,"Attributes",self,:setup_attr_menu,obj.attributes) menu.add_text_option(nil,"Attr Values",self,:setup_val_menu,obj.val) menu.add_text_option(nil,"Modifiers",self,:setup_modifier_menu, obj.modifier) menu.add_std_option(nil,"Weight",obj.weight,self,:set_weight) menu.add_std_option(nil,"Cost",obj.cost,self,:set_cost) end # Setup Alias menu # [+m+] Unused def setup_aliases(m=nil) smenu = olc_basemenu("Aliases",self,:setup_aliases, m) smenu.add_numbered_option(obj.aliases,nil,nil); smenu.add_text_option("D#","Delete Alias #",self,:del_alias); smenu.add_std_option(nil,"Add New Alias",nil,self,:add_alias); submenu(smenu,m) end # Setup attributes menu # [+m+] Unused def setup_attr_menu(m=nil) smenu = olc_basemenu("Attributes",self, :setup_attr_menu, m) default_attr.each { |a| smenu.add_default_item(a) } smenu.set_array = obj.attributes smenu.add_toggled_numbered_options(self, :toggle_attr) smenu.add_text_option("D#","Delete Attribute #",self,:del_attr) smenu.add_std_option(nil,"Add New Attribute",nil,self,:add_attr) submenu(smenu, m) end # Modifiers menu def setup_modifier_menu(m=nil) smenu = olc_basemenu("Modifiers", self, :setup_modifier_menu, m) smenu.default_hash = default_modifiers smenu.add_hash_numbered_options(obj.modifier, self, :pick_mod) smenu.add_text_option("D#","Delete Modifier #", self, :del_mod) smenu.add_std_option(nil,"Add new modifier value",nil, self, :add_mod) submenu(smenu, m) end def setup_val_menu(m=nil) smenu = olc_basemenu("Attribute Values", self, :setup_val_menu, m) smenu.default_hash = default_hash.dup smenu.add_hash_numbered_options(obj.val, self, :pick_val) smenu.add_text_option("D#","Delete Attr Value #", self, :del_val) smenu.add_std_option(nil,"Add New Attribute Value",nil,self,:add_val) submenu(smenu, m) end def pick_val(m=nil) hash_array = menu.get_hash_keys if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= hash_array.size @cur_key = hash_array[idx-1] smenu = olc_basemenu("Attribute Values [#{@cur_key}] - Set Value", self, :pick_val,m) current = "" if obj.val.has_key? @cur_key current = obj.val[@cur_key] end if default_hash.has_key? @cur_key if default_hash[@cur_key] == nil smenu.add_std_option(nil,"Enter a value",0,self,:set_default_val) else smenu.add_numbered_option(default_hash[@cur_key], self, :pick_default_val) end end smenu.add_std_option(nil,"Set new value",current, self, :set_new_val) submenu(smenu,m) end else smenu = olc_basemenu("Attribute Values - Set Value", self, :pick_val,m) smenu.add_numbered_option(default_hash[@cur_key], self, :pick_default_val) smenu.add_std_option(nil,"Set new value",obj.val[@cur_key], self, :set_new_val) submenu(smenu,m) end end def pick_mod(m=nil) hash_keys = menu.get_hash_keys if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= hash_keys.size @cur_key = hash_keys[idx-1] smenu = olc_basemenu("Modifiers [#{@cur_key}] - Set Value", self, :pick_mod,m) current = "" if obj.modifier.has_key? @cur_key current = obj.modifier[@cur_key] end if default_modifiers.has_key? @cur_key smenu.add_numbered_option(default_modifiers[@cur_key], self, :pick_default_mod) end smenu.add_std_option(nil,"Set new value",current, self, :set_new_mod) submenu(smenu,m) end else smenu = olc_basemenu("Modifiers [#{@cur_key}] - Set Value", self, :pick_mod,m) smenu.add_numbered_option(default_modifiers[@cur_key], self, :pick_default_mod) smenu.add_std_option(nil,"Set new value",current, self, :set_new_mod) submenu(smenu,m) end end def pick_default_mod(m) mods = default_modifiers[@cur_key] if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= mods.size obj.add_modifier(@cur_key, mods[idx-1]) end end quit_menu end def pick_default_val(m) vals = default_hash[@cur_key] if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= vals.size obj.add_val(@cur_key, vals[idx-1]) end end quit_menu end def set_default_val(m) if m=~/^\d+$/ obj.add_val(@cur_key, m.to_i) else obj.add_val(@cur_key, m) end show_menu m end def set_new_mod(m) m.strip! if m=~/^\d+$/ obj.add_modifier(@cur_key, m.to_i) else obj.add_modifier(@cur_key, m) end show_menu m end def set_new_val(m) m.strip! if m=~/^\d+$/ obj.add_val(@cur_key, m.to_i) else obj.add_val(@cur_key, m) end show_menu m end def del_mod(m) hash_keys = menu.get_hash_keys if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= hash_keys.size if obj.has_modifier? hash_keys[idx-1] obj.del_modifier(hash_keys[idx-1]) end end end menu.active_hash = obj.modifier show_menu obj.modifier end def del_val(m) hash_keys = menu.get_hash_keys if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= hash_keys.size if obj.has_val? hash_keys[idx-1] obj.del_val(hash_keys[idx-1]) end end end menu.active_hash = obj.val show_menu obj.val end def add_mod(m) if not obj.has_modifier? m obj.add_modifier(m,"") menu.active_hash = obj.modifier show_menu obj.modifier end end def add_val(m) if not obj.has_val? m obj.add_val(m,"") menu.active_hash = obj.val show_menu obj.val end end def toggle_attr(m) attrs = menu.default_array.concat(menu.set_array) attrs.uniq! if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= attrs.size obj.toggle_attribute(attrs[idx-1]) end end show_menu end def add_attr(m) obj.add_attribute(m.strip) show_menu obj.attributes end def del_attr(m) attrs = menu.default_array.concat(menu.set_array) attrs.uniq! if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= attrs.size obj.del_attribute(attrs[idx-1]) menu.set_array.delete(attrs[idx-1]) end end show_menu end def add_alias(m) obj.aliases << m show_menu nil end def del_alias(m) if m=~/(\d+)/ idx = $1.to_i if idx > 0 and idx <= obj.aliases.size obj.aliases.delete obj.aliases[idx-1] end end show_menu nil end # Sets Objectname # [+name+] Name to set it as def set_name(name) obj.name = name show_menu name end def set_weight(weight) obj.weight = weight.to_i show_menu obj.weight end def set_cost(cost) obj.cost = cost.to_i show_menu obj.cost end def set_desc(desc) obj.desc = desc.chomp show_menu obj.desc end end