赞 | 8 |
VIP | 13 |
好人卡 | 1 |
积分 | 40 |
经验 | 12098 |
最后登录 | 2014-8-18 |
在线时间 | 132 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 4003
- 在线时间
- 132 小时
- 注册时间
- 2012-1-7
- 帖子
- 208
|
成就的原文我有
- #==============================================================================
- # ★ RGSS3_成就系统 Ver1.01
- #==============================================================================
- =begin
- 作者:tomoaky
- 素材来自:(http://hikimoki.sakura.ne.jp/)
- 你可以用事件中“脚本”命令获取成就
- 例如)gain_medal(0) # 获得第零个成就
- 设置对应的编号再设置主要内容
- 2012.01.25 Ver1.01
- 修正改变场景时重置成就
-
- 2012.01.16 Ver1.0
- 公開
- =end
- #==============================================================================
- # □ 設定項目
- #==============================================================================
- module TMMEDAL
- COMMAND_MEDAL = "成就" # 菜单命令名称
-
- # メダルが1枚もない状態でメダルコマンドを隠すかどうか(true で隠す)
- HIDE_COMMAND = false
-
- # メダル獲得時の効果音
- SE_GAIN_MEDAL = RPG::SE.new("Powerup", 90, 140)
-
- # メダル名とアイコンIDと説明文の設定
- MEDAL_DATA = {}
- MEDAL_DATA[0] = ["初心者", 520, "初心者的证明:完成第一轮主线。"]
- MEDAL_DATA[1] = ["转生者", 2712, "转生时得到的灵魂印记转生时获得。"]
- end
- #==============================================================================
- # ■ Game_Party
- #==============================================================================
- class Game_Party
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :medals # 獲得済みメダル
- attr_reader :new_medals # 新規獲得メダル
- attr_accessor :medal_info_count # メダル情報表示カウント
- attr_accessor :medal_info_opacity # メダル情報表示不透明度
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias tmmedal_game_party_initialize initialize
- def initialize
- tmmedal_game_party_initialize
- @medals = []
- @new_medals = []
- @medal_info_count = 0
- @medal_info_opacity = 0
- end
- #--------------------------------------------------------------------------
- # ○ メダルの獲得
- #--------------------------------------------------------------------------
- def gain_medal(medal_id)
- return if @medals.any? {|medal| medal[0] == medal_id }
- t = Time.now.strftime(" (%Y/%m/%d %H:%M)")
- @medals.push([medal_id, t])
- @new_medals.push([medal_id, t])
- end
- #--------------------------------------------------------------------------
- # ○ 獲得メダル情報の消去
- #--------------------------------------------------------------------------
- def delete_new_medal
- @new_medals.shift
- end
- end
- #==============================================================================
- # ■ Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ○ メダルの獲得
- #--------------------------------------------------------------------------
- def gain_medal(medal_id)
- $game_party.gain_medal(medal_id)
- end
- end
- #==============================================================================
- # ■ Window_MenuCommand
- #==============================================================================
- class Window_MenuCommand
- #--------------------------------------------------------------------------
- # ● 独自コマンドの追加用
- #--------------------------------------------------------------------------
- alias tmmedal_window_menucommand_add_original_commands add_original_commands
- def add_original_commands
- tmmedal_window_menucommand_add_original_commands
- unless TMMEDAL::HIDE_COMMAND && !medal_enabled
- add_command(TMMEDAL::COMMAND_MEDAL, :medal, medal_enabled)
- end
- end
- #--------------------------------------------------------------------------
- # ○ メダルの有効状態を取得
- #--------------------------------------------------------------------------
- def medal_enabled
- !$game_party.medals.empty?
- end
- end
- #==============================================================================
- # □ Window_MedalInfo
- #==============================================================================
- class Window_MedalInfo < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(Graphics.width - window_width, 0, window_width, fitting_height(1))
- self.opacity = 0
- self.contents_opacity = $game_party.medal_info_opacity
- refresh
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウ幅の取得
- #--------------------------------------------------------------------------
- def window_width
- return 240
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if $game_party.medal_info_count > 0
- self.contents_opacity += 16
- $game_party.medal_info_count -= 1
- $game_party.delete_new_medal if $game_party.medal_info_count == 0
- else
- self.contents_opacity -= 16
- if self.contents_opacity == 0
- open unless $game_party.new_medals.empty?
- end
- end
- $game_party.medal_info_opacity = self.contents_opacity
- end
- #--------------------------------------------------------------------------
- # ● ウィンドウを開く
- #--------------------------------------------------------------------------
- def open
- refresh
- TMMEDAL::SE_GAIN_MEDAL.play
- $game_party.medal_info_count = 150
- self.contents_opacity = 0
- self
- end
- #--------------------------------------------------------------------------
- # ○ リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- unless $game_party.new_medals.empty?
- draw_background(contents.rect)
- medal = TMMEDAL::MEDAL_DATA[$game_party.new_medals[0][0]]
- rect = contents.rect.clone
- draw_icon(medal[1], rect.x, rect.y)
- rect.x += 24
- rect.width -= 24
- draw_text(rect, medal[0])
- end
- end
- #--------------------------------------------------------------------------
- # ○ 背景の描画
- #--------------------------------------------------------------------------
- def draw_background(rect)
- temp_rect = rect.clone
- temp_rect.width /= 2
- contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
- temp_rect.x = temp_rect.width
- contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
- end
- #--------------------------------------------------------------------------
- # ○ 背景色 1 の取得
- #--------------------------------------------------------------------------
- def back_color1
- Color.new(0, 0, 0, 192)
- end
- #--------------------------------------------------------------------------
- # ○ 背景色 2 の取得
- #--------------------------------------------------------------------------
- def back_color2
- Color.new(0, 0, 0, 0)
- end
- end
- #==============================================================================
- # □ Window_Medal
- #==============================================================================
- class Window_Medal < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(x, y, width, height)
- super
- refresh
- select(0)
- activate
- end
- #--------------------------------------------------------------------------
- # ● 桁数の取得
- #--------------------------------------------------------------------------
- def col_max
- return 1
- end
- #--------------------------------------------------------------------------
- # ● 項目数の取得
- #--------------------------------------------------------------------------
- def item_max
- @data ? @data.size : 1
- end
- #--------------------------------------------------------------------------
- # ● アイテムの取得
- #--------------------------------------------------------------------------
- def item
- @data && index >= 0 ? @data[index] : nil
- end
- #--------------------------------------------------------------------------
- # ● アイテムリストの作成
- #--------------------------------------------------------------------------
- def make_item_list
- @data = $game_party.medals
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- medal = TMMEDAL::MEDAL_DATA[item[0]]
- rect = item_rect(index)
- draw_icon(medal[1], rect.x, rect.y)
- rect.x += 24
- rect.width -= 216
- draw_text(rect, medal[0])
- rect.x = contents.width - 192
- rect.width = 192
- draw_text(rect, item[1], 2)
- end
- #--------------------------------------------------------------------------
- # ● ヘルプテキスト更新
- #--------------------------------------------------------------------------
- def update_help
- if item
- medal = TMMEDAL::MEDAL_DATA[item[0]]
- text = medal[2]
- @help_window.set_text(text)
- end
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- make_item_list
- create_contents
- draw_all_items
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● 全ウィンドウの作成
- #--------------------------------------------------------------------------
- alias tmmedal_scene_map_create_all_windows create_all_windows
- def create_all_windows
- tmmedal_scene_map_create_all_windows
- create_medal_window
- end
- #--------------------------------------------------------------------------
- # ○ メダルウィンドウの作成
- #--------------------------------------------------------------------------
- def create_medal_window
- @medal_window = Window_MedalInfo.new
- end
- end
- #==============================================================================
- # ■ Scene_Menu
- #==============================================================================
- class Scene_Menu
- #--------------------------------------------------------------------------
- # ● コマンドウィンドウの作成
- #--------------------------------------------------------------------------
- alias tmmedal_scene_menu_create_command_window create_command_window
- def create_command_window
- tmmedal_scene_menu_create_command_window
- @command_window.set_handler(:medal, method(:command_medal))
- end
- #--------------------------------------------------------------------------
- # ○ コマンド[メダル]
- #--------------------------------------------------------------------------
- def command_medal
- SceneManager.call(Scene_Medal)
- end
- end
- #==============================================================================
- # □ Scene_Medal
- #==============================================================================
- class Scene_Medal < Scene_MenuBase
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- def start
- super
- create_help_window
- create_item_window
- end
- #--------------------------------------------------------------------------
- # ○ アイテムウィンドウの作成
- #--------------------------------------------------------------------------
- def create_item_window
- wy = @help_window.height
- wh = Graphics.height - wy
- @item_window = Window_Medal.new(0, wy, Graphics.width, wh)
- @item_window.viewport = @viewport
- @item_window.help_window = @help_window
- @item_window.set_handler(:cancel, method(:return_scene))
- end
- end
复制代码
|
|