Project1

标题: 战斗中角色透明度问题 [打印本页]

作者: 薄荷冰水    时间: 2008-7-25 02:04
标题: 战斗中角色透明度问题
在等待命令的时候
角色处于半透明状态

把这个透明度255放在脚本哪行?

opacity = 255
放在哪里.........

左边的 改成右边的..
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: havealook    时间: 2008-7-25 02:39
这个:http://rpg.blue/web/htm/news322.htm
仅做参考,没有RMXP,不好实践{/gg}{/gg}
作者: 薄荷冰水    时间: 2008-7-25 06:56
    # 应该被显示的角色的情况下
    if @battler.is_a?(Game_Actor) and @battler_visible
      # 不是主状态的时候稍稍降低点透明度
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 255
      end
    end




这个早设置了,
解决了一部分的效果而已...


怎么说呢...

就是在等待命令的时候是半透明的
不是非主状态下透明.....不是在主状态下透明的我改掉了

等待命令的时候(攻击,法术,防御,物品)
是半透明的
很苦恼
那个   冏 囧 浻 埛 烱 綗。。。。。。。。
作者: redant    时间: 2008-7-25 07:00
不想透明 就删掉
状态条 半透明是这么干的
LZ要得效果就不知道了 道理应该是一样的吧{/pz}
或者 =255
作者: 薄荷冰水    时间: 2008-7-25 07:09
就是找不到那个半透明的藏身点才来求教的...冏囧
作者: redant    时间: 2008-7-25 07:16
以下引用陈安于2008-7-24 23:09:58的发言:

就是找不到那个半透明的藏身点才来求教的...冏囧

什么是半透明的藏身点? 我还真不知道……
大于和小于改成等于
或者所有的注释掉 试下
作者: 灯笼菜刀王    时间: 2008-7-25 07:22
在那个脚本下按CTRL+F 查找opacity

默认的是255,如果要透明肯定要加上这个,把所有opacity的都改成255试看看就是了~
作者: 薄荷冰水    时间: 2008-7-25 07:23
我都查过了
opacity
脚本里的
opacity我都查找过了

没有可以改了

估计要插入个
opacity=255的数值

让角色在等待命令时变为不透明

我认为你应该看看我上面的东西

我觉得我表达很清楚了  


睡觉了
明天中午回来找答案
作者: 灯笼菜刀王    时间: 2008-7-25 07:30
把脚本发上来看看吧- -...

没脚本谁知道在哪里改....
作者: 薄荷冰水    时间: 2008-7-25 20:13
是战斗者的脚本吧...
Game_Battler (分割定义 1)
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :battler_name             # 战斗者 文件名
  12.   attr_reader   :battler_hue              # 战斗者 色相
  13.   attr_reader   :hp                       # HP
  14.   attr_reader   :sp                       # SP
  15.   attr_reader   :states                   # 状态
  16.   attr_accessor :hidden                   # 隐藏标志
  17.   attr_accessor :immortal                 # 不死身标志
  18.   attr_accessor :damage_pop               # 显示伤害标志
  19.   attr_accessor :damage                   # 伤害值
  20.   attr_accessor :critical                 # 会心一击标志
  21.   attr_accessor :animation_id             # 动画 ID
  22.   attr_accessor :animation_hit            # 动画 击中标志
  23.   attr_accessor :white_flash              # 白色屏幕闪烁标志
  24.   attr_accessor :blink                    # 闪烁标志
  25.   #--------------------------------------------------------------------------
  26.   # ● 初始化对像
  27.   #--------------------------------------------------------------------------
  28.   def initialize
  29.     @battler_name = ""
  30.     @battler_hue = 0
  31.     @hp = 0
  32.     @sp = 0
  33.     @states = []
  34.     @states_turn = {}
  35.     @maxhp_plus = 0
  36.     @maxsp_plus = 0
  37.     @str_plus = 0
  38.     @dex_plus = 0
  39.     @agi_plus = 0
  40.     @int_plus = 0
  41.     @hidden = false
  42.     @immortal = false
  43.     @damage_pop = false
  44.     @damage = nil
  45.     @critical = false
  46.     @animation_id = 0
  47.     @animation_hit = false
  48.     @white_flash = false
  49.     @blink = false
  50.     @current_action = Game_BattleAction.new
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 获取 MaxHP
  54.   #--------------------------------------------------------------------------
  55.   def maxhp
  56.     n = [[base_maxhp + @maxhp_plus, 1].max, 999999].min
  57.     for i in @states
  58.       n *= $data_states[i].maxhp_rate / 100.0
  59.     end
  60.     n = [[Integer(n), 1].max, 999999].min
  61.     return n
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 获取 MaxSP
  65.   #--------------------------------------------------------------------------
  66.   def maxsp
  67.     n = [[base_maxsp + @maxsp_plus, 0].max, 9999].min
  68.     for i in @states
  69.       n *= $data_states[i].maxsp_rate / 100.0
  70.     end
  71.     n = [[Integer(n), 0].max, 9999].min
  72.     return n
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取力量
  76.   #--------------------------------------------------------------------------
  77.   def str
  78.     n = [[base_str + @str_plus, 1].max, 999].min
  79.     for i in @states
  80.       n *= $data_states[i].str_rate / 100.0
  81.     end
  82.     n = [[Integer(n), 1].max, 999].min
  83.     return n
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 获取灵巧
  87.   #--------------------------------------------------------------------------
  88.   def dex
  89.     n = [[base_dex + @dex_plus, 1].max, 999].min
  90.     for i in @states
  91.       n *= $data_states[i].dex_rate / 100.0
  92.     end
  93.     n = [[Integer(n), 1].max, 999].min
  94.     return n
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 获取速度
  98.   #--------------------------------------------------------------------------
  99.   def agi
  100.     n = [[base_agi + @agi_plus, 1].max, 999].min
  101.     for i in @states
  102.       n *= $data_states[i].agi_rate / 100.0
  103.     end
  104.     n = [[Integer(n), 1].max, 999].min
  105.     return n
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 获取魔力
  109.   #--------------------------------------------------------------------------
  110.   def int
  111.     n = [[base_int + @int_plus, 1].max, 999].min
  112.     for i in @states
  113.       n *= $data_states[i].int_rate / 100.0
  114.     end
  115.     n = [[Integer(n), 1].max, 999].min
  116.     return n
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● 设置 MaxHP
  120.   #     maxhp : 新的 MaxHP
  121.   #--------------------------------------------------------------------------
  122.   def maxhp=(maxhp)
  123.     @maxhp_plus += maxhp - self.maxhp
  124.     @maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min
  125.     @hp = [@hp, self.maxhp].min
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 设置 MaxSP
  129.   #     maxsp : 新的 MaxSP
  130.   #--------------------------------------------------------------------------
  131.   def maxsp=(maxsp)
  132.     @maxsp_plus += maxsp - self.maxsp
  133.     @maxsp_plus = [[@maxsp_plus, -9999].max, 9999].min
  134.     @sp = [@sp, self.maxsp].min
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 设置力量
  138.   #     str : 新的力量
  139.   #--------------------------------------------------------------------------
  140.   def str=(str)
  141.     @str_plus += str - self.str
  142.     @str_plus = [[@str_plus, -999].max, 999].min
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 设置灵巧
  146.   #     dex : 新的灵巧
  147.   #--------------------------------------------------------------------------
  148.   def dex=(dex)
  149.     @dex_plus += dex - self.dex
  150.     @dex_plus = [[@dex_plus, -999].max, 999].min
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 设置速度
  154.   #     agi : 新的速度
  155.   #--------------------------------------------------------------------------
  156.   def agi=(agi)
  157.     @agi_plus += agi - self.agi
  158.     @agi_plus = [[@agi_plus, -999].max, 999].min
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 设置魔力
  162.   #     int : 新的魔力
  163.   #--------------------------------------------------------------------------
  164.   def int=(int)
  165.     @int_plus += int - self.int
  166.     @int_plus = [[@int_plus, -999].max, 999].min
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 获取命中率
  170.   #--------------------------------------------------------------------------
  171.   def hit
  172.     n = 100
  173.     for i in @states
  174.       n *= $data_states[i].hit_rate / 100.0
  175.     end
  176.     return Integer(n)
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取攻击力
  180.   #--------------------------------------------------------------------------
  181.   def atk
  182.     n = base_atk
  183.     for i in @states
  184.       n *= $data_states[i].atk_rate / 100.0
  185.     end
  186.     return Integer(n)
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 获取物理防御
  190.   #--------------------------------------------------------------------------
  191.   def pdef
  192.     n = base_pdef
  193.     for i in @states
  194.       n *= $data_states[i].pdef_rate / 100.0
  195.     end
  196.     return Integer(n)
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # ● 获取魔法防御
  200.   #--------------------------------------------------------------------------
  201.   def mdef
  202.     n = base_mdef
  203.     for i in @states
  204.       n *= $data_states[i].mdef_rate / 100.0
  205.     end
  206.     return Integer(n)
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 获取回避修正
  210.   #--------------------------------------------------------------------------
  211.   def eva
  212.     n = base_eva
  213.     for i in @states
  214.       n += $data_states[i].eva
  215.     end
  216.     return n
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● 更改 HP
  220.   #     hp : 新的 HP
  221.   #--------------------------------------------------------------------------
  222.   def hp=(hp)
  223.     @hp = [[hp, maxhp].min, 0].max
  224.     # 解除附加的战斗不能状态
  225.     for i in 1...$data_states.size
  226.       if $data_states[i].zero_hp
  227.         if self.dead?
  228.           add_state(i)
  229.         else
  230.           remove_state(i)
  231.         end
  232.       end
  233.     end
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 更改 SP
  237.   #     sp : 新的 SP
  238.   #--------------------------------------------------------------------------
  239.   def sp=(sp)
  240.     @sp = [[sp, maxsp].min, 0].max
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 全回复
  244.   #--------------------------------------------------------------------------
  245.   def recover_all
  246.     @hp = maxhp
  247.     @sp = maxsp
  248.     for i in @states.clone
  249.       remove_state(i)
  250.     end
  251.   end
  252.   #--------------------------------------------------------------------------
  253.   # ● 获取当前的动作
  254.   #--------------------------------------------------------------------------
  255.   def current_action
  256.     return @current_action
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 确定动作速度
  260.   #--------------------------------------------------------------------------
  261.   def make_action_speed
  262.     @current_action.speed = agi + rand(10 + agi / 4)
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● 战斗不能判定
  266.   #--------------------------------------------------------------------------
  267.   def dead?
  268.     return (@hp == 0 and not @immortal)
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 存在判定
  272.   #--------------------------------------------------------------------------
  273.   def exist?
  274.     return (not @hidden and (@hp > 0 or @immortal))
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● HP 0 判定
  278.   #--------------------------------------------------------------------------
  279.   def hp0?
  280.     return (not @hidden and @hp == 0)
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 可以输入命令判定
  284.   #--------------------------------------------------------------------------
  285.   def inputable?
  286.     return (not @hidden and restriction <= 1)
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 可以行动判定
  290.   #--------------------------------------------------------------------------
  291.   def movable?
  292.     return (not @hidden and restriction < 4)
  293.   end
  294.   #--------------------------------------------------------------------------
  295.   # ● 防御中判定
  296.   #--------------------------------------------------------------------------
  297.   def guarding?
  298.     return (@current_action.kind == 0 and @current_action.basic == 1)
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● 休止中判定
  302.   #--------------------------------------------------------------------------
  303.   def resting?
  304.     return (@current_action.kind == 0 and @current_action.basic == 3)
  305.   end
  306. end
