Olib 2.0.0.pre.rc.2 → 2.0.0.pre.rc.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59092281655cf2bb6035a9bf6117a4cd1b88539c2eb971041d13910f4d319f55
4
- data.tar.gz: 26d0a65a8edfeba5077b6e9efc0887d8bdbcad394fa4b29af015a9281ab00f12
3
+ metadata.gz: 88c17ccdc2fc52aecad952d952a46005a5fbff7103a1b650d29d4d65f437a17a
4
+ data.tar.gz: 187d49baaf0362d38b87805b5beb71e345ce95654588095020b4a8de0f190a8e
5
5
  SHA512:
6
- metadata.gz: '038216104dd7f79a3d45d181a759b56256ed6bf611dfcece8f8c777886f6a5371c2476381af7ecc447567169265e9299275973f18fd492d32f37ba5573d86a7d'
7
- data.tar.gz: 1638f640f0540fc425937dd963a4914e0d44cbb391cc77f2417bb9a9e99b6c4107733818ad4448b1c3858149c803fa9933d164307070040593ecd3d6768de2a0
6
+ metadata.gz: 72af6ca80a60fa8527c7edbcab8697a8e8730989866d90a73f094dbdb5e550b4e1171e609c5fcc6ede53a8b9e4e4b8fd94e0a4cdf79d05d01f3ada904b2b543d
7
+ data.tar.gz: c6a9e86b1b0c33355a30e1262fde92800b82edc50e13dee9bcf048fdfb942819c9db3484e90e2ce443331316baed64130d6ee2ee3a7d43515695d7e4e1ff898e
@@ -49,12 +49,25 @@ class Creature < Exist
49
49
  end
50
50
  end
51
51
 
52
+ def self.stem_name(foe)
53
+ foe.name.split(" ").slice(1..-1).join(" ")
54
+ end
55
+
56
+ def self.add_boss_type(foe)
57
+ return if foe.tags.include?(:aggressive)
58
+ if GameObj.type_data["aggressive npc"][:name].match stem_name(foe)
59
+ foe.tags << :aggressive
60
+ foe.tags << :npc
61
+ end
62
+ end
63
+
52
64
  attr_accessor :wounds, :tags
53
65
  def initialize(creature)
54
66
  super(creature)
55
67
  @wounds = {}
56
68
  @tags = (Exist.normalize_type_data(creature.type) + (metadata["tags"] || []) ).map(&:to_sym)
57
69
  TAGS.each_pair do |tag, pattern| @tags << tag if @name =~ pattern end
70
+ Creature.add_boss_type(self)
58
71
  heal
59
72
  end
60
73
 
@@ -15,7 +15,6 @@ class Creatures
15
15
 
16
16
  STATES = %i[
17
17
  prone sitting kneeling
18
- dead
19
18
  sleeping webbed immobile
20
19
  stunned
21
20
  flying
@@ -48,9 +47,9 @@ class Creatures
48
47
  end
49
48
 
50
49
  def each()
51
- GameObj.npcs.to_a.map do |obj| Creature.new(obj) end
50
+ GameObj.targets.to_a.map do |obj| Creature.new(obj) end
52
51
  .select(&@predicate)
53
- .each do |creature| yield(creature) if GameObj[creature.id] and creature.aggressive? end
52
+ .each do |creature| yield(creature) if GameObj[creature.id] end
54
53
  end
55
54
 
56
55
  def respond_to_missing?(method, include_private = false)
@@ -75,6 +74,12 @@ class Creatures
75
74
  Creatures.new do |creature| creature.name.include?(Bounty.creature) end
76
75
  end
77
76
 
77
+ def dead
78
+ GameObj.npcs.to_a
79
+ .select do |c| c.status.include?("dead") end
80
+ .map do |obj| Creature.new(obj) end
81
+ end
82
+
78
83
  def self.method_missing(method, *args, &block)
79
84
  if respond_to?(method)
80
85
  Creatures.new.send(method, *args, &block)
@@ -26,6 +26,10 @@ class Container < Exist
26
26
  GameObj.containers.fetch(id, []).map do |item| Item.new(item, self) end
27
27
  end
28
28
 
29
+ def closed?
30
+ not GameObj.containers[id]
31
+ end
32
+
29
33
  def each(&block)
30
34
  contents.each(&block)
31
35
  end
@@ -1,31 +1,45 @@
1
1
  require "Olib/pattern_matching/pattern_matching"
2
2
 
3
3
  module Containers
4
- @@containers = {}
5
-
6
- def self.find_game_obj!(name)
7
- var = Vars[name.to_s] or fail Exception, "Var[#{name}] is not set\n\t;vars set #{name}=<whatever>"
8
- pattern = %r[#{var}]
9
- GameObj.inv.find(&Where[name: pattern]) or fail Exception, "#{name.capitalize}(#{var}) could not be found in GameObj.inv"
4
+ @@containers ||= {}
5
+
6
+ def self.find_game_obj!(pattern)
7
+ candidates = GameObj.inv.select do |item|
8
+ if pattern.class.is_a?(String)
9
+ item.name.include?(pattern)
10
+ else
11
+ item.name.match(pattern)
12
+ end
13
+ end
14
+ case candidates.size
15
+ when 1
16
+ return Container.new(candidates.first)
17
+ when 0
18
+ fail Exception, <<~ERROR
19
+ Source(GameObj.inv)
20
+
21
+ reason: no matches for Pattern(#{pattern}) found in GameObj.inv
22
+ ERROR
23
+ else
24
+ fail Exception, <<~ERROR
25
+ Source(GameObj.inv)
26
+
27
+ reason: aspecific Container[#{pattern.to_s}] found
28
+ matches: #{candidates.map(&:name)}
29
+ ERROR
30
+ end
10
31
  end
11
32
 
12
33
  def self.define(name)
13
- @@containers[name] = Container.new(
14
- Containers.find_game_obj!(name))
34
+ var = Vars[name.to_s] or fail Exception, "Var[#{name}] is not set\n\t;vars set #{name}=<whatever>"
35
+ pattern = %r[#{var}]
36
+ @@containers[name] = Containers.find_game_obj!(pattern)
15
37
  @@containers[name]
16
38
  end
17
39
 
18
- def self.method_missing(name, *args)
19
- return @@containers[name] if @@containers[name]
20
- return self.define(name)
21
- end
22
-
23
40
  def self.[](name)
24
- begin
25
- self.define(name)
26
- rescue Exception => err
27
- Err(why: err.message, error: err)
28
- end
41
+ return define(name) if name.is_a?(Symbol)
42
+ find_game_obj!(name)
29
43
  end
30
44
 
31
45
  def self.right_hand
@@ -39,4 +53,9 @@ module Containers
39
53
  def self.registry
40
54
  @@containers
41
55
  end
56
+
57
+ def self.method_missing(name, *args)
58
+ return @@containers[name] if @@containers[name]
59
+ return self.define(name)
60
+ end
42
61
  end
@@ -1,3 +1,3 @@
1
1
  module Olib
2
- VERSION = "2.0.0-rc.2"
2
+ VERSION = "2.0.0-rc.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Olib
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.rc.2
4
+ version: 2.0.0.pre.rc.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ondreian Shamsiel