Olib 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/Olib.rb +32 -0
- data/lib/Olib/container.rb +64 -48
- data/lib/Olib/creature.rb +143 -58
- data/lib/Olib/creatures.rb +32 -26
- data/lib/Olib/dictionary.rb +66 -31
- data/lib/Olib/errors.rb +82 -0
- data/lib/Olib/extender.rb +6 -5
- data/lib/Olib/help_menu.rb +159 -12
- data/lib/Olib/inventory.rb +77 -0
- data/lib/Olib/item.rb +451 -30
- data/lib/Olib/shops.rb +175 -0
- data/lib/Olib/transport.rb +79 -78
- data/lib/Olib/utils.rb +223 -0
- metadata +6 -2
    
        data/lib/Olib/shops.rb
    ADDED
    
    | @@ -0,0 +1,175 @@ | |
| 1 | 
            +
            module Olib
         | 
| 2 | 
            +
              module Shop
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                @@containers = []
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                def Shop.items
         | 
| 7 | 
            +
                  Shop.containers.map { |container| container.contents }.flatten
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                def Shop.containers
         | 
| 11 | 
            +
                  #fput "look"
         | 
| 12 | 
            +
                  @@containers = [
         | 
| 13 | 
            +
                    GameObj.loot, 
         | 
| 14 | 
            +
                    GameObj.room_desc
         | 
| 15 | 
            +
                  ]
         | 
| 16 | 
            +
                  .flatten
         | 
| 17 | 
            +
                  .compact
         | 
| 18 | 
            +
                  .map        { |container| Shop::Container.new(container)  }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  @@containers
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def Shop.cache
         | 
| 25 | 
            +
                  @@containers
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                class Container < Olib::Gameobj_Extender
         | 
| 29 | 
            +
                  attr_accessor :show, :nested, :containers, :id, :cache, :props
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  def to_s
         | 
| 32 | 
            +
                    info = {}
         | 
| 33 | 
            +
                    info[:name]     = @name
         | 
| 34 | 
            +
                    info[:noun]     = @noun
         | 
| 35 | 
            +
                    info[:props]    = @props
         | 
| 36 | 
            +
                    info[:cache]    = @cache
         | 
| 37 | 
            +
                    info.to_s
         | 
| 38 | 
            +
                  end
         | 
| 39 | 
            +
                  
         | 
| 40 | 
            +
                  def initialize(obj)
         | 
| 41 | 
            +
                    @cache = Hash.new
         | 
| 42 | 
            +
                    @props = Hash.new
         | 
| 43 | 
            +
                    super(obj)
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  def action(verb)
         | 
| 47 | 
            +
                    "#{verb} ##{@id}"
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def look
         | 
| 51 | 
            +
                    self
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  # detect nested containers
         | 
| 55 | 
            +
                  def at
         | 
| 56 | 
            +
                    
         | 
| 57 | 
            +
                    Olib.wrap_stream(action 'look at') { |line|
         | 
| 58 | 
            +
                      
         | 
| 59 | 
            +
                      raise Olib::Errors::Mundane if line =~ /You see nothing unusual/
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                      if line =~ /Looking at the (.*?), you see (?<nested>.*)/
         | 
| 62 | 
            +
                        @nested     = true
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                        @containers = line.match(/Looking at the (.*?), you see (?<nested>.*)/)[:nested].scan(/<a exist="(?<id>.*?)" noun="(?<noun>.*?)">(?<name>.*?)<\/a>/).map {|matches| 
         | 
| 65 | 
            +
                          Container.new GameObj.new *matches
         | 
| 66 | 
            +
                        }
         | 
| 67 | 
            +
                        raise Olib::Errors::Prempt
         | 
| 68 | 
            +
                      end
         | 
| 69 | 
            +
                      
         | 
| 70 | 
            +
                    }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    self
         | 
| 73 | 
            +
                  end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                  def nested?
         | 
| 76 | 
            +
                    @nested || false
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  def in
         | 
| 80 | 
            +
                    return self unless @id
         | 
