# 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