Название: Deathwing Combo Attack
Автор: Dagon Deathwing
Дата написания: 21.08.2008 14:09
Версия: 1.1
Описание: Данный скрипт вводит комбо атаки, как в FFXII.
=begin
Deathwing Combo Attack
Автор: Dagon Deathwing
Дата написания: 21.08.2008 14:09
Версия: 1.1
1.0 - закончена первая версия.
1.1 - устранена ошибка с безоружностью.
Описание: Данный скрипт вводит комбо атаки, как в FFXII.
Установка: Скопируйте выше Main и установите значения.
- ENEMIES_CAN_USE_COMBO
Могут ли враги использовать комбо атаки.
true - да
false - нет
- DEFAULT_COMBO_RATE
Процентная вероятность использования комбо атаки для всего оружия и всех врагов.
Чтобы установить конкретное значение для оружия или врага, вставьте
combo_rate n в поле Note оружия или врага.
- MAX_N_ATTACK
Максимально возможная длина комбо атаки, для всего оружия и всех врагов.
- DEFAULT_COMBO_RATE_TABLE
Таблица вероятности проведения определенного числа ударов в зависимости от НР.
[HP, combo rate 2, combo rate 3... combo rate n,
HP, combo rate 2, combo rate 3... combo rate n,
HP, combo rate 2, combo rate 3... combo rate n,
..............................................]
Счисление начинается снизу вверх справа налево.
НР - текущее количество НР (в десятых процента).
combo rate n - вероятность для использования конкретного числа ударов.
combo rate 2 - 2 удара, combo rate 3 - 3, combo rate 4 - 4, combo rate n -
максимальное число ударов. Вероятность записывается в десятых процента.
- COMBO_RATE_TABLE[weapon id]
Можете вставить после строки COMBO_RATE_TABLE = [] данную строку, и задать
таблицу для конкретного оружия.
- ENEMIES_COMBO_RATE_TABLE[enemies id]
Можете вставить после строки ENEMIES_COMBO_RATE_TABLE = [] данную строку, и
задать таблицу для конкретного врага.
Совместимость: совместим со всем, не затрагивающим make_attack_targets . Если
что-то его затрагивает - исправите сами, даже ребенок с этим справится.
И если будете использовать мой скрипт - не забудьте указать мое имя.
ВНИМАНИЕ!!! Требуется TagNote 2.0+!!!
=end
$deathwing = {} if $deathwing == nil
$deathwing[ ComboAttack ] = true
module Deathwing
module ComboAttack
ENEMIES_CAN_USE_COMBO = true
DEFAULT_COMBO_RATE = 5
MAX_N_ATTACK = 8
DEFAULT_COMBO_RATE_TABLE = [1000, 600,400,200, 80, 20, 0, 0,
500, 750,500,250,100, 50, 10, 5,
200, 900,600,300,125, 75, 40, 10,
75,1000,700,400,200,140,100, 50]
COMBO_RATE_TABLE = [] # - Не удалять и не изменять.
ENEMIES_COMBO_RATE_TABLE = [] # - Не удалять и не изменять.
end
end
class Game_BattleAction
include TAGNOTE
def make_attack_targets
targets = []
if battler.confusion?
targets.push(friends_unit.random_target)
elsif battler.berserker?
targets.push(opponents_unit.random_target)
else
targets.push(opponents_unit.smooth_target(@target_index))
end
if battler.dual_attack # Chain attack
targets += targets
end
if battler.actor?
weapon_id = battler.weapon_id
if battler.weapons.compact != []
percent_combo = combo_attack_percent(weapon_id)
else
percent_combo = Deathwing::ComboAttack::DEFAULT_COMBO_RATE
end
if percent_combo rand(100)
combo_n = creation_combo_attack_number
targets *= combo_n
end
else
if Deathwing::ComboAttack::ENEMIES_CAN_USE_COMBO
percent_combo = enemy_combo_attack_percent
if percent_combo rand(100)
combo_n = creation_combo_attack_number
targets *= combo_n
end
end
end
return targets.compact
end
def combo_attack_percent(id)
prcnt = get_tag($data_weapons[id].note, combo_rate )
return prcnt.to_f unless prcnt == nil
return Deathwing::ComboAttack::DEFAULT_COMBO_RATE
end
def enemy_combo_attack_percent
prcnt = get_tag(battler.enemy.note, combo_rate )
return prcnt.to_f unless prcnt == nil
return Deathwing::ComboAttack::DEFAULT_COMBO_RATE
end
def combo_rate_table(id)
q = Deathwing::ComboAttack::COMBO_RATE_TABLE[id]
return q unless q != nil
return Deathwing::ComboAttack::DEFAULT_COMBO_RATE_TABLE
end
def creation_combo_attack_number
if battler.actor?
weapon_id = battler.weapon_id
q = Deathwing::ComboAttack::COMBO_RATE_TABLE[weapon_id]
if q == nil
q = Deathwing::ComboAttack::DEFAULT_COMBO_RATE_TABLE
end
else
q = Deathwing::ComboAttack::ENEMIES_COMBO_RATE_TABLE[battler.id]
if q == nil
q = Deathwing::ComboAttack::DEFAULT_COMBO_RATE_TABLE
end
end
fn = Deathwing::ComboAttack::MAX_N_ATTACK
fl = q.length
ln = fl / fn
pb_hp = (battler.hp * 1000) / battler.maxhp
i = 1
y = true
o = fn
u = ln
while u 0
fhp = q[(ln * (u - 1))]
if pb_hp fhp or pb_hp == fhp
while o 1
fu = q[o + (ln * (u - 1)) - 1]
if fu rand(1000) and y
i = o
y = false
end
o -= 1
end
end
u -= 1
end
return i
end
end