Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


Consultez la liste des Scripts : cliquez ici



Publier un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Empêcher le héros de s''équiper du "vide"
MessagePublié: 11 Nov 2008, 18:57 
Villageois (Nv 2)
Avatar de l’utilisateur

Inscrit le: 02 Sep 2008, 00:00
Messages: 24
Niveau RPG Maker: Assez bon
Logiciel(s) préféré(s): ♥ : RM2k3
Point(s) Fort(s): Scripts d'interfaces // EventMaking
Sexe: Masculin
Points d'aide: 0/60

Créations :

Voir ses créations

Alors voilà : quand on fait un jeu y'a des moments où, pour des raisons de cohérence, on voudrait être sûr que le héros a une arme équipée. Car si je fait une petite scène ou, par exemple, le héros attaque quelqu'un avec une arme, alors qu'il n'en a pas d'équipée, y'aura comme un p'tit problème...
Alors comment faire ? On peut essayer avec des événements :
> Si le héros est équipé de telle arme... (en faisant ça avec toutes les armes, etc.)
> Alors faire animation "Attaque à l'épée"
> Sinon
> Faire animation "Coup de poing"

Seulement c'est pas très pratique...
Alors l'autre solution c'est d'empêcher le héros de s"équiper du "vide" (en clair de se désarmer). Pareil on peut le faire en événements ; mais bon courage...
Donc y'a plus qu'une seule solution : un script (ou ici une modification de scripts).
Comme ça c'est plus simple et ça marche partout.


Alors voilà les deux scripts. En fait il s'agit d'une modification du Window_EquipItem et d'une du Scene_Equip. La première modification fonctionne comme pour les objets : quand y'en a au moins un dans l'inventaire y'a plus d'emplacement vide. MAIS à ce niveau y'a un problème : s'il n'y a rien dans l'inventaire, on peut encore sélectionner l'emplacement vide et se désarmer.
Et c'est là que la deuxième modif' intervient : s'il n'y a aucune arme dans l'inventaire, l'option "Arme" est désactivée (par contre comme c'est moi qui l'ai fait, c'est mal foutu : le texte n'est même pas grisée)

Bon et maintenant voici les deux scripts.
D'abord remplacer le script Window_EquipItem par celui-là :
Code: Tout sélectionner
#==============================================================================
# ■ Window_EquipItem
#------------------------------------------------------------------------------
#  Modifié par Nono II
#==============================================================================

class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  def initialize(actor, equip_type)
    super(0, 256, 640, 224)
    @actor = actor
    @equip_type = equip_type
    @column_max = 2
    refresh
    self.active = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []

    if @equip_type == 0
      weapon_set = $data_classes[@actor.class_id].weapon_set
      for i in 1...$data_weapons.size
        if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
          @data.push($data_weapons[i])
        end
      end
    end

    if @equip_type != 0
      armor_set = $data_classes[@actor.class_id].armor_set
      for i in 1...$data_armors.size
        if $game_party.armor_number(i) > 0 and armor_set.include?(i)
          if $data_armors[i].kind == @equip_type-1
            @data.push($data_armors[i])
          end
        end
      end
    end

    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      self.contents.font.name = $fontface
      self.contents.font.size = $fontsize
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

Et ensuite le Scene_Equip par ça :
Code: Tout sélectionner
#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  Modifié par Nono II
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end
  #--------------------------------------------------------------------------
  def main
    @actor = $game_party.actors[@actor_index]

    @help_window = Window_Help.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)

    @right_window.help_window = @help_window
    @item_window1.help_window = @help_window
    @item_window2.help_window = @help_window
    @item_window3.help_window = @help_window
    @item_window4.help_window = @help_window
    @item_window5.help_window = @help_window

    @right_window.index = @equip_index
    refresh

    Graphics.transition

    loop do

      Graphics.update

      Input.update

      update

      if $scene != self
        break
      end
    end

    Graphics.freeze

    @help_window.dispose
    @left_window.dispose
    @right_window.dispose
    @item_window1.dispose
    @item_window2.dispose
    @item_window3.dispose
    @item_window4.dispose
    @item_window5.dispose
  end
  #--------------------------------------------------------------------------
  def refresh

    @item_window1.visible = (@right_window.index == 0)
    @item_window2.visible = (@right_window.index == 1)
    @item_window3.visible = (@right_window.index == 2)
    @item_window4.visible = (@right_window.index == 3)
    @item_window5.visible = (@right_window.index == 4)

    item1 = @right_window.item

    case @right_window.index
    when 0
      @item_window = @item_window1
    when 1
      @item_window = @item_window2
    when 2
      @item_window = @item_window3
    when 3
      @item_window = @item_window4
    when 4
      @item_window = @item_window5
    end

    if @right_window.active

      @left_window.set_new_parameters(nil, nil, nil)
    end

    if @item_window.active

      item2 = @item_window.item

      last_hp = @actor.hp
      last_sp = @actor.sp
      @actor.equip(@right_window.index, item2 == nil ? 0 : item2.id)

      new_atk = @actor.atk
      new_pdef = @actor.pdef
      new_mdef = @actor.mdef

      @actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
      @actor.hp = last_hp
      @actor.sp = last_sp
     
      @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
    end
  end
  #--------------------------------------------------------------------------
  def update

    @left_window.update
    @right_window.update
    @item_window.update
    refresh

    if @right_window.active
      update_right
      return
    end

    if @item_window.active
      update_item
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_right

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      $scene = Scene_Menu.new(2)
      return
    end

    if Input.trigger?(Input::C)

      if @actor.equip_fix?(@right_window.index)

        $game_system.se_play($data_system.buzzer_se)
        return
      end

     
      item = @item_window.item
      if item.nil? and @right_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      else
        $game_system.se_play($data_system.decision_se)

        @right_window.active = false
        @item_window.active = true
        @item_window.index = 0
      end
     
      return
    end

    if Input.trigger?(Input::R)

      $game_system.se_play($data_system.cursor_se)

      @actor_index += 1
      @actor_index %= $game_party.actors.size

      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end

    if Input.trigger?(Input::L)

      $game_system.se_play($data_system.cursor_se)

      @actor_index += $game_party.actors.size - 1
      @actor_index %= $game_party.actors.size

      $scene = Scene_Equip.new(@actor_index, @right_window.index)
      return
    end
  end
  #--------------------------------------------------------------------------
  def update_item

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end

    if Input.trigger?(Input::C)
      # 装備 SE を演奏
      $game_system.se_play($data_system.equip_se)

      item = @item_window.item

      @actor.equip(@right_window.index, item == nil ? 0 : item.id)

      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1

      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end


Et voilà ^^
Alors par contre, je le précise avant qu'on me le demande (même si ça fait fausse modestie), pas besoin de me citer. Évitez juste de dire que c'est de vous.


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728