Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =begin
- *** Please note while functional this is still the first draft and could still be bugs i have not picked up on. ***
- Will make, paint and crest arrows. If you are in a mapped room it can run to the shop and buy more items.
- This is mostly aimed at master fletchers as it will always try and complete the arrow, but should cope with botching arrows. Future updates will let you choose to stop part way.
- Will keep on going untill you tell it to stop or you hit the limit you set.
- ';fletching help' for help
- ';fletching setup' to change your settings
- ';fletching bundle' will attempt to bundle all your arrows, this will likely fail if you are not at, or near mastered, as you make arrows of all different qualities
- ';fletching' while the script is running will bring up a mini report(same as you get after finishing an arrow
- ';fletching stop' while the script is running will tell the script to stop after finsihing the current arrow
- **** Change log ****
- 14/12/2015 -Added exp checkrest, flip option
- 27/08/2015 - When using option for paintstick 1 the stow was failing, now works
- 26/08/2015 - Fixed a few bugs. Should now properly check for wood and stow items in the correct container.
- 13/05/2012 - released
- #planed updated
- *Batch mode - do each step in batches so glue/pain can dry sitting in your bag while you work on another arrow
- *Fix so bow can be kept in a container, currently needs to be worn
- *check containers/axe/knife/bow exist before starting
- *on first run scan inv and guess most likely settings
- If you need to contact me best way is probably a PM to stormtov on the player forums or post in my thread there http://forum.gsplayers.com/showthread.php?t=70042.
- Feel free to send me bug reports/suggestions/abuse there.
- #todo
- --checkrest --added exp check, checkrest
- --cut all shafts in batches
- --make own fletchings
- --save arrow profiles
- --flip arrows --added option line before cut arrow with fletch_knife
- --toggle for waggle
- --scan inventory for knife/axe/bow
- --scan inventory for containers
- =end
- #fixme1 - Bow currently must be worn, change so checks GameObj.inv and if not there gets it from container instead
- @XP_TO_STOP = 80;
- settings = CharSettings.to_hash
- settings['fletch_sack'] ||= ""
- settings['fletch_quiver'] ||= ""
- settings['fletch_knife'] ||= ""
- settings['fletch_bow'] ||= ""
- settings['fletch_enable_buying'] ||= false
- settings['fletch_paint'] ||= 0
- settings['fletch_paintstick1'] ||= ""
- settings['fletch_paintstick2'] ||= ""
- settings['fletch_wood'] ||= "limb of wood"
- settings['fletch_axe'] ||= ""
- settings['fletch_fletchings'] ||= "bundle of fletchings"
- settings['fletch_limit'] ||= ""
- settings['waggle'] ||= false
- settings['fletch_flip'] ||= false
- settings['fletch_drill'] ||= ""
- settings['fletch_arrowhead'] ||= ""
- settings['fletch_drilling'] ||= false
- #doesnt really need to be a hash but had to make sure they were in the right order to add the drop down menu on the gui
- paints = {
- 0 => 'none',
- 1 => 'bright golden paint',
- 2 => 'fiery orange paint',
- 3 => 'bright yellow paint',
- 4 => 'dark russet paint',
- 5 => 'dark brown paint',
- 6 => 'silvery grey paint',
- 7 => 'twilight grey paint',
- 8 => 'storm grey paint',
- 9 => 'charcoal grey paint',
- 10 => 'icy blue paint',
- 11 => 'midnight blue paint',
- 12 => 'dusky blue paint',
- 13 => 'silvery white paint',
- 14 => 'bone white paint',
- 15 => 'pure white paint',
- 16 => 'glossy black paint',
- 17 => 'dull black paint',
- 18 => 'inky black paint',
- 19 => 'forest green paint',
- 20 => 'hunter green paint',
- 21 => 'dark green paint',
- 22 => 'blood red paint',
- 23 => 'glossy red paint',
- 24 => 'dull red paint',
- }
- #Ripped setup from sloot, no clue waht is going on here but it works!
- setup = proc {
- gtk_global = Hash.new
- window = window_action = nil
- Gtk.queue {
- ttips = Gtk::Tooltips.new.enable
- ttips_text = {
- 'fletch_sack' => 'This is the container all your supplies, axe and dagger will be in',
- 'fletch_quiver' => 'This is the container you want your finshed arrows to be stored in, it can be the same as the container above if you wish',
- 'fletch_axe' => 'This is the axe you will use for creating the shafts, needs to be what ever you would type following the get comand to remove it from your container.' ,
- 'fletch_knife' => 'This is the knife or dagger you will be using to cut the shafts, needs to be what ever you would type following the get comand to remove it from your container.' ,
- 'fletch_bow' => 'This is the bow you will be using to measure the shaft, MUST BE WORN!',
- 'fletch_enable_painting' => 'Check this if you would like to paint your arrows',
- 'fletch_enable_buying' => 'Check this if you would like the script to go buy wood, glue and fletchings from the shop',
- 'fletch_wood' => 'The name of the wood you would like to buy, leaving off a/an/some at the start. Eg. "limb of faewood" or "branch of kakore"',
- 'fletch_paint' => 'The name of the paint you would like to buy, leaving off a/an/some at the start',
- 'fletch_paintstick1' => 'Leave blank if you do not want to use a paintstick to crest your arrows. If you want to crest you arrows please enter the colour of the paintstick.',
- 'fletch_paintstick2' => 'Leave blank if you do not want to use a paintstick to crest your arrows a second time. If you want to crest you arrows a second time please enter the colour of the paintstick.',
- 'fletch_fletchings' => 'The name of the fletchings you would like to buy, leaving off a/an/some at the start.',
- 'fletch_limit' => 'This is the number of arrows you would like the script to make, leave blank for no limit. It will just keep making more till you tell it to stop, run out of space or run out of money.',
- 'fletch_flip' => 'This is used to flip the shaft once.',
- 'fletch_drill' => 'This can be any drill, but we start with an option like, blackened glaes-bitted drill.',
- 'fletch_arrowhead' => 'This can be any arrowhead, imflass, vultite, ora, mithril, steel, but must be {objectname} arrowhead.',
- 'fletch_drilling' => 'Check this box if you want to add arrowheads to your shafts.',
- }
- gtk_global['fletch_sack'] = Gtk::Entry.new.set_text(settings['fletch_sack'])
- gtk_global['fletch_quiver'] = Gtk::Entry.new.set_text(settings['fletch_quiver'])
- gtk_global['fletch_axe'] = Gtk::Entry.new.set_text(settings['fletch_axe'])
- gtk_global['fletch_knife'] = Gtk::Entry.new.set_text(settings['fletch_knife'])
- gtk_global['fletch_bow'] = Gtk::Entry.new.set_text(settings['fletch_bow'])
- gtk_global['fletch_enable_buying'] = Gtk::CheckButton.new.set_active(settings['fletch_enable_buying'])#Gtk::Entry.new.set_text(settings['fletch_enable_buying'])
- gtk_global['fletch_wood'] = Gtk::Entry.new.set_text(settings['fletch_wood'])
- gtk_global['fletch_paint'] = Gtk::ComboBox.new(is_text_only = true)
- gtk_global['fletch_paintstick1'] = Gtk::Entry.new.set_text(settings['fletch_paintstick1'])
- gtk_global['fletch_paintstick2'] = Gtk::Entry.new.set_text(settings['fletch_paintstick2'])
- gtk_global['fletch_fletchings'] = Gtk::Entry.new.set_text(settings['fletch_fletchings'])
- gtk_global['fletch_limit'] = Gtk::Entry.new.set_text(settings['fletch_limit'].to_s)
- gtk_global['waggle'] = Gtk::CheckButton.new.set_active(settings['waggle'])
- gtk_global['fletch_drill'] = Gtk::Entry.new.set_text(settings['fletch_drill'])
- gtk_global['fletch_flip'] = Gtk::CheckButton.new.set_active(settings['fletch_flip'])
- gtk_global['fletch_drilling'] = Gtk::CheckButton.new.set_active(settings['fletch_drilling'])
- gtk_global['fletch_arrowhead'] = Gtk::Entry.new.set_text(settings['fletch_arrowhead'])
- #use paints array to form combox
- x = 0
- while x < paints.length
- gtk_global['fletch_paint'].append_text(paints[x])
- x += 1
- end
- gtk_global['fletch_paint'].set_active(settings['fletch_paint']) #have to set active after apending
- ttips_text.each_pair { |widget,tip|
- if widget = gtk_global[widget]# || gtk_locals[widget]
- ttips.set_tip(widget,tip,'')
- end
- }
- window = Gtk::Window.new
- window.title = "Fletching"
- window.border_width = 3
- window.resizable = true
- #window.resize(10, 10)
- settings_page = Gtk::VBox.new(false,1).set_border_width(3)
- vb_pg1_1 = Gtk::VBox.new(false,1).set_border_width(3)
- fr_pg1_1 = Gtk::Frame.new.set_border_width(5).set_label_widget(Gtk::Label.new.set_markup('<big><b>Settings</b></big>'))
- fr_pg1_1.add(vb_pg1_1)
- settings_page.pack_start(fr_pg1_1,false)
- #random note to self width will be ignored if text is longer
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Supplies Container: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_sack'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Finished Container: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_quiver'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Axe: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_axe'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Knife: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_knife'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Drill: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_drill'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Bow: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_bow'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Buy Items: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_enable_buying'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Wood: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_wood'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Paint: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_paint'].set_width_request(158),false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Paintstick 1: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_paintstick1'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Paintstick 2: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_paintstick2'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Fletchings: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_fletchings'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Make limit: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_limit'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Use waggle: ')).set_width_request(120))
- hb.pack_start(gtk_global['waggle'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Use flip: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_flip'],false)
- vb_pg1_1.pack_start(hb,false)
- hb = Gtk::HBox.new(false,1)
- hb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('add arrowheads: ')).set_width_request(120))
- hb.pack_start(gtk_global['fletch_drilling'],false)
- vb_pg1_1.pack_start(hb,false)
- #cb = Gtk::ComboBox.new
- #cb.append_text 'Ubuntu'
- #cb.append_text 'Mandriva'
- #cb.append_text 'Redhat'
- #cb.append_text 'Gento'
- #cb.append_text 'Mint'
- #cb.pack_start(Gtk::Alignment.new(1,0,0,1).add(Gtk::Label.new('Paint: ')).set_width_request(120))
- #cb.pack_start(gtk_global['fletch_paint'],false)
- #cb.pack_start(cb.append_text 'Ubuntu')
- #vb_pg1_1.pack_start(cb,false)
- lbl = Gtk::Label.new.set_markup("Mouse over each box for more help")
- lbl.set_wrap(true).set_padding(0,10)
- vb_pg1_1.pack_start(lbl,false)
- hb_saveclose = Gtk::HBox.new(false,1)
- save = Gtk::Button.new('_Save & Close')
- close = Gtk::Button.new('E_xit')
- save.signal_connect('clicked') { window_action = :save }
- close.signal_connect('clicked') { window_action = :done }
- hb_saveclose.pack_start(save,false)
- hb_saveclose.pack_start(close,false)
- vb_pg1_1.pack_start(hb_saveclose,false)
- # Primary VerticalBox to split up Notebook and Save/Close buttons
- #vb_main = Gtk::VBox.new(false,1)
- #vb_main.border_width = 3
- #vb_main.pack_start(nb,false)
- #vb_main.pack_start(hb_saveclose,false)
- window.signal_connect('delete_event') { window_action = :exit }
- #window.add(vb_main)
- window.add(settings_page)
- window.show_all
- window.keep_above = true # On windows keep_above is required AFTER show_all
- }
- before_dying { Gtk.queue { window.destroy } }
- wait_while { window_action.nil? }
- undo_before_dying
- Gtk.queue { window.destroy }
- clean_entry = proc { |entry|
- entry.text = entry.text.strip
- if entry.text.empty?
- entry.text = nil
- end
- entry.text
- }
- if window_action == :save
- gtk_global.each_pair { |option,widget|
- if widget.class == Gtk::CheckButton
- settings[option] = widget.active?
- elsif widget.class == Gtk::Entry
- settings[option] = clean_entry.call(widget)
- elsif widget.class == Gtk::ComboBox
- settings[option] = widget.active
- else
- echo "error: unknown local widget #{option} [#{widget.class}]"
- end
- }
- #attempt some error checking
- warning = ""
- if settings['fletch_sack'] == ""
- warning += "The container for you supplies has not yet been set, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_quiver'] == ""
- warning += "The container for you finished arrows has not yet been set, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_knife'] == ""
- warning += "Have not set a knife/dagger to cut the shafts with, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_bow'] == ""
- warning += "Have not set a bow to measure the shafts with, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_axe'] == ""
- warning += "Have not set an axe to make shafts with, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_wood'] == ""
- warning += "Have not set a what wood you want to use, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_wood'] != "" and settings['fletch_wood'] !~ /wood/
- warning += "You have set what wood you want to use but appears you may have done so incorectly. It should read along the lines of 'limb of wood' or 'branch of faewood' for example.\r\n"
- end
- if settings['fletch_wood'] =~ /\s*a |\s*an |\s*some /
- settings['fletch_wood'].gsub!(/\s*a |\s*an |\s*some /, '')
- end
- if settings['fletch_paintstick1'] != "" and settings['fletch_paintstick1'] !~ /paintstick/
- settings['fletch_paintstick1'] = "#{settings['fletch_paintstick1'].strip} paintstick"
- end
- if settings['fletch_paintstick2'] != "" and settings['fletch_paintstick2'] !~ /paintstick/
- settings['fletch_paintstick2'] = "#{settings['fletch_paintstick2'].strip} paintstick"
- end
- if settings['fletch_fletchings'] != "" and settings['fletch_fletchings'] !~ /fletching/
- warning += "You have set what fletchings you want to use but appears you may have done so incorectly. It should read along the lines of 'bundle of fletchings' for example. Leave off any a/an/some from the start.\r\n"
- end
- if settings['fletch_fletchings'] =~ /\s*a |\s*an |\s*some /
- settings['fletch_fletchings'].gsub!(/\s*a |\s*an |\s*some /, '')
- end
- if settings['fletch_drill'] == ""
- warning += "Have not set drill to use for drilling shafts, the script will not run untill this is added.\r\n"
- end
- if settings['fletch_drill'] =~ /\s*a |\s*an |\s*some /
- settings['fletch_drill'].gsub!(/\s*a |\s*an |\s*some /, '')
- end
- if settings['fletch_arrowhead'] =~ /\s*a |\s*an |\s*some /
- settings['fletch_arrowhead'].gsub!(/\s*a |\s*an |\s*some /, '')
- end
- if warning.length > 0
- if !$fake_stormfront
- puts "<output class=\"mono\"/>#{monsterbold_start}#{warning}#{monsterbold_end}\r\n<output class=\"\"/>"
- else
- puts "#{monsterbold_start}#{warning}#{monsterbold_end}"
- end
- end
- echo 'settings saved'
- else
- echo 'closed without saving'
- end
- }
- def monitor_interaction()
- #if @MONITOR_INTERACTION
- start_exec_script( <<-eos
- def show_window(line);
- window_title = Char.name + ':' + line;
- Gtk.queue {
- $myWindow = Gtk::Window.new;
- $myWindow.title = "Autobot Alert!";
- $myWindow.set_size_request(450, 25);
- label = Gtk::Label.new window_title;
- $myWindow.add(label);
- $myWindow.show_all;
- };
- end;
- while(line = get);
- break unless running?('fletching');
- if(line =~ /SEND|POLICY|[Rr](\s)*[Ee](\s)*[Pp](\s)*[Oo](\s)*[Rr](\s)*[Tt]|peaking to you|unresponsive|taps you|nods to you|lease respond|not in control|character|violation|lease speak|peak out loud|Y U SHOU D|whispers,|speaking to you|smiles at you|waves to you|grins at you|hugs you|takes hold your hand|grabs your hand|clasps your hand|trying to drag you/);
- unless(line =~ /LNet/);
- show_window(line);
- echo "AUTOBOT ALERT: " + line;
- end;
- end;
- end;
- eos
- )
- end
- # end
- def checksilver
- silvers = nil
- action = proc { |server_string|
- if server_string =~ /^\s*Name\:|^\s*Gender\:|^\s*Normal \(Bonus\)|^\s*Strength \(STR\)\:|^\s*Constitution \(CON\)\:|^\s*Dexterity \(DEX\)\:|^\s*Agility \(AGI\)\:|^\s*Discipline \(DIS\)\:|^\s*Aura \(AUR\)\:|^\s*Logic \(LOG\)\:|^\s*Intuition \(INT\)\:|^\s*Wisdom \(WIS\)\:|^\s*Influence \(INF\)\:/
- nil
- elsif server_string =~ /^\s*Mana\:\s+\-?[0-9]+\s+Silver\:\s+([0-9]+)/
- silvers = $1.to_i
- DownstreamHook.remove("slib_check_silvers")
- nil
- else
- server_string
- end
- }
- DownstreamHook.add("slib_check_silvers", action)
- $_SERVER_.puts "#{$cmd_prefix}info\n"
- wait_until { silvers }
- silvers
- end
- def get_container_contents(container_name)
- if container_name.nil?
- echo 'Blank name passed to get_container_contents'
- sleep 1
- exit
- else
- container_contents = GameObj.inv.find { |obj| obj.name =~ /#{Regexp.escape(container_name.strip)}/i } || GameObj.inv.find { |obj| obj.name =~ /#{Regexp.escape(container_name).sub(' ', ' .*')}/i }
- if container_contents.nil?
- echo "warning: failed to find your fletchsack (#{container_name})"
- sleep 1
- else
- if container_contents.contents.nil?
- open_result = dothistimeout "open ##{container_contents.id}", 10, /You open|already open/
- close_container_contents = true if open_result =~ /You open/
- if container_contents.contents.nil?
- dothistimeout "look in ##{container_contents.id}", 10, /In the .* you see/
- if container_contents.contents.nil?
- echo "warning: failed to find the contents of your fletchsack (#{container_name})"
- sleep 1
- end
- end
- end
- end
- end
- return container_contents.contents
- end
- def check_needed_items(settings,fletch_sack_contents,paints)
- items = Array.new
- needed_items = Array.new
- need_wood = true
- need_paint = true
- need_glue = true
- need_fletchings = true
- need_paintstick1 = true
- need_paintstick2 = true
- #check container and if we have it mark as not needed
- fletch_sack_contents.each{|item|
- #fixme: see if can get more specfic then shaft
- if (settings['fletch_bow'] =~ /^crossbow/) item.name =~ /crossbow shaft/ or item.name =~ /#{settings['fletch_wood']}/
- need_wood = false
- elsif (settings['fletch_bow'] =~ /^bow/) item.name =~ /arrow shaft/ or item.name =~ /#{settings['fletch_wood']}/
- need_wood = false
- elsif (settings['fletch_bow'] =~ /^dart/) item.name =~ /dart shaft/ or item.name =~ /#{settings['fletch_wood']}/
- need_wood = false
- elsif item.name =~ /#{paints[settings['fletch_paint']]}/
- need_paint = false
- elsif item.name =~ /#{settings['fletch_fletchings']}/
- need_fletchings = false
- elsif item.name =~ /bottle of fletching glue/
- need_glue = false
- elsif item.name =~ /#{settings['fletch_paintstick1']}/ and settings['fletch_paintstick1'].length > 0
- need_paintstick1 = false
- elsif item.name =~ /#{settings['fletch_paintstick2']}/ and settings['fletch_paintstick2'].length > 0
- need_paintstick2 = false
- end
- }
- needed_items = Array.new
- if need_wood
- needed_items << settings['fletch_wood']
- end
- if need_glue
- needed_items << "bottle of fletching glue"
- end
- if need_fletchings
- needed_items << settings['fletch_fletchings']
- end
- if need_paint and settings['fletch_paint'] != 0
- needed_items << "vial of paint"
- end
- if need_paintstick1 and settings['fletch_paintstick1'].length > 0
- needed_items << settings['fletch_paintstick1']
- end
- if need_paintstick2 and settings['fletch_paintstick2'].length > 0
- needed_items << settings['fletch_paintstick2']
- end
- return needed_items
- end
- def find_order_num(supply)
- status_tags
- clear
- fput 'unhide' if hidden? or invisible?
- fput 'order'
- menu = Hash.new
- while (line = get) and (line !~ /ORDER|BUY/)
- for item in line.scan(/<d.*?cmd=["']order ([0-9]+).*?>(.*?)<\/d>/)
- menu[item[1].sub(/^a /, '')] = item[0]
- end
- end
- clear
- status_tags
- #menu = read_menu.call
- #echo menu.inspect
- item_name = menu.keys.find { |name| name =~ /#{supply}/i }
- unless order_number = menu[item_name]
- echo ""
- echo "Error: failed to find the item! Remember to leave off the a/an/some at the start. eg. 'limb of faewood"
- echo ""
- end
- return order_number
- end
- def buy_items(settings, needed_items)
- if invisible?
- invis = true
- else
- invis = false
- end
- start_room = Room.current.id
- silver = checksilver
- if silver < 5000
- silver = 5000 - silver
- start_script "go2",['bank']
- wait_while {running?("go2")}
- fput "unhide" if hidden? or invisible?
- fput "withdraw #{silver}"
- if checksilver < 5000
- echo "Failed to get money from the bank"
- exit
- end
- end
- start_script "go2",['fletcher']
- wait_while {running?("go2")}
- move "south" if Room.current.location == "Ta'Vaalor"
- if checkleft != nil
- empty_left_hand
- end
- if checkright != nil
- empty_right_hand
- end
- needed_items.each {|item|
- if item =~ /vial of paint/
- order_number = find_order_num(item)
- multifput "order #{order_number} color #{settings['fletch_paint']}", "buy"
- else
- order_number = find_order_num(item)
- multifput "order #{order_number}", "buy"
- end
- #wait up to three seconds to see if purchase was succesful
- endtime = Time.now + 3
- loop {
- if checkright.nil?
- sleep 1
- elsif Time.now > endtime
- echo "For some reason buying an item failed"
- exit
- elsif checkright
- echo "got item"
- break
- end
- }
- stow_check = dothistimeout "put my #{checkright} in my #{settings['fletch_sack']}", 3, /won't fit|You put a/
- if stow_check =~ /won't fit/
- echo "fletchsack full, stopping"
- exit
- elsif stow_check.nil?
- echo "stowcheck failed, stopping"
- exit
- end
- }
- spent_silver += (5000 - checksilver)
- start_script "go2",['bank']
- wait_while {running?("go2")}
- fput "unhide" if hidden? or invisible?
- fput "depo all"
- if invis and Spell[916].affordable?
- fput "incant 916"
- end
- start_script "go2",[start_room]
- wait_while {running?("go2")}
- return spent_silver
- end
- def stow(hand,container)
- if (hand == "left")
- return if checkleft.nil?
- elsif (hand == "right")
- return if checkright.nil?
- else
- respond "This should not of happened"
- respond "Invalid hand of: #{hand}"
- exit
- end
- fput "put #{hand} in my #{container}"
- again = false
- endtime = Time.now + 6
- loop{
- if (checkleft.nil? && hand == "left")
- break
- elsif (checkright.nil? && hand == "right")
- break
- elsif Time.now > endtime -3 and !again
- again = true
- fput "put #{hand} in my #{container}"
- elsif Time.now > endtime
- "Stowing item failed"
- else
- sleep 0.1
- end
- }
- end
- def get_knife(settings)
- check = dothistimeout "get my #{settings['fletch_knife']}", 3, /You remove|get what?/
- if check =~ /get what?/
- echo "Failed to get your knife."
- exit
- elsif check.nil?
- endtime = Time.now + 5
- loop {
- if checkleft =~ /#{settings['fletch_knife']}/
- break
- elsif Time.now > endtime
- echo "Failed to get your knife."
- exit
- else
- sleep 1
- end
- }
- end
- end
- def haste!()
- waitcastrt?
- fput "incant 506" if Spell[506].known? and !Spell[506].active? and Spell[506].affordable?
- end
- def bundle(settings)
- #gameobj does not get full descriptions so have to go about it ma self
- quiver_contents_string = nil
- quiver_contents = proc{|server_string|
- if server_string =~ /<inv id='\w+'>In the <a exist="\d+" noun="\w+">\w+<\/a>:<\/inv><inv id='\w+'>/
- quiver_contents_string = server_string
- nil
- else
- server_string
- end
- }
- DownstreamHook.add('fletch_check_quiver', quiver_contents)
- silence_me
- fput "look in my #{settings['fletch_quiver']}"
- silence_me
- endtime = Time.now + 3
- loop {
- if quiver_contents_string != nil
- DownstreamHook.remove('fletch_check_quiver')
- break
- elsif Time.now > endtime
- echo "failed to get the contents of #{settings['fletch_quiver']}"
- DownstreamHook.remove('fletch_check_quiver')
- exit
- else
- sleep 0.1
- end
- }
- if quiver_contents_string =~ /<inv id='(?:\w+)'>In the <a exist="(\d+)" noun="(\w+)">(?:\w+)<\/a>:<\/inv><inv id='(?:\w+)'> (.*)<\/inv>In the <a exist="\d+" noun="\w+">([\w\s\-']+)<\/a>/
- quiver_contents = $3.to_s.gsub( /["]/ , '\'' )
- quiver_contents = quiver_contents.split(/<\/inv><inv id='\w+'>\s?/)
- else
- echo "contents malformed"
- end
- contents = Hash.new
- quiver_contents.each{|item|
- if item =~ /(.+)<a exist='(\d+)' noun='([\w\-]+)'>([\w\s\-']+)<\/a>([\s\w'\-]+)?/
- item_id = $2
- item_noun = $3
- item_full_name = ""
- item_full_name = item_full_name.strip + "#{$1.strip}"
- item_full_name = item_full_name.strip + " #{$4.strip} "
- item_full_name = item_full_name.strip + " #{$5.strip}"
- item_full_name.strip!
- end
- contents[item_id] = item_full_name
- }
- #finds the description of each different type of arrow
- arrow_types = Array.new
- contents.each_pair{|id,name|
- if name =~ /arrow$/ and !arrow_types.include? name
- arrow_types << name
- end
- }
- arrow_types.each{|desc|
- contents.each_pair{|id,name|
- if desc =~ /#{name}/
- if checkright.nil?
- fput "get ##{id} in my #{settings['fletch_quiver']}"
- endtime = Time.now + 6
- wait_until{!checkright.nil? || Time.now > endtime}
- else
- fput "get ##{id} in my #{settings['fletch_quiver']}"
- end
- if !checkleft.nil? and !checkright.nil?
- check = dothistimeout "bundle", 3, /You bundle your arrows together.|You add a .+ arrow to your bundle.|You may not combine more than 100 shafts./
- if check.nil?
- echo "bundling failed for some reason, stopping"
- exit
- elsif check =~ /You may not combine more than 100 shafts./
- #fput "stow r"
- stow("right",settings['fletch_quiver'])
- end
- endtime = Time.now + 6
- wait_until{checkleft.nil? || Time.now > endtime}
- end
- end
- }
- #fput "stow right"
- stow("right",settings['fletch_quiver'])
- }
- #now arrows are bundled see about condensing the bundles down
- bundle_ids = Array.new
- quiver_contents = get_container_contents(settings['fletch_quiver'])
- quiver_contents.each{|item|
- if item.name =~ /bundle of arrows/
- bundle_ids << item.id
- end
- }
- bundle_amount = Array.new
- bundle_desc = Array.new
- bundle_check = proc{|server_string|
- #
- #Individual projectiles from this bundle will have a long of "a wooden arrow"
- #
- if server_string.nil?
- #nil
- elsif server_string =~ /You carefully count the <a exist="\d+" noun="\w+">\w+<\/a> and find (\d+) in the bundle, each one being .+, with a strength of \d+ and a durability of \d+./
- bundle_amount << $1
- nil
- elsif server_string =~ /Individual projectiles from this bundle will have a long of "([\w\s]+)"/
- bundle_desc << $1
- nil
- elsif server_string =~ /Each individual projectile will be "[\w\s]+"./
- nil
- elsif server_string =~ /<prompt time="\d+">><\/prompt>/
- nil
- else
- if server_string.length > 2
- server_string
- else
- nil
- end
- end
- }
- DownstreamHook.add('fletch_budle_check', bundle_check)
- silence_me
- bundle_ids.each{|id|
- fput "look ##{id}"
- }
- silence_me
- endtime = Time.now + 6
- wait_until{bundle_ids.length == bundle_desc.length || Time.now > endtime}
- DownstreamHook.remove('fletch_budle_check')
- if bundle_ids.length != bundle_desc.length
- echo "failed to get bundles info, stopping"
- exit
- end
- x = 0
- bundles = Array.new
- until x == bundle_ids.length
- bundles << bundle = {
- "id" => bundle_ids[x],
- "count" => bundle_amount[x],
- "desc" => bundle_desc[x]
- }
- x +=1
- end
- uniq_bundle_desc = bundle_desc & bundle_desc
- last_bundle = ""
- uniq_bundle_desc.each{|desc|
- total = 0
- bundles.each{|bundle|
- if bundle['desc'] == desc and total == 0 and bundle['count'].to_i!=100
- #there is a match but if there might only be one of that bundle so take note but do nothing
- total += bundle['count'].to_i
- last_bundle = bundle['id'].dup
- elsif bundle['desc'] == desc and total > 0 and bundle['count'].to_i!=100
- #match and the total is already above 0, must of already found a bundle of the same arrows
- total += bundle['count'].to_i
- if total < 100
- fput "get ##{bundle['id']}"
- matchtimeout 1, "You remove"
- fput "get ##{last_bundle}" if checkleft.nil?
- fput "bundle"
- last_bundle = bundle['id']
- else
- if total == 100
- fput "get ##{bundle['id']}"
- matchtimeout 1, "You remove"
- fput "get ##{last_bundle}" if checkleft.nil?
- fput "bundle"
- #fput "stow r"
- stow("right",settings['fletch_quiver'])
- total = 0
- else
- amount_over = total - 100
- amount_to_get = bundle['count'].to_i - amount_over
- fput "get #{amount_to_get} ##{bundle['id']}"
- matchtimeout 1, "You remove"
- fput "get ##{last_bundle}" if checkleft.nil?
- fput "bundle"
- #fput "stow r"
- stow("right",settings['fletch_quiver'])
- bundle['amount'] = bundle['amount'].to_i - amount_to_get #resize the bundle
- bundles << bundle #and add back on the end
- total = 0
- end
- end
- end
- }
- #fput "stow r" if !checkright.nil?
- stow("right",settings['fletch_quiver']) if !checkright.nil?
- }
- end
- def make_heavyshafts(settings)
- check = dothistimeout "get my wood in my #{settings['fletch_sack']}", 1, /You remove|Get what?/
- if check =~ /Get what?/
- echo "Run out of shafts some how, this shouldn't be happening."
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /wood/
- break
- elsif Time.now > endtime
- echo "Could not get wood, stopping"
- exit
- else
- sleep 1
- end
- }
- end
- #get axe
- check = dothistimeout "get my #{settings['fletch_axe']}", 3, /You remove|get what?/
- if check =~ /get what?/
- echo "Could not get your axe to cut the shafts"
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /#{settings['fletch_axe']}/
- break
- elsif Time.now > endtime
- echo "Could not get your axe to cut the shafts"
- exit
- else
- sleep 1
- end
- }
- end
- #cut shafts
- haste!
- fput "cut heavy bolt my wood"
- endtime = Time.now + 6
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Failed to cut shafts"
- exit
- else
- sleep 1
- echo "sleeping"
- end
- }
- sleep 1
- waitrt?
- stow("right",settings['fletch_sack'])
- #fput "put right in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkright.nil?
- break
- elsif Time.now > endtime
- "Stowing item failed"
- exit
- else
- sleep 0.5
- end
- }
- stow("left",settings['fletch_sack'])
- end
- def make_shafts(settings)
- #get wood
- check = dothistimeout "get my wood in my #{settings['fletch_sack']}", 1, /You remove|Get what?/
- if check =~ /Get what?/
- echo "Run out of shafts some how, this shouldn't be happening."
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /wood/
- break
- elsif Time.now > endtime
- echo "Could not get wood, stopping"
- exit
- else
- sleep 1
- end
- }
- end
- #get axe
- check = dothistimeout "get my #{settings['fletch_axe']}", 3, /You remove|get what?/
- if check =~ /get what?/
- echo "Could not get your axe to cut the shafts"
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /#{settings['fletch_axe']}/
- break
- elsif Time.now > endtime
- echo "Could not get your axe to cut the shafts"
- exit
- else
- sleep 1
- end
- }
- end
- #cut shafts
- haste!
- fput "cut arrow shaft my wood"
- endtime = Time.now + 6
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Failed to cut shafts"
- exit
- else
- sleep 1
- echo "sleeping"
- end
- }
- sleep 1
- waitrt?
- stow("right",settings['fletch_sack'])
- #fput "put right in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkright.nil?
- break
- elsif Time.now > endtime
- "Stowing item failed"
- exit
- else
- sleep 0.5
- end
- }
- stow("left",settings['fletch_sack'])
- end
- def make_dartshafts(settings)
- #get wood
- check = dothistimeout "get my wood in my #{settings['fletch_sack']}", 1, /You remove|Get what?/
- if check =~ /Get what?/
- echo "Run out of shafts some how, this shouldn't be happening."
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /wood/
- break
- elsif Time.now > endtime
- echo "Could not get wood, stopping"
- exit
- else
- sleep 1
- end
- }
- end
- #get axe
- check = dothistimeout "get my #{settings['fletch_axe']}", 3, /You remove|get what?/
- if check =~ /get what?/
- echo "Could not get your axe to cut the shafts"
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /#{settings['fletch_axe']}/
- break
- elsif Time.now > endtime
- echo "Could not get your axe to cut the shafts"
- exit
- else
- sleep 1
- end
- }
- end
- #cut shafts
- haste!
- fput "cut dart shaft my wood"
- endtime = Time.now + 6
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Failed to cut shafts"
- exit
- else
- sleep 1
- echo "sleeping"
- end
- }
- sleep 1
- waitrt?
- stow("right",settings['fletch_sack'])
- #fput "put right in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkright.nil?
- break
- elsif Time.now > endtime
- "Stowing item failed"
- exit
- else
- sleep 0.5
- end
- }
- stow("left",settings['fletch_sack'])
- end
- def make_bolt(settings,paints)
- check = dothistimeout "get 1 my shaft", 3, /You remove|get what?/
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Could not get shaft, stopping"
- exit
- else
- sleep 1
- end
- }
- get_knife(settings)
- fput "cut my shaft with my #{settings['fletch_knife']}"
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- #painting goes here
- if settings['fletch_paint'] != 0
- stow("left",settings['fletch_sack'])
- paint = paints[settings['fletch_paint']].split(" ")
- fput "get my #{paint[0]} paint"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paint/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{paint[0]} paint"
- elsif Time.now > endtime
- echo "Run out of paint, probably means you have another colour paint on you messing with my check. Get it out your fletchsack"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully smear a bit of paint/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /The arrow shaft has been pared down and smoothed.$|The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- if check !~ /The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- echo "Could not determine if painting was successful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- stow("left",settings['fletch_sack'])
- end
- #paintstick1
- if settings['fletch_paintstick1'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick1']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick1']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #paintstick2
- if settings['fletch_paintstick2'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick2']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick2']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your heavy bolt shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #measure shaft
- waitrt?
- check = dothistimeout "remove my #{settings['fletch_bow']}", 1, /You sling|remove what?/
- if check =~ /remove what?/
- echo "Failed to get your crossbow."
- exit
- elsif check.nil?
- endtime = Time.now + 5
- loop {
- if checkleft =~ /crossbow/
- break
- elsif Time.now > endtime
- echo "Failed to get your bow."
- exit
- else
- sleep 1
- end
- }
- end
- haste!
- check = dothistimeout "measure my shaft with my #{settings['fletch_bow']}", 3, /You place the shaft in your/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- check = dothistimeout "wear my #{settings['fletch_bow']}", 3, /You sling .+ over your shoulder./
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- get_knife(settings)
- haste!
- fput "cut my shaft with my #{settings['fletch_knife']}"
- sleep 1
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- stow("left",settings['fletch_sack'])
- fput "get my glue"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /glue/
- break
- elsif Time.now > endtime
- "Failed to get glue"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my glue on my shaft", 3, /You carefully smear a bit of glue/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- fput "get 3 my fletching in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /fletching/
- break
- elsif Time.now > endtime
- "Failed to get fletchings"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my fletching on my shaft", 3, /You attach your|You attempt to attach some|Unfortunately, the glue is now too dry to remove them and try again, so you discard /
- if check =~/You attatch your/
- return
- end
- check = matchtimeout 60, "The glue on your heavy crossbow shaft has dried."
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- haste!
- if settings['fletch_flip'] =~ true
- fput "flip my shaft"
- return
- end
- if settings['fletch_drilling'] =~ true
- fput "get my #{settings['fletch_drill']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_drill']}"
- waitrt?
- fput "put my #{settings['fletch_drill']} in my #{settings['fletch_sack']}"
- fput "get my #{settings['fletch_arrowhead']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_arrowhead']}"
- return
- else
- get_knife(settings)
- put "cut my shaft with my #{settings['fletch_knife']}"
- put "cut my shaft with my #{settings['fletch_knife']}"
- check = matchtimeout 6, "With a few quick cuts,", "Working a bit too hastily, you slice the end right off!"
- if check == false
- echo "didnt see you cut the shaft for some reason, stopping"
- exit
- end
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- def make_dart(settings,paints)
- check = dothistimeout "get 1 my shaft", 3, /You remove|get what?/
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Could not get shaft, stopping"
- exit
- else
- sleep 1
- end
- }
- get_knife(settings)
- check = dothistimeout "cut my shaft with my #{settings['fletch_knife']}",1,/You pare away the excess wood/
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- #painting goes here
- if settings['fletch_paint'] != 0
- stow("left",settings['fletch_sack'])
- paint = paints[settings['fletch_paint']].split(" ")
- fput "get my #{paint[0]} paint"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paint/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{paint[0]} paint"
- elsif Time.now > endtime
- echo "Run out of paint, probably means you have another colour paint on you messing with my check. Get it out your fletchsack"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully smear a bit of paint/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /The arrow shaft has been pared down and smoothed.$|The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- if check !~ /The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- echo "Could not determine if painting was successful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- stow("left",settings['fletch_sack'])
- end
- #paintstick1
- if settings['fletch_paintstick1'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick1']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick1']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your dart shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #paintstick2
- if settings['fletch_paintstick2'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick2']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick2']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #measure shaft
- waitrt?
- check = dothistimeout "get my #{settings['fletch_bow']}", 1, /You remove|get what?/
- if check =~ /remove what?/
- echo "Failed to get your dart."
- exit
- elsif check.nil?
- endtime = Time.now + 5
- loop {
- if checkleft =~ /crossbow/
- break
- elsif Time.now > endtime
- echo "Failed to get your bow."
- exit
- else
- sleep 1
- end
- }
- end
- haste!
- check = dothistimeout "measure my shaft with my #{settings['fletch_bow']}", 3, /You place the shaft next to the already complete/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- check = dothistimeout "put my #{settings['fletch_bow']} in my #{settings[fletch_sack]}", 3, /You put a/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- get_knife(settings)
- haste!
- fput "cut my shaft with my #{settings['fletch_knife']}"
- sleep 1
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- stow("left",settings['fletch_sack'])
- fput "get my glue"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /glue/
- break
- elsif Time.now > endtime
- "Failed to get glue"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my glue on my shaft", 3, /You carefully smear a bit of glue/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- fput "get 3 my fletching in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /fletching/
- break
- elsif Time.now > endtime
- "Failed to get fletchings"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my fletching on my shaft", 3, /You attach your|You attempt |Unfortunately, the glue is now too dry to remove them and try again, so you discard /
- if check =~ /You attempt/
- stow("left",settings['fletch_sack'])
- return
- end
- check = matchtimeout 60, "The glue on your dart shaft has dried."
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- haste!
- if settings['fletch_flip'] =~ true
- fput "flip my shaft"
- return
- end
- if settings['fletch_drilling'] =~ true
- fput "get my #{settings['fletch_drill']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_drill']}"
- waitrt?
- fput "put my #{settings['fletch_drill']} in my #{settings['fletch_sack']}"
- fput "get my #{settings['fletch_arrowhead']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_arrowhead']}"
- return
- else
- get_knife(settings)
- put "cut my shaft with my #{settings['fletch_knife']}"
- put "cut my shaft with my #{settings['fletch_knife']}"
- check = matchtimeout 6, "With a few quick cuts,", "Working a bit too hastily, you slice the end right off!"
- if check == false
- echo "didnt see you cut the shaft for some reason, stopping"
- exit
- end
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- def make_arrow(settings,paints)
- #get shaft
- check = dothistimeout "get 1 my shaft", 3, /You remove|get what?/
- if check =~ /get what?/
- echo "Run out of shafts some how, this shouldn't be happening."
- exit
- elsif check.nil?
- #backup for scripted containers
- endtime = Time.now + 5
- loop {
- if checkright =~ /shaft/
- break
- elsif Time.now > endtime
- echo "Could not get shaft, stopping"
- exit
- else
- sleep 1
- end
- }
- end
- get_knife(settings)
- #cut shaft
- haste!
- fput "cut my shaft with my #{settings['fletch_knife']}"
- sleep 1
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- #painting goes here
- if settings['fletch_paint'] != 0
- stow("left",settings['fletch_sack'])
- paint = paints[settings['fletch_paint']].split(" ")
- fput "get my #{paint[0]} paint"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paint/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{paint[0]} paint"
- elsif Time.now > endtime
- echo "Run out of paint, probably means you have another colour paint on you messing with my check. Get it out your fletchsack"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully smear a bit of paint/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /The arrow shaft has been pared down and smoothed.$|The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- if check !~ /The arrow shaft has been pared down and smoothed. A coat of .+ paint covers the shaft./
- echo "Could not determine if painting was successful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- stow("left",settings['fletch_sack'])
- end
- #paintstick1
- if settings['fletch_paintstick1'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick1']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick1']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #paintstick2
- if settings['fletch_paintstick2'].length > 0
- stow("left",settings['fletch_sack'])
- fput "get my #{settings['fletch_paintstick2']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /paintstick/
- break
- elsif Time.now > (endtime - 3)
- fput "get my #{settings['fletch_paintstick2']}"
- elsif Time.now > endtime
- echo "Could not get your paintstick"
- exit
- else
- sleep 0.5
- end
- }
- haste!
- check = dothistimeout "paint my shaft", 3, /You carefully apply a band of/
- if check.nil?
- #if the first check failed for some reason double check by looking at the arrow
- check = dothistimeout "look my shaft", 3, /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- if check !~ /It looks like someone has painted a pair of .+ and .+ bands on the end.|It looks like someone has painted a single .+ band on the end/
- echo "Could not determine if painting was succesful, stopping"
- exit
- end
- end
- check = matchtimeout 40, "The paint on your arrow shaft has dried."
- if !check
- echo "Did not see paint dry for some reason, carrying on in case it did but might cause problems if it didn't"
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- #cut nocks in shaft
- get_knife(settings) if settings['fletch_paint'] != 0 or settings['fletch_paintstick1'].length != 0 or settings['fletch_paintstick2'].length != 0
- haste!
- fput "cut nock in my shaft with my #{settings['fletch_knife']}"
- fput "cut nock in my shaft with my #{settings['fletch_knife']}" if settings['fletch_paint'] == 0 and settings['fletch_paintstick1'].length == 0 and settings['fletch_paintstick2'].length == 0#only need to cut twice if you didnt paint
- sleep 2
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- #stow knife
- stow("left",settings['fletch_sack'])
- #measure shaft
- waitrt?
- check = dothistimeout "remove my #{settings['fletch_bow']}", 1, /You sling|remove what?/
- if check =~ /remove what?/
- echo "Failed to get your knife."
- exit
- elsif check.nil?
- endtime = Time.now + 5
- loop {
- if checkleft =~ /bow/
- break
- elsif Time.now > endtime
- echo "Failed to get your bow."
- exit
- else
- sleep 1
- end
- }
- end
- haste!
- check = dothistimeout "measure my shaft with my #{settings['fletch_bow']}", 3, /When the bow string reaches optimal tension, you carefully un-nock the shaft and ease the string forward while grasping the shaft with your left hand to mark the length until you can make a tiny cut on the shaft./
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- check = dothistimeout "wear my #{settings['fletch_bow']}", 3, /You sling .+ over your shoulder./
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- get_knife(settings)
- haste!
- check = dothistimeout "cut my shaft with my #{settings['fletch_knife']}", 3, /Using your previous mark as a guide, you cleanly slice the end off the arrow shaft./
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- stow("left",settings['fletch_sack'])
- fput "get my glue"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /glue/
- break
- elsif Time.now > endtime
- "Failed to get glue"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my glue on my shaft", 3, /You carefully smear a bit of glue/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- fput "get 3 my fletching in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /fletching/
- break
- elsif Time.now > endtime
- "Failed to get fletchings"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my fletching on my shaft", 3, /You attach your|You attempt to attach some|Unfortunately, the glue is now too dry to remove them and try again, so you discard /
- if check =~/You attatch your/
- return
- elsif check =~/You attempt to attach some/
- waitrt?
- refletch_shaft(settings)
- end
- check = matchtimeout 60, "The glue on your arrow shaft has dried."
- if check == false
- refletch_shaft(settings)
- end
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- haste!
- if settings['fletch_flip'] =~ true
- fput "flip my shaft"
- return
- end
- if settings['fletch_drilling'] =~ true
- fput "get my #{settings['fletch_drill']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_drill']}"
- waitrt?
- fput "put my #{settings['fletch_drill']} in my #{settings['fletch_sack']}"
- fput "get my #{settings['fletch_arrowhead']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_arrowhead']}"
- return
- else
- get_knife(settings)
- put "cut my shaft with my #{settings['fletch_knife']}"
- put "cut my shaft with my #{settings['fletch_knife']}"
- check = matchtimeout 6, "With a few quick cuts,", "Working a bit too hastily, you slice the end right off!"
- if check == false
- echo "didnt see you cut the shaft for some reason, stopping"
- exit
- end
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- def refletch_shaft(settings)
- fput "get my glue"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /glue/
- break
- elsif Time.now > endtime
- "Failed to get glue"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my glue on my shaft", 3, /You carefully smear a bit of glue/
- if check.nil?
- echo "failed, do something about this later"
- exit
- end
- sleep 1
- waitrt?
- stow("left",settings['fletch_sack'])
- fput "get 3 my fletching in my #{settings['fletch_sack']}"
- endtime = Time.now + 6
- loop{
- if checkleft =~ /fletching/
- break
- elsif Time.now > endtime
- "Failed to get fletchings"
- exit
- else
- sleep 0.1
- end
- }
- haste!
- check = dothistimeout "put my fletching on my shaft", 3, /You attach your|You attempt to attach some|Unfortunately, the glue is now too dry to remove them and try again, so you discard /
- if check =~/You attatch your/
- return
- elsif check =~/You attempt to attatch some/
- waitrt?
- refletch_shaft(settings)
- end
- check = matchtimeout 60, "The glue on your arrow shaft has dried."
- if check == false
- refletch_shaft(settings)
- return
- end
- waitrt?
- if checkright !~ /shaft/
- stow("left",settings['fletch_sack'])
- return
- end
- haste!
- if settings['fletch_flip'] =~ true
- fput "flip my shaft"
- return
- end
- if settings['fletch_drilling'] =~ true
- fput "get my #{settings['fletch_drill']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_drill']}"
- waitrt?
- fput "put my #{settings['fletch_drill']} in my #{settings['fletch_sack']}"
- fput "get my #{settings['fletch_arrowhead']} from my #{settings['fletch_sack']}"
- fput "turn my #{settings['fletch_arrowhead']}"
- return
- else
- get_knife(settings)
- put "cut my shaft with my #{settings['fletch_knife']}"
- put "cut my shaft with my #{settings['fletch_knife']}"
- check = matchtimeout 6, "With a few quick cuts,", "Working a bit too hastily, you slice the end right off!"
- if check == false
- echo "didnt see you cut the shaft for some reason, stopping"
- exit
- end
- end
- waitrt?
- stow("left",settings['fletch_sack'])
- end
- def checkrest
- until(percentmind < @XP_TO_STOP)
- pause 30
- fput "exp"
- end
- end
- container_contents = nil
- needed_items = nil
- start_time = Time.now
- arrows_made = 0
- arrows_failed = 0
- spent_silver = 0
- finished = false
- if variable[0] =~ /setup|config|configure/i
- setup.call
- exit
- elsif variable[0] =~ /bundle/i
- bundle(settings)
- exit
- elsif !variable[0].nil?
- message = ""
- message += "This script needs a map room if you want it to buy items for you. If this is the case when ever you run out of an item the script will run and buy more\r\n"
- message += "Run ;fletching setup at any times to change you settings\r\n"
- message += "Anytime the script is running ;fletching will give you a progress report. ;fletching stop will tell the script to end after finishing the arrow it is curently on. This is the prefered method of stopping, partially cut shafts left in a container migt cause the script to fail\r\n"
- if !$fake_stormfront
- puts "<output class=\"mono\"/>#{monsterbold_start}#{message}#{monsterbold_end}\r\n<output class=\"\"/>"
- else
- puts "#{monsterbold_start}#{message}#{monsterbold_end}"
- end
- exit
- end
- fletching_report = proc { |client_string|
- if client_string =~ /^(?:<c>)?#{$clean_lich_char}(?:fletching)$/i
- respond ""
- respond "Script has been running for #{Time.at(Time.now - start_time).strftime("%H hours, %M minutes %S seconds")}, made #{arrows_made} arrows, ruined #{arrows_failed} arrows and spent #{spent_silver} silver"
- respond ""
- elsif client_string =~ /^(?:<c>)?#{$clean_lich_char}fletching (?:stop|done|end|finish|finished)$/i
- finished = true
- respond ""
- respond "Once current arrow is complete script will end"
- respond ""
- else
- client_string
- end
- }
- UpstreamHook.add('fletching_hook', fletching_report)
- before_dying{;UpstreamHook.remove('fletching_hook');}
- warning = ""
- if settings['fletch_sack'] == "" or settings['fletch_sack'].nil?
- warning += "The container for you supplies has not yet been set, the script will not run until this is added.\r\n"
- end
- if settings['fletch_quiver'] == "" or settings['fletch_quiver'].nil?
- warning += "The container for you finished arrows has not yet been set, the script will not run until this is added.\r\n"
- end
- if settings['fletch_knife'] == ""
- warning += "Have not set a knife/dagger to cut the shafts with, the script will not run until this is added.\r\n"
- end
- if settings['fletch_bow'] == ""
- warning += "Have not set a bow to measure the shafts with, the script will not run until this is added.\r\n"
- end
- if settings['fletch_axe'] == ""
- warning += "Have not set an axe to make shafts with, the script will not run until this is added.\r\n"
- end
- if settings['fletch_wood'] == ""
- warning += "Have not set a what wood you want to use, the script will not run until this is added.\r\n"
- end
- if settings['fletch_wood'] != "" and settings['fletch_wood'] !~ /wood/
- warning += "You have set what wood you want to use but appears you may have done so incorrectly. It should read along the lines of 'limb of wood' or 'branch of faewood' for example. Leave off any a/an/some from the start\r\n"
- end
- if settings['fletch_fletchings'] != "" and settings['fletch_fletchings'] !~ /fletching/
- warning += "You have set what fletchings you want to use but appears you may have done so incorrectly. It should read along the lines of 'bundle of fletchings' for example. Leave off any a/an/some from the start.\r\n"
- end
- if warning.length > 0
- if !$fake_stormfront
- puts "<output class=\"mono\"/>#{monsterbold_start}#{warning}#{monsterbold_end}\r\n<output class=\"\"/>"
- else
- puts "#{monsterbold_start}#{warning}#{monsterbold_end}"
- end
- setup.call
- exit
- end
- monitor_interaction()
- empty_left_hand
- empty_right_hand
- loop{
- if settings['waggle']
- start_script "waggle"
- wait_while {running?("waggle")}
- end
- fletch_sack_contents = get_container_contents(settings['fletch_sack'])
- needed_items = check_needed_items(settings,fletch_sack_contents,paints)
- if !needed_items.empty?
- if !settings['fletch_enable_buying']
- echo "Run out of #{needed_items[0]} and the script is not set to buy more, ';fletching setup' to change this."
- exit
- end
- respond ""
- needed_items.each{|item|
- respond "Out of #{item}"
- }
- respond "Off to buy"
- respond ""
- sleep 1
- spent_silver += buy_items(settings, needed_items)
- needed_items = Array.new
- end
- fletch_sack_contents = get_container_contents(settings['fletch_sack'])
- #echo fletch_sack_contents
- #exit
- if settings['fletch_bow'] =~ /^crossbow/
- make_heavyshafts(settings) if fletch_sack_contents.to_s.include? '@noun="wood"'
- elsif settings['fletch_bow'] =~ /^dart/
- make_dartshafts(settings) if fletch_sack_contents.to_s.include? '@noun="wood"'
- else
- make_shafts(settings) if fletch_sack_contents.to_s.include? '@noun="wood"'
- end
- checkrest
- if settings['fletch_bow'] =~ /^crossbow/
- make_bolt(settings,paints)
- elsif settings['fletch_bow'] =~ /^dart/
- make_dart(settings,paints)
- elsif
- make_arrow(settings,paints)
- end
- if checkright =~ /^bolt/
- echo "stowing"
- stow("right",settings['fletch_quiver'])
- arrows_made += 1
- elsif checkright =~ /^dart/
- echo "stowing"
- stow("right",settings['fletch_quiver'])
- arrows_made += 1
- elsif checkright =~ /^arrow/
- echo "stowing"
- stow("right",settings['fletch_quiver'])
- arrows_made += 1
- else
- arrows_failed += 1
- end
- respond ""
- respond "Script has been running for #{Time.at(Time.now - start_time).strftime("%H hours, %M minutes %S seconds")}, made #{arrows_made} arrows, ruined #{arrows_failed} arrows and spent #{spent_silver} silver"
- respond ""
- exit if finished
- exit if settings['fletch_limit'].to_i > 0 and arrows_made == settings['fletch_limit'].to_i
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement