查看: 2234|回复: 7

[已经解决] 独立公共事件执行器脚本的问题

[复制链接]
梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

发表于 2015-7-3 11:39:53 | 显示全部楼层 |阅读模式

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

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

×
228.png
如图。在图中增加了任务成就和装备强化三个选项,但是没有存档选项。求解决方案。脚本见下。
  1. #==============================================================================
  2. # ■ Game_Interpreter_Self
  3. #------------------------------------------------------------------------------
  4. # 独立公共事件执行器
  5. #==============================================================================
  6. =begin

  7. 独立公共事件执行器用于随时执行公共事件,不受公共事件调用地方的限制。
  8. □使用方法:
  9. 1。将脚本插入main前。
  10. 2。在需要使用公共事件的地方
  11. 插入、
  12. GIS.new(公共事件ID)
  13. □可能的冲突:无
  14. 已经被改过兼容VA了。
  15. 原制作者为九夜神尊。
  16. =end

  17. class GIS < Game_Interpreter
  18.   def initialize(com_id)
  19.     @com_id = com_id
  20.     common_event = $data_common_events[@com_id]
  21.     setup(common_event.list)
  22.     update
  23.     clear
  24.   end
  25.   def command_117
  26.     if $data_common_events[@params[0]]
  27.       child = Game_Interpreter_Self.new(@params[0])
  28.       child.run
  29.     end
  30.   end
  31. end
  32. class Window_MenuCommand < Window_Command
  33.   def add_save_command
  34.     add_command("任务", :save, true)
  35.     add_command("技能强化", :save2, true)
  36.   end
  37.   def add_game_end_command
  38.     add_command("系统", :game_end)
  39.   end
  40. end
  41. class Scene_Menu < Scene_MenuBase
  42.   alias ccw_zabing create_command_window
  43.   def create_command_window
  44.     ccw_zabing
  45.     @command_window.set_handler(:save2,     method(:command_save2))
  46.   end
  47.   def command_save      
  48.     SceneManager.call(Scene_Task)
  49.   end
  50.   def command_save2
  51.     SceneManager.call(Scene_SUP)
  52.   end
  53. end
  54. class Scene_End < Scene_MenuBase
  55.   alias ccw_zabing create_command_window
  56.   def create_command_window
  57.     ccw_zabing
  58.     @command_window.set_handler(:to_load, method(:command_to_load))
  59.   end
  60.   def command_to_load
  61.     close_command_window
  62.     fadeout_all
  63.     SceneManager.call(Scene_Load)
  64.   end
  65. end
  66. class Window_GameEnd < Window_Command
  67.   alias mcl_zabing make_command_list
  68.   def make_command_list
  69.     mcl_zabing
  70.     add_command("读取档案",      :to_load)
  71.   end
  72. end
复制代码
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中

无限の剣制

梦石
0
星屑
10450
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2015-7-3 11:44:21 | 显示全部楼层
不用这个脚本,试试这个https://rpg.blue/home.php?mod=sp ... o=blog&id=14031
回复

使用道具 举报

梦石
0
星屑
50
在线时间
179 小时
注册时间
2013-12-8
回帖
91
发表于 2015-7-3 11:44:27 | 显示全部楼层
我怎么没看到你脚本里写了存档?
https://rpg.blue/home.php?mod=sp ... o=blog&id=12708顺便系统指令的话,喵呜喵前辈的就很好用,试试吧