复制代码


Game_Battler (分割定义 2)
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 2)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 检查状态
  10.   #     state_id : 状态 ID
  11.   #--------------------------------------------------------------------------
  12.   def state?(state_id)
  13.     # 如果符合被附加的状态的条件就返回 ture
  14.     return @states.include?(state_id)
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 判断状态是否为 full
  18.   #     state_id : 状态 ID
  19.   #--------------------------------------------------------------------------
  20.   def state_full?(state_id)
  21.     # 如果符合被附加的状态的条件就返回 false
  22.     unless self.state?(state_id)
  23.       return false
  24.     end
  25.     # 秩序回合数 -1 (自动状态) 然后返回 true
  26.     if @states_turn[state_id] == -1
  27.       return true
  28.     end
  29.     # 当持续回合数等于自然解除的最低回合数时返回 ture
  30.     return @states_turn[state_id] == $data_states[state_id].hold_turn
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 附加状态
  34.   #     state_id : 状态 ID
  35.   #     force    : 强制附加标志 (处理自动状态时使用)
  36.   #--------------------------------------------------------------------------
  37.   def add_state(state_id, force = false)
  38.     # 无效状态的情况下
  39.     if $data_states[state_id] == nil
  40.       # 过程结束
  41.       return
  42.     end
  43.     # 无法强制附加的情况下
  44.     unless force
  45.       # 已存在的状态循环
  46.       for i in @states
  47.         # 新的状态和已经存在的状态 (-) 同时包含的情况下、
  48.         # 本状态不包含变化为新状态的状态变化 (-)
  49.         # (ex : 战斗不能与附加中毒同时存在的场合)
  50.         if $data_states[i].minus_state_set.include?(state_id) and
  51.            not $data_states[state_id].minus_state_set.include?(i)
  52.           # 过程结束
  53.           return
  54.         end
  55.       end
  56.     end
  57.     # 无法附加本状态的情况下
  58.     unless state?(state_id)
  59.       # 状态 ID 追加到 @states 序列中
  60.       @states.push(state_id)
  61.       # 选项 [当作 HP 0 的状态] 有效的情况下
  62.       if $data_states[state_id].zero_hp
  63.         # HP 更改为 0
  64.         @hp = 0
  65.       end
  66.       # 所有状态的循环
  67.       for i in 1...$data_states.size
  68.         # 状态变化 (+) 处理
  69.         if $data_states[state_id].plus_state_set.include?(i)
  70.           add_state(i)
  71.         end
  72.         # 状态变化 (-) 处理
  73.         if $data_states[state_id].minus_state_set.include?(i)
  74.           remove_state(i)
  75.         end
  76.       end
  77.       # 按比例大的排序 (值相等的情况下按照强度排序)
  78.       @states.sort! do |a, b|
  79.         state_a = $data_states[a]
  80.         state_b = $data_states[b]
  81.         if state_a.rating > state_b.rating
  82.           -1
  83.         elsif state_a.rating < state_b.rating
  84.           +1
  85.         elsif state_a.restriction > state_b.restriction
  86.           -1
  87.         elsif state_a.restriction < state_b.restriction
  88.           +1
  89.         else
  90.           a <=> b
  91.         end
  92.       end
  93.     end
  94.     # 强制附加的场合
  95.     if force
  96.       # 设置为自然解除的最低回数 -1 (无效)
  97.       @states_turn[state_id] = -1
  98.     end
  99.     # 不能强制附加的场合
  100.     unless  @states_turn[state_id] == -1
  101.       # 设置为自然解除的最低回数
  102.       @states_turn[state_id] = $data_states[state_id].hold_turn
  103.     end
  104.     # 无法行动的场合
  105.     unless movable?
  106.       # 清除行动
  107.       @current_action.clear
  108.     end
  109.     # 检查 HP 及 SP 的最大值
  110.     @hp = [@hp, self.maxhp].min
  111.     @sp = [@sp, self.maxsp].min
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 解除状态
  115.   #     state_id : 状态 ID
  116.   #     force    : 强制解除标志 (处理自动状态时使用)
  117.   #--------------------------------------------------------------------------
  118.   def remove_state(state_id, force = false)
  119.     # 无法附加本状态的情况下
  120.     if state?(state_id)
  121.       # 被强制附加的状态、并不是强制解除的情况下
  122.       if @states_turn[state_id] == -1 and not force
  123.         # 过程结束
  124.         return
  125.       end
  126.       # 现在的 HP 为 0 当作选项 [当作 HP 0 的状态]有效的场合
  127.       if @hp == 0 and $data_states[state_id].zero_hp
  128.         # 判断是否有另外的 [当作 HP 0 的状态]状态
  129.         zero_hp = false
  130.         for i in @states
  131.           if i != state_id and $data_states[i].zero_hp
  132.             zero_hp = true
  133.           end
  134.         end
  135.         # 如果可以解除战斗不能、将 HP 更改为 1
  136.         if zero_hp == false
  137.           @hp = 1
  138.         end
  139.       end
  140.       # 将状态 ID 从 @states 队列和 @states_turn hash 中删除
  141.       @states.delete(state_id)
  142.       @states_turn.delete(state_id)
  143.     end
  144.     # 检查 HP 及 SP 的最大值
  145.     @hp = [@hp, self.maxhp].min
  146.     @sp = [@sp, self.maxsp].min
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 获取状态的动画 ID
  150.   #--------------------------------------------------------------------------
  151.   def state_animation_id
  152.     # 一个状态也没被附加的情况下
  153.     if @states.size == 0
  154.       return 0
  155.     end
  156.     # 返回概率最大的状态动画 ID
  157.     return $data_states[@states[0]].animation_id
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 获取限制
  161.   #--------------------------------------------------------------------------
  162.   def restriction
  163.     restriction_max = 0
  164.     # 从当前附加的状态中获取最大的 restriction
  165.     for i in @states
  166.       if $data_states[i].restriction >= restriction_max
  167.         restriction_max = $data_states[i].restriction
  168.       end
  169.     end
  170.     return restriction_max
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 判断状态 [无法获得 EXP]
  174.   #--------------------------------------------------------------------------
  175.   def cant_get_exp?
  176.     for i in @states
  177.       if $data_states[i].cant_get_exp
  178.         return true
  179.       end
  180.     end
  181.     return false
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 判断状态 [无法回避攻击]
  185.   #--------------------------------------------------------------------------
  186.   def cant_evade?
  187.     for i in @states
  188.       if $data_states[i].cant_evade
  189.         return true
  190.       end
  191.     end
  192.     return false
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # ● 判断状态 [连续伤害]
  196.   #--------------------------------------------------------------------------
  197.   def slip_damage?
  198.     for i in @states
  199.       if $data_states[i].slip_damage
  200.         return true
  201.       end
  202.     end
  203.     return false
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 解除战斗用状态 (战斗结束时调用)
  207.   #--------------------------------------------------------------------------
  208.   def remove_states_battle
  209.     for i in @states.clone
  210.       if $data_states[i].battle_only
  211.         remove_state(i)
  212.       end
  213.     end
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● 状态自然解除 (回合改变时调用)
  217.   #--------------------------------------------------------------------------
  218.   def remove_states_auto
  219.     for i in @states_turn.keys.clone
  220.       if @states_turn[i] > 0
  221.         @states_turn[i] -= 1
  222.       elsif rand(100) < $data_states[i].auto_release_prob
  223.         remove_state(i)
  224.       end
  225.     end
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 状态攻击解除 (受到物理伤害时调用)
  229.   #--------------------------------------------------------------------------
  230.   def remove_states_shock
  231.     for i in @states.clone
  232.       if rand(100) < $data_states[i].shock_release_prob
  233.         remove_state(i)
  234.       end
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 状态变化 (+) 的适用
  239.   #     plus_state_set  : 状态变化 (+)
  240.   #--------------------------------------------------------------------------
  241.   def states_plus(plus_state_set)
  242.     # 清除有效标志
  243.     effective = false
  244.     # 循环 (附加状态)
  245.     for i in plus_state_set
  246.       # 无法防御本状态的情况下
  247.       unless self.state_guard?(i)
  248.         # 这个状态如果不是 full 的话就设置有效标志
  249.         effective |= self.state_full?(i) == false
  250.         # 状态为 [不能抵抗] 的情况下
  251.         if $data_states[i].nonresistance
  252.           # 设置状态变化标志
  253.           @state_changed = true
  254.           # 附加状态
  255.           add_state(i)
  256.         # 这个状态不是 full 的情况下
  257.         elsif self.state_full?(i) == false
  258.           # 将状态的有效度变换为概率、与随机数比较
  259.           if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]]
  260.             # 设置状态变化标志
  261.             @state_changed = true
  262.             # 附加状态
  263.             add_state(i)
  264.           end
  265.         end
  266.       end
  267.     end
  268.     # 过程结束
  269.     return effective
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 状态变化 (-) 的使用
  273.   #     minus_state_set : 状态变化 (-)
  274.   #--------------------------------------------------------------------------
  275.   def states_minus(minus_state_set)
  276.     # 清除有效标志
  277.     effective = false
  278.     # 循环 (解除状态)
  279.     for i in minus_state_set
  280.       # 如果这个状态被附加则设置有效标志
  281.       effective |= self.state?(i)
  282.       # 设置状态变化标志
  283.       @state_changed = true
  284.       # 解除状态
  285.       remove_state(i)
  286.     end
  287.     # 过程结束
  288.     return effective
  289.   end
  290. end
