查看: 4270|回复: 3

[已经解决] 關於回血變成扣寫狀態的另一個問題

[复制链接]
梦石
0
星屑
703
在线时间
313 小时
注册时间
2013-6-1
回帖
125
发表于 2013-9-2 15:34:34 | 显示全部楼层 |阅读模式

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

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

×
前幾天我問的回血變成扣寫狀態
雖然說放在Main上面會有效果 可是放在我自己找到的"技能熟練度"的下面就沒效果了

首先我先放原本的回寫變成扣寫的腳本:
[pre lang="ruby" line="1"]#==============================================================================
# 回血变扣血的状态 ID
DEDUCT_HP_STATE = 49
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # 清除会心一击标志
    self.critical = false
    # 特技的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
    # 或者特技的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # 过程结束
      return false
    end
    # 清除有效标志
    effective = false
    # 公共事件 ID 是有效的情况下,设置为有效标志
    effective |= skill.common_event_id > 0
    # 第一命中判定
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # 不确定的特技的情况下设置为有效标志
    effective |= hit < 100
    # 命中的情况下
    if hit_result == true
      # 计算威力
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      # 计算倍率
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      # 计算基本伤害
      self.damage = power * rate / 20
      # 属性修正
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # 伤害符号正确的情况下
      if self.damage > 0
        # 防御修正
        if self.guarding?
          self.damage /= 2
        end
      end
      # 分散
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # 第二命中判定
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # 不确定的特技的情况下设置为有效标志
      effective |= hit < 100
    end
    # 命中的情况下
    if hit_result == true
      # 威力 0 以外的物理攻击的情况下
      if skill.power != 0 and skill.atk_f > 0
        # 状态冲击解除
        remove_states_shock
        # 设置有效标志
        effective = true
      end
      # HP 的伤害减法运算
      last_hp = self.hp
      #########################################################################
      if self.state?(DEDUCT_HP_STATE) and self.damage < 0
        self.damage = -self.damage
      end
      #########################################################################
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # 状态变化
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # 威力为 0 的场合
      if skill.power == 0
        # 伤害设置为空的字串
        self.damage = ""
        # 状态没有变化的情况下
        unless @state_changed
          # 伤害设置为 "Miss"
          self.damage = "Miss"
        end
      end
    # Miss 的情况下
    else
      # 伤害设置为 "Miss"
      self.damage = "Miss"
    end
    # 不在战斗中的情况下
    unless $game_temp.in_battle
      # 伤害设置为 nil
      self.damage = nil
    end
    # 过程结束
    return effective
  end
  #--------------------------------------------------------------------------
  def item_effect(item)
    # 清除会心一击标志
    self.critical = false
    # 物品的效果范围是 HP 1 以上的己方、自己的 HP 为 0、
    # 或者物品的效果范围是 HP 0 的己方、自己的 HP 为 1 以上的情况下
    if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
       ((item.scope == 5 or item.scope == 6) and self.hp >= 1)
      # 过程结束
      return false
    end
    # 清除有效标志
    effective = false
    # 公共事件 ID 是有效的情况下,设置为有效标志
    effective |= item.common_event_id > 0
    # 命中判定
    hit_result = (rand(100) < item.hit)
    # 不确定的特技的情况下设置为有效标志
    effective |= item.hit < 100
    # 命中的情况
    if hit_result == true
      # 计算回复量
      recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
      recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
      if recover_hp < 0
        recover_hp += self.pdef * item.pdef_f / 20
        recover_hp += self.mdef * item.mdef_f / 20
        recover_hp = [recover_hp, 0].min
      end
      # 属性修正
      recover_hp *= elements_correct(item.element_set)
      recover_hp /= 100
      recover_sp *= elements_correct(item.element_set)
      recover_sp /= 100
      # 分散
      if item.variance > 0 and recover_hp.abs > 0
        amp = [recover_hp.abs * item.variance / 100, 1].max
        recover_hp += rand(amp+1) + rand(amp+1) - amp
      end
      if item.variance > 0 and recover_sp.abs > 0
        amp = [recover_sp.abs * item.variance / 100, 1].max
        recover_sp += rand(amp+1) + rand(amp+1) - amp
      end
      # 回复量符号为负的情况下
      if recover_hp < 0
        # 防御修正
        if self.guarding?
          recover_hp /= 2
        end
      end
      # HP 回复量符号的反转、设置伤害值
      self.damage = -recover_hp
      # HP 以及 SP 的回复
      last_hp = self.hp
      last_sp = self.sp
      ######################################################################
      if self.state?(DEDUCT_HP_STATE) and recover_hp > 0
        recover_hp = -recover_hp
      end
      ######################################################################
      self.hp += recover_hp
      self.sp += recover_sp
      effective |= self.hp != last_hp
      effective |= self.sp != last_sp
      # 状态变化
      @state_changed = false
      effective |= states_plus(item.plus_state_set)
      effective |= states_minus(item.minus_state_set)
      # 能力上升值有效的情况下
      if item.parameter_type > 0 and item.parameter_points != 0
        # 能力值的分支
        case item.parameter_type
        when 1  # MaxHP
          @maxhp_plus += item.parameter_points
        when 2  # MaxSP
          @maxsp_plus += item.parameter_points
        when 3  # 力量
          @str_plus += item.parameter_points
        when 4  # 灵巧
          @dex_plus += item.parameter_points
        when 5  # 速度
          @agi_plus += item.parameter_points
        when 6  # 魔力
          @int_plus += item.parameter_points
        end
        # 设置有效标志
        effective = true
      end
      # HP 回复率与回复量为 0 的情况下
      if item.recover_hp_rate == 0 and item.recover_hp == 0
        # 设置伤害为空的字符串
        self.damage = ""
        # SP 回复率与回复量为 0、能力上升值无效的情况下
        if item.recover_sp_rate == 0 and item.recover_sp == 0 and
           (item.parameter_type == 0 or item.parameter_points == 0)
          # 状态没有变化的情况下
          unless @state_changed
            # 伤害设置为 "Miss"
            self.damage = "Miss"
          end
        end
      end
    # Miss 的情况下
    else
      # 伤害设置为 "Miss"
      self.damage = "Miss"
    end
    # 不在战斗中的情况下
    unless $game_temp.in_battle
      # 伤害设置为 nil
      self.damage = nil
    end
    # 过程结束
    return effective
  end
