Project1

标题: 如何按 X/ESC 键后调用公共事件 [打印本页]

作者: ylm2003224    时间: 2016-8-13 12:38
标题: 如何按 X/ESC 键后调用公共事件
本帖最后由 RyanBern 于 2016-8-13 21:47 编辑

如何按x不出来一个莱单,而是调用一个公共事件
如何按esc不出来一个莱单,而是调用一个公共事件
注:x,esc调用的不是同一个公共事件
作者: 寂寞鱼子酱    时间: 2016-8-13 15:43
这段脚本放在Scene_Map 第158行
RUBY 代码复制
  1. alias old_update_call_menu update_call_menu
  2.   def update_call_menu
  3.    if Input.trigger?(Input::B)                        # 按下ESC键的情况下
  4.       return if $game_map.interpreter.running?        # 判断是否有事件正在执行
  5.       return if $game_system.menu_disabled            # 判断是否禁止菜单呼叫
  6.       $game_temp.common_event_id = 1                 # 这里填需要执行的公共事件的编号
  7.     end
  8.   end

作者: 2357691704    时间: 2016-8-13 16:10
本帖最后由 2357691704 于 2016-8-13 16:40 编辑

这个需要全键盘脚本和全键盘扩展dll文件(MaskKey.dll 附件要解压后放在游戏目录),还有你要把游戏按键esc键设为空(进入游戏后按f1,把键盘esc设为”—“就行了),改为在地图中按游戏A键(进入游戏后按f1,自己喜欢那个按键就设为A键)打开菜单,按游戏b键(即x键)执行1号公共事件,长按esc(注重是长按,没办法,全键盘脚本不够完美)键执行2号公共事件,公共事件编号自行修改。
RUBY 代码复制
  1. #全键盘脚本
  2. #==============================================================================
  3. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  4. #==============================================================================
  5.  
  6. #============================================================================
  7. # ■ Keyboard Script
  8. #----------------------------------------------------------------------------
  9. #  By: Cybersam
  10. #   Date: 25/05/05
  11. #   Version 4
  12. #============================================================================
  13. # 66对此脚本使用方法的说明(可能不是很准确,反正大体能用):
  14. #
  15. # ★、Kboard.keyboard(键位)  返回是否按下这个键的判断。
  16. #     比如条件分歧:Kboard.keyboard($R_Key_H)
  17. #                   则当按下键盘H键的时候条件分歧成立
  18. #
  19. # ★、Kboard.keyb(键位) == 1 当连续按住某键返回真,否则为false
  20. #     比如条件分歧:Kboard.keyb($R_Key_U) == 1
  21. #                   则当持续按下键盘U的时候条件分歧成立
  22. #
  23. # ★、Kboard.key(键位,1) 似乎可以做开关用。按下一次变为true,再按变false
  24. #============================================================================
  25.  
  26. module Kboard
  27.   #==========================================================================
  28.   # 以下是全键盘按键列表
  29.   #--------------------------------------------------------------------------
  30.   $Rmouse_BUTTON_L = 0x01        # left mouse button
  31.   $Rmouse_BUTTON_R = 0x02        # right mouse button
  32.   $Rmouse_BUTTON_M = 0x04        # middle mouse button
  33.   $Rmouse_BUTTON_4 = 0x05        # 4th mouse button
  34.   $Rmouse_BUTTON_5 = 0x06        # 5th mouse button
  35.   #--------------------------------------------------------------------------
  36.   $R_Key_BACK      = 0x08        # BACKSPACE key
  37.   $R_Key_TAB       = 0x09        # TAB key
  38.   $R_Key_RETURN    = 0x0D        # ENTER key
  39.   $R_Key_SHIFT     = 0x10        # SHIFT key
  40.   $R_Key_CTLR      = 0x11        # CTLR key
  41.   $R_Key_ALT       = 0x12        # ALT key
  42.   $R_Key_PAUSE     = 0x13        # PAUSE key
  43.   $R_Key_CAPITAL   = 0x14        # CAPS LOCK key
  44.   $R_Key_ESCAPE    = 0x1B        # ESC key
  45.   $R_Key_SPACE     = 0x20        # SPACEBAR
  46.   $R_Key_PRIOR     = 0x21        # PAGE UP key
  47.   $R_Key_NEXT      = 0x22        # PAGE DOWN key
  48.   $R_Key_END       = 0x23        # END key
  49.   $R_Key_HOME      = 0x24        # HOME key
  50.   $R_Key_LEFT      = 0x25        # LEFT ARROW key
  51.   $R_Key_UP        = 0x26        # UP ARROW key
  52.   $R_Key_RIGHT     = 0x27        # RIGHT ARROW key
  53.   $R_Key_DOWN      = 0x28        # DOWN ARROW key
  54.   $R_Key_SELECT    = 0x29        # SELECT key
  55.   $R_Key_PRINT     = 0x2A        # PRINT key
  56.   $R_Key_SNAPSHOT  = 0x2C        # PRINT SCREEN key
  57.   $R_Key_INSERT    = 0x2D        # INS key
  58.   $R_Key_DELETE    = 0x2E        # DEL key
  59.   #--------------------------------------------------------------------------
  60.   $R_Key_0         = 0x30        # 0 key
  61.   $R_Key_1         = 0x31        # 1 key
  62.   $R_Key_2         = 0x32        # 2 key
  63.   $R_Key_3         = 0x33        # 3 key
  64.   $R_Key_4         = 0x34        # 4 key
  65.   $R_Key_5         = 0x35        # 5 key
  66.   $R_Key_6         = 0x36        # 6 key
  67.   $R_Key_7         = 0x37        # 7 key
  68.   $R_Key_8         = 0x38        # 8 key
  69.   $R_Key_9         = 0x39        # 9 key
  70.   #--------------------------------------------------------------------------
  71.   $R_Key_A         = 0x41        # A key
  72.   $R_Key_B         = 0x42        # B key
  73.   $R_Key_C         = 0x43        # C key
  74.   $R_Key_D         = 0x44        # D key
  75.   $R_Key_E         = 0x45        # E key
  76.   $R_Key_F         = 0x46        # F key
  77.   $R_Key_G         = 0x47        # G key
  78.   $R_Key_H         = 0x48        # H key
  79.   $R_Key_I         = 0x49        # I key
  80.   $R_Key_J         = 0x4A        # J key
  81.   $R_Key_K         = 0x4B        # K key
  82.   $R_Key_L         = 0x4C        # L key
  83.   $R_Key_M         = 0x4D        # M key
  84.   $R_Key_N         = 0x4E        # N key
  85.   $R_Key_O         = 0x4F        # O key
  86.   $R_Key_P         = 0x50        # P key
  87.   $R_Key_Q         = 0x51        # Q key
  88.   $R_Key_R         = 0x52        # R key
  89.   $R_Key_S         = 0x53        # S key
  90.   $R_Key_T         = 0x54        # T key
  91.   $R_Key_U         = 0x55        # U key
  92.   $R_Key_V         = 0x56        # V key
  93.   $R_Key_W         = 0x57        # W key
  94.   $R_Key_X         = 0x58        # X key
  95.   $R_Key_Y         = 0x59        # Y key
  96.   $R_Key_Z         = 0x5A        # Z key
  97.   #--------------------------------------------------------------------------
  98.   $R_Key_LWIN      = 0x5B        # Left Windows key (Microsoft Natural keyboard)
  99.   $R_Key_RWIN      = 0x5C        # Right Windows key (Natural keyboard)
  100.   $R_Key_APPS      = 0x5D        # Applications key (Natural keyboard)
  101.   #--------------------------------------------------------------------------
  102.   $R_Key_NUMPAD0   = 0x60        # Numeric keypad 0 key
  103.   $R_Key_NUMPAD1   = 0x61        # Numeric keypad 1 key
  104.   $R_Key_NUMPAD2   = 0x62        # Numeric keypad 2 key
  105.   $R_Key_NUMPAD3   = 0x63        # Numeric keypad 3 key
  106.   $R_Key_NUMPAD4   = 0x64        # Numeric keypad 4 key
  107.   $R_Key_NUMPAD5   = 0x65        # Numeric keypad 5 key
  108.   $R_Key_NUMPAD6   = 0x66        # Numeric keypad 6 key
  109.   $R_Key_NUMPAD7   = 0x67        # Numeric keypad 7 key
  110.   $R_Key_NUMPAD8   = 0x68        # Numeric keypad 8 key
  111.   $R_Key_NUMPAD9  = 0x69        # Numeric keypad 9 key
  112.   $R_Key_MULTIPLY  = 0x6A        # Multiply key (*)
  113.   $R_Key_ADD       = 0x6B        # Add key (+)
  114.   $R_Key_SEPARATOR = 0x6C        # Separator key
  115.   $R_Key_SUBTRACT  = 0x6D        # Subtract key (-)
  116.   $R_Key_DECIMAL   = 0x6E        # Decimal key
  117.   $R_Key_DIVIDE    = 0x6F        # Divide key (/)
  118.   #--------------------------------------------------------------------------
  119.   $R_Key_F1        = 0x70        # F1 key
  120.   $R_Key_F2        = 0x71        # F2 key
  121.   $R_Key_F3        = 0x72        # F3 key
  122.   $R_Key_F4        = 0x73        # F4 key
  123.   $R_Key_F5        = 0x74        # F5 key
  124.   $R_Key_F6        = 0x75        # F6 key
  125.   $R_Key_F7        = 0x76        # F7 key
  126.   $R_Key_F8        = 0x77        # F8 key
  127.   $R_Key_F9        = 0x78        # F9 key
  128.   $R_Key_F10       = 0x79        # F10 key
  129.   $R_Key_F11       = 0x7A        # F11 key
  130.   $R_Key_F12       = 0x7B        # F12 key
  131.   #--------------------------------------------------------------------------
  132.   $R_Key_NUMLOCK   = 0x90        # NUM LOCK key
  133.   $R_Key_SCROLL    = 0x91        # SCROLL LOCK key
  134.   #--------------------------------------------------------------------------
  135.   $R_Key_LSHIFT    = 0xA0        # Left SHIFT key
  136.   $R_Key_RSHIFT    = 0xA1        # Right SHIFT key
  137.   $R_Key_LCONTROL  = 0xA2        # Left CONTROL key
  138.   $R_Key_RCONTROL  = 0xA3        # Right CONTROL key
  139.   $R_Key_L_ALT    = 0xA4        # Left ALT key
  140.   $R_Key_R_ALT    = 0xA5        # Right ALT key
  141.   #--------------------------------------------------------------------------
  142.   $R_Key_SEP      = 0xBC        # , key
  143.   $R_Key_DASH      = 0xBD        # - key
  144.   $R_Key_DOTT      = 0xBE        # . Key
  145.   #--------------------------------------------------------------------------
  146.   GetKeyState = Win32API.new("user32","GetAsyncKeyState",['I'],'I')
  147.   GetKeyboardState = Win32API.new("user32","GetKeyState",['I'],'I')
  148.   GetSetKeyState = Win32API.new("user32","SetKeyboardState",['I'],'I')
  149.   #--------------------------------------------------------------------------
  150.   module_function
  151.   #--------------------------------------------------------------------------
  152.   def keyb(rkey)
  153.      if GetKeyState.call(rkey) != 0
  154.        return 1
  155.      end
  156.      return 0
  157.   end
  158.    #--------------------------------------------------------------------------
  159.   def keyboard(rkey)
  160.    GetKeyState.call(rkey) & 0x01 == 1
  161.     end
  162.   #--------------------------------------------------------------------------
  163.   def key(rkey, key = 0)
  164.     GetKeyboardState.call(rkey) & 0x01 == key #
  165.   end
  166. end
  167.  
  168. #==============================================================================
  169. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  170. #==============================================================================

