查看: 2597|回复: 2

[已经解决] 修改技能窗口位置的脚本

[复制链接]
梦石
0
星屑
50
在线时间
29 小时
注册时间
2013-8-23
回帖
45
发表于 2014-8-3 13:47:10 | 显示全部楼层 |阅读模式

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

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

×
有没有像下图这样,技能窗口显示在下面的脚本?

1.png

点评

谷歌以图搜图是个好东西  发表于 2014-8-3 17:29
在6R上似乎没有,图书馆、RM技术区全部都翻过了都没找到  发表于 2014-8-3 16:07
肯定有,你给的图用的就是那个脚本~  发表于 2014-8-3 13:50
梦石
0
星屑
250
在线时间
233 小时
注册时间
2013-8-2
回帖
544
发表于 2014-8-3 14:38:26 | 显示全部楼层
本帖最后由 千夙 于 2014-8-6 14:15 编辑

以坑,,,水就水吧

点评

看你的头像就是来这里混好人卡的  发表于 2014-8-6 14:03
我忘了,我要怎么遗忘。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
186 小时
注册时间
2014-6-14
回帖
184
发表于 2014-8-6 14:08:10 | 显示全部楼层
本帖最后由 qq19750508 于 2014-8-6 15:19 编辑

Oh.这有你想要的。
[pre lang="ruby" line="1"]
=begin
这个脚本就是杂兵天下君的战斗显示脸图脚本

使用方法:直接插在main脚本上方即可

效果:使用技能后,可以在脸图左上角显示技能图标

而且技能显示窗口在下面显示

还有,如果检查没有消耗MP的技能,就不会显示MP

TP也如此,如果除了攻击和防御,其他技能都没有消耗

直接显示MP,如果都有MP,TP都显示

一般来讲,MP,TP是都显示的,只是隐藏了而已

这里唯一的缺点是:跟鼠标脚本产生冲突

一用技能就出错,望谅解

还有范围,可以高亮的显示敌人被选中的结果

还可以在上面显示范围,

如果是单个队友/敌人,直接显示目标名称

=end

$脸图战斗 = true

$imported = {} if $imported.nil?

module YEA

  module BATTLE

    SKIP_PARTY_COMMAND = true

    BATTLESTATUS_NAME_FONT_SIZE = 20

    BATTLESTATUS_TEXT_FONT_SIZE = 16

    BATTLESTATUS_NO_ACTION_ICON = 185

    BATTLESTATUS_HPGAUGE_Y_PLUS = 11

    BATTLESTATUS_CENTER_FACES   = false

    HELP_TEXT_ALL_FOES        = "全体敌人"

    HELP_TEXT_ONE_RANDOM_FOE  = "单个敌人"

    HELP_TEXT_MANY_RANDOM_FOE = "%d个随机敌人"

    HELP_TEXT_ALL_ALLIES      = "全体队友"

    HELP_TEXT_ALL_DEAD_ALLIES = "全体死亡队友"

    HELP_TEXT_ONE_RANDOM_ALLY = "单个随机队友"

    HELP_TEXT_RANDOM_ALLIES   = "%d个随机队友"

  end

end

class Game_Battler

  def can_collapse?

    return false unless dead?

    unless actor?

      return false unless sprite.battler_visible

      array = [:collapse, :boss_collapse, :instant_collapse]

      return false if array.include?(sprite.effect_type)

    end

    return true

  end

  def draw_mp?

    return true

  end

  def draw_tp?

    return $data_system.opt_display_tp

  end

end

module Icon

  def self.no_action; return YEA::BATTLE::BATTLESTATUS_NO_ACTION_ICON; end

end

class Game_Temp

  attr_accessor :battle_aid

  attr_accessor :evaluating

end

class Game_Action

  alias evaluate_item_with_target_abe evaluate_item_with_target

  def evaluate_item_with_target(target)

    $game_temp.evaluating = true

    result = evaluate_item_with_target_abe(target)

    $game_temp.evaluating = false

    return result

  end

end

class Game_Actor < Game_Battler

  def draw_mp?

    return true unless draw_tp?

    for skill in skills

      next unless added_skill_types.include?(skill.stype_id)

      return true if skill.mp_cost > 0

    end

    return false

  end

  def draw_tp?

    return false unless $data_system.opt_display_tp

    for skill in skills

      next unless added_skill_types.include?(skill.stype_id)

      return true if skill.tp_cost > 0

    end

    return false

  end

end

