PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Menüoption ändern 2.0 (RMXP)



ViktorVega3000
24.11.2011, 11:15
Hallo Leute, da bin ich wieder! :D
Und wie soll es anders sein, mit einer neuen Bitte.

Ich habe hier ein FF7 Menü gefunden, welches schon recht ordentlich ist, aber noch nicht ganz perfekt...jedenfalls nicht für mein Vorhaben.
Ich setze den Script hier als Anhang mal rein.
Ich bräuchte genau zwei Änderungen, welche mich wirklich happy machen würden.

Und zwar:

1) In dem Menü kann man ganz unten, unter der Zeit und dem Geld, die "LOCATION"-Anzeige sehen. Könnte sie jemand mal ganz entfernen?

2) Ich habe den Questlog 2 von Caesar in meinem Script-Editor intergriert (Da ich ihn komfortabler empfinde, als 3.0).
Könnte mir jemand die "SAVE"-Funktion durch das Questlog(Tagebuch) ersetzen?

Wäre echt gigantisch, wenn jemand den "manipulierten" Script, ebenfalls hier reinstellen könnte.

Danke schon mal für die tolle Unterstützung!!

Rettan
24.11.2011, 23:08
Also für 1) musst du einfach nur die folgenden Zeilen auskommentieren/löschen:


In Scene_Menu:

#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110

(Übrigens finde ich die Funktion ansich ganz toll, werde ich wohl bei mir einbauen ^_^)

Bei 2) bei ich mir nicht ganz sicher, weil ich das Logbuch-Skript nicht kenne.
Aber um den Schriftzug von Save zu ersetzen einfach Scene_Menu bei folgenden Zeilen den Schriftzug bei s5 ändern


s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Status"
s5 = "Save"
s6 = "Quit"

Aber in der Scene_Menu ist es generell so, dass in der update_command-Funktion bei der case-Anweisung ausgewählt wird, welches Fenster aufgemacht werden soll, wenn du im Menü etwas auswählst. Save steht da bei "when 4".
Vermutlich muss dort dann irgendwo die aktuelle Scene auf das Objekt des Logbuchs gestellt werden. (Das Objekt vorher in der Main der Scene_Menu erstellen.)

Ist aber mehr sone Vermutung, bin ja selbst noch Anfänger mit RGSS.

Todu
25.11.2011, 19:34
Was Rettan da geschrieben hat, ist so weit erstmal richtig, die Frage ist jetzt: kommst damir klar?

ViktorVega3000
25.11.2011, 19:40
Hey Rettan!

Ich poste dir mal hiermit das Questlog-Script, damit du die übersicht hast. Ach ja... damit der Script (Questlog) richtig aufgerufen
werden kann, musste man irgendein scene_.... ersetzen.

Danke für deine Zeit

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Todu
Kann ich dir noch nicht sagen, bin echt ein noobinski, was RGSS angeht. Deshalb wäre ja vorgeänderte Script cool ;)

Rettan
25.11.2011, 22:08
Also ich vermute dann einfach mal, dass es so funktionieren sollte: ^_^


when 4 # Logbuch
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to item screen
$scene = Scene_Questlog.new

Mehr sollte es nicht sein.

Aber ich würde dir auf jedenfall empfehlen noch Ruby zu verstehen. Denn welche Vorteile RGSS einem gegenüber einfachem Event-Scripting bietet merkt man eigentlich erst dann, wenn man mal wirklich was mit Ruby erreicht hat.
Das merk ich gerade extrem. Ich bin schon seit Tagen nur ein wenig Kosmetik für KS und Menü am betreiben und hab ein paar kleinere Erweiterungen oder Umbauten gemacht und bin einfach total begeistert. Ist zwar immer recht viel Try&Error bei, aber man kommt vorran.
Wobei fertige Scripts da schon sehr wertvoll sein, weil man allein schon beim Einbau (und den Komplikationen dabei) recht viel mitnehmen kann.

Edit: Ich habs mal eben ausprobiert und hab ne Fehlermeldung bekommen, was aber aus dem Questlog-Script kam.
Mit einem anderen Script (Questlog 3.0 von Caesar) hat der Aufruf genau so funktioniert.

Todu
26.11.2011, 02:46
Also für 1) musst du einfach nur die folgenden Zeilen auskommentieren/löschen:



In Scene_Menu:

#Showing location window
@map = Window_Mapname.new
@map.x = 640 - @map.width
@map.y = 0 - @map.height - 1
@map.z = 110



Übrigens musst du sämtliche weiteren vorkommnisse von @map löschen. Wahrscheinlich beinhaltet das ein @map.update und @map.dispose


Versuch das was wir geschrieben haben mal selbst umzubauen. Es wird dir evtl helfen ein wenig Einblick in die Art und Weise zu geben, wie der Kram gescriptet ist.

