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

Project1

 找回密码
 注册会员
搜索

關於成就腳本一些問題

查看数: 288 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-5-22 13:31

正文摘要:

本帖最后由 BTF060 于 2025-5-22 13:48 编辑 是關於tomoaky老師成就腳本的問題 想讓未獲得的成就顯然???的提示 但是我自己的沒有這種效果囧 然後獲得過的成就也沒辨法永久存在…… 請問怎麼改? #======== ...

回复

百里_飞柳 发表于 5 天前
BTF060 发表于 2025-5-28 21:28
嗯……stack level too deep是解決了,但是上面那個顯示underined method的還是沒有解決,就是那個
我什 ...

改成这样,只有是数组时才会执行成就获得,应该就可以了
  1. class << DataManager
  2.   #--------------------------------------------------------------------------
  3.   # ● 设置新游戏
  4.   #--------------------------------------------------------------------------
  5.   alias tomoaky_medal_setup_new_game setup_new_game
  6.   def setup_new_game
  7.     tomoaky_medal_setup_new_game
  8.     if $game_variables[35].is_a?(Array)
  9.       $game_variables[35].each { |id| $game_party.gain_medal_no_hint(id) }
  10.     end
  11.   end
  12. end
  13. #-------------------------------------------------------------------------------
  14. class Game_System
  15.   #--------------------------------------------------------------------------
  16.   # ● 读档后的处理
  17.   #--------------------------------------------------------------------------
  18.   alias tomoaky_medal_on_after_load  on_after_load
  19.   def on_after_load
  20.     tomoaky_medal_on_after_load
  21.     if $game_variables[35].is_a?(Array)
  22.       $game_variables[35].each { |id| $game_party.gain_medal_no_hint(id) }
  23.     end
  24.   end
  25. end
复制代码

点评

