Ergebnis 1 bis 14 von 14

Thema: Item erst ab bestimmten lvl verwendbar?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hab' mich unglücklich ausgedrückt. Mit leichter meinte ich, dass man diese Lösung mit "Maker only"-Wissen anwenden kann, wenn man (so wie ich) von Ruby keine Ahnung hat.

  2. #2
    Code:
    module RPG
      #=============================================================================
      # ** Item
      #=============================================================================
      class Item
        SYNTAX = /\[(\d*?)\]/ #Levelbegrenzung beim Itemnamen als [level] angeben
        #--------------------------------------------------------------------------
        # * Überprüft, ob das Item eine Levelbegrenzung hat und wandelt es
        #   dementsprechend um
        #--------------------------------------------------------------------------
        def limited?
          name = @name
          if (name.slice!(SYNTAX)) then
            new_item = Level_Limited_Item.new($1.to_i)
            variablen = self.instance_variables
            variablen.each {|variable|
              symbol = variable.to_sym
              new_item.instance_variable_set(symbol,self.instance_variable_get(symbol))
              new_item.name = name
            }
            return new_item
          else
            return self
          end       
        end
        #--------------------------------------------------------------------------
        # * Überprüft alle Items der Database nach ihrer Levelbegrenzung
        #--------------------------------------------------------------------------
        def self.check
          $data_items.each_index {|index|
            $data_items[index] = $data_items[index].limited? if $data_items[index]
          }
        end
        #--------------------------------------------------------------------------
        # * Wenn ein Item keine Levelbegrenzung hat, dann ist diese automatisch 1
        #--------------------------------------------------------------------------
        def level
          return 1
        end
      end
    #==============================================================================
    # ** Level_Limited_Item
    #------------------------------------------------------------------------------
    #  Zur besseren Kompatibilität mit bestehenden Items und Speicherständen
    #  werden levelbegrenzte Items als neue Klasse behandelt
    #==============================================================================
      class Level_Limited_Item < Item
        attr_accessor(:level)
        #--------------------------------------------------------------------------
        # * Items mit Levelbegrenzung haben eine öffentliche Instanzvariable @level
        #--------------------------------------------------------------------------
        def initialize(level)
          super()
          @level = level
        end
        #--------------------------------------------------------------------------
        # * Ein bereits begrenztes Item brauch nicht erneut überprüft werden
        #--------------------------------------------------------------------------
        def limited?
          return self
        end
      end
    end
    #==============================================================================
    # ** Game_Party
    #==============================================================================
    class Scene_Title
      alias new_main main
      #--------------------------------------------------------------------------
      # * Im Titelbildschirm soll die Database eingelesen und die Items
      #   überprüft werden
      #--------------------------------------------------------------------------
      def main
        new_main
        RPG::Item.check
      end
    end
    
    #==============================================================================
    # ** Game_Party
    #==============================================================================
    class Game_Party
      alias new_item_can_use? item_can_use?
      #--------------------------------------------------------------------------
      # * Wenn kein spezifischer Held ein Item verwendet, so soll automatisch der
      #   lebende Held mit dem höchsten Level das Item verwenden
      #--------------------------------------------------------------------------
      def highest_level
        level = 1
        self.actors.each {|actor|
          if not actor.dead? and ((lev=actor.level)>level) then level = lev end
        }
        level
      end
      #--------------------------------------------------------------------------
      # * Items können nur eingesetzt werden, wenn das eigene Level höher als
      #   das der Levelbegrenzung ist
      #--------------------------------------------------------------------------
      def item_can_use?(item_id,battler_level=self.highest_level)
        item = $data_items[item_id]
        if item.level > battler_level then 
          return false 
        else 
          new_item_can_use?(item_id)
        end
        new_item_can_use?(item_id)
      end
    end
    #==============================================================================
    # ** Scene_Battle
    #------------------------------------------------------------------------------
    #  Editierte Stellen sind gekennzeichnet!
    #==============================================================================
    class Scene_Battle
      #--------------------------------------------------------------------------
      # * Im Kampf wird für jeden Kämpfer einzeln überprüft, ob er die
      #   Levelbegrenzung erfüllt
      #--------------------------------------------------------------------------
      def update_phase3_item_select
        @item_window.user_level = @active_battler.level #EDIT
        # Make item window visible
        @item_window.visible = true
        # Update item window
        @item_window.update
        # If B button was pressed
        if Input.trigger?(Input::B)
          # Play cancel SE
          $game_system.se_play($data_system.cancel_se)
          # End item selection
          end_item_select
          return
        end
        # If C button was pressed
        if Input.trigger?(Input::C)
          # Get currently selected data on the item window
          @item = @item_window.item
          # If it can't be used
          unless $game_party.item_can_use?(@item.id, @active_battler.level) #EDIT
            # Play buzzer SE
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # Play decision SE
          $game_system.se_play($data_system.decision_se)
          # Set action
          @active_battler.current_action.item_id = @item.id
          # Make item window invisible
          @item_window.visible = false
          # If effect scope is single enemy
          if @item.scope == 1
            # Start enemy selection
            start_enemy_select
          # If effect scope is single ally
          elsif @item.scope == 3 or @item.scope == 5
            # Start actor selection
            start_actor_select
          # If effect scope is not single
          else
            # End item selection
            end_item_select
            # Go to command input for next actor
            phase3_next_actor
          end
          return
        end
      end
    end
    #==============================================================================
    # ** Window_Item
    #------------------------------------------------------------------------------
    #  Editierte Stellen sind gekennzeichnet!
    #==============================================================================
    class Window_Item < Window_Selectable
      alias new_initialize initialize
      #--------------------------------------------------------------------------
      # * Die Window_Item Klasse erhält die private Instanzvariable @user_level
      #   Wenn kein Level angegeben, so ist diese automatisch so groß wie das
      #   Level des besten Heldens
      #--------------------------------------------------------------------------
      def initialize(level=$game_party.highest_level)
        @user_level = level
        new_initialize
      end
      #--------------------------------------------------------------------------
      # * Die Instanzvariable @user_level kann jederzeit neu beschrieben werden
      #--------------------------------------------------------------------------
      def user_level=(other)
        if other != @user_level then
          @user_level = other
          refresh
        end
      end
      #--------------------------------------------------------------------------
      # * Nicht verwendbare Items sollen grau dargestellt werden
      #--------------------------------------------------------------------------
      def draw_item(index)
        item = @data[index]
        case item
        when RPG::Item
          number = $game_party.item_number(item.id)
        when RPG::Weapon
          number = $game_party.weapon_number(item.id)
        when RPG::Armor
          number = $game_party.armor_number(item.id)
        end
        if item.is_a?(RPG::Item) and
           $game_party.item_can_use?(item.id, @user_level) #EDIT
          self.contents.font.color = normal_color
        else
          self.contents.font.color = disabled_color
        end
        x = 4 + index % 2 * (288 + 32)
        y = index / 2 * 32
        rect = Rect.new(x, y, self.width / @column_max - 32, 32)
        self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon(item.icon_name)
        opacity = self.contents.font.color == normal_color ? 255 : 128
        self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        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
    end
    Funktioniert bisher nur mit Items. Rüstungen und Waffen kann ich aber, falls gewünscht, noch hinzufügen.

    Schreib bei deinen Items in der Database neben den Namne einfach ein [level] (statt level eben das jeweilige Mindestlevel).

    Beispiel: Potion[5]
    --> Spieler kann Potion nur einsetzen, wenn er mindestens Level 5 ist.

    Im Kampf wird zwischen jedem Kämpfer unterschieden, im Menü wird automatisch das Level des besten Charakters verwendet.

  3. #3
    Wird das jez als neues event, oder in ein anderes eingefügt?

  4. #4
    Das kommt in den Scripteditor (F11) X_x
    Einfach in ein neues Script über Main einfügen.

  5. #5
    Zitat Zitat von -KD- Beitrag anzeigen
    Das kommt in den Scripteditor (F11) X_x
    Ja ne, da wär ich jetzt nicht von alleine drafu gekommen....

    Zitat Zitat von -KD-
    Einfach in ein neues Script über Main einfügen.
    Das wollt ich wissen.
    Hät ja auch in ein vorhandenes Skript bei den Menü Skripts reinkommen können.

  6. #6
    Also danke an alle
    es hat geklappt^^

  7. #7
    Könntest du das mit den Rüstungen und Waffen hinzufügen?

    Ist es auch möglich, das man zb Waffen erst ab einer bestimmten Stärke ausrüsten kann? Also auf diese Art und weise, ohne großes rumskripten.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •