Народ, нужен скрипт следующего плана:
Кды монстр использует на персе опр. скилл, перс с вероятностью в 30-50% его выучивает.
С пояснениями и инструкцией для чайников :)
Вид для печати
Народ, нужен скрипт следующего плана:
Кды монстр использует на персе опр. скилл, перс с вероятностью в 30-50% его выучивает.
С пояснениями и инструкцией для чайников :)
Отредактируй Game_Battler 3. Добавленный код выделен красным. Если что-то тебя не устраивает - измени. Добавь в игру новый Статус (по-умолчанию, он должен идти под номером 17). Назначь его снятие ("-") навыкам, которые можно выучить от монстров. Собственно все. Теперь, если персонаж, находясь в защите, попадает под действие любого помеченного снятием 17ого статуса навыка (при этом навык не промахивается[Miss от защиты за промах не считается]), то, с вероятностью 10%, он этот навык выучит. Никаких сообщений о полученном навыке или чего-либо еще при этом выводиться не будет, а изучить его сможет любой персонаж, так что рекомендую подумать над тем по какому признаку делить способных и неспособных изучать навыки (н.п. по классу), ну и каким макаром ты будешь оповещать игрока. Наслаждайся. :)
Код:#--------------------------------------------------------------------------
# * Apply Skill Effects
# user : the one using skills (battler)
# skill : skill
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# Clear critical flag
self.critical = false
# If skill scope is for ally with 1 or more HP, and your own HP = 0,
# or skill scope is for ally with 0, and your own HP = 1 or more
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# End Method
return false
end
# Clear effective flag
effective = false
# Set effective flag if common ID is effective
effective |= skill.common_event_id > 0
# First hit detection
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# Set effective flag if skill is uncertain
effective |= hit < 100
# If hit occurs
if hit_result == true
# Calculate power
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
# Calculate rate
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)
# Calculate basic damage
self.damage = power * rate / 20
# Element correction
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# If damage value is strictly positive
if self.damage > 0
# Guard correction
if self.guarding?
self.damage /= 2
end
end
# Dispersion
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
# Second hit detection
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)
# Set effective flag if skill is uncertain
effective |= hit < 100
end
# If hit occurs
if hit_result == true
# If physical attack has power other than 0
if skill.power != 0 and skill.atk_f > 0
# State Removed by Shock
remove_states_shock
# Set to effective flag
effective = true
end
# Substract damage from HP
last_hp = self.hp
self.hp -= self.damage
effective |= self.hp != last_hp
# State change
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# If power is 0
if skill.power == 0
# Set damage to an empty string
self.damage = ""
# If state is unchanged
unless @state_changed
# Set damage to "Miss"
self.damage = "Miss"
end
end
# Если боец - персонаж и он не умер после навыка
if (self.is_a?(Game_Actor)) && (self.hp > 0)
# Если навык снимает 17ый статус
if (skill.minus_state_set.include?(17))
# Если навык еще не изучен
unless (self.skill_learn?(skill.id))
# Если боец в защите
if (self.guarding?)
# И если ему повезет, то с вероятностью 10% (не 10 на самом деле, но не так уж и важно)...
if (rand(100) < 10)
# ...он выучит примененный на него навык
self.learn_skill(skill.id)
end
end
end
end
end
# If miss occurs
else
# Set damage to "Miss"
self.damage = "Miss"
end
# If not in battle
unless $game_temp.in_battle
# Set damage to nil
self.damage = nil
end
# End Method
return effective
end
Avatar, я могу опробовать написать... Но только месяца через два, не меньше :)
Хммм... Nalia, а чем мой вариант не устроил? о.О
Я пошутила... Просто приятно осознавать, что я, который в скрпитах почти полный ноль, правильно догадалась, где и чего править :)
как в ФФ Blue Magic
просто добавить перед маином, и поменять Id_Class на номер класса героя, который будет учить.PHP код:
Magic={
1 => 90
28 => 50
29 => 33
}
class Game_Battler
alias blm_game_battler_skill_effect skill_effect
def skill_effect(user, skill)
blm_game_battler_skill_effect(user, skill)
if user.is_a?(Game_Enemy) && self.is_a?(Game_Actor) && \
rand(100)< Magic[skill.id].to_i && self.class_id == Id_Class && !skill_learn?(skill.id)
self.learn_skill(skill.id, true)
self.damage = "-Выучено #{skill.name}-"
end
end
end
class Game_Actor < Game_Battler
def learn_skill(skill_id, play = false)
@skills.push(skill_id) if skill_id > 0
@skills.sort!
Audio.me_play("Audio/ME/011-Item02") if play
end
end
Magic - хеш, где первае число - заклинание, которое можно учить, второе - шанс.
Короче сам мне их и добавишь, т.ек я хз в скриптах капитально. Скоро уже
Хоть спасибо бы сказал)
спасибо
Вот и помогай таким...:(
Dark32
Великолепно! Кстати, вопрос по хешевым базам. Насколько вредно (или наоборот) их использовать? Мне они капитально не нравятся и я стемлюсь избегать их, путем записи тегов в названия, описания, Note (в случае VX) и т.д. Но это чисто интуитивно. А что ты скажешь?
Nalia
Да, брось ты! Разобраться где искать - главное. Дальше дело техники, благо доков по руби вообще и RGSS в частности навалом. В том числе и на русском. России нужны скриптеры! :)