好的解決了,感謝老鷹老師( ´∀`)  发表于 3 天前
BTF060 发表于 6 天前
百里_飞柳 发表于 2025-5-27 22:43
1. 我的都是直接在原始脚本下再新建一页粘贴进去,不要修改原始脚本,
比如那个 全局变量开关 脚本,就不 ...

嗯……stack level too deep是解決了,但是上面那個顯示underined method的還是沒有解決,就是那個
  1. class << DataManager
  2.   #--------------------------------------------------------------------------
  3.   # ● 设置新游戏
  4.   #--------------------------------------------------------------------------
  5.   alias tomoaky_medal_setup_new_game setup_new_game
  6.   def setup_new_game
  7.     tomoaky_medal_setup_new_game
  8.     $game_variables[1].each { |id| $game_party.gain_medal_no_hint(id) }
  9.   end
  10. end
  11. #-------------------------------------------------------------------------------
  12. class Game_System
  13.   #--------------------------------------------------------------------------
  14.   # ● 读档后的处理
  15.   #--------------------------------------------------------------------------
  16.   alias tomoaky_medal_on_after_load  on_after_load
  17.   def on_after_load
  18.     tomoaky_medal_on_after_load
  19.     $game_variables[1].each { |id| $game_party.gain_medal_no_hint(id) }
  20.   end
  21. end
复制代码

我什麼都還沒改就報錯了0.0
但是刪掉就沒問題,這個實在不行的話是可以直接刪掉的對吧?只是需要手動emmm
那個變量是要先把gain_medal(0) 寫上去 然後用 save_vs_data 就可以保存成就,不用打開開關的嗎?

点评

好的好的,感恩  发表于 5 天前
VAR = [35] 就好了,不要读取其它变量,省的日后冲突出问题  发表于 5 天前
$game_variables[1] 要改成 $game_variables[35],我写1是作为示例啦,同样的,vid = 1 中的1也要改成35  发表于 5 天前
其實我有點不太懂 VAR = [99, 1] 那個 ,1 的作用,我使用的變量ID是35,所以我打的VAR = [35, 1] 是可以的吧?(不好意思我真的是腳本小白,打擾很抱歉囧)  发表于 6 天前
百里_飞柳 发表于 7 天前
BTF060 发表于 2025-5-27 19:08
我不好意思我又來打擾了囧…
我按照您的方法把代碼都加了進去
然後全局變量的腳本又出了問題囧…

1. 我的都是直接在原始脚本下再新建一页粘贴进去,不要修改原始脚本,
比如那个 全局变量开关 脚本,就不要修改它原本的内容了,不然就没用了……

2. 这个 遊戲共用變數 我看了下,只支持开关和数字变量这种原始类型,不支持数组,
所以你设置的要存储成就数组的变量ID不要在它的启用范围内了。
直接用  全局变量开关 的 save_vs_data 保存,然后在 VAR = [99] 里面加入你要存储成就数组的变量ID,比如 VAR = [99, 1] 。

3. 报错 stack level too deep 是因为你直接改了 全局变量开关 里的内容,粘贴原始版本的,然后把我的放在它下面的新增一页里
百里_飞柳 发表于 2025-5-22 13:31:34
本帖最后由 百里_飞柳 于 2025-5-26 20:04 编辑

第一个问题这样改下:
  1. class Window_Medal
  2.   #--------------------------------------------------------------------------
  3.   # ● アイテムリストの作成
  4.   #--------------------------------------------------------------------------
  5.   def make_item_list
  6.     # 调整:修改为显示全部成就
  7.     #@data = $game_party.medals
  8.     @data = TMMEDAL::MEDAL_DATA.keys
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 項目の描画
  12.   #--------------------------------------------------------------------------
  13.   def draw_item(index)
  14.     # 调整:修改为显示全部成就,但未解锁的显示为???
  15.     #item = @data[index]
  16.     #medal = TMMEDAL::MEDAL_DATA[item[0]]
  17.     id = @data[index]
  18.     data = $game_party.medals.select { |v| v[0] == id }[0]
  19.     if data == nil
  20.       # 这里的第一个字符串是未解锁时显示的名称,第二个数字是图标ID,第三个无意义
  21.       medal = ["???", 0, ""]
  22.       item = [id, ""]
  23.     else
  24.       medal = TMMEDAL::MEDAL_DATA[id]
  25.       item = [id, data[1]]
  26.     end
  27.    
  28.     rect = item_rect(index)
  29.     draw_icon(medal[1], rect.x, rect.y)
  30.     rect.x += 24
  31.     rect.width -= 216
  32.     draw_text(rect, medal[0])
  33.     rect.x = contents.width - 192
  34.     rect.width = 192
  35.     draw_text(rect, item[1], 2)
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● ヘルプテキスト更新
  39.   #--------------------------------------------------------------------------
  40.   def update_help
  41.     if item
  42.       # 调整:未解锁成就显示特别的帮助文本
  43.       #medal = TMMEDAL::MEDAL_DATA[item[0]]
  44.       #text = medal[2]
  45.       data = $game_party.medals.select { |v| v[0] == item }[0]
  46.       if data == nil
  47.         # 这里设置未解锁成就的帮助文本
  48.         text = "这个成就还未解锁……"
  49.       else
  50.         text = TMMEDAL::MEDAL_DATA[item][2]
  51.       end
  52.       
  53.       @help_window.set_text(text)
  54.     end
  55.   end
  56. end
复制代码


第二个问题,你需要研究任意一个 全局变量 脚本
1. 将你每次解锁的成就存入一个数组中,比如
  1. # 先将游戏变量转为数组
  2. $game_variables[1] = [] if $game_variables[1] == 0
  3. # 存入你解锁的成就,比如这次是 0
  4. $game_variables[1].push(0)
  5. # 去重,防止多次存入
  6. $game_variables[1].uniq!
复制代码

* 或者,你也可以直接在脚本里 gain_medal 方法里修改
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ○ メダルの獲得
  3.   #--------------------------------------------------------------------------
  4.   def gain_medal(medal_id)
  5.     return if @medals.any? {|medal| medal[0] == medal_id }
  6.     t = Time.now.strftime(" (%Y/%m/%d %H:%M)")
  7.     @medals.push([medal_id, t])
  8.     @new_medals.push([medal_id, t])
  9.  
  10.     vid = 1  # 所保存的变量ID
  11.     # 如果不是数组,则强制覆盖为数组
  12.     $game_variables[vid] = [] if !$game_variables[vid].is_a?(Array)
  13.     $game_variables[vid].push(medal_id)  # 将当前解锁的成就序号存入变量
  14.     $game_variables[vid].uniq!  # 去重
  15.   end

2. 调用 全局变量 脚本的保存,将这个变量存入独立的文件中
3. 在新游戏/读档后,调用 全局变量 脚本的读取,将存入了独立文件中的 $game_variables[1] 覆盖当前游戏中的$game_variables[1]
4. 依据覆盖后的$game_variables[1]中的值,再次调用成就脚本的增加指令
  1. $game_variables[1].each do |id|
  2.   $game_party.gain_medal_no_hint(id)
  3. end
复制代码

* 可以给原脚本加个没有提示的成就增加方法,避免每次读档都提示一大堆成就新增:
  1. class Game_Party
  2.   #--------------------------------------------------------------------------
  3.   # ○ メダルの獲得
  4.   #--------------------------------------------------------------------------
  5.   def gain_medal_no_hint(medal_id)
  6.     gain_medal(medal_id)
  7.     # 更新:清除存储新成就的变量即可
  8.     @new_medals.clear
  9.   end
  10. end
复制代码

* 可以在脚本里加入,避免每次都手动写一遍
   记得要放在全局变量的脚本之下,确保先读取了全局变量,再进行这里的成就获取
RUBY 代码复制
  1. class << DataManager
  2.   #--------------------------------------------------------------------------
  3.   # ● 设置新游戏
  4.   #--------------------------------------------------------------------------
  5.   alias tomoaky_medal_setup_new_game setup_new_game
  6.   def setup_new_game
  7.     tomoaky_medal_setup_new_game
  8.     $game_variables[1].each { |id| $game_party.gain_medal_no_hint(id) }
  9.   end
  10. end
  11. #-------------------------------------------------------------------------------
  12. class Game_System
  13.   #--------------------------------------------------------------------------
  14.   # ● 读档后的处理
  15.   #--------------------------------------------------------------------------
  16.   alias tomoaky_medal_on_after_load  on_after_load
  17.   def on_after_load
  18.     tomoaky_medal_on_after_load
  19.     $game_variables[1].each { |id| $game_party.gain_medal_no_hint(id) }
  20.   end
  21. end

这样就能制作多存档通用的成就了
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2025-6-3 15:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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