复制代码



作者: 薄荷冰水    时间: 2008-7-25 20:15
超出子数
分楼发
斑竹饶命....
Game_Actor
  1. #==============================================================================
  2. # ■ Game_Actor
  3. #------------------------------------------------------------------------------
  4. #  处理角色的类。本类在 Game_Actors 类 ($game_actors)
  5. # 的内部使用、Game_Party 类请参考 ($game_party) 。
  6. #==============================================================================

  7. class Game_Actor < Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :name                     # 名称
  12.   attr_reader   :character_name           # 角色 文件名
  13.   attr_reader   :character_hue            # 角色 色相
  14.   attr_reader   :class_id                 # 职业 ID
  15.   attr_reader   :weapon_id                # 武器 ID
  16.   attr_reader   :armor1_id                # 盾 ID
  17.   attr_reader   :armor2_id                # 头防具 ID
  18.   attr_reader   :armor3_id                # 身体体防具 ID
  19.   attr_reader   :armor4_id                # 装饰品 ID
  20.   attr_reader   :level                    # 水平
  21.   attr_reader   :exp                      # EXP
  22.   attr_reader   :skills                   # 特技
  23.   #--------------------------------------------------------------------------
  24.   # ● 初始化对像
  25.   #     actor_id : 角色 ID
  26.   #--------------------------------------------------------------------------
  27.   def initialize(actor_id)
  28.     super()
  29.     setup(actor_id)
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 设置
  33.   #     actor_id : 角色 ID
  34.   #--------------------------------------------------------------------------
  35.   def setup(actor_id)
  36.     actor = $data_actors[actor_id]
  37.     @actor_id = actor_id
  38.     @name = actor.name
  39.     @character_name = actor.character_name
  40.     @character_hue = actor.character_hue
  41.     @battler_name = actor.battler_name
  42.     @battler_hue = actor.battler_hue
  43.     @class_id = actor.class_id
  44.     @weapon_id = actor.weapon_id
  45.     @armor1_id = actor.armor1_id
  46.     @armor2_id = actor.armor2_id
  47.     @armor3_id = actor.armor3_id
  48.     @armor4_id = actor.armor4_id
  49.     @level = actor.initial_level
  50.     @exp_list = Array.new(101)
  51.     make_exp_list
  52.     @exp = @exp_list[@level]
  53.     @skills = []
  54.     @hp = maxhp
  55.     @sp = maxsp
  56.     @states = []
  57.     @states_turn = {}
  58.     @maxhp_plus = 0
  59.     @maxsp_plus = 0
  60.     @str_plus = 0
  61.     @dex_plus = 0
  62.     @agi_plus = 0
  63.     @int_plus = 0
  64.     # 学会特技
  65.     for i in 1..@level
  66.       for j in $data_classes[@class_id].learnings
  67.         if j.level == i
  68.           learn_skill(j.skill_id)
  69.         end
  70.       end
  71.     end
  72.     # 刷新自动状态
  73.     update_auto_state(nil, $data_armors[@armor1_id])
  74.     update_auto_state(nil, $data_armors[@armor2_id])
  75.     update_auto_state(nil, $data_armors[@armor3_id])
  76.     update_auto_state(nil, $data_armors[@armor4_id])
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 获取角色 ID
  80.   #--------------------------------------------------------------------------
  81.   def id
  82.     return @actor_id
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 获取索引
  86.   #--------------------------------------------------------------------------
  87.   def index
  88.     return $game_party.actors.index(self)
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 计算 EXP
  92.   #--------------------------------------------------------------------------
  93.   def make_exp_list
  94.     actor = $data_actors[@actor_id]
  95.     @exp_list[1] = 0
  96.     pow_i = 2.4 + actor.exp_inflation / 100.0
  97.     for i in 2..100
  98.       if i > actor.final_level
  99.         @exp_list[i] = 0
  100.       else
  101.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  102.         @exp_list[i] = @exp_list[i-1] + Integer(n)
  103.       end
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 取得属性修正值
  108.   #     element_id : 属性 ID
  109.   #--------------------------------------------------------------------------
  110.   def element_rate(element_id)
  111.     # 获取对应属性有效度的数值
  112.     table = [0,200,150,100,50,0,-100]
  113.     result = table[$data_classes[@class_id].element_ranks[element_id]]
  114.     # 防具能防御本属性的情况下效果减半
  115.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  116.       armor = $data_armors[i]
  117.       if armor != nil and armor.guard_element_set.include?(element_id)
  118.         result /= 2
  119.       end
  120.     end
  121.     # 状态能防御本属性的情况下效果减半
  122.     for i in @states
  123.       if $data_states[i].guard_element_set.include?(element_id)
  124.         result /= 2
  125.       end
  126.     end
  127.     # 过程结束
  128.     return result
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 获取属性有效度
  132.   #--------------------------------------------------------------------------
  133.   def state_ranks
  134.     return $data_classes[@class_id].state_ranks
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 判定防御属性
  138.   #     state_id : 属性 ID
  139.   #--------------------------------------------------------------------------
  140.   def state_guard?(state_id)
  141.     for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
  142.       armor = $data_armors[i]
  143.       if armor != nil
  144.         if armor.guard_state_set.include?(state_id)
  145.           return true
  146.         end
  147.       end
  148.     end
  149.     return false
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 获取普通攻击属性
  153.   #--------------------------------------------------------------------------
  154.   def element_set
  155.     weapon = $data_weapons[@weapon_id]
  156.     return weapon != nil ? weapon.element_set : []
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 获取普通攻击状态变化 (+)
  160.   #--------------------------------------------------------------------------
  161.   def plus_state_set
  162.     weapon = $data_weapons[@weapon_id]
  163.     return weapon != nil ? weapon.plus_state_set : []
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 获取普通攻击状态变化 (-)
  167.   #--------------------------------------------------------------------------
  168.   def minus_state_set
  169.     weapon = $data_weapons[@weapon_id]
  170.     return weapon != nil ? weapon.minus_state_set : []
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 获取 MaxHP
  174.   #--------------------------------------------------------------------------
  175.   def maxhp
  176.     n = [[base_maxhp + @maxhp_plus, 1].max, 9999].min
  177.     for i in @states
  178.       n *= $data_states[i].maxhp_rate / 100.0
  179.     end
  180.     n = [[Integer(n), 1].max, 9999].min
  181.     return n
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 获取基本 MaxHP
  185.   #--------------------------------------------------------------------------
  186.   def base_maxhp
  187.     return $data_actors[@actor_id].parameters[0, @level]
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 获取基本 MaxSP
  191.   #--------------------------------------------------------------------------
  192.   def base_maxsp
  193.     return $data_actors[@actor_id].parameters[1, @level]
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 获取基本力量
  197.   #--------------------------------------------------------------------------
  198.   def base_str
  199.     n = $data_actors[@actor_id].parameters[2, @level]
  200.     weapon = $data_weapons[@weapon_id]
  201.     armor1 = $data_armors[@armor1_id]
  202.     armor2 = $data_armors[@armor2_id]
  203.     armor3 = $data_armors[@armor3_id]
  204.     armor4 = $data_armors[@armor4_id]
  205.     n += weapon != nil ? weapon.str_plus : 0
  206.     n += armor1 != nil ? armor1.str_plus : 0
  207.     n += armor2 != nil ? armor2.str_plus : 0
  208.     n += armor3 != nil ? armor3.str_plus : 0
  209.     n += armor4 != nil ? armor4.str_plus : 0
  210.     return [[n, 1].max, 999].min
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 获取基本灵巧
  214.   #--------------------------------------------------------------------------
  215.   def base_dex
  216.     n = $data_actors[@actor_id].parameters[3, @level]
  217.     weapon = $data_weapons[@weapon_id]
  218.     armor1 = $data_armors[@armor1_id]
  219.     armor2 = $data_armors[@armor2_id]
  220.     armor3 = $data_armors[@armor3_id]
  221.     armor4 = $data_armors[@armor4_id]
  222.     n += weapon != nil ? weapon.dex_plus : 0
  223.     n += armor1 != nil ? armor1.dex_plus : 0
  224.     n += armor2 != nil ? armor2.dex_plus : 0
  225.     n += armor3 != nil ? armor3.dex_plus : 0
  226.     n += armor4 != nil ? armor4.dex_plus : 0
  227.     return [[n, 1].max, 999].min
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 获取基本速度
  231.   #--------------------------------------------------------------------------
  232.   def base_agi
  233.     n = $data_actors[@actor_id].parameters[4, @level]
  234.     weapon = $data_weapons[@weapon_id]
  235.     armor1 = $data_armors[@armor1_id]
  236.     armor2 = $data_armors[@armor2_id]
  237.     armor3 = $data_armors[@armor3_id]
  238.     armor4 = $data_armors[@armor4_id]
  239.     n += weapon != nil ? weapon.agi_plus : 0
  240.     n += armor1 != nil ? armor1.agi_plus : 0
  241.     n += armor2 != nil ? armor2.agi_plus : 0
  242.     n += armor3 != nil ? armor3.agi_plus : 0
  243.     n += armor4 != nil ? armor4.agi_plus : 0
  244.     return [[n, 1].max, 999].min
  245.   end
  246.   #--------------------------------------------------------------------------
  247.   # ● 获取基本魔力
  248.   #--------------------------------------------------------------------------
  249.   def base_int
  250.     n = $data_actors[@actor_id].parameters[5, @level]
  251.     weapon = $data_weapons[@weapon_id]
  252.     armor1 = $data_armors[@armor1_id]
  253.     armor2 = $data_armors[@armor2_id]
  254.     armor3 = $data_armors[@armor3_id]
  255.     armor4 = $data_armors[@armor4_id]
  256.     n += weapon != nil ? weapon.int_plus : 0
  257.     n += armor1 != nil ? armor1.int_plus : 0
  258.     n += armor2 != nil ? armor2.int_plus : 0
  259.     n += armor3 != nil ? armor3.int_plus : 0
  260.     n += armor4 != nil ? armor4.int_plus : 0
  261.     return [[n, 1].max, 999].min
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 获取基本攻击力
  265.   #--------------------------------------------------------------------------
  266.   def base_atk
  267.     weapon = $data_weapons[@weapon_id]
  268.     return weapon != nil ? weapon.atk : 0
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 获取基本物理防御
  272.   #--------------------------------------------------------------------------
  273.   def base_pdef
  274.     weapon = $data_weapons[@weapon_id]
  275.     armor1 = $data_armors[@armor1_id]
  276.     armor2 = $data_armors[@armor2_id]
  277.     armor3 = $data_armors[@armor3_id]
  278.     armor4 = $data_armors[@armor4_id]
  279.     pdef1 = weapon != nil ? weapon.pdef : 0
  280.     pdef2 = armor1 != nil ? armor1.pdef : 0
  281.     pdef3 = armor2 != nil ? armor2.pdef : 0
  282.     pdef4 = armor3 != nil ? armor3.pdef : 0
  283.     pdef5 = armor4 != nil ? armor4.pdef : 0
  284.     return pdef1 + pdef2 + pdef3 + pdef4 + pdef5
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 获取基本魔法防御
  288.   #--------------------------------------------------------------------------
  289.   def base_mdef
  290.     weapon = $data_weapons[@weapon_id]
  291.     armor1 = $data_armors[@armor1_id]
  292.     armor2 = $data_armors[@armor2_id]
  293.     armor3 = $data_armors[@armor3_id]
  294.     armor4 = $data_armors[@armor4_id]
  295.     mdef1 = weapon != nil ? weapon.mdef : 0
  296.     mdef2 = armor1 != nil ? armor1.mdef : 0
  297.     mdef3 = armor2 != nil ? armor2.mdef : 0
  298.     mdef4 = armor3 != nil ? armor3.mdef : 0
  299.     mdef5 = armor4 != nil ? armor4.mdef : 0
  300.     return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # ● 获取基本回避修正
  304.   #--------------------------------------------------------------------------
  305.   def base_eva
  306.     armor1 = $data_armors[@armor1_id]
  307.     armor2 = $data_armors[@armor2_id]
  308.     armor3 = $data_armors[@armor3_id]
  309.     armor4 = $data_armors[@armor4_id]
  310.     eva1 = armor1 != nil ? armor1.eva : 0
  311.     eva2 = armor2 != nil ? armor2.eva : 0
  312.     eva3 = armor3 != nil ? armor3.eva : 0
  313.     eva4 = armor4 != nil ? armor4.eva : 0
  314.     return eva1 + eva2 + eva3 + eva4
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 普通攻击 获取攻击方动画 ID
  318.   #--------------------------------------------------------------------------
  319.   def animation1_id
  320.     weapon = $data_weapons[@weapon_id]
  321.     return weapon != nil ? weapon.animation1_id : 0
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 普通攻击 获取对像方动画 ID
  325.   #--------------------------------------------------------------------------
  326.   def animation2_id
  327.     weapon = $data_weapons[@weapon_id]
  328.     return weapon != nil ? weapon.animation2_id : 0
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # ● 获取类名
  332.   #--------------------------------------------------------------------------
  333.   def class_name
  334.     return $data_classes[@class_id].name
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 获取 EXP 字符串
  338.   #--------------------------------------------------------------------------
  339.   def exp_s
  340.     return @exp_list[@level+1] > 0 ? @exp.to_s : "-------"
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 获取下一等级的 EXP 字符串
  344.   #--------------------------------------------------------------------------
  345.   def next_exp_s
  346.     return @exp_list[@level+1] > 0 ? @exp_list[@level+1].to_s : "-------"
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # ● 获取离下一等级还需的 EXP 字符串
  350.   #--------------------------------------------------------------------------
  351.   def next_rest_exp_s
  352.     return @exp_list[@level+1] > 0 ?
  353.       (@exp_list[@level+1] - @exp).to_s : "-------"
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # ● 更新自动状态
  357.   #     old_armor : 卸下防具
  358.   #     new_armor : 装备防具
  359.   #--------------------------------------------------------------------------
  360.   def update_auto_state(old_armor, new_armor)
  361.     # 强制解除卸下防具的自动状态
  362.     if old_armor != nil and old_armor.auto_state_id != 0
  363.       remove_state(old_armor.auto_state_id, true)
  364.     end
  365.     # 强制附加装备防具的自动状态
  366.     if new_armor != nil and new_armor.auto_state_id != 0
  367.       add_state(new_armor.auto_state_id, true)
  368.     end
  369.   end
  370.   #--------------------------------------------------------------------------
  371.   # ● 装备固定判定
  372.   #     equip_type : 装备类型
  373.   #--------------------------------------------------------------------------
  374.   def equip_fix?(equip_type)
  375.     case equip_type
  376.     when 0  # 武器
  377.       return $data_actors[@actor_id].weapon_fix
  378.     when 1  # 盾
  379.       return $data_actors[@actor_id].armor1_fix
  380.     when 2  # 头
  381.       return $data_actors[@actor_id].armor2_fix
  382.     when 3  # 身体
  383.       return $data_actors[@actor_id].armor3_fix
  384.     when 4  # 装饰品
  385.       return $data_actors[@actor_id].armor4_fix
  386.     end
  387.     return false
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # ● 变更装备
  391.   #     equip_type : 装备类型
  392.   #     id    : 武器 or 防具 ID  (0 为解除装备)
  393.   #--------------------------------------------------------------------------
  394.   def equip(equip_type, id)
  395.     case equip_type
  396.     when 0  # 武器
  397.       if id == 0 or $game_party.weapon_number(id) > 0
  398.         $game_party.gain_weapon(@weapon_id, 1)
  399.         @weapon_id = id
  400.         $game_party.lose_weapon(id, 1)
  401.       end
  402.     when 1  # 盾
  403.       if id == 0 or $game_party.armor_number(id) > 0
  404.         update_auto_state($data_armors[@armor1_id], $data_armors[id])
  405.         $game_party.gain_armor(@armor1_id, 1)
  406.         @armor1_id = id
  407.         $game_party.lose_armor(id, 1)
  408.       end
  409.     when 2  # 头
  410.       if id == 0 or $game_party.armor_number(id) > 0
  411.         update_auto_state($data_armors[@armor2_id], $data_armors[id])
  412.         $game_party.gain_armor(@armor2_id, 1)
  413.         @armor2_id = id
  414.         $game_party.lose_armor(id, 1)
  415.       end
  416.     when 3  # 身体
  417.       if id == 0 or $game_party.armor_number(id) > 0
  418.         update_auto_state($data_armors[@armor3_id], $data_armors[id])
  419.         $game_party.gain_armor(@armor3_id, 1)
  420.         @armor3_id = id
  421.         $game_party.lose_armor(id, 1)
  422.       end
  423.     when 4  # 装饰品
  424.       if id == 0 or $game_party.armor_number(id) > 0
  425.         update_auto_state($data_armors[@armor4_id], $data_armors[id])
  426.         $game_party.gain_armor(@armor4_id, 1)
  427.         @armor4_id = id
  428.         $game_party.lose_armor(id, 1)
  429.       end
  430.     end
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 可以装备判定
  434.   #     item : 物品
  435.   #--------------------------------------------------------------------------
  436.   def equippable?(item)
  437.     # 武器的情况
  438.     if item.is_a?(RPG::Weapon)
  439.       # 包含当前的职业可以装备武器的场合
  440.       if $data_classes[@class_id].weapon_set.include?(item.id)
  441.         return true
  442.       end
  443.     end
  444.     # 防具的情况
  445.     if item.is_a?(RPG::Armor)
  446.       # 不包含当前的职业可以装备武器的场合
  447.       if $data_classes[@class_id].armor_set.include?(item.id)
  448.         return true
  449.       end
  450.     end
  451.     return false
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ● 更改 EXP
  455.   #     exp : 新的 EXP
  456.   #--------------------------------------------------------------------------
  457.   def exp=(exp)
  458.     @exp = [[exp, 9999999].min, 0].max
  459.     # 升级
  460.     while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
  461.       @level += 1
  462.       @hp = maxhp
  463.       @sp = maxsp
  464.       # 学会特技
  465.       for j in $data_classes[@class_id].learnings
  466.         if j.level == @level
  467.           learn_skill(j.skill_id)
  468.         end
  469.       end
  470.     end
  471.     # 降级
  472.     while @exp < @exp_list[@level]
  473.       @level -= 1
  474.     end
  475.     # 修正当前的 HP 与 SP 超过最大值
  476.     @hp = [@hp, self.maxhp].min
  477.     @sp = [@sp, self.maxsp].min
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ● 更改水品
  481.   #     level : 新的等级
  482.   #--------------------------------------------------------------------------
  483.   def level=(level)
  484.     # 检查上下限
  485.     level = [[level, $data_actors[@actor_id].final_level].min, 1].max
  486.     # 更改 EXP
  487.     self.exp = @exp_list[level]
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● 觉悟特技
  491.   #     skill_id : 特技 ID
  492.   #--------------------------------------------------------------------------
  493.   def learn_skill(skill_id)
  494.     if skill_id > 0 and not skill_learn?(skill_id)
  495.       @skills.push(skill_id)
  496.       @skills.sort!
  497.     end
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ● 遗忘特技
  501.   #     skill_id : 特技 ID
  502.   #--------------------------------------------------------------------------
  503.   def forget_skill(skill_id)
  504.     @skills.delete(skill_id)
  505.   end
  506.   #--------------------------------------------------------------------------
  507.   # ● 已经学会的特技判定
  508.   #     skill_id : 特技 ID
  509.   #--------------------------------------------------------------------------
  510.   def skill_learn?(skill_id)
  511.     return @skills.include?(skill_id)
  512.   end
  513.   #--------------------------------------------------------------------------
  514.   # ● 可以使用特技判定
  515.   #     skill_id : 特技 ID
  516.   #--------------------------------------------------------------------------
  517.   def skill_can_use?(skill_id)
  518.     if not skill_learn?(skill_id)
  519.       return false
  520.     end
  521.     return super
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 更改名称
  525.   #     name : 新的名称
  526.   #--------------------------------------------------------------------------
  527.   def name=(name)
  528.     @name = name
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● 更改职业 ID
  532.   #     class_id : 新的职业 ID
  533.   #--------------------------------------------------------------------------
  534.   def class_id=(class_id)
  535.     if $data_classes[class_id] != nil
  536.       @class_id = class_id
  537.       # 避开无法装备的物品
  538.       unless equippable?($data_weapons[@weapon_id])
  539.         equip(0, 0)
  540.       end
  541.       unless equippable?($data_armors[@armor1_id])
  542.         equip(1, 0)
  543.       end
  544.       unless equippable?($data_armors[@armor2_id])
  545.         equip(2, 0)
  546.       end
  547.       unless equippable?($data_armors[@armor3_id])
  548.         equip(3, 0)
  549.       end
  550.       unless equippable?($data_armors[@armor4_id])
  551.         equip(4, 0)
  552.       end
  553.     end
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 更改图形
  557.   #     character_name : 新的角色 文件名
  558.   #     character_hue  : 新的角色 色相
  559.   #     battler_name   : 新的战斗者 文件名
  560.   #     battler_hue    : 新的战斗者 色相
  561.   #--------------------------------------------------------------------------
  562.   def set_graphic(character_name, character_hue, battler_name, battler_hue)
  563.     @character_name = character_name
  564.     @character_hue = character_hue
  565.     @battler_name = battler_name
  566.     @battler_hue = battler_hue
  567.   end
  568.   #--------------------------------------------------------------------------
  569.   # ● 取得战斗画面的 X 坐标
  570.   #--------------------------------------------------------------------------
  571.   def screen_x
  572.     # 返回计算后的队伍 X 坐标的排列顺序
  573.     case self.index
  574.     when 0
  575.       return 550
  576.     when 1
  577.       return 440
  578.     when 2
  579.       return 590
  580.     when 3
  581.       return 480
  582.     else
  583.       return 640
  584.     end
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● 取得战斗画面的 Y 坐标
  588.   #--------------------------------------------------------------------------
  589.   def screen_y
  590.     case self.index
  591.     when 0
  592.       return 270
  593.     when 1
  594.       return 320
  595.     when 2
  596.       return 390
  597.     when 3
  598.       return 420
  599.     else
  600.       return 1000
  601.     end
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 取得战斗画面的 Z 坐标
  605.   #--------------------------------------------------------------------------
  606.   def screen_z
  607.     # 返回计算后的队伍 Z 坐标的排列顺序
  608.     case self.index
  609.     when 0
  610.       return 1
  611.     when 1
  612.       return 0
  613.     when 2
  614.       return 2
  615.     when 3
  616.       return 3
  617.     else
  618.       return 0
  619.     end
  620.   end
  621. end
