@@ -57,26 +57,33 @@ def find_pcs_sitting(room_players)
57
57
. map { |obj | obj . strip . scan ( /\w +$/ ) . first }
58
58
end
59
59
60
- def find_npcs ( room_objs )
60
+ def find_all_npcs ( room_objs )
61
61
room_objs . sub ( /You also see/ , '' ) . sub ( / with a [\w \s ]+ sitting astride its back/ , '' ) . strip
62
- . scan ( %r{<pushBold/>[^<>]*<popBold/> which appears dead|<pushBold/>[^<>]*<popBold/> \( dead\) |<pushBold/>[^<>]*<popBold/>} )
63
- . reject { |obj | obj =~ /which appears dead|\( dead\) / }
64
- . map { |obj | obj . sub ( /.*alfar warrior.*/ , 'alfar warrior' ) }
65
- . map { |obj | obj . sub ( /.*sinewy leopard.*/ , 'sinewy leopard' ) }
66
- . map { |obj | obj . sub ( /.*lesser naga.*/ , 'lesser naga' ) }
67
- . map { |obj | obj . sub ( /.*Shadow Servant.*/ , 'Shadow Servant' ) }
68
- . map { |obj | obj . sub ( '<pushBold/>' , '' ) . sub ( %r{<popBold/>.*} , '' ) }
69
- . map { |obj | obj . split ( /\s and\s / ) . last . sub ( /(?:\s glowing)?\s with\s .*/ , '' ) }
70
- . map { |obj | obj . strip . scan ( /[A-z'-]+$/ ) . first }
62
+ . scan ( %r{<pushBold/>[^<>]*<popBold/> which appears dead|<pushBold/>[^<>]*<popBold/> \( dead\) |<pushBold/>[^<>]*<popBold/>} )
63
+
71
64
end
72
-
65
+
66
+ def clean_npc_string ( npc_string )
67
+ tmp_npc_string = npc_string . map { |obj | obj . sub ( /.*alfar warrior.*/ , 'alfar warrior' ) }
68
+ . map { |obj | obj . sub ( /.*sinewy leopard.*/ , 'sinewy leopard' ) }
69
+ . map { |obj | obj . sub ( /.*lesser naga.*/ , 'lesser naga' ) }
70
+ . map { |obj | obj . sub ( '<pushBold/>' , '' ) . sub ( %r{<popBold/>.*} , '' ) }
71
+ . map { |obj | obj . split ( /\s and\s / ) . last . sub ( /(?:\s glowing)?\s with\s .*/ , '' ) }
72
+ . map { |obj | obj . strip . scan ( /[A-z'-]+$/ ) . first }
73
+ . sort
74
+ flat_npcs = [ ]
75
+ tmp_npc_string . uniq . each { |npc | flat_npcs << tmp_npc_string . size . times . select { |i | tmp_npc_string [ i ] == npc } . size . times . map { |number | number . zero? ? tmp_npc_string [ 0 ] : tmp_npc_string [ number ] . sub ( npc , "#{ $ORDINALS[ number ] } #{ npc } " ) } }
76
+ flat_npcs . flatten
77
+ end
78
+
79
+ def find_npcs ( room_objs )
80
+ npcs = find_all_npcs ( room_objs ) . reject { |obj | obj =~ /which appears dead|\( dead\) / }
81
+ clean_npc_string ( npcs )
82
+ end
83
+
73
84
def find_dead_npcs ( room_objs )
74
- room_objs . sub ( /You also see/ , '' ) . sub ( / with a [\w \s ]+ sitting astride its back/ , '' )
75
- . strip . scan ( %r{<pushBold/>[^<>]*<popBold/> which appears dead|<pushBold/>[^<>]*<popBold/> \( dead\) |<pushBold/>[^<>]*<popBold/>} )
76
- . select { |obj | obj =~ /which appears dead|\( dead\) / }
77
- . map { |obj | obj . sub ( '<pushBold/>' , '' ) . sub ( %r{<popBold/>.*} , '' ) }
78
- . map { |obj | obj . split ( /\s and\s / ) . last . sub ( /(?:\s glowing)?\s with\s .*/ , '' ) }
79
- . map { |obj | obj . strip . scan ( /[A-z'-]+$/ ) . first }
85
+ dead_npcs = find_all_npcs ( room_objs ) . select { |obj | obj =~ /which appears dead|\( dead\) / }
86
+ clean_npc_string ( dead_npcs )
80
87
end
81
88
82
89
def find_objects ( room_objs )
0 commit comments