Solltest du es selbst aber nicht hinbekommen, hab ichs dir eben fertig gemacht und angehängt -da mein Rechner grade spackt, nur mit code-tag statt als Dateianhang



#*********************************************************
#Final Fantasy VII menu setup by AcedentProne
#*********************************************************
#To use:
#If you do not want Faces, go to line 94
#and change delete the # of draw_actor_graphic
#and put a # infront of draw_actor_face
#
#Create a new folder in the Characters folder, and call it Faces
#Adding faces: add a 80x80 picture with the same name as the characterset it
#corrosponds with in the Faces folder


#========================================
#¡ Window_Base
#--------------------------------------------------------------------------------
# Setting functions for the "Base"
#========================================


class Window_Base < Window

def draw_actor_face(actor, x, y)
face = RPG::Cache.character("Faces/" + actor.character_name, actor.character_hue)
fw = face.width
fh = face.height
src_rect = Rect.new(0, 0, fw, fh)
self.contents.blt(x - fw / 23, y - fh, face, src_rect)
end
end
def draw_actor_battler_graphic(actor, x, y)
bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
cw = bitmap.width
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end

#========================================
#¡ Game_Map
#--------------------------------------------------------------------------------
# Setting functions for the Map
#========================================
class Game_Map

def name
$map_infos[@map_id]
end
end

#========================================
#¡ Window_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
$map_infos = load_data("Data/MapInfos.rxdata")
for key in $map_infos.keys
$map_infos[key] = $map_infos[key].name
end
end




#==============================================================================
# ¡ Window_MenuStatus
#------------------------------------------------------------------------------
# Sets up the Choosing.
#==============================================================================

class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 560, 454)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# Drawing Info on Screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 94
y = i * 110
actor = $game_party.actors
# draw_actor_face(actor, 12, y + 90) #To get rid of the Face, put a "#" before the draw_ of this line
draw_actor_graphic(actor, 48, y + 65) #and delete the "#" infront of draw of this line
draw_actor_name(actor, x, y)
draw_actor_level(actor, x + 144, y)
draw_actor_state(actor, x + 280, y )
draw_actor_exp(actor, x+ 144, y + 38)
draw_actor_hp(actor, x, y + 38)
draw_actor_sp(actor, x, y + 58)

end
end
#--------------------------------------------------------------------------
# Update of Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 110, self.width - 32, 96)
end
end
end

#=======================================#
# ¡Window_GameStats #
# written by AcedentProne #
#------------------------------------------------------------------------------#

class Window_GameStats < Window_Base
def initialize
super(0, 0, 160, 60)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end

def refresh
self.contents.clear
#Drawing gold into separate commas by Dubealex
case $game_party.gold
when 0..9999
gold = $game_party.gold
when 10000..99999
gold = $game_party.gold.to_s
array = gold.split(//)
gold = array[0].to_s+array[1].to_s+","+array[2].to_s+array[3].to_s+array[4].to_s
when 100000..999999
gold = $game_party.gold.to_s
array = gold.split(//)
gold = array[0].to_s+array[1].to_s+array[2].to_s+","+array[3].to_s+array[4].to_s+array[5].to_s
when 1000000..9999999
gold = $game_party.gold.to_s
array = gold.split(//)
gold = array[0].to_s+","+array[1].to_s+array[2].to_s+array[3].to_s+","+array[4].to_s+array[5].to_s+array[6].to_s
end
#Draw Gold
self.contents.font.color = system_color
gold_word = $data_system.words.gold.to_s
cx = contents.text_size(gold_word).width
cx2=contents.text_size(gold.to_s).width
self.contents.draw_text(4, 4, 120-cx-2, 32, gold_word)
self.contents.font.color = normal_color
self.contents.draw_text(124-cx2+1, 4, cx2, 32, gold.to_s, 2)
self.contents.font.color = system_color
# Draw "Time"
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, -10, 120, 32, text, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 120, 32, "Time")
end
#--------------------------------------------------------------------------
# Update of The count
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end

#==============================================================================
# ¡ Window_Mapname
#------------------------------------------------------------------------------
# @Draws the Map name
#==============================================================================

class Window_Mapname < Window_Base
#--------------------------------------------------------------------------
# Set up
#--------------------------------------------------------------------------
def initialize
super(0, 0, 320, 44)
self.contents = Bitmap.new(width - 52, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 18
refresh
end
#--------------------------------------------------------------------------
# Draws info on screen
#--------------------------------------------------------------------------
def refresh
self.contents.clear

# Map Name
#map = $game_map.name
self.contents.font.color = system_color
self.contents.draw_text(4, -10, 220, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(175, -10, 80, 32, $game_map.name)
end
end

#==============================================================================
# ¡ Scene_Menu
#------------------------------------------------------------------------------
# FF7 menu layout as requested by AcedentProne.
#==============================================================================

class Scene_Menu
#--------------------------- edit-------------------------------
attr_reader :status_window
#/--------------------------- edit-------------------------------

def initialize(menu_index = 0)
@menu_index = menu_index
end
def main

s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Status"
s5 = "Quests"
s6 = "Quit"


#--------------------------- edit-------------------------------
# Command menu
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,])
@command_window.x = 640 - @command_window.width
@command_window.y = 480
@command_window.z = 110
@command_window.index = @menu_index
#If certain options are avaliable
if $game_party.actors.size == 0
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
if $game_system.save_disabled
@command_window.disable_item(4)
end
#Showing location window
#@map = Window_Mapname.new
#@map.x = 640 - @map.width
#@map.y = 0 - @map.height - 1
#@map.z = 110
#Showing the game stats
@game_stats_window = Window_GameStats.new
@game_stats_window.x = 0 - @game_stats_window.width
@game_stats_window.y = 480 - @game_stats_window.height #@game_stats_window.y = 480 - @map.height - @game_stats_window.height
@game_stats_window.z =110

#Showing the Menu Status window
@status_window = Window_MenuStatus.new
@status_window.x = 640
@status_window.y = 8
@status_window.z = 100


Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
@game_stats_window.dispose
@status_window.dispose
#@map.dispose
end
#--------------------------------------------------------------------------
#Defining the delay
#--------------------------------------------------------------------------
def delay(seconds)
for i in 0...(seconds * 1)
sleep 0.01
Graphics.update
end
end
#--------------------------------------------------------------------------
# Updating
#--------------------------------------------------------------------------
def update
@command_window.update
@game_stats_window.update
@status_window.update
#@map.update
#Moving Windows inplace
gamepos = 640 - @game_stats_window.width
#mappos = 480 - @map.height - 1
if @command_window.y > 0
@command_window.y -= 60
end
if @game_stats_window.x < gamepos
@game_stats_window.x += 80
end
#if @map.y < mappos
#@map.y += 80
#end
if @status_window.x > 0
@status_window.x -= 80
end
#Saying if options are active
if @command_window.active
update_command
return
end
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# Updating the Command Selection
#--------------------------------------------------------------------------
def update_command
# If B button is pushed
if Input.trigger?(Input::B)
# Plays assigned SE
$game_system.se_play($data_system.cancel_se)
#Looping for moving windows out
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
# Go to Map
$scene = Scene_Map.new
return
end
# If C button is pused
if Input.trigger?(Input::C)
# Checks actor size
if $game_party.actors.size == 0 and @command_window.index < 4
# plays SE
$game_system.se_play($data_system.buzzer_se)
return
end
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
$scene = Scene_Item.new
when 1
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.index = 0

when 4
#if $game_system.save_disabled
#$game_system.se_play($data_system.buzzer_se)
#return
#end
$game_system.se_play($data_system.decision_se)
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
$scene = Scene_Questlog.new #$scene = Scene_Save.new
when 5
$game_system.se_play($data_system.decision_se)
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
$scene = Scene_End.new
return
end
end
#--------------------------------------------------------------------------
# Updating Status Screen
#--------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
if Input.trigger?(Input::C)
case @command_window.index
when 1 # ƒXƒLƒ‹
# ‚±‚̃AƒNƒ^[‚Ìs“®§ŒÀ‚ª 2 ˆÈã‚Ìê‡
if $game_party.actors[@status_window.index].restriction >= 2
# ƒuƒU[ SE ‚ð‰‰‘t
$game_system.se_play($data_system.buzzer_se)
return
end
# Œˆ’è SE ‚ð‰‰‘t
$game_system.se_play($data_system.decision_se)
# ƒXƒLƒ‹‰æ–Ê‚ÉØ‚è‘Ö‚¦
$scene = Scene_Skill.new(@status_window.index)
when 2
$game_system.se_play($data_system.decision_se)
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
$scene = Scene_Equip.new(@status_window.index)
when 3
$game_system.se_play($data_system.decision_se)
loop do
if @command_window.y < 480
@command_window.y += 40
end
if @game_stats_window.x > 0 - @game_stats_window.width
@game_stats_window.x -= 40
end
#if @map.y > 0 - @map.height
#@map.y -= 40
#end
if @status_window.x < 640
@status_window.x += 40
end
delay(0.5)
if @status_window.x >= 640
break
end
end
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
end

ViktorVega3000
27.11.2011, 12:27
Habe alles befolgt, selbst mein Questlog durch das Questlog 3.0 von Caesar ersetzt.
Aber wenn ich das Menü durch "ESC" aufrufen möchte, erscheint folgende Fehlermeldung:
"Script `Window_Base´ line 109: No MethodError occurred. undefined method `character_name´ for #<Array:0x3c96da8>

Please help