class Window_BattleStatus < Window_Selectable

  def initialize

    super(0, 0, window_width, window_height)

    self.openness = 0

    @party = $game_party.battle_members.clone

  end

  def col_max; return $game_party.max_battle_members; end

  def battle_members; return $game_party.battle_members; end

  def actor; return battle_members[@index]; end

  def update

    super

    return if @party == $game_party.battle_members

    @party = $game_party.battle_members.clone

    refresh

  end

  def draw_item(index)

    return if index.nil?

    clear_item(index)

    actor = battle_members[index]

    rect = item_rect(index)

    return if actor.nil?

    draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)

    draw_actor_name(actor, rect.x, rect.y, rect.width-8)

    draw_actor_action(actor, rect.x, rect.y)

    draw_actor_icons(actor, rect.x, line_height*1, rect.width)

    gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS

    contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE

    draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4)

    if draw_tp?(actor) && draw_mp?(actor)

      dw = rect.width/2-2

      dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE

      draw_actor_tp(actor, rect.x+2, line_height*3, dw)

      dw = rect.width - rect.width/2 - 2

      draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw)

    elsif draw_tp?(actor) && !draw_mp?(actor)

      draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4)

    else

      draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4)

    end

  end

  def item_rect(index)

    rect = Rect.new

    rect.width = contents.width / $game_party.max_battle_members

    rect.height = contents.height

    rect.x = index * rect.width

    if YEA::BATTLE::BATTLESTATUS_CENTER_FACES

      rect.x += (contents.width - $game_party.members.size * rect.width) / 2

    end

    rect.y = 0

    return rect

  end

  def draw_face(face_name, face_index, dx, dy, enabled = true)

    bitmap = Cache.face(face_name)

    fx = [(96 - item_rect(0).width + 1) / 2, 0].max

    fy = face_index / 4 * 96 + 2

    fw = [item_rect(0).width - 4, 92].min

    rect = Rect.new(fx, fy, fw, 92)

    rect = Rect.new(face_index % 4 * 96 + fx, fy, fw, 92)

    contents.blt(dx, dy, bitmap, rect, enabled ? 255 : translucent_alpha)

    bitmap.dispose

  end

  def draw_actor_name(actor, dx, dy, dw = 112)

    reset_font_settings

    contents.font.size = YEA::BATTLE::BATTLESTATUS_NAME_FONT_SIZE

    change_color(hp_color(actor))

    draw_text(dx+24, dy, dw-24, line_height, actor.name)

  end

  def draw_actor_action(actor, dx, dy)

    draw_icon(action_icon(actor), dx, dy)

  end

  def action_icon(actor)

    return Icon.no_action if actor.current_action.nil?

    return Icon.no_action if actor.current_action.item.nil?

    return actor.current_action.item.icon_index

  end

  def draw_tp?(actor)

    return actor.draw_tp?

  end

  def draw_mp?(actor)

    return actor.draw_mp?

  end

  def draw_current_and_max_values(dx, dy, dw, current, max, color1, color2)

    change_color(color1)

    draw_text(dx, dy, dw, line_height, current.to_s, 2)

  end

  def draw_actor_hp(actor, dx, dy, width = 124)

    draw_gauge(dx, dy, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)

    change_color(system_color)

    cy = (Font.default_size - contents.font.size) / 2 + 1

    draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a)

    draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp,

      hp_color(actor), normal_color)

    end

  def draw_actor_mp(actor, dx, dy, width = 124)

    draw_gauge(dx, dy, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)

    change_color(system_color)

    cy = (Font.default_size - contents.font.size) / 2 + 1

    draw_text(dx+2, dy+cy, 30, line_height, Vocab::mp_a)

    draw_current_and_max_values(dx, dy+cy, width, actor.mp, actor.mmp,

      mp_color(actor), normal_color)

    end

  def draw_actor_tp(actor, dx, dy, width = 124)

    draw_gauge(dx, dy, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)

    change_color(system_color)

    cy = (Font.default_size - contents.font.size) / 2 + 1

    draw_text(dx+2, dy+cy, 30, line_height, Vocab::tp_a)

    change_color(tp_color(actor))

    draw_text(dx + width - 42, dy+cy, 42, line_height, actor.tp.to_i, 2)

  end

end

