Ergebnis 1 bis 6 von 6

Thema: [VX-Ace] Script für variablen Truheninhalt

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #2
    Hey Elster,

    habe dir gerade folgendes Script erstellt (einfach über main einfügen):
    Code:
    class Custom_Chest
      
      def initialize
        @chests ={}
        @var_id = 9
        init_chests()
      end
      
      def init_chests()
        $data_weapons.each do |tw|
          add_item?(tw,"weapon")
        end
        $data_armors.each do |ta|
          add_item?(ta,"armor")
        end
        $data_items.each do |ti|
          add_item?(ti,"item")
        end
      end
      
      def add_item?(item,ptype)
        return unless(item)
        reg_type = /<ch_type:\s*(.+)\s*>/i
        reg_amount = /ch_amount:\s*(.+)\s*>/i
        reg_chance = /ch_chance:\s*(.+)\s*>/i
        res_type = item.note.match(reg_type)
        res_amount = item.note.match(reg_amount)
        res_chance = item.note.match(reg_chance)
        return false unless(res_type)
        type = res_type[1]
        amount = res_amount ? res_amount[1].to_i : 1
        chance = res_chance ? res_chance[1].to_i : 1
        
        if(type.include?(","))
          type.split(",").each do |tp|
            @chests[tp] = [] unless(@chests.has_key?(tp))
          end
        else
          @chests[type] = [] unless(@chests.has_key?(type))
        end
        
        chance.times do
          if(type.include?(","))
            type.split(",").each do |tp|
              @chests[tp] << Chest_Item.new(item.id,item.name,ptype,amount)
            end
          else
            @chests[type] << Chest_Item.new(item.id,item.name,ptype,amount)
          end
        end
        return true
      end
    
      def open_chest(chest_type)
        if(@chests.has_key?(chest_type))
          ci = @chests[chest_type][rand(@chests[chest_type].size)]
          ci.add_to_inventory
          $game_variables[@var_id] = ci.amount.to_s + "x " + ci.name
        else
          $game_variables[@var_id] = "ERROR"
        end
      end
    end
    
    class Chest_Item
      attr_reader :id
      attr_reader :name
      attr_reader :type
      attr_reader :amount
      
      def initialize(id,name,type,amount)
        @id = id
        @name = name
        @type = type
        @amount = amount
      end
      
      def add_to_inventory
        case @type
        when "weapon"
          $game_party.gain_item($data_weapons[@id], @amount)
          return true
        when "armor"
          $game_party.gain_item($data_armors[@id], @amount)
          return true
        when "item"
          $game_party.gain_item($data_items[@id], @amount)
          return true
        else
          return false
        end
      end
    end
    
    
    module DataManager
      class <<self; alias org_setup_new_game setup_new_game; end
      def self.setup_new_game
        self.org_setup_new_game
        $chests = Custom_Chest.new()
      end
      
      def self.load_game_without_rescue(index)
        File.open(make_filename(index), "rb") do |file|
          Marshal.load(file)
          extract_save_contents(Marshal.load(file))
          reload_map_if_updated
          @last_savefile_index = index
        end
        $chests = Custom_Chest.new()    
        return true
      end
    end
    Das Script funktioniert wie folgt:
    Über die Variable "@var_id" kannst du bestimmen, in welcher Variable die Anzahl + der Itemname gespeichert werden soll. Damit kannst du dann im Event die Variable über die Messagebox anzeigen lassen.
    Nimmst du beispielsweise die "@var_id = 9", kannst du in der Messagebox folgenden Befehl verwenden:
    Code:
    \V[9]
    Dahinter kannst du dann bspw. " erhalten!" einfügen. Wenn der Spieler dann beispielsweise 5 Potions aus der Truhe erhält, gibt die Messagebox folgendes aus: "5x Potion erhalten!".

    Die Items pro Truhe stellst du über folgende Notetags her:
    Code:
    <ch_type: string>
    <ch_amount: int> (OPTIONAL. Default: 1)
    <ch_chance: int> (OPTIONAL. Default: 1)
    ch_type bestimmt dabei den Typ der Truhe. (Beispiel: "Blau", "Selten", "Golden") - per "," getrennt können hier mehrere angegeben werden. (Bspw: "rot,blau,gelb")
    ch_amount bestimmt wie oft dieses Item dem Spieler hinzugefügt wird. Gibst du bei einer Potion bspw. hier eine "5" an, erhält der Spieler 5 Potions, wenn dieses Item zufällig gewählt wird. Optionaler Befehl.
    ch_chance bestimmt die Chance, dieses Item zu erhalten. Alle Items, die hier nichts stehen haben, sind einmal in der Liste eingetragen. Du könntest bei der Potion hier jetzt eine 10 eintragen, dann wird die Potion 10 mal in der Liste dieser Truhe stehen und somit die Chance erhöht.

    Beispiel:

    Item: Altes Schwert
    <ch_type: blau>

    Item: Potion
    <ch_type: blau,rot>
    <ch_amount: 5>
    <ch_chance: 4>

    Item: Helm
    <ch_type: blau>
    <ch_amount: 2>
    <ch_chance: 2>

    Item: Bombe
    <ch_type: rot>

    Öffnet der Spieler nun eine Truhe mit dem Typ "rot", wird dieser zu 80% 5x Potion und zu 20% 1x Bombe erhalten.
    Öffnet der Spieler nun eine Truhe mit dem Typ "blau", wird dieser zu ca. 58% 5x Potion, zu ca. 28% 2x Helm und zu ca. 14% 1x Altes Schwert.


    Eine Truhe öffnest du mit dem Befehl (im Event ein Script ausführen [Button unten rechts auf der 3. Seite]):
    Code:
    $chests.open_chest("rot")
    (in Klammern steht der ch_type)

    Ich hoffe, es funktioniert, wie du es dir vorstellst. Ansonsten einfach nachfragen.

    PS: Hat das andere Script, zum Lernen von Skills über Items, eigentlich zu deiner Zufriedenheit funktioniert?

    Geändert von Linkey (01.07.2014 um 22:01 Uhr)

Berechtigungen

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