查看: 3007|回复: 8

[已经解决] 帮忙改下这个VA的战斗指针脚本

[复制链接]
梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
回帖
9
发表于 2017-4-17 15:41:47 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 小汰酱 于 2017-4-17 15:43 编辑

已经亲自用空白新工程测试过了,对己方单位使用物品就会出错

QQ图片20170417153535.png

此外, 战斗中已经死了的敌人还是能被指针选到。这也是个BUG
哪位大佬帮帮忙改改,感激不尽
脚本在下面
[pre lang="ruby"]#==============================================================================
# ■ Sprite_BattleArrow
#==============================================================================

class Sprite_BattleArrow < Sprite
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :index
  attr_accessor :select_all
  attr_accessor :can_select_all
  attr_accessor :members
  attr_accessor :add_x
  attr_accessor :on_ok_method
  attr_accessor :on_cancel_method
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize(type, viewport, can_select_all = false)
    super(viewport)
    self.bitmap = Cache.system("BattleArrow")
    @type = type
    case @type
    when :enemy
      self.ox = 0
      src_rect.set(32, 0-35, 32, 32+50)
      @members = $game_troop.members
      @add_x = 30-10
    when :actor
      self.ox = 32
      src_rect.set(0, 0-35, 32, 32+50)
      @members = $game_party.battle_members
      @add_x = -30
    else
      self.ox = 16
      src_rect.set(0, 0, 32, 32)
      @members = []
      @add_x = 0
    end
    self.oy = 32
    self.z = 2500
    self.visible = false
    @index = 0
    @old_index = @index
    @select_all = false
    @can_select_all = can_select_all
    update
  end
  #--------------------------------------------------------------------------
  # ● 设置
  #--------------------------------------------------------------------------
  def setup(can_select_all)
    @can_select_all = can_select_all
    @select_all = false
    @index = @old_index
    case @type
    when :actor
      @members = $game_party.battle_members
    when :enemy
      @members = $game_troop.members
    else
      @members = []
    end
    self.visible = true
    update
  end
  #--------------------------------------------------------------------------
  # ● 获取光标指向的战斗者
  #--------------------------------------------------------------------------
  def battler
    return members[index]
  end
  #--------------------------------------------------------------------------
  # ● 设置光标位置
  #--------------------------------------------------------------------------
  def index=(index)
    @index = index
    update
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super
    return unless visible
    if Input.trigger?(13)
      Sound.play_ok
      on_ok_method.call if on_ok_method
      return
    end
    if Input.trigger?(12)
      Sound.play_cancel
      on_cancel_method.call if on_cancel_method
      return
    end
    if Input.trigger?(4) or Input.trigger?(6)
      if @select_all
        @select_all = false
        @index = @old_index
      else
        if @can_select_all
          @select_all = true
          @old_index = @index
        end
      end
    end
    case @type
    when :actor
      update_actor
    when :enemy
      update_enemy
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新选择角色
  #--------------------------------------------------------------------------
  def update_actor
    if @select_all
      @index += 1
      @index %= members.size
    else
      old_index = @index
      for i in 0..members.size
        @index = i
        if @index == members.size
          @index = old_index
          break
        end
        next unless battler
        self_x = battler.fscreen_x + add_x
        self_y = battler.fscreen_y
      end
      if Input.repeat?(2)
        Sound.play_cursor
        @index += 1
        @index %= members.size
      end
      if Input.repeat?(8)
        Sound.play_cursor
        @index += members.size - 1
        @index %= members.size
      end
    end
    if battler
      self.x = battler.fscreen_x + add_x
      self.y = battler.fscreen_y
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新选择敌人
  #--------------------------------------------------------------------------
  def update_enemy
    if @select_all
      members.size.times do
        @index += 1
        @index %= members.size
        break if not battler.hidden?
      end
    else
      members.size.times do
        break if not battler.hidden?
        @index += 1
        @index %= members.size
      end
      old_index = @index
      for i in 0..members.size
        @index = i
        if @index == members.size
          @index = old_index
          break
        end
        next if battler.hidden?
        self_x = battler.screen_x + add_x
        self_y = battler.screen_y
      end
      if Input.repeat?(2)
        Sound.play_cursor
        members.size.times do
          @index += 1
          @index %= members.size
          break if not battler.hidden?
        end
      end
      if Input.repeat?(8)
        Sound.play_cursor
        members.size.times do
          @index += members.size - 1
          @index %= members.size
          break if not battler.hidden?
        end
      end
    end
    if battler != nil
      self.x = battler.screen_x + add_x
      self.y = battler.screen_y
    end
  end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 结束处理
  #--------------------------------------------------------------------------
  alias hzhj_terminate_battle_arrow terminate
  def terminate
    @actor_arrow.dispose
    @enemy_arrow.dispose
    hzhj_terminate_battle_arrow
  end
  #--------------------------------------------------------------------------
  # ● 刷新所有窗口
  #--------------------------------------------------------------------------
  alias hzhj_update_all_windows_battle_arrow update_all_windows
  def update_all_windows
    hzhj_update_all_windows_battle_arrow
    @actor_arrow.update
    @enemy_arrow.update
  end
  #--------------------------------------------------------------------------
  # ● 生成角色窗口
  #--------------------------------------------------------------------------
  def create_actor_window
    viewport = @viewport #@spriteset.viewport1
    @actor_arrow = Sprite_BattleArrow.new(:actor, viewport, false)
    @actor_arrow.on_ok_method = method(:on_actor_ok)
    @actor_arrow.on_cancel_method = method(:on_actor_cancel)
  end
  #--------------------------------------------------------------------------
  # ● 生成敌人窗口
  #--------------------------------------------------------------------------
  def create_enemy_window
    viewport = @viewport #@spriteset.viewport1
    @enemy_arrow = Sprite_BattleArrow.new(:enemy, viewport, false)
    @enemy_arrow.on_ok_method = method(:on_enemy_ok)
    @enemy_arrow.on_cancel_method = method(:on_enemy_cancel)
  end
  #--------------------------------------------------------------------------
  # ● 开始选择队友
  #--------------------------------------------------------------------------
  def select_actor_selection(can_select_all = false)
    @actor_arrow.setup(can_select_all)
    @skill_window.hide
    @item_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 角色“确定”
  #--------------------------------------------------------------------------
  def on_actor_ok
    target_index = @actor_arrow.select_all ? 65535 : @actor_arrow.index
    BattleManager.actor.input.target_index = target_index
    @skill_window.hide
    @item_window.hide
    @actor_arrow.visible = false
    next_command
  end
  #--------------------------------------------------------------------------
  # ● 角色“取消”
  #--------------------------------------------------------------------------
  def on_actor_cancel
    case @actor_command_window.current_symbol
    when :skill
      @skill_window.show.activate
    when :item
      @item_window.show.activate
    end
    @actor_arrow.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 开始选择敌人
  #--------------------------------------------------------------------------
  def select_enemy_selection(can_select_all = false)
    @enemy_arrow.setup(can_select_all)