复制代码



Game_BattleAction
  1. #==============================================================================
  2. # ■ Game_BattleAction
  3. #------------------------------------------------------------------------------
  4. #  处理行动 (战斗中的行动) 的类。这个类在 Game_Battler 类
  5. # 的内部使用。
  6. #==============================================================================

  7. class Game_BattleAction
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :speed                    # 速度
  12.   attr_accessor :kind                     # 种类 (基本 / 特技 / 物品)
  13.   attr_accessor :basic                    # 基本 (攻击 / 防御 / 逃跑)
  14.   attr_accessor :skill_id                 # 特技 ID
  15.   attr_accessor :item_id                  # 物品 ID
  16.   attr_accessor :target_index             # 对像索引
  17.   attr_accessor :forcing                  # 強强制标志
  18.   #--------------------------------------------------------------------------
  19.   # ● 初始化对像
  20.   #--------------------------------------------------------------------------
  21.   def initialize
  22.     clear
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 清除
  26.   #--------------------------------------------------------------------------
  27.   def clear
  28.     @speed = 0
  29.     @kind = 0
  30.     @basic = 3
  31.     @skill_id = 0
  32.     @item_id = 0
  33.     @target_index = -1
  34.     @forcing = false
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 有效判定
  38.   #--------------------------------------------------------------------------
  39.   def valid?
  40.     return (not (@kind == 0 and @basic == 3))
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 己方单体使用判定
  44.   #--------------------------------------------------------------------------
  45.   def for_one_friend?
  46.     # 种类为特级、效果范围是我方单体 (包含 HP 0) 的情况
  47.     if @kind == 1 and [3, 5].include?($data_skills[@skill_id].scope)
  48.       return true
  49.     end
  50.     # 种类为物品、效果范围是我方单体 (包含 HP 0) 的情况
  51.     if @kind == 2 and [3, 5].include?($data_items[@item_id].scope)
  52.       return true
  53.     end
  54.     return false
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 己方单体用 (HP 0) 判定
  58.   #--------------------------------------------------------------------------
  59.   def for_one_friend_hp0?
  60.     # 种类为特级、效果范围是我方单体 (HP 0) 的情况
  61.     if @kind == 1 and [5].include?($data_skills[@skill_id].scope)
  62.       return true
  63.     end
  64.     # 种类为物品、效果范围是我方单体 (HP 0) 的情况
  65.     if @kind == 2 and [5].include?($data_items[@item_id].scope)
  66.       return true
  67.     end
  68.     return false
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 随机目标 (角色用)
  72.   #--------------------------------------------------------------------------
  73.   def decide_random_target_for_actor
  74.     # 效果范围的分支
  75.     if for_one_friend_hp0?
  76.       battler = $game_party.random_target_actor_hp0
  77.     elsif for_one_friend?
  78.       battler = $game_party.random_target_actor
  79.     else
  80.       battler = $game_troop.random_target_enemy
  81.     end
  82.     # 对像存在的话取得索引、
  83.     # 对像不存在的场合下清除行动
  84.     if battler != nil
  85.       @target_index = battler.index
  86.     else
  87.       clear
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 随机目标 (敌人用)
  92.   #--------------------------------------------------------------------------
  93.   def decide_random_target_for_enemy
  94.     # 效果范围的分支
  95.     if for_one_friend_hp0?
  96.       battler = $game_troop.random_target_enemy_hp0
  97.     elsif for_one_friend?
  98.       battler = $game_troop.random_target_enemy
  99.     else
  100.       battler = $game_party.random_target_actor
  101.     end
  102.     # 对像存在的话取得索引、
  103.     # 对像不存在的场合下清除行动
  104.     if battler != nil
  105.       @target_index = battler.index
  106.     else
  107.       clear
  108.     end
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 最后的目标 (角色用)
  112.   #--------------------------------------------------------------------------
  113.   def decide_last_target_for_actor
  114.     # 效果范围是己方单体以及行动者、以外的的敌人
  115.     if @target_index == -1
  116.       battler = nil
  117.     elsif for_one_friend?
  118.       battler = $game_party.actors[@target_index]
  119.     else
  120.       battler = $game_troop.enemies[@target_index]
  121.     end
  122.     # 对像不存在的场合下清除行动
  123.     if battler == nil or not battler.exist?
  124.       clear
  125.     end
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 最后的目标 (敌人用)
  129.   #--------------------------------------------------------------------------
  130.   def decide_last_target_for_enemy
  131.     # 效果范围是己方单体以敌人、以外的的角色
  132.     if @target_index == -1
  133.       battler = nil
  134.     elsif for_one_friend?
  135.       battler = $game_troop.enemies[@target_index]
  136.     else
  137.       battler = $game_party.actors[@target_index]
  138.     end
  139.     # 对像不存在的场合下清除行动
  140.     if battler == nil or not battler.exist?
  141.       clear
  142.     end
  143.   end
  144. end
