设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2195|回复: 1
打印 上一主题 下一主题

[已经解决] 成就系统如何设置奖励(脚本无该功能)

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1090
在线时间
237 小时
注册时间
2016-2-3
帖子
173

开拓者

跳转到指定楼层
1
发表于 2016-3-26 11:26:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 饿啊 于 2016-3-26 11:26 编辑

代码如下:
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_実績メダル Ver1.01
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. webサイト:ひきも記
  8.  
  9. すごい記録を達成したときにポコンッと出るあれです。
  10.  
  11. イベントコマンド『スクリプト』を使ってメダルを獲得することができます。
  12.   例)gain_medal(0)   # 0番のメダルを獲得する
  13.   設定項目にて番号に対応するメダルの内容を設定してください。
  14.  
  15.  
  16. 2012.01.25  Ver1.01
  17.   メダル獲得表示中のシーン切り替えにより表示がリセットされないように修正
  18.  
  19. 2012.01.16  Ver1.0
  20.   公開
  21.  
  22. =end
  23.  
  24. #==============================================================================
  25. # □ 設定項目
  26. #==============================================================================
  27. module TMMEDAL
  28.   COMMAND_MEDAL = "成就"     # 菜单命令名字
  29.  
  30.   # メダルが1枚もない状態でメダルコマンドを隠すかどうか(true で隠す)
  31.   HIDE_COMMAND = false
  32.  
  33.   # 获得证件时的效果音
  34.   SE_GAIN_MEDAL = RPG::SE.new("Powerup", 90, 140)
  35.  
  36.                 # 证件名,图标ID,说明的设定    脚本设置:gain_medal(0)
  37.   MEDAL_DATA = {}
  38.   MEDAL_DATA[0] = ["春困秋乏夏打盹", 6, "在猪脚家里睡觉太多了..."]
  39. end
  40.  
  41. #==============================================================================
  42. # ■ Game_Party
  43. #==============================================================================
  44. class Game_Party
  45.   #--------------------------------------------------------------------------
  46.   # ● 公开实例变量
  47.   #--------------------------------------------------------------------------
  48.   attr_reader   :medals                   # 已获得证件
  49.   attr_reader   :new_medals               # 新获得证件
  50.   attr_accessor :medal_info_count         # 证件信息显示计数
  51.   attr_accessor :medal_info_opacity       # 证件信息显示不透明度
  52.   #--------------------------------------------------------------------------
  53.   # ● 对象初期化
  54.   #--------------------------------------------------------------------------
  55.   alias tmmedal_game_party_initialize initialize
  56.   def initialize
  57.     tmmedal_game_party_initialize
  58.     @medals = []
  59.     @new_medals = []
  60.     @medal_info_count = 0
  61.     @medal_info_opacity = 0
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ○ メダルの獲得
  65.   #--------------------------------------------------------------------------
  66.   def gain_medal(medal_id)
  67.     return if @medals.any? {|medal| medal[0] == medal_id }
  68.     t = Time.now.strftime(" (%Y/%m/%d %H:%M)")
  69.     @medals.push([medal_id, t])
  70.     @new_medals.push([medal_id, t])
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ○ 获得证件信息消去
  74.   #--------------------------------------------------------------------------
  75.   def delete_new_medal
  76.     @new_medals.shift
  77.   end
  78. end
  79.  
  80. #==============================================================================
  81. # ■ Game_Interpreter
  82. #==============================================================================
  83. class Game_Interpreter
  84.   #--------------------------------------------------------------------------
  85.   # ○ メダルの獲得
  86.   #--------------------------------------------------------------------------
  87.   def gain_medal(medal_id)
  88.     $game_party.gain_medal(medal_id)
  89.   end
  90. end
  91.  
  92. #==============================================================================
  93. # ■ Window_MenuCommand
  94. #==============================================================================
  95. class Window_MenuCommand
  96.   #--------------------------------------------------------------------------
  97.   # ● 独自指令的追加用
  98.   #--------------------------------------------------------------------------
  99.   alias tmmedal_window_menucommand_add_original_commands add_original_commands
  100.   def add_original_commands
  101.     tmmedal_window_menucommand_add_original_commands
  102.     unless TMMEDAL::HIDE_COMMAND && !medal_enabled
  103.       add_command(TMMEDAL::COMMAND_MEDAL, :medal, medal_enabled)
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ○ メダルの有効状態を取得
  108.   #--------------------------------------------------------------------------
  109.   def medal_enabled
  110.     !$game_party.medals.empty?
  111.   end
  112. end
  113.  
  114. #==============================================================================
  115. # □ Window_MedalInfo
  116. #==============================================================================
  117. class Window_MedalInfo < Window_Base
  118.   #--------------------------------------------------------------------------
  119.   # ● オブジェクト初期化
  120.   #--------------------------------------------------------------------------
  121.   def initialize
  122.     super(Graphics.width - window_width, 0, window_width, fitting_height(1))
  123.     self.opacity = 0
  124.     self.contents_opacity = $game_party.medal_info_opacity
  125.     refresh
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● ウィンドウ幅の取得
  129.   #--------------------------------------------------------------------------
  130.   def window_width
  131.     return 240
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● フレーム更新
  135.   #--------------------------------------------------------------------------
  136.   def update
  137.     super
  138.     if $game_party.medal_info_count > 0
  139.       self.contents_opacity += 16
  140.       $game_party.medal_info_count -= 1
  141.       $game_party.delete_new_medal if $game_party.medal_info_count == 0
  142.     else
  143.       self.contents_opacity -= 16
  144.       if self.contents_opacity == 0
  145.         open unless $game_party.new_medals.empty?
  146.       end
  147.     end
  148.     $game_party.medal_info_opacity = self.contents_opacity
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● ウィンドウを開く
  152.   #--------------------------------------------------------------------------
  153.   def open
  154.     refresh
  155.     TMMEDAL::SE_GAIN_MEDAL.play
  156.     $game_party.medal_info_count = 150
  157.     self.contents_opacity = 0
  158.     self
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ○ リフレッシュ
  162.   #--------------------------------------------------------------------------
  163.   def refresh
  164.     contents.clear
  165.     unless $game_party.new_medals.empty?
  166.       draw_background(contents.rect)
  167.       medal = TMMEDAL::MEDAL_DATA[$game_party.new_medals[0][0]]
  168.       rect = contents.rect.clone
  169.       draw_icon(medal[1], rect.x, rect.y)
  170.       rect.x += 24
  171.       rect.width -= 24
  172.       draw_text(rect, medal[0])
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ○ 背景の描画
  177.   #--------------------------------------------------------------------------
  178.   def draw_background(rect)
  179.     temp_rect = rect.clone
  180.     temp_rect.width /= 2
  181.     contents.gradient_fill_rect(temp_rect, back_color2, back_color1)
  182.     temp_rect.x = temp_rect.width
  183.     contents.gradient_fill_rect(temp_rect, back_color1, back_color2)
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ○ 背景色 1 の取得
  187.   #--------------------------------------------------------------------------
  188.   def back_color1
  189.     Color.new(0, 0, 0, 192)
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ○ 背景色 2 の取得
  193.   #--------------------------------------------------------------------------
  194.   def back_color2
  195.     Color.new(0, 0, 0, 0)
  196.   end
  197. end
  198.  
  199. #==============================================================================
  200. # □ Window_Medal
  201. #==============================================================================
  202. class Window_Medal < Window_Selectable
  203.   #--------------------------------------------------------------------------
  204.   # ● オブジェクト初期化
  205.   #--------------------------------------------------------------------------
  206.   def initialize(x, y, width, height)
  207.     super
  208.     refresh
  209.     select(0)
  210.     activate
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 桁数の取得
  214.   #--------------------------------------------------------------------------
  215.   def col_max
  216.     return 1
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 項目数の取得
  220.   #--------------------------------------------------------------------------
  221.   def item_max
  222.     @data ? @data.size : 1
  223.   end
  224.   #--------------------------------------------------------------------------
  225.   # ● アイテムの取得
  226.   #--------------------------------------------------------------------------
  227.   def item
  228.     @data && index >= 0 ? @data[index] : nil
  229.   end
  230.   #--------------------------------------------------------------------------
  231.   # ● アイテムリストの作成
  232.   #--------------------------------------------------------------------------
  233.   def make_item_list
  234.     @data = $game_party.medals
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ● 項目の描画
  238.   #--------------------------------------------------------------------------
  239.   def draw_item(index)
  240.     item = @data[index]
  241.     medal = TMMEDAL::MEDAL_DATA[item[0]]
  242.     rect = item_rect(index)
  243.     draw_icon(medal[1], rect.x, rect.y)
  244.     rect.x += 24
  245.     rect.width -= 216
  246.     draw_text(rect, medal[0])
  247.     rect.x = contents.width - 192
  248.     rect.width = 192
  249.     draw_text(rect, item[1], 2)
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● ヘルプテキスト更新
  253.   #--------------------------------------------------------------------------
  254.   def update_help
  255.     if item
  256.       medal = TMMEDAL::MEDAL_DATA[item[0]]
  257.       text = medal[2]
  258.       @help_window.set_text(text)
  259.     end
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● リフレッシュ
  263.   #--------------------------------------------------------------------------
  264.   def refresh
  265.     make_item_list
  266.     create_contents
  267.     draw_all_items
  268.   end
  269. end
  270.  
  271. #==============================================================================
  272. # ■ Scene_Map
  273. #==============================================================================
  274. class Scene_Map
  275.   #--------------------------------------------------------------------------
  276.   # ● 全ウィンドウの作成
  277.   #--------------------------------------------------------------------------
  278.   alias tmmedal_scene_map_create_all_windows create_all_windows
  279.   def create_all_windows
  280.     tmmedal_scene_map_create_all_windows
  281.     create_medal_window
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ○ メダルウィンドウの作成
  285.   #--------------------------------------------------------------------------
  286.   def create_medal_window
  287.     @medal_window = Window_MedalInfo.new
  288.   end
  289. end
  290.  
  291. #==============================================================================
  292. # ■ Scene_Menu
  293. #==============================================================================
  294. class Scene_Menu
  295.   #--------------------------------------------------------------------------
  296.   # ● コマンドウィンドウの作成
  297.   #--------------------------------------------------------------------------
  298.   alias tmmedal_scene_menu_create_command_window create_command_window
  299.   def create_command_window
  300.     tmmedal_scene_menu_create_command_window
  301.     @command_window.set_handler(:medal, method(:command_medal))
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ○ コマンド[メダル]
  305.   #--------------------------------------------------------------------------
  306.   def command_medal
  307.     SceneManager.call(Scene_Medal)
  308.   end
  309. end
  310.  
  311. #==============================================================================
  312. # □ Scene_Medal
  313. #==============================================================================
  314. class Scene_Medal < Scene_MenuBase
  315.   #--------------------------------------------------------------------------
  316.   # ● 開始処理
  317.   #--------------------------------------------------------------------------
  318.   def start
  319.     super
  320.     create_help_window
  321.     create_item_window
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ○ アイテムウィンドウの作成
  325.   #--------------------------------------------------------------------------
  326.   def create_item_window
  327.     wy = @help_window.height
  328.     wh = Graphics.height - wy
  329.     @item_window = Window_Medal.new(0, wy, Graphics.width, wh)
  330.     @item_window.viewport = @viewport
  331.     @item_window.help_window = @help_window
  332.     @item_window.set_handler(:cancel, method(:return_scene))
  333.   end
  334. end


我想要加点奖励在里头,
例:获得一号成就可以拿一瓶药水。
有哪位大神可以提供以下思路?多谢!
究极半吊子
《重生学校》同人作:https://rpg.blue/thread-493882-1-1.html

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21484
在线时间
9389 小时
注册时间
2012-6-19
帖子
7114

开拓者短篇九导演组冠军

2
发表于 2016-3-26 11:59:27 | 只看该作者
这成就又不是自动获得的,你在获得成就的那个事件指令后加一个获得物品不就结了

点评

刚才发现的,本来想打个自行解决的....被你抢了先 T T 不过还是多谢喵大能够照顾我...  发表于 2016-3-26 12:02

评分

参与人数 1星屑 +100 收起 理由
丿梁丶小柒 + 100 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-28 06:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表