#    @actor_command_window.hide
    @skill_window.hide
    @item_window.hide
  end
  #--------------------------------------------------------------------------
  # ● 敌人“确定”
  #--------------------------------------------------------------------------
  def on_enemy_ok
    target_index = @enemy_arrow.select_all ? 65535 : @enemy_arrow.index
    BattleManager.actor.input.target_index = target_index
    @skill_window.hide
    @item_window.hide
    @enemy_arrow.visible = false
    next_command
  end
  #--------------------------------------------------------------------------
  # ● 敌人“取消”
  #--------------------------------------------------------------------------
  def on_enemy_cancel
    case @actor_command_window.current_symbol
    when :attack
      @actor_command_window.show.activate
    when :skill
      @skill_window.show.activate
    when :status
      @actor_command_window.show.activate
    when :item
      @item_window.show.activate
    end
    @enemy_arrow.visible = false
  end
end
[/pre]
梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
回帖
9
 楼主| 发表于 2017-4-17 15:55:47 | 显示全部楼层
还尝试了站里的MOG那个指针脚本,然而那个脚本用起来很奇怪,放技能用物品选目标的时候窗口不会关闭,光标都被窗口挡在后面了。
回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-4-17 18:40:24 | 显示全部楼层
把130,131行的fscreen中的f去掉。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
回帖
9
 楼主| 发表于 2017-4-17 19:56:40 | 显示全部楼层
guoxiaomi 发表于 2017-4-17 18:40
把130,131行的fscreen中的f去掉。

还是一样,提示130行blablabla。。。。
回复 1 0

使用道具 举报

梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2017-4-17 20:35:52 | 显示全部楼层
虽然不知道原本的效果是如何,总之,只能强行定义一下fscreen_x和fscreen_y了
把这个作为插件脚本放在原脚本的下方
[pre lang="ruby"]class Game_Actor < Game_Battler
  attr_accessor :fscreen_x
  attr_accessor :fscreen_y
  def initialize(actor_id)
    super()
    setup(actor_id)
    @last_skill = Game_BaseItem.new
    @fscreen_x = 0
    @fscreen_y = 0
  end
end
class Game_Party < Game_Unit
  def setup_battle_test_members
    $data_system.test_battlers.each do |battler|
      actor = $game_actors[battler.actor_id]
      actor.change_level(battler.level, false)
      actor.init_equips(battler.equips)
      actor.recover_all
      actor.fscreen_x = 100
      actor.fscreen_y = 276+battler.actor_id*24
      p battler.actor_id
      add_actor(actor.id)
    end
  end
end[/pre]
笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2017-4-18 01:25:49 | 显示全部楼层
小汰酱 发表于 2017-4-17 19:56
还是一样,提示130行blablabla。。。。

别偷懒啊,提示什么发上来啊。

以及后面的都是 screen_x,就这里是 fscreen_x,很可能是笔误
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
回帖
9
 楼主| 发表于 2017-4-18 13:23:31 | 显示全部楼层
魔法丶小肉包 发表于 2017-4-17 20:35
虽然不知道原本的效果是如何,总之,只能强行定义一下fscreen_x和fscreen_y了
把这个作为插件脚本放在原脚 ...

{:2_253:}不会报错了,感谢,那么另外一个问题:已经死了的敌人还是能被指针选到,有没有办法解决呢?
回复

使用道具 举报

梦石
0
星屑
6375
在线时间
1473 小时
注册时间
2015-7-25
回帖
609

极短25参与开拓者

发表于 2017-4-18 16:09:33 | 显示全部楼层
小汰酱 发表于 2017-4-18 13:23
不会报错了,感谢,那么另外一个问题:已经死了的敌人还是能被指针选到,有没有办法解决呢? ...

同样,作为插件脚本在此脚本下方使用
[pre lang="ruby"]class Sprite_BattleArrow < Sprite
  def update_enemy
    if @select_all
      members.size.times do
        @index += 1
        @index %= members.size
        break if not battler.hidden? || battler.dead?
      end
    else
      members.size.times do
        break if not battler.hidden? || battler.dead?
        @index += 1
        @index %= members.size
      end
      old_index = @index
      for i in 0..members.size
        @index = i
        if @index == members.size
          @index = old_index
          break
        end
        next if battler.hidden? || battler.dead?
        self_x = battler.screen_x + add_x
        self_y = battler.screen_y
      end
      if Input.repeat?(2)
        Sound.play_cursor
        members.size.times do
          @index += 1
          @index %= members.size
          break if not battler.hidden? || battler.dead?
        end
      end
      if Input.repeat?(8)
        Sound.play_cursor
        members.size.times do
          @index += members.size - 1
          @index %= members.size
          break if not battler.hidden? || battler.dead?
        end
      end
    end
    if battler != nil
      self.x = battler.screen_x + add_x
      self.y = battler.screen_y
    end
  end
end[/pre]

评分

参与人数 1梦石 +1 收起 理由
RaidenInfinity + 1 认可答案

查看全部评分

笨肉包的游戏讨论群932812135 (实时更新) 喜欢的话欢迎加入~
目前的坑
??? #像素风OC游戏 准备中 短篇-约5小时
花城梦之心 #像素风OC游戏 系统开发+素材绘制中
【不可思议的迷宫】幽灵契约外传:歌莉娅 v0.4 游戏文件已更新
同时更新中~ (沉迷摸鱼中~更新速度较慢请见谅w)
这是属于笨肉包一个人的旅行~(这只肉包又在摸鱼!
旅途的最终目标~ ???(保密~
回复

使用道具 举报

梦石
0
星屑
50
在线时间
20 小时
注册时间
2017-4-12
回帖
9
 楼主| 发表于 2017-4-18 16:35:19 | 显示全部楼层
魔法丶小肉包 发表于 2017-4-18 16:09
同样,作为插件脚本在此脚本下方使用
class Sprite_BattleArrow < Sprite
  def update_enemy

可以了!万分感谢!!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部