Kod:
#===============================================================================
# Thieffer's QuestLog
# version 1.0
# by Thieffer 09.05.2009
#===============================================================================
#===============================================================================
# INSTRUKCJE
#===============================================================================
# Aby włączyć dziennik zadań należy wywołać skrypt:
# $scene = Scene_QuestLog.new
# Zadania powinny być wcześniej zdefiniowane wg wzoru:
# $quest= ["nazwa", poziom, "grafika", "treść"]
# gdzie zamiast:
# $quest --> możesz wpisać co zechcesz (nie będzie wyświetlane)
# "nazwa" --> nazwa zadania (będzie wyświetlana)
# poziom --> liczba od 1 do 5 (poziom trudności)
# "grafika" --> nazwa pliku zawierającego obrazek o wymiarach 400px na 100px (obrazek przedstawiający scenkę z zadania)
# "treść" --> treść zadania
# Konfiguracja:
# $PICTURE_DIFFICULTY = true/false
# (jeśli true, to poziom trudności będzie przedstawiony
# za pomocą obrazków; jeśli false - za pomocą tekstu)
# Obrazki muszą mieć nazwę: quest_difficulty1, quest_difficulty2 itd. (max 5) oraz rozmiary 125px na 48px.
# Tekst możesz edytować w zmiennych $QD1, $QD2 itd.
# $PICTURE_DESCRIPTION = true/false
# (jeśli true, to w opisie zadania, pojawi się obrazek o wymiarach 400px na 100px;
# jeśli false - brak obrazka)
# $MAP_AS_BACKGROUND = true/false
# (jeśli true, to w tle okienek widać mapę, na której jest bohater oraz podczas
# wciśnięcia ESC pojawia nam się mapa; jeśli false - czarne tło oraz podczas
# wciśnięcia ESC pojawia nam się Menu (opcjonalnie Scene_Menu.new))
# Obsługa:
# Dodawanie zadania:
# $game_party.add_quest($quest)
# $quest --> to nazwa "robocza" zadania (ta, która nie jest wyświetlana)
# Ukończenie zadania:
# $game_party.complete_quest($quest)
# Usunięcie zadania:
# $game_party.remove_quest($quest)
# Warunek - czy zadanie jest wykonane?
# $game_party.is_quest_completed?($quest)
#===============================================================================
# U W A G A ---> skrypt wymaga ATP(Advanced Text Paragrapher) V1.0 by Samo, The thief
#===============================================================================
# START CONFIG
$QD1 = "Bardzo Łatwy"
$QD2 = "Łatwy"
$QD3 = "Średni"
$QD4 = "Trudny"
$QD5 = "Bardzo Trudny"
$PICTURE_DIFFICULTY = true
$PICTURE_DESCRIPTION = true
$MAP_AS_BACKGROUND = true
# END CONFIG
#===============================================================================
# Game_Party
#===============================================================================
class Game_Party
alias :old_initialize :initialize
def initialize
old_initialize
@quests = []
@completed_quests = []
end
#-----------------------------------------------------------------------
# Dodawanie zadania.
#-----------------------------------------------------------------------
def add_quest(quest)
@quests.push(quest) if not @quests.include?(quest)
end
#-----------------------------------------------------------------------
# Ukończenie zadania.
#-----------------------------------------------------------------------
def complete_quest(quest)
if @quests.include?(quest) and not @completed_quests.include?(quest)
@completed_quests.push(quest)
@quests.delete(quest)
end
end
#-----------------------------------------------------------------------
# Usuwanie zadania.
#-----------------------------------------------------------------------
def remove_quest(quest)
@quests.delete(quest) if @quests.include?(quest)
end
#-----------------------------------------------------------------------
# Warunek - czy zadanie jest ukończone?
#-----------------------------------------------------------------------
def is_quest_completed?(quest)
if @completed_quests.include?(quest)
return true
end
return false
end
#-----------------------------------------------------------------------
# Metoda zwraca nazwę zadania.
#-----------------------------------------------------------------------
def quest_name(quest)
return quest[0]
end
#-----------------------------------------------------------------------
# Metoda zwraca poziom trudności zadania.
#-----------------------------------------------------------------------
def quest_difficulty(quest)
case quest[1]
when 1
$QD1
when 2
$QD2
when 3
$QD3
when 4
$QD4
when 5
$QD5
end
end
#-----------------------------------------------------------------------
# Metoda zwraca nazwę pliku z obrazkiem poziomu trudności zadania (125px na 48px).
#-----------------------------------------------------------------------
def quest_picture_difficulty(quest)
case quest[1]
when 1
"quest_difficulty1"
when 2
"quest_difficulty2"
when 3
"quest_difficulty3"
when 4
"quest_difficulty4"
when 5
"quest_difficulty5"
end
end
#-----------------------------------------------------------------------
# Metoda zwraca nazwę pliku z obrazkiem zadania (400px na 100px).
#-----------------------------------------------------------------------
def quest_picture(quest)
return quest[2]
end
#-----------------------------------------------------------------------
# Metoda zwraca treść zadania.
#-----------------------------------------------------------------------
def quest_description(quest)
return quest[3]
end
#-----------------------------------------------------------------------
# Metoda zwraca zadania do wykonania.
#-----------------------------------------------------------------------
def quests
return @quests
end
#-----------------------------------------------------------------------
# Metoda zwraca zadania ukończone.
#-----------------------------------------------------------------------
def completed_quests
return @completed_quests
end
#-----------------------------------------------------------------------
end
#===============================================================================
# Window_QuestName
#===============================================================================
class Window_QuestName < Window_Base
def initialize(quest)
super(20, 20, 450, 100)
self.contents = Bitmap.new(width - 32, height - 32)
self.z = 101
self.back_opacity = 255
@quest = quest
refresh
end
#-----------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = Color.new(244,197,43,255)
self.contents.font.size = 23
self.contents.draw_text(0,0,418,68,$game_party.quest_name(@quest),1)
end
#-----------------------------------------------------------------------
end
#===============================================================================
# Window_QuestDifficulty
#===============================================================================
class Window_QuestDifficulty < Window_Base
def initialize(quest)
super(450, 30, 170, 80)
self.contents = Bitmap.new(width - 32, height - 32)
self.z = 100
self.back_opacity = 230
@quest = quest
refresh
end
#-----------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = Color.new(60,170,25,255)
if $PICTURE_DIFFICULTY
self.contents.blt(13, 0, RPG::Cache.picture($game_party.quest_picture_difficulty(@quest)), Rect.new(0, 0, 125, 48))
else
self.contents.draw_text(20,0,118,48,$game_party.quest_difficulty(@quest),1)
end
end
#-----------------------------------------------------------------------
end
#===============================================================================
# Window_QuestDescription
#===============================================================================
class Window_QuestDescription < Window_Base
def initialize(quest)
super(40, 110, 580, 350)
self.contents = Bitmap.new(width - 32, height - 32)
self.z = 99
self.back_opacity = 230
@quest = quest
refresh
end
#-----------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = 18
# wykorzystanie ATP
paragraph = str_paragraph($game_party.quest_description(@quest),518)
if $PICTURE_DESCRIPTION
self.contents.blt(74,0, RPG::Cache.picture($game_party.quest_picture(@quest)), Rect.new(0,0,400,100))
draw_paragraph(30,16,518,202, paragraph)
else
draw_paragraph(30,-116,518,318, paragraph)
end
end
#-----------------------------------------------------------------------
end
#===============================================================================
# Scene_QuestLog
#===============================================================================
class Scene_QuestLog
def initialize
@quests = $game_party.quests
@completed_quests = $game_party.completed_quests
@quests_names = []
@completed_quests_names = []
if @quests.size > 0
for i in 0..(@quests.size-1)
@quests_names.push @quests[i][0]
end
else
@quests_names.push "Brak zadań"
end
if @completed_quests.size > 0
for k in 0..(@completed_quests.size-1)
@completed_quests_names.push @completed_quests[k][0]
end
else
@completed_quests_names.push "Brak ukończonych zadań"
end
end
#-----------------------------------------------------------------------
def main
@command_window = Window_Command.new(210, ["Aktualne zadania", "Ukończone zadania"])
@quests_command_window = Window_Command.new(220, @quests_names)
@completed_quests_command_window = Window_Command.new(220, @completed_quests_names)
@quests_command_window.active = false
@quests_command_window.visible = false
@completed_quests_command_window.active = false
@completed_quests_command_window.visible = false
@command_window.x = 640 - @command_window.width
@command_window.y = 50
@command_window.back_opacity = 190
@quests_command_window.x = 640 - @quests_command_window.width
@quests_command_window.y = 50
@quests_command_window.height = 200
@quests_command_window.back_opacity = 190
@completed_quests_command_window.x = 640 - @completed_quests_command_window.width
@completed_quests_command_window.y = 50
@completed_quests_command_window.height = 200
@completed_quests_command_window.back_opacity = 190
if $MAP_AS_BACKGROUND
@spriteset = Spriteset_Map.new
end
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@command_window.dispose
@quests_command_window.dispose
@completed_quests_command_window.dispose
if $MAP_AS_BACKGROUND
@spriteset.dispose
end
end
#-----------------------------------------------------------------------
def update
@command_window.update
@quests_command_window.update
@completed_quests_command_window.update
if $MAP_AS_BACKGROUND
@spriteset.update
end
if @command_window.active
update_command
return
end
if @quests_command_window.active
update_quests
return
end
if @completed_quests_command_window.active
update_completed_quests
return
end
if @quests_mode
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@quest_name_window.dispose
@quest_difficulty_window.dispose
@quest_description_window.dispose
@quests_command_window.active = true
@quests_command_window.visible = true
@quests_command_window.index = @index
end
return
end
if @completed_quests_mode
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@quest_name_window.dispose
@quest_difficulty_window.dispose
@quest_description_window.dispose
@completed_quests_command_window.active = true
@completed_quests_command_window.visible = true
@completed_quests_command_window.index = @index
end
return
end
end
#-----------------------------------------------------------------------
def update_command
if Input.trigger?(Input::B)
if $MAP_AS_BACKGROUND
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
return
else
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(0)
end
end
if Input.trigger?(Input::C)
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@command_window.visible = false
@quests_command_window.active = true
@quests_command_window.visible = true
when 1
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@command_window.visible = false
@completed_quests_command_window.active = true
@completed_quests_command_window.visible = true
end
end
end
#-----------------------------------------------------------------------
def update_quests
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@command_window.visible = true
@quests_command_window.active = false
@quests_command_window.visible = false
end
if Input.trigger?(Input::C)
if @quests.size > 0
$game_system.se_play($data_system.decision_se)
@index = @quests_command_window.index
quest = @quests[@index]
@quest_name_window = Window_QuestName.new(quest)
@quest_difficulty_window = Window_QuestDifficulty.new(quest)
@quest_description_window = Window_QuestDescription.new(quest)
@quests_command_window.active = false
@quests_command_window.visible = false
@quests_mode = true
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
#-----------------------------------------------------------------------
def update_completed_quests
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@command_window.visible = true
@completed_quests_command_window.active = false
@completed_quests_command_window.visible = false
end
if Input.trigger?(Input::C)
if @completed_quests.size > 0
$game_system.se_play($data_system.decision_se)
@index = @completed_quests_command_window.index
quest = @completed_quests[@index]
@quest_name_window = Window_QuestName.new(quest)
@quest_difficulty_window = Window_QuestDifficulty.new(quest)
@quest_description_window = Window_QuestDescription.new(quest)
@completed_quests_command_window.active = false
@completed_quests_command_window.visible = false
@completed_quests_mode = true
else
$game_system.se_play($data_system.buzzer_se)
end
end
end
#-----------------------------------------------------------------------
end