Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rpg Vx Ace: Skills als Fenster im unteren Bereich des Fensters



Ken der Kot
11.09.2018, 18:44
Hallo Community,

in Yanflys Kampfsystem werden Skills nicht über den ganzen Bildschirm verteilt angezeigt, sondern schön als Message im unteren Bereich des Bildschirms (http://yanflychannel.files.wordpress.com/2011/12/acs-03.jpg). Ich will das auch so haben. Allerdings kann ich nicht Yanflys Kampfsystem benutzen, weil das mit meinen bisherigen Scripten nicht kompatibel ist. Ich müsste nochmals ganz von vorn anfangen, was ich nach monatelanger Arbeit an meinem KS einfach nicht will.

Lange Rede kurzer Sinn: Kann mir jemand helfen, die Skills nach unten zu navigieren? (nur ohne das Face, das brauch ich nicht.)

Was ich schon selbst versucht habe:
- Google-Suche. Das gibts leider echt noch nicht im Net, außer bei...
- ... Yanfly: Ich habe Yanflys Script nach seinen Methoden durchsucht und versucht, das Verhalten nachzubauen. Gescheitert...
- Ich hab die Teile, die für die Fensterverschiebung verantwortlich sind, von Yanfly rauskopiert und versucht zu nutzen. Klappt nicht, er benutzt sehr viele Alias und Methoden die jeweils irgendwo im Script vorkommen. Man kann nicht einfach Teile davon extrahieren, das ist schlicht nicht möglich.
- Ich kann das Fenster selbst verschieben. (Window_SkillCommand) Das hilft allerdings nicht, denn das Status_Window (jenes Fenster, das die HP, MP und Namen etc anzeigt, erscheint ja trotzdem noch darunter, sodass die Fenster überlappen. Wenn das Skillwindow aktiv ist, muss das Statuswindow auf "hide" sein und das für alle möglichen Fälle wie "Skill wählt Actor als Ziel", "Skill wählt Enemy als Ziel" und bei "Skill cancel" muss das Statuswindow wieder erscheinen und das Skillmenü verschwinden. Das ist sehr viel für jemanden ohne den rechten Durchblick und ich komme mit meinen Bemühungen leider nicht zum Ziel.

Kann jemand helfen?

Ken der Kot

Ken der Kot
13.09.2018, 16:47
Ein ganz vorsichtiges "Bump" an dieser Stelle (Y)

csg
13.09.2018, 23:10
Hey Ken,

wir haben dich gerde erst vor einer Woche darauf aufmerksam gemacht, doch bitte nicht unnötig in so kurzen Abständen Doppelposts ohne jeglichen Sinn zu verfassen. Dieser Thread war nicht einmal weit nach unten gerutscht. Obwohl du dich bei der Ermahnung eigentlich einsichtig gezeigt hast, hat es nun den Anschein das du dich nicht daran hälst. Du erhälst daher für gehäuftes Spamen eine Verwarnung von mir. Für weitere Fragen diesbezüglich kannst du dich bei mir über PN melden.

Trotzdem wünsche ich dir natürlich, dass sich noch jemand findet der dir bei deiner Frage helfen kann!

Linkey
14.09.2018, 00:21
Ich helfe hier im Forum wirklich gerne bei technischen Dingen mit dem Maker. Muss aber auch sagen, dass mich solche Bumps auch eher abschrecken zu helfen.
In der Freizeit sollte man sich nicht wie auf der stressigen Arbeit fühlen :p

Aber du hättest den Ansatz, Yanlfys Script an den entsprechenden Stellen zu kopieren, ruhig weiterverfolgen können. Ich habe nichts anderes gemacht (außer die breite des Skill/Item-Windows vergrößert, da du das Face ja nicht haben wolltest - also kann man auch den ganzen Platz nutzen - außerdem habe ich das entfernt, was explizit für Yanflys Script hinzugefügt wurde - was du nicht benötigst). Das sollten alle betroffenen Methoden sein, aber teste es am besten fleißig:


class Scene_Battle < Scene_Base
alias scene_battle_create_skill_window_abe create_skill_window
def create_skill_window
scene_battle_create_skill_window_abe
@skill_window.height = @info_viewport.rect.height
@skill_window.width = Graphics.width# - @actor_command_window.width
@skill_window.y = Graphics.height - @skill_window.height
end

alias scene_battle_create_item_window_abe create_item_window
def create_item_window
scene_battle_create_item_window_abe
@item_window.height = @skill_window.height
@item_window.width = @skill_window.width
@item_window.y = Graphics.height - @item_window.height
end

alias scene_battle_next_command_abe next_command
def next_command
@status_window.show
redraw_current_status
@actor_command_window.show
scene_battle_next_command_abe
end

alias scene_battle_prior_command_abe prior_command
def prior_command
redraw_current_status
scene_battle_prior_command_abe
end

def redraw_current_status
return if @status_window.index < 0
@status_window.draw_item(@status_window.index)
end


alias scene_battle_command_skill_abe command_skill
def command_skill
scene_battle_command_skill_abe
@status_window.hide
@actor_command_window.hide
end

alias scene_battle_command_item_abe command_item
def command_item
scene_battle_command_item_abe
@status_window.hide
@actor_command_window.hide
end

alias scene_battle_on_skill_cancel_abe on_skill_cancel
def on_skill_cancel
scene_battle_on_skill_cancel_abe
@status_window.show
@actor_command_window.show
end

alias scene_battle_on_item_cancel_abe on_item_cancel
def on_item_cancel
scene_battle_on_item_cancel_abe
@status_window.show
@actor_command_window.show
end

alias scene_battle_on_actor_cancel_abe on_actor_cancel
def on_actor_cancel
scene_battle_on_actor_cancel_abe
case @actor_command_window.current_symbol
when :skill
@skill_window.show
when :item
@item_window.show
end
end

alias scene_battle_on_enemy_cancel_abe on_enemy_cancel
def on_enemy_cancel
scene_battle_on_enemy_cancel_abe
if @skill_window.visible || @item_window.visible
@help_window.show
else
@help_window.hide
end
end

alias scene_battle_on_actor_ok_abe on_actor_ok
def on_actor_ok
scene_battle_on_actor_ok_abe
@status_window.show
end

end


Der Vorteil von Alias ist, dass du nicht die Methode selbst überschreibst. Hier mal ein fiktives Beispiel.
Basis Methode:

def calculate_damage
return attacker.attack - attacker.defense
end

Script A fügt dieser Methode nun einen Bonus schaden hinzu, anhand gesammelter Bonus Items:

alias calculate_damage_scripta calculate_damage
def calculate_damage
dmg = calulate_damage_scripta <- das ruft die original methode auf
return dmg + bonus_items.count
end

Jetzt fügst du Script B hinzu, welches den schaden um die anzahl der absolvierten kämpfe erhöht.

alias calculate_damage_scriptb calculate_damage
def calculate_damage
dmg = calulate_damage_scriptb <- das ruft die original methode auf (da script a auch schon drin ist, wird hier script a aufgerufen)
return dmg + number_of_battles
end

In diesem Fall ist es egal, ob du Script A benutzt oder Script B oder beide - es funktioniert immer. Weil die Methode "calculate_damage" nicht überschrieben wird, sondern mittels alias erweitert.
Natürlich können Scripts dadurch immer noch inkompatibel sein, weil die Erweiterungen sich gegenseitig stören könnten.

Ken der Kot
14.09.2018, 09:05
@ csg: Ja, hab ich mir selber zuzuschreiben. Mach nur bitte das "Läuft ab: Nie" raus, damit das nicht bis 2035 in meinem Profil steht. Sieht nicht gut aus :(

@ Linkey: Vielen Dank es funktioniert. Nur wenn man bei einem Skill zb einen Actor auswählen muss, sieht es noch nicht schön aus, weil das Actor_Window mit dem Skill_Window überlappt. Eventuell liese sich das so anpassen,dass das Skill Window verschwindet, wenn man einen Skill auf einen Helden anwenden soll? Dazu müsste daneben auch am besten wieder das Auswahlfenster (Attack, Skills, Item...) angezeigt werden, damit es gut aussieht. Kannst du mir dabei helfen? Ich bump auch nicht mehr dann. (*_*)

EDIT:

Habs soweit geschafft, dass das Fenster so angezeigt wird wie ich will. Will jetzt nur noch, dass das Fenster dahinter (Skill_window) weg ist, wenn ein Actor oder Gegner ausgewählt wird.


class Scene_Battle < Scene_Base
alias scene_battle_create_skill_window_abe create_skill_window
def create_skill_window
scene_battle_create_skill_window_abe
@skill_window.height = @info_viewport.rect.height
@skill_window.width = Graphics.width - @actor_command_window.width
@skill_window.y = Graphics.height - @skill_window.height
@skill_window.x = 128
end

alias scene_battle_create_item_window_abe create_item_window
def create_item_window
scene_battle_create_item_window_abe
@item_window.height = @skill_window.height
@item_window.width = @skill_window.width
@item_window.y = Graphics.height - @item_window.height
end

alias scene_battle_next_command_abe next_command
def next_command
@status_window.show
redraw_current_status
@actor_command_window.show
scene_battle_next_command_abe
end

alias scene_battle_prior_command_abe prior_command
def prior_command
redraw_current_status
scene_battle_prior_command_abe
end

def redraw_current_status
return if @status_window.index < 0
@status_window.draw_item(@status_window.index)
end


alias scene_battle_command_skill_abe command_skill
def command_skill
scene_battle_command_skill_abe
@status_window.hide
@actor_command_window.show
end

alias scene_battle_command_item_abe command_item
def command_item
scene_battle_command_item_abe
@status_window.hide
@actor_command_window.hide
end

alias scene_battle_on_skill_cancel_abe on_skill_cancel
def on_skill_cancel
scene_battle_on_skill_cancel_abe
@status_window.show
@actor_command_window.show
end

alias scene_battle_on_item_cancel_abe on_item_cancel
def on_item_cancel
scene_battle_on_item_cancel_abe
@status_window.show
@actor_command_window.show
end

alias scene_battle_on_actor_cancel_abe on_actor_cancel
def on_actor_cancel
scene_battle_on_actor_cancel_abe
case @actor_command_window.current_symbol
when :skill
@skill_window.show
when :item
@item_window.show
end
end

alias scene_battle_on_enemy_cancel_abe on_enemy_cancel
def on_enemy_cancel
scene_battle_on_enemy_cancel_abe
if @skill_window.visible || @item_window.visible
@help_window.show
else
@help_window.hide
end
end

alias scene_battle_on_actor_ok_abe on_actor_ok
def on_actor_ok
scene_battle_on_actor_ok_abe
@status_window.show
end

end

EDIT 2: Ok, brauche echt Hilfe, weil ich hab jetzt @skill_window.hide an so ziemlich jeder Stelle im Skript eingefügt und das macht nicht, was ich will!

Thread gelöst.

Vielen Dank an alle, die geholfen haben und mich auf den richtigen Weg führten.