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 +4 -4
- data/lib/encounters/encounter.rb +3 -1
- data/lib/encounters/lair.rb +35 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c439e67e42a41fce80b6270a542ace5aa2bafac
|
4
|
+
data.tar.gz: d80a2449e59c665156a29747266fa99a306b6d27
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03ad46f247684c9aec0beaf7edb965cb56bff71b25c7a72fe08cec84fa4ff6e9bdcab0e4d5b845a72e5747c3df02320f3637aae489a4c6dc540aeec232df56d5
|
7
|
+
data.tar.gz: 218ce8c5e23c06376319d19165e31ede9ad4f65404bac2075e0a304e16ac5bc52d533f6cab5b783c6bc0bf6d02fcdf9fb099af5de31c929844c34fd660c2da8e
|
data/lib/encounters/encounter.rb
CHANGED
@@ -6,7 +6,8 @@ class Encounter
|
|
6
6
|
end
|
7
7
|
|
8
8
|
# Return true or false. Monster added or not
|
9
|
-
def
|
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
|
|
data/lib/encounters/lair.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
39
|
+
party_xp_level = hero_level.map{ |hl| @xp_difficulty_table[hl][encounter_level] }.reduce(&:+)
|
35
40
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
troops = @encounters[encounter_type][:troops]
|
41
|
+
tested_encounters_types = []
|
42
|
+
encounter = nil
|
43
|
+
loop do
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
-
|
46
|
-
|
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
|
-
|
49
|
-
break unless encounter.add_monster_if_possible( monster )
|
71
|
+
break
|
50
72
|
end
|
51
73
|
|
52
74
|
encounter
|