diff options
Diffstat (limited to 'core/plugin/achievement/achievement.rb')
-rw-r--r-- | core/plugin/achievement/achievement.rb | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/core/plugin/achievement/achievement.rb b/core/plugin/achievement/achievement.rb index 54089c15..c6694e09 100644 --- a/core/plugin/achievement/achievement.rb +++ b/core/plugin/achievement/achievement.rb @@ -36,13 +36,16 @@ class Plugin::Achievement::Achievement self end # 依存してる実績の中で、解除されてない最初の一つを返す + # ==== Args + # [&filter] 実績フィルタ。この条件にマッチする実績の中から始めのものを返す # ==== Return # 見つかった実績(Plugin::Achievement::Achievement) # 依存している実績がなかった場合や、全て解除済みの場合は self を返す - def notachieved_parent + def notachieved_parent(&filter) + filter ||= ->_{true} unachievements = Plugin.filtering(:unachievements, {}).first if @options[:depends] - result = @options[:depends].map{ |slug| unachievements[slug] }.compact.first + result = @options[:depends].map{ |slug| unachievements[slug] }.compact.select(&filter).first if result result.notachieved_parent else @@ -159,7 +162,7 @@ Plugin.create :achievement do Delayer.new do unachievements = Plugin.filtering(:unachievements, {}).first.reject{ |k, v| v.hidden? } unless unachievements.empty? - not_achieved = unachievements.values.sample.notachieved_parent + not_achieved = unachievements.values.sample.notachieved_parent{|a|!a.hidden?} unless not_achieved.hidden? if Mopt.debug? activity :achievement, "#{not_achieved.hint}\n(slug: #{not_achieved.slug})" |