| 81 | 
            +
                    Olib.wrap_stream(action 'look in') { |line|
         | 
| 82 | 
            +
                      raise Olib::Errors::Mundane if line=~ /^There is nothing in there|^That is closed|filled with a variety of garbage|Total items:/
         | 
| 83 | 
            +
                      raise Olib::Errors::Prempt  if line =~ /^In the (.*?) you see/
         | 
| 84 | 
            +
                    }
         | 
| 85 | 
            +
                    self
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  def on
         | 
| 89 | 
            +
                    return self unless @id
         | 
| 90 | 
            +
                    Olib.wrap_stream(action 'look on') { |line|
         | 
| 91 | 
            +
                      raise Olib::Errors::Mundane if line =~ /^There is nothing on there/
         | 
| 92 | 
            +
                      raise Olib::Errors::Prempt  if line =~ /^On the (.*?) you see/
         | 
| 93 | 
            +
                    }
         | 
| 94 | 
            +
                    self
         | 
| 95 | 
            +
                  end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                  def contents
         | 
| 98 | 
            +
                    look.in.on unless GameObj[@id].contents
         | 
| 99 | 
            +
                    GameObj[@id].contents.map {|i| Item.new(i).define('container', @id) }
         | 
| 100 | 
            +
                  end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                  def containers
         | 
| 103 | 
            +
                    @containers
         | 
| 104 | 
            +
                  end 
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
                
         | 
| 107 | 
            +
                class Playershop
         | 
| 108 | 
            +
                  @@noncontainers = [ "wall", "ceiling", "permit", "floor", "helmet", "snowshoes",
         | 
| 109 | 
            +
                                  "candelabrum", "flowerpot", "Hearthstone", "bear", "candelabra",
         | 
| 110 | 
            +
                                  "sculpture", "anvil", "tapestry", "portrait", "Wehnimer", "spiderweb",
         | 
| 111 | 
            +
                                  "rug", "fountain", "longsword", "ship", "panel", "painting", "armor",
         | 
| 112 | 
            +
                                  "flowers", "head", "plate", "vase", "pillows", "mask", "skeleton", "fan",
         | 
| 113 | 
            +
                                  "flag", "statue", "mat", "plaque", "mandolin", "plant", "sign" ]
         | 
| 114 | 
            +
                  
         | 
| 115 | 
            +
                  def Playershop.containers
         | 
| 116 | 
            +
                    Shop.containers.reject { |container|
         | 
| 117 | 
            +
                      @@noncontainers.include? container.noun
         | 
| 118 | 
            +
                    }
         | 
| 119 | 
            +
                  end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                  def Playershop.balance
         | 
| 122 | 
            +
                    balance = 0
         | 
| 123 | 
            +
                    Olib.wrap_stream('shop withdraw') { |line|
         | 
| 124 | 
            +
                      next if line =~ /^Usage: SHOP WITHDRAW <amount>/
         | 
| 125 | 
            +
                      raise Olib::Errors::Prempt if line =~ /^You must be in your shop to do that.$/
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                      if line =~ /Your shop's bank account is currently ([\d]+)/
         | 
| 128 | 
            +
                        balance = $1.to_i
         | 
| 129 | 
            +
                        raise Olib::Errors::Prempt
         | 
| 130 | 
            +
                      end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                    }
         | 
| 133 | 
            +
                    return balance
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  def Playershop.where(conditions)        
         | 
| 137 | 
            +
                    Playershop.items.select { |item|
         | 
| 138 | 
            +
                      conditions.keys.map { |key|
         | 
| 139 | 
            +
                        item.respond_to?(key) ? item.send(key) == conditions[key] : false
         | 
| 140 | 
            +
                        
         | 
| 141 | 
            +
                      }.include? false
         | 
| 142 | 
            +
                      
         | 
| 143 | 
            +
                    }
         | 
| 144 | 
            +
                    
         | 
| 145 | 
            +
                  end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                  def Playershop.find_by_tags(*tags)
         | 
| 148 | 
            +
                    
         | 
