Vorwort
Ich lerne das Scripten gerade und habe mir ein kleines Menüscript geschrieben. Mit der Zeit werde ich es erweitern.
Ich habe nun auch die Addons veröffentlicht. Ich habe von allen Scripten schon neuere Versionen, diese haben aber noch ein paar Bugs. Da ich heute noch meine Koffer packen muss, habe ich leider keine Zeit diese Versionen fertigzustellen. Ich werde das erledigen, wenn ich wieder aus dem Urlaub komme.
Benutzung
Ladet euch die Demo herunter und kopiert die Scripte und die Grafik aus dem Ordner Pictures in euer Projekt.
Im Module AcIn könnt ihr die Grundeinstellungen vornehmen. Per Call Script könnt ihr eure Einstellungen ändern.
Mit den Pfeiltasten Links und Rechts könnt ihr zur nächsten Scene wechseln. Durch die Bestätigungstaste könnt ihr bei Scene_AcIn auf die Scene_Status zugreifen, wo ihr wieder durch die Scene Skill und Scene Equip schalten könnt.
Call Script
$scene = Scene_AcInÖffnet das Script.
AcIn::MENU_SCENE = Scene_AcInÄndert die Einstellung, das Script wird als Menü verwendet
AcIn::DRAW_MORE = trueStati und Spielzeit werden angezeigt.
usw.
Module Version 1.0:
###############################################################################
#----------------------------------------------------PDM's Actor Infos Module---------------------------------------------------#
# Version: 1.0 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
# Bemerkung: Alle Actor Info Scripte benötigen dieses Script #
###############################################################################
module AcIn
WINDOWSKIN = "Window" #Welcher Windowskin soll verwendet werden?
MENU_SCENE = Scene_Menu #Menüscene
ITEM_SCENE = Scene_Item #Itemscene
ITEM_OPACITY = 20 #Backopacity des Itemwindows (200=normal)
ITEM_TEXT = "Hier findest du deine Items." #Text der bei der Item-Zwischenscene angezeigt wird.
R_SCENE_ST = Scene_Skill
L_SCENE_ST = Scene_Equip
STATUS_SCENE = Scene_Status #Statusscene
STATUS_OPACITY = 20 #Backopacity des Statuswindows
DRAW_MORE = false #Sollen "Actor Infos More" verwendet werden? (Anzeigen der Stati und der Spielzeit)
USE = true #Soll die Anpassung genutzt werden?
END_R = Scene_Menu
END_L = Scene_Item
ITEM_R = Scene_End
ITEM_L = Scene_Menu
ACIN_R = Scene_Item
ACIN_L = Scene_End
end
Script Version 1.3:
###############################################################################
#----------------------------------------------------PDM's Actor Infos--------------------------------------------------------------#
# Version: 1.3 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
#==============================================================================
# Scene_ActorInfos
#------------------------------------------------------------------------------
# Scene zu den Infos
#==============================================================================
class Scene_AcIn < Scene_Base
def initialize(menu_index = 0)
@menu_index = menu_index
end
def start
super
create_menu_background
@gold_window = Window_AcInGold.new(0, 360)
@status_window = Window_AcIn.new(62, 0)
if AcIn::DRAW_MORE == true
@status_more_window = Window_AcInMore.new(0, 0)
@playtime_window = Window_Playtime.new(160, 360)
end
end
def terminate
super
dispose_menu_background
@gold_window.dispose
@status_window.dispose
if AcIn::DRAW_MORE == true
@status_more_window.dispose
@playtime_window.dispose
end
end
def update
super
update_menu_background
@gold_window.update
@status_window.update
if AcIn::DRAW_MORE == true
@status_more_window.update
@playtime_window.update
end
update_command_selection
end
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
Sound.play_decision
$scene = AcIn::STATUS_SCENE.new
elsif Input.trigger?(Input::RIGHT)
Sound.play_cursor
$scene = AcIn::ACIN_R.new
elsif Input.trigger?(Input::LEFT)
Sound.play_cursor
$scene = AcIn::ACIN_L.new
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_ActorInfos
#------------------------------------------------------------------------------
# Window zu den Infos
#==============================================================================
class Window_AcIn < Window_Selectable
def initialize(x, y)
super(x, y, 452, 352)
@bg_image = Cache.picture('FF9_MenuBar')
@sprite_last_draw_x = 0
@sprite_inc_x = 1
@intern_frame_count = 0
self.opacity = 0
self.z = 99
self.active = false
self.index = -1
refresh
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
draw_background_windows
for actor in $game_party.members
x = 104
y = actor.index * 80
y_offset = 6
draw_background_window(0, y)
draw_actor_face(actor, 19, y + 2, 73)
draw_actor_name(actor, x, y + y_offset)
draw_actor_class(actor, x + 125, y + y_offset)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_hp(actor, x, ((y) + (WLH * 2) - 5))
draw_actor_mp(actor, x + 125, ((y) + (WLH * 2) - 5))
end
end
#--------------------------------------------------------------------------
# Draw background windows
#--------------------------------------------------------------------------
def draw_background_windows
self.contents.blt(0, 0, @bg_image, @bg_image.rect)
self.contents.blt(0, 80, @bg_image, @bg_image.rect)
self.contents.blt(0, 160, @bg_image, @bg_image.rect)
self.contents.blt(0, 240, @bg_image, @bg_image.rect)
end
#--------------------------------------------------------------------------
# Draw background window (single)
#--------------------------------------------------------------------------
def draw_background_window(x, y)
self.contents.blt(x, y, @bg_image, @bg_image.rect)
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_ActorInfosGold
#------------------------------------------------------------------------------
# Goldwindow (eigentlich nicht nötig)
#==============================================================================
class Window_Base
#--------------------------------------------------------------------------
# Get Gold Color (zu verwenden mit "gold_color")
#--------------------------------------------------------------------------
def gold_color
return text_color(21)
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
class Window_AcInGold < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 32)
self.back_opacity = 0
refresh
end
def refresh
self.contents.clear
draw_icon(205, 4, 0)
draw_currency_value($game_party.gold, 4, 0, 120)
end
def draw_currency_value(value, x, y, width)
cx = contents.text_size(Vocab::gold).width
self.contents.font.color = normal_color
self.contents.draw_text(x, y, width-cx-2, WLH, value, 2)
self.contents.font.color = gold_color
self.contents.draw_text(x, y, width, WLH, Vocab::gold, 2)
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_ActorInfosMore
#------------------------------------------------------------------------------
# Window für mehr Infos
#==============================================================================
class Window_AcInMore < Window_Selectable
def initialize(x, y)
super(x, y, 544, 416)
self.opacity = 0
self.z = 99
self.active = false
self.index = -1
refresh
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
x = 380
y = actor.index * 80
y_offset = 6
draw_actor_state(actor, x , y + y_offset)
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_ActorInfosMore Playtime
#------------------------------------------------------------------------------
# Window für mehr die Spielzeit
#==============================================================================
class Window_Playtime < Window_Base
def initialize(x, y)
super(x, y, 230, WLH + 32)
self.back_opacity = 0
refresh
end
def refresh
self.contents.clear
@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)
draw_icon(188, 0, 0)
self.contents.draw_text(6, -4, 192, 32, "Spielzeit: " + text, 2)
end
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Actor Infos als Menü
#------------------------------------------------------------------------------
#==============================================================================
class Scene_Map < Scene_Base
def call_menu
if $game_temp.menu_beep
Sound.play_decision
$game_temp.menu_beep = false
end
$game_temp.next_scene = nil
$scene = AcIn::MENU_SCENE.new
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
Item Addon V1.0:
###############################################################################
#----------------------------------------------------PDM's Actor Infos: Items----------------------------------------------------#
# Version: 1.0 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
#==============================================================================
# Scene_ActorInfosItems
#------------------------------------------------------------------------------
# Scene zu den Items
#==============================================================================
class Scene_AcInItems < Scene_Base
def start
super
create_menu_background
@viewport = Viewport.new(0, 0, 544, 416)
@help_window = Window_Help.new
@help_window.viewport = @viewport
@item_window = Window_AcInItem.new(0, 56, 544, 360)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.active = false
@target_window = Window_MenuStatus.new(0, 0)
hide_target_window
end
def terminate
super
dispose_menu_background
@viewport.dispose
@help_window.dispose
@item_window.dispose
@target_window.dispose
end
def return_scene
$scene = Scene_Zwischen.new
end
def update
super
update_menu_background
@help_window.update
@item_window.update
@target_window.update
if @item_window.active
update_item_selection
elsif @target_window.active
update_target_selection
end
end
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
@item = @item_window.item
if @item != nil
$game_party.last_item_id = @item.id
end
if $game_party.item_can_use?(@item)
Sound.play_decision
determine_item
else
Sound.play_buzzer
end
end
end
def determine_item
if @item.for_friend?
show_target_window(@item_window.index % 2 == 0)
if @item.for_all?
@target_window.index = 99
else
if $game_party.last_target_index < @target_window.item_max
@target_window.index = $game_party.last_target_index
else
@target_window.index = 0
end
end
else
use_item_nontarget
end
end
def update_target_selection
if Input.trigger?(Input::B)
Sound.play_cancel
if $game_party.item_number(@item) == 0
@item_window.refresh
end
hide_target_window
elsif Input.trigger?(Input::C)
if not $game_party.item_can_use?(@item)
Sound.play_buzzer
else
determine_target
end
end
end
def determine_target
used = false
if @item.for_all?
for target in $game_party.members
target.item_effect(target, @item)
used = true unless target.skipped
end
else
$game_party.last_target_index = @target_window.index
target = $game_party.members[@target_window.index]
target.item_effect(target, @item)
used = true unless target.skipped
end
if used
use_item_nontarget
else
Sound.play_buzzer
end
end
def show_target_window(right)
@item_window.active = false
width_remain = 544 - @target_window.width
@target_window.x = right ? width_remain : 0
@target_window.visible = true
@target_window.active = true
if right
@viewport.rect.set(0, 0, width_remain, 416)
@viewport.ox = 0
else
@viewport.rect.set(@target_window.width, 0, width_remain, 416)
@viewport.ox = @target_window.width
end
end
def hide_target_window
@item_window.active = true
@target_window.visible = false
@target_window.active = false
@viewport.rect.set(0, 0, 544, 416)
@viewport.ox = 0
end
def use_item_nontarget
Sound.play_use_item
$game_party.consume_item(@item)
@item_window.draw_item(@item_window.index)
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
elsif @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$scene = Scene_Map.new
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_ActorInfosItems
#------------------------------------------------------------------------------
# Window zu Items
#==============================================================================
class Window_AcInItem < Window_Selectable
def initialize(x, y, width, height)
super(x, y, width, height)
@column_max = 8
self.windowskin = Cache.system(AcIn::WINDOWSKIN)
self.back_opacity = AcIn::ITEM_OPACITY
self.index = 0
refresh
end
def item
return @data[self.index]
end
def include?(item)
return false if item == nil
if $game_temp.in_battle
return false unless item.is_a?(RPG::Item)
end
return true
end
def enable?(item)
return $game_party.item_can_use?(item)
end
def refresh
@data = []
for item in $game_party.items
next unless include?(item)
@data.push(item)
if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
self.index = @data.size - 1
end
end
@data.push(nil) if include?(nil)
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
item = @data[index]
if item != nil
number = $game_party.item_number(item)
enabled = enable?(item)
rect.width -= 2
draw_item_name2(item, rect.x, rect.y, enabled)
#self.contents.draw_text(rect, sprintf("%2d", number), 2)
end
end
def update_help
@help_window.set_text(item == nil ? "" : item.name + ":" + item.description)
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Scene_Zwischen
#------------------------------------------------------------------------------
# Zwischenscene
#==============================================================================
class Scene_Zwischen < Scene_Base
def start
super
create_menu_background
@help_window = Window_Help.new
@help_window.set_text(" " + Vocab::item)
@item_window = Window_Zwischen.new(0, 56, 544, 360)
end
def terminate
super
dispose_menu_background
@help_window.dispose
@item_window.dispose
end
def return_scene
$scene = Scene_Map.new
end
def update
super
update_menu_background
@help_window.update
@item_window.update
update_item_selection
end
def update_item_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
$scene = AcIn::ITEM_SCENE.new
elsif Input.trigger?(Input::RIGHT)
Sound.play_cursor
$scene = AcIn::ITEM_R.new
elsif Input.trigger?(Input::LEFT)
Sound.play_cursor
$scene = AcIn::ITEM_L.new
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_Zwischen
#------------------------------------------------------------------------------
# Zwischenwindow
#==============================================================================
class Window_Zwischen < Window_Base
def initialize(x, y, width, height)
super(x, y, width, height)
self.windowskin = Cache.system(AcIn::WINDOWSKIN)
self.back_opacity = AcIn::ITEM_OPACITY
self.contents.draw_text(0, 0, 300, WLH, AcIn::ITEM_TEXT)
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
#==============================================================================
# Window_Base Add
#------------------------------------------------------------------------------
# Add
#==============================================================================
class Window_Base < Window
def draw_item_name2(item, x, y, enabled = true)
if item != nil
draw_icon(item.icon_index, x, y, enabled)
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
Status Addon V1.0:
###############################################################################
#----------------------------------------------------PDM's Actor Infos: Items----------------------------------------------------#
# Version: 1.0 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
if AcIn::USE == true
#==============================================================================
# Scene_Actor Infos Status
#------------------------------------------------------------------------------
# Addon zum durchschalten in der Status scene (hoch runter, statt Tasten R und L)
#==============================================================================
class Scene_Status < Scene_Base
def return_scene
$scene = AcIn::MENU_SCENE.new
end
def update
update_menu_background
@status_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::RIGHT)
Sound.play_cursor
$scene = AcIn::R_SCENE_ST.new
elsif Input.trigger?(Input::LEFT)
Sound.play_cursor
$scene = AcIn::L_SCENE_ST.new
elsif Input.trigger?(Input::DOWN)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::UP)
Sound.play_cursor
prev_actor
end
super
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
##########################################
end
##########################################
Skill Addon V0.9:
###############################################################################
#----------------------------------------------------PDM's Actor Infos: Items----------------------------------------------------#
# Version: 0.9 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
if AcIn::USE == true
#==============================================================================
# Scene_Actor Infos Skill
#------------------------------------------------------------------------------
# Addon zum durchschalten in der Skill scene (hoch runter, statt Tasten R und L)
#==============================================================================
class Scene_Skill < Scene_Base
def return_scene
$scene = AcIn::MENU_SCENE.new
end
def update_skill_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::DOWN)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::UP)
Sound.play_cursor
prev_actor
elsif Input.trigger?(Input::C)
@skill = @skill_window.skill
if @skill != nil
@actor.last_skill_id = @skill.id
end
if @actor.skill_can_use?(@skill)
Sound.play_decision
determine_skill
else
Sound.play_buzzer
end
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
##########################################
end
##########################################
Equip Addon V1.0:
###############################################################################
#----------------------------------------------------PDM's Actor Infos: Items----------------------------------------------------#
# Version: 1.0 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
if AcIn::USE == true
#==============================================================================
# Scene_Actor Infos Skill
#------------------------------------------------------------------------------
# Addon zum durchschalten in der Skill scene (hoch runter, statt Tasten R und L)
#==============================================================================
class Scene_Equip < Scene_Base
def return_scene
$scene = AcIn::MENU_SCENE.new
end
def update_equip_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::RIGHT)
Sound.play_cursor
$scene = AcIn::STATUS_SCENE.new
elsif Input.trigger?(Input::LEFT)
Sound.play_cursor
$scene = AcIn::R_SCENE_ST.new
elsif Input.trigger?(Input::DOWN)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::UP)
Sound.play_cursor
prev_actor
elsif Input.trigger?(Input::C)
if @actor.fix_equipment
Sound.play_buzzer
else
Sound.play_decision
@equip_window.active = false
@item_window.active = true
@item_window.index = 0
end
end
end
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
##########################################
end
##########################################
End Addon V1.0:
###############################################################################
#----------------------------------------------------PDM's Actor Infos--------------------------------------------------------------#
# Version: 1.0 #
# Letzes Update: 24.08.2010 #
# Gescriptet von PDM #
###############################################################################
#==============================================================================
# Anpassen der Scripts
#==============================================================================
if AcIn::USE == true
#..............................................................................
class Scene_End < Scene_Base
def update
super
update_menu_background
@command_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::RIGHT)
Sound.play_cursor
$scene = AcIn::END_R.new
elsif Input.trigger?(Input::LEFT)
Sound.play_cursor
$scene = AcIn::END_L.new
elsif Input.trigger?(Input::C)
case @command_window.index
when 0
command_to_title
when 1
command_shutdown
when 2
command_cancel
end
end
end
def return_scene
$scene = Scene_Map.new
end
#..............................................................................
end
#..............................................................................
#--------------------------------------------------------------------------
end
#--------------------------------------------------------------------------
Demo
Downloadlink (http://www.file-upload.net/download-2776196/PDM-s-Actor-Infos.exe.html)
Nachwort
Meinungen erwünscht!
Bugs bitte melden!