PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fenster, das Variablen mit Werten und Beschreibung anzeigt



Ken der Kot
30.03.2019, 09:17
Hello,

In Strategiespielen gibt es doch meistens solche "Menüs". Man hat bestimmte Parameter wie Truppenstärke, Vorratskeller, Whatever, etc., die tabellarisch untereinander gelistet sind und daneben stehen jeweils zugeordnete Werte wie 20, 11, 55 (je nachdem, wie viel man jeweils davon hat). Links und rechts neben diesen Werten sind Pfeile mit Plus und Minus, sodass man upgraden und downgraden kann. Nach so einem Script suche ich für den Vx Ace.

Ich möchte viele verschiedene Upgrade-Menüs erstellen, die ich sowohl für Fähigkeiten, Gebäude, Talente, Dorfstatistiken etc. verwenden kann. Es sollte über Scriptcall aufrufbar sein und die Kosten für Upgrades möchte ich über Variablen einstellen und anzeigen lassen können. Fallbeispiel: Wenn meine Gold- und Holzvariable (zb V001 und V002) einen bestimmten Wert hat, soll es möglich sein, über dieses Menü mein Vorratskeller auf Stufe 2 (festgelegt durch V003) upzugraden. Arrays wären hier wohl ganz sinnvoll, sodass ich meine Variablen und deren Anzahl selbst festschreiben kann.

Kann mir jemand mit einem solchen Upgrade-Menü im Stile bekannter Strategie-Klassiker unter die kotigen Arme greifen? Ich glaube, für so was sind mal wieder High-End-Scripterfähigkeiten erforderlich, aber lasst uns doch einfach versuchen, das Maximum aus dem Ace rauszukitzeln. :)

Euer Ken der upgradewillige Parameteranzeigekot

Ken der Kot
31.03.2019, 13:43
Damit etwas klarer wird, was ich meine. So ein Menü wie das hier, in dem man innerhalb einer Auswahl zwischen Plus und Minus hin- und herschalten kann, um die Werte einzelner Variablen zu erhöhen, die an bestimmte Kosten (zb Gold, andere Variablen) geknüpft sind.

Ken der Kot
06.04.2019, 09:23
^PUSH

Ken der Kot
10.04.2019, 17:49
^PUSH

Ken der Kot
13.04.2019, 01:58
^PUSH

Liferipper
13.04.2019, 08:45
Auch wenn es sicher frustrierend ist, dass dieser Thread aufgrund der vielen neuen Threads, die in diesem Unterforum jeden Tag auf's Neue erstellt werden, ständig auf Seite 2 der Forenübersicht rutscht, glaubst du wirklich, dass dir irgendwann irgendjemand helfen wird, wenn du nur oft genug das Wort Push schreibst, statt selbst nach einer Lösung zu suchen? :rolleyes:

Ken der Kot
13.04.2019, 11:42
Auch wenn es sicher frustrierend ist, dass dieser Thread aufgrund der vielen neuen Threads, die in diesem Unterforum jeden Tag auf's Neue erstellt werden, ständig auf Seite 2 der Forenübersicht rutscht, glaubst du wirklich, dass dir irgendwann irgendjemand helfen wird, wenn du nur oft genug das Wort Push schreibst, statt selbst nach einer Lösung zu suchen? :rolleyes:

Wenn ich deiner Argumentation folge, müsstest du theoretisch jedem, der in diesem Unterforum ein Topic erstellt, ebenfalls sagen "such selbst nach einer Lösung". Damit wäre dieses Unterforum allerdings obsolet.

Ja, ich denke, dass irgendwann ein motivierter Scripter dieses Topic sehen wird und sich denken wird "Ja, das könnte vielen etwas nützen. Wieso eigentlich nicht?". :)

Ken der Kot
17.04.2019, 12:36
^PUSH

Ken der Kot
27.04.2019, 10:19
Okay, ich glaub hier passiert nichts mehr. Thread kann geschlossen werden. :( Dennoch hätte ich mich über ein Script sehr gefreut.

maniglo93
27.04.2019, 17:10
Habe es jetzt erst gelesen. Ist VX ace Ruby wie XP?
Edit: Denke das ist schnell gemacht. Graphisch müsstest du es aber selbst anpassen und "organisieren".

Ken der Kot
27.04.2019, 17:24
Habe es jetzt erst gelesen. Ist VX ace Ruby wie XP?
Edit: Denke das ist schnell gemacht. Graphisch müsstest du es aber selbst anpassen und "organisieren".

Hey, danke. Ich hatte den Thread schon aufgegeben. :D

Vx Ace ist RGSS3. Aber das ist wohl eine andere Ruby-Variante, als die, die beim XP angewandt wird (RGSS2, soweit ich weiß. kA worin der Unterschied genau besteht)

@Grafiken: Es reichen auch irgendwelche roten Vierecke als Pfeile. Platzhalter eben. Aber so seh ich, dass es funktioniert. Pfeile mach ich später, Gesamtergebnis landet dann höchstwahrscheinlich im Forum für diejenigen, die das System auch wollen. Gern dann auch mit den Grafiken, die ich dann später zusammen template xD

maniglo93
27.04.2019, 19:40
Ok, der Unterschied ist nicht wirklich für dein Problem relevant. Ich werde dir ein simples Script schreiben und paar Kommentare für deine Graphiken. Letztendlich ist es nur ein umschreiben der Window_Command Klasse und erstellen einer globalen Hash-Datenbang. Das ist die simpelste Lösung und mehr Zeit kann ich aktuell nicht aufbringen.

Deine Aufgabe wird es dann sein, die unterschiedlichen Begrifflichkeiten für den VX Ace umzubenennen und dementsprechend mit den Graphisch-Relevanten Variablen zu hantieren. Part 1 wird evtl. als Script-Leie etwas knifflig für dich, aber da sind mir die Hände gebunden, da ich das Skript nicht testen kann. Aber gerne helfe ich dir dann dabei weiter :)
_________________________________________

Damit ich dich richtig verstehe:

Du willst ein Fenster haben, welche eine Liste enthält. Die Items der Liste sollen individuell gestaltet werden können. Die Werte der Items sollen an Game_Variablen geknüpft sein. Mit der Pfeiltaste (hoch und runter) kann der Spieler ein Item aus der Liste auswählen und (links und rechts) dessen verknüpften Wert erhöhen und Erniedrigen. Dabei soll es Grenzen geben, so dass eine Erhöhung auf bzw über einen gewählten oder mehreren gewählten Werten nur unter bestimmten Konditionen möglich ist. Die Konditionen sind wieder an Game_Variablen geknüpft. (Item =/= RPG-Items, wie Trank usw.).

Ist das soweit korrekt? Leider kann ich dein Bildanhang aus deinem zweiten Betrag nicht anschauen.

Cheers Maniglo

Ken der Kot
27.04.2019, 23:56
Damit ich dich richtig verstehe:

Du willst ein Fenster haben, welche eine Liste enthält. Die Items der Liste sollen individuell gestaltet werden können. Die Werte der Items sollen an Game_Variablen geknüpft sein. Mit der Pfeiltaste (hoch und runter) kann der Spieler ein Item aus der Liste auswählen und (links und rechts) dessen verknüpften Wert erhöhen und Erniedrigen. Dabei soll es Grenzen geben, so dass eine Erhöhung auf bzw über einen gewählten oder mehreren gewählten Werten nur unter bestimmten Konditionen möglich ist. Die Konditionen sind wieder an Game_Variablen geknüpft. (Item =/= RPG-Items, wie Trank usw.).

Ist das soweit korrekt? Leider kann ich dein Bildanhang aus deinem zweiten Betrag nicht anschauen.

Cheers Maniglo

Genau. Und ich möchte das Fenster gerne über einen Scriptcall aufrufen und dann individuell entscheiden, welches Item in dem Fenster vorkommt. Sodass ich praktisch in einem Fenster die Items1 und 2 stehen haben kann und in einem anderen Event kann ich zB die Items3, 4 und 5 anzeigen. Praktisch wie in einem Shop-Event, bei dem ich ja auch im Event entscheiden kann, welche Items ich dem Shop hinzufüge. Hoffe, es wird klar, was gemeint ist. Ich hab das Bild erneut hochgeladen. Hoffe, dass es dir nun korrekt angezeigt wird.

https://abload.de/img/unbenanntf8jmu.png

maniglo93
28.04.2019, 12:44
Bild wird angezeigt und ist mir klar :) willst du ebenfalls eine genauere Beschreibung haben, wie im Bild?

Folglich würde es dann so aussehen

______________________________________
Einwohner - 2 + |
Erhöht die Anzahl an Bewohner |
Fischer - 6 + |
Mehr Fische am Ende des Monats |
. |
_______________________________________

Denke ich mache das entweder heute oder morgen.

Edit: leider kann ich es nicht richtig über den text darstellen..

Ken der Kot
28.04.2019, 12:53
willst du ebenfalls eine genauere Beschreibung haben, wie im Bild?

Genau, das wäre klasse!

maniglo93
29.04.2019, 12:29
Ist das so vom Grunde her deiner Idee entsprechend? Dann würde ich die Graphischen Platzhalter einbauen und das Script reinstellen.

https://i.imgur.com/2d41VDT.gif

Cheers Maniglo

Ken der Kot
29.04.2019, 13:41
Ja, das ist top so!!! Nur, dass das Erhöhen von Variablen entsprechend Ressourcen (zB Gold, Kupfer) kostet, was wiederum ebenfalls an Variablen geknüpft ist.

Puh, hoffe ich krieg das dann auch hin, das Script für den Ace zu konvertieren. Nicht, dass die Arbeit am Ende umsonst war.

Linkey
29.04.2019, 14:34
@Maniglo
Auf dem Bild sieht es so aus, als würdest die Texte immer neu zeichnen, ohne den Text vorher zu löschen.
Falls du da ständig einen Refresh ausführst (der eig. nur nötig ist, wenn sich der Text ändert - in diesem Beispiel wäre das nur für die 3 auswählbaren Zeilen notwendig, weil sich dort die Anzahl ändert), sollte vorher der Content gelöscht werden.

@Ken
Wenn du beim "Übersetzen" Probleme hast, poste es einfach hier rein, wo es hängt (sollte es überhaupt Probleme geben).
Das ist eine gute Übung, um in die Basics des Scene_Managers & der Window-Klassen zu kommen - die man immer mal wieder leicht anpassen muss.

maniglo93
29.04.2019, 18:15
@Linkey
Ja und nein. Nur der untere (kleine Text) wird nicht gelöscht und überschrieben. Habe dies noch nicht von der Ausführung abgekoppelt, deswegen auch kein Löschen, da es nicht notwendig ist ;) Aber danke für den Hinweis :)

@ken
Da brauche ich die Verknüpfung genauer:
Sollen die Kosten verknüpft sein (also Variable 3 sagt die Kosten für Variable 5 um 1 an). Oder nur die Ressourcen, also variable 3 ist Gold und davon wird immer X abgezogen, wenn Variable 5 erhöht wird). Oder beides (also drei Variablen mit einander). Was soll bei Verringerung des Wertes passieren?

Ken der Kot
29.04.2019, 20:49
]@ken
Da brauche ich die Verknüpfung genauer:
Sollen die Kosten verknüpft sein (also Variable 3 sagt die Kosten für Variable 5 um 1 an). Oder nur die Ressourcen, also variable 3 ist Gold und davon wird immer X abgezogen, wenn Variable 5 erhöht wird). Oder beides (also drei Variablen mit einander). Was soll bei Verringerung des Wertes passieren?

Also ich brauche Kosten- und Nutzenvariablen. Nehmen wir als Beispiel Bewohner. Bewohner werden von Stufe 1 auf Stufe 2 erhöht (Nutzen). Variable 1 erhöht sich also von 1 auf 2. Das kostet zB 50 Gold, was in Variable 2 gespeichert ist (Kosten), und davon abgezogen wird, wenn Variable 2 größer/gleich 50 ist. Wenn ich Bewohner von Stufe 2 auf 3 erhöhe (Variable 1 erhöht sich von 2 auf 3) kostet das aber mehr Gold, zB 150 und zusätzlich 20 Wohnraum. Gold ist in Variable 2 gespeichert, Wohnraum in Variable 3. Ich kann Variable 1 von Wert 2 auf 3 erhöhen, wenn Gold größer/gleich 150 und Wohnraum größer/gleich 20 ist. Die entsprechenden Zahlenwerte werden dann von den jeweiligen Variablen abgezogen, also V2 - 150 und V3 - 20 und die Bewohnerstufe aufaddiert, also V1 + 1.