class Window_BattleActor < Window_BattleStatus

  def show

    create_flags

    super

  end

  def create_flags

    set_select_flag(:any)

    select(0)

    return if $game_temp.battle_aid.nil?

    if $game_temp.battle_aid.need_selection?

      select(0)

      set_select_flag(:dead) if $game_temp.battle_aid.for_dead_friend?

    elsif $game_temp.battle_aid.for_user?

      battler = BattleManager.actor

      id = battler.nil? ? 0 : $game_party.battle_members.index(battler)

      select(id)

      set_select_flag(:user)

    elsif $game_temp.battle_aid.for_all?

      select(0)

      set_select_flag(:all)

      set_select_flag(:all_dead) if $game_temp.battle_aid.for_dead_friend?

    elsif $game_temp.battle_aid.for_random?

      select(0)

      set_select_flag(:random) if $game_temp.battle_aid.for_random?

    end

  end

  def set_select_flag(flag)

    @select_flag = flag

    case @select_flag

    when :all, :all_dead, :random

      @cursor_all = true

    else

      @cursor_all = false

    end

  end

  def update_cursor

    if @cursor_all

      cursor_rect.set(0, 0, contents.width, contents.height)

      self.top_row = 0

    elsif @index < 0

      cursor_rect.empty

    else

      ensure_cursor_visible

      cursor_rect.set(item_rect(@index))

    end

  end

  def cursor_movable?

    return false if @select_flag == :user

    return super

  end

  def current_item_enabled?

    return true if $game_temp.battle_aid.nil?

    if $game_temp.battle_aid.need_selection?

      member = $game_party.battle_members[@index]

      return member.dead? if $game_temp.battle_aid.for_dead_friend?

    elsif $game_temp.battle_aid.for_dead_friend?

      for member in $game_party.battle_members

        return true if member.dead?

      end

      return false

    end

    return true

  end

end

class Window_BattleStatusAid < Window_BattleStatus

  attr_accessor :status_window

  def initialize

    super

    self.visible = false

    self.openness = 255

  end

  def window_width; return 128; end

  def show

    super

    refresh

  end

  def refresh

    contents.clear

    return if @status_window.nil?

    draw_item(@status_window.index)

  end

  def item_rect(index)

    return Rect.new(0, 0, contents.width, contents.height)

  end

end

class Window_BattleEnemy < Window_Selectable

  def initialize(info_viewport)

    super(0, Graphics.height, window_width, fitting_height(1))

    refresh

    self.visible = false

    @info_viewport = info_viewport

  end

  def col_max; return item_max; end

  def show

    create_flags

    super

  end

  def create_flags

    set_select_flag(:any)

    select(0)

    return if $game_temp.battle_aid.nil?

    if $game_temp.battle_aid.need_selection?

      select(0)

    elsif $game_temp.battle_aid.for_all?

      select(0)

      set_select_flag(:all)

    elsif $game_temp.battle_aid.for_random?

      select(0)

      set_select_flag(:random)

    end

  end

  def set_select_flag(flag)

    @select_flag = flag

    case @select_flag

    when :all, :random

      @cursor_all = true

    else

      @cursor_all = false

    end

  end

  def select_all?

    return true if @select_flag == :all

    return true if @select_flag == :random

    return false

  end

  def update_cursor

    if @cursor_all

      cursor_rect.set(0, 0, contents.width, contents.height)

      self.top_row = 0

    elsif @index < 0

      cursor_rect.empty

    else

      ensure_cursor_visible

      cursor_rect.set(item_rect(@index))

    end

  end

  def cursor_movable?

    return false if @select_flag == :user

    return super

  end

  def current_item_enabled?

    return true if $game_temp.battle_aid.nil?

    if $game_temp.battle_aid.need_selection?

      member = $game_party.battle_members[@index]

      return member.dead? if $game_temp.battle_aid.for_dead_friend?

    elsif $game_temp.battle_aid.for_dead_friend?

      for member in $game_party.battle_members

        return true if member.dead?

      end

      return false

    end

    return true

  end

  def enemy; @data[index]; end

  def refresh

    make_item_list

    create_contents

    draw_all_items

  end

  def make_item_list

    @data = $game_troop.alive_members

    @data.sort! { |a,b| a.screen_x <=> b.screen_x }

  end

  def draw_item(index); return; end

  def update

    super

    return unless active

    enemy.sprite_effect_type = :whiten

    return unless select_all?

    for enemy in $game_troop.alive_members

      enemy.sprite_effect_type = :whiten

    end

  end

end

