Ergebnis 1 bis 14 von 14

Thema: [Ace] Wie speichere ich Einkaufs- und Verkaufsmengen im Shop?

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #7
    Hey Ken, hab mich mal kurz an ein Script gesetzt. Wäre es das, was du brauchst?
    Code:
    class Game_System
      LDT_SHOP_VAR = 15 # Shop Variable
      LDT_ITEM_BOUGHT_VAR = 16 # Item Bought Variable
      LDT_ITEM_SOLD_VAR = 17 # Item Sold Variable
      attr_accessor :ldt_shopsys
      
      def get_item_shop_info(pitemid,pbought=nil,psold=nil)
        tshopv = $game_variables[LDT_SHOP_VAR]
        init_shopsys(tshopv,pitemid)
        $game_variables[pbought ? pbought : LDT_ITEM_BOUGHT_VAR] = @ldt_shopsys[tshopv][pitemid]["Bought"]
        $game_variables[psold ? psold : LDT_ITEM_SOLD_VAR] = @ldt_shopsys[tshopv][pitemid]["Sold"]
      end
      
      def init_shopsys(tshopv,pitemid)
        @ldt_shopsys = {} unless(@ldt_shopsys)
        @ldt_shopsys[tshopv] = {} unless(@ldt_shopsys[tshopv])
        @ldt_shopsys[tshopv][pitemid] = {"Bought"=>0,"Sold"=>0} unless( @ldt_shopsys[tshopv][pitemid])
      end
      
      def change_shop_item(ptype,pitemid,pnum)
        tshopv = $game_variables[LDT_SHOP_VAR]
        init_shopsys(tshopv,pitemid)
        @ldt_shopsys[tshopv][pitemid][ptype] = [@ldt_shopsys[tshopv][pitemid][ptype] + pnum,0].max
      end
    end
    
    class Scene_Shop
      
      alias ldt_do_buy do_buy
      def do_buy(number)
        $game_system.change_shop_item("Bought",@item.id,number) if(@item.is_a?(RPG::Item))
        ldt_do_buy(number)
      end
    
      alias ldt_do_sell do_sell
      def do_sell(number)
        $game_system.change_shop_item("Sold",@item.id,number) if(@item.is_a?(RPG::Item))
        ldt_do_sell(number)
      end
    end
    Im Script legst du 3 Variablen fest:
    LDT_SHOP_VAR = 15: Die Zahl gibt an, in welcher Variable der gewünschte Shop steht (in diesem Fall steht die Information in Variable Nummer 15). Bevor du einen Shop aufrufst, setzt du dann in Variable 15 die Shop ID (dein erster Shop wäre die 1, der zweite die 2, usw.). Wenn jetzt in diesem Shop gekauft/verkauft wird, wird es mit der Shop ID gespeichert.

    LDT_ITEM_BOUGHT_VAR = 16: In dieser Variable wird die Anzahl der gekauften Items geschrieben (damit du diese in Ausgaben/Abfragen verwenden kannst)
    LDT_ITEM_SOLD_VAR = 17: In dieser Variable wird die Anzahl der verkauften Items geschrieben (damit du diese in Ausgaben/Abfragen verwenden kannst)

    Mit Befehl Skript(im Event) führst du dann folgendes aus (wobei die 1 in Klammern die Item ID ist):
    $game_system.get_item_shop_info(1)
    Dadurch wird die Anzahl der gekauften Items (hier ID 1) vom Shop, der in Variable 15 hinterlegt ist, in die Variable 16 geschrieben (und die anzahl verkaufter Items in Variable 17).
    Nachdem du diesen Befehl ausgeführt hast, kannst du also Variable 16 und 17 für Abfragen/Textausgaben verwenden.

    Beispiel:
    Wie läuft das Ganze also ab? Nehmen wir an, wir haben 2 verschiedene Shops. Im Shop 1 Event machst du (gemäß dem Beispiel)
    Code:
    Set Variable[15] = 1
    Open Shop (Heiltrank)
    Das Event vom anderen Shop:
    Code:
    Set Variable[15] = 2
    Open Shop (Heiltrank)
    Um das Ganze dann zu Testen ein drittes Event (angenommen, der Heiltrank hat die Item ID 1):
    Code:
    Set Variable[15] = 1
    Script: $game_system.get_item_shop_info(1)
    Message: Shop ID: \V[15]
                   Heiltrank gekauft: \V[16]
                   Heiltrank verkauft: \V[17]
    Set Variable[15] = 2
    Script: $game_system.get_item_shop_info(1)
    Message: Shop ID: \V[15]
                   Heiltrank gekauft: \V[16]
                   Heiltrank verkauft: \V[17]
    Edit: Ich habe mir nicht alle Posts hier durchgelesen. Diese Möglichkeit hat den Vorteil, dass sie dynamisch ist und für alle Items funktioniert. Damit verbrauchst du gerade mal 3 Variablen.
    Wenn gewünscht, kannst du statt der 2 fixen Variablen (16 und 17) auch beim Skriptaufruf auch 2 alternative Variablen übergeben:
    $game_system.get_item_shop_info(1,20,21)

    Das macht z.B. Sinn, wenn du mehrere Items gleichzeitig in verschiedene Variablen speichern willst:
    Code:
    $game_system.get_item_shop_info(1,20,21)
    $game_system.get_item_shop_info(2,22,23)
    $game_system.get_item_shop_info(3,24,25)
    Edit 2:
    Kleine Anpassung am Script, dass Equip nicht mitgezählt wird. Falls du das auch für Equip brauchst, sag bescheid, dann muss es nochmal minimal angepasst werden.

    Geändert von Linkey (11.01.2019 um 10:27 Uhr)

Berechtigungen

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