So nach dem Prinzip soll das laufen. Also ich werte was auf und das kostet eben. ^^

maniglo93
29.04.2019, 22:23
Soll das Fenster für das Aufwerten sein? Also kein Abwerten? Dann vermute ich brauchst du noch eine Anzeige, die zeigt, wie viel die nächste Stufe Kostet und wie viel an Ressourcen zur Verfügung ist.

Zur Verständigung: Die Kosten direkt sind nicht in der Variable 2 gespeichert, sondern wie viel Gold der Spieler hat, richtig? Die Kosten sind also fix (es wird immer 50 Gold kosten von Stufe 1 auf Stufe 2 zu upgraden?).

Ken der Kot
29.04.2019, 22:46
Soll das Fenster für das Aufwerten sein? Also kein Abwerten? Dann vermute ich brauchst du noch eine Anzeige, die zeigt, wie viel die nächste Stufe Kostet und wie viel an Ressourcen zur Verfügung ist.

Genau. Ja, abwerten braucht's dann eigentlich nicht. Die Anzeige wäre nicht schlecht. Die muss auf jeden Fall mit rein. :)


Zur Verständigung: Die Kosten direkt sind nicht in der Variable 2 gespeichert, sondern wie viel Gold der Spieler hat, richtig? Die Kosten sind also fix (es wird immer 50 Gold kosten von Stufe 1 auf Stufe 2 zu upgraden?).

Ja, Stufe 1 wird immer 50 Gold kosten in dem Fall. Aber wenn ich zB ein Haus von Stufe 1 auf Stufe 2 upgraden will, brauche ich hier kein Gold, sondern Holz. Da es hier viele Optionen gibt, brauche ich hier eine Möglichkeit, die einzelnen Kostenvariablen pro Aufwerteoption individuell zuzuweisen.

maniglo93
30.04.2019, 00:25
Dann baue ich eine Datenbank ein, welche dir erlaubt jede Stufe individuell festzulegen. Das Ganze wird dann mit soviele Variablen möglich sein, wie du möchtest. Das wirst du im Script festlegen müssen, ist jedoch keine große Schwierigkeit. Dazu kommt dann noch ein weiteres Fenster, welche die Kosten der nächsten Stufe und die aktuellen Ressourcen anzeigt.

Bsp:
Variable_1 (Zb. Bewohner) => [ Stufe 1, Stufe 2, Stufe 3,...]

Wobei Stufe 1 = {Variable_2 (Zb. Gold) => 50 (Kosten), Variable_3(zb. Holz) => 60,...}

Usw. Mit Stufe 2 und 3 und....

Hoffe dieses Beispiel einer Datenbank ist für dich verständlich :)

____________________________
Wird es so sein, dass man mehrere Upgrade Stufen auf einmal macht, also von Bewohner 1 auf Bewohner 15? Oder wird es eher so laufen, dass der Spieler das Menü für nur ein Level öfters aufruft? So werde ich die Tastenbelegung etwas ändern, sowie das Design. Dass es dem kurzen Upgrade besser passt.

Willst du, dass als Hintergrund die Map sichtbar ist? Soll diese Ausgegraut werden?

Werde mich wohl Mittwoch daran setzten, bis dahin habe ich leider viel zu tun. Denke das ganze wird kein Problem sein ;)

Ken der Kot
30.04.2019, 09:16
Hi, maniglo93.

Ja, ich verstehe dein Datenbank-Beispiel.

Wie ist denn die Tastenbelegung gerade?

Map soll im Hintergrund nicht sichtbar sein. Das Fenster kann gerne die ganze Bildschirmgröße einnehmen.

Ok, Danke.

maniglo93
30.04.2019, 10:23
Nur die Pfeiltasten.
Würde dann links und rechts zur Erhöhung / Verringerung entfernen und Enter zum Upgrade festlegen.

Ken der Kot
30.04.2019, 10:27
Nur die Pfeiltasten.
Würde dann links und rechts zur Erhöhung / Verringerung entfernen und Enter zum Upgrade festlegen.

Oki.

maniglo93
01.05.2019, 13:24
Schönen 1ten Mai :)

Ich habe es mir erlaubt, es etwas zu animieren. Schaue einmal rüber. Es ist noch keine Abfrage, ob überhaupt genügend Ressourcen vorhanden sind im Script, ist aber eine Sache von 1-2 Minuten (höchstens) dies einzubauen, kommt dann wenn ich das ganze vollständig mache. Falls du das Fenster bzw. deren Inhalt anderes anordnen möchtest, male mir eine Paint-Skizze.

https://i.imgur.com/7bwt6Jo.gif

Cheers Maniglo

Ken der Kot
02.05.2019, 10:24
Sieht gut aus :)

maniglo93
02.05.2019, 13:02
Dann stelle ich dir das Skript mit genügend Kommentaren fertig ;)

Beim implementieren helfe ich dir so gut wie ich kann, Linkey hat ja auch Hilfe angeboten.

Denke damit werde ich morgen fertig sein.

PS: Ich kann dir nur empfehlen etwas Programmier-Sprache zu beherrschen :) es ist wirklich sehr nützlich und Ruby ist nicht allzu schwer (finde ich aufjedenfall). Das aktuelle Skript hat mich 1 1/2h Zeit gekostet, also sind solche Kleinigkeiten schnell erledigt ;)

Ken der Kot
02.05.2019, 14:45
OKi :)

Ken der Kot
15.06.2019, 16:10
Hmm, hat hier noch jemand Bock drauf? :confused:

Linkey
15.06.2019, 19:56
Woran scheitert es denn? Das Script von Maniglo zu übersetzen oder hast du es erst gar nicht von ihm bekommen?

Ken der Kot
16.06.2019, 00:40
Ich hab kein Script von ihm bekommen. Er scheint aber auch gar nicht mehr hier aktiv zu sein, denn der letzte Login ist über einen Monat her. Aber selbst wenn, würde ich ihn auch nicht mit PMs nerven wollen, wenn er gerade wichtigeres zu tun hat.

