/
mikutter-adventure.rb
109 lines (94 loc) · 4.17 KB
/
mikutter-adventure.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# coding: UTF-8
require File.join(File.dirname(__FILE__), "miquest.rb")
require File.join(File.dirname(__FILE__), "models.rb")
require File.join(CHIConfig::PLUGIN_PATH, "change_account", "interactive")
Plugin.create(:mikutter_adventure) {
def メッセージ生成(メッセージ文字列, ボタン = nil, ボタンを押された時の処理 = nil)
@ユーザー ||= AdventureUser.new(
idname: "mikutter",
name: "みくったーちゃん",
uri: "adventure://user/mikutter_chan",
profile_image_url: "https://github.com/katsyoshi/mikutter/blob/release/3.0.0/core/skin/data/icon.png?raw=true"
)
メッセージ = AdventureMessage.new(
description: メッセージ文字列,
created: Time.now,
confirm: ボタン,
confirm_callback: ボタンを押された時の処理,
uri: "adventure://message/#{Time.now.to_s}#{Random.rand(65536)}",
user: @ユーザー
)
メッセージ
end
def ボタンが押された時の処理(押されたボタン)
Delayer.new {
(メッセージ, ボタン) = MikutterAdventure.ゲーム.resume(押されたボタン)
if ボタン
timeline(:adventure) << メッセージ生成(メッセージ, ボタン, lambda { |押されたボタン| ボタンが押された時の処理(押されたボタン) })
else
timeline(:adventure) << メッセージ生成(メッセージ)
end
}
end
def 実績(slug, description, hint=nil)
ach_slug = :"mikutter_adv_#{slug}"
defachievement(ach_slug,
description: description,
hidden: !hint,
hint: hint,
depends: [:tutorial]
) do |ach|
on_mikutter_adv_progress do |sequence|
ach.take! if sequence == slug end end
end
tab(:adventure, "ADV") {
set_icon(File.join(File.dirname(__FILE__), "gem.png"))
timeline(:adventure)
Plugin.create(:mikutter_adventure).ボタンが押された時の処理(nil)
}
# 実績
実績 :start, "冒険を始めた", "宝石マークのタブを開いて、みくったーアドベンチャーをプレイしよう!"
実績 :compass, "コンパスを見つけた", "方角が分かるアイテムがあるといいんだけど…"
実績 :rotate_floor, "床が回ってぐるぐるする〜w"
実績 :gps, "GPSを見つけた", "現在位置が分かるアイテムがあれば楽なんだけどなぁ…"
実績 :gem, "Gemを見つけた"
実績 :kanabun, "カナブンを見つけた"
実績 :good_end, "Gemを持ち帰った"
実績 :bad_end, "Gemを持ち帰ることができなかった"
# 歩数実績
walk_count = gen_counter
walk_achievements = [MikutterAdventure::WalkAchievements.new(50),
MikutterAdventure::WalkAchievements.new(100),
MikutterAdventure::WalkAchievements.new(200)]
walk_achievements.each do |wa|
defachievement(:"mikutter_adv_walk#{wa.count}",
description: "ダンジョン内を#{wa.count}歩歩いた",
hidden: true,
depends: [:tutorial]
) do |ach|
wa.achievement = ach end
end
on_mikutter_adv_progress do |sequence|
if :walk == sequence
if walk_count.call >= walk_achievements.first.count
walk_achievements.shift.achievement.take!
end
end
end
# 上級実績
defachievement(:mikutter_adv_item_collector,
description: "Mikutter Adventureの全てのアイテムを取得した",
hidden: true,
depends: %w(compass gps gem kanabun).map{|_|:"mikutter_adv_#{_}"},
&:take!)
defachievement(:mikutter_adv_all_ending,
description: "Mikutter Adventureの全てのエンディングを見た",
hidden: true,
depends: %w(good_end bad_end).map{|_|:"mikutter_adv_#{_}"},
&:take!)
defachievement(:mikutter_adv_complete,
description: "Mikutter Adventureの全ての実績を解除した",
hidden: true,
depends: %w(item_collector all_ending).map{|_|:"mikutter_adv_#{_}"},
&:take!)
}