复制代码



作者: 灯笼菜刀王    时间: 2008-7-25 20:20
= =默认脚本?

害我看了老半天......

话说默认的不会有透明效果吧?

有没有用别的战斗脚本?
作者: 薄荷冰水    时间: 2008-7-25 20:22
Game_Battler (分割定义 3)
  1. #==============================================================================
  2. # ■ Game_Battler (分割定义 3)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  5. # 超级类来使用。
  6. #==============================================================================

  7. class Game_Battler
  8.   #--------------------------------------------------------------------------
  9.   # ● 可以使用特技的判定
  10.   #     skill_id : 特技 ID
  11.   #--------------------------------------------------------------------------
  12.   def skill_can_use?(skill_id)
  13.     # SP 不足的情况下不能使用
  14.     if $data_skills[skill_id].sp_cost > self.sp
  15.       return false
  16.     end
  17.     # 战斗不能的情况下不能使用
  18.     if dead?
  19.       return false
  20.     end
  21.     # 沉默状态的情况下、物理特技以外的特技不能使用
  22.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  23.       return false
  24.     end
  25.     # 获取可以使用的时机
  26.     occasion = $data_skills[skill_id].occasion
  27.     # 战斗中的情况下
  28.     if $game_temp.in_battle
  29.       # [平时] 或者是 [战斗中] 可以使用
  30.       return (occasion == 0 or occasion == 1)
  31.     # 不是战斗中的情况下
  32.     else
  33.       # [平时] 或者是 [菜单中] 可以使用
  34.       return (occasion == 0 or occasion == 2)
  35.     end
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 应用通常攻击效果
  39.   #     attacker : 攻击者 (battler)
  40.   #--------------------------------------------------------------------------
  41.   def attack_effect(attacker)
  42.     # 清除会心一击标志
  43.     self.critical = false
  44.     # 第一命中判定
  45.     hit_result = (rand(100) < attacker.hit)
  46.     # 命中的情况下
  47.     if hit_result == true
  48.       # 计算基本伤害
  49.       atk = [attacker.atk - self.pdef / 2, 0].max
  50.       self.damage = atk * (20 + attacker.str) / 20
  51.       # 属性修正
  52.       self.damage *= elements_correct(attacker.element_set)
  53.       self.damage /= 100
  54.       # 伤害符号正确的情况下
  55.       if self.damage > 0
  56.         # 会心一击修正
  57.         if rand(100) < 4 * attacker.dex / self.agi
  58.           self.damage *= 2
  59.           self.critical = true
  60.         end
  61.         # 防御修正
  62.         if self.guarding?
  63.           self.damage /= 2
  64.         end
  65.       end
  66.       # 分散
  67.       if self.damage.abs > 0
  68.         amp = [self.damage.abs * 15 / 100, 1].max
  69.         self.damage += rand(amp+1) + rand(amp+1) - amp
  70.       end
  71.       # 第二命中判定
  72.       eva = 8 * self.agi / attacker.dex + self.eva
  73.       hit = self.damage < 0 ? 100 : 100 - eva
  74.       hit = self.cant_evade? ? 100 : hit
  75.       hit_result = (rand(100) < hit)
  76.     end
  77.     # 命中的情况下
  78.     if hit_result == true
  79.       # 状态冲击解除
  80.       remove_states_shock
  81.       # HP 的伤害计算
  82.       self.hp -= self.damage
  83.       # 状态变化
  84.       @state_changed = false
  85.       states_plus(attacker.plus_state_set)
  86.       states_minus(attacker.minus_state_set)
  87.     # Miss 的情况下
  88.     else
  89.       # 伤害设置为 "Miss"
  90.       self.damage = "Miss"
  91.       # 清除会心一击标志
  92.       self.critical = false
  93.     end
  94.     # 过程结束
  95.     return true
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● 应用特技效果
  99.   #     user  : 特技的使用者 (battler)
  100.   #     skill : 特技
  101.   #--------------------------------------------------------------------------
  102.   def skill_effect(user, skill)
  103.     # 清除会心一击标志
  104.     self.critical = false
  105.     # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  106.     # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  107.     if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
  108.        ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
  109.       # 过程结束
  110.       return false
  111.     end
  112.     # 清除有效标志
  113.     effective = false
  114.     # 公共事件 ID 是有效的情况下,设置为有效标志
  115.     effective |= skill.common_event_id > 0
  116.     # 第一命中判定
  117.     hit = skill.hit
  118.     if skill.atk_f > 0
  119.       hit *= user.hit / 100
  120.     end
  121.     hit_result = (rand(100) < hit)
  122.     # 不确定的特技的情况下设置为有效标志
  123.     effective |= hit < 100
  124.     # 命中的情况下
  125.     if hit_result == true
  126.       # 计算威力
  127.       power = skill.power + user.atk * skill.atk_f / 100
  128.       if power > 0
  129.         power -= self.pdef * skill.pdef_f / 200
  130.         power -= self.mdef * skill.mdef_f / 200
  131.         power = [power, 0].max
  132.       end
  133.       # 计算倍率
  134.       rate = 20
  135.       rate += (user.str * skill.str_f / 100)
  136.       rate += (user.dex * skill.dex_f / 100)
  137.       rate += (user.agi * skill.agi_f / 100)
  138.       rate += (user.int * skill.int_f / 100)
  139.       # 计算基本伤害
  140.       self.damage = power * rate / 20
  141.       # 属性修正
  142.       self.damage *= elements_correct(skill.element_set)
  143.       self.damage /= 100
  144.       # 伤害符号正确的情况下
  145.       if self.damage > 0
  146.         # 防御修正
  147.         if self.guarding?
  148.           self.damage /= 2
  149.         end
  150.       end
  151.       # 分散
  152.       if skill.variance > 0 and self.damage.abs > 0
  153.         amp = [self.damage.abs * skill.variance / 100, 1].max
  154.         self.damage += rand(amp+1) + rand(amp+1) - amp
  155.       end
  156.       # 第二命中判定
  157.       eva = 8 * self.agi / user.dex + self.eva
  158.       hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
  159.       hit = self.cant_evade? ? 100 : hit
  160.       hit_result = (rand(100) < hit)
  161.       # 不确定的特技的情况下设置为有效标志
  162.       effective |= hit < 100
  163.     end
  164.     # 命中的情况下
  165.     if hit_result == true
  166.       # 威力 0 以外的物理攻击的情况下
  167.       if skill.power != 0 and skill.atk_f > 0
  168.         # 状态冲击解除
  169.         remove_states_shock
  170.         # 设置有效标志
  171.         effective = true
  172.       end
  173.       # HP 的伤害减法运算
  174.       last_hp = self.hp
  175.       self.hp -= self.damage
  176.       effective |= self.hp != last_hp
  177.       # 状态变化
  178.       @state_changed = false
  179.       effective |= states_plus(skill.plus_state_set)
  180.       effective |= states_minus(skill.minus_state_set)
  181.       # 威力为 0 的场合
  182.       if skill.power == 0
  183.         # 伤害设置为空的字串
  184.         self.damage = ""
  185.         # 状态没有变化的情况下
  186.         unless @state_changed
  187.           # 伤害设置为 "Miss"
  188.           self.damage = "Miss"
  189.         end
  190.       end
  191.     # Miss 的情况下
  192.     else
  193.       # 伤害设置为 "Miss"
  194.       self.damage = "Miss"
  195.     end
  196.     # 不在战斗中的情况下
  197.     unless $game_temp.in_battle
  198.       # 伤害设置为 nil
  199.       self.damage = nil
  200.     end
  201.     # 过程结束
  202.     return effective
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 应用物品效果
  206.   #     item : 物品
  207.   #--------------------------------------------------------------------------
  208.   def item_effect(item)
  209.     # 清除会心一击标志
  210.     self.critical = false
  211.     # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
  212.     # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
  213.     if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
  214.        ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
  215.       # 过程结束
  216.       return false
  217.     end
  218.     # 清除有效标志
  219.     effective = false
  220.     # 公共事件 ID 是有效的情况下,设置为有效标志
  221.     effective |= item.common_event_id > 0
  222.     # 命中判定
  223.     hit_result = (rand(100) < item.hit)
  224.     # 不确定的特技的情况下设置为有效标志
  225.     effective |= item.hit < 100
  226.     # 命中的情况
  227.     if hit_result == true
  228.       # 计算回复量
  229.       recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
  230.       recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
  231.       if recover_hp < 0
  232.         recover_hp += self.pdef * item.pdef_f / 20
  233.         recover_hp += self.mdef * item.mdef_f / 20
  234.         recover_hp = [recover_hp, 0].min
  235.       end
  236.       # 属性修正
  237.       recover_hp *= elements_correct(item.element_set)
  238.       recover_hp /= 100
  239.       recover_sp *= elements_correct(item.element_set)
  240.       recover_sp /= 100
  241.       # 分散
  242.       if item.variance > 0 and recover_hp.abs > 0
  243.         amp = [recover_hp.abs * item.variance / 100, 1].max
  244.         recover_hp += rand(amp+1) + rand(amp+1) - amp
  245.       end
  246.       if item.variance > 0 and recover_sp.abs > 0
  247.         amp = [recover_sp.abs * item.variance / 100, 1].max
  248.         recover_sp += rand(amp+1) + rand(amp+1) - amp
  249.       end
  250.       # 回复量符号为负的情况下
  251.       if recover_hp < 0
  252.         # 防御修正
  253.         if self.guarding?
  254.           recover_hp /= 2
  255.         end
  256.       end
  257.       # HP 回复量符号的反转、设置伤害值
  258.       self.damage = -recover_hp
  259.       # HP 以及 SP 的回复
  260.       last_hp = self.hp
  261.       last_sp = self.sp
  262.       self.hp += recover_hp
  263.       self.sp += recover_sp
  264.       effective |= self.hp != last_hp
  265.       effective |= self.sp != last_sp
  266.       # 状态变化
  267.       @state_changed = false
  268.       effective |= states_plus(item.plus_state_set)
  269.       effective |= states_minus(item.minus_state_set)
  270.       # 能力上升值有效的情况下
  271.       if item.parameter_type > 0 and item.parameter_points != 0
  272.         # 能力值的分支
  273.         case item.parameter_type
  274.         when 1  # MaxHP
  275.           @maxhp_plus += item.parameter_points
  276.         when 2  # MaxSP
  277.           @maxsp_plus += item.parameter_points
  278.         when 3  # 力量
  279.           @str_plus += item.parameter_points
  280.         when 4  # 灵巧
  281.           @dex_plus += item.parameter_points
  282.         when 5  # 速度
  283.           @agi_plus += item.parameter_points
  284.         when 6  # 魔力
  285.           @int_plus += item.parameter_points
  286.         end
  287.         # 设置有效标志
  288.         effective = true
  289.       end
  290.       # HP 回复率与回复量为 0 的情况下
  291.       if item.recover_hp_rate == 0 and item.recover_hp == 0
  292.         # 设置伤害为空的字符串
  293.         self.damage = ""
  294.         # SP 回复率与回复量为 0、能力上升值无效的情况下
  295.         if item.recover_sp_rate == 0 and item.recover_sp == 0 and
  296.            (item.parameter_type == 0 or item.parameter_points == 0)
  297.           # 状态没有变化的情况下
  298.           unless @state_changed
  299.             # 伤害设置为 "Miss"
  300.             self.damage = "Miss"
  301.           end
  302.         end
  303.       end
  304.     # Miss 的情况下
  305.     else
  306.       # 伤害设置为 "Miss"
  307.       self.damage = "Miss"
  308.     end
  309.     # 不在战斗中的情况下
  310.     unless $game_temp.in_battle
  311.       # 伤害设置为 nil
  312.       self.damage = nil
  313.     end
  314.     # 过程结束
  315.     return effective
  316.   end
  317.   #--------------------------------------------------------------------------
  318.   # ● 应用连续伤害效果
  319.   #--------------------------------------------------------------------------
  320.   def slip_damage_effect
  321.     if self.state?(29) #尸毒
  322.       # 设置伤害
  323.       self.damage = self.maxhp / 10
  324.       # 分散
  325.       if self.damage.abs > 0
  326.         amp = [self.damage.abs * 15 / 100, 1].max
  327.         self.damage += rand(amp+1) + rand(amp+1) - amp
  328.       end
  329.       # HP 的伤害减法运算
  330.       self.hp -= self.damage
  331.     end
  332.     if self.state?(24) #雷毒   
  333.       # 设置伤害
  334.       self.damage = self.hp / 20
  335.       # HP 的伤害减法运算
  336.       self.hp -= self.damage
  337.     end
  338.     if self.state?(25) #火毒   
  339.       # 设置伤害
  340.       self.damage = self.maxhp / 20
  341.       # HP 的伤害减法运算
  342.       self.hp -= self.damage
  343.     end
  344.     if self.state?(26) #水毒   
  345.       # 设置伤害
  346.       self.damage = self.maxsp / 20
  347.       # HP 的伤害减法运算
  348.       self.sp -= self.damage
  349.     end
  350.     if self.state?(27) #风毒   
  351.       # 设置伤害
  352.       self.damage = self.sp / 20
  353.       # HP 的伤害减法运算
  354.       self.sp -= self.damage
  355.     end
  356.     if self.state?(28) #瘴毒   
  357.       # 设置伤害
  358.       self.damage = self.maxhp / 7
  359.       $t= self.maxsp / 7
  360.       # HP 的伤害减法运算
  361.       self.hp -= self.damage
  362.       self.sp -= $t
  363.     end
  364.     # 过程结束
  365.     return true
  366.   end

  367.   #--------------------------------------------------------------------------
  368.   # ● 属性修正计算
  369.   #     element_set : 属性
  370.   #--------------------------------------------------------------------------
  371.   def elements_correct(element_set)
  372.     # 無属性的情况
  373.     if element_set == []
  374.       # 返回 100
  375.       return 100
  376.     end
  377.     # 在被赋予的属性中返回最弱的
  378.     # ※过程 element_rate 是、本类以及继承的 Game_Actor
  379.     #   和 Game_Enemy 类的定义
  380.     weakest = -100
  381.     for i in element_set
  382.       weakest = [weakest, self.element_rate(i)].max
  383.     end
  384.     return weakest
  385.   end
  386. end