Linkey
16.06.2019, 13:28
Leider habe ich für so etwas momentan eigentlich überhaupt keine Zeit. Ich hab sie mir gerade trotzdem genommen um auf die schnelle etwas für dich bereitzustellen.
In den ersten gut 50 Zeilen kannst du diverse Einstellungen vornehmen. Ich habe diese einmal beispielhaft ausgefüllt, damit du eine Idee davon bekommst, wie du es eintragen musst.

Das Upgrade-Menü rufst du über folgenden Scriptcall im Event auf:

call_upgrade_menu([Upgrade1,Upgrade2,...])



module LDT_UPGRADE_MENU
#Confirmation texts
CONFIRM_TITLE = " upgrade?"
CONFIRM_TRUE = "Yes"
CONFIRM_FALSE = "No"

#icon ids
#upgrade icons (villager, house,...)
ICON_IDS = [121,232,292,281]
#cost icons (wood, gold, ...)
ICON_COST_IDS = [331,262,350,147]
#resource names
UPGRADE_NAMES = ["Villagers","House","Fisherman","Church"]

#cost names
COST_NAMES = ["Wood","Gold","Stone","Sword"]

#upgrade costs
UPGRADE_COSTS = [[{0=>5,1=>10},{0=>10,1=>25},{0=>20,1=>50},{0=>50,1=>200}],#villager
[{0=>5,1=>10,2=>5},{0=>10,1=>25,2=>15},{0=>20,1=>50,2=>50}],#house
[{0=>10,1=>5}],#fisherman
[{0=>50,1=>500,2=>50}],#church
]

#variable for each upgrade (e.g. 1 = $game_variables[1])
UPGRADE_VARS = [101,102,103,104]

#variable for each cost (e.g. 1 = $game_variables[1])
COST_VARS = [105,106,107,108]

#Symbol displayed if max Level is reached
MAX_LEVEL_TEXT = "MAX"
#Graphics
#Start position vertical (0 = top, 480 = botton)
G_START_Y = 0
#start position horizontal (0 = left, 640 = right)
G_START_X = 0
#Width of the first Window
G_WIDTH_1 = 280
#Width of the second Window
G_WIDTH_2 = 240
#Confirmation window alignment (1 = horiz., 2= vert.)
G_CONFIRM_ALIGN = 2
#color if condition is not met
BAD_COLOR = 2
end

# call the upgrade menu
# items needs to be an array
# e.g. call_upgrade_menu([0]) will call the menu for villager upgrades
# e.g. call_upgrade_menu([0,3]) will call the menu for villager & church upgr.
def call_upgrade_menu(items)
return false unless(items.is_a?(Array))
$upgrade_items = items
SceneManager.call(LDT_Upgrade_Scene)
end

class LDT_Upgrade_Scene < Scene_Base
def start
super
@ui = 0
create_selection_window
create_cost_window
create_confirmation_windows
create_background
end


def create_selection_window()
ty = LDT_UPGRADE_MENU::G_START_Y
th = $upgrade_items.size * 24 + 32
@upgrade_window = LDT_Upgrade_Window.new(LDT_UPGRADE_MENU::G_START_X,ty,LDT_UPGRADE_MENU::G_WIDTH_1,th)
@upgrade_window.viewport = @viewport

@upgrade_window.set_handler(:ok, method(:on_menu_ok))
@upgrade_window.set_handler(:cancel, method(:return_scene))
@upgrade_window.activate
@upgrade_window.select(0)
@upgrade_window.show
end

def create_cost_window()
ty = LDT_UPGRADE_MENU::G_START_Y
tx = LDT_UPGRADE_MENU::G_START_X + LDT_UPGRADE_MENU::G_WIDTH_1
tw = Graphics.width - tx
@cost_window = LDT_Upgrade_Cost_Window.new(tx,ty,tw)
@cost_window.viewport = @viewport

@cost_window.show
end

def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
end

def create_confirmation_windows()
if(LDT_UPGRADE_MENU::G_CONFIRM_ALIGN == 1)
tx = LDT_UPGRADE_MENU::G_START_X + LDT_UPGRADE_MENU::G_WIDTH_1
ty = LDT_UPGRADE_MENU::G_START_Y
else
tx = LDT_UPGRADE_MENU::G_START_X
ty = LDT_UPGRADE_MENU::G_START_Y + @upgrade_window.height
end
@confirm_title_window = LDT_Confirm_Window_Title.new(tx,ty,1,LDT_UPGRADE_MENU::G_WIDTH_2)
@confirm_title_window.set_text("")
@confirm_title_window.hide

th = 2 * 24 + 32
ty = ty + @confirm_title_window.height
@confirm_window = LDT_Upgrade_Window_Confirmation.new(tx,ty,LDT_UPGRADE_MENU::G_WIDTH_2,th)
@confirm_window.viewport = @viewport
@confirm_window.set_handler(:ok, method(:on_conf_ok))
@confirm_window.set_handler(:cancel, method(:on_conf_cancel))
@confirm_window.hide
end

def on_menu_ok
ti = @upgrade_window.index
if(@upgrade_window.current_item_enabled?)
ttext = get_upgrade_name(ti) + LDT_UPGRADE_MENU::CONFIRM_TITLE
@confirm_title_window.set_text(ttext)
@confirm_title_window.show

@confirm_window.activate
@confirm_window.select(0)
@confirm_window.show
else
@upgrade_window.activate
end
end

def on_conf_ok
if(@confirm_window.index >= 1)
on_conf_cancel
else
ti = $upgrade_items[@upgrade_window.index]
#loop on all costs of current upgrade level and reduce cor. variable
LDT_UPGRADE_MENU::UPGRADE_COSTS[ti][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]]].each do |tk,tv|
$game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]]-= tv
end
#increase upgrade variable by 1
$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]] += 1
refresh_windows
on_conf_cancel
end
end

def refresh_windows
@upgrade_window.refresh
@cost_window.refresh
end

def update()
super()
if(@upgrade_window.index != @ui)
@ui = @upgrade_window.index
@cost_window.set_upgrade_index($upgrade_items[@ui])
@cost_window.refresh
end
end
def on_conf_cancel
@confirm_window.deactivate
@confirm_window.hide
@confirm_title_window.hide
@upgrade_window.activate
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]]
end
end

