dd-next-encounters 1.0.1 → 1.0.2

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
  SHA1:
3
- metadata.gz: e5af6e145531520e7e13269f87fb25dc99bf22a8
4
- data.tar.gz: 25e866bbe044c3e96d6f2fbe53687b89efc443f5
3
+ metadata.gz: 0c439e67e42a41fce80b6270a542ace5aa2bafac
4
+ data.tar.gz: d80a2449e59c665156a29747266fa99a306b6d27
5
5
  SHA512:
6
- metadata.gz: cd1d9d7110ea8b8b870e9e1b203740b244172d6f26baccdb5eb2d698383828802752103e705a302d8d723a8ed416c25db1aa241644a175c043f3b1d8b9c6ca0f
7
- data.tar.gz: 045fc1947d8d44e4ad67f21951cc4038759d1a4a62076550ff6cd2d21a2cabf7a76aa2d6609f34af2ef09e61c50b8d546442513bcc5f1a75c83ddd9d93d6c2ab
6
+ metadata.gz: 03ad46f247684c9aec0beaf7edb965cb56bff71b25c7a72fe08cec84fa4ff6e9bdcab0e4d5b845a72e5747c3df02320f3637aae489a4c6dc540aeec232df56d5
7
+ data.tar.gz: 218ce8c5e23c06376319d19165e31ede9ad4f65404bac2075e0a304e16ac5bc52d533f6cab5b783c6bc0bf6d02fcdf9fb099af5de31c929844c34fd660c2da8e
@@ -6,7 +6,8 @@ class Encounter
6
6
  end
7
7
 
8
8
  # Return true or false. Monster added or not
9
- def add_monster_if_possible( monster )
9
+ def add_monster_while_possible(monster )
10
+ raise "monster can't be nil : #{monster.inspect}" unless monster
10
11
  if can_add_monster?( monster )
11
12
  @monsters << monster
12
13
  return true
@@ -25,6 +26,7 @@ class Encounter
25
26
  private
26
27
 
27
28
  def encounter_value( encounter )
29
+ raise "Encounter should not contain nil values : #{encounter.inspect}" if encounter.compact != encounter
28
30
  encounter.map{ |e| e.xp_value }.reduce(&:+) * get_encounter_multiplier( encounter )
29
31
  end
30
32
 
@@ -26,27 +26,49 @@ class Lair
26
26
 
27
27
  # encounter_level : :easy, :medium, :hard, :deadly
28
28
  def get_encounter( encounter_level, *hero_level )
29
+ raise 'Empty party is not valid. Please provide at least one hero' if hero_level.empty?
29
30
  @monster_manual.validate_loaded
30
31
 
31
32
  raise "Bad encounter level : #{encounter_level.inspect}. Available encounter level : #{AVAILABLE_ENCOUNTER_LEVEL.inspect}" unless AVAILABLE_ENCOUNTER_LEVEL.include?( encounter_level )
32
- party_xp_level = hero_level.map{ |hl| @xp_difficulty_table[hl][encounter_level] }.reduce(&:+)
33
+ raise 'Party too weak. Minimum 3 members' if hero_level.count < 3
34
+
35
+ hero_level.each do |level|
36
+ raise "Bad hero level : #{level}. Should be between 1 .. 20" if level < 1 || level > 20
37
+ end
33
38
 
34
- encounter = Encounter.new( party_xp_level )
39
+ party_xp_level = hero_level.map{ |hl| @xp_difficulty_table[hl][encounter_level] }.reduce(&:+)
35
40
 
36
- # Choose a random encounter type
37
- encounter_type = @encounters_types.sample
38
- bosses = @encounters[encounter_type][:bosses]
39
- troops = @encounters[encounter_type][:troops]
41
+ tested_encounters_types = []
42
+ encounter = nil
43
+ loop do
40
44
 
41
- # Choose a random boss
42
- boss = bosses.sample if !bosses.empty? && rand( 1 .. 2 ) == 1
43
- encounter.add_monster_if_possible( boss ) if boss
45
+ raise "Can't create an encounter for this party" if (@encounters_types-tested_encounters_types).empty?
46
+ encounter = Encounter.new( party_xp_level )
47
+
48
+ # Choose a random encounter type
49
+ encounter_type = ( @encounters_types - tested_encounters_types ).sample
50
+ bosses = @encounters[encounter_type][:bosses]
51
+ troops = @encounters[encounter_type][:troops]
52
+
53
+ # Choose a random boss
54
+ boss = bosses.sample if !bosses.empty? && rand( 1 .. 2 ) == 1
55
+ encounter.add_monster_while_possible(boss ) if boss
56
+
57
+ # Choose a random monster
58
+ monster = get_corresponding_monsters( troops, party_xp_level ).sample
59
+ # We couldn't get a monster of this type for this party. Probably the monsters are too hard
60
+ # Then we have to check again with another monster type
61
+ unless monster
62
+ tested_encounters_types << encounter_type
63
+ next
64
+ end
44
65
 
45
- # Choose a random monster
46
- monster = get_corresponding_monsters( troops, party_xp_level ).sample
66
+ # Will add the same monster while party_xp_level is not reached
67
+ loop do
68
+ break unless encounter.add_monster_while_possible(monster )
69
+ end
47
70
 
48
- loop do
49
- break unless encounter.add_monster_if_possible( monster )
71
+ break
50
72
  end
51
73
 
52
74
  encounter
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dd-next-encounters
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cédric Zuger