| 149 | 
            +
                    Playershop.items.select { |item|
         | 
| 150 | 
            +
                      !tags.map {|tag| item.is?(tag) }.include? false
         | 
| 151 | 
            +
                    }
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  def Playershop.sign
         | 
| 155 | 
            +
                    Shop.containers.select { |container|
         | 
| 156 | 
            +
                      container.noun == 'sign'
         | 
| 157 | 
            +
                    }[0]
         | 
| 158 | 
            +
                  end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                  def Playershop.items
         | 
| 161 | 
            +
                    Playershop.containers.map { |container|
         | 
| 162 | 
            +
                      container.contents
         | 
| 163 | 
            +
                    }.flatten
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
                end
         | 
| 166 | 
            +
              end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
              def Olib.Playershop
         | 
| 169 | 
            +
                Olib::Shop::Playershop
         | 
| 170 | 
            +
              end
         | 
| 171 | 
            +
             | 
| 172 | 
            +
              def Olib.Shop
         | 
| 173 | 
            +
                Olib::Shop
         | 
| 174 | 
            +
              end
         | 
| 175 | 
            +
            end
         | 
    
        data/lib/Olib/transport.rb
    CHANGED
    
    | @@ -2,27 +2,47 @@ module Olib | |
| 2 2 |  | 
| 3 3 | 
             
              class Transport
         | 
| 4 4 |  | 
| 5 | 
            -
                 | 
| 5 | 
            +
                @@silvers    = 0
         | 
| 6 | 
            +
                @@teleporter = {}
         | 
| 7 | 
            +
                @@routines   = {}
         | 
| 6 8 |  | 
| 7 | 
            -
                def  | 
| 8 | 
            -
                   | 
| 9 | 
            -
                   | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 9 | 
            +
                def Transport.__extend__
         | 
| 10 | 
            +
                  singleton = (class << self; self end)
         | 
| 11 | 
            +
                  [
         | 
| 12 | 
            +
                    'bank', 'gemshop', 'pawnshop', 'advguild', 'forge', 'inn', 'npchealer',
         | 
| 13 | 
            +
                    'chronomage', 'town', 'furrier', 'herbalist', 'locksmith', 'alchemist',
         | 
| 14 | 
            +
                    'fletcher', 'sunfist', 'movers', 'consignment', 'advguard','advguard2',
         | 
| 15 | 
            +
                    'clericshop', 'warriorguild'
         | 
| 16 | 
            +
                  ].each do |target|
         | 
| 17 | 
            +
                    singleton.send :define_method, "go2_#{target}".to_sym do
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      unhide if hidden?
         | 
| 20 | 
            +
                      unless Room.current.tags.include?(target)
         | 
| 21 | 
            +
                        start_script 'go2', [target, '_disable_confirm_']
         | 
| 22 | 
            +
                        wait_while { running? "go2" };
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
                      return self
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 12 27 | 
             
                end
         | 
| 13 28 |  | 
| 14 | 
            -
                 | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                   | 
| 18 | 
            -
                   | 
| 29 | 
            +
                Transport.__extend__
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def Transport.rebase
         | 
| 32 | 
            +
                  @@origin            = {}
         | 
| 33 | 
            +
                  @@origin[:roomid]   = Room.current.id
         | 
| 34 | 
            +
                  @@origin[:hidden]   = hiding?
         | 
| 35 | 
            +
                  @@origin[:location] = Room.current.location
         | 
| 19 36 | 
             
                  self
         | 
| 20 37 | 
             
                end
         | 
| 21 38 |  | 
| 39 | 
            +
                Transport.rebase
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 22 42 | 
             
                # Thanks Tillmen
         | 
| 23 | 
            -
                def cost(to)
         | 
| 43 | 
            +
                def Transport.cost(to)
         | 
| 24 44 | 
             
                  cost = 0
         | 
