赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 14242 |
最后登录 | 2018-4-28 |
在线时间 | 231 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 231 小时
- 注册时间
- 2012-7-20
- 帖子
- 27
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
我用了状态附加率改造和技能冷却脚本,但是状态附加改造脚本失效了,自带的状态几率实在不好用……特此求助- #==============================================================================
- # ■狀態附加機率改造
- #==============================================================================
- # 除了內建的狀態有效度外,還能指定武器、技能、道具的補正值
- # 設定格式 : 技能名,40 (ex:十字斬,40)
- # 公式:狀態有效等級 * 技能補正值(單位:%)
- # (預設補正值為50)
- # 隨改造內容附贈的狀態有效等級:A:100, B:80, C:60, D:40, E:20, F:0
- #==============================================================================
- module RPG
- #==============================================================================
- # ■武器的類
- #==============================================================================
- class Weapon
- #--------------------------------------------------------------------------
- # ● 名稱
- #--------------------------------------------------------------------------
- def name
- name = @name.split(/,/)[0]
- return name != nil ? name : ""
- end
- #--------------------------------------------------------------------------
- # ● 附加機率
- #--------------------------------------------------------------------------
- def probability
- probability = @name.split(/,/)[1]
- return probability != nil ? probability.to_i : 50
- end
- end
- #==============================================================================
- # ■技能的類
- #==============================================================================
- class Skill
- #--------------------------------------------------------------------------
- # ● 名稱
- #--------------------------------------------------------------------------
- def name
- name = @name.split(/,/)[0]
- return name != nil ? name : ""
- end
- #--------------------------------------------------------------------------
- # ● 附加機率
- #--------------------------------------------------------------------------
- def probability
- probability = @name.split(/,/)[1]
- return probability != nil ? probability.to_i : 50
- end
- end
- #==============================================================================
- # ■道具的類
- #==============================================================================
- class Item
- #--------------------------------------------------------------------------
- # ● 名稱
- #--------------------------------------------------------------------------
- def name
- name = @name.split(/,/)[0]
- return name != nil ? name : ""
- end
- #--------------------------------------------------------------------------
- # ● 附加機率
- #--------------------------------------------------------------------------
- def probability
- probability = @name.split(/,/)[1]
- return probability != nil ? probability.to_i : 50
- end
- end
- end
- #==============================================================================
- # ■ Game_Battler (分割定義 1)
- #------------------------------------------------------------------------------
- # 處理戰鬥者的類別。這個類別作為 Game_Actor 類別與 Game_Enemy 類別的
- # 超級類別來使用。
- #==============================================================================
- class Game_Battler
-
-
- #--------------------------------------------------------------------------
- # ● 套用通常攻擊效果
- # attacker : 攻擊者 (battler)
- #--------------------------------------------------------------------------
- def attack_effect(attacker)
- # 清除會心一擊標誌
- self.critical = false
- # 第一命中判定
- hit_result = (rand(100) < attacker.hit)
- # 命中的情況下
- if hit_result == true
- # 計算基本傷害
- atk = [attacker.atk - self.pdef / 2, 0].max
- self.damage = atk * (20 + attacker.str) / 20
- # 屬性修正
- self.damage *= elements_correct(attacker.element_set)
- self.damage /= 100
- # 傷害符號正確的情況下
- if self.damage > 0
- # 會心一擊修正
- if rand(100) < 4 * attacker.dex / self.agi
- self.damage *= 2
- self.critical = true
- end
- # 防禦修正
- if self.guarding?
- self.damage /= 2
- end
- end
- # 分散
- if self.damage.abs > 0
- amp = [self.damage.abs * 15 / 100, 1].max
- self.damage += rand(amp+1) + rand(amp+1) - amp
- end
- # 第二命中判定
- eva = 8 * self.agi / attacker.dex + self.eva
- hit = self.damage < 0 ? 100 : 100 - eva
- hit = self.cant_evade? ? 100 : hit
- hit_result = (rand(100) < hit)
- end
- # 命中的情況下
- if hit_result == true
- # 狀態衝擊解除
- remove_states_shock
- # HP 的傷害計算
- self.hp -= self.damage
- # 狀態變化
- @state_changed = false
- states_plus(attacker, attacker.plus_state_set) ###
- states_minus(attacker.minus_state_set)
- # Miss 的情況下
- else
- # 傷害設定為 "Miss"
- self.damage = "Miss"
- # 清除會心一擊標誌
- self.critical = false
- end
- # 過程結束
- return true
- end
- #--------------------------------------------------------------------------
- # ● 套用技能效果
- # user : 技能的使用者 (battler)
- # skill : 技能
- #--------------------------------------------------------------------------
- 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
- self.hp -= self.damage
- effective |= self.hp != last_hp
- # 狀態變化
- @state_changed = false
- effective |= states_plus(user, 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
- #--------------------------------------------------------------------------
- # ● 套用物品效果
- # item : 物品
- #--------------------------------------------------------------------------
- def item_effect(item, user = $game_party.actors[0])
- # 清除會心一擊標誌
- 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
- self.hp += recover_hp
- self.sp += recover_sp
- effective |= self.hp != last_hp
- effective |= self.sp != last_sp
- # 狀態變化
- @state_changed = false
- effective |= states_plus(user, 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
-
-
- #--------------------------------------------------------------------------
- # ● 狀態變化 (+) 的適用
- # plus_state_set : 狀態變化 (+)
- #--------------------------------------------------------------------------
- def states_plus(battler, plus_state_set)
- # 清除有效標誌
- effective = false
- # 循環 (附加狀態)
- for i in plus_state_set
- # 無法防禦本狀態的情況下
- unless self.state_guard?(i)
- # 這個狀態如果不是 full 的話就設定有效標誌
- effective |= self.state_full?(i) == false
- # 狀態為 [不能抵抗] 的情況下
- if $data_states[i].nonresistance
- # 設定狀態變化標誌
- @state_changed = true
- # 附加狀態
- add_state(i)
- # 這個狀態不是 full 的情況下
- elsif self.state_full?(i) == false
-
-
- #使用武器時,獲取狀態附加機率
- if battler.current_action.kind == 0 and battler.is_a?(Game_Actor)
- probability = $data_weapons[battler.weapon_id].probability
- #使用技能時,獲取狀態附加機率
- elsif battler.current_action.kind == 1
- probability = $data_skills[battler.current_action.skill_id].probability
- #使用道具時,獲取狀態附加機率
- elsif battler.current_action.kind == 2
- probability = $data_items[battler.current_action.item_id].probability
- else
- #不設定附加率為50
- probability = 50
- end
-
- # 將狀態的有效度變換為概率、與隨機數比較
- if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]] * (probability / 100.0)
- # 設定狀態變化標誌
- @state_changed = true
- # 附加狀態
- add_state(i)
- end
- end
- end
- end
- # 過程結束
- return effective
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 處理角色的類別。本類別在 Game_Actors 類別 ($game_actors)
- # 的內部使用、Game_Party 類別請參考 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 定義實例變數
- #--------------------------------------------------------------------------
- attr_reader :skill # 技能
- end
复制代码 |
|