Project1

标题: 新手教程——在菜单添加“队友对话”项目 [打印本页]

作者: 夕阳武士    时间: 2010-12-25 18:16
标题: 新手教程——在菜单添加“队友对话”项目
新手教程——在主菜单添加“队友对话”项目
大家好~今天夕阳也要讲脚本了。夕阳学脚本时没有正式看过f1,所以只懂应用却不明白应用的道理,所以你问我什么也是徒劳了,我不懂怎么解释的。
好了不废话了,正文开始!
首先,我们打开scene-menu脚本,

夕阳建议第一次改脚本可以从title或menu改起,比较简单。
好了,看这里

我们在其中添加一项。。。。。。

然后看看效果

然后。。。

设置脚本的内容

然后设计公共事件

最后效果

这是范例: 队友对话.rar (597.48 KB, 下载次数: 591)
作者: 黄亦天    时间: 2010-12-25 18:32
本帖最后由 黄亦天 于 2010-12-25 18:43 编辑

公共事件不是可以直接运行么?
不设定成自动运行可以么?
(就是不使用开关)
作者: 617545297    时间: 2010-12-25 18:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: 黄亦天    时间: 2010-12-25 18:50
还想请教一下,如果使用了别的有修改菜单效果的脚本(某队伍脚本),是不是就要从那个脚本里改。
作者: 企鹅达达    时间: 2010-12-26 09:37
http://rpg.blue/thread-161180-1-1.html
扩展用 =.=
作者: 黄亦天    时间: 2011-1-4 17:05
本帖最后由 黄亦天 于 2011-1-4 17:52 编辑

报告(报错?):
公共事件的运行可以不使用开关。
脚本直接运行公共事件、公共事件运行条件设置为“无”就可以。
队友对话.rar (604.56 KB, 下载次数: 85)
作者: 一箭烂YiJL    时间: 2011-1-4 22:50
本帖最后由 一箭烂YiJL 于 2011-1-5 11:48 编辑

其实解释得不错了,只是没有详细说明调用其它东西是什么。
(就是$scene这全局变数,@Window_Command这种对象式的局部变量等等啦)
调用了公共事件就不用再开启开关(这个二选一,可是用公共事件可能会影响原本执行的公共事件哦~)
不过我提议一下,Scene_Leo的return_scene(函数)可以不用了。

