• Anmelden

Rash

Knappe

  • »Rash« ist der Autor dieses Themas

Motto: Gute Spiele hat man im Herzen nicht in der Konsole.

  • Nachricht senden

1

Sonntag, 20. März 2011, 11:02

Shoppreise variieren

Ich würde gern ein paar Händer haben wo ich die Preise, sowohl beim Kaufen als auch beim Verkaufen, ändern kann.
Z.B. Ring of Fire = 2000G, Händler: Kauf = 2200G - Verkauf = 1800G
Kennt da vllt. jmd. was?
thx
RR

Flex

Krieger

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

2

Sonntag, 20. März 2011, 11:55

ich verstehe nicht 100% worauf du hinaus willst...

willst du, dass du beim verkauf von items mehr geld als nur die hälfte des kaufpreises bekommst?
oder willst du, dass man die preise runter- bzw. raufhandeln kann?
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

Rash

Knappe

  • »Rash« ist der Autor dieses Themas

Motto: Gute Spiele hat man im Herzen nicht in der Konsole.

  • Nachricht senden

3

Sonntag, 20. März 2011, 12:40

Ich will nicht als Spieler Handel, ich will einfach nur weniger Geld bekommen wenn ich etwas verkaufe.
Ich würde es am liebsten einstellen können.

EVENT
$game_kaufpreis (120%)
$game_verkaufpreis (80%)
Shop Proccesing: Item
Item
Item
EVENT ENDE

Wenn jetzt der Ring of Fire 2000G kostet soll man ihn in diesem Fall für 2400G Kaufen (20% mehr) und für 1600G (20% weniger) verkaufen.
Ist das klar genug? Ich hoffe die frage kommt nicht unhöflich rüber. Wenn noch was ist einfach fragen. ^^


Ergebnis:
So bietet dies viele möglichkeiten z.B. Handeln, Preisnachlass bei höherem eigenen Level, unhöflich sein erhöht den Kaufpreis, usw.
Wer dann Events machen kann hat viele möglichkeiten. Nur leider kann ich nicht Scripten.
RR

Flex

Krieger

Motto: Menschen sind doof, Tiere sind doof, Pflanzen sind doof... Steine sind okay.

  • Nachricht senden

4

Sonntag, 20. März 2011, 12:58

ok, jetzt hab ich es verstanden ^^

leider glaub ich nicht, dass man den shop über rgss-befehle laufen lassen kann... (ich kann mich auch irren, das müsste dann jemand sagen, der sich mit scripts besser auskennt)

eine möglichkeit wäre, einfach mehrere identische items in der database zu erstellen, die sich lediglich im preis (und damit auch im verkaufspreis) unterscheiden.
das shop-event änderst du dann einfach per switches oder variabeln, damit er auch die jeweiligen anderen items anbietet, je nach fortschritt
Was lebt, das kann man töten. Was tot ist, das kann man essen.
--------------------------------------------------------------------------
:map: Mapping: :star::star::star::star::star:
:compile: Scripting: :star-empty::star-empty::star-empty::star-empty::star-empty:
:system-monitor: Event: :star::star::star::star::star:
:doc: Story: :star::star::star::star::star-empty:
:pencil: Zeichnen: :star::star::star::star::star:
:palette: Pixeln: :star::star::star-half::star-empty::star-empty:
:music-beam-16: Musik & Sounds: :star::star::star::star-empty::star-empty:
--------------------------------------------------------------------------
Bevorzugter Maker: :ace:
Ebenfalls im Besitzt: :rmxp: :rmvx: :rmmv:

5

Sonntag, 20. März 2011, 19:12

Advanced Shop System

Enthält in etwa das, was du suchst, wird aber von guten Skriptern als ein schlechtes Skript bezeichnet, kenne mich mit Ruby aber nicht so aus, deshalb kann ich dazu nichts sagen.

6

Sonntag, 20. März 2011, 19:28

x_x global variables over kill

Aber davon abgesehen ist Alexis Script ganz nett :3

Ich habe ein weiteres Script anzubieten:
Spoiler: Teil1
Als neues Script über Main einfügen

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#==============================================================================
#    *** Shop Erweiterung (Teil 1)
#
#        Die Preise im Shop können im Vorfeld manipuliert werden
#        von Playm
#
#==============================================================================
# ** Interpreter
#==============================================================================
class Interpreter
  #--------------------------------------------------------------------------
  # * Ändere den Kaufpreis
  #   Beispiel:
  #   aender_kaufpreis( 50 ) #=> Wahre kostet nurnoch halb so viel
  #--------------------------------------------------------------------------
  def aender_kaufpreis( prozent )
    $game_temp.rpv_buy  = prozent / 100.0
  end
  #--------------------------------------------------------------------------
  # * Ändere den Verkaufpreis
  #   Beispiel:
  #   aender_verkaufspreis( 200 ) #=> Man bekommt den doppelten Preis
  #--------------------------------------------------------------------------
  def aender_verkaufspreis( prozent )
    $game_temp.rpv_sell = prozent / 100.0
  end
end
#==============================================================================
# ** Game_Temp
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :rpv_buy                  # map music (for battle memory)
  attr_accessor :rpv_sell                 # message text
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias_method(:org_ini_wo_rpve,:initialize) if !method_defined?(:org_ini_wo_rpve)
  def initialize(*a)
    @rpv_buy  = 1.0
    @rpv_sell = 0.5
    org_ini_wo_rpve(*a)
  end