class Window_BattleHelp < Window_Help

  attr_accessor :actor_window

  attr_accessor :enemy_window

  def update

    super

    if !self.visible and @text != ""

      @text = ""

      return refresh

    end

    update_battler_name

  end

  def update_battler_name

    return unless @actor_window.active || @enemy_window.active

    if @actor_window.active

      battler = $game_party.battle_members[@actor_window.index]

    elsif @enemy_window.active

      battler = @enemy_window.enemy

    end

    if special_display?

      refresh_special_case(battler)

    else

      refresh_battler_name(battler) if battler_name(battler) != @text

    end

  end

  def battler_name(battler)

    text = battler.name.clone

    return text

  end

  def refresh_battler_name(battler)

    contents.clear

    reset_font_settings

    change_color(normal_color)

    @text = battler_name(battler)

    icons = battler.state_icons + battler.buff_icons

    dy = icons.size <= 0 ? line_height / 2 : 0

    draw_text(0, dy, contents.width, line_height, @text, 1)

    dx = (contents.width - (icons.size * 24)) / 2

    draw_actor_icons(battler, dx, line_height, contents.width)

  end

  def special_display?

    return false if $game_temp.battle_aid.nil?

    return false if $game_temp.battle_aid.for_user?

    return !$game_temp.battle_aid.need_selection?

  end

  def refresh_special_case(battler)

    if $game_temp.battle_aid.for_opponent?

      if $game_temp.battle_aid.for_all?

        text = YEA::BATTLE::HELP_TEXT_ALL_FOES

      else

        case $game_temp.battle_aid.number_of_targets

        when 1

          text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_FOE

        else

          number = $game_temp.battle_aid.number_of_targets

          text = sprintf(YEA::BATTLE::HELP_TEXT_MANY_RANDOM_FOE, number)

        end

      end

    else

      if $game_temp.battle_aid.for_dead_friend?

        text = YEA::BATTLE::HELP_TEXT_ALL_DEAD_ALLIES

      elsif $game_temp.battle_aid.for_random?

        case $game_temp.battle_aid.number_of_targets

        when 1

          text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_ALLY

        else

          number = $game_temp.battle_aid.number_of_targets

          text = sprintf(YEA::BATTLE::HELP_TEXT_RANDOM_ALLIES, number)

        end

      else

        text = YEA::BATTLE::HELP_TEXT_ALL_ALLIES

      end

    end

    return if text == @text

    @text = text

    contents.clear

    reset_font_settings

    draw_text(0, 0, contents.width, line_height*2, @text, 1)

  end

end

class Window_SkillList < Window_Selectable

  def spacing

    return 8 if $game_party.in_battle

    return super

  end

end

class Window_ItemList < Window_Selectable

  def spacing

    return 8 if $game_party.in_battle

    return super

  end

end