复制代码


Spriteset_Battle
  1. #==============================================================================
  2. # ■ Spriteset_Battle
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  5. # 的内部使用。
  6. #==============================================================================

  7. class Spriteset_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_reader   :viewport1                # 敌人方的显示端口
  12.   attr_reader   :viewport2                # 角色方的显示端口
  13.   #--------------------------------------------------------------------------
  14.   # ● 初始化变量
  15.   #--------------------------------------------------------------------------
  16.   def initialize
  17.     # 生成显示端口
  18.     @viewport1 = Viewport.new(0, 0, 640, 480)
  19.     @viewport2 = Viewport.new(0, 0, 640, 480)
  20.     @viewport3 = Viewport.new(0, 0, 640, 480)
  21.     @viewport4 = Viewport.new(0, 0, 640, 480)
  22.     @viewport2.z = 101
  23.     @viewport3.z = 200
  24.     @viewport4.z = 5000
  25.     # 生成战斗背景活动块
  26.     @battleback_sprite = Sprite.new(@viewport1)
  27.     # 生成敌人活动块
  28.     @enemy_sprites = []
  29.     for enemy in $game_troop.enemies.reverse
  30.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  31.     end
  32.     # 生成敌人活动块
  33.     @actor_sprites = []
  34.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  35.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  36.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  37.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  38.     # 生成天候
  39.     @weather = RPG::Weather.new(@viewport1)
  40.     # 生成图片活动块
  41.     @picture_sprites = []
  42.     for i in 51..100
  43.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  44.         $game_screen.pictures[i]))
  45.     end
  46.     # 生成计时器块
  47.     @timer_sprite = Sprite_Timer.new
  48.     # 刷新画面
  49.     update
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 释放
  53.   #--------------------------------------------------------------------------
  54.   def dispose
  55.     # 如果战斗背景位图存在的情况下就释放
  56.     if @battleback_sprite.bitmap != nil
  57.       @battleback_sprite.bitmap.dispose
  58.     end
  59.     # 释放战斗背景活动块
  60.     @battleback_sprite.dispose
  61.     # 释放敌人活动块、角色活动块
  62.     for sprite in @enemy_sprites + @actor_sprites
  63.       sprite.dispose
  64.     end
  65.     # 释放天候
  66.     @weather.dispose
  67.     # 释放图片活动块
  68.     for sprite in @picture_sprites
  69.       sprite.dispose
  70.     end
  71.     # 释放计时器活动块
  72.     @timer_sprite.dispose
  73.     # 释放显示端口
  74.     @viewport1.dispose
  75.     @viewport2.dispose
  76.     @viewport3.dispose
  77.     @viewport4.dispose
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 显示效果中判定
  81.   #--------------------------------------------------------------------------
  82.   def effect?
  83.     # 如果是在显示效果中的话就返回 true
  84.     for sprite in @enemy_sprites + @actor_sprites
  85.       return true if sprite.effect?
  86.     end
  87.     return false
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 刷新画面
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     # 刷新角色的活动块 (对应角色的替换)
  94.     @actor_sprites[0].battler = $game_party.actors[0]
  95.     @actor_sprites[1].battler = $game_party.actors[1]
  96.     @actor_sprites[2].battler = $game_party.actors[2]
  97.     @actor_sprites[3].battler = $game_party.actors[3]
  98.     # 战斗背景的文件名与现在情况有差异的情况下
  99.     if @battleback_name != $game_temp.battleback_name
  100.       @battleback_name = $game_temp.battleback_name
  101.       if @battleback_sprite.bitmap != nil
  102.         @battleback_sprite.bitmap.dispose
  103.       end
  104.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  105.       @battleback_sprite.src_rect.set(0, 0, 640, 480)
  106.     end
  107.     # 刷新战斗者的活动块
  108.     for sprite in @enemy_sprites + @actor_sprites
  109.       sprite.update
  110.     end
  111.     # 刷新天气图形
  112.     @weather.type = $game_screen.weather_type
  113.     @weather.max = $game_screen.weather_max
  114.     @weather.update
  115.     # 刷新图片活动块
  116.     for sprite in @picture_sprites
  117.       sprite.update
  118.     end
  119.     # 刷新计时器活动块
  120.     @timer_sprite.update
  121.     # 设置画面的色调与震动位置
  122.     @viewport1.tone = $game_screen.tone
  123.     @viewport1.ox = $game_screen.shake
  124.     # 设置画面的闪烁色
  125.     @viewport4.color = $game_screen.flash_color
  126.     # 刷新显示端口
  127.     @viewport1.update
  128.     @viewport2.update
  129.     @viewport4.update
  130.   end
  131. end