全部RM技能点全都点到了做地图和写文本上了,别拦着我我准备去点那个专精点!(大义凛然状
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-7-3 12:08:10 | 显示全部楼层

コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。
在選単加上指令,選該指令執行公用事件
例:加上コンフィング到選単,執行公用事件 1,執行公用事件 2
List = [["コンフィング", 1, 2],
          ]



オリジナルサブメニュー=begin

▼ オリジナルサブメニュー ver. 1.0

RPGツクールVXAce用スクリプト

制作 : 木星ペンギン
URL  : http://woodpenguin.blog.fc2.com/

------------------------------------------------------------------------------
概要

□ コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。

------------------------------------------------------------------------------
備考

  □ コマンドは【並び替え】の下に追加されます。
  
  □ サブメニューの処理はイベントコマンドで実行されます。
   ・メインのコモンイベントの処理が終了した時点で、前の画面に戻ります。
   ・サブのコモンイベントは処理が終了しても最初から繰り返しません。
  
  □ イベントの移動などを実行した場合、新しくメニュー画面用のイベントが
     生成されます。
   ・座標 X:0 Y:0 にグラフィックを設定していない状態で生成されます。
  
  □ スクリプトコマンドで SceneManager.goto(Scene_Map) と実行すれば
     マップ画面まで戻ることが出来ます。
  
=end
module WdTk
module SubMenu
  #--------------------------------------------------------------------------
  # ● 追加する項目の設定
  #     配列にコマンド名、実行するコモンイベントID、
  #   並列処理を行うコモンイベントIDの順に設定する。
  #--------------------------------------------------------------------------
  List = [["コンフィング", 1, 2],
          ]
  
  
#//////////////////////////////////////////////////////////////////////////////
#
# 以降、変更する必要なし
#
#//////////////////////////////////////////////////////////////////////////////
end

  @material ||= []
  @material << :SubMenu
  def self.include?(sym)
    @material.include?(sym)
  end
end

#==============================================================================
# ■ Game_SubMenu_Character
#==============================================================================
class Game_SubMenu_Character < Game_Character
  #--------------------------------------------------------------------------
  # ● 通行可能判定
  #--------------------------------------------------------------------------
  def passable?(*)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 斜めの通行可能判定
  #--------------------------------------------------------------------------
  def diagonal_passable?(*)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 指定位置に移動
  #--------------------------------------------------------------------------
  def moveto(x, y)
    @x = x
    @y = y
    @real_x = @x
    @real_y = @y
    @prelock_direction = 0
    straighten
    update_bush_depth
  end
  #--------------------------------------------------------------------------
  # ● 画面 X 座標の取得
  #--------------------------------------------------------------------------
  def screen_x
    @real_x * 32 + 16
  end
  #--------------------------------------------------------------------------
  # ● 画面 Y 座標の取得
  #--------------------------------------------------------------------------
  def screen_y
    @real_y * 32 + 32 - shift_y - jump_height
  end
  #--------------------------------------------------------------------------
  # ● ジャンプ時の更新
  #--------------------------------------------------------------------------
  def update_jump
    @jump_count -= 1
    @real_x = (@real_x * @jump_count + @x) / (@jump_count + 1.0)
    @real_y = (@real_y * @jump_count + @y) / (@jump_count + 1.0)
    update_bush_depth
    if @jump_count == 0
      @real_x = @x
      @real_y = @y
    end
  end
  #--------------------------------------------------------------------------
  # ● 梯子判定
  #--------------------------------------------------------------------------
  def ladder?
    return false
  end
  #--------------------------------------------------------------------------
  # ● 茂み判定
  #--------------------------------------------------------------------------
  def bush?
    return false
  end
  #--------------------------------------------------------------------------
  # ● 地形タグの取得
  #--------------------------------------------------------------------------
  def terrain_tag
    return 0
  end
  #--------------------------------------------------------------------------
  # ● リージョン ID の取得
  #--------------------------------------------------------------------------
  def region_id
    return 0
  end
  #--------------------------------------------------------------------------
  # ● まっすぐに移動
  #     d       : 方向(2,4,6,8)
  #     turn_ok : その場での向き変更を許可
  #--------------------------------------------------------------------------
  def move_straight(d, turn_ok = true)
    @move_succeed = passable?(@x, @y, d)
    if @move_succeed
      set_direction(d)
      @x += d == 6 ? 1 : d == 4 ? -1 : 0
      @y += d == 2 ? 1 : d == 8 ? -1 : 0
      increase_steps
    elsif turn_ok
      set_direction(d)
    end
  end
  #--------------------------------------------------------------------------
  # ● 斜めに移動
  #     horz : 横方向(4 or 6)
  #     vert : 縦方向(2 or 8)
  #--------------------------------------------------------------------------
  def move_diagonal(horz, vert)
    @move_succeed = diagonal_passable?(x, y, horz, vert)
    if @move_succeed
      @x += horz == 6 ? 1 : horz == 4 ? -1 : 0
      @y += vert == 2 ? 1 : vert == 8 ? -1 : 0
      increase_steps
    end
    set_direction(horz) if @direction == reverse_dir(horz)
    set_direction(vert) if @direction == reverse_dir(vert)
  end
  #--------------------------------------------------------------------------
  # ● X 方向の距離計算
  #--------------------------------------------------------------------------
  def distance_x_from(x)
    @x - x
  end
  #--------------------------------------------------------------------------
  # ● Y 方向の距離計算
  #--------------------------------------------------------------------------
  def distance_y_from(y)
    @y - y
  end
end

#==============================================================================
# ■ Game_SubMenu_Interpreter
#==============================================================================
class Game_SubMenu_Interpreter < Game_Interpreter
  #--------------------------------------------------------------------------
  # ● イベントのセットアップ
  #--------------------------------------------------------------------------
  def setup(list, scene)
    clear
    @Scene = scene
    @list = list
    create_fiber
  end
  #--------------------------------------------------------------------------
  # ● 実行
  #--------------------------------------------------------------------------
  def run
    while @list[@index] do
      execute_command
      @index += 1
    end
    Fiber.yield
    @fiber = nil
  end
  #--------------------------------------------------------------------------
  # ● 画面系コマンドの対象を取得
  #--------------------------------------------------------------------------
  def screen
    @scene.screen
  end
  #--------------------------------------------------------------------------
  # ● キャラクターの取得
  #--------------------------------------------------------------------------
  def get_character(param)
    param > 0 ? @scene.get_event(param) : nil
  end
  #--------------------------------------------------------------------------
  # ● コモンイベント
  #--------------------------------------------------------------------------
  def command_117
    common_event = $data_common_events[@params[0]]
    if common_event
      child = Game_SubMenu_Interpreter.new(@depth + 1)
      child.setup(common_event.list, @scene)
      child.run
    end
  end
end

#==============================================================================
# ■ Window_MenuCommand
#==============================================================================
class Window_MenuCommand
  #--------------------------------------------------------------------------
  # ○ 独自コマンドの追加用
  #--------------------------------------------------------------------------
  alias _wdtk_submenu_add_original_commands add_original_commands
  def add_original_commands
    WdTk::SubMenu::List.each {|com| add_command(com[0], :submenu) if com }
  end
  #--------------------------------------------------------------------------
  # ● 選択項目の名前を取得
  #--------------------------------------------------------------------------
  def current_name
    current_data ? current_data[:name] : nil
  end
end

#==============================================================================
# ■ Spriteset_SubMenu
#==============================================================================
class Spriteset_SubMenu
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(scene)
    @scene = scene
    create_viewports
    @character_sprites = []
    @picture_sprites = []
    update
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの作成
  #--------------------------------------------------------------------------
  def create_viewports
    @viewport1 = Viewport.new
    @viewport2 = Viewport.new
    @viewport2.z = 50
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    dispose_characters
    @picture_sprites.compact.each {|sprite| sprite.dispose }
    dispose_viewports
  end
  #--------------------------------------------------------------------------
  # ● キャラクタースプライトの解放
  #--------------------------------------------------------------------------
  def dispose_characters
    @character_sprites.compact.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの解放
  #--------------------------------------------------------------------------
  def dispose_viewports
    @viewport1.dispose
    @viewport2.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_characters
    update_pictures
    update_viewports
  end
  #--------------------------------------------------------------------------
  # ● キャラクタースプライトの更新
  #--------------------------------------------------------------------------
  def update_characters
    @scene.events.each do |i, event|
      @character_sprites ||= Sprite_Character.new(@viewport1, event)
      @character_sprites.update
    end
  end
  #--------------------------------------------------------------------------
  # ● ピクチャスプライトの更新
  #--------------------------------------------------------------------------
  def update_pictures
    @scene.screen.pictures.each do |pic|
      @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      @picture_sprites[pic.number].update
    end
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの更新
  #--------------------------------------------------------------------------
  def update_viewports
    @viewport1.tone.set(@scene.screen.tone)
    @viewport1.ox = @scene.screen.shake
    @viewport2.color.set(@scene.screen.flash_color)
    @viewport1.update
    @viewport2.update
  end
end


#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu
  #--------------------------------------------------------------------------
  # ○ コマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias _wdtk_submenu_create_command_window create_command_window
  def create_command_window
    _wdtk_submenu_create_command_window
    @command_window.set_handler(:submenu, method(:command_submenu))
  end
  #--------------------------------------------------------------------------
  # ● コマンド[サブメニュー]
  #--------------------------------------------------------------------------
  def command_submenu
    param = WdTk::SubMenu::List.assoc(@command_window.current_name)
    if param
      SceneManager.call(Scene_ExSubMenu)
      SceneManager.scene.prepare(*param)
    else
      @command_window.activate
    end
  end
end

#==============================================================================
# ■ Scene_ExSubMenu
#==============================================================================
class Scene_ExSubMenu < Scene_MenuBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :screen
  attr_reader   :events
  #--------------------------------------------------------------------------
  # ● 準備
  #--------------------------------------------------------------------------
  def prepare(menu_name, main_id, sub_id)
    @screen = Game_Screen.new
    @main_interpreter = Game_SubMenu_Interpreter.new
    common_event = $data_common_events[main_id]
    @main_interpreter.setup(common_event.list, self) if common_event
    @sub_interpreter = Game_SubMenu_Interpreter.new
    common_event = $data_common_events[sub_id]
    @sub_interpreter.setup(common_event.list, self) if common_event
    @events = {}
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super
    @spriteset = Spriteset_SubMenu.new(self)
    create_message_window
    create_scroll_text_window
  end
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  def pre_terminate
    super
    pre_battle_scene if SceneManager.scene_is?(Scene_Battle)
    pre_title_scene  if SceneManager.scene_is?(Scene_Title)
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super
    @spriteset.dispose
    perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(基本)
  #--------------------------------------------------------------------------
  def update_basic
    super
    @main_interpreter.update
    return return_scene unless @main_interpreter.running?
    @sub_interpreter.update
    @events.each_value {|event| event.update }
    @spriteset.update
  end
  #--------------------------------------------------------------------------
  # ● 汎用フェード処理
  #--------------------------------------------------------------------------
  def fade_loop(duration)
    duration.times do |i|
      yield 255 * (i + 1) / duration
      update_basic
    end
  end
  #--------------------------------------------------------------------------
  # ● 画面のフェードイン
  #--------------------------------------------------------------------------
  def fadein(duration)
    fade_loop(duration) {|v| Graphics.brightness = v }
  end
  #--------------------------------------------------------------------------
  # ● 画面のフェードアウト
  #--------------------------------------------------------------------------
  def fadeout(duration)
    fade_loop(duration) {|v| Graphics.brightness = 255 - v }
  end
  #--------------------------------------------------------------------------
  # ● メッセージウィンドウの作成
  #--------------------------------------------------------------------------
  def create_message_window
    @message_window = Window_Message.new
  end
  #--------------------------------------------------------------------------
  # ● スクロール文章ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_scroll_text_window
    @scroll_text_window = Window_ScrollText.new
  end
  #--------------------------------------------------------------------------
  # ● バトル画面遷移の前処理
  #--------------------------------------------------------------------------
  def pre_battle_scene
    Graphics.update
    Graphics.freeze
    @spriteset.dispose_characters
    BattleManager.save_bgm_and_bgs
    BattleManager.play_battle_bgm
    Sound.play_battle_start
  end
  #--------------------------------------------------------------------------
  # ● タイトル画面遷移の前処理
  #--------------------------------------------------------------------------
  def pre_title_scene
    fadeout(60)
  end
  #--------------------------------------------------------------------------
  # ● 戦闘前トランジション実行
  #--------------------------------------------------------------------------
  def perform_battle_transition
    Graphics.transition(60, "Graphics/System/BattleStart", 100)
    Graphics.freeze
  end
  #--------------------------------------------------------------------------
  # ● イベントの取得
  #--------------------------------------------------------------------------
  def get_event(event_id)
    @events[event_id] ||= Game_SubMenu_Character.new
  end
end
回复

使用道具 举报

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

 楼主| 发表于 2015-7-3 19:53:10 | 显示全部楼层
1181770261 发表于 2015-7-3 11:44
我怎么没看到你脚本里写了存档?
https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id ...

因为不会RUBY所以没写存档。。
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复

使用道具 举报

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

 楼主| 发表于 2015-7-3 19:54:13 | 显示全部楼层
tseyik 发表于 2015-7-3 12:08
コモンイベントで作成したオリジナルのサブメニュー画面が作成できます。
在選単加上指令,選該指令執行公 ...

看不懂日文。。。对不起
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复

使用道具 举报

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

 楼主| 发表于 2015-7-3 19:55:34 | 显示全部楼层
VIPArcher 发表于 2015-7-3 11:44
不用这个脚本,试试这个https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id=14031

只看到物品的添加啊。事件怎么办?

点评

物品的使用效果中执行公共事件,参考范例工程中与队友对话功能的做法  发表于 2015-7-3 21:48
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复

使用道具 举报

梦石
0
星屑
254
在线时间
316 小时
注册时间
2015-7-2
回帖
1629

开拓者

 楼主| 发表于 2015-7-4 08:15:57 | 显示全部楼层
感谢喵呜喵前辈的范例工程。顺便看这些东西都有用就全抱走了~
测试你的东方project认知程度?那就来玩[url=https://store.steampowered.com/app/930840/TouHouAsked/]《东方百问》[/url]吧!
东方风自作曲认知企划绝赞咕咕咕中
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部