class LDT_Upgrade_Cost_Window < Window_Base
def initialize(x, y, width)
super(x,y,width,get_uc_height)
@iu = 0
refresh
end

def set_upgrade_index(index)
@iu = index
end

def refresh
contents.clear
LDT_UPGRADE_MENU::COST_NAMES.each_with_index do |tn,ti|
draw_costs(ti)
end
end

def draw_costs(index)
tx = 0
ty = 0 + index * 24
tw = self.width - 24
if(cost_relevant?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), tx, ty, cost_relevant?(index))
draw_text(tx + 26, ty, tw - 26, 24, get_cost_name(index))
if(cost_relevant?(index))
if(get_resource(index) < get_upgrade_cost(index))
change_color(text_color(LDT_UPGRADE_MENU::BAD_COLOR))
end
draw_text(tx,ty,tw,24,get_upgrade_cost_text(index),2)
change_color(normal_color())
end
end

def get_uc_height()
return LDT_UPGRADE_MENU::COST_NAMES.size * 24 + 32
end

def cost_relevant?(index)
return false unless(LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]])
return LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]].has_key?(index)
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_COST_IDS[index]
end

def get_cost_name(index)
text = LDT_UPGRADE_MENU::COST_NAMES[index] + "("
text = text + get_resource(index).to_s + ")"
return text
end

def get_resource(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end

def get_upgrade_cost_text(index)
return get_upgrade_cost(index).to_s
end

def get_upgrade_cost(index)
LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]][index]
end
end

class LDT_Upgrade_Window < Window_Selectable

def initialize(x, y, width, height)
super(x,y,width,height)
refresh
end

def item_max
$upgrade_items ? $upgrade_items.size : 1
end

def item
$upgrade_items && index >= 0 ? LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
if(current_item_enabled?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), rect.x, rect.y, current_item_enabled?(index))
draw_text(rect.x + 26, rect.y, rect.width - 26, rect.height, get_upgrade_name(index))#, rect.x, rect.y)
draw_text(rect,get_upgrade_lvl(index),2)
end

def get_upgrade_lvl(index)
return $game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]
end

def up_index(index)
return $upgrade_items[index]
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_IDS[up_index(index)]
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[up_index(index)]
end

def current_item_enabled?(tindex = index)
return false if(tindex < 0)
tc = get_costs(tindex)
return false if(tc == LDT_UPGRADE_MENU::MAX_LEVEL_TEXT)
tc.each do |tk,tv|
return false if($game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]] < tv)
end
return true
end

def get_costs(index)
tcosts = LDT_UPGRADE_MENU::UPGRADE_COSTS[up_index(index)][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]]
return tcosts ? tcosts : LDT_UPGRADE_MENU::MAX_LEVEL_TEXT
end
end

class LDT_Upgrade_Window_Confirmation < Window_Selectable
def initialize(x, y, width, height)
super(x,y,width,height)
@items = [LDT_UPGRADE_MENU::CONFIRM_TRUE,LDT_UPGRADE_MENU::CONFIRM_FALSE]
refresh
end

def item_max
@items ? @items.size : 1
end

def item
@items && index >= 0 ? @items[index] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
draw_text(rect,get_item_name(index))
end

def get_item_name(index)
return @items[index]
end

