Forums » RPG Maker XP

Habilidade para Roubar

    • 432 posts
    30 de setembro de 2012 07h44min54s ART

     Habilidade para Roubar


    Este script permite criar habilidades que dão chance de roubar itens dos inimigos, também permite:

    • Definir porcentagens diferentes de roubo para cada item.
    • Definir "multi roubo" (se vai poder se roubar apenas um, ou varios itens de um inimigo)
    • Atribuir o efeito de roubo para habilidades que causem dano.


    Como Usar ? 

    Para instalar, cole o script acima do Main.

    Primeiramente defina a ID do Atributo de Roubo (na aba de sistemas) na linha

    Código:

    Steal_Element = 17


    Você deverá adicionar este atributo a todas as habilidades que tiverem o efeito de roubo.

    Após isto você deve definir a taxa base de roubo em


    Código:

    Steal_Rate = 50

    Este valor é alterado pela diferença de agilidade entre o alvo e o usuário da habilidade.
    É alterado também pela resistência do alvo ao atributo "Steal_Element"
    Mas cuidado, se você adicionar este atributo a uma skill de dano e alterar a resistência do alvo contra ela, o dano da habilidade também será alterado.


    Para adicionar itens para serem roubados, vá até o module Atoa
    Enemy_Steal[ID] = {"ITEM" => PORCENTAGEM}
    ID = ID do inimigo
    ITEM = tipo e ID do item. deve sempre ser expresso como "xY"
    - onde x = tipo do item e Y = ID do item
    x deve ser "a" para armaduras, "w" para armas, "i" para itens, "g" para dinheiro
    PORCENTAGEM = % de Roubar o item, valor de 0 a 100, aceita ate uma casa decimal
    ex.: 5.4 = 5,4% de chance


    EX.: Enemy_Steal[15] = {"w6" => 22.5, "g900" => 12}
    Isto significa que o Inimigo ID 15 (Enemy_Steal[15])
    tem 22,5% de chande de dar a arma ID 6 ("w6" => 22.5) ao ser roubado 
    também tem 12% de chande dar 900 em dinheiro ("g900" => 12) ao ser roubado


    Você pode adicionar quantos item quiser para um inimigo, sempre separando por vírgulas.


    Screen:

     

    Script:

    #==============================================================================
    # Habilidade - Roubar
    # por Atoa
    #==============================================================================
    # Este script permite adicionar criar habilidades que dão chance de roubar
    # itens dos inimigos.

    # Primeiramente defina a ID do Atributo de Roubo (na aba de sistemas) na linha
    # Steal_Element = 17
    # Você deverá adicionar este atributo a todas as habilidades que tiverem o efeito de roubo.
    #
    # Após isto você deve definir a taxa base de roubo em
    # Steal_Rate = 50
    # Este valor é alterado pela diferença de agilidade entre o alvo e o usuário da habilidade.
    # É alterado também pela resistência do alvo ao atributo "Steal_Element"
    # mas cuidado, se você adicionar este atributo a uma skill de dano e alterar a resistência do
    # alvo contra ela, o dano da habilidade também será alterado.
    #
    # Para adicionar itens ao inimigos, vá até o module Atoa
    # Enemy_Steal[ID] = {"ITEM" => PORCENTAGEM}

    # ID = ID do inimigo
    # ITEM = tipo e ID do item. deve sempre ser expresso como "xY"
    #  onde x = tipo do item e Y = ID do item/quantia em dinheiro
    #  x deve ser "a" para armaduras, "w" para armas, "i" para itens, "g" para dinheiro
    # PORCENTAGEM = % de Roubar o item, valor de 0 a 100, aceita ate uma casa decimal
    #  ex.: 5.4  = 5,4% de chace
    #
    # EX.: Enemy_Steal[15] = {"w6" => 22.5, "g900" => 12}
    # Isto significa que o Inimigo ID 15 (Enemy_Steal[15])
    # tem 22,5% de chande de dar a arma ID 6 ("w6" => 22.5) ao ser roubado
    # e também tem 12% de chande dar 900 em dinheiro ("g900" => 12) ao ser roubado
    #
    # Lembrando que apenas um item é roubado por vez.
    #
    # Você pode adicionar quantos item quiser para um inimigo, sempre sepadao por vígulas
    #
    # IMPORTANTE: 
    # - Este script *NÃO* funciona com o SBL XP.
    # - Este script *NÃO* funciona com ABS.
    #==============================================================================


    module Atoa
      Enemy_Steal = [] # não altere esta linha

      # Os inimigos poderão ser roubados mais de uma vez?
      Multi_Steal = true
      # Se for false, uma vez que o inimigo seja roubado, ele não poderá
      # ser mais roubado, mesmo que possua mais de um item (similar aos FF antigos)
      
      # ID do Atributo de Roubo.
      Steal_Element = 17
      
      # Taxa Base de Sucesso do Roubo
      Steal_Rate = 50
      # Memso que a taxa de sucesso seja 100%, isto não garantirá 100% de roubos
      # este valor varia de acordo com a agilidade do alvo e do usuário e 
      # ainda será necessário avaliar a taxa de drop individual de cada item.
      
      # Mensage se o alvo não possui Itens
      No_Item = "Não tem nada"
      
      # Mensagem de falha na tentativa de roubo
      Steal_Fail = "Tentativa de Roubo Falhou"
      
      # Mensagem de Sucesso no roubo de item. {item} representa o nome do item, 
      # deve sempre ser adicionado nesta mensagem, ou o nome do item não aparecerá.
      Steal_Item = "Roubou {item}"
      # Exemplos:
      # "Roubou {item}" - Roubou Poção
      # "{item} obtido" - Poção obtido
      
      # Mensagem de Sucesso no roubo de dinheiro. {gold} representa a quantia ganha, 
      # deve sempre ser adicionado nesta mensagem, ou a quantia não aparecerá.]
      # {unit} é a unidade monetária do seu jogo, é opicional seu uso
      Steal_Gold = "Roubou {gold}{unit}"
      # Exemplos:
      # "Roubou {gold}{unit}" - Roubou 500g
      # "Roubou {gold} moedas" - "Roubou 500 moedas"
      
      # Adicione aqui novos drops para os inimigos
      Enemy_Steal[1] = {"g100" => 50, "w1" => 15, "a1" => 15,}
      Enemy_Steal[2] = {"i3" => 22.5, "w2" => 5}
      # Adicione quantas linhas você quiser
    end

    #==============================================================================
    # Game_Enemy
    #==============================================================================
    class Game_Enemy < Game_Battler
      #--------------------------------------------------------------------------
      include Atoa
      #--------------------------------------------------------------------------
      attr_accessor :steal_items
      attr_accessor :steal_flag
      attr_accessor :stole_item 
      attr_accessor :steal_attempt
      #--------------------------------------------------------------------------
      alias initialize_atoa_steal_enemy initialize
      #--------------------------------------------------------------------------
      def initialize(troop_id, member_index)
        initialize_atoa_steal_enemy(troop_id, member_index)
        @steal_items = Enemy_Steal[@enemy_id].to_a
        @stole_item = nil
        @steal_flag = false
        @steal_attempt = 0
      end
    end

    #==============================================================================
    # Game_Battler
    #==============================================================================
    class Game_Battler
      #--------------------------------------------------------------------------
      include Atoa
      #--------------------------------------------------------------------------
      alias initialize_atoa_steal_battler initialize
      #--------------------------------------------------------------------------
      def initialize
        initialize_atoa_steal_battler
      end
      #--------------------------------------------------------------------------
      alias skill_effect_atoa_steal skill_effect
      def skill_effect(user, skill)
        effective = skill_effect_atoa_steal(user, skill)
        @stole_item = stole_item_set(user) if skill.element_set.include?(Steal_Element) and self.is_a?(Game_Enemy)
        return effective
      end
      #--------------------------------------------------------------------------
      def stole_item_set(user)
        @steal_flag = true
        rate = (Steal_Rate * elements_correct(Steal_Element.to_a)) / 100
        steal_success = rand(100) < (rate + self.steal_attempt) * user.agi / self.agi
        self.steal_attempt += 1
        return false unless steal_success
        return nil if self.steal_items == nil or self.steal_items == []
        item_stole = []
        self.steal_items.each do |item, steal_rate|
          item = item.split('')
          if item[0] == "i"
            item = item.join
            item.slice!("i")
            item_stole.push($data_items[item.to_i]) if rand(1000) < ((steal_rate * 10) + (self.steal_attempt * 2)).to_i
          elsif item[0] == "a"
            item = item.join
            item.slice!("a")
            item_stole.push($data_armors[item.to_i]) if rand(1000) < ((steal_rate * 10) + (self.steal_attempt * 2)).to_i
          elsif item[0] == "w"
            item = item.join
            item.slice!("w")
            item_stole.push($data_weapons[item.to_i]) if rand(1000) < ((steal_rate * 10) + (self.steal_attempt * 2)).to_i
          elsif item[0] == "g"
            item = item.join
            item.slice!("g")
            item_stole.push(item.to_i) if rand(1000) < ((steal_rate * 10) + (self.steal_attempt * 2)).to_i
          end
        end
        return false if item_stole == []
        self.steal_attempt = 0
        stole_item_index = rand(item_stole.size)
        item_to_steal = [item_stole[stole_item_index]]
        self.steal_items.delete_at(stole_item_index) if Multi_Steal
        self.steal_items = [] unless Multi_Steal
        return item_to_steal
      end
    end

    #==============================================================================
    # Scene_Battle
    #==============================================================================
    class Scene_Battle
      #--------------------------------------------------------------------------
      include Atoa
      #--------------------------------------------------------------------------
      def update_basic
        Graphics.update
        Input.update
        $game_system.update
        $game_screen.update
        @spriteset.update
      end  
      #--------------------------------------------------------------------------
      def wait(duration)
        for i in 0...duration
          update_basic
        end
      end
      #--------------------------------------------------------------------------
      def pop_steal_help(obj)
        @help_window.set_text(obj, 1)
        count = 0
        loop do
          update_basic
          count += 1
          break @help_window.visible = false if (Input.trigger?(Input::C) and count > 30) or count == 60
        end
      end
      #--------------------------------------------------------------------------
      alias update_phase4_step5_atoa_steal update_phase4_step5
      def update_phase4_step5
        update_phase4_step5_atoa_steal
        @target_battlers.each do |battler|
          if battler.is_a?(Game_Enemy) && battler.steal_flag
            item_stole = battler.stole_item[0] unless battler.stole_item == false or battler.stole_item == nil
            item_stole = nil if battler.stole_item == nil
            item_stole = false if battler.stole_item == false or battler.damage == "Errou!"
            case item_stole
            when nil
              text = No_Item
            when false
              text = Steal_Fail
            when Numeric
              $game_party.gain_gold(item_stole)
              text = Steal_Gold.dup
              text.gsub!(/{gold}/i) {"#{item_stole}"}
              text.gsub!(/{unit}/i) {"#{$data_system.words.gold}"}          
            else
              case item_stole
              when RPG::Item
                $game_party.gain_item(item_stole.id, 1)
              when RPG::Weapon
                $game_party.gain_weapon(item_stole.id, 1)
              when RPG::Armor
                $game_party.gain_armor(item_stole.id, 1)
              end
              text = Steal_Item.dup
              text.gsub!(/{item}/i) {"#{item_stole.name}"}
            end
            pop_steal_help(text)
            battler.steal_flag = false  
            wait(3)
          end
        end
      end
    end

    Este post foi editado por Oliveira Dario em 30 de setembro de 2012 07h47min01s ART"