FFIX Skills Activation System, Version 0.3 - Printable Version +- Save-Point (https://www.save-point.org) +-- Forum: Material Development (https://www.save-point.org/forum-8.html) +--- Forum: Scripts Database (https://www.save-point.org/forum-39.html) +---- Forum: RPGMaker XP (RGSS) Engine (https://www.save-point.org/forum-116.html) +---- Thread: FFIX Skills Activation System, Version 0.3 (/thread-2213.html) |
FFIX Skills Activation System - Ace - 01-31-2010 Sorry for necropost but I would like to use this system along with your skill learnings system. In this system should only be passive skills like auto-haste, poison-immunity or stone-immunity. So these skills wouldn't stand in the skills scene or in battle and you have to activate them in this scene. FFIX Skills Activation System - Charlie Fleed - 02-01-2010 I have just uploaded a new version with a little novelty. I have added the possibility to limit the activation system to the only skills listed with a cost in the SKILL_COST array. This is meant to provide the base for the application of the activation system to a passive-skills framework. If the passive-skills system tests the skill_can_use? method in order to determine when a passive skill is active, then the job is done. The passive-skills system must be a separate script, this system only manages the activation of the skills. I was wondering: what can be done with passive skills that cannot be done with states? FFIX Skills Activation System - Ace - 02-01-2010 I think passive skills activate a state permanently if you activate a passive skill in this system. So it's like the auto function of armors just without armors :D And the amount of the SkAP should raise with each lvl by randomly 0, 1 or 2 Ok till now this works just awesome: Your Skills Activation System feat. the passive augments script by Xelias Content Hidden #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= # Passive Augments by Xelias # Version: 1.01 # Type: Skill Enhacement # Date v1.01: 18.12.2009 # #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= # # This work is protected by the following license: # #---------------------------------------------------------------------------- # # # # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported # # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ ) # # # # You are free: # # # # to Share - to copy, distribute and transmit the work # # to Remix - to adapt the work # # # # Under the following conditions: # # # # Attribution. You must attribute the work in the manner specified by the # # author or licensor (but not in any way that suggests that they endorse you # # or your use of the work). # # # # Noncommercial. You may not use this work for commercial purposes. # # # # Share alike. If you alter, transform, or build upon this work, you may # # distribute the resulting work only under the same or similar license to # # this one. # # # # - For any reuse or distribution, you must make clear to others the license # # terms of this work. The best way to do this is with a link to this web # # page. # # # # - Any of the above conditions can be waived if you get permission from the # # copyright holder. # # # # - Nothing in this license impairs or restricts the author's moral rights. # # # #---------------------------------------------------------------------------- ## ## Version history ## ## 1.01 ## ## *Added new Passive Skills (From RESIST_STATES to GEOMANCY) ## *Fixed a bug ## # #---------------------------------------------------------------------------- # This script creates "Passive Skills". The "Passive Skills" you list in # PASSIVE_SKILLS_IDS = [] are displayed in a separate menu. # They are simple skills you can give an Icon, a name, a description... # You can change the menu's name in PASSIVE_WORD = "Augments" # Replace "Augments" by whatever name you want. # # Passive Skills only work on actors ! # # Passive skills effects are listed here : # # GUARD_PLUS will decrease even more the damage taken while defending. # MP_SHIELD will allow damage to be inflicted on SP instead of HP until you run out of SP. # MARTYR allows the character to gain SP when taking damage # INQUISITOR allows the character to gain SP when dealing physical damage. # WARMAGE allows the character to gain SP when dealing damage with spells. # BLOOD_PRICE allows the character to pay HP instead of SP. HP cost is SP cost*5 # DEMI_MP allows the character to cast spells for half the SP cost # TURBO_MP doubles the SP cost as well as the power of the skills. # SPELLBREAKER increases the damage dealt by spells when you have low HP # ADRENALINE increases the damage dealt by attacks when you have low HP # LAST_STAND decreases the damage taken when you have low HP # CHARGED_ATTACKS increases the power of physical attacks for 6 SP a hit until you run out of SP. # BRAWLER allows you to inflict more damage when no weapons are equipped. Note that # thanks to this script, bare-handed attacks are available. Just modify the BARE_ANIMATION_SELF_ID # and BARE_ANIMATION_ID to modify the animations that play on the attacker and on the enemy # while attacking without weapons, respectively. # CRITICAL_BOOST increases the critical hit ratio # FOCUS slightly increases the damage dealt by attacks when at full HP # SERENITY slightly increases the damage dealt by spells when at full HP # ONCE_MORE allows the actor to survive all hits when his HP are higher than 1 : then his # HP will become 1, and next strike will be deadly. Think about Kingdom Hearts for this one. # LEARNING allows the actor to learn blue magic. This blue magic is set in BLUE_SKILLS_IDS = [] # HEALER increases the potency of healing spells and objects on the actor. # STATE_RESIST halves the chances the actor will be affected by a status effect # BLOOD_SWORD absorbs 1/4 of damage done by physical attacks as HP for the actor. # ELEMENTALISM reduces an enemy's resistance to elemental spells # GEOMANCY increases the user's resistance to elemental spells. # #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= PASSIVE_SKILLS_IDS = [81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101] PASSIVE_WORD = "Augments" GUARD_PLUS_ID = 81 MP_SHIELD_ID = 82 MARTYR_ID = 83 INQUISITOR_ID = 84 WARMAGE_ID = 85 BLOOD_PRICE_ID = 86 DEMI_MP_ID = 87 TURBO_MP_ID = 88 SPELLBREAKER_ID = 89 ADRENALINE_ID = 90 LAST_STAND_ID = 91 CHARGED_ATTACKS_ID = 92 BRAWLER_ID = 93 CRITICAL_BOOST_ID = 94 FOCUS_ID = 95 SERENITY_ID = 96 ONCE_MORE_ID = 97 LEARNING_ID = 98 HEALER_ID = 99 STATE_RESIST_ID = 100 BLOOD_SWORD_ID = 101 ELEMENTALISM_ID = 102 GEOMANCY_ID = 103 BLUE_SKILLS_IDS = [61,62] BARE_ANIMATION_SELF_ID = 0 BARE_ANIMATION_ID = 4 #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=: # # Passive skills can also be used to equip weapons and armors, and to be able to use skills. # Configure it like that : # # When [weapon/armor id] then return [passive skill id] # When [skill id] then return [passive skill id] # # Note that passive skills overwrite class restrictions : if a warrior gets a "Equip Staffs" # passive ability, he will be able to equip staffs. # # On a sad note, all weapons/armors need to be set to a skill in order to be equipped. # If you put "nil" or "0", the game will crash. # So set a skill for each different weapon or armor. Default is 100 # The same applies for skills. Skills won't crash, but won't be able to be used. Which is bad. # However if you put "when skill X then return skill X", the skill will be usable if you have it, which # means you won't have to learn another passive skill. #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=: module Xelias def self.ers_config(item) # weapon configuration if item.is_a?(RPG::Weapon) case item.id # START Weapon Configuration when 2 then return [100] # END Weapon Configuration end elsif item.is_a?(RPG::Armor) case item.id # START Armor Configuration when 2 then return [100] # END Armor Configuration end end return [100] end def self.req_skill(id) case id # START Skill Configuration when 8 then return 101 end return end end class Game_Battler def states_plus(plus_state_set) # ????????? effective = false # ??? (????????) for i in plus_state_set # ????????????????? unless self.state_guard?(i) # ??????????????????????? effective |= self.state_full?(i) == false # ????? [?????] ??? if $data_states[i].nonresistance # ????????????? @state_changed = true # ??????? add_state(i) # ??????????????? elsif self.state_full?(i) == false # ??????????????????? if self.is_a?(Game_Actor) && self.skill_learn?(STATE_RESIST_ID) if rand(100) < [0,50,40,30,20,10,0][self.state_ranks[i]] # ????????????? @state_changed = true # ??????? add_state(i) end end unless self.is_a?(Game_Actor) && self.skill_learn?(STATE_RESIST_ID) if rand(100) < [0,100,80,60,40,20,0][self.state_ranks[i]] @state_changed = true # ??????? add_state(i) end end end end end # ?????? return effective end #============================================================================== # ? Game_Battler (???? 3) #------------------------------------------------------------------------------ # ???????????????????? Game_Actor ???? Game_Enemy ?? # ??????????????????? #============================================================================== 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 if attacker.is_a?(Game_Actor) && attacker.atk == 0 atk = [100 + attacker.str/8 - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 if attacker.skill_learn?(BRAWLER_ID) atk = [100 + attacker.str/3 - self.pdef / 2, 0].max self.damage = atk * (20 + attacker.str) / 20 end # ???? self.damage *= elements_correct(attacker.element_set) self.damage /= 100 # ???????????? if self.damage > 0 # ???????? if attacker.is_a?(Game_Actor) && attacker.skill_learn?(CRITICAL_BOOST_ID) if rand(100) < 6 * attacker.dex / self.agi self.damage *= 2 self.critical = true end else if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true end end end # ???? if self.guarding? self.damage /= 2 end if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(GUARD_PLUS_ID) 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 ????????? if self.is_a?(Game_Actor) && self.skill_learn?(MARTYR_ID) sp_recovery = self.damage/10 self.sp += sp_recovery end if attacker.is_a?(Game_Actor) && attacker.skill_learn?(INQUISITOR_ID) sp_recovery = self.damage/10 attacker.sp += sp_recovery end if attacker.is_a?(Game_Actor) && attacker.skill_learn?(BLOOD_SWORD_ID) hp_recovery = self.damage/4 attacker.hp += hp_recovery end if attacker.is_a?(Game_Actor) && attacker.skill_learn?(ADRENALINE_ID) && ((attacker.hp*100)/attacker.maxhp) < 30 self.damage*= 2 end if attacker.is_a?(Game_Actor) && attacker.skill_learn?(FOCUS_ID) && attacker.hp = attacker.maxhp self.damage*= 2 end if self.is_a?(Game_Actor) && self.skill_learn?(LAST_STAND_ID) && ((self.hp*100)/self.maxhp) < 30 self.damage/= 2 end if attacker.is_a?(Game_Actor) && attacker.skill_learn?(CHARGED_ATTACKS_ID) && attacker.sp > 0 attacker.sp -= 6 self.damage += self.damage/3 end if self.is_a?(Game_Actor) && self.skill_learn?(ONCE_MORE_ID) && self.hp > 1 && self.damage > self.hp self.damage = self.hp - 1 end if self.is_a?(Game_Actor) && self.skill_learn?(MP_SHIELD_ID) && self.sp > 0 self.sp -= self.damage else self.hp -= self.damage end # ?????? @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) # ????? else # ????? "Miss" ??? self.damage = "Manqué!" # ????????????? self.critical = false end # ?????? return true end #-------------------------------------------------------------------------- # ? ???????? # user : ??????? (????) # 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 # ???? elements = (elements_correct(skill.element_set)) if user.is_a?(Game_Actor) && user.skill_learn?(ELEMENTALISM_ID) && skill.mdef_f > 0 elements += 100 end if self.is_a?(Game_Actor) && self.skill_learn?(GEOMANCY_ID) && skill.mdef_f > 0 elements -= 50 end self.damage *= elements self.damage /= 100 # ???????????? if self.damage > 0 # ???? if self.guarding? self.damage /= 2 end if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(GUARD_PLUS_ID) 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 if self.is_a?(Game_Actor) && self.skill_learn?(MARTYR_ID) sp_recovery = self.damage/10 self.sp += sp_recovery end if user.is_a?(Game_Actor) && user.skill_learn?(WARMAGE_ID) && self.damage > 0 && skill.mdef_f > 0 sp_recovery = self.damage/10 user.sp += sp_recovery end if user.is_a?(Game_Actor) && user.skill_learn?(BLOOD_SWORD_ID) && skill.pdef_f > 0 hp_recovery = self.damage/4 user.hp += hp_recovery end if user.is_a?(Game_Actor) && user.skill_learn?(TURBO_MP_ID) && skill.mdef_f > 0 self.damage*=2 end if user.is_a?(Game_Actor) && user.skill_learn?(SPELLBREAKER_ID) && skill.mdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30 self.damage*=2 end if user.is_a?(Game_Actor) && user.skill_learn?(ADRENALINE_ID) && skill.pdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30 self.damage*=2 end if user.is_a?(Game_Actor) && user.skill_learn?(SERENITY_ID) && skill.mdef_f > 0 && user.hp = user.maxhp self.damage += self.damage/3 end if user.is_a?(Game_Actor) && user.skill_learn?(FOCUS_ID) && skill.pdef_f > 0 && user.hp = user.maxhp self.damage += self.damage/3 end if self.is_a?(Game_Actor) && self.skill_learn?(LAST_STAND_ID) && ((self.hp*100)/self.maxhp) < 30 self.damage/= 2 end if self.is_a?(Game_Actor) && self.skill_learn?(ONCE_MORE_ID) && self.hp > 1 && self.damage > self.hp self.damage = self.hp - 1 end if self.is_a?(Game_Actor) && self.skill_learn?(HEALER_ID) && self.damage < 0 self.damage *= 2 end if self.is_a?(Game_Actor) && self.skill_learn?(LEARNING_ID) && BLUE_SKILLS_IDS.include?(skill.id) learn_skill(skill.id) end if self.is_a?(Game_Actor) && self.skill_learn?(MP_SHIELD_ID) && self.sp > 0 self.sp -= self.damage else self.hp -= self.damage end 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 = "Manqué!" end end # ????? else # ????? "Miss" ??? self.damage = "Manqué!" end # ???????? unless $game_temp.in_battle # ????? nil ??? self.damage = nil end # ?????? return effective end #-------------------------------------------------------------------------- # ? ????????? # item : ???? #-------------------------------------------------------------------------- def item_effect(item) # ????????????? 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 ???????????????????? if self.is_a?(Game_Actor) && self.skill_learn?(HEALER_ID) && recover.hp > 0 recover_hp *= 2 end 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(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 = "Manqué!" end end end # ????? else # ????? "Miss" ??? self.damage = "Manqué!" end # ???????? unless $game_temp.in_battle # ????? nil ??? self.damage = nil end # ?????? return effective end #-------------------------------------------------------------------------- # ? ????????????? #-------------------------------------------------------------------------- def slip_damage_effect # ??????? self.damage = self.maxhp / 10 # ?? if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # HP ????????? self.hp -= self.damage # ?????? return true end end class Scene_Battle def make_skill_action_result # ?????? @skill = $data_skills[@active_battler.current_action.skill_id] # ???????????? unless @active_battler.current_action.forcing # SP ???????????????? unless @active_battler.skill_can_use?(@skill.id) # ?????????????????? $game_temp.forcing_battler = nil # ???? 1 ??? @phase4_step = 1 return end end if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(DEMI_MP_ID) @skill.sp_cost/=2 end if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(TURBO_MP_ID) @skill.sp_cost*=2 end # SP ?? if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(BLOOD_PRICE_ID) @active_battler.hp -= (@skill.sp_cost *5 ) else @active_battler.sp -= @skill.sp_cost end # ????????????????? @status_window.refresh # ???????????????? @help_window.set_text(@skill.name, 1) # ??????? ID ??? @animation1_id = @skill.animation1_id @animation2_id = @skill.animation2_id # ??????? ID ??? @common_event_id = @skill.common_event_id # ?????????? set_target_battlers(@skill.scope) # ????????? for target in @target_battlers target.skill_effect(@active_battler, @skill) end end end #============================================================================== # ? Window_Passive #------------------------------------------------------------------------------ # ?????????????????????????????????????? #============================================================================== class Window_Passive < Window_Selectable #-------------------------------------------------------------------------- # ? ????????? # actor : ???? #-------------------------------------------------------------------------- def initialize(actor) super(0, 128, 640, 352) @actor = actor @column_max = 2 refresh self.index = 0 # ???????????????????????????? if $game_temp.in_battle self.y = 64 self.height = 256 self.back_opacity = 160 end end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def skill return @data[self.index] end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] for i in 0...@actor.skills.size skill = $data_skills[@actor.skills[i]] if skill != nil && PASSIVE_SKILLS_IDS.include?(skill.id) @data.push(skill) end end # ???? 0 ?????????????????????? @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) self.contents.font.name = "Arial" self.contents.font.size = 18 for i in 0...@item_max draw_item(i) end end end #-------------------------------------------------------------------------- # ? ????? # index : ???? #-------------------------------------------------------------------------- def draw_item(index) skill = @data[index] self.contents.font.color = normal_color x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(skill.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0) end #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def update_help @help_window.set_text(self.skill == nil ? "" : self.skill.description) end end #============================================================================== # ? Scene_Skill #------------------------------------------------------------------------------ # ?????????????????? #============================================================================== class Scene_Passive #-------------------------------------------------------------------------- # ? ????????? # actor_index : ?????????? #-------------------------------------------------------------------------- def initialize(actor_index = 0, equip_index = 0) @actor_index = actor_index end #-------------------------------------------------------------------------- # ? ????? #-------------------------------------------------------------------------- def main # ??????? @actor = $game_party.actors[@actor_index] # ??????????????????????????????? @help_window = Window_Help.new @status_window = Window_SkillStatus.new(@actor) @skill_window = Window_Passive.new(@actor) # ????????????? @skill_window.help_window = @help_window # ????????????? (?????????????) @target_window = Window_Target.new @target_window.visible = false @target_window.active = false # ????????? Graphics.transition # ?????? loop do # ???????? Graphics.update # ??????? Input.update # ?????? update # ???????????????? if $scene != self break end end # ????????? Graphics.freeze # ???????? @help_window.dispose @status_window.dispose @skill_window.dispose @target_window.dispose end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def update # ???????? @help_window.update @status_window.update @skill_window.update @target_window.update # ?????????????????: update_skill ??? if @skill_window.active update_skill return end # ???????????????????: update_target ??? if @target_window.active update_target return end end #-------------------------------------------------------------------------- # ? ?????? (?????????????????) #-------------------------------------------------------------------------- def update_skill # B ?????????? if Input.trigger?(Input::B) # ????? SE ??? $game_system.se_play($data_system.cancel_se) # ??????????? $scene = Scene_Menu.new(2) return end # C ?????????? if Input.trigger?(Input::C) # ???????????????????????? @skill = @skill_window.skill # ???????? if @skill == nil or not @actor.skill_can_use?(@skill.id) # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ?? SE ??? $game_system.se_play($data_system.decision_se) # ?????????? if @skill.scope >= 3 # ????????????????? @skill_window.active = false @target_window.x = (@skill_window.index + 1) % 2 * 304 @target_window.visible = true @target_window.active = true # ???? (??/??) ????????????? if @skill.scope == 4 || @skill.scope == 6 @target_window.index = -1 elsif @skill.scope == 7 @target_window.index = @actor_index - 10 else @target_window.index = 0 end # ???????????? else # ??????? ID ?????? if @skill.common_event_id > 0 # ????????????? $game_temp.common_event_id = @skill.common_event_id # ??????? SE ??? $game_system.se_play(@skill.menu_se) # SP ?? @actor.sp -= @skill.sp_cost # ????????????? @status_window.refresh @skill_window.refresh @target_window.refresh # ?????????? $scene = Scene_Map.new return end end return end # R ?????????? if Input.trigger?(Input::R) # ???? SE ??? $game_system.se_play($data_system.cursor_se) # ??????? @actor_index += 1 @actor_index %= $game_party.actors.size # ???????????? $scene = Scene_Skill.new(@actor_index) return end # L ?????????? if Input.trigger?(Input::L) # ???? SE ??? $game_system.se_play($data_system.cursor_se) # ??????? @actor_index += $game_party.actors.size - 1 @actor_index %= $game_party.actors.size # ???????????? $scene = Scene_Skill.new(@actor_index) return end end #-------------------------------------------------------------------------- # ? ?????? (???????????????????) #-------------------------------------------------------------------------- def update_target # B ?????????? if Input.trigger?(Input::B) # ????? SE ??? $game_system.se_play($data_system.cancel_se) # ????????????? @skill_window.active = true @target_window.visible = false @target_window.active = false return end # C ?????????? if Input.trigger?(Input::C) # SP ???????????????? unless @actor.skill_can_use?(@skill.id) # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ??????????? if @target_window.index == -1 # ?????????????????? used = false for i in $game_party.actors used |= i.skill_effect(@actor, @skill) end end # ???????????? if @target_window.index <= -2 # ?????????????????????? target = $game_party.actors[@target_window.index + 10] used = target.skill_effect(@actor, @skill) end # ??????????? if @target_window.index >= 0 # ?????????????????????? target = $game_party.actors[@target_window.index] used = target.skill_effect(@actor, @skill) end # ????????? if used # ??????? SE ??? $game_system.se_play(@skill.menu_se) # SP ?? @actor.sp -= @skill.sp_cost # ????????????? @status_window.refresh @skill_window.refresh @target_window.refresh # ????? if $game_party.all_dead? # ?????????????? $scene = Scene_Gameover.new return end # ??????? ID ?????? if @skill.common_event_id > 0 # ????????????? $game_temp.common_event_id = @skill.common_event_id # ?????????? $scene = Scene_Map.new return end end # ???????????? unless used # ??? SE ??? $game_system.se_play($data_system.buzzer_se) end return end end end #============================================================================== # ? Scene_Menu #------------------------------------------------------------------------------ # ??????????????????? #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ? ????????? # menu_index : ????????????? #-------------------------------------------------------------------------- def initialize(menu_index = 0) @menu_index = menu_index end #-------------------------------------------------------------------------- # ? ????? #-------------------------------------------------------------------------- def main # ???????????? s1 = $data_system.words.item s2 = $data_system.words.skill s3 = PASSIVE_WORD s4 = $data_system.words.equip s5 = "Ãtat" s6 = "Sauvegarder" s7 = "Quitter" @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6]) @command_window.index = @menu_index # ??????? 0 ???? if $game_party.actors.size == 0 # ????????????????????? @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) @command_window.disable_item(3) end # ???????? if $game_system.save_disabled # ????????? @command_window.disable_item(4) end # ????????????? @playtime_window = Window_PlayTime.new @playtime_window.x = 0 @playtime_window.y = 224 # ?????????? @steps_window = Window_Steps.new @steps_window.x = 0 @steps_window.y = 320 # ???????????? @gold_window = Window_Gold.new @gold_window.x = 0 @gold_window.y = 416 # ????????????? @status_window = Window_MenuStatus.new @status_window.x = 160 @status_window.y = 0 # ????????? Graphics.transition # ?????? loop do # ???????? Graphics.update # ??????? Input.update # ?????? update # ???????????????? if $scene != self break end end # ????????? Graphics.freeze # ???????? @command_window.dispose @playtime_window.dispose @steps_window.dispose @gold_window.dispose @status_window.dispose end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def update # ???????? @command_window.update @playtime_window.update @steps_window.update @gold_window.update @status_window.update # ??????????????????: update_command ??? if @command_window.active update_command return end # ???????????????????: update_status ??? if @status_window.active update_status return end end #-------------------------------------------------------------------------- # ? ?????? (??????????????????) #-------------------------------------------------------------------------- def update_command # B ?????????? if Input.trigger?(Input::B) # ????? SE ??? $game_system.se_play($data_system.cancel_se) # ?????????? $scene = Scene_Map.new return end # C ?????????? if Input.trigger?(Input::C) # ??????? 0 ?????????????????????? if $game_party.actors.size == 0 and @command_window.index < 4 # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ??????????????????? case @command_window.index when 0 # ???? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ??????????? $scene = Scene_Item.new when 1 # ??? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ??????????????????? @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # ??? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ??????????????????? @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 # ?? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ??????????????????? @command_window.active = false @status_window.active = true @status_window.index = 0 when 4 # ????? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ??????????????????? @command_window.active = false @status_window.active = true @status_window.index = 0 when 5 # ??? # ???????? if $game_system.save_disabled # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ?? SE ??? $game_system.se_play($data_system.decision_se) # ?????????? $scene = Scene_Save.new when 6 # ????? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ???????????? $scene = Scene_End.new end return end end #-------------------------------------------------------------------------- # ? ?????? (???????????????????) #-------------------------------------------------------------------------- def update_status # B ?????????? if Input.trigger?(Input::B) # ????? SE ??? $game_system.se_play($data_system.cancel_se) # ?????????????????? @command_window.active = true @status_window.active = false @status_window.index = -1 return end # C ?????????? if Input.trigger?(Input::C) # ??????????????????? case @command_window.index when 1 # ??? # ???????????? 2 ????? if $game_party.actors[@status_window.index].restriction >= 2 # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ?? SE ??? $game_system.se_play($data_system.decision_se) # ?????????? $scene = Scene_Skill.new(@status_window.index) when 2 # ??? # ???????????? 2 ????? if $game_party.actors[@status_window.index].restriction >= 2 # ??? SE ??? $game_system.se_play($data_system.buzzer_se) return end # ?? SE ??? $game_system.se_play($data_system.decision_se) # ?????????? $scene = Scene_Passive.new(@status_window.index) when 3 # ?? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ????????? $scene = Scene_Equip.new(@status_window.index) when 4 # ????? # ?? SE ??? $game_system.se_play($data_system.decision_se) # ???????????? $scene = Scene_Status.new(@status_window.index) end return end end end #============================================================================== # ? Window_Skill #------------------------------------------------------------------------------ # ?????????????????????????????????????? #============================================================================== class Window_Skill < Window_Selectable #-------------------------------------------------------------------------- # ? ????????? # actor : ???? #-------------------------------------------------------------------------- def initialize(actor) super(0, 128, 640, 352) @actor = actor @column_max = 2 refresh self.index = 0 # ???????????????????????????? if $game_temp.in_battle self.y = 64 self.height = 256 self.back_opacity = 160 end end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def skill return @data[self.index] end #-------------------------------------------------------------------------- # ? ?????? #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] for i in 0...@actor.skills.size skill = $data_skills[@actor.skills[i]] if skill != nil && PASSIVE_SKILLS_IDS.include?(skill.id) elsif skill != nil @data.push(skill) end end # ???? 0 ?????????????????????? @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) self.contents.font.name = "Arial" self.contents.font.size = 17 for i in 0...@item_max draw_item(i) end end end #-------------------------------------------------------------------------- # ? ????? # index : ???? #-------------------------------------------------------------------------- def draw_item(index) skill = @data[index] if @actor.skill_can_use?(skill.id) self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 + index % 2 * (288 + 32) y = index / 2 * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(skill.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0) if skill.sp_cost > 0 self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2) end end #-------------------------------------------------------------------------- # ? ????????? #-------------------------------------------------------------------------- def update_help @help_window.set_text(self.skill == nil ? "" : self.skill.description) end end class Game_Actor < Game_Battler def animation1_id weapon = $data_weapons[@weapon_id] return weapon != nil ? weapon.animation1_id : BARE_ANIMATION_SELF_ID end def animation2_id weapon = $data_weapons[@weapon_id] return weapon != nil ? weapon.animation2_id : BARE_ANIMATION_ID end end class Scene_Equip alias update_item_ers_later update_item def update_item itemskill = Xelias.ers_config(@item_window.item) if Input.trigger?(Input::C) unless (@actor.skill_learn?(itemskill[0])) $game_system.se_play($data_system.buzzer_se) return end end update_item_ers_later end end class Game_Battler alias skill_met? skill_can_use? if is_a?(Game_Actor) def skill_can_use?(skill_id) data = Xelias.req_skill(skill_id) unless skill_learn?(data) ? false : skill_met?(skill_id) return data != nil end end end end Now I just need the possibility to raise the points each lvl you gain :D So maximum should be 99 points^^ Edit: ok one problem exists: the passive skills are also active if you don't activate them -_- FFIX Skills Activation System - Ace - 02-03-2010 sry but bump, I hope you understand what I wrote xD And sry for double posting before... will never do it again^^ FFIX Skills Activation System - Charlie Fleed - 02-04-2010 The problem is that, as I said before, a passive-skills script must be written or adapted to use skill_can_use? while this script uses skill_learn? I can try to modify it. Meanwhile I'll add some options for the growth of the Skill Activation Points. EDIT: here's the modified version of the passive augments script (there's also a bug in the original script which I fixed here) Content Hidden Code: #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= btw, I had not noticed that you had edited post #13, I'm sorry you had to wait until you could bump the topic. If you suspect that an edit went unnoticed by me you can always pm me. EDIT2: and I have just updated the script which now includes management of the amount of Skill Activation Points available at each level. FFIX Skills Activation System - Ace - 02-04-2010 really cool that you did that, ty. But I think a few skills are not working properly, for example the "once more" skill (Battlers standing still, nothing happens after that). I thought I could write any skills in the passive skills script ( PASSIVE_SKILLS_IDS = [80,81]). But if I put the ID of an Reflect Skill in it this doesn't work, so has it to be special defined? It should be working basicly like this: You have Reflect and Reaction as passive skills defined means, that you have always set this skill active (if you activated it in the skill activation system). Like an armor with auto state. Also the skills which are working properly are working great and I will use them also^^ ty EDIT: Also it messes up a little bit your battle system I think (evasion is too high, other algorithm) FFIX Skills Activation System - Charlie Fleed - 02-04-2010 Wait, the passive augments script is completely not compatible with my BS. FFIX Skills Activation System - Ace - 02-04-2010 Damn, but I thought so after I took a deeper look in the script... EDIT: Hm i tried to lvl up and I think you made a little mistake setting up the SkAP List for levels, or I just missunderstanded it xD it's like that defined: actor id => sap_list but I think it should be Level => [ ????, SkAP Actor 1, SkAP Actor2,....] or something like that :D Also did you understand what I asked? If it's possible to make certain skills be activated passive without any armor? I'm not even sure if everyone gets what I think, especially because I am german... xD so just ask me if you don't understand anything :D FFIX Skills Activation System - Charlie Fleed - 02-05-2010 No, the SAP-lists are indexed by actor id: for each id an array is defined, which contains 100 values indicating the amount of SAPs for each level. Of course the first value is ignored, as there is not a 0 level. If you want an actor, say actor number 3, to have an amount of SAPs equal to its level, you should provide a SAP-list like this: 3 => [any_number,1,2,3,4,5,6,7,8,...,98,99] There is an event in the demo that can create the lists and put them in a text file for you to copy them in the configuration. If you take a look you should figure out how it works and you can spare some time. Quote:If it's possible to make certain skills be activated passive without any armor? This I didn't understand. FFIX Skills Activation System - Ace - 02-05-2010 Ok I see :D I try to explain this better: Let's say you have the skill Auto Life. This skill can be used 1. In battle as command 2. As auto-state on an armor Now think there would be a third way to inflict the Skill/State Auto Life to an actor: Activated in this skill activation system. So you activate the Passive Skill Auto Life in the system, and the actor is automatic in the state. This is the same thing like the auto-state feature of the armors, only you have not to wear a special armor but activate the skill in the skill avtivations scene. Is this better? I hope xD |