def get_costs(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end
end

class LDT_Confirm_Window_Title < Window_Base

def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
@text2 = ""
end

def refresh
contents.clear
draw_text_ex(4, 0, @text)
end

def set_text(text)
if text != @text
@text = text
refresh
end
end
end

Ken der Kot
16.06.2019, 14:53
WOW, danke dir ich werde es gleich ausprobieren :herz:

Edit: Gibt es denn eine Möglichkeit mit dem Maker, wie ich die Schrift farbig und zusätzlich eine Beschreibung der Unterpunkte einfügen kann?

zB Villager. Beschreibung: Das sind die Bewohner deines Dorfes

Linkey
23.06.2019, 01:26
Hier das Update, wie gewünscht:
- Fenstergröße maximiert
- Titelwindow für Beschreibung hinzugefügt

Farbliche markierungen kannst du mit \\C[0] setzen. Nicht vergessen, die Schriftfarbe danach wieder auf 0 zu setzen:
"Dies ist ein \\C[2]Beispiel\\C[0] mit roter Farbe."

Falls du im oberen Teil schon Einstellungen vorgenommen hast, habe ich dir die dort neu hinzugefügte Zeile extra farblich gekennzeichnet, sodass du nicht deine Anpassungen mit copy&paste überschreiben musst.
Es reicht wenn du das blaue kopierst und den enstprechenden Teil im alten Script damit überschreibst.



module LDT_UPGRADE_MENU
#Confirmation texts
CONFIRM_TITLE = " upgrade?"
CONFIRM_TRUE = "Yes"
CONFIRM_FALSE = "No"

#icon ids
#upgrade icons (villager, house,...)
ICON_IDS = [121,232,292,281]
#cost icons (wood, gold, ...)
ICON_COST_IDS = [331,262,350,147]
#resource names
UPGRADE_NAMES = ["Villagers","House","Fisherman","Church"]

#cost names
COST_NAMES = ["Wood","Gold","Stone","Sword"]

#upgrade costs
UPGRADE_COSTS = [[{0=>5,1=>10},{0=>10,1=>25},{0=>20,1=>50},{0=>50,1=>200}],#villager
[{0=>5,1=>10,2=>5},{0=>10,1=>25,2=>15},{0=>20,1=>50,2=>50}],#house
[{0=>10,1=>5}],#fisherman
[{0=>50,1=>500,2=>50}],#church
]

#upgrade description
UPGRADE_DESCR = ["The \\C[5]inhabitants\\C[0] of your village.","This is your residence.","The guy who provides you with fish.","The place your inhabitants can pray."]

#variable for each upgrade (e.g. 1 = $game_variables[1])
UPGRADE_VARS = [101,102,103,104]

#variable for each cost (e.g. 1 = $game_variables[1])
COST_VARS = [105,106,107,108]

#Symbol displayed if max Level is reached
MAX_LEVEL_TEXT = "MAX"
#Graphics
#Start position vertical (0 = top, 480 = botton)
G_START_Y = 0
#start position horizontal (0 = left, 640 = right)
G_START_X = 0
#Width of the first Window
G_WIDTH_1 = 280
#Width of the second Window
G_WIDTH_2 = 240
#Confirmation window alignment (1 = horiz., 2= vert.)
G_CONFIRM_ALIGN = 2
#color if condition is not met
BAD_COLOR = 2
end

# call the upgrade menu
# items needs to be an array
# e.g. call_upgrade_menu([0]) will call the menu for villager upgrades
# e.g. call_upgrade_menu([0,3]) will call the menu for villager & church upgr.
def call_upgrade_menu(items)
return false unless(items.is_a?(Array))
$upgrade_items = items
SceneManager.call(LDT_Upgrade_Scene)
end

class LDT_Upgrade_Scene < Scene_Base
def start
super
@ui = 0
create_title_window()
create_selection_window
create_cost_window
create_confirmation_windows
create_background
@title_window.set_text(LDT_UPGRADE_MENU::UPGRADE_DESCR[$upgrade_items[@ui]])
end

def create_title_window()
@title_window = LDT_Upgrade_Window_Title.new(LDT_UPGRADE_MENU::G_START_X,LDT_UPGRADE_MENU::G_START_Y,1,Graphics.width)
@title_window.set_text("")
end

def create_selection_window()
ty = LDT_UPGRADE_MENU::G_START_Y + @title_window.height
th = Graphics.height - @title_window.height#$upgrade_items.size * 24 + 32
@upgrade_window = LDT_Upgrade_Window.new(LDT_UPGRADE_MENU::G_START_X,ty,LDT_UPGRADE_MENU::G_WIDTH_1,th)
@upgrade_window.viewport = @viewport

@upgrade_window.set_handler(:ok, method(:on_menu_ok))
@upgrade_window.set_handler(:cancel, method(:return_scene))
@upgrade_window.activate
@upgrade_window.select(0)
@upgrade_window.show
end

def create_cost_window()
ty = LDT_UPGRADE_MENU::G_START_Y + @title_window.height
tx = LDT_UPGRADE_MENU::G_START_X + LDT_UPGRADE_MENU::G_WIDTH_1
tw = Graphics.width - tx
th = Graphics.height - @title_window.height
@cost_window = LDT_Upgrade_Cost_Window.new(tx,ty,tw,th)
@cost_window.viewport = @viewport

@cost_window.show
end

def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
end

def create_confirmation_windows()
tx = LDT_UPGRADE_MENU::G_START_X + ( LDT_UPGRADE_MENU::G_WIDTH_1 - LDT_UPGRADE_MENU::G_WIDTH_2 ) / 2
ty = LDT_UPGRADE_MENU::G_START_Y
@confirm_title_window = LDT_Confirm_Window_Title.new(tx,ty,1,LDT_UPGRADE_MENU::G_WIDTH_2)
@confirm_title_window.set_text("")
@confirm_title_window.hide
@confirm_title_window.viewport = @viewport

th = 2 * 24 + 32
ty = ty + @confirm_title_window.height
@confirm_window = LDT_Upgrade_Window_Confirmation.new(tx,ty,LDT_UPGRADE_MENU::G_WIDTH_2,th)
@confirm_window.viewport = @viewport
@confirm_window.set_handler(:ok, method(:on_conf_ok))
@confirm_window.set_handler(:cancel, method(:on_conf_cancel))
@confirm_window.hide
end

def on_menu_ok
ti = @upgrade_window.index
if(@upgrade_window.current_item_enabled?)
ttext = get_upgrade_name(ti) + LDT_UPGRADE_MENU::CONFIRM_TITLE
@confirm_title_window.set_text(ttext)
tth = @upgrade_window.index * 24 + 40 + @title_window.height
if((tth + @confirm_title_window.height + @confirm_window.height) > Graphics.height)
tth = tth - 24 - @confirm_title_window.height - @confirm_window.height
end
@confirm_title_window.y = tth
@confirm_window.y = tth + @confirm_title_window.height
@confirm_title_window.show

@confirm_window.activate
@confirm_window.select(0)
@confirm_window.show
else
@upgrade_window.activate
end
end

def on_conf_ok
if(@confirm_window.index >= 1)
on_conf_cancel
else
ti = $upgrade_items[@upgrade_window.index]
#loop on all costs of current upgrade level and reduce cor. variable
LDT_UPGRADE_MENU::UPGRADE_COSTS[ti][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]]].each do |tk,tv|
$game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]]-= tv
end
#increase upgrade variable by 1
$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]] += 1
refresh_windows
on_conf_cancel
end
end

def refresh_windows
@upgrade_window.refresh
@cost_window.refresh
end

def update()
super()
if(@upgrade_window.index != @ui)
@ui = @upgrade_window.index
@cost_window.set_upgrade_index($upgrade_items[@ui])
@cost_window.refresh
@title_window.set_text(LDT_UPGRADE_MENU::UPGRADE_DESCR[$upgrade_items[@ui]])
end
end
def on_conf_cancel
@confirm_window.deactivate
@confirm_window.hide
@confirm_title_window.hide
@upgrade_window.activate
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]]
end
end

class LDT_Upgrade_Cost_Window < Window_Base
def initialize(x, y, width,height)
super(x,y,width,height)#get_uc_height)
@iu = 0
refresh
end

def set_upgrade_index(index)
@iu = index
end

def refresh
contents.clear
LDT_UPGRADE_MENU::COST_NAMES.each_with_index do |tn,ti|
draw_costs(ti)
end
end

def draw_costs(index)
tx = 0
ty = 0 + index * 24
tw = self.width - 24
if(cost_relevant?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), tx, ty, cost_relevant?(index))
draw_text(tx + 26, ty, tw - 26, 24, get_cost_name(index))
if(cost_relevant?(index))
if(get_resource(index) < get_upgrade_cost(index))
change_color(text_color(LDT_UPGRADE_MENU::BAD_COLOR))
end
draw_text(tx,ty,tw,24,get_upgrade_cost_text(index),2)
change_color(normal_color())
end
end

def get_uc_height()
return LDT_UPGRADE_MENU::COST_NAMES.size * 24 + 32
end

def cost_relevant?(index)
return false unless(LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]])
return LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]].has_key?(index)
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_COST_IDS[index]
end

def get_cost_name(index)
text = LDT_UPGRADE_MENU::COST_NAMES[index] + "("
text = text + get_resource(index).to_s + ")"
return text
end