这件东西好像不能用于多人的啊~我自己弄了一下(多人版哦~):
  1. #==============================================================================
  2. # ** Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  這個類用來執行顯示ESC選單畫面的程式。
  5. #==============================================================================

  6. class Scene_Menu < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # * 物件初始化
  9.   #     menu_index : 命令游標的起始位置
  10.   #--------------------------------------------------------------------------
  11.   def initialize(menu_index = 0)
  12.     @menu_index = menu_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # * 程式開始
  16.   #--------------------------------------------------------------------------
  17.   def start
  18.     super
  19.     create_menu_background
  20.     create_command_window
  21.     @gold_window = Window_Gold.new(0, 360)
  22.     @status_window = Window_MenuStatus.new(160, 0)
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # * 程式中止
  26.   #--------------------------------------------------------------------------
  27.   def terminate
  28.     super
  29.     dispose_menu_background
  30.     @command_window.dispose
  31.     @gold_window.dispose
  32.     @status_window.dispose
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # * 更新幀
  36.   #--------------------------------------------------------------------------
  37.   def update
  38.     super
  39.     update_menu_background
  40.     @command_window.update
  41.     @gold_window.update
  42.     @status_window.update
  43.     if @command_window.active
  44.       update_command_selection
  45.     elsif @status_window.active
  46.       update_actor_selection
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # * 創建命令視窗
  51.   #--------------------------------------------------------------------------
  52.   def create_command_window
  53.     s1 = Vocab::item
  54.     s2 = Vocab::skill
  55.     s3 = Vocab::equip
  56.     s4 = Vocab::status
  57.     s5 = Vocab::save
  58.     s6 = Vocab::game_end
  59.     s7 = "队友对话"
  60.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
  61.     @command_window.index = @menu_index
  62.     if $game_party.members.size == 0          # 如果無人在隊
  63.       @command_window.draw_item(0, false)     # 禁用[用品]
  64.       @command_window.draw_item(1, false)     # 禁用[技能]
  65.       @command_window.draw_item(2, false)     # 禁用[整備]
  66.       @command_window.draw_item(3, false)     # 禁用[狀態]
  67.     end
  68.     if $game_system.save_disabled             # 如果禁止存檔
  69.       @command_window.draw_item(4, false)     # 禁用[存檔]
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # * 更新指令選擇輸入資訊
  74.   #--------------------------------------------------------------------------
  75.   def update_command_selection
  76.     if Input.trigger?(Input::B)
  77.       Sound.play_cancel
  78.       $scene = Scene_Map.new
  79.     elsif Input.trigger?(Input::C)
  80.       if $game_party.members.size == 0 and @command_window.index < 4
  81.         Sound.play_buzzer
  82.         return
  83.       elsif $game_system.save_disabled and @command_window.index == 4
  84.         Sound.play_buzzer
  85.         return
  86.       end
  87.       Sound.play_decision
  88.       case @command_window.index
  89.       when 0       # 用品
  90.         $scene = Scene_Item.new
  91.       when 1,2,3,6 # 技能,整備,狀態,对话
  92.         start_actor_selection
  93.       when 4       # 存檔
  94.         $scene = Scene_File.new(true, false, false)
  95.       when 5       # 結束遊戲
  96.         $scene = Scene_End.new
  97.       end
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # * 開始接收主角選擇指令輸入資訊
  102.   #--------------------------------------------------------------------------
  103.   def start_actor_selection
  104.     @command_window.active = false
  105.     @status_window.active = true
  106.     if $game_party.last_actor_index < @status_window.item_max
  107.       @status_window.index = $game_party.last_actor_index
  108.     else
  109.       @status_window.index = 0
  110.     end
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # * 停止接收主角選擇指令輸入資訊
  114.   #--------------------------------------------------------------------------
  115.   def end_actor_selection
  116.     @command_window.active = true
  117.     @status_window.active = false
  118.     @status_window.index = -1
  119.   end
  120.   #--------------------------------------------------------------------------
  121.   # * 更新主角選擇指令輸入資訊
  122.   #--------------------------------------------------------------------------
  123.   def update_actor_selection
  124.     if Input.trigger?(Input::B)
  125.       Sound.play_cancel
  126.       end_actor_selection
  127.     elsif Input.trigger?(Input::C)
  128.       $game_party.last_actor_index = @status_window.index
  129.       Sound.play_decision
  130.       case @command_window.index
  131.       when 1  # 技能
  132.         $scene = Scene_Skill.new(@status_window.index)
  133.       when 2  # 整備
  134.         $scene = Scene_Equip.new(@status_window.index)
  135.       when 3  # 狀態
  136.         $scene = Scene_Status.new(@status_window.index)
  137.       when 6  # 对话
  138.         $scene = Scene_Map.new
  139.         @actor = $game_party.members[@status_window.index]
  140.         $game_switches[@actor.id] = true
  141.       end
  142.     end
  143.   end
  144. end
复制代码
重点在92行和138~142里。
和你的用法差不多(设置在公共事件):
1.并行处理
2.对应角色编号设置公共事件开关编号
3.在公共事件最后要有关闭上述的开关(重要)
4.不用对应事件编号,只需对应开关编号(重要)



我后来补充了以下内容:

让我来在解释一下:
@actor = $game_party.members[@status_window.index]
这一句的$game_party.members[x]就是人物基本讯息。
用@status_window.index就是选择窗口的选择位置。
这句$game_switches[@actor.id] = true
的@actor.id代表着主角ID。
其它的夕阳你应该能够解释得来。
还有,我可能会在这一帖再出一个加强的。(用新场景的)





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