請問如何讓狀態消失的判斷是看次數?
2 posters
請問如何讓狀態消失的判斷是看次數?
目前RMXP的狀態要解除只有回合數到以及被攻擊後機率解除
不過我想問 狀態的解除可以是看次數決定嗎?
例如: 這是一個增防結界 被攻擊3次後 狀態自動解除
若是都沒被攻擊則永久存在
或者是一個增攻狀態 在主動攻擊敵人3次或1次後 狀態自動解除
若是沒有主動攻擊則永久存在
不曉得能不能做到這樣的效果?@@
希望知道的人能幫我解答 感謝><
不過我想問 狀態的解除可以是看次數決定嗎?
例如: 這是一個增防結界 被攻擊3次後 狀態自動解除
若是都沒被攻擊則永久存在
或者是一個增攻狀態 在主動攻擊敵人3次或1次後 狀態自動解除
若是沒有主動攻擊則永久存在
不曉得能不能做到這樣的效果?@@
希望知道的人能幫我解答 感謝><
leoyayaleo- 賣彩色內褲的小鱉三
- 文章數 : 8
注冊日期 : 2009-03-14
回復: 請問如何讓狀態消失的判斷是看次數?
幫你寫好了
蠻瞎的
裡面有解說
不會再問
或是有BUG也歡迎提出
蠻瞎的
裡面有解說
不會再問
或是有BUG也歡迎提出
- 代碼:
#===================================================================
#解除狀態規則更改V1.00
#BY 金也安里
#===================================================================
=begin
====================================
●功能:
====================================
改變內建狀態解除的限制,採取回合的方式解除(內建的功能不會消失)
====================================
●使用方法:
====================================
在資料庫裡的狀態設定中,將狀態的名稱欄位格式更改成
狀態名,解除狀態的種類代碼,經果幾次後解除
例: (狀態名),(種類代碼),(經過次數)
==========================================================
狀態名稱欄位: 死神結界,5,10
意思是狀態名稱為死神結界,經過10次被攻擊時解除狀態
==========================================================
狀態名稱欄位: 憤怒,0,3
意思是狀態名稱為憤怒,使用普通攻擊3次時解除狀態
==========================================================
解除狀態種類與其代碼參考
(代碼)(解除狀態的種類)
0 : 使用普通攻擊時
1 : 使用技能攻擊時
2 : 被普通攻擊時
3 : 被技能攻擊時
4 : 使用攻擊時
5 : 被攻擊時
6 : 防禦狀態被攻擊時
=end
module RPG
class State
attr_accessor :spcl_remove_type
attr_accessor :spcl_remove_turn
def name
name = @name.split(/,/)[0]
return name != nil ? name : ""
end
def spcl_remove_type
type = @name.split(/,/)[1]
return type != nil ? type.to_i : 0
end
def spcl_remove_turn
turn = @name.split(/,/)[2]
return turn != nil ? turn.to_i : 0
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
#atkr defr sklr e_atkr e_defr e_sklr
class Game_Battler
alias add_initialize initialize unless $F12_Check == true
def initialize
add_initialize
@spcl_remove_turns = [[],[]]
for i in 1...$data_states.size
@spcl_remove_turns[0][i] = $data_states[i].spcl_remove_turn
@spcl_remove_turns[1][i] = $data_states[i].spcl_remove_turn
end
end
def spcl_remove_sta(type,owner)
for i in @states.clone
if $data_states[i].spcl_remove_type == type
if @spcl_remove_turns[owner][i] > 0
@spcl_remove_turns[owner][i] -= 1
elsif @spcl_remove_turns[owner][i] <= 0
remove_state(i)
end
end
end
end
#--------------------------------------------------------------------------
# ● 應用通常攻擊效果
# attacker : 攻擊者 (battler)
#--------------------------------------------------------------------------
alias add_attack_effect attack_effect unless $F12_Check == true
def attack_effect(attacker)
add_attack_effect(attacker)
a = self.is_a?(Game_Actor) ? 0 : 1
b = a == 1 ? 0 : 1
spcl_remove_sta(0,a)
spcl_remove_sta(4,a)
spcl_remove_sta(2,b)
spcl_remove_sta(5,b)
if self.guarding?
spcl_remove_sta(6,b)
end
end
#--------------------------------------------------------------------------
# ● 應用特技效果
# user : 特技的使用者 (battler)
# skill : 特技
#--------------------------------------------------------------------------
alias add_skill_effect skill_effect unless $F12_Check == true
def skill_effect(user, skill)
add_skill_effect(user, skill)
a = self.is_a?(Game_Actor) ? 0 : 1
b = a == 1 ? 0 : 1
spcl_remove_sta(1,a)
spcl_remove_sta(4,a)
spcl_remove_sta(3,b)
spcl_remove_sta(5,b)
if self.guarding?
spcl_remove_sta(6,b)
end
end
end
$F12_Check = true
#==============================================================================
#轉載此腳本 請保留此行文字 BY RMXP小屋 金也安里
#[url]http://www.wretch.cc/blog/hauhauchen[/url]
#==============================================================================
安里- 拿著木劍的戰士
- 文章數 : 20
注冊日期 : 2009-12-29
回復: 請問如何讓狀態消失的判斷是看次數?
[quote="安里"]幫你寫好了
蠻瞎的
裡面有解說
不會再問
或是有BUG也歡迎提出
我測試後發現幾個問題@@
就是如果是設定被攻擊3次被解除的結界狀態
那麼敵人不管有沒有打到都會減少次數
如果敵人都沒攻擊
自己使用增益技能也會減少次數
主動攻擊次數的狀態則是無法消除
也就是說狀態會一直存在@@
普通攻擊的種類跟特技攻擊的種類都一樣
如果狀態在解除後 再使用這項結界技能
就會無法再附上這個狀態了
不管是主動攻擊還是被攻擊的種類都一樣
蠻瞎的
裡面有解說
不會再問
或是有BUG也歡迎提出
我測試後發現幾個問題@@
就是如果是設定被攻擊3次被解除的結界狀態
那麼敵人不管有沒有打到都會減少次數
如果敵人都沒攻擊
自己使用增益技能也會減少次數
主動攻擊次數的狀態則是無法消除
也就是說狀態會一直存在@@
普通攻擊的種類跟特技攻擊的種類都一樣
如果狀態在解除後 再使用這項結界技能
就會無法再附上這個狀態了
不管是主動攻擊還是被攻擊的種類都一樣
leoyayaleo- 賣彩色內褲的小鱉三
- 文章數 : 8
注冊日期 : 2009-03-14
回復: 請問如何讓狀態消失的判斷是看次數?
再試試看吧
把舊的全部刪掉
這是新的
把舊的全部刪掉
這是新的
- 代碼:
#===================================================================
#解除狀態規則更改V1.00
#BY 金也安里
#===================================================================
=begin
====================================
●功能:
====================================
改變內建狀態解除的限制,採取回合的方式解除(內建的功能不會消失)
====================================
●使用方法:
====================================
在資料庫裡的狀態設定中,將狀態的名稱欄位格式更改成
狀態名,解除狀態的種類代碼,經果幾次後解除
例: (狀態名),(種類代碼),(經過次數)
==========================================================
狀態名稱欄位: 死神結界,5,10
意思是狀態名稱為死神結界,經過10次被攻擊時解除狀態
==========================================================
狀態名稱欄位: 憤怒,0,3
意思是狀態名稱為憤怒,使用普通攻擊3次時解除狀態
==========================================================
解除狀態種類與其代碼參考(以下都是命中的情況)
(代碼)(解除狀態的種類)
0 : 使用普通攻擊時
1 : 使用技能攻擊時
2 : 被普通攻擊時
3 : 被技能攻擊時
4 : 使用攻擊時
5 : 被攻擊時
6 : 防禦狀態被攻擊時
=end
module RPG
class State
attr_accessor :spcl_remove_type
attr_accessor :spcl_remove_turn
def name
name = @name.split(/,/)[0]
return name != nil ? name : ""
end
def spcl_remove_type
type = @name.split(/,/)[1]
return type != nil ? type.to_i : 0
end
def spcl_remove_turn
turn = @name.split(/,/)[2]
return turn != nil ? turn.to_i : 0
end
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
#atkr defr sklr e_atkr e_defr e_sklr
class Game_Battler
alias add_initialize initialize unless $F12_Check == true
def initialize
add_initialize
@spcl_remove_turns = [[],[]]
for i in 1...$data_states.size
@spcl_remove_turns[0][i] = $data_states[i].spcl_remove_turn
@spcl_remove_turns[1][i] = $data_states[i].spcl_remove_turn
end
end
def spcl_remove_sta(type,owner)
for i in @states.clone
if $data_states[i].spcl_remove_type == type
if @spcl_remove_turns[owner][i] > 0
@spcl_remove_turns[owner][i] -= 1
elsif @spcl_remove_turns[owner][i] <= 0
remove_state(i)
@spcl_remove_turns[owner][i] = $data_states[i].spcl_remove_turn
end
end
end
end
#--------------------------------------------------------------------------
# ● 應用通常攻擊效果
# 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
a = attacker.is_a?(Game_Actor) ? 0 : 1
b = self.is_a?(Game_Actor) ? 0 : 1
spcl_remove_sta(0,a)
spcl_remove_sta(4,a)
spcl_remove_sta(2,b)
spcl_remove_sta(5,b)
if self.guarding?
spcl_remove_sta(6,b)
end
# 狀態衝擊解除
remove_states_shock
# HP 的傷害計算
self.hp -= self.damage
# 狀態變化
@state_changed = false
states_plus(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
a = user.is_a?(Game_Actor) ? 0 : 1
b = self.is_a?(Game_Actor) ? 0 : 1
if self.damage > 0
spcl_remove_sta(1,a)
spcl_remove_sta(4,a)
spcl_remove_sta(3,b)
spcl_remove_sta(5,b)
if self.guarding?
spcl_remove_sta(6,b)
end
end
# 威力 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
# 過程結束
return effective
end
end
$F12_Check = true
#==============================================================================
#轉載此腳本 請保留此行文字 BY RMXP小屋 金也安里
#http://www.wretch.cc/blog/hauhauchen
#==============================================================================
安里- 拿著木劍的戰士
- 文章數 : 20
注冊日期 : 2009-12-29
這個論壇的權限:
您 無法 在這個版面回復文章
|
|