| 
 
| 赞 | 0 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 1569 |  
| 最后登录 | 2015-12-29 |  
| 在线时间 | 99 小时 |  
 Lv1.梦旅人 
	梦石0 星屑50 在线时间99 小时注册时间2012-3-11帖子74 | 
| 本帖最后由 公牛大冒险 于 2012-8-2 16:55 编辑 
 #==============================================================================
 # ★ 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("魔兽世界-成就", 90, 0)
 
 # メダル名とアイコンIDと説明文の設定
 MEDAL_DATA = {}
 MEDAL_DATA[0] = ["", 187, ""]
 MEDAL_DATA[1] = ["10级!", 187, "等级提升到10。"]
 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(4))
 self.opacity = 0
 self.contents_opacity = $game_party.medal_info_opacity
 refresh
 end
 #--------------------------------------------------------------------------
 # ● ウィンドウ幅の取得
 #--------------------------------------------------------------------------
 def window_width
 return 480
 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
 
 
 
 那些的备注是日文的实在看不懂啦……
 我想请大家帮忙把右上角的成就框框移到图片中的的红框处- -
 还有显示的汉字最好能到框的中间  图标调大一点
 大小已经自己调好啦
 谢谢啦
 | 
 |