Project1

标题: 技能物品页面做选择项 [打印本页]

作者: guoxiaomi    时间: 2019-8-24 02:07
标题: 技能物品页面做选择项
本帖最后由 guoxiaomi 于 2019-8-24 02:31 编辑

现在很流行工具人的说法,在RMXP中也可以简单的召唤工具人帮你完成一些任务……简单的说就是以下3步:

1. 工具人角色加入到队伍里
2. 呼叫技能页面,即Scene_Skill
3. 修改页面在按下 B 键的行为,改为移除工具人,并返回地图画面(Scene_Map)

当然在操作之前可以对工具人进行一些设定和修改,大致做法如下:
技能页面
1. 事件脚本,呼叫技能画面:
  1. $game_party.actors.push($game_actors[10])
  2. $scene = Scene_Skill.new(-1)
复制代码

2. 事件脚本,修改当前技能画面的 update_skill 方法
  1. class << $scene
  2.   alias _2019_update_skill update_skill
  3.   def update_skill
  4.     _2019_update_skill
  5.     if $scene.is_a?(Scene_Menu)
  6.       $scene = Scene_Map.new
  7.       $game_party.actors.pop
  8.     end
  9.   end
  10. end
复制代码

3. (可选)事件脚本,用于修改要显示的技能:
  1. skill = $data_skills[100]
  2. skill.name = "Choice 1"
  3. skill.description = "Reason For Choice 1"
  4. skill.common_event_id = 1
复制代码

此事件触发的效果是,从10号角色【工具人】的技能中选择一个使用,或者按下 B 键退回到地图画面。

当你需要玩家做出选择时就可以使用此方案,配合第 1 步直接修改 $data_skills[skill_id] 可以自定义显示不同的内容,以及对应的公共事件ID都可以修改。
Scene_Skill示意图:

哦,你问我 HP和SP怎么修改,$data_system.words.hp 和 $data_system.words.sp,改完了记得要改回来……

这里只是给喜欢用原始技能页面的人提供一个思路,启发来自于此贴的问题:https://rpg.blue/thread-477995-1-1.html

请注意,技能页面和下面提到的物品页面,除了按下 B 键返回地图而不是菜单页面外,和正常的页面没有区别,比如:对于单体目标会呼叫 target 窗口,不能使用的技能/物品会显示灰色等

物品页面
如果你更喜欢物品页面,可以这样操作:
1.
  1. $scene = Scene_Item.new
  2. class << $scene
  3.   def save_items
  4.     @items = $game_party.
  5.       instance_variable_get(:@items)
  6.   end
  7.   def load_items
  8.     $game_party.instance_variable_set(
  9.       :@items, @items
  10.     )
  11.   end
  12. end
复制代码

2.
  1. class << $scene
  2.   alias _toolsman_update_item update_item
  3.   def update_item
  4.     _toolsman_update_item
  5.     if $scene.is_a?(Scene_Menu)
  6.       load_items
  7.       $scene = Scene_Map.new
  8.     end
  9.   end
  10. end
复制代码

3. 新的物品仓库是 10 个 1 号物品,1 个 2 号物品
  1. $scene.save_items
  2. $game_party.instance_variable_set(:@items,
  3.   1 => 10, 2 => 1
  4. )
复制代码

作者: 灯笼菜刀王    时间: 2019-8-24 10:25
原来还能这样用,  那改$data_XX的值能有效到什么程度呢? 比如临时改POWER, 那是只限这场战斗, $scene切换就恢复,  还是能持续到本次游戏结束?
作者: guoxiaomi    时间: 2019-8-24 16:23
本帖最后由 guoxiaomi 于 2019-8-24 16:25 编辑

插件脚本版(未测试):

RUBY 代码复制
  1. # encoding: utf-8
  2. # How to Use
  3. # 1. $scene = Scene_Skill_Toolsman(10)
  4. # 2. $scene = Scene_Item_Toolsman(1 => 10, 2 => 1)
  5.  
  6. class Scene_Skill_Toolsman < Scene_Skill
  7.   def initialize(actor_id)
  8.     @actor = $game_actors[actor_id]
  9.     $game_party.actors.push(@actor)
  10.     super(-1, 0)
  11.   end
  12.  
  13.   def update_skill
  14.     super
  15.     if $scene.is_a?(Scene_Menu)
  16.       $scene = Scene_Map.new
  17.       $game_party.actors.delete(@actor)
  18.     end
  19.   end
  20. end
  21.  
  22. class Scene_Item_Toolsman < Scene_Item
  23.   def initialize(items = {})
  24.     @items = $game_party.instance_variable_get(:@items)
  25.     $game_party.instance_variable_set(:@items, items)
  26.     super()
  27.   end
  28.  
  29.   def update_item
  30.     super
  31.     if $scene.is_a?(Scene_Menu)
  32.       $scene = Scene_Map.new
  33.       $game_party.instance_variable_set(:@items, @items)
  34.     end
  35.   end
  36. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1