end[/pre]

再來"技能熟練度"腳本:
[pre lang="ruby" line="1"]#==============================================================================
# ★★★★★★★★ 技能等級設定腳本 BY:愚零鬥武多 ★★★★★★★★
# ■想要用別客氣就直接拿去吧,腳本這種東西哪有版權可言=.=|||
#==============================================================================
# 此腳本可實現技能累積使用次數增加熟練度藉以提升技能等級的功能
# 每位角色會自動在程式中建立專屬技能熟練與等級的資料庫,跟隨存檔
# 適合想脫離常規技能製作的製作者,難度中等
# 目前只有攻擊和回復技能威力會受等級影響,其他狀態添加類或地圖技能
# 有興趣者可自行在def skill_effect(user, skill)添加功能
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能的設定法:
# SKILL_EXP_LIST =
# {
# 技能ID=>[等級2累積熟練度,等級3累積熟練度,等級4累積熟練度..],
# "END"=>0}
# ◆範例:
# SKILL_EXP_LIST =
# {
# 1=>[2,4,6],
# 2=>[4,8],
# 10=>[12,18,22,38],
# "END"=>0}
# ◆說明:
#1號技能=>[LV2熟練度須達2,LV3熟練度須達4,LV4熟練度須達6],
#2號技能=>[LV2熟練度須達4,LV3熟練度須達8],
#10號技能=>[LV2熟練度須達12,LV3熟練度須達18,LV4熟練度須達22,LV4熟練度須達38],
#[ ]裏的內容數量+1就是該技能的最高等級
#末尾要加"END"=>0}沒啥意義,方便設定而已
#沒有設定到的技能ID不受影響就照正常顯示
#有設定到的技能在技能名稱後面會自動顯示其等級,說明後面會自動出現熟練度
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能熟練度的增加:
# 只要傷害或回復值不為Miss成功使用的狀態下熟練度就+1
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能的威力設定:
# 內建為技能威力+技能威力*技能等級*倍率
# 倍率可以在腳本中搜尋S_PLUS = {}請自行修改,值越大等級影響威力越顯著
# 修改法S_PLUS[技能ID] = 倍率
# 沒有設定到的技能ID是以倍率0設定,也就是技能威力不受技能等級影響
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能經驗值與等級用語設定:
# 請在腳本中搜尋
# S_EXP = "熟練度:"
# S_LV = "LV"
# 請自行修改用語
# ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
#==============================================================================
# ■ 所有技能升級所需list列表設定
#==============================================================================
SKILL_EXP_LIST =
{
1=>[5,10,15,20,25,30,35,40,45,50],
"END"=>0}
#==============================================================================
# ■ 技能經驗值與等級用語設定
#==============================================================================
S_EXP = "熟練度:"
S_LV = "-LV"
#==============================================================================
# ■ 每提升1級等級的技能威力倍率(自行添加設定)
#==============================================================================
S_PLUS = {}
S_PLUS[1] = 0.2
#==============================================================================
# ■ Game_Actor添加可存取的技能等級與熟練度資料
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 讀取技能附加威力
#--------------------------------------------------------------------------
def skill_power_plus(skill)
plus = S_PLUS[skill.id] != nil ? S_PLUS[skill.id] : 0
# 技能威力*角色對應該技能等級*倍率
return Integer(skill.power*self.skill_lv[skill.id]*plus)
end
#--------------------------------------------------------------------------
# ● 讀取技能經驗值資料
#--------------------------------------------------------------------------
def skill_exps
# 初始化@skill_exps
@skill_exps = [] if @skill_exps == nil
# 生成技能經驗值資料
for i in 1...$data_skills.size
if @skill_exps == nil
@skill_exps = 0
end
end
return @skill_exps
end
#--------------------------------------------------------------------------
# ● 寫入技能經驗值資料
#--------------------------------------------------------------------------
def push_skill_exps(id,exp)
self.skill_exps
if SKILL_EXP_LIST[id] != nil
t_max = SKILL_EXP_LIST[id][SKILL_EXP_LIST[id].size-1]
@skill_exps[id] = [@skill_exps[id]+exp,t_max].min
end
end
#--------------------------------------------------------------------------
# ● 讀取技能等級
#--------------------------------------------------------------------------
def skill_lv
# 初始化@skill_lv
@skill_lv = [] if @skill_lv == nil
# 生成並計算技能等級資料
for i in 1...$data_skills.size
list = SKILL_EXP_LIST
# 沒有被規劃到的技能list就設為[0]
list = [0] if list == nil
exp = skill_exps
# 計算對應熟練度的等級
@skill_lv = 0
for index in 0...list.size
if exp >= list[index]
@skill_lv = [@skill_lv+1,list.size].min
end
end
end
return @skill_lv
end
end
#==============================================================================
# ■ Window_Skill技能help窗口說明增設exp與lv字串
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 描繪項目
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
# 技能熟練list存在時,技能名稱添加等級字串
if SKILL_EXP_LIST[skill.id] != nil
id = skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
t_lv = lv >= list[id].size ? "MAX" : (lv+1).to_s
text = S_LV+t_lv
else
text = ""
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name+text, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 更新提示內容
#--------------------------------------------------------------------------
def update_help
# 有按下按鈕的情形才update
if Input.dir4 != 0 or Input.press?(Input::C) or Input.press?(Input::B)
# 技能為空的情況,說明設為空
if self.skill == nil
text = ""
else
# 技能熟練list存在時,說明添加熟練度字串
if SKILL_EXP_LIST[self.skill.id] != nil
id = self.skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
m_exp = list[id][[lv,list[id].size-1].min].to_s
exp = S_EXP+@actor.skill_exps[id].to_s+"/"+m_exp
text = self.skill.description+"("+exp+")"
else
text = self.skill.description
end
end
# 設定help窗口
@help_window.set_text(text)
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 應用特技效果
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# 清除會心一擊標誌
self.critical = false
# 特技的效果範圍是 HP 1 以上的我方、自己的 HP 為 0、
# 或者特技的效果範圍是 HP 0 的我方、自己的 HP 為 1 以上的情況下
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# 過程結束
return false
end
# 清除有效標誌
effective = false
# 共通事件 ID 是有效的情況下,設定為有效標誌
effective |= skill.common_event_id > 0
# 第一命中判斷
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不確定特技的情況下設定為有效標誌
effective |= hit < 100
# 命中的情況下
if hit_result == true
# 計算威力
power = skill.power + user.atk * skill.atk_f / 100
# 我方使用的情形
if user.is_a?(Game_Actor)
# 計算技能等級的附加威力
power += user.skill_power_plus(skill)
end
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 計算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 計算基本傷害
self.damage = power * rate / 20
# 屬性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 傷害符號正確的情況下
if self.damage > 0
# 防禦修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判斷
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不確定特技的情況下設定為有效標誌
effective |= hit < 100
end
# 命中的情況下
if hit_result == true
# 威力 0 以外的物理攻擊的情況下
if skill.power != 0 and skill.atk_f > 0
# 狀態衝擊解除
remove_states_shock
# 設定有效標誌
effective = true
end
# HP 的傷害減法運算
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# 狀態變化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力為 0 的場合
if skill.power == 0
# 傷害設定為空的字串
self.damage = ""
# 狀態沒有變化的情況下
unless @state_changed
# 傷害設定為 "Miss"
self.damage = "Miss"
end
end
# Miss 的情況下
else
# 傷害設定為 "Miss"
self.damage = "Miss"
end
# 不在戰鬥中的情況下
unless $game_temp.in_battle
# 傷害設定為 nil
self.damage = nil
end
# 使用者是我方的情形
if user.is_a?(Game_Actor)
# 有效使用的情況,熟練度+1
if effective && self.damage != "Miss"
user.push_skill_exps(skill.id,1)
end
end
# 過程結束
return effective
end
end[/pre]

