查看: 67|回复: 0

[转载发布] 物品调用公共事件的合并——使用物品时输出物品编号

[复制链接]
  • TA的每日心情
    开心
    2024-5-10 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月三日(秋) | 显示全部楼层 |阅读模式
    个人认为公共事件是用在需要重复多次的批量指令上的。
    然而在游戏中,我们常常要通过使用物品实现某些功能,这些功能只需要简单的几个指令,却只能通过调用公共事件来实现,
    所以,“宝贵”的公共事件就这样被“浪费”了,用在区区几个简单的指令上。
    为了改变这种浪费的现象,本人通过多日的“努力”,研究出了这个脚本,在使用物品时,能把物品编号赋给某个变量,
    并且这个赋值是在物品调用公共事件前,所以调用公共事件时就能用这个变量判断调用它的是哪个物品,然后发挥相应的作用。
    这样,就可以实现所有物品调用同一公共事件,还能发挥自己的作用
    1. #################################################################################●变量编号################################################################################module HGSJ  #输出的变量编号  VAR = 1end#################################################################################●脚本正文################################################################################class Scene_Item  #--------------------------------------------------------------------------  # ● 刷新画面 (物品窗口被激活的情况下)  #--------------------------------------------------------------------------  def update_item    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 演奏取消 SE      $game_system.se_play($data_system.cancel_se)      # 切换到菜单画面      $scene = Scene_Menu.new(0)      return    end    # 按下 C 键的情况下    if Input.trigger?(Input::C)      # 获取物品窗口当前选中的物品数据      @item = @item_window.item################################################################################        $game_variables[HGSJ::VAR] = @item.id################################################################################      # 不使用物品的情况下      unless @item.is_a?(RPG::Item)        # 演奏冻结 SE        $game_system.se_play($data_system.buzzer_se)        return      end      # 不能使用的情况下      unless $game_party.item_can_use?(@item.id)        # 演奏冻结 SE        $game_system.se_play($data_system.buzzer_se)        return      end      # 演奏确定 SE      $game_system.se_play($data_system.decision_se)      # 效果范围是我方的情况下      if @item.scope >= 3        # 激活目标窗口        @item_window.active = false        @target_window.x = (@item_window.index + 1) % 2 * 304        @target_window.visible = true        @target_window.active = true        # 设置效果范围 (单体/全体) 的对应光标位置        if @item.scope == 4 || @item.scope == 6          @target_window.index = -1        else          @target_window.index = 0        end      # 效果在我方以外的情况下      else        # 公共事件 ID 有效的情况下        if @item.common_event_id > 0          # 预约调用公共事件          $game_temp.common_event_id = @item.common_event_id          # 演奏物品使用时的 SE          $game_system.se_play(@item.menu_se)          # 消耗品的情况下          if @item.consumable            # 使用的物品数减 1            $game_party.lose_item(@item.id, 1)            # 再描绘物品窗口的z项目            @item_window.draw_item(@item_window.index)          end          # 切换到地图画面          $scene = Scene_Map.new          return        end      end      return    end  endendclass Scene_Battle  #--------------------------------------------------------------------------  # ● 刷新画面 (角色命令回合 : 选择物品)  #--------------------------------------------------------------------------  def update_phase3_item_select    # 设置物品窗口为可视状态    @item_window.visible = true    # 刷新物品窗口    @item_window.update    # 按下 B 键的情况下    if Input.trigger?(Input::B)      # 演奏取消 SE      $game_system.se_play($data_system.cancel_se)      # 选择物品结束      end_item_select      return    end    # 按下 C 键的情况下    if Input.trigger?(Input::C)      # 获取物品窗口现在选择的物品资料      @item = @item_window.item################################################################################      $game_variables[HGSJ::VAR] = @item.id################################################################################      # 无法使用的情况下      unless $game_party.item_can_use?(@item.id)        # 演奏冻结 SE        $game_system.se_play($data_system.buzzer_se)        return      end      # 演奏确定 SE      $game_system.se_play($data_system.decision_se)      # 设置行动      @active_battler.current_action.item_id = @item.id      # 设置物品窗口为不可见状态      @item_window.visible = false      # 效果范围是敌单体的情况下      if @item.scope == 1        # 开始选择敌人        start_enemy_select      # 效果范围是我方单体的情况下      elsif @item.scope == 3 or @item.scope == 5        # 开始选择角色        start_actor_select      # 效果范围不是单体的情况下      else        # 物品选择结束        end_item_select        # 转到下一位角色的指令输入        phase3_next_actor      end      return    end  endend复制代码
    复制代码
    发现bug:无目标的物品的编号无法输出,现已解决,代码已更新。

    再附上两张图吧

    如果认为这个脚本太麻烦,可以参阅5楼对默认脚本进行修改,可实现相同效果。


                 本帖来自P1论坛作者tk4215342,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=312878  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。

    本帖子中包含更多资源

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

    x
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-21 01:18 , Processed in 0.050998 second(s), 44 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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