#=============================================================================== # ¡á CSSR6-«¹«¿«ß«Ê«·«¹«Æ«à ver 1.1a #------------------------------------------------------------------------------- # «¢«¯«¿?ªË«¹«¿«ß«ÊªòàâïÒª¹ªëª³ªÈª¬ªÇª­ªÞª¹¡£«¹«¿«ß«ÊªËªèªÃªÆÍô?Õôª¬ù»ª¬ªÃª¿ #ªê«¹«ê«Ã«×«À«á?«¸ªËªÊªÃª¿ªêª·ªÞª¹¡£ #=============================================================================== # Óôìý«Õ«é«°ªòONªËª¹ªë $cssr_script["CSSR6"] = true #------------------------------------------------------------------------------- # ¡Ü «««¹«¿«Þ«¤«ºú£ÙÍ #------------------------------------------------------------------------------- # «¹«¿«ß«Êª¬ù¼£¥ªËªÊªëªÈÍô?Õôª¬Êõá´ª¹ªëª«(1ªò100ªÈª¹ªë(0.5ªÏ50% STAMINA_ATK_DOWN_PERSENT = 0.5 # Íô?Õôª¬Êõá´ª¹ªëªÈª­¡¢ù¼£¥ªËªÊªëª«(1ªò100ªÈª¹ªë(0.5ªÏ50% STAMINA_ATK_DOWN = 0.5 # «¹«¿«ß«Êªò«ì«Ù«ëªÈÖ§ÔѪµª»ªëª«(true : êó?, false : Ùí?) STAMINA_LEVEL = false # «¹«¿«ß«Êª¬ï·ªìªë(0ªËªÊªë)ªÈ«¹«Æ?«ÈªòÜõÊ¥ª¹ªëª« STAMINA_ZERO_STATE = false # ¡èªò true ªËª·ª¿íÞùêªÎÜõÊ¥ª¹ªë«¹«Æ?«ÈID(ÜÜ?ò¦ïÒʦÒö) STAMINA_STATE_ID = [] #------------------------------------------------------------------------------- # ¡Ü ?àõàâïÒ(ì¤ù»ªÏªïª«ªëìѪ¬?ª¨ªÆªâª¤ª¤ªÇª¹) #------------------------------------------------------------------------------- # «¹«¿«ß«ÊªÎõÌÓÞö·ªÎ?àõÙ£ ACTOR_STAMINA = /«¹«¿«ß«Ê([0-9]+)/ # «¹«¿«ß«Êá¼Þ¨ªÎ?àõÙ£ STAMINA_CONSUMPTION = /«¹«¿«ß«Êá¼Þ¨([0-9]+)/ # «¹«¿«ß«ÊüÞÜÖªÎ?àõÙ£ STAMINA_RECOVERY = /«¹«¿«ß«ÊüÞÜÖ/ #============================================================================== # ¡á Game_Actor #------------------------------------------------------------------------------ # «¢«¯«¿?ªòÐ⪦«¯«é«¹ªÇª¹¡£ª³ªÎ«¯«é«¹ªÏ Game_Actors «¯«é«¹ ($game_actors) # ªÎ?Ý»ªÇÞÅéĪµªì¡¢Game_Party «¯«é«¹ ($game_party) ª«ªéªâ?ðΪµªìªÞª¹¡£ #============================================================================== class Game_Actor < Game_Battler #---------------------------------------------------------------------------- # ¡Ü ÍëËÒ«¤«ó«¹«¿«ó«¹?? #---------------------------------------------------------------------------- attr_accessor :max_stamina # «¹«¿«ß«ÊªÎõÌÓÞö· attr_accessor :stamina # «¹«¿«ß«Ê #-------------------------------------------------------------------------- # ¡Ü «¤«ó«¯«ë?«É #-------------------------------------------------------------------------- include CSSR_ELEMENT #-------------------------------------------------------------------------- # ¡Ü «»«Ã«È«¢«Ã«× # actor_id : «¢«¯«¿? ID #-------------------------------------------------------------------------- alias setup_cssr6 setup def setup(actor_id) # ꪪÎ?×âªò?ú¼ setup_cssr6(actor_id) # õÚÊ¥?×â @max_stamina = actor_stamina_max($data_classes[@class_id]) @stamina = @max_stamina if @stamina == nil @stamina = base_stamina end #-------------------------------------------------------------------------- # ¡Ü «¹«¿«ß«ÊªÎö¢Ôð #-------------------------------------------------------------------------- def base_stamina return [[@stamina, 0].max, @max_stamina].min end #-------------------------------------------------------------------------- # ¡Ü õÌÓÞ«¹«¿«ß«ÊªÎö¢Ôð #-------------------------------------------------------------------------- def maxstamina return @max_stamina end #-------------------------------------------------------------------------- # ¡Ü «¹«¿«ß«ÊõÌÓÞö·ªÎö¢Ôð # actor_class : «¯«é«¹ #-------------------------------------------------------------------------- def actor_stamina_max(actor_class) element_id = get_element_id(ACTOR_STAMINA) stamina = 0 # «é«ó«¯ª¬AªÎ?àõªò?ßã for i in element_id # ̸ªÄª«ªÃª¿íÞùê if actor_class.element_ranks[i] == 1 # õÚÊ¥ stamina += get_element_number(ACTOR_STAMINA, i) end end # «¹«¿«ß«Êªò«ì«Ù«ëªÈÖ§ÔѪµª»ªëíÞùê if STAMINA_LEVEL hp = maxhp # ͪߩ stamina = ((stamina + (level ** 2.0)) + (hp / 100)) * 0.8 end # Ì¿ÍýªòÚ÷ª¹ return stamina.truncate end #-------------------------------------------------------------------------- # ¡Ü «ì«Ù«ëªÎ?ÌÚ # level : ã檷ª¤«ì«Ù«ë #-------------------------------------------------------------------------- alias level_cssr6 level= def level=(level) # ꪪÎ?×âªò?ú¼ level_cssr6(level) # õÚÊ¥?×â(«¹«¿«ß«ÊõÌÓÞö·ªòî¢ö¢Ôð) @max_stamina = actor_stamina_max($data_classes[@class_id]) end #-------------------------------------------------------------------------- # ¡Ü «¯«é«¹ ID ªÎ?ÌÚ # class_id : ã檷ª¤«¯«é«¹ ID #-------------------------------------------------------------------------- alias class_id_cssr6 class_id= def class_id=(class_id) # ꪪÎ?×âªò?ú¼ class_id_cssr6(class_id) # õÚÊ¥?×â if $data_classes[class_id] != nil # «¹«¿«ß«ÊõÌÓÞö·ªòªòî¢ö¢Ôð @max_stamina = actor_stamina_max($data_classes[class_id]) end end #-------------------------------------------------------------------------- # ¡Ü ÐñÜâÍô?ÕôªÎö¢Ôð #-------------------------------------------------------------------------- alias base_atk_cssr6 base_atk def base_atk # ꪪÎ?×âªò?ú¼ atk = base_atk_cssr6 # õÚÊ¥?×â @max_stamina = actor_stamina_max($data_classes[@class_id]) if atk * STAMINA_ATK_DOWN_PERSENT >= @max_stamina # Íô?ÕôªòÊõá´ return atk * STAMINA_ATK_DOWN # Êõá´ª·ªÊª¤íÞùê else # ª½ªÎªÞªÞÚ÷ª¹ return atk end end end #============================================================================== # ¡á Game_Battler #------------------------------------------------------------------------------ # ¡¡«Ð«È«é?ªòÐ⪦«¯«é«¹ªÇª¹¡£ª³ªÎ«¯«é«¹ªÏ Game_Actor «¯«é«¹ªÈ Game_Enemy «¯«é # «¹ªÎ«¹?«Ñ?«¯«é«¹ªÈª·ªÆÞÅéĪµªìªÞª¹¡£ #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ¡Ü ÷×ßÈÍô?ªÎ?ÍýîêéÄ # attacker : Íô?íº («Ð«È«é?) #-------------------------------------------------------------------------- alias attack_effect_cssr6 attack_effect def attack_effect(attacker) # Íô?íºª¬«¢«¯«¿?ªÎíÞùê if attacker.is_a?(Game_Actor) # lose_stamina ªòôøÑ¢ûù lose_stamina = 0 # ÙëÐïªòö¢Ôð weapon = $data_weapons[attacker.weapon_id] # ?àõ÷÷ïÒ element_id = attacker.get_element_id(STAMINA_CONSUMPTION) for i in element_id if weapon.element_set.include?(i) lose_stamina += attacker.get_element_number(STAMINA_CONSUMPTION, i) end end # «¹«¿«ß«ÊªòÊõá´ attacker.stamina -= lose_stamina # «¹«¿«ß«Êª¬«Þ«¤«Ê«¹ªÎíÞùê if attacker.stamina < 0 # áóïá attacker.stamina = base_stamina end # «¹«¿«ß«Êª¬0ªÎíÞùê(0ì¤ù»ªâìé?) if attacker.stamina <= 0 # «×«é«¹ª¹ªë«¹«Æ?«Èªòö¢Ôð state_set = STAMINA_STATE_ID attacker.states_plus(state_set) end end # ꪪÎ?×âªò?ú¼ attack_effect_cssr6(attacker) end #-------------------------------------------------------------------------- # ¡Ü «¹«­«ëªÎ?ÍýîêéÄ # user : «¹«­«ëªÎÞÅéÄíº («Ð«È«é?) # skill : «¹«­«ë #-------------------------------------------------------------------------- alias skill_effect_cssr6 skill_effect def skill_effect(user, skill) # ÞÅéÄíºª¬«¢«¯«¿?ªÎíÞùê if user.is_a?(Game_Actor) # lose_stamina ªòôøÑ¢ûù lose_stamina = 0 # ?àõ÷÷ïÒ element_id = user.get_element_id(STAMINA_CONSUMPTION) for i in element_id if skill.element_set.include?(i) lose_stamina += user.get_element_number(STAMINA_CONSUMPTION, i) end end # «¹«¿«ß«ÊªòÊõá´ user.stamina -= lose_stamina # «¹«¿«ß«Êª¬«Þ«¤«Ê«¹ªÎíÞùê if user.stamina < 0 # áóïá user.stamina = base_stamina end # «¹«¿«ß«Êª¬0ªÎíÞùê(0ì¤ù»ªâìé?) if user.stamina <= 0 # «×«é«¹ª¹ªë«¹«Æ?«Èªòö¢Ôð state_set = STAMINA_STATE_ID user.states_plus(state_set) end # ?àõ÷÷ïÒ element_id = get_element_id(STAMINA_RECOVERY) # üÞÜÖ?àõ«Õ«é«°ªòôøÑ¢ûù skill_element = false for i in element_id if skill.element_set.include?(i) # üÞÜÖ?àõ«Õ«é«°ªòêó?ªË skill_element = true end end # üÞÜÖ?àõª¬ÜõÊ¥ªµªìªÆª¤ªëíÞùê¡¢?Ø¡ª·ª¿Íªß©ãÒªò?ú¼ if skill_element # «¯«ê«Æ«£«««ë«Õ«é«°ªò«¯«ê«¢ 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 # êÎÕô 0 ì¤èâªÎÚª×âÍô?ªÎíÞùê if skill.power != 0 and skill.atk_f > 0 # «¹«Æ?«Èõú?ú°ð¶ remove_states_shock # êó?«Õ«é«°ªò«»«Ã«È effective = true end # «¹«¿«ß«Ê ª«ªé«À«á?«¸ªòÊõß© last_stamina = self.stamina self.stamina -= self.damage effective |= self.stamina != last_stamina # «¹«Æ?«È?ûù @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 # «ß«¹ªÎíÞùê else # «À«á?«¸ªË "Miss" ªòàâïÒ self.damage = "Miss" end # ??ñéªÇªÊª¤íÞùê unless $game_temp.in_battle # «À«á?«¸ªË nil ªòàâïÒ self.damage = nil end # «¹«¿«ß«Êª¬ß¾ùÚö·¡¢ªÞª¿ªÏù»ùÚö·ªòõ±ª¨ªÆª¤ªëíÞùê if self.stamina > maxstamina or self.stamina < 0 # «¹«¿«ß«Êªòáóïá self.stamina = base_stamina end # «á«½«Ã«ÉðûÖõ return effective # üÞÜÖ?àõª¬ÜõÊ¥ªµªìªÆª¤ªÊª¤íÞùꡢꪪÎ?×âªò?ú¼ else # ꪪÎ?×âªò?ú¼ skill_effect_cssr6(user, skill) end else skill_effect_cssr6(user, skill) end end #-------------------------------------------------------------------------- # ¡Ü «¢«¤«Æ«àªÎ?ÍýîêéÄ # item : «¢«¤«Æ«à #-------------------------------------------------------------------------- alias item_effect_cssr6 item_effect def item_effect(item) # ?àõ÷÷ïÒ element_id = get_element_id(STAMINA_RECOVERY) # üÞÜÖ?àõ«Õ«é«°ªòôøÑ¢ûù item_element = false for i in element_id if item.element_set.include?(i) # üÞÜÖ?àõ«Õ«é«°ªòêó?ªË item_element = true end end # üÞÜÖ?àõª¬ÜõÊ¥ªµªìªÆª¤ªëíÞùê¡¢?Ø¡ª·ª¿Íªß©ãÒªò?ú¼ if item_element # «¯«ê«Æ«£«««ë«Õ«é«°ªò«¯«ê«¢ 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) or ( item.scope == 1 or item.scope == 2) # «á«½«Ã«ÉðûÖõ 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_stamina = maxstamina * item.recover_hp_rate / 100 + item.recover_hp if recover_stamina < 0 recover_stamina += self.pdef * item.pdef_f / 20 recover_stamina += self.mdef * item.mdef_f / 20 recover_stamina = [recover_hp, 0].min end # ?àõáóïá recover_stamina *= elements_correct(item.element_set) recover_stamina /= 100 # üÞÜÖÕáªÎÝÂߤ if item.variance > 0 and recover_hp.abs > 0 amp = [recover_hp.abs * item.variance / 100, 1].max recover_stamina += rand(amp+1) + rand(amp+1) - amp end # «¹«¿«ß«ÊüÞÜÖÕáªÎݬ?ª¬Ý¶ªÎíÞùê if recover_stamina < 0 # ÛÁåÙáóïá if self.guarding? recover_stamina /= 2 end end # «¹«¿«ß«Ê üÞÜÖÕáªÎݬ?ªòÚã?ª·¡¢«À«á?«¸ªÎö·ªËàâïÒ self.damage = -recover_stamina # «¹«¿«ß«Ê ªòüÞÜÖ last_stamina = self.stamina self.stamina += recover_stamina effective |= self.stamina != last_stamina # «¹«Æ?«È?ûù @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 # «¢«¤«Æ«àªÎüÞÜÖáãªÈüÞÜÖÕ᪬ 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 = "Miss" end end end # «ß«¹ªÎíÞùê else # «À«á?«¸ªË "Miss" ªòàâïÒ self.damage = "Miss" end # ??ñéªÇªÊª¤íÞùê unless $game_temp.in_battle # «À«á?«¸ªË nil ªòàâïÒ self.damage = nil end # «¹«¿«ß«Êª¬ß¾ùÚö·¡¢ªÞª¿ªÏù»ùÚö·ªòõ±ª¨ªÆª¤ªëíÞùê if self.stamina > maxstamina or self.stamina < 0 # «¹«¿«ß«Êªòáóïá self.stamina = base_stamina end # «á«½«Ã«ÉðûÖõ return effective # üÞÜÖ?àõª¬ÜõÊ¥ªµªìªÆª¤ªÊª¤íÞùꡢꪪÎ?×âªò?ú¼ else item_effect_cssr6(item) end end end