Project1
标题:
求助大神 脚本冲突了
[打印本页]
作者:
lichdkimba
时间:
2014-11-1 03:51
标题:
求助大神 脚本冲突了
我用了状态附加率改造和技能冷却脚本,但是状态附加改造脚本失效了,自带的状态几率实在不好用……特此求助
#==============================================================================
# ■狀態附加機率改造
#==============================================================================
# 除了內建的狀態有效度外,還能指定武器、技能、道具的補正值
# 設定格式 : 技能名,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
复制代码
module Sword
ON = true ; OFF = false ; Sword15_Cooling = Array.new
#=======================================
#★ 魔劍工舖 - 技能冷卻1.02
# 轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/
# 如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置
Sword15_XPVX = 0 # 此腳本用於XP時設為0;此腳本用在VX時設為1
Sword15_Battle = 0 # 戰鬥結束時的冷卻狀態,0為不需冷卻;1為記憶;2為需冷卻
Sword15_Menu1 = OFF # 選單中的技能畫面,是否要顯示剩餘的冷卻時間
Sword15_Menu2 = 0 # 選單中的使用標準,0為一律可用;1為沒冷卻中時可用;
# 2為沒冷卻中時可用(使用後變更為冷卻中);3為一律不可用
Sword15_Enemy = OFF # 敵人使用冷卻技能時,是否需要冷卻
Sword15_Text = ' 剩\V回合' # 技能冷卻的顯示內容,\V表示剩餘冷卻回合數
#--------------------------------------------------------------
#○ 技能冷卻回合(Sword15_Cooling[技能編號] = 冷卻回合數)
Sword15_Cooling[57] = 3
Sword15_Cooling[58] = 3
Sword15_Cooling[59] = 4
Sword15_Cooling[60] = 5
=begin
========================================
=end
$Sword ? $Sword[15] = 101 : $Sword = {15=>101} # 腳本使用標誌
end
# 詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/25549943
#=======================================
#■ 處理臨時資料的類別
class Game_Temp
attr_accessor :skill_id # 技能編號(選單用)
alias sword15_initialize initialize
def initialize
@skill_id = 0 ; sword15_initialize
end
end
#=======================================
#■ 處理戰鬥者的類別
class Game_Battler
include Sword # 連接自定設置
attr_accessor :cooling # 冷卻技能表
#-------------------------------------------------------------
#● 初始化物件
alias sword15_initialize initialize
def initialize
sword15_initialize
[url=home.php?mod=space&uid=10570]@cooling[/url] = {}
Sword15_Cooling.each_index do |index|
next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
else ; @cooling[index] = 0 ; end
end
end
#-------------------------------------------------------------
#● 可以使用技能的判定
alias sword15_skill_can_use? skill_can_use?
def skill_can_use?(skill_id)
if Sword15_Enemy or self.is_a?(Game_Actor)
skill_id = skill_id.id if Sword15_XPVX == 1 # 將數據轉成編號(VX)
if (not $game_temp.in_battle) # 不是戰鬥中時
return sword15_skill_can_use?(skill_id) if Sword15_Menu2 == 0 # 一律可用
return false if Sword15_Cooling.has_key?(skill_id) if Sword15_Menu2 == 3
end
return false if self.cooling[skill_id] > 0 if self.cooling[skill_id] # 冷卻技能不可使用
skill_id = $data_skills[skill_id] if Sword15_XPVX == 1 # 將編號轉成數據(VX)
end
sword15_skill_can_use?(skill_id)
end
end
#=======================================
#■ 處理角色的類別
class Game_Actor < Game_Battler
include Sword # 連接自定設置
attr_reader :actor_id # 角色編號
attr_accessor :cooling # 冷卻技能表
#-------------------------------------------------------------
#● 初始化物件
alias sword15_setup setup
def setup(actor_id)
sword15_setup(actor_id)
@cooling = {}
Sword15_Cooling.each_index do |index|
next if Sword15_Cooling[index] == nil # 沒設置冷卻時間的技能跳過
if Sword15_Battle == 2 ; @cooling[index] = Sword15_Cooling[index]
else ; @cooling[index] = 0 ; end
end
end
#-------------------------------------------------------------
#● 變更 SP(XP)
if Sword15_Menu2 == 2 and Sword15_Battle != 0
if Sword15_XPVX == 0 ; alias sword15_sp= sp=
else ; alias sword15_mp= mp= ; end
def sp=(a)
@cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
self.sword15_sp = a
end
#-----------------------------------------------------------
#● 變更 MP(VX)
def mp=(a)
@cooling[$game_temp.skill_id] = Sword15_Cooling[$game_temp.skill_id] if
Sword15_Cooling[$game_temp.skill_id] != nil # 自定設置有設定就設置冷卻回合
self.sword15_mp = a
end
end
end
#=======================================
#■ 技能畫面、戰鬥畫面、顯示可以使用的技能的瀏覽視窗
class Window_Skill < Window_Selectable
include Sword # 連接自定設置
#-------------------------------------------------------------
#● 描繪項目
alias sword15_draw_item draw_item
def draw_item(index)
if Sword15_Menu1 or $game_temp.in_battle # 允許顯示或戰鬥時的場合
text = '' # 負責存入冷卻內容的變量
if @actor.cooling[@data[index].id] ; if @actor.cooling[@data[index].id] > 0
text = Sword15_Text ; text = text.gsub(/\\[Vv]/) { @actor.cooling[@data[index].id] }
@data[index].name += text
end ; end
end
sword15_draw_item(index)
@data[index].name = @data[index].name.gsub(/#{text}/) { '' }
end
end
#=======================================
#■ 處理戰鬥畫面的類別
class Scene_Battle
include Sword # 連接自定設置
#-------------------------------------------------------------
#● 戰鬥結束
alias sword15_battle_end battle_end
def battle_end(result)
sword15_battle_end(result)
actor = Sword15_XPVX == 0 ? $game_party.actors : $game_party.members
xpvx = Sword15_XPVX == 0 ? 1 : 0
if Sword15_Battle == 0 # 當指定為「不需冷卻」的場合
(0...actor.size).each {|i| $game_actors[actor[i].id].cooling = Hash.new}
elsif Sword15_Battle == 2 # 當指定為「需冷卻」的場合
(0...actor.size).each do |i| ; (1..Sword15_Cooling.size).each do |ii|
$game_actors[actor[i].id].cooling[ii] = Sword15_Cooling[ii] + xpvx if
Sword15_Cooling[ii] != nil # 當有設置冷卻時代入冷卻回合
end ; end
end
end
#-------------------------------------------------------------
#● 產生技能行動結果(XP)
if Sword15_XPVX == 0 ; alias sword15_make_skill_action_result make_skill_action_result
else ; alias sword15_make_skill_action_result execute_action_skill ; end
def make_skill_action_result
#○ 確認敵人是否可使用該技能
skill_id = Sword15_XPVX == 0 ? @active_battler.current_action.skill_id :
@active_battler.action.skill_id # 縮短腳本長度
skill = Sword15_XPVX == 0 ?
$data_skills[@active_battler.current_action.skill_id] :
$data_skills[@active_battler.action.skill_id]
no = false
a = Sword15_XPVX == 0 ?
@active_battler.current_action.forcing : @active_battler.action.forcing
b = Sword15_XPVX == 0 ? skill.id : skill
unless a ; unless @active_battler.skill_can_use?(b)
@phase4_step = 1 if no # 跳轉到階段1
no = true
end ; end
sword15_make_skill_action_result unless no
#○ 設置冷卻回合
return if @active_battler.cooling[skill_id] > 0 if @active_battler.cooling[skill_id] != nil
xpvx = Sword15_XPVX == 0 ? 1 : 0 # XP和VX的回合數值修正
@active_battler.cooling[skill_id] = Sword15_Cooling[skill_id] + xpvx if
Sword15_Cooling[skill_id] != nil # 如果自定設置有設定就設置冷卻回合
$game_temp.forcing_battler = nil if no # 清除強制行動對象
end
#-------------------------------------------------------------
#● 執行戰鬥行動:使用技能(VX)
def execute_action_skill
make_skill_action_result
end
#-------------------------------------------------------------
#● 更新畫面 (主回合步驟 6 : 更新)(XP)
if Sword15_XPVX == 0 ; alias sword15_update_phase4_step6 update_phase4_step6
else ; alias sword15_update_phase4_step6 set_next_active_battler ; end
def update_phase4_step6
sword15_update_phase4_step6
return if @active_battler == nil # 如果行動方是空的就中斷
@active_battler.cooling.each_key do |i|
@active_battler.cooling[i] -= 1 if @active_battler.cooling[i] > 0
end
end
#-------------------------------------------------------------
#● 設置下一戰鬥者行動(VX)
def set_next_active_battler
update_phase4_step6
end
end
#=======================================
#■ 處理技能畫面的類別
class Scene_Skill
include Sword # 連接自定設置
#-------------------------------------------------------------
#● 更新畫面 (技能視窗被活化的情況下) (XP)
if Sword15_XPVX == 0 ; alias sword15_update_skill update_skill
else ; alias sword15_update_skill update_skill_selection ; end
def update_skill
$game_temp.skill_id = @skill_window.skill.id
sword15_update_skill
$game_temp.skill_id = nil if $scene.is_a?(Scene_Skill)
end
#-------------------------------------------------------------
#● 更新技能選擇(VX)
def update_skill_selection
update_skill
end
end
复制代码
作者:
chd114
时间:
2014-11-1 08:14
#● 更新技能選擇(VX)
def update_skill_selection
update_skill
end
复制代码
这是VX的脚本吧···你为什么发到XP提问区呢···
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1