PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Item Limit (Ace)



Ken der Kot
09.07.2019, 17:53
Sers Maker und Makerinnen,

Sprecht, gibt es ein Script, das die Gesamtanzahl an Items bestimmter IDs im Inventar einem Limit unterwirft? Sagen wir, wir haben zwei Items mit den IDs 1 und 2. Vom ersten Item möchte ich maximal 10 im Inventar haben. Danach kann kein weiteres dieser Items aufgenommen werden. Für das zweite Item beträgt das Maximum 20 und für alle weiteren die üblichen 99. Ist dieses Unterfangen im Rahmen des Möglichen, oh Lordschaft?

Ich fand jüngst auf meiner Suche diverse Scripte, die auch Gewicht (Respektive "Weight") der Items berücksichtigen. Sowas such ich aber tatsächlicherweise nicht. Mich düngt es lediglich nach einem Script, welches Items bestimmter IDs einem Limit unterwirft. Vielleicht existiert etwas in dieser Einfachheit?

Es grüßt,

Sire Ken von Kotelot

Linkey
09.07.2019, 18:53
Sehr einfach - in der Hoffnung, dass VX Ace bei allen Klassen/Abfragen die Game_Party item_max verwendet :D
Script:

class Game_Party < Game_Unit
alias ldt_max_item_number max_item_number
def max_item_number(item)
(item.note =~ /<ldt_imax>(\d+)/i) ? $1.to_i : ldt_max_item_number(item)
end
end

Damit kannst du auf der Item Seite in der Datenbank einfach folgendes Eintragen, um das Maximum festzulegen (x = eine Zahl):

<ldt_imax>X

Ken der Kot
12.07.2019, 14:50
Danke für deine Hilfe nochmal, Linkey. :)

Generelle Frage: Wie kann ich bewirken, dass bestimmte Items im Shop gar nicht erst auftauchen können?

Linkey
12.07.2019, 16:04
Das stellst du doch im Shop selbst ein. Wenn du das Shop Event erstellst, wählst du dort aus, welche Items im Shop angeboten werden.
Oder meinst du für's Verkaufen?

Ken der Kot
12.07.2019, 16:41
Ja, genau für's Verkaufen. :) Ich bin so weit, dass ich weiß, dass wenn ich einen Betrag von 0 Gold in der Database festlege, das Item zumindest nicht verkauft werden kann und ausgegraut dargestellt wird. Die nächste Stufe wäre dann, dass es als Folge auch gar nicht in der Auswahl angezeigt wird, da es ohnehin nicht "verkaufbar" ist.^^

Linkey
12.07.2019, 16:59
class Window_ShopSell < Window_ItemList
alias ldt_include? include?
def include?(item)
return false unless(enable?(item))
return ldt_include?(item)
end
end

Ken der Kot
12.07.2019, 17:46
class Window_ShopSell < Window_ItemList
alias ldt_include? include?
def include?(item)
return false unless(enable?(item))
return ldt_include?(item)
end
end


Hmm, leider funktioniert das nicht bei mir. Die entsprechenden Items sind immer noch ausgegraut, anstatt weg.

Linkey
12.07.2019, 17:53
Wenn du das original Shopsystem verwendest, sollte es damit funktionieren. Im frischen Projekt funktioniert das zumindest :D

Ken der Kot
12.07.2019, 18:57
Wenn du das original Shopsystem verwendest, sollte es damit funktionieren. Im frischen Projekt funktioniert das zumindest :D

Ach, Mist. Ich hab noch das Sell-Only-Shop-Script v1.0 von Enelvon (http://rmrk.net/index.php?topic=44718.0). Dachte aber eigentlich nicht, dass das so viel am Default verändert. Abgesehen davon, dass es den "Kaufen"-Button deaktiviert.

Linkey
12.07.2019, 21:02
Denke nicht, dass es an diesem Script liegt. Hast du es mal in einem neuen Projekt probiert?

Ken der Kot
12.07.2019, 22:49
Denke nicht, dass es an diesem Script liegt. Hast du es mal in einem neuen Projekt probiert?

Ja, es funktioniert in einem neuen Projekt. Es funktioniert auch, wenn ich dieses Script hier rausnehme.


#===============================================================================
# All Category Sell Window
#-------------------------------------------------------------------------------
# > Remove the category window from scene shop
#
# Terms of Service:
# > Free for commercial
# > Credit isn't necessary (if you totally want to, put TheoAllen anywhere on
# your credit list)
#===============================================================================

class Scene_Shop

# Overwrite
def command_sell
@dummy_window.hide
activate_sell_window
@sell_window.select(0)
end

# Overwrite
def activate_sell_window
@sell_window.refresh
@sell_window.show.activate
@status_window.hide
end

# Overwrite
def on_sell_cancel
@sell_window.unselect
@status_window.item = nil
@help_window.clear
on_category_cancel
end

# Overwrite
def create_sell_window
wy = @category_window.y
wh = Graphics.height - wy
@sell_window = Window_ShopSell.new(0, wy, Graphics.width, wh)
@sell_window.viewport = @viewport
@sell_window.help_window = @help_window
@sell_window.hide
@sell_window.set_handler(:ok, method(:on_sell_ok))
@sell_window.set_handler(:cancel, method(:on_sell_cancel))
end

end

class Window_ShopSell
# Overwrite
def make_item_list
@data = $game_party.all_items
@data.push(nil) if include?(nil)
end
end

(Das entfernt das Kategorienfenster. Find ich gut.)

Jedenfalls ist dieses Script der "Übeltäter", aber wenn ich deinen Scriptschnipsel da reinkopiere, ändert das leider nichts. :(

Linkey
12.07.2019, 23:08
Solche Infos wären natürlich vorab schon ganz gut zu wissen :D

Dein Script schreibt alles in die Item List rein (weil du die Kategorien ja entfernt hast).

Ändere die Zeile mal in folgendes um (die andere Methode, die ich dir vorher genannt habe, brauchst du nicht mehr):


def make_item_list
@data = $game_party.all_items.select {|item| enable?(item) }
@data.push(nil) if include?(nil)
end

Ken der Kot
12.07.2019, 23:16
Solche Infos wären natürlich vorab schon ganz gut zu wissen :D

Sorry. :D

Funktioniert jetzt astrein. Vielen Dank für deine Hilfe, Sir. :)