請問有沒有辦法把這2個腳本整合成既有特殊狀態也會有技能熟練度的效果
((雖然說我在插入腳本時候才發現到這個問題...
梦石
0
星屑
50
在线时间
24 小时
注册时间
2013-8-10
回帖
25
发表于 2013-9-2 19:31:04 | 显示全部楼层
本帖最后由 棕熊匠仙 于 2013-9-2 19:32 编辑

@Person
[pre lang="ruby" line="1"]
DEDUCT_HP_STATE = 49
#==============================================================================
# ★★★★★★★★ 技能等級設定腳本 BY:愚零鬥武多 ★★★★★★★★
# ■想要用別客氣就直接拿去吧,腳本這種東西哪有版權可言=.=|||
#==============================================================================
# 此腳本可實現技能累積使用次數增加熟練度藉以提升技能等級的功能
# 每位角色會自動在程式中建立專屬技能熟練與等級的資料庫,跟隨存檔
# 適合想脫離常規技能製作的製作者,難度中等
# 目前只有攻擊和回復技能威力會受等級影響,其他狀態添加類或地圖技能
# 有興趣者可自行在def skill_effect(user, skill)添加功能
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能的設定法:
# SKILL_EXP_LIST =
# {
# 技能ID=>[等級2累積熟練度,等級3累積熟練度,等級4累積熟練度..],
# "END"=>0}
# ◆範例:
# SKILL_EXP_LIST =
# {
# 1=>[2,4,6],
# 2=>[4,8],
# 10=>[12,18,22,38],
# "END"=>0}
# ◆說明:
#1號技能=>[LV2熟練度須達2,LV3熟練度須達4,LV4熟練度須達6],
#2號技能=>[LV2熟練度須達4,LV3熟練度須達8],
#10號技能=>[LV2熟練度須達12,LV3熟練度須達18,LV4熟練度須達22,LV4熟練度須達38],
#[ ]裏的內容數量+1就是該技能的最高等級
#末尾要加"END"=>0}沒啥意義,方便設定而已
#沒有設定到的技能ID不受影響就照正常顯示
#有設定到的技能在技能名稱後面會自動顯示其等級,說明後面會自動出現熟練度
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能熟練度的增加:
# 只要傷害或回復值不為Miss成功使用的狀態下熟練度就+1
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能的威力設定:
# 內建為技能威力+技能威力*技能等級*倍率
# 倍率可以在腳本中搜尋S_PLUS = {}請自行修改,值越大等級影響威力越顯著
# 修改法S_PLUS[技能ID] = 倍率
# 沒有設定到的技能ID是以倍率0設定,也就是技能威力不受技能等級影響
# ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
# 技能經驗值與等級用語設定:
# 請在腳本中搜尋
# S_EXP = "熟練度:"
# S_LV = "LV"
# 請自行修改用語
# ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
#==============================================================================
# ■ 所有技能升級所需list列表設定
#==============================================================================
SKILL_EXP_LIST =
{
1=>[5,10,15,20,25,30,35,40,45,50],
"END"=>0}
#==============================================================================
# ■ 技能經驗值與等級用語設定
#==============================================================================
S_EXP = "熟練度:"
S_LV = "-LV"
#==============================================================================
# ■ 每提升1級等級的技能威力倍率(自行添加設定)
#==============================================================================
S_PLUS = {}
S_PLUS[1] = 0.2
#==============================================================================
# ■ Game_Actor添加可存取的技能等級與熟練度資料
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 讀取技能附加威力
#--------------------------------------------------------------------------
def skill_power_plus(skill)
plus = S_PLUS[skill.id] != nil ? S_PLUS[skill.id] : 0
# 技能威力*角色對應該技能等級*倍率
return Integer(skill.power*self.skill_lv[skill.id]*plus)
end
#--------------------------------------------------------------------------
# ● 讀取技能經驗值資料
#--------------------------------------------------------------------------
def skill_exps
# 初始化@skill_exps
@skill_exps = [] if @skill_exps == nil
# 生成技能經驗值資料
for i in 1...$data_skills.size
if @skill_exps == nil
@skill_exps = 0
end
end
return @skill_exps
end
#--------------------------------------------------------------------------
# ● 寫入技能經驗值資料
#--------------------------------------------------------------------------
def push_skill_exps(id,exp)
self.skill_exps
if SKILL_EXP_LIST[id] != nil
t_max = SKILL_EXP_LIST[id][SKILL_EXP_LIST[id].size-1]
@skill_exps[id] = [@skill_exps[id]+exp,t_max].min
end
end
#--------------------------------------------------------------------------
# ● 讀取技能等級
#--------------------------------------------------------------------------
def skill_lv
# 初始化@skill_lv
@skill_lv = [] if @skill_lv == nil
# 生成並計算技能等級資料
for i in 1...$data_skills.size
list = SKILL_EXP_LIST
# 沒有被規劃到的技能list就設為[0]
list = [0] if list == nil
exp = skill_exps
# 計算對應熟練度的等級
@skill_lv = 0
for index in 0...list.size
if exp >= list[index]
@skill_lv = [@skill_lv+1,list.size].min
end
end
end
return @skill_lv
end
end
#==============================================================================
# ■ Window_Skill技能help窗口說明增設exp與lv字串
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 描繪項目
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
# 技能熟練list存在時,技能名稱添加等級字串
if SKILL_EXP_LIST[skill.id] != nil
id = skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
t_lv = lv >= list[id].size ? "MAX" : (lv+1).to_s
text = S_LV+t_lv
else
text = ""
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name+text, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
end
#--------------------------------------------------------------------------
# ● 更新提示內容
#--------------------------------------------------------------------------
def update_help
# 有按下按鈕的情形才update
if Input.dir4 != 0 or Input.press?(Input::C) or Input.press?(Input::B)
# 技能為空的情況,說明設為空
if self.skill == nil
text = ""
else
# 技能熟練list存在時,說明添加熟練度字串
if SKILL_EXP_LIST[self.skill.id] != nil
id = self.skill.id
lv = @actor.skill_lv[id]
list = SKILL_EXP_LIST
m_exp = list[id][[lv,list[id].size-1].min].to_s
exp = S_EXP+@actor.skill_exps[id].to_s+"/"+m_exp
text = self.skill.description+"("+exp+")"
else
text = self.skill.description
end
end
# 設定help窗口
@help_window.set_text(text)
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 應用特技效果
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# 清除會心一擊標誌
self.critical = false
# 特技的效果範圍是 HP 1 以上的我方、自己的 HP 為 0、
# 或者特技的效果範圍是 HP 0 的我方、自己的 HP 為 1 以上的情況下
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# 過程結束
return false
end
# 清除有效標誌
effective = false
# 共通事件 ID 是有效的情況下,設定為有效標誌
effective |= skill.common_event_id > 0
# 第一命中判斷
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# 不確定特技的情況下設定為有效標誌
effective |= hit < 100
# 命中的情況下
if hit_result == true
# 計算威力
power = skill.power + user.atk * skill.atk_f / 100
# 我方使用的情形
if user.is_a?(Game_Actor)
# 計算技能等級的附加威力
power += user.skill_power_plus(skill)
end
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# 計算倍率
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# 計算基本傷害
self.damage = power * rate / 20
# 屬性修正
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# 傷害符號正確的情況下
if self.damage > 0
# 防禦修正
if self.guarding?
self.damage /= 2
end
end
# 分散
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# 第二命中判斷
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# 不確定特技的情況下設定為有效標誌
effective |= hit < 100
end
# 命中的情況下
if hit_result == true
# 威力 0 以外的物理攻擊的情況下
if skill.power != 0 and skill.atk_f > 0
# 狀態衝擊解除
remove_states_shock
# 設定有效標誌
effective = true
end
# HP 的傷害減法運算
last_hp = self.hp
#########################################################################
if self.state?(DEDUCT_HP_STATE) and self.damage <0
  self.damage = -self.damage
end   
#########################################################################
self.hp -= self.damage
effective |= self.hp != last_hp
# 狀態變化
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# 威力為 0 的場合
if skill.power == 0
# 傷害設定為空的字串
self.damage = ""
# 狀態沒有變化的情況下
unless @state_changed
# 傷害設定為 "Miss"
self.damage = "Miss"
end
end
# Miss 的情況下
else
# 傷害設定為 "Miss"
self.damage = "Miss"
end
# 不在戰鬥中的情況下
unless $game_temp.in_battle
# 傷害設定為 nil
self.damage = nil
end
# 使用者是我方的情形
if user.is_a?(Game_Actor)
# 有效使用的情況,熟練度+1
if effective && self.damage != "Miss"
user.push_skill_exps(skill.id,1)
end
end
# 過程結束
return effective
end
end
[/pre]

替换原有的熟练度,未测试,请先备份

评分

参与人数 1星屑 +84 收起 理由
弗雷德 + 84 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
703
在线时间
313 小时
注册时间
2013-6-1
回帖
125
 楼主| 发表于 2013-9-2 22:11:13 | 显示全部楼层
棕熊匠仙 发表于 2013-9-2 19:31
@Person

DEDUCT_HP_STATE = 49

剛剛測試成功  謝謝你給的腳本  
((雖然說再補藥水時候沒有扣  不過這樣就足夠了^^
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部