#这个为地图画面脚本的修改(复制修改部分就行了)
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  处理地图画面的类。
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成活动块
    @spriteset = Spriteset_Map.new
    # 生成信息窗口
    @message_window = Window_Message.new
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放活动块
    @spriteset.dispose
    # 释放信息窗口
    @message_window.dispose
    # 标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 循环
    loop do
      # 按照地图、实例、主角的顺序刷新
      # (本更新顺序不会在满足事件的执行条件下成为给予角色瞬间移动
      #  的机会的重要因素)
      $game_map.update
      $game_system.map_interpreter.update
      $game_player.update
      # 系统 (计时器)、画面刷新
      $game_system.update
      $game_screen.update
      # 如果主角在场所移动中就中断循环
      unless $game_temp.player_transferring
        break
      end
      # 执行场所移动
      transfer_player
      # 处理过渡中的情况下、中断循环
      if $game_temp.transition_processing
        break
      end
    end
    # 刷新活动块
    @spriteset.update
    # 刷新信息窗口
    @message_window.update
    # 游戏结束的情况下
    if $game_temp.gameover
      # 切换的游戏结束画面
      $scene = Scene_Gameover.new
      return
    end
    # 返回标题画面的情况下
    if $game_temp.to_title
      # 切换到标题画面
      $scene = Scene_Title.new
      return
    end
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 执行过渡
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
          $game_temp.transition_name)
      end
    end
    # 显示信息窗口中的情况下
    if $game_temp.message_window_showing
      return
    end
    # 遇敌计数为 0 且、且遇敌列表不为空的情况下
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []
      # 不是在事件执行中或者禁止遇敌中
      unless $game_system.map_interpreter.running? or
             $game_system.encounter_disabled
        # 确定队伍
        n = rand($game_map.encounter_list.size)
        troop_id = $game_map.encounter_list[n]
        # 队伍有效的话
        if $data_troops[troop_id] != nil
          # 设置调用战斗标志
          $game_temp.battle_calling = true
          $game_temp.battle_troop_id = troop_id
          $game_temp.battle_can_escape = true
          $game_temp.battle_can_lose = false
          $game_temp.battle_proc = nil
        end
      end
    end
    ###########################下#############################
    #################################################################
    #---------------------------------------------------------------
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running?
        # 设置菜单调用标志以及 SE 演奏
        $game_temp.common_event_id = 1 #1号公共事件可改编号
      end
    end
    # 按下 A键的情况下
    if Input.trigger?(Input::A)
      # 不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running? or
             $game_system.menu_disabled
        # 设置菜单调用标志以及 SE 演奏
        $game_temp.menu_calling = true
        $game_temp.menu_beep = true
      end
    end
    if Kboard.keyboard($R_Key_ESCAPE)
      # 不是在事件执行中或菜单禁止中
      unless $game_system.map_interpreter.running?
        # 设置菜单调用标志以及 SE 演奏
        $game_temp.common_event_id = 2 #1号公共事件可改编号
      end
    end
    #-----------------------------------------------------------
    #################################################################
    ###########################上####################################
    # 调试模式为 ON 并且按下 F9 键的情况下
    if $DEBUG and Input.press?(Input::F9)
      # 设置调用调试标志
      $game_temp.debug_calling = true
    end
    # 不在主角移动中的情况下
    unless $game_player.moving?
      # 执行各种画面的调用
      if $game_temp.battle_calling
        call_battle
      elsif $game_temp.shop_calling
        call_shop
      elsif $game_temp.name_calling
        call_name
      elsif $game_temp.menu_calling
        call_menu
      elsif $game_temp.save_calling
        call_save
      elsif $game_temp.debug_calling
        call_debug
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 调用战斗
  #--------------------------------------------------------------------------
  def call_battle
    # 清除战斗调用标志
    $game_temp.battle_calling = false
    # 清除菜单调用标志
    $game_temp.menu_calling = false
    $game_temp.menu_beep = false
    # 生成遇敌计数
    $game_player.make_encounter_count
    # 记忆地图 BGM 、停止 BGM
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    # 演奏战斗开始 SE
    $game_system.se_play($data_system.battle_start_se)
    # 演奏战斗 BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到战斗画面
    $scene = Scene_Battle.new
  end
  #--------------------------------------------------------------------------
  # ● 调用商店
  #--------------------------------------------------------------------------
  def call_shop
    # 清除商店调用标志
    $game_temp.shop_calling = false
    # 矫正主角姿势
    $game_player.straighten
    # 切换到商店画面
    $scene = Scene_Shop.new
  end
  #--------------------------------------------------------------------------
  # ● 调用名称输入
  #--------------------------------------------------------------------------
  def call_name
    # 清除调用名称输入标志
    $game_temp.name_calling = false
    # 矫正主角姿势
    $game_player.straighten
    # 切换到名称输入画面
    $scene = Scene_Name.new
  end
  #--------------------------------------------------------------------------
  # ● 调用菜单
  #--------------------------------------------------------------------------
  def call_menu
    # 清除菜单调用标志
    $game_temp.menu_calling = false
    # 已经设置了菜单 SE 演奏标志的情况下
    if $game_temp.menu_beep
      # 演奏确定 SE
      $game_system.se_play($data_system.decision_se)
      # 清除菜单演奏 SE 标志
      $game_temp.menu_beep = false
    end
    # 矫正主角姿势
    $game_player.straighten
    # 切换到菜单画面
    $scene = Scene_Menu.new
  end
  #--------------------------------------------------------------------------
  # ● 调用存档
  #--------------------------------------------------------------------------
  def call_save
    # 矫正主角姿势
    $game_player.straighten
    # 切换到存档画面
    $scene = Scene_Save.new
  end
  #--------------------------------------------------------------------------
  # ● 调用调试
  #--------------------------------------------------------------------------
  def call_debug
    # 清除调用调试标志
    $game_temp.debug_calling = false
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 矫正主角姿势
    $game_player.straighten
    # 切换到调试画面
    $scene = Scene_Debug.new
  end
  #--------------------------------------------------------------------------
  # ● 主角的场所移动
  #--------------------------------------------------------------------------
  def transfer_player
    # 清除主角场所移动调试标志
    $game_temp.player_transferring = false
    # 移动目标与现在的地图有差异的情况下
    if $game_map.map_id != $game_temp.player_new_map_id
      # 设置新地图
      $game_map.setup($game_temp.player_new_map_id)
    end
    # 设置主角位置
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
    # 设置主角朝向
    case $game_temp.player_new_direction
    when 2  # 下
      $game_player.turn_down
    when 4  # 左
      $game_player.turn_left
    when 6  # 右
      $game_player.turn_right
    when 8  # 上
      $game_player.turn_up
    end
    # 矫正主角姿势
    $game_player.straighten
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 在生成活动块
    @spriteset.dispose
    @spriteset = Spriteset_Map.new
    # 处理过渡中的情况下
    if $game_temp.transition_processing
      # 清除过渡处理中标志
      $game_temp.transition_processing = false
      # 执行过渡
      Graphics.transition(20)
    end
    # 执行地图设置的 BGM、BGS 的自动切换
    $game_map.autoplay
    # 设置画面
    Graphics.frame_reset
    # 刷新输入信息
    Input.update
  end
end

捕获.PNG (8.17 KB, 下载次数: 19)

捕获.PNG

MaskKey.zip

9.65 KB, 下载次数: 35

全键盘扩展文件


作者: z23567761    时间: 2016-8-13 23:41
额,至于这么麻烦么,直接用事件不就好了
设置事件 并行执行
执行内容:
               禁止菜单
               执行开关[XXX]=ON
               独立开关A=ON
新建事件页 打开开关A=ON
去数据库公共事件
并行
执行内容 :
                B键按下时
                循环
                等待1帧
                XXXXX[你要执行的内容]

                B键按下时
                中断循环
                分歧结束

                以上反复
                分歧结束
【有特殊需求的话再回复我,我再补充】




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