end
#==============================================================================
# ** Game_Party
#==============================================================================
class Game_Party
  #--------------------------------------------------------------------------
  # * Get Number of Items Possessed
  #     item : an item
  #--------------------------------------------------------------------------
  def item_number_from_typ( item )
    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
    return number
  end
end
zum Lesen den Text mit der Maus markieren

Spoiler: Teil 2
Als neues Script über Main einfügen

Ruby Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#==============================================================================
#    *** Shop Erweiterung (Teil 2)
#
#        Die Preise im Shop können im Vorfeld manipuliert werden
#        von Playm
#
#==============================================================================
# ** Window_ShopBuy
#==============================================================================
class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #--------------------------------------------------------------------------
  alias_method(:org_di_wo_rpve, :draw_item) if !method_defined?(:org_di_wo_rpve)
  def draw_item(index)
    org_di_wo_rpve(index)
    item      = @data[index]
    item_price= $scene.make_item_buyprice( item )
    amount_ok = $game_party.item_number_from_typ( item ) < 99
    price_ok  = item_price <= $game_party.gold
    rect      = Rect.new(244, index * 32, 88, 32)
    self.contents.font.color= (amount_ok and price_ok) ? normal_color : disabled_color
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, item_price.to_s, 2)
  end
end
#==============================================================================
# ** Scene_Shop
#------------------------------------------------------------------------------
#  This class performs shop screen processing.
#==============================================================================
class Scene_Shop
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  alias_method(:org_main_wo_rpve,:main) if !method_defined?(:org_main_wo_rpve)
  def main(*a)
    org_main_wo_rpve(*a)
    $game_temp.rpv_buy  = 1.0
    $game_temp.rpv_sell = 0.5
  end
  #--------------------------------------------------------------------------
  # * make item price for buy
  #--------------------------------------------------------------------------
  def make_item_buyprice( item )
    (item.price * $game_temp.rpv_buy).ceil
  end
  #--------------------------------------------------------------------------
  # * make item price for sale
  #--------------------------------------------------------------------------
  def make_item_sellprice( item )
    (item.price * $game_temp.rpv_sell).ceil
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when buy window is active)
  #--------------------------------------------------------------------------
  def update_buy
    # Set status window item
    @status_window.item = @buy_window.item
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Change windows to initial mode
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      # Erase help text
      @help_window.set_text("")
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Get item
      @item = @buy_window.item
      # If item is invalid, or price is higher than money possessed
      if @item == nil or make_item_buyprice( @item ) > $game_party.gold
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Get items in possession count
      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 99 items are already in possession
      if number == 99
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # Calculate maximum amount possible to buy
      max = @item.price == 0 ? 99 : $game_party.gold / make_item_buyprice(@item)
      max = [max, 99 - number].min
      # Change windows to quantity input mode
      @buy_window.active = false
      @buy_window.visible = false
      @number_window.set(@item, max, make_item_buyprice(@item))
      @number_window.active = true
      @number_window.visible = true
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when sell window is active)
  #--------------------------------------------------------------------------
  alias_method(:org_up_sell_wo_rpve, :update_sell) if !method_defined?(:org_up_sell_wo_rpve)
  def update_sell(*a)
    org_up_sell_wo_rpve(*a)
    if Input.trigger?(Input::C)
      max = $game_party.item_number_from_typ( @item )
      @number_window.set(@item, max, make_item_sellprice(@item))
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when quantity input window is active)
  #--------------------------------------------------------------------------
  alias_method(:org_up_num_wo_rpve, :update_number) if !method_defined?(:org_up_num_wo_rpve)
  def update_number(*a)
    org_up_num_wo_rpve(*a)
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0  # Kaufpreis korrigieren
        $game_party.gain_gold(@number_window.number * @item.price)
        $game_party.lose_gold(@number_window.number * make_item_buyprice(@item))
      when 1  # Verkaufspreis korrigieren
        $game_party.lose_gold(@number_window.number * (@item.price / 2))
        $game_party.gain_gold(@number_window.number * make_item_sellprice(@item))
      end
      @gold_window.refresh
    end
  end
end
zum Lesen den Text mit der Maus markieren
Es kommt deinen Vorstellungen recht nahe. Ich habe eben nochmal versucht den Quelltext etwas aufzuräumen, weniger zu überschreiben und mehr alias zu verwenden, aber wirklich hübsch ist er nicht geworden ._.
Vielleicht schreib ich das Script mal neu, ich wollte ja eh mal alle alten Scripte in Ordnung bringen und freigeben.

Ruby Quellcode

1
aender_kaufpreis( 25 ) # Und schon kosten alle Gegenstände nurnoch 25% ihres normalen Preises

Ruby Quellcode

1
aender_verkaufspreis( 200 ) # Und schon bekommst du für alle Gegenstände das doppelte ihres normalen Preises

Die Änderung hält aber nur bis zum aufruf des Shops - das bedeutet, sobald der Shop verlassen wird, sind wieder die standard Werte (100%|50%) drin. Das liegt an dem Verwendungszweck für den das Script damals geschrieben wurde, kann aber geändert werden, indem du in Teil 2, Zeile 40 und 41 auskommentierst.

Rash

Knappe

  • »Rash« ist der Autor dieses Themas

Motto: Gute Spiele hat man im Herzen nicht in der Konsole.

  • Nachricht senden

7

Sonntag, 20. März 2011, 22:26

Das ist genau richtig. Es reicht vollkommen. DANKE^^
RR