def get_resource(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end

def get_upgrade_cost_text(index)
return get_upgrade_cost(index).to_s
end

def get_upgrade_cost(index)
LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]][index]
end
end

class LDT_Upgrade_Window < Window_Selectable

def initialize(x, y, width, height)
super(x,y,width,height)
refresh
end

def item_max
$upgrade_items ? $upgrade_items.size : 1
end

def item
$upgrade_items && index >= 0 ? LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
if(current_item_enabled?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), rect.x, rect.y, current_item_enabled?(index))
draw_text(rect.x + 26, rect.y, rect.width - 26, rect.height, get_upgrade_name(index))#, rect.x, rect.y)
draw_text(rect,get_upgrade_lvl(index),2)
end

def get_upgrade_lvl(index)
return $game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]
end

def up_index(index)
return $upgrade_items[index]
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_IDS[up_index(index)]
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[up_index(index)]
end

def current_item_enabled?(tindex = index)
return false if(tindex < 0)
tc = get_costs(tindex)
return false if(tc == LDT_UPGRADE_MENU::MAX_LEVEL_TEXT)
tc.each do |tk,tv|
return false if($game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]] < tv)
end
return true
end

def get_costs(index)
tcosts = LDT_UPGRADE_MENU::UPGRADE_COSTS[up_index(index)][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]]
return tcosts ? tcosts : LDT_UPGRADE_MENU::MAX_LEVEL_TEXT
end
end

class LDT_Upgrade_Window_Confirmation < Window_Selectable
def initialize(x, y, width, height)
super(x,y,width,height)
@items = [LDT_UPGRADE_MENU::CONFIRM_TRUE,LDT_UPGRADE_MENU::CONFIRM_FALSE]
refresh
end

def item_max
@items ? @items.size : 1
end

def item
@items && index >= 0 ? @items[index] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
draw_text(rect,get_item_name(index))
end

def get_item_name(index)
return @items[index]
end

def get_costs(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end
end

class LDT_Confirm_Window_Title < Window_Base

def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
@text2 = ""
end

def refresh
contents.clear
draw_text_ex(4, 0, @text)
end

def set_text(text)
if text != @text
@text = text
refresh
end
end
end

class LDT_Upgrade_Window_Title < Window_Base

def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
end

def refresh
contents.clear
draw_text_ex(4, 0, @text)
end

def set_text(text)
if text != @text
@text = text
refresh
end
end
end

Ken der Kot
23.06.2019, 12:34
Wow, das isses. Grad getestet und so hab ich mir das vorgestellt. Herzlichen Dank, Linkey. Bist ein Guter. <3

Edit: Nur das zB 5/50 anstelle von (5) 50 in der Anzeige wär noch gut. Weißt ja was ich mein. ;)

Linkey
23.06.2019, 13:12
Klar, hier (Zeile 1-50 kannst du wieder stehen lassen, den rest hiermit ersetzen):

# call the upgrade menu
# items needs to be an array
# e.g. call_upgrade_menu([0]) will call the menu for villager upgrades
# e.g. call_upgrade_menu([0,3]) will call the menu for villager & church upgr.
def call_upgrade_menu(items)
return false unless(items.is_a?(Array))
$upgrade_items = items
SceneManager.call(LDT_Upgrade_Scene)
end

class LDT_Upgrade_Scene < Scene_Base
def start
super
@ui = 0
create_title_window()
create_selection_window
create_cost_window
create_confirmation_windows
create_background
@title_window.set_text(LDT_UPGRADE_MENU::UPGRADE_DESCR[$upgrade_items[@ui]])
end

def create_title_window()
@title_window = LDT_Upgrade_Window_Title.new(LDT_UPGRADE_MENU::G_START_X,LDT_UPGRADE_MENU::G_START_Y,1,Graphics.width)
@title_window.set_text("")
end

def create_selection_window()
ty = LDT_UPGRADE_MENU::G_START_Y + @title_window.height
th = Graphics.height - @title_window.height#$upgrade_items.size * 24 + 32
@upgrade_window = LDT_Upgrade_Window.new(LDT_UPGRADE_MENU::G_START_X,ty,LDT_UPGRADE_MENU::G_WIDTH_1,th)
@upgrade_window.viewport = @viewport

@upgrade_window.set_handler(:ok, method(:on_menu_ok))
@upgrade_window.set_handler(:cancel, method(:return_scene))
@upgrade_window.activate
@upgrade_window.select(0)
@upgrade_window.show
end

def create_cost_window()
ty = LDT_UPGRADE_MENU::G_START_Y + @title_window.height
tx = LDT_UPGRADE_MENU::G_START_X + LDT_UPGRADE_MENU::G_WIDTH_1
tw = Graphics.width - tx
th = Graphics.height - @title_window.height
@cost_window = LDT_Upgrade_Cost_Window.new(tx,ty,tw,th)
@cost_window.viewport = @viewport

@cost_window.show
end

def create_background
@background_sprite = Sprite.new
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
end

def create_confirmation_windows()
tx = LDT_UPGRADE_MENU::G_START_X + ( LDT_UPGRADE_MENU::G_WIDTH_1 - LDT_UPGRADE_MENU::G_WIDTH_2 ) / 2
ty = LDT_UPGRADE_MENU::G_START_Y
@confirm_title_window = LDT_Confirm_Window_Title.new(tx,ty,1,LDT_UPGRADE_MENU::G_WIDTH_2)
@confirm_title_window.set_text("")
@confirm_title_window.hide
@confirm_title_window.viewport = @viewport

th = 2 * 24 + 32
ty = ty + @confirm_title_window.height
@confirm_window = LDT_Upgrade_Window_Confirmation.new(tx,ty,LDT_UPGRADE_MENU::G_WIDTH_2,th)
@confirm_window.viewport = @viewport
@confirm_window.set_handler(:ok, method(:on_conf_ok))
@confirm_window.set_handler(:cancel, method(:on_conf_cancel))
@confirm_window.hide
end

def on_menu_ok
ti = @upgrade_window.index
if(@upgrade_window.current_item_enabled?)
ttext = get_upgrade_name(ti) + LDT_UPGRADE_MENU::CONFIRM_TITLE
@confirm_title_window.set_text(ttext)
tth = @upgrade_window.index * 24 + 40 + @title_window.height
if((tth + @confirm_title_window.height + @confirm_window.height) > Graphics.height)
tth = tth - 24 - @confirm_title_window.height - @confirm_window.height
end
@confirm_title_window.y = tth
@confirm_window.y = tth + @confirm_title_window.height
@confirm_title_window.show