复制代码



Window_BattleStatus

  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #  显示战斗画面同伴状态的窗口。
  5. #==============================================================================

  6. class Window_BattleStatus < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 335, 640, 160)
  12.     self.opacity = 0
  13.     self.contents = Bitmap.new(width - 32, height - 32)
  14.     @level_up_flags = [false, false, false, false]
  15.     refresh
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 释放
  19.   #--------------------------------------------------------------------------
  20.   def dispose
  21.     super
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 设置升级标志
  25.   #     actor_index : 角色索引
  26.   #--------------------------------------------------------------------------
  27.   def level_up(actor_index)
  28.     @level_up_flags[actor_index] = true
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 刷新
  32.   #--------------------------------------------------------------------------
  33.   def refresh
  34.     self.contents.clear
  35.     @item_max = $game_party.actors.size
  36.     for i in 0...$game_party.actors.size
  37.       actor = $game_party.actors[i]
  38.       actor_x = i * 160 + 4
  39.       draw_actor_name(actor, actor_x, 0)
  40.       draw_actor_hp(actor, actor_x, 32, 120)
  41.       draw_actor_sp(actor, actor_x, 64, 120)
  42.       if @level_up_flags[i]
  43.         self.contents.font.color = normal_color
  44.         self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  45.       else
  46.         draw_actor_state(actor, actor_x, 96)
  47.       end
  48.     end
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 刷新画面
  52.   #--------------------------------------------------------------------------
  53.   def update
  54.     super
  55.     # 主界面的不透明度下降
  56.     if $game_temp.battle_main_phase
  57.       self.contents_opacity -= 4 if self.contents_opacity > 191
  58.     else
  59.       self.contents_opacity += 4 if self.contents_opacity < 255
  60.     end
  61.   end
  62. end
复制代码



