设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1655|回复: 1
打印 上一主题 下一主题

[已经过期] Sion大大的“鼠标选择敌人”如何能兼容MOG的战斗系统?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2013-3-17
帖子
63
跳转到指定楼层
1
发表于 2015-8-15 15:41:01 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
如图:

目前各方面的兼容性都很好,就是一个问题:鼠标选中敌人的时候,没有显示“Target”,也没有技能作用范围显示。求各位大神解答。
代码:
RUBY 代码复制
  1. # v1.3 选择敌人时隐藏物品窗口
  2. # 未完全测试,如有 bug 请通过短消息告知。
  3.  
  4. class Scene_Battle
  5.   attr(:spriteset)
  6.   def create_enemy_window
  7.     @enemy_window = Window_BattleEnemyInfo.new(@spriteset)
  8.     @enemy_window.set_handler(:ok,     method(:on_enemy_ok))
  9.     @enemy_window.set_handler(:cancel, method(:on_enemy_cancel))
  10.   end
  11.   alias_method :sion_mouse_choose_enemy_on_enemy_ok, :on_enemy_ok
  12.   def on_enemy_ok
  13.     if @enemy_window.index
  14.       Sound.play_ok
  15.       sion_mouse_choose_enemy_on_enemy_ok
  16.     else
  17.       Sound.play_buzzer
  18.     end
  19.   end
  20.   #方法覆盖
  21.   def on_skill_ok
  22.     @skill = @skill_window.item
  23.     BattleManager.actor.input.set_skill(@skill.id)
  24.     BattleManager.actor.last_skill.object = @skill
  25.     if !@skill.need_selection?
  26.       @skill_window.hide
  27.       next_command
  28.     elsif @skill.for_opponent?
  29.       @skill_window.hide ###
  30.       @skill_window.help_window.show ###
  31.       select_enemy_selection
  32.     else
  33.       select_actor_selection
  34.     end
  35.   end
  36.   #方法覆盖
  37.   def on_item_ok
  38.     @item = @item_window.item
  39.     BattleManager.actor.input.set_item(@item.id)
  40.     if !@item.need_selection?
  41.       @item_window.hide
  42.       next_command
  43.     elsif @item.for_opponent?
  44.       @item_window.hide ###
  45.       @item_window.help_window.show ###
  46.       select_enemy_selection
  47.     else
  48.       select_actor_selection
  49.     end
  50.     $game_party.last_item.object = @item
  51.   end
  52.   #方法覆盖
  53.   def on_enemy_cancel
  54.     @enemy_window.hide
  55.     case @actor_command_window.current_symbol
  56.     when :attack
  57.       @actor_command_window.activate
  58.     when :skill
  59.       @skill_window.show.activate ###
  60.     when :item
  61.       @item_window.show.activate ###
  62.     end
  63.   end
  64. end
  65. #
  66. class Window_BattleEnemyInfo < Window_Base
  67.   attr(:index)
  68.   def choosing_color
  69.     Color.new(255, 0, 0, 150)
  70.   end
  71.   #
  72.   def initialize(spriteset)
  73.     super(0, 0, 100, fitting_height(1))
  74.     @enemy_sprites = spriteset.enemy_sprites
  75.     @handler = {}
  76.     hide
  77.   end
  78.   def set_handler(symbol, method)
  79.     @handler[symbol] = method
  80.   end
  81.   #
  82.   def update
  83.     super
  84.     if active
  85.       update_mouse_choose_enemy
  86.       update_input
  87.     end
  88.   end
  89.   def update_mouse_choose_enemy
  90.     m_x = Mouse.x; m_y = Mouse.y
  91.     mouse_enemy = @enemy_sprites.reverse.find {|s| s.mouse_at_enemy?(m_x, m_y)}
  92.     if @mouse_enemy != mouse_enemy
  93.       enemy_unchoose
  94.       @mouse_enemy = mouse_enemy
  95.       enemy_choose
  96.     end
  97.   end
  98.   #
  99.   def update_input
  100.     if Input.trigger?(:C)
  101.       if @mouse_enemy
  102.         @last_enemy = @mouse_enemy
  103.         enemy_unchoose
  104.       else
  105.         @index = nil
  106.       end
  107.       @handler[:ok].call
  108.     elsif Input.trigger?(:B)
  109.       @handler[:cancel].call
  110.     end
  111.   end
  112.   def refresh
  113.   end
  114.   #
  115.   def enemy_choose
  116.     if @mouse_enemy
  117.       @enemy_before_choose_color = @mouse_enemy.color.clone
  118.       @mouse_enemy.color = choosing_color
  119.       @index = $game_troop.alive_members.index(@mouse_enemy.battler)
  120.       name = $game_troop.alive_members[@index].name
  121.       self.width = contents.text_size(name).width + 10 + standard_padding * 2
  122.       create_contents
  123.       draw_text(0, 0, contents_width, contents_height, name, 1)
  124.       self.x = @mouse_enemy.x - width / 2
  125.       self.y = @mouse_enemy.y
  126.       open
  127.     end
  128.   end
  129.   def enemy_unchoose
  130.     if @mouse_enemy
  131.       @mouse_enemy.color = @enemy_before_choose_color
  132.       @mouse_enemy = nil
  133.       close
  134.     end
  135.   end
  136.   #
  137.   def activate
  138.     select_last_enemy
  139.     super
  140.   end
  141.   #
  142.   def hide
  143.     self.active = false
  144.     enemy_unchoose
  145.     close
  146.     super
  147.   end
  148.  
  149.  
  150.   def select_last_enemy
  151.     @last_enemy && @last_enemy.opacity > 0 ?
  152.       Mouse.set_pos(@last_enemy.x, @last_enemy.y - @last_enemy.height / 2) :
  153.       select_first_enemy
  154.   end
  155.   def select_first_enemy
  156.     battler = $game_troop.alive_members[0]
  157.     if battler
  158.       enemy = @enemy_sprites.find {|s| s.battler == battler}
  159.       Mouse.set_pos(enemy.x, enemy.y - enemy.height / 2)
  160.     end
  161.   end
  162.   #
  163.   def enemy
  164.     $game_troop.alive_members[@index]
  165.   end
  166. end
  167.  
  168. class Sprite_Battler
  169.   def mouse_at_enemy?(mx, my)
  170.     dx = mx - x + ox
  171.     dy = my - y + oy
  172.     return if opacity == 0 || dx < 0 || dx > width || dy < 0 || dy > height
  173.     return bitmap.get_pixel(dx, dy).alpha > 0
  174.   end
  175. end
  176. class Spriteset_Battle
  177.   attr(:enemy_sprites)
  178. end

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2013-3-17
帖子
63
2
 楼主| 发表于 2015-8-15 18:05:02 | 只看该作者
@Sion {:2_254:}召唤大大
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 12:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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