#=============================================================================== # Quest Log System # Author game_guy # Version 3.0 #------------------------------------------------------------------------------- # Intro: # A script that keeps track of quests you obtain and complete. # # Features: # Marks quest names with a yellow color if they're completed # Easy to setup one quest # Be able to use a fairly long description # Be able to display a picture # Easy to add and complete a quest # More compatible than earlier versions # # Instructions: # Scroll down a bit until you see # Being Config. Follow the instructions there. # Scroll below that and you'll see Begin Quest Setup. Follow the steps there. # # Script Calls: # Quest.add(id) ~ Adds the quest(id) to the parties quests. # Quest.take(id) ~ Takes the quest(id) from the party. # Quest.complete(id) ~ Makes the quest(id) completed. # Quest.completed?(id) ~ Returns true if the quest(id) is completed. # Quest.has?(id) ~ Returns true if the party has quest(id). # # Credits: # game_guy ~ for making it # Beta Testers ~ Sally and Landith # Blizzard ~ Small piece of code I borrowed from his bestiary #=============================================================================== module GameGuy #================================================== # Begin Config # UsePicture ~ true means it'll show pictures in # the quests, false it wont. #================================================== UsePicture = true def self.qreward(id) case id #================================================== # Quest Reward # Use when x then return "Reward" # x = id, Reward = reward in quotes #================================================== when 1 then return "100 Gold" when 2 then return "3 Potions" when 3 then return "Strength Ring" end return "????" end def self.qpicture(id) case id #================================================== # Quest Picture # Use when x then return "picture" # x = id, picture = picutre name in quotes #================================================== when 1 then return "ghost" end return nil end def self.qname(id) case id #================================================== # Quest Name # Use when x then return "name" # x = id, name = quest name in quotes #================================================== when 1 then return "Village Hunt" when 2 then return "Pay Tab" when 3 then return "Hunting Knife" end return "" end def self.qlocation(id) case id #================================================== # Quest Location # Use when x then return "location" # x = id, location = location in quotes #================================================== when 1 then return "Arton Woods" when 2 then return "Eeka" when 3 then return "Eeka" end return "????" end def self.qdescription(id) case id #================================================== # Quest Description # Use when x then return "description" # x = id, description = quest description in quotes #================================================== when 1 then return "Capture 10 animals and bring back the meat." when 2 then return "Bring gold to Jarns Defense to pay her tab." when 3 then return "Go get Kip a hunting knife from Eeka." end return "" end end module Quest def self.add(id) $game_party.add_quest(id) end def self.take(id) $game_party.take_quest(id) end def self.complete(id) $game_party.complete(id) end def self.completed?(id) return $game_party.completed?(id) end def self.has?(id) return $game_party.has_quest?(id) end end class Game_Party attr_accessor :quests attr_accessor :completed alias gg_quests_lat initialize def initialize @quests = [] @completed = [] gg_quests_lat end def add_quest(id) unless @quests.include?(id) @quests.push(id) end end def completed?(id) return @completed.include?(id) end def complete(id) unless @completed.include?(id) if @quests.include?(id) @completed.push(id) end end end def has_quest?(id) return @quests.include?(id) end def take_quest(id) @quests.delete(id) @completed.delete(id) end end class Scene_Quest def main @quests = [] for i in $game_party.quests @quests.push(GameGuy.qname(i)) end @map = Spriteset_Map.new @quests2 = [] for i in $game_party.quests @quests2.push(i) end @quests.push("No Quests") if @quests.size < 1 @quests_window = Window_Command.new(160, @quests) @quests_window.height = 480 @quests_window.back_opacity = 110 Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end @quests_window.dispose @quest_info.dispose if @quest_info != nil @map.dispose end def update @quests_window.update if @quests_window.active update_quests return end if @quest_info != nil update_info return end end def update_quests if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Menu.new return end if Input.trigger?(Input::C) $game_system.se_play($data_system.decision_se) @quest_info = Window_QuestInfo.new(@quests2[@quests_window.index]) @quest_info.back_opacity = 110 @quests_window.active = false return end end def update_info if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @quests_window.active = true @quest_info.dispose @quest_info = nil return end end end class Window_QuestInfo < Window_Base def initialize(quest) super(160, 0, 480, 480) self.contents = Bitmap.new(width - 32, height - 32) @quest = quest refresh end def refresh self.contents.clear if GameGuy::UsePicture pic = GameGuy.qpicture(@quest) bitmap = RPG::Cache.picture(GameGuy.qpicture(@quest)) if pic != nil rect = Rect.new(0, 0, bitmap.width, bitmap.height) if pic != nil self.contents.blt(480-bitmap.width-32, 0, bitmap, rect) if pic != nil end self.contents.font.color = system_color self.contents.draw_text(0, 0, 480, 32, "Quest:") self.contents.font.color = normal_color self.contents.draw_text(0, 32, 480, 32, GameGuy.qname(@quest)) self.contents.font.color = system_color self.contents.draw_text(0, 64, 480, 32, "Reward:") self.contents.font.color = normal_color self.contents.draw_text(0, 96, 480, 32, GameGuy.qreward(@quest)) self.contents.font.color = system_color self.contents.draw_text(0, 128, 480, 32, "Location:") self.contents.font.color = normal_color self.contents.draw_text(0, 160, 480, 32, GameGuy.qlocation(@quest)) self.contents.font.color = system_color self.contents.draw_text(0, 192, 480, 32, "Completion:") self.contents.font.color = normal_color if $game_party.completed.include?(@quest) self.contents.font.color = crisis_color self.contents.draw_text(0, 224, 480, 32, "Completed") else self.contents.font.color = normal_color self.contents.draw_text(0, 224, 480, 32, "In Progress") end self.contents.font.color = system_color self.contents.draw_text(0, 256, 480, 32, "Description:") self.contents.font.color = normal_color text = self.contents.slice_text(GameGuy.qdescription(@quest), 480) text.each_index {|i| self.contents.draw_text(0, 288 + i*32, 480, 32, text[i])} end end class Bitmap def slice_text(text, width) words = text.split(' ') return words if words.size == 1 result, current_text = [], words.shift words.each_index {|i| if self.text_size("#{current_text} #{words[i]}").width > width result.push(current_text) current_text = words[i] else current_text = "#{current_text} #{words[i]}" end result.push(current_text) if i >= words.size - 1} return result end end