Scene_Battle 1
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 1)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================

  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 初始化战斗用的各种暂时数据
  12.     $game_temp.in_battle = true
  13.     $game_temp.battle_turn = 0
  14.     $game_temp.battle_event_flags.clear
  15.     $game_temp.battle_abort = false
  16.     $game_temp.battle_main_phase = false
  17.     $game_temp.battleback_name = $game_map.battleback_name
  18.     $game_temp.forcing_battler = nil
  19.     # 初始化战斗用事件解释器
  20.     $game_system.battle_interpreter.setup(nil, 0)
  21.     # 准备队伍
  22.     @troop_id = $game_temp.battle_troop_id
  23.     $game_troop.setup(@troop_id)
  24.     # 生成角色命令窗口
  25.     s1 = $data_system.words.attack
  26.     s2 = $data_system.words.skill
  27.     s3 = $data_system.words.guard
  28.     s4 = $data_system.words.item
  29.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  30.     @actor_command_window.y = 160
  31.     @actor_command_window.back_opacity = 160
  32.     @actor_command_window.z = 9999
  33.     @actor_command_window.active = false
  34.     @actor_command_window.visible = false
  35.     # 生成其它窗口
  36.     @party_command_window = Window_PartyCommand.new
  37.     @help_window = Window_Help.new
  38.     @help_window.back_opacity = 160
  39.     @help_window.visible = false
  40.     @status_window = Window_BattleStatus.new
  41.     @message_window = Window_Message.new
  42.     # 生成活动块
  43.     @spriteset = Spriteset_Battle.new
  44.     # 初始化等待计数
  45.     @wait_count = 0
  46.     # 执行过渡
  47.     if $data_system.battle_transition == ""
  48.       Graphics.transition(20)
  49.     else
  50.       Graphics.transition(40, "Graphics/Transitions/" +
  51.         $data_system.battle_transition)
  52.     end
  53.     # 开始自由战斗回合
  54.     start_phase1
  55.     # 主循环
  56.     loop do
  57.       # 刷新游戏画面
  58.       Graphics.update
  59.       # 刷新输入信息
  60.       Input.update
  61.       # 刷新画面
  62.       update
  63.       # 如果画面切换的话就中断循环
  64.       if $scene != self
  65.         break
  66.       end
  67.     end
  68.     # 刷新地图
  69.     $game_map.refresh
  70.     # 准备过渡
  71.     Graphics.freeze
  72.     # 释放窗口
  73.     @actor_command_window.dispose
  74.     @party_command_window.dispose
  75.     @help_window.dispose
  76.     @status_window.dispose
  77.     @message_window.dispose
  78.     if @skill_window != nil
  79.       @skill_window.dispose
  80.     end
  81.     if @item_window != nil
  82.       @item_window.dispose
  83.     end
  84.     if @result_window != nil
  85.       @result_window.dispose
  86.     end
  87.     # 释放活动块
  88.     @spriteset.dispose
  89.     # 标题画面切换中的情况
  90.     if $scene.is_a?(Scene_Title)
  91.       # 淡入淡出画面
  92.       Graphics.transition
  93.       Graphics.freeze
  94.     end
  95.     # 战斗测试或者游戏结束以外的画面切换中的情况
  96.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  97.       $scene = nil
  98.     end
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 胜负判定
  102.   #--------------------------------------------------------------------------
  103.   def judge
  104.     # 全灭判定是真、并且同伴人数为 0 的情况下
  105.     if $game_party.all_dead? or $game_party.actors.size == 0
  106.       # 允许失败的情况下
  107.       if $game_temp.battle_can_lose
  108.         # 还原为战斗开始前的 BGM
  109.         $game_system.bgm_play($game_temp.map_bgm)
  110.         # 战斗结束
  111.         battle_end(2)
  112.         # 返回 true
  113.         return true
  114.       end
  115.       # 设置游戏结束标志
  116.       $game_temp.gameover = true
  117.       # 返回 true
  118.       return true
  119.     end
  120.     # 如果存在任意 1 个敌人就返回 false
  121.     for enemy in $game_troop.enemies
  122.       if enemy.exist?
  123.         return false
  124.       end
  125.     end
  126.     # 开始结束战斗回合 (胜利)
  127.     start_phase5
  128.     # 返回 true
  129.     return true
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 战斗结束
  133.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  134.   #--------------------------------------------------------------------------
  135.   def battle_end(result)
  136.     # 清除战斗中标志
  137.     $game_temp.in_battle = false
  138.     # 清除全体同伴的行动
  139.     $game_party.clear_actions
  140.     # 解除战斗用状态
  141.     for actor in $game_party.actors
  142.       actor.remove_states_battle
  143.     end
  144.     # 清除敌人
  145.     $game_troop.enemies.clear
  146.     # 调用战斗返回调用
  147.     if $game_temp.battle_proc != nil
  148.       $game_temp.battle_proc.call(result)
  149.       $game_temp.battle_proc = nil
  150.     end
  151.     # 切换到地图画面
  152.     $scene = Scene_Map.new
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 设置战斗事件
  156.   #--------------------------------------------------------------------------
  157.   def setup_battle_event
  158.     # 正在执行战斗事件的情况下
  159.     if $game_system.battle_interpreter.running?
  160.       return
  161.     end
  162.     # 搜索全部页的战斗事件
  163.     for index in 0...$data_troops[@troop_id].pages.size
  164.       # 获取事件页
  165.       page = $data_troops[@troop_id].pages[index]
  166.       # 事件条件可以参考 c
  167.       c = page.condition
  168.       # 没有指定任何条件的情况下转到下一页
  169.       unless c.turn_valid or c.enemy_valid or
  170.              c.actor_valid or c.switch_valid
  171.         next
  172.       end
  173.       # 执行完毕的情况下转到下一页
  174.       if $game_temp.battle_event_flags[index]
  175.         next
  176.       end
  177.       # 确认回合条件
  178.       if c.turn_valid
  179.         n = $game_temp.battle_turn
  180.         a = c.turn_a
  181.         b = c.turn_b
  182.         if (b == 0 and n != a) or
  183.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  184.           next
  185.         end
  186.       end
  187.       # 确认敌人条件
  188.       if c.enemy_valid
  189.         enemy = $game_troop.enemies[c.enemy_index]
  190.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  191.           next
  192.         end
  193.       end
  194.       # 确认角色条件
  195.       if c.actor_valid
  196.         actor = $game_actors[c.actor_id]
  197.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  198.           next
  199.         end
  200.       end
  201.       # 确认开关条件
  202.       if c.switch_valid
  203.         if $game_switches[c.switch_id] == false
  204.           next
  205.         end
  206.       end
  207.       # 设置事件
  208.       $game_system.battle_interpreter.setup(page.list, 0)
  209.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  210.       if page.span <= 1
  211.         # 设置执行结束标志
  212.         $game_temp.battle_event_flags[index] = true
  213.       end
  214.       return
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 刷新画面
  219.   #--------------------------------------------------------------------------
  220.   def update
  221.     # 执行战斗事件中的情况下
  222.     if $game_system.battle_interpreter.running?
  223.       # 刷新解释器
  224.       $game_system.battle_interpreter.update
  225.       # 强制行动的战斗者不存在的情况下
  226.       if $game_temp.forcing_battler == nil
  227.         # 执行战斗事件结束的情况下
  228.         unless $game_system.battle_interpreter.running?
  229.           # 继续战斗的情况下、再执行战斗事件的设置
  230.           unless judge
  231.             setup_battle_event
  232.           end
  233.         end
  234.         # 如果不是结束战斗回合的情况下
  235.         if @phase != 5
  236.           # 刷新状态窗口
  237.           @status_window.refresh
  238.         end
  239.       end
  240.     end
  241.     # 系统 (计时器)、刷新画面
  242.     $game_system.update
  243.     $game_screen.update
  244.     # 计时器为 0 的情况下
  245.     if $game_system.timer_working and $game_system.timer == 0
  246.       # 中断战斗
  247.       $game_temp.battle_abort = true
  248.     end
  249.     # 刷新窗口
  250.     @help_window.update
  251.     @party_command_window.update
  252.     @actor_command_window.update
  253.     @status_window.update
  254.     @message_window.update
  255.     # 刷新活动块
  256.     @spriteset.update
  257.     # 处理过渡中的情况下
  258.     if $game_temp.transition_processing
  259.       # 清除处理过渡中标志
  260.       $game_temp.transition_processing = false
  261.       # 执行过渡
  262.       if $game_temp.transition_name == ""
  263.         Graphics.transition(20)
  264.       else
  265.         Graphics.transition(40, "Graphics/Transitions/" +
  266.           $game_temp.transition_name)
  267.       end
  268.     end
  269.     # 显示信息窗口中的情况下
  270.     if $game_temp.message_window_showing
  271.       return
  272.     end
  273.     # 显示效果中的情况下
  274.     if @spriteset.effect?
  275.       return
  276.     end    # 游戏结束的情况下
  277.     if $game_temp.gameover
  278.       # 切换到游戏结束画面
  279.       $scene = Scene_Gameover.new
  280.       return
  281.     end
  282.     # 返回标题画面的情况下
  283.     if $game_temp.to_title
  284.       # 切换到标题画面
  285.       $scene = Scene_Title.new
  286.       return
  287.     end
  288.     # 中断战斗的情况下
  289.     if $game_temp.battle_abort
  290.       # 还原为战斗前的 BGM
  291.       $game_system.bgm_play($game_temp.map_bgm)
  292.       # 战斗结束
  293.       battle_end(1)
  294.       return
  295.     end
  296.     # 等待中的情况下
  297.     if @wait_count > 0
  298.       # 减少等待计数
  299.       @wait_count -= 1
  300.       return
  301.     end
  302.     # 强制行动的角色存在、
  303.     # 并且战斗事件正在执行的情况下
  304.     if $game_temp.forcing_battler == nil and
  305.        $game_system.battle_interpreter.running?
  306.       return
  307.     end
  308.     # 回合分支
  309.     case @phase
  310.     when 1  # 自由战斗回合
  311.       update_phase1
  312.     when 2  # 同伴命令回合
  313.       update_phase2
  314.     when 3  # 角色命令回合
  315.       update_phase3
  316.     when 4  # 主回合
  317.       update_phase4
  318.     when 5  # 战斗结束回合
  319.       update_phase5
  320.     end
  321.   end
  322. end
复制代码





基本都是默认的啦....只有一点点修改过...
你叫我发我才发的....其实默认的米啥好看...

我用的那些脚本
除了彩虹神剑和血槽显示
貌似都没有什么和战斗沾边的..
作者: 薄荷冰水    时间: 2008-7-25 20:30
以下引用灯笼菜刀王于2008-7-25 12:20:49的发言:

= =默认脚本?

害我看了老半天......

话说默认的不会有透明效果吧?

有没有用别的战斗脚本?





{/wx}我想那个调整透明度的
应该是在 处理战斗角色类那里
感觉应该在那里插入这个..

前面应该+什么字母我就不怎么清楚了
opacity = 0
作者: 灯笼菜刀王    时间: 2008-7-25 20:41
以下引用陈安于2008-7-24 22:56:13的发言:

   # 应该被显示的角色的情况下
   if @battler.is_a?(Game_Actor) and @battler_visible
     # 不是主状态的时候稍稍降低点透明度
     if $game_temp.battle_main_phase
       self.opacity += 3 if self.opacity < 255
     else
       self.opacity -= 3 if self.opacity > 255
     end
   end




这个早设置了,
解决了一部分的效果而已...


怎么说呢...

就是在等待命令的时候是半透明的
不是非主状态下透明.....不是在主状态下透明的我改掉了

等待命令的时候(攻击,法术,防御,物品)
是半透明的
很苦恼
那个   冏 囧 浻 埛 烱 綗。。。。。。。。


[本贴由作者于 2008-7-24 23:07:24 最后编辑]


pia飞, 竟然找到这个,删掉就可以了。
作者: 薄荷冰水    时间: 2008-7-25 21:16
估计你是理解错了....

再发个图..

估计你能看出是哪里出问题了...



你PIA飞的那个...是等待出手时的透明度(已经命令)
我要改的,是等待命令时的透明度(未下达命令)
作者: 灯笼菜刀王    时间: 2008-7-25 21:40
我试过了,默认的情况下删掉那一整句就全不透明。(是删掉,不是像你那样改判断)

包括等待命令。

话说,等待命令的时候会闪烁吧,保留闪烁就可以掩盖透明了嘛,-。-(转身就跑)
作者: 灯笼菜刀王    时间: 2008-7-25 21:49
(特殊一下,连一下贴-v-,因为之前去取证了)



看这两个比较,下面就是楼主要的效果吧,也就是删掉那句而已。

我不明白RGSS是怎么算255 > 255 的,反正事实证明,按你那样改,它会先+3然后-3,255是上限,+3还是255,但是减3一下就透明了(猜想-v-)

记得,战斗测试的时候要先CTRL+S,保存后战斗测试才是修改后的效果。修改脚本后直接战斗测试,还是使用上次保存的设定。
作者: 薄荷冰水    时间: 2008-7-25 22:11
    # 应该被显示的角色的情况下
    if @battler.is_a?(Game_Actor) and @battler_visible
      # 不是主状态的时候稍稍降低点透明度
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 255
      end
    end


我删掉了啊....
上面那段全删..
保存

还是等待命令时还是有透明....冏...RP问题吗
作者: 灯笼菜刀王    时间: 2008-7-25 22:39
全局搜索 $game_temp.battle_main_phase .......
没研究过彩虹剑, 不保证它没有重定义这个东西.... [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 薄荷冰水    时间: 2008-7-26 01:16
真的是彩虹神剑的问题...
    # 不是主状态的时候稍稍降低点透明度
    if $game_temp.battle_main_phase
      self.opacity += 3 if self.opacity < 255
    else
      self.opacity -= 3 if self.opacity > 207
    end
  end


改成    # 不是主状态的时候稍稍降低点透明度
    if $game_temp.battle_main_phase
      self.opacity += 3 if self.opacity < 255
    else
      self.opacity -= 3 if self.opacity > 255
    end
  end

可以了
搞半天是彩虹神剑的问题{/pz}........




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