Народ, нужен скрипт следующего плана:
Кды монстр использует на персе опр. скилл, перс с вероятностью в 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
Последний раз редактировалось Equilibrium Keeper; 05.05.2010 в 23:13.
Avatar, я могу опробовать написать... Но только месяца через два, не меньше![]()
Я отрицаю вашу реальность и заменю её своей. (c) Джон Адам Севидж
Надо работать, работать надо. Ремешки под касками затянуть потуже, шинели в порядок привести, в кобуру засунуть трудолюбие 36 калибра и марш за мейкер! (с) Tall Men
Хммм... Nalia, а чем мой вариант не устроил? о.О
Я пошутила... Просто приятно осознавать, что я, который в скрпитах почти полный ноль, правильно догадалась, где и чего править![]()
Я отрицаю вашу реальность и заменю её своей. (c) Джон Адам Севидж
Надо работать, работать надо. Ремешки под касками затянуть потуже, шинели в порядок привести, в кобуру засунуть трудолюбие 36 калибра и марш за мейкер! (с) Tall Men
как в ФФ 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 в частности навалом. В том числе и на русском. России нужны скриптеры!![]()
Последний раз редактировалось Equilibrium Keeper; 07.05.2010 в 15:53.
Эту тему просматривают: 5 (пользователей: 0 , гостей: 5)
Социальные закладки