| 25 | 
            -
                  Map.findpath(Room.current.id,  | 
| 45 | 
            +
                  Map.findpath(Room.current.id, to).each { |id|
         | 
| 26 46 | 
             
                    Room[id].tags.each { |tag|          
         | 
| 27 47 | 
             
                      if tag =~ /^silver-cost:#{id-1}:(.*)$/
         | 
| 28 48 | 
             
                        cost_string = $1
         | 
| @@ -39,58 +59,62 @@ module Olib | |
| 39 59 |  | 
| 40 60 | 
             
                # use the teleporter variable to locate your teleporter and teleport
         | 
| 41 61 | 
             
                # naive of where you are
         | 
| 42 | 
            -
                def fwi_teleport
         | 
| 43 | 
            -
                  unless  | 
| 44 | 
            -
                     | 
| 45 | 
            -
                     | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
                     | 
| 62 | 
            +
                def Transport.fwi_teleport
         | 
| 63 | 
            +
                  unless Vars.teleporter
         | 
| 64 | 
            +
                    echo "Error: No teleport defined ;var set teleporter=<teleporter>"
         | 
| 65 | 
            +
                    exit
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
                  
         | 
| 68 | 
            +
                  unless Inventory.teleporter
         | 
| 69 | 
            +
                    echo "Error: Your teleporter could not be found #{Vars.teleporter}"
         | 
| 70 | 
            +
                    exit
         | 
| 71 | 
            +
                  end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  last = Room.current.id
         | 
| 74 | 
            +
                  teleporter = Inventory.teleporter
         | 
| 75 | 
            +
                  if teleporter.worn?
         | 
| 76 | 
            +
                    teleporter.turn
         | 
| 77 | 
            +
                  else
         | 
| 78 | 
            +
                    teleporter.take.turn.stash
         | 
| 79 | 
            +
                  end
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                  if Room.current.id == last
         | 
| 82 | 
            +
                    echo "Error: You tried to teleport to FWI in a room that does not allow that"
         | 
| 59 83 | 
             
                  end
         | 
| 60 | 
            -
             | 
| 84 | 
            +
             | 
| 61 85 | 
             
                  self
         | 
| 62 86 | 
             
                end
         | 
| 63 87 |  | 
| 64 | 
            -
                def wealth
         | 
| 88 | 
            +
                def Transport.wealth
         | 
| 65 89 | 
             
                  fput "info"
         | 
| 66 90 | 
             
                  while(line=get)
         | 
| 67 91 | 
             
                    next                if line =~ /^\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\)\:/
         | 
| 68 92 | 
             
                    if line =~ /^\s*Mana\:\s+\-?[0-9]+\s+Silver\:\s+([0-9]+)/
         | 
| 69 | 
            -
                       | 
| 93 | 
            +
                      @@silvers= $1.to_i
         | 
| 70 94 | 
             
                      break
         | 
| 71 95 | 
             
                    end
         | 
| 72 96 | 
             
                    sleep 0.1
         | 
| 73 97 | 
             
                  end
         | 
| 74 | 
            -
                   | 
| 98 | 
            +
                  @@silvers
         | 
| 75 99 | 
             
                end
         | 
| 76 100 |  | 
| 77 | 
            -
                def deplete(silvers)
         | 
| 78 | 
            -
                   | 
| 101 | 
            +
                def Transport.deplete(silvers)
         | 
| 102 | 
            +
                  @@silvers = @@silvers - silvers
         | 
| 79 103 | 
             
                end
         | 
| 80 104 |  | 
| 81 | 
            -
                def smart_wealth
         | 
| 82 | 
            -
                  return  | 
| 83 | 
            -
                   | 
| 105 | 
            +
                def Transport.smart_wealth
         | 
| 106 | 
            +
                  return @@silvers if @@silvers 
         | 
| 107 | 
            +
                  @@wealth
         | 
| 84 108 | 
             
                end
         | 
| 85 109 |  | 
| 86 | 
            -
                def unhide
         | 
| 87 | 
            -
                  fput 'unhide' if Spell[ | 
| 110 | 
            +
                def Transport.unhide
         | 
| 111 | 
            +
                  fput 'unhide' if Spell[916].active? or hidden?
         | 
| 88 112 | 
             
                  self
         | 
| 89 113 | 
             
                end
         | 
| 90 114 |  | 
| 91 | 
            -
                def withdraw(amount)
         | 
| 115 | 
            +
                def Transport.withdraw(amount)
         | 
| 92 116 | 
             
                  go2_bank
         | 
| 93 | 
            -
                  result = Olib.do "withdraw #{amount} silvers", /I'm sorry| | 
| 117 | 
            +
                  result = Olib.do "withdraw #{amount} silvers", /I'm sorry|hands you/
         | 
| 94 118 | 
             
                  if result =~ /I'm sorry/ 
         | 
| 95 119 | 
             
                    go2_origin
         | 
| 96 120 | 
             
                    echo "Unable to withdraw the amount requested for this script to run from your bank account"
         | 
| @@ -99,14 +123,14 @@ module Olib | |
| 99 123 | 
             
                  return self
         | 
| 100 124 | 
             
                end
         | 
| 101 125 |  | 
| 102 | 
            -
                def deposit_all
         | 
| 126 | 
            +
                def Transport.deposit_all
         | 
| 103 127 | 
             
                  self.go2_bank
         | 
| 104 128 | 
             
                  fput "unhide" if invisible? || hidden?
         | 
| 105 129 | 
             
                  fput "deposit all"
         | 
| 106 130 | 
             
                  return self
         | 
| 107 131 | 
             
                end
         | 
| 108 132 |  | 
| 109 | 
            -
                def deposit(amt)
         | 
| 133 | 
            +
                def Transport.deposit(amt)
         | 
| 110 134 | 
             
                  self.go2_bank
         | 
| 111 135 | 
             
                  fput "unhide" if invisible? || hidden?
         | 
| 112 136 | 
             
                  fput "deposit #{amt}"
         | 
| @@ -115,13 +139,13 @@ module Olib | |
| 115 139 |  | 
| 116 140 | 
             
                # naive share
         | 
| 117 141 | 
             
                # does not check if you're actually in a group or not
         | 
| 118 | 
            -
                def share
         | 
| 142 | 
            +
                def Transport.share
         | 
| 119 143 | 
             
                  wealth
         | 
| 120 144 | 
             
                  fput "share #{@silvers}"
         | 
| 121 145 | 
             
                  self
         | 
| 122 146 | 
             
                end
         | 
| 123 147 |  | 
| 124 | 
            -
                def go2(roomid)
         | 
| 148 | 
            +
                def Transport.go2(roomid)
         | 
| 125 149 | 
             
                  unhide if hidden
         | 
| 126 150 | 
             
                  unless Room.current.id == roomid
         | 
| 127 151 | 
             
                    start_script 'go2', [roomid, '_disable_confirm_']
         | 
| @@ -130,49 +154,26 @@ module Olib | |
| 130 154 | 
             
                  return self
         | 
| 131 155 | 
             
                end
         | 
| 132 156 |  | 
| 133 | 
            -
                def hide
         | 
| 134 | 
            -
                  while not hiding?
         | 
| 135 | 
            -
                    waitrt?
         | 
| 136 | 
            -
                    fput 'hide'
         | 
| 137 | 
            -
                  end
         | 
| 138 | 
            -
                end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
                def __constructor__
         | 
| 141 | 
            -
                  singleton = (class << self; self end)
         | 
| 142 | 
            -
                  [
         | 
| 143 | 
            -
                    'bank', 'gemshop', 'pawnshop', 'advguild', 'forge', 'inn', 'npchealer',
         | 
| 144 | 
            -
                    'chronomage', 'town', 'furrier', 'herbalist', 'locksmith', 'alchemist',
         | 
| 145 | 
            -
                    'fletcher', 'sunfist', 'movers', 'consignment', 'advguard','advguard2',
         | 
| 146 | 
            -
                    'clericshop', 'warriorguild'
         | 
| 147 | 
            -
                  ].each do |target|
         | 
| 148 | 
            -
                    singleton.send :define_method, "go2_#{target}".to_sym do
         | 
| 149 | 
            -
             | 
| 150 | 
            -
                      unhide if hidden?
         | 
| 151 | 
            -
                      unless Room.current.tags.include?(target)
         | 
| 152 | 
            -
                        start_script 'go2', [target, '_disable_confirm_']
         | 
| 153 | 
            -
                        wait_while { running? "go2" };
         | 
| 154 | 
            -
                      end
         | 
| 155 | 
            -
                      return self
         | 
| 156 | 
            -
                    end
         | 
| 157 | 
            -
                  end
         | 
| 158 | 
            -
                end
         | 
| 159 | 
            -
             | 
| 160 157 | 
             
                # TODO
         | 
| 161 158 | 
             
                # create a dictionary of house lockers and the logic to enter a locker
         | 
| 162 159 | 
             
                # insure locker is closed before scripting away from it
         | 
| 163 | 
            -
                def go2_locker
         | 
| 160 | 
            +
                def Transport.go2_locker
         | 
| 164 161 | 
             
                  echo "the go2_locker method currently does not function properly..."
         | 
| 165 162 | 
             
                  self
         | 
| 166 163 | 
             
                end
         | 
| 167 164 |  | 
| 168 | 
            -
                def go2_origin
         | 
| 169 | 
            -
                  if Room.current.id !=  | 
| 165 | 
            +
                def Transport.go2_origin
         | 
| 166 | 
            +
                  if Room.current.id != @@origin[:roomid]
         | 
| 170 167 | 
             
                    start_script 'go2', [@origin[:roomid]]
         | 
| 171 168 | 
             
                    wait_while { running? "go2" };
         | 
| 172 169 | 
             
                  end
         | 
| 173 | 
            -
                  hide if  | 
| 170 | 
            +
                  hide if @@origin[:hidden]
         | 
| 174 171 | 
             
                  return self
         | 
| 175 172 | 
             
                end    
         | 
| 176 173 |  | 
| 177 174 | 
             
              end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
              def Olib.Transport
         | 
| 177 | 
            +
                Olib::Transport
         | 
| 178 | 
            +
              end
         | 
| 178 179 | 
             
            end
         | 
    
        data/lib/Olib/utils.rb
    ADDED
    
    | @@ -0,0 +1,223 @@ | |
| 1 | 
            +
            require "Olib"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Olib
         | 
| 4 | 
            +
              @@debug  = false
         | 
| 5 | 
            +
              @@xml    = false
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              class ScriptVars
         | 
| 8 | 
            +
                attr_accessor :opts
         | 
| 9 | 
            +
                def initialize
         | 
| 10 | 
            +
                  opts          = {}
         | 
| 11 | 
            +
                  opts[:flags]  = {}
         | 
| 12 | 
            +
                  return opts if Script.current.vars.empty?
         | 
| 13 | 
            +
                  list          = Script.current.vars.map(&:downcase).last(Script.current.vars.length-1)
         | 
| 14 | 
            +
                  unless list.first.start_with?('--')
         | 
| 15 | 
            +
                    opts[:cmd]   = list.shift
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                  # iterate over list for flag values
         | 
| 18 | 
            +
                  
         | 
| 19 | 
            +
                  list.each.with_index {|ele, i|
         | 
| 20 | 
            +
                    if ele.start_with?('--')
         | 
| 21 | 
            +
                      opts[:flags][ symbolize(ele) ] = ''
         | 
| 22 | 
            +
                    else
         | 
| 23 | 
            +
                      # cast to Number if is number
         | 
| 24 | 
            +
                      ele = ele.to_i if ele =~ /^([\d\.]+$)/
         | 
| 25 | 
            +
                      # look back to previous flag and set it to it's value
         | 
| 26 | 
            +
                      opts[:flags][ symbolize(list[i-1]) ] = ele
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  }
         | 
| 29 | 
            +
                  
         | 
| 30 | 
            +
                  @opts = opts
         | 
| 31 | 
            +
                  self
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def cmd
         | 
| 35 | 
            +
                  @opts[:cmd]
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def empty?(flag)
         | 
| 39 | 
            +
                  opts[:flags][flag].class == TrueClass || opts[:flags][flag].class == NilClass
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def cmd?(action)
         | 
| 43 | 
            +
                  cmd == action
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def symbolize(flag)
         | 
| 47 | 
            +
                  flag.gsub('--', '').gsub('-', '_').to_sym
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                def help?
         | 
| 51 | 
            +
                  cmd =~ /help/
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                def flags
         | 
| 55 | 
            +
                  opts[:flags].keys
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                def to_s
         | 
| 59 | 
            +
                  @opts.to_s
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def flag
         | 
| 63 | 
            +
                  self
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def flag?(f)
         | 
| 67 | 
            +
                  opts[:flags][ symbolize(f) ]
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                def method_missing(arg1, arg2=nil)
         | 
| 71 | 
            +
                  @opts[:flags][arg1]
         | 
| 72 | 
            +
                end
         | 
| 73 | 
            +
              
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              def Olib.vars
         | 
| 77 | 
            +
                ScriptVars.new
         | 
| 78 | 
            +
              end
         | 
| 79 | 
            +
              
         | 
| 80 | 
            +
             | 
| 81 | 
            +
              def Olib.toggle_debug
         | 
| 82 | 
            +
                @@debug = @@debug ? false : true 
         | 
| 83 | 
            +
              end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              def Olib.debug(msg)
         | 
| 86 | 
            +
                return unless @@debug
         | 
| 87 | 
            +
                echo "Olib.debug> #{msg}"
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
             | 
| 90 | 
            +
              def Olib.timeout(sec)   #:yield: +sec+
         | 
| 91 | 
            +
                return yield(sec) if sec == nil or sec.zero?
         | 
| 92 | 
            +
              
         | 
| 93 | 
            +
                begin
         | 
| 94 | 
            +
                  current_thread = Thread.current
         | 
| 95 | 
            +
                  x = Thread.start{ 
         | 
| 96 | 
            +
                    begin
         | 
| 97 | 
            +
                      yield(sec)
         | 
| 98 | 
            +
                    rescue => e 
         | 
| 99 | 
            +
                      current_thread.raise e
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
                  }
         | 
| 102 | 
            +
                  y = Thread.start {
         | 
| 103 | 
            +
                    begin
         | 
| 104 | 
            +
                      sleep sec
         | 
| 105 | 
            +
                    rescue => e
         | 
| 106 | 
            +
                      x.raise e
         | 
| 107 | 
            +
                    else
         | 
| 108 | 
            +
                      x.kill
         | 
| 109 | 
            +
                      current_thread.raise Olib::Errors::TimedOut
         | 
| 110 | 
            +
                    end
         | 
| 111 | 
            +
                  }
         | 
| 112 | 
            +
                  x.value
         | 
| 113 | 
            +
                ensure
         | 
| 114 | 
            +
                  if y
         | 
| 115 | 
            +
                    y.kill
         | 
| 116 | 
            +
                    y.join # make sure y is dead.
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
                
         | 
| 120 | 
            +
              end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              def Olib.script
         | 
| 123 | 
            +
                Script.current
         | 
| 124 | 
            +
              end
         | 
| 125 | 
            +
             | 
| 126 | 
            +
              def Olib.turn_on_xml
         | 
| 127 | 
            +
                if not @@xml
         | 
| 128 | 
            +
                  @@xml = true
         | 
| 129 | 
            +
                  Script.current.want_downstream_xml = @@xml
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
                self
         | 
| 132 | 
            +
              end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
              def Olib.turn_off_xml
         | 
| 135 | 
            +
                if @@xml
         | 
| 136 | 
            +
                  @@xml = false
         | 
| 137 | 
            +
                  Script.current.want_downstream_xml = @@xml
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
                self
         | 
| 140 | 
            +
              end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
              def Olib.xml?
         | 
| 143 | 
            +
                @@xml
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
              def Olib.wrap(action)
         | 
| 147 | 
            +
                
         | 
| 148 | 
            +
                begin
         | 
| 149 | 
            +
                  Olib.timeout(3) {
         | 
| 150 | 
            +
                    put action
         | 
| 151 | 
            +
                    while (line=get)
         | 
| 152 | 
            +
                      next if Dictionary.ignorable?(line)
         | 
| 153 | 
            +
                      # attempt at removing PC action that turned out to be more harmful than good
         | 
| 154 | 
            +
                      # next if not GameObj.pcs.nil? and line =~ /#{GameObj.pcs.join('|')}/
         | 
| 155 | 
            +
                      yield line
         | 
| 156 | 
            +
                    end
         | 
| 157 | 
            +
                  }
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                rescue Olib::Errors::TimedOut
         | 
| 160 | 
            +
                  Olib.debug "timeout... "
         | 
| 161 | 
            +
                  # Silent
         | 
| 162 | 
            +
                rescue Olib::Errors::Mundane => e
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                rescue Olib::Errors::Prempt => e
         | 
| 165 | 
            +
                  
         | 
| 166 | 
            +
                end
         | 
| 167 | 
            +
                
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
              def Olib.wrap_greedy(action)
         | 
| 171 | 
            +
                
         | 
| 172 | 
            +
                begin
         | 
| 173 | 
            +
                  Olib.timeout(3) {
         | 
| 174 | 
            +
                    put action
         | 
| 175 | 
            +
                    while (line=get)
         | 
| 176 | 
            +
                      #next if not GameObj.pcs.nil? and line =~ /#{GameObj.pcs.join('|')}/
         | 
| 177 | 
            +
                      yield line
         | 
| 178 | 
            +
                    end
         | 
| 179 | 
            +
                  }
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                rescue Olib::Errors::TimedOut
         | 
| 182 | 
            +
                  Olib.debug "timeout... "
         | 
| 183 | 
            +
                  # Silent
         | 
| 184 | 
            +
                rescue Olib::Errors::Mundane => e
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                rescue Olib::Errors::Prempt => e
         | 
| 187 | 
            +
                  
         | 
| 188 | 
            +
                end
         | 
| 189 | 
            +
                
         | 
| 190 | 
            +
              end
         | 
| 191 | 
            +
             | 
| 192 | 
            +
              def Olib.exit
         | 
| 193 | 
            +
                raise Olib::Errors::Mundane
         | 
| 194 | 
            +
              end
         | 
| 195 | 
            +
             | 
| 196 | 
            +
              def Olib.wrap_stream(action, seconds=3)
         | 
| 197 | 
            +
                begin
         | 
| 198 | 
            +
                  Olib.turn_on_xml
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                  Olib.timeout(seconds) {
         | 
| 201 | 
            +
                    put action
         | 
| 202 | 
            +
                    while (line=get)
         | 
| 203 | 
            +
                      next if     Olib::Dictionary.ignorable?(line)
         | 
| 204 | 
            +
                      # next if not GameObj.pcs.nil? and line =~ /#{GameObj.pcs.join('|')}/
         | 
| 205 | 
            +
                      yield line
         | 
| 206 | 
            +
                    end
         | 
| 207 | 
            +
                  }
         | 
| 208 | 
            +
              
         | 
| 209 | 
            +
                rescue Olib::Errors::TimedOut
         | 
| 210 | 
            +
                  Olib.debug "timeout... "
         | 
| 211 | 
            +
                  # Silent
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                rescue Olib::Errors::Mundane => e
         | 
| 214 | 
            +
                  Olib.debug "mundane..."
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                rescue Olib::Errors::Prempt => e
         | 
| 217 | 
            +
                  Olib.debug "waiting prempted..."
         | 
| 218 | 
            +
             | 
| 219 | 
            +
                ensure
         | 
| 220 | 
            +
                  Olib.turn_off_xml
         | 
| 221 | 
            +
                end
         | 
| 222 | 
            +
              end
         | 
| 223 | 
            +
            end
         |