MOG Luck System é um script para o RPG Maker XP, desenvolvido pelo Moghunter, que adiciona o atributo sorte, que interfere na chance de ganhar itens ou de causar dano crítico.
Para instalar, basta que adicione o código abaixo acima do Main:
#_________________________________________________ # MOG_Luck System V1.3 #_________________________________________________ # By Moghunter # http://www.atelier-rgss.com #_________________________________________________ #Adiciona o atributo sorte, que interfere na na #chance de ganhar itens ou de causar dano crítico. #_________________________________________________ module MOG # Limite maximo para a sorte. # Valores maiores que 100% serão limitados a esse valor. # MAX_LUCK = {A=>B} # # A = ID do personagem # B = valor maximo de sorte para cada personagem. # # Caso não definir nada o valor maximo será 100%. MAX_LUCK = { 1=>60, 2=>45, 7=>23 } #_________________________________________________ #Definição dos parâmetros iniciais de sorte do personagem. # INILUCK = {A =>B} # # A = ID do personagem. # B = valor inicial da sorte. # #Se não definir nada o valor inicial será 1. INILUCK = { 1 =>5, 2 =>3, 7 =>2 } #_________________________________________________ #Definição da quantidade de sorte que ganhará por level. #LKUP = {A =>B} # # A = ID do personagem # B = Valor da bonificação. # #Se não definir nada o valor da bonificação será 1. LKUP = {1 =>2, 2 =>3 } #_________________________________________________ #Calculo para ganhar item. # # false = Chance de ganhar item é baseado no luck mais alto do grupo. # true = Chance de ganhar item é baseado na média do grupo. LKITEMEDIA = true #_________________________________________________ #Quantidade % de HP recuperado. LKHPRECPER = 10 end #=============================================================================== # Game_Actor #=============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # setup #-------------------------------------------------------------------------- alias mog23_setup setup def setup(actor_id) iniluck = MOG::INILUCK[actor_id] maxluck = MOG::MAX_LUCK[actor_id] if maxluck == nil @max_luck = 100 else @max_luck = maxluck end if MOG::INILUCK[actor_id] == nil @luck = 1 else @luck = iniluck end if MOG::LKUP[actor_id] == nil @luckup = 1 else @luckup = MOG::LKUP[actor_id] end mog23_setup(actor_id) end #-------------------------------------------------------------------------- # max_luck #-------------------------------------------------------------------------- def max_luck return @max_luck end #-------------------------------------------------------------------------- # luck #-------------------------------------------------------------------------- def luck if @max_luck != nil and @luck > @max_luck @luck = @max_luck else if @luck > 100 @luck = 100 end return @luck end end #-------------------------------------------------------------------------- # #-------------------------------------------------------------------------- def exp=(exp) @exp = [[exp, 9999999].min, 0].max while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0 @level += 1 @luck += @luckup for j in $data_classes[@class_id].learnings if j.level == @level learn_skill(j.skill_id) end end end while @exp < @exp_list[@level] @level -= 1 @luck -= @luckup end @hp = [@hp, self.maxhp].min @sp = [@sp, self.maxsp].min end end #=============================================================================== # Game_Enemy #=============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # treasure_prob #-------------------------------------------------------------------------- def treasure_prob for i in 0...$game_party.actors.size actor = $game_party.actors[i] if MOG::LKITEMEDIA == true return actor.luck / $game_party.actors.size else return actor.luck end end end end #=============================================================================== # Game_Battler #=============================================================================== class Game_Battler #-------------------------------------------------------------------------- # attack_effect #-------------------------------------------------------------------------- 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 self.damage *= elements_correct(attacker.element_set) self.damage /= 100 if self.damage > 0 if attacker.is_a?(Game_Actor) if rand(100) < attacker.luck self.damage *= 2 self.critical = true end else if rand(100) < 4 * attacker.dex / self.agi self.damage *= 2 self.critical = true end end if self.guarding? 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 self.hp -= self.damage @state_changed = false states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) else self.damage = "Miss" self.critical = false end return true end end #=============================================================================== # Window_Base #=============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # draw_actor_luck #-------------------------------------------------------------------------- def draw_actor_luck(actor, x, y) self.contents.font.color = normal_color self.contents.draw_text(x, y, 120, 32, "Luck " + actor.luck.to_s + "%") if $mogscript["menu_eva"] == true back = RPG::Cache.picture("STBAR_Back") cw = back.width ch = back.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y - ch + 40, back, src_rect) meter = RPG::Cache.picture("STBAR.png") cw2 = meter.width * actor.luck / actor.max_luck ch2 = meter.height src_rect2 = Rect.new(0, 0, cw2, ch2) self.contents.blt(x , y - ch + 40, meter, src_rect2) end end end #=============================================================================== # Window_Status #=============================================================================== class Window_Status < Window_Base #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- alias mog23_refresh refresh def refresh mog23_refresh if $mogscript["menu_eva"] == true draw_actor_luck(@actor, 520,210) else draw_actor_luck(@actor, 325,120) end end end #=============================================================================== # Scene_Battle #=============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # start_phase5 #-------------------------------------------------------------------------- alias mog23_start_phase5 start_phase5 def start_phase5 mog23_start_phase5 for actor in $game_party.actors if rand(100) < actor.luck lkhprec = actor.maxhp * MOG::LKHPRECPER / 100 actor.hp += lkhprec actor.damage_pop = true actor.damage = -lkhprec end end @status_window.refresh end end $mog_rgss_luck_system = true
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!