Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

Nuestros miembros han publicado un total de 85780 mensajes en 12216 argumentos.

[XP] Habilidades que usan items en vez de SP

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Habilidades que usan items en vez de SP

Mensaje por Lance Amano el 2017-07-23, 21:37

Como el título lo sugiere, este script permite la creación de abilidades que consuman items en vez de SP. La configuración va de esta manera:

ITEMS[ID de la habilidad en la base de datos] = [ID del objeto en la base de datos, número de objetos a consumir]

Créditos van a Farenheith.


Código:
#             FARENHEITH MAGIC BY ITEM
#         SCRIPT DESENVOLVIDO POR FARENHEITH
#==============================================================
#                   WWW.REINORPG.COM
#==============================================================
#   ESTE SCRIPT TEM COMO INTUITO "AMARRAR" O USO DE UMA MAGIA
# A UM ITEM. ELE FUNCIONA ASSIM: VOCÊ ASSOCIA O ID DA MAGIA AO
# ID DO ITEM E VOCÊ SÓ PODERÁ USAR A MAGIA SE TIVER O ITEM.
# TODA VEZ QUE USAR A MAGIA, VOCÊ PERDE UM ITEM.
# PARA UTILIZAR, BASTA RELACIONAR O A MAGIA AO ITEM COMO ESTÁ
# NO EXEMPLO: ITEMS[1] = [1, 1]
# LEMBRANDO QUE O NÚMERO ENTRE OS PRIMEIROS COLCHETES É O ID
# DA MAGIA, OS NÚMEROS NO SEGUNDO CHOLCHETES É, RESPECTIVAMENTE:
# O ID DO ITEM, QUANTOS ITENS SÃO NECESSÁRIOS
#==============================================================
# INFORMAÇÕES DOS RELEASES:
# VERSÃO 1.0.1:
#   * HABILITADA PARA O USO DE MÚLTIPLOS ITENS PARA
#   UMA MAGIA. OU SEJA, É POSSÍVEL FAZER UMA MAGIA DEPENDER DE
#   VÁRIOS ITENS, SENDO QUE CADA UM É DESCONTADO DE ACORDO.
#   POR EXEMPLO:
#   se quero que a magia três dependa do item 1 e do 2, eu faço
#   isso: ITEMS[3] = [[1,1],[2,1]]
#   * Corrigido seguinte erro: se a magia dependesse da qtd 1 de
#   certo item, então era necessário ter 2 de certo item. No
#   entanto, o script só descontava um.
#   * Implementada a seguinte opção: se a quantidade necessária
#   informada for 0, significa que basta o grupo ter o item
#   para poder usar a magia. No entanto, o item não é gasto.

module FarenMode
  module MagicByItem
    VERSION = "1.0.1"
    ITEMS = {}
    #AQUI VOCÊ COLOCA ASSIM:
    #ITEMS[ID_DA_SKILL] = [ID_DO_ITEM, QUANDIDADE_NECESSARIA]
    #PARA CADA SKILL QUE DEPENDER DE UM ITEM.
    ITEMS[410] = [1, 3]
    ITEMS[411] = [4, 5]
    ITEMS[412] = [14, 7]
    end
end

class Game_Party
  def haveMagicItems(skill_id)
    idItems = FarenMode::MagicByItem::ITEMS[skill_id]
    return true if !idItems
    if idItems[0].is_a?(Array)
      for idItem in idItems
        return false if !haveMagicItems0(idItem)
      end
    else
      return false if !haveMagicItems0(idItems)
    end
    true
  end

  def haveMagicItems0(idItem)
    (idItem[1] > 0 ?
      ($game_party.item_number(idItem[0]) >= idItem[1]) :
      ($game_party.item_number(idItem[0]) > 0))
  end

  def loseMagicItems(skill_id)
    idItems = FarenMode::MagicByItem::ITEMS[skill_id]
    return if !idItems
    if idItems[0].is_a?(Array)
      for idItem in idItems
        lose_item(idItem[0],idItem[1])
      end
    else
      lose_item(idItems[0],idItems[1])
    end
  end

  private :haveMagicItems0
end

class Game_Actor
  alias farenMagicByItem_skill_can_use skill_can_use?
  def skill_can_use?(skill_id)
    return false if !farenMagicByItem_skill_can_use(skill_id)
    $game_party.haveMagicItems(skill_id)
  end

end

class Scene_Battle
  alias fMagicByItem_make_skill_action_result make_skill_action_result
  def make_skill_action_result
    fMagicByItem_make_skill_action_result
    return if @phase4_step == 1
    $game_party.loseMagicItems(@skill.id)
  end
end

class Scene_Skill
  def update_target
    # Se o botão B for pressionado
    if Input.trigger?(Input::B)
      # Reproduzir SE de cancelamento
      $game_system.se_play($data_system.cancel_se)
      # Apagar janela alvo
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # Se o botão C for pressionado
    if Input.trigger?(Input::C)
      # Aqui é verificada a quantidade de MP a ser usada,
      # caso não seja suficiente
      unless @actor.skill_can_use?(@skill.id)
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Se o alvo for todos os aliados
      if @target_window.index == -1
        # Aplicar os efeitos da Habilidade em todo o Grupo de Heróis
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # Se o alvo for o usuário
      if @target_window.index <= -2
        # Aplicar os efeitos da Habilidade em si mesmo
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # Se o alvo for um aliado
      if @target_window.index >= 0
        # Aplicar os efeitos da Habilidade no Herói alvo
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # Se a Habilidade for utilizada
      if used
        # Reproduzir SE da Habilidade
        $game_system.se_play(@skill.menu_se)
        # Descontar o MP
        @actor.sp -= @skill.sp_cost
        $game_party.loseMagicItems(@skill.id)
        # Recriar o conteúdo de cada janela
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # Se todo o Grupo de Heróis estiver morto
        if $game_party.all_dead?
          # Alternar para a tela de Game Over
          $scene = Scene_Gameover.new
          return
        end
        # Se o ID do evento comum for válido
        if @skill.common_event_id > 0
          # Chamar evento comum da reserva
          $game_temp.common_event_id = @skill.common_event_id
          # Alternar para a tela do Mapa
          $scene = Scene_Map.new
          return
        end
      end
      # Se a Habilidade não foi usada
      unless used
        # Reproduzir SE de erro
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.