class Scene_Battle < Scene_Base

  attr_accessor :enemy_window

  attr_accessor :info_viewport

  attr_accessor :spriteset

  attr_accessor :status_window

  attr_accessor :status_aid_window

  attr_accessor :subject

  alias scene_battle_create_all_windows_abe create_all_windows

  def create_all_windows

    scene_battle_create_all_windows_abe

    create_battle_status_aid_window

    set_help_window

  end

  alias scene_battle_create_info_viewport_abe create_info_viewport

  def create_info_viewport

    scene_battle_create_info_viewport_abe

    @status_window.refresh

  end

  def create_battle_status_aid_window

    @status_aid_window = Window_BattleStatusAid.new

    @status_aid_window.status_window = @status_window

    @status_aid_window.x = Graphics.width - @status_aid_window.width

    @status_aid_window.y = Graphics.height - @status_aid_window.height

  end

  def create_help_window

    @help_window = Window_BattleHelp.new

    @help_window.hide

  end

  def set_help_window

    @help_window.actor_window = @actor_window

    @help_window.enemy_window = @enemy_window

  end

  alias scene_battle_create_skill_window_abe create_skill_window

  def create_skill_window

    scene_battle_create_skill_window_abe

    @skill_window.height = @info_viewport.rect.height

    @skill_window.width = Graphics.width - @actor_command_window.width

    @skill_window.y = Graphics.height - @skill_window.height

  end

  alias scene_battle_create_item_window_abe create_item_window

  def create_item_window

    scene_battle_create_item_window_abe

    @item_window.height = @skill_window.height

    @item_window.width = @skill_window.width

    @item_window.y = Graphics.height - @item_window.height

  end

  alias scene_battle_next_command_abe next_command

  def next_command

    @status_window.show

    redraw_current_status

    @actor_command_window.show

    @status_aid_window.hide

    scene_battle_next_command_abe

  end

  alias scene_battle_prior_command_abe prior_command

  def prior_command

    redraw_current_status

    scene_battle_prior_command_abe

  end

  def redraw_current_status

    return if @status_window.index < 0

    @status_window.draw_item(@status_window.index)

  end

  alias scene_battle_command_attack_abe command_attack

  def command_attack

    $game_temp.battle_aid = $data_skills[BattleManager.actor.attack_skill_id]

    scene_battle_command_attack_abe

  end

  alias scene_battle_command_skill_abe command_skill

  def command_skill

    scene_battle_command_skill_abe

    @status_window.hide

    @actor_command_window.hide

    @status_aid_window.show

  end

  alias scene_battle_command_item_abe command_item

  def command_item

    scene_battle_command_item_abe

    @status_window.hide

    @actor_command_window.hide

    @status_aid_window.show

  end

  def on_skill_ok

    @skill = @skill_window.item

    $game_temp.battle_aid = @skill

    BattleManager.actor.input.set_skill(@skill.id)

    BattleManager.actor.last_skill.object = @skill

    if @skill.for_opponent?

      select_enemy_selection

    elsif @skill.for_friend?

      select_actor_selection

    else

      @skill_window.hide

      next_command

      $game_temp.battle_aid = nil

    end

  end

  alias scene_battle_on_skill_cancel_abe on_skill_cancel

  def on_skill_cancel

    scene_battle_on_skill_cancel_abe

    @status_window.show

    @actor_command_window.show

    @status_aid_window.hide

  end

  def on_item_ok

    @item = @item_window.item

    $game_temp.battle_aid = @item

    BattleManager.actor.input.set_item(@item.id)

    if @item.for_opponent?

      select_enemy_selection

    elsif @item.for_friend?

      select_actor_selection

    else

      @item_window.hide

      next_command

      $game_temp.battle_aid = nil

    end

    $game_party.last_item.object = @item

  end

  alias scene_battle_on_item_cancel_abe on_item_cancel

  def on_item_cancel

    scene_battle_on_item_cancel_abe

    @status_window.show

    @actor_command_window.show

    @status_aid_window.hide

  end

  alias scene_battle_select_actor_selection_abe select_actor_selection

  def select_actor_selection

    @status_aid_window.refresh

    scene_battle_select_actor_selection_abe

    @status_window.hide

    @skill_window.hide

    @item_window.hide

    @help_window.show

  end

  alias scene_battle_on_actor_ok_abe on_actor_ok

  def on_actor_ok

    $game_temp.battle_aid = nil

    scene_battle_on_actor_ok_abe

    @status_window.show

    if $imported["YEA-BattleCommandList"] && !@confirm_command_window.nil?

      @actor_command_window.visible = !@confirm_command_window.visible

    else

      @actor_command_window.show

    end

    @status_aid_window.hide

  end

  alias scene_battle_on_actor_cancel_abe on_actor_cancel

  def on_actor_cancel

    BattleManager.actor.input.clear

    @status_aid_window.refresh

    $game_temp.battle_aid = nil

    scene_battle_on_actor_cancel_abe

    case @actor_command_window.current_symbol

    when :skill

      @skill_window.show

    when :item

      @item_window.show

    end

  end

  alias scene_battle_select_enemy_selection_abe select_enemy_selection

  def select_enemy_selection

    @status_aid_window.refresh

    scene_battle_select_enemy_selection_abe

    @help_window.show

  end

  alias scene_battle_on_enemy_ok_abe on_enemy_ok

  def on_enemy_ok

    $game_temp.battle_aid = nil

    scene_battle_on_enemy_ok_abe

  end

  alias scene_battle_on_enemy_cancel_abe on_enemy_cancel

  def on_enemy_cancel

    BattleManager.actor.input.clear

    @status_aid_window.refresh

    $game_temp.battle_aid = nil

    scene_battle_on_enemy_cancel_abe

    if @skill_window.visible || @item_window.visible

      @help_window.show

    else

      @help_window.hide

    end

  end

  def end_battle_conditions?

    return true if $game_party.members.empty?

    return true if $game_party.all_dead?

    return true if $game_troop.all_dead?

    return true if BattleManager.aborting?

    return false

  end

  def refresh_status

    #如果你是程序员,请顺手帮忙优化下这里,谢谢。

    @status_window.refresh

    for i in $game_party.battle_members

      @status_window.draw_item($game_party.battle_members.index(i))

    end

  end

end[/pre]
以上就是战斗脸图显示脚本
而且,这个脚本可以做出主楼图片的效果
类似吧……我也不知道,反正出现的效果我可知道  

点评

源代码复制很麻烦,在这http://rm.66rpg.com/thread-223765-1-1.html  发表于 2014-8-6 14:14

评分

参与人数 1星屑 +150 收起 理由
taroxd + 150 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部