@confirm_window.activate
@confirm_window.select(0)
@confirm_window.show
else
@upgrade_window.activate
end
end

def on_conf_ok
if(@confirm_window.index >= 1)
on_conf_cancel
else
ti = $upgrade_items[@upgrade_window.index]
#loop on all costs of current upgrade level and reduce cor. variable
LDT_UPGRADE_MENU::UPGRADE_COSTS[ti][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]]].each do |tk,tv|
$game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]]-= tv
end
#increase upgrade variable by 1
$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[ti]] += 1
refresh_windows
on_conf_cancel
end
end

def refresh_windows
@upgrade_window.refresh
@cost_window.refresh
end

def update()
super()
if(@upgrade_window.index != @ui)
@ui = @upgrade_window.index
@cost_window.set_upgrade_index($upgrade_items[@ui])
@cost_window.refresh
@title_window.set_text(LDT_UPGRADE_MENU::UPGRADE_DESCR[$upgrade_items[@ui]])
end
end
def on_conf_cancel
@confirm_window.deactivate
@confirm_window.hide
@confirm_title_window.hide
@upgrade_window.activate
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]]
end
end

class LDT_Upgrade_Cost_Window < Window_Base
def initialize(x, y, width,height)
super(x,y,width,height)#get_uc_height)
@iu = 0
refresh
end

def set_upgrade_index(index)
@iu = index
end

def refresh
contents.clear
LDT_UPGRADE_MENU::COST_NAMES.each_with_index do |tn,ti|
draw_costs(ti)
end
end

def draw_costs(index)
tx = 0
ty = 0 + index * 24
tw = self.width - 24
if(cost_relevant?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), tx, ty, cost_relevant?(index))
draw_text(tx + 26, ty, tw - 26, 24, get_cost_name(index))
if(cost_relevant?(index))
if(get_resource(index) < get_upgrade_cost(index))
change_color(text_color(LDT_UPGRADE_MENU::BAD_COLOR))
end
draw_text(tx,ty,tw,24,get_upgrade_cost_text(index),2)
change_color(normal_color())
end
end

def get_uc_height()
return LDT_UPGRADE_MENU::COST_NAMES.size * 24 + 32
end

def cost_relevant?(index)
return false unless(LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]])
return LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]].has_key?(index)
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_COST_IDS[index]
end

def get_cost_name(index)
text = LDT_UPGRADE_MENU::COST_NAMES[index] #+ "("
#text = text + get_resource(index).to_s + ")"
return text
end

def get_resource(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end

def get_upgrade_cost_text(index)
return get_resource(index).to_s + "/" + get_upgrade_cost(index).to_s
end

def get_upgrade_cost(index)
LDT_UPGRADE_MENU::UPGRADE_COSTS[@iu][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[@iu]]][index]
end
end

class LDT_Upgrade_Window < Window_Selectable

def initialize(x, y, width, height)
super(x,y,width,height)
refresh
end

def item_max
$upgrade_items ? $upgrade_items.size : 1
end

def item
$upgrade_items && index >= 0 ? LDT_UPGRADE_MENU::UPGRADE_NAMES[$upgrade_items[index]] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
if(current_item_enabled?(index))
contents.font.color.alpha = 255
else
contents.font.color.alpha = translucent_alpha
end
draw_icon(get_icon_num(index), rect.x, rect.y, current_item_enabled?(index))
draw_text(rect.x + 26, rect.y, rect.width - 26, rect.height, get_upgrade_name(index))#, rect.x, rect.y)
draw_text(rect,get_upgrade_lvl(index),2)
end

def get_upgrade_lvl(index)
return $game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]
end

def up_index(index)
return $upgrade_items[index]
end

def get_icon_num(index)
return LDT_UPGRADE_MENU::ICON_IDS[up_index(index)]
end

def get_upgrade_name(index)
return LDT_UPGRADE_MENU::UPGRADE_NAMES[up_index(index)]
end

def current_item_enabled?(tindex = index)
return false if(tindex < 0)
tc = get_costs(tindex)
return false if(tc == LDT_UPGRADE_MENU::MAX_LEVEL_TEXT)
tc.each do |tk,tv|
return false if($game_variables[LDT_UPGRADE_MENU::COST_VARS[tk]] < tv)
end
return true
end

def get_costs(index)
tcosts = LDT_UPGRADE_MENU::UPGRADE_COSTS[up_index(index)][$game_variables[LDT_UPGRADE_MENU::UPGRADE_VARS[up_index(index)]]]
return tcosts ? tcosts : LDT_UPGRADE_MENU::MAX_LEVEL_TEXT
end
end

class LDT_Upgrade_Window_Confirmation < Window_Selectable
def initialize(x, y, width, height)
super(x,y,width,height)
@items = [LDT_UPGRADE_MENU::CONFIRM_TRUE,LDT_UPGRADE_MENU::CONFIRM_FALSE]
refresh
end

def item_max
@items ? @items.size : 1
end

def item
@items && index >= 0 ? @items[index] : nil
end

def refresh
create_contents
draw_all_items
end


def draw_item(index)
rect = item_rect(index)
rect.width -= 4
draw_text(rect,get_item_name(index))
end

def get_item_name(index)
return @items[index]
end

def get_costs(index)
return $game_variables[LDT_UPGRADE_MENU::COST_VARS[index]]
end
end

class LDT_Confirm_Window_Title < Window_Base

def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
@text2 = ""
end

def refresh
contents.clear
draw_text_ex(4, 0, @text)
end

def set_text(text)
if text != @text
@text = text
refresh
end
end
end

class LDT_Upgrade_Window_Title < Window_Base

def initialize(x,y,line_number = 1, tw = nil)
tw = (tw ? tw : Graphics.width)
super(x, y, tw, fitting_height(line_number))
end

def refresh
contents.clear
draw_text_ex(4, 0, @text)
end

def set_text(text)
if text != @text
@text = text
refresh
end
end
end

Ken der Kot
23.06.2019, 13:32
Perfekt so, danke. :) :) :)