I am looking for someone to do and or help me edit Tornado Quest Book by storm for my game. I included that script and the RMX-OS save script. I am wanting to add a effect to the script the calls a scene when the call script, $game_party.add_quest(id), is used. The scene will be a small window that displays the information about the quest, ["title","author's name","text","reward"], and also offers the player an option to select either accept quest or cancel the scene. If a player selects accept then the quest is added to the Quest Log, if cancel then it isn't. It will also check rather a players has completed the quest already. If a player has completed the quest already then scene will just display no available quest. When a player completes a quest and returns to the quest giver the script will check if it is complete, if it is then the option accept is replaced by complete. Player selects complete the quest is removed from their quest log and they are rewarded. Much like the interface for most MMORPG's
**Since quests can only be done once so the script will also need to check if a player has already done the quest too, which that data will need to be saved by RMX-OS. Which I can handled and define myself if someone so choices to help me.
The scene it calls will use the current windowskin and be slightly translucent, like in the following picture.
Tornado Quest Book
#==============================================================================
#==============================================================================
# Tornado Quest Book
# Version 1.0
# Author: Storm
# http://rpgxpultimate.darkbb.com
#
# Instructions:
# Place the script above main.
#
# Use $scene = Scene_QuestBook.new to call it.
#
# Use $game_party.add_quest(id) to add quest.
#
# Use $game_party.delete_quest(id) to delete quest.
#
# Use $game_party.finish_quest(id) to finish quest.
#
# Use $game_party.unfinish_quest(id) to unfinish quest.
#
# In condition branch, at the script tab enter $game_party.quest_complete?(id)
# to check if that quest have completed yet.
#
# Features:
# Can custom menus name.
# Opacity configable.
# Customable complete quest color.
# Customable incomplete quest color.
# Able to set return scene.
# Auto replace text in the message.
# Replacements configable.
#
# Compatibility:
# Most of things. (Haven't test to any yet. :P)
#
# Credits and Thanks:
# Storm - For making it.
# Game_Guy - For teach me how to use array.
#
#==============================================================================
#==============================================================================
module TNDqb
#============================================================================
# START CONFIG
#============================================================================
#============================== General Config ==============================
# General Config.
#============================================================================
QB_Name = "Quest Book" #Quest Book name
Author_Name = "Author" #Author name
Title_Name = "Title" #Title name
Reward_Name = "Reward" #Reward name
Status_Name = "Status" #Reward name
Complete = "Complete" #Complete name
Incomplete = "Incomplete" #Incomplete name
Unknown = "???" #Unknown Name
Opacity = 200 #Windows Opacity
Screen = 1 #(0 = black,1 = map,"quoted string" = picture)
Cmp_Color = Color.new(0, 255, 0, 255) #Complete color
Incmp_Color = Color.new(255, 0, 0, 255) #Incomplete Color
Return = Scene_Map #Return Scene
#================================ Ignore Part ===============================
# Ignore Parts Under This.
#============================================================================
Quest = []
#============================ Replacement Config ============================
# Replacements, this will auto replace texts in your message
#
# Replace = ["text","replace"]
# NOTE: Maximum of replaces is 10. Replaces cannot be add or remove.
# Cannot include {name1}, {name2}, {name3} and {name4}
#
# Completed Replacements: (Do not add)
# {name1} = 1st actor's name
# {name2} = 2nd actor's name
# {name3} = 3rd actor's name
# {name4} = 4th actor's name
#============================================================================
Replace1 = ["",""]
Replace2 = ["",""]
Replace3 = ["",""]
Replace4 = ["",""]
Replace5 = ["",""]
Replace6 = ["",""]
Replace7 = ["",""]
Replace8 = ["",""]
Replace9 = ["",""]
Replace10 = ["",""]
#=============================== Quest Config ===============================
# Config quests here.
#
# Quest[id] = ["title","author's name","text","reward"]
#============================================================================
#PART 1
Quest[1] = ["Anemone Refugees","Flol ","Flol wants you to talk to Opsur","10 Gold & 5 Experience"]
Quest[2] = ["Bee Stringers","Hene","Hene has asked you to kill ten bees and bring back their stringers as proof","4 Gold & 10 Experience"]
Quest[3] = ["Camellia Flower","Pogrua","Bring twenty Camellia flowers to Pogrua. The flowers can be found anywhere in the Camellia Plains","2 Gold & 20 Expereince"]
Quest[4] = ["Abonded Chest", "Chest","It is locked, you should take it to Riro.","5 Gold & 10 Experience"]
Quest[5] = ["Supplies Thiefs","Fupp","Find the Fupp's ten missing supply crates.","3 Gold & 15 Experience"]
#============================================================================
# END CONFIG
#============================================================================
end
#====================
# Game_Party
#====================
class Game_Party
attr_accessor :quest
attr_accessor :qComplete
alias tnd_qb_init initialize
def initialize
@quest = []
@qComplete = []
tnd_qb_init
end
def add_quest(id)
msg = TNDqb::Quest[id]
return if msg == nil
unless @quest.include?(id)
@qComplete.delete(id)
@quest.push(id)
end
end
def delete_quest(id)
msg = TNDqb::Quest[id]
return if msg == nil
if @quest.include?(id)
@qComplete.delete(id)
@quest.delete(id)
end
end
def finish_quest(id)
msg = TNDqb::Quest[id]
return if msg == nil
if @quest.include?(id)
@qComplete.push(id)
end
end
def unfinish_quest(id)
msg = TNDqb::Quest[id]
return if msg == nil
if @quest.include?(id)
@qComplete.delete(id)
end
end
def quest_complete?(id)
return if id == nil
msg = TNDqb::Quest[id]
return if msg == nil
if @qComplete.include?(id)
return true
else
return false
end
end
end
#====================
# Bitmap
#====================
class Bitmap
def format_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
#====================
# Window_QuestTitle
#====================
class Window_QuestTitle < Window_Base
def initialize
super(0, 0, 640, 60)
self.back_opacity = TNDqb::Opacity
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 25
cx = contents.text_size(TNDqb::QB_Name).width
self.contents.draw_text(0, 0, cx, 37, TNDqb::QB_Name)
end
end
#====================
# Window_QuestMain
#====================
class Window_QuestMain < Window_Base
def initialize
super(35, 100, 380, 340)
self.back_opacity = TNDqb::Opacity
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
return if @quest_id == nil
msg = TNDqb::Quest[@quest_id]
return if msg == nil
self.contents.clear
self.contents.font.size = 20
t = self.contents.text_size(TNDqb::Title_Name+": ").width
t2 = self.contents.text_size(TNDqb::Author_Name+": ").width
t3 = self.contents.text_size(TNDqb::Reward_Name+": ").width
t4 = self.contents.text_size(TNDqb::Status_Name+": ").width
self.contents.font.color = system_color
self.contents.draw_text(0, 0, self.width, 32, TNDqb::Title_Name+": ")
self.contents.draw_text(0, 32, self.width, 32, TNDqb::Author_Name+": ")
self.contents.draw_text(0, 250, self.width, 32, TNDqb::Reward_Name+": ")
self.contents.draw_text(0, 282, self.width, 32, TNDqb::Status_Name+": ")
self.contents.font.color = normal_color
self.contents.draw_text(t, 0, self.width, 32, msg[0])
self.contents.draw_text(t2, 32, self.width, 32, msg[1])
@text = msg[2]
@text = @text.gsub(TNDqb::Replace1[0], TNDqb::Replace1[1])
@text = @text.gsub(TNDqb::Replace2[0], TNDqb::Replace2[1])
@text = @text.gsub(TNDqb::Replace3[0], TNDqb::Replace3[1])
@text = @text.gsub(TNDqb::Replace4[0], TNDqb::Replace4[1])
@text = @text.gsub(TNDqb::Replace5[0], TNDqb::Replace5[1])
@text = @text.gsub(TNDqb::Replace6[0], TNDqb::Replace6[1])
@text = @text.gsub(TNDqb::Replace7[0], TNDqb::Replace7[1])
@text = @text.gsub(TNDqb::Replace8[0], TNDqb::Replace8[1])
@text = @text.gsub(TNDqb::Replace9[0], TNDqb::Replace9[1])
@text = @text.gsub(TNDqb::Replace10[0], TNDqb::Replace10[1])
actor = $game_party.actors[0]
@text = @text.gsub("{name1}", actor.name)
draw_msg(@text, 0, 64)
if $game_party.qComplete.include?(@quest_id)
self.contents.draw_text(t3, 250, self.width, 32, msg[3])
self.contents.font.color = TNDqb::Cmp_Color
self.contents.draw_text(t4, 282, self.width, 32, TNDqb::Complete)
else
self.contents.draw_text(t3, 250, self.width, 32, TNDqb::Unknown)
self.contents.font.color = TNDqb::Incmp_Color
self.contents.draw_text(t4, 282, self.width, 32, TNDqb::Incomplete)
end
end
def draw_msg(msg, x, y)
text = self.contents.format_text(msg, 380)
text.each_index {|i|self.contents.draw_text(x, y + i*32, 544, 32, text[i])}
end
def set_quest(id)
return if @quest_id == id
@quest_id = id
refresh
end
end
#====================
# Scene_QuestBook
#====================
class Scene_QuestBook
def main
if TNDqb::Screen.is_a?(Integer)
if TNDqb::Screen == 1
@back = Spriteset_Map.new
end
else
@back = Sprite.new
@back.bitmap = RPG::Cache.picture(TNDqb::Screen)
end
#Command window setup
@quest = $game_party.quest
@msg = []
@quest.each {|i|
@msg.push(TNDqb::Quest[i][0])
}
@msg = [""] if @msg.size < 1
#Create command window
@command_window = Window_Command.new(180, @msg)
@command_window.x = 460
@command_window.back_opacity = TNDqb::Opacity
@command_window.height = 420
@command_window.y = 60
j = 0
@quest.each{|i|
if $game_party.qComplete.include?(i)
@command_window.draw_item(j, TNDqb::Cmp_Color)
end
j += 1}
#Make main windows
@title = Window_QuestTitle.new
@main = Window_QuestMain.new
Graphics.transition
loop do
Graphics.update
Input.update
#Update windows and inputs
update
inputUpdate
#Break if scene is not Scene_QuestBook
if $scene != self
break
end
end
Graphics.freeze
#Dispose windows
if TNDqb::Screen == 1
@back.dispose
end
@command_window.dispose
@title.dispose
@main.dispose
end
def command_refresh
@newIndex = @command_window.index
@msg = []
@command_window.dispose
@command_window = nil
@quest.each {|i|
@msg.push(TNDqb::Quest[i][0])
}
@msg = [""] if @msg.size < 1
@command_window = Window_Command.new(180, @msg)
@command_window.x = 460
@command_window.back_opacity = TNDqb::Opacity
@command_window.height = 420
@command_window.y = 60
@command_window.index = @newIndex
j = 0
@quest.each{|i|
if $game_party.qComplete.include?(i)
@command_window.draw_item(j, TNDqb::Cmp_Color)
end
j += 1}
end
def inputUpdate
if Input.trigger?(Input::Key['L'])
#Play Cancel SE
$game_system.se_play($data_system.cancel_se)
#Return to set scene
$scene = TNDqb::Return.new
elsif Input.trigger?(Input::C)
#Play Decision SE
$game_system.se_play($data_system.decision_se)
#Refresh quest data
@main.set_quest(@quest[@command_window.index])
#Goto command_refresh
command_refresh
end
end
def update
#Updates
@command_window.update
@title.update
@main.update
end
end
RMX-OS Save Script
module RMXOS
module Options
SAVE_DATA[Game_Party].push('@quest')
SAVE_DATA[Game_Party].push('@qComplete')
SAVE_DATA[Game_Party].push('@unfinish_quest')
end
end
I am looking for someone to do and or help me edit Tornado Quest Book by storm for my game. I included that script and the RMX-OS save script. I am wanting to add a effect to the script the calls a scene when the call script, $game_party.add_quest(id), is used. The scene will be a small window that displays the information about the quest, ["title","author's name","text","reward"], and also offers the player an option to select either accept quest or cancel the scene. If a player selects accept then the quest is added to the Quest Log, if cancel then it isn't. It will also check rather a players has completed the quest already. If a player has completed the quest already then scene will just display no available quest. When a player completes a quest and returns to the quest giver the script will check if it is complete, if it is then the option accept is replaced by complete. Player selects complete the quest is removed from their quest log and they are rewarded. Much like the interface for most MMORPG's
**Since quests can only be done once so the script will also need to check if a player has already done the quest too, which that data will need to be saved by RMX-OS. Which I can handled and define myself if someone so choices to help me.
The scene it calls will use the current windowskin and be slightly translucent, like in the following picture.
Tornado Quest Book
#============================================================================== #============================================================================== # Tornado Quest Book # Version 1.0 # Author: Storm # http://rpgxpultimate.darkbb.com # # Instructions: # Place the script above main. # # Use $scene = Scene_QuestBook.new to call it. # # Use $game_party.add_quest(id) to add quest. # # Use $game_party.delete_quest(id) to delete quest. # # Use $game_party.finish_quest(id) to finish quest. # # Use $game_party.unfinish_quest(id) to unfinish quest. # # In condition branch, at the script tab enter $game_party.quest_complete?(id) # to check if that quest have completed yet. # # Features: # Can custom menus name. # Opacity configable. # Customable complete quest color. # Customable incomplete quest color. # Able to set return scene. # Auto replace text in the message. # Replacements configable. # # Compatibility: # Most of things. (Haven't test to any yet. :P) # # Credits and Thanks: # Storm - For making it. # Game_Guy - For teach me how to use array. # #============================================================================== #============================================================================== module TNDqb #============================================================================ # START CONFIG #============================================================================ #============================== General Config ============================== # General Config. #============================================================================ QB_Name = "Quest Book" #Quest Book name Author_Name = "Author" #Author name Title_Name = "Title" #Title name Reward_Name = "Reward" #Reward name Status_Name = "Status" #Reward name Complete = "Complete" #Complete name Incomplete = "Incomplete" #Incomplete name Unknown = "???" #Unknown Name Opacity = 200 #Windows Opacity Screen = 1 #(0 = black,1 = map,"quoted string" = picture) Cmp_Color = Color.new(0, 255, 0, 255) #Complete color Incmp_Color = Color.new(255, 0, 0, 255) #Incomplete Color Return = Scene_Map #Return Scene #================================ Ignore Part =============================== # Ignore Parts Under This. #============================================================================ Quest = [] #============================ Replacement Config ============================ # Replacements, this will auto replace texts in your message # # Replace = ["text","replace"] # NOTE: Maximum of replaces is 10. Replaces cannot be add or remove. # Cannot include {name1}, {name2}, {name3} and {name4} # # Completed Replacements: (Do not add) # {name1} = 1st actor's name # {name2} = 2nd actor's name # {name3} = 3rd actor's name # {name4} = 4th actor's name #============================================================================ Replace1 = ["",""] Replace2 = ["",""] Replace3 = ["",""] Replace4 = ["",""] Replace5 = ["",""] Replace6 = ["",""] Replace7 = ["",""] Replace8 = ["",""] Replace9 = ["",""] Replace10 = ["",""] #=============================== Quest Config =============================== # Config quests here. # # Quest[id] = ["title","author's name","text","reward"] #============================================================================ #PART 1 Quest[1] = ["Anemone Refugees","Flol ","Flol wants you to talk to Opsur","10 Gold & 5 Experience"] Quest[2] = ["Bee Stringers","Hene","Hene has asked you to kill ten bees and bring back their stringers as proof","4 Gold & 10 Experience"] Quest[3] = ["Camellia Flower","Pogrua","Bring twenty Camellia flowers to Pogrua. The flowers can be found anywhere in the Camellia Plains","2 Gold & 20 Expereince"] Quest[4] = ["Abonded Chest", "Chest","It is locked, you should take it to Riro.","5 Gold & 10 Experience"] Quest[5] = ["Supplies Thiefs","Fupp","Find the Fupp's ten missing supply crates.","3 Gold & 15 Experience"] #============================================================================ # END CONFIG #============================================================================ end #==================== # Game_Party #==================== class Game_Party attr_accessor :quest attr_accessor :qComplete alias tnd_qb_init initialize def initialize @quest = [] @qComplete = [] tnd_qb_init end def add_quest(id) msg = TNDqb::Quest[id] return if msg == nil unless @quest.include?(id) @qComplete.delete(id) @quest.push(id) end end def delete_quest(id) msg = TNDqb::Quest[id] return if msg == nil if @quest.include?(id) @qComplete.delete(id) @quest.delete(id) end end def finish_quest(id) msg = TNDqb::Quest[id] return if msg == nil if @quest.include?(id) @qComplete.push(id) end end def unfinish_quest(id) msg = TNDqb::Quest[id] return if msg == nil if @quest.include?(id) @qComplete.delete(id) end end def quest_complete?(id) return if id == nil msg = TNDqb::Quest[id] return if msg == nil if @qComplete.include?(id) return true else return false end end end #==================== # Bitmap #==================== class Bitmap def format_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 #==================== # Window_QuestTitle #==================== class Window_QuestTitle < Window_Base def initialize super(0, 0, 640, 60) self.back_opacity = TNDqb::Opacity self.contents = Bitmap.new(width - 32, height - 32) refresh end def refresh self.contents.clear self.contents.font.color = normal_color self.contents.font.size = 25 cx = contents.text_size(TNDqb::QB_Name).width self.contents.draw_text(0, 0, cx, 37, TNDqb::QB_Name) end end #==================== # Window_QuestMain #==================== class Window_QuestMain < Window_Base def initialize super(35, 100, 380, 340) self.back_opacity = TNDqb::Opacity self.contents = Bitmap.new(width - 32, height - 32) refresh end def refresh return if @quest_id == nil msg = TNDqb::Quest[@quest_id] return if msg == nil self.contents.clear self.contents.font.size = 20 t = self.contents.text_size(TNDqb::Title_Name+": ").width t2 = self.contents.text_size(TNDqb::Author_Name+": ").width t3 = self.contents.text_size(TNDqb::Reward_Name+": ").width t4 = self.contents.text_size(TNDqb::Status_Name+": ").width self.contents.font.color = system_color self.contents.draw_text(0, 0, self.width, 32, TNDqb::Title_Name+": ") self.contents.draw_text(0, 32, self.width, 32, TNDqb::Author_Name+": ") self.contents.draw_text(0, 250, self.width, 32, TNDqb::Reward_Name+": ") self.contents.draw_text(0, 282, self.width, 32, TNDqb::Status_Name+": ") self.contents.font.color = normal_color self.contents.draw_text(t, 0, self.width, 32, msg[0]) self.contents.draw_text(t2, 32, self.width, 32, msg[1]) @text = msg[2] @text = @text.gsub(TNDqb::Replace1[0], TNDqb::Replace1[1]) @text = @text.gsub(TNDqb::Replace2[0], TNDqb::Replace2[1]) @text = @text.gsub(TNDqb::Replace3[0], TNDqb::Replace3[1]) @text = @text.gsub(TNDqb::Replace4[0], TNDqb::Replace4[1]) @text = @text.gsub(TNDqb::Replace5[0], TNDqb::Replace5[1]) @text = @text.gsub(TNDqb::Replace6[0], TNDqb::Replace6[1]) @text = @text.gsub(TNDqb::Replace7[0], TNDqb::Replace7[1]) @text = @text.gsub(TNDqb::Replace8[0], TNDqb::Replace8[1]) @text = @text.gsub(TNDqb::Replace9[0], TNDqb::Replace9[1]) @text = @text.gsub(TNDqb::Replace10[0], TNDqb::Replace10[1]) actor = $game_party.actors[0] @text = @text.gsub("{name1}", actor.name) draw_msg(@text, 0, 64) if $game_party.qComplete.include?(@quest_id) self.contents.draw_text(t3, 250, self.width, 32, msg[3]) self.contents.font.color = TNDqb::Cmp_Color self.contents.draw_text(t4, 282, self.width, 32, TNDqb::Complete) else self.contents.draw_text(t3, 250, self.width, 32, TNDqb::Unknown) self.contents.font.color = TNDqb::Incmp_Color self.contents.draw_text(t4, 282, self.width, 32, TNDqb::Incomplete) end end def draw_msg(msg, x, y) text = self.contents.format_text(msg, 380) text.each_index {|i|self.contents.draw_text(x, y + i*32, 544, 32, text[i])} end def set_quest(id) return if @quest_id == id @quest_id = id refresh end end #==================== # Scene_QuestBook #==================== class Scene_QuestBook def main if TNDqb::Screen.is_a?(Integer) if TNDqb::Screen == 1 @back = Spriteset_Map.new end else @back = Sprite.new @back.bitmap = RPG::Cache.picture(TNDqb::Screen) end #Command window setup @quest = $game_party.quest @msg = [] @quest.each {|i| @msg.push(TNDqb::Quest[i][0]) } @msg = [""] if @msg.size < 1 #Create command window @command_window = Window_Command.new(180, @msg) @command_window.x = 460 @command_window.back_opacity = TNDqb::Opacity @command_window.height = 420 @command_window.y = 60 j = 0 @quest.each{|i| if $game_party.qComplete.include?(i) @command_window.draw_item(j, TNDqb::Cmp_Color) end j += 1} #Make main windows @title = Window_QuestTitle.new @main = Window_QuestMain.new Graphics.transition loop do Graphics.update Input.update #Update windows and inputs update inputUpdate #Break if scene is not Scene_QuestBook if $scene != self break end end Graphics.freeze #Dispose windows if TNDqb::Screen == 1 @back.dispose end @command_window.dispose @title.dispose @main.dispose end def command_refresh @newIndex = @command_window.index @msg = [] @command_window.dispose @command_window = nil @quest.each {|i| @msg.push(TNDqb::Quest[i][0]) } @msg = [""] if @msg.size < 1 @command_window = Window_Command.new(180, @msg) @command_window.x = 460 @command_window.back_opacity = TNDqb::Opacity @command_window.height = 420 @command_window.y = 60 @command_window.index = @newIndex j = 0 @quest.each{|i| if $game_party.qComplete.include?(i) @command_window.draw_item(j, TNDqb::Cmp_Color) end j += 1} end def inputUpdate if Input.trigger?(Input::Key['L']) #Play Cancel SE $game_system.se_play($data_system.cancel_se) #Return to set scene $scene = TNDqb::Return.new elsif Input.trigger?(Input::C) #Play Decision SE $game_system.se_play($data_system.decision_se) #Refresh quest data @main.set_quest(@quest[@command_window.index]) #Goto command_refresh command_refresh end end def update #Updates @command_window.update @title.update @main.update end endRMX-OS Save Script
module RMXOS module Options SAVE_DATA[Game_Party].push('@quest') SAVE_DATA[Game_Party].push('@qComplete') SAVE_DATA[Game_Party].push('@unfinish_quest') end endShare this post
Link to post
Share on other sites