Main Menu
  • Welcome to The RPG Maker Resource Kit.

[VXA] Quest Journal 1.0.3

Started by modern algebra, February 19, 2012, 08:01:42 PM

0 Members and 2 Guests are viewing this topic.

Draconis Kenjishiya

Hello. I am a huge fan of this script. It's really helped me organize all my various side-missions and main story changes into a cohesive and understandable form. I have no issues or questions; I merely wanted to congratulate your work.

modern algebra

Thank you! That's really nice to hear.

shadowfox43

Quote from: modern algebra on March 12, 2013, 01:01:06 AM
I think you can do it with the change_reward_status code:


#        change_reward_status(quest_id, value)
#            value : either true or false. If excluded, defaults to true.
#          Totally optional, but this is just a personal switch which you can
#          turn on when the reward is given. You can then make it a condition
#          so you don't reward the players more than once. (see line 180)


For what you want, it would be:

change_reward_status(n, false)

where n is the ID of the quest


That worked. Thanks.

modern algebra


amicable

#179
Hello! I'd just like to say thank you for the very, very handy script.
However, I'm wondering if there's a way that when you open the script page, it's already selected the first quest and you can scroll up and down it directly, rather than having to hit enter to select it first. I've hidden the two bars on the side as best I can, and I want to remove their use as much as possible. Attached is a screenshot of what I've done so far, to understand what I mean.


RockyAmyx

#180
out of curiosity.. would it be possible to edit this in a way that this could also manage a system like star ocean  til the end of time knowledge base, by using the objectives as a "when you find out more about something(people, places, item, spells).

and maybe add a custom category tab for the listed "somethings" above.

and making the IDs like this
Quests = 1XX1 (then next would be 1XX2.. the amount of Xs depends on how many quests you would have
People = 2XX1
Places = 3XX1
Items = 4XX1
Spells = 5XX1

for example.

when 2001

     q[:name]              = "Ryou"
      q[:level]             = 3
      q[:icon_index]        = 7
      q[:description]       = "He woke up in a strange place with only a note in his pocket saying "Live"."
      q[:objectives][0]     = Realizing that he had the power of a god, he felt betrayed by his father who never told him of this power"
      q[:objectives][1]     = "Upon arrival of his Homeland he noticed everything had changed. the land had become dark, and the houses were in rumble. "
      q[:objectives][2]     = "When he approached what he use to call home, he had a vision of a war happening. and the gods told him. "He was dead." confused he set out to discover what really happened."

[MORE QUEST OBJECTIVES TELLING THE ENTIRE STORY OF A "SOMETHING"]

      q[:prime_objectives]  = []
      q[:custom_categories] = [:people]
      q[:banner]            = ""
      q[:banner_hue]        = 0
      q[:client]            = ""
      q[:location]          = ""
      q[:common_event_id]   = 0

of course.. its a bad example story...but its just something i thought of on the top of my head..

But as story would unfold it would tell more about the "something" if necessary.. would that be possible?
       

RockyAmyx


RockyAmyx

^^ well .. i decided to do something else.. i thought maybe it would work .. but ehh.. kept getting stack overflow errors

modern algebra

It would have been possible, but I think you are probably better off to have found a different way.

doctachav

I love this script but there are two things that I would like to be able to do with it.

The first is that I would like a window to appear when a new quest is added with the quest name, description and rewards.
Also, would it be possible to make the objectives of a quest appear with the uncompleted objectives above the completed ones as some quests in my game have a lot of objectives and it is a pain to scroll through all of the completed objectives just to check what I have to do next.

Other than these two small problems I think the script is great and looks brilliant.

Thanks a lot,

Docta Chav

rubydragon44

So, would it be possible for me to make categories manually invisible vs visible then switching them to be visible?
My reason for asking/requesting is, like, say I wanted to categorize quests of different places, like, you've got your Village 2 Quests and your Fire Mountain Quests, etc., but you don't want the Category of Fire Mountain to be visible until Fire Mountain is discovered by the player in the first place.
I tried to use like
if $game_switches[1]
conditions but that didn't work.
So would you be willing to implement this or would you happen to know some IF functions I could add with switches to make this happen?

rellimetep

Modern Algebra you really nailed it on this one mate! Messed around with a few of your scripts now and they've all got the job done perfectly but the level of control offered here is out of this world! I can't imagine how much effort went into the script itself but it's massively appreciated man - thanks a LOT dude!
Courage over fear

modern algebra

Thanks, I'm pleased that you like it!

@rubydragon - it is possible, though not particularly convenient. Firstly, you'd have to set up each category as you would normally. However, in the CATEGORIES array, just put the initial categories.

Then, when you want to reveal new categories, you would need to do something like this in a script call:


gs = $game_system
gs.quest_categories.push(:all)


Replace :all with the symbol for the category you want to add. To remove categories, you would do this:


gs = $game_system
gs.quest_categories.delete(:all)

Kalacious

I found something we could use, or least I could use

Here is a scenario: You walk into an INN, he, the innkeeper, has a series of jobs posted. a, b, c, d (quest id 1-4 respectively). You do all the quests, you collect all the rewards. The jobs are still there, you click on one, say a, he states "thanks again."

What would be awesome is:

is_quests_complete?(id, id, id, id, id ,...) This way we could say if(is_quests_complete?(id, id, id ,...)){ Say something } else { do something }

Now I looked at your quest methods, your creating them on the fly, genius, how ever - is there a way to implement my idea with or with out altering your script?

modern algebra

Well, I suppose you could just change quest_complete? to permit checking more than one quest at the time.

You could do it by adding the following into a new slot, somewhere below the Quest Journal but still above Main:


class Game_Interpreter
  alias maqj_vpedit_checkquest_8ik3 quest_complete?
  def quest_complete?(*args)
    args.each { |id| return false unless maqj_vpedit_checkquest_8ik3(id) }
    return true
  end
end


The code to use it would just be:


quest_complete?(id_1, id_2, id_3, ..., id_n)



Kalacious

thank you, that does exactly what I want!

Kalacious

Sorry for the double post, I tried to manipulate your function to do the same thing for multiple quests when check if they are revealed. how ever I got a game interpreter stack level to deep. Is there a way to say - if multiple quests are revealed, do this? else do that?

Mewgull

I am getting a weird/annoying error when I exit out of the quest journal scene:

Script 'SceneManager' line 66: SecurityError occurred.

Insecure: can't modify array


It's weird because it happens only sometimes (though more often than not to be a concern), and it happens only when I exit out of the quest journal scene. I'm a scripter myself, but I have no idea how to fix this lol any suggestions?

modern algebra

#193
That does sound strange. If you could upload a demo with the error recreated I will take a look. If you're nervous about sharing your main project, then feel free to just recreate the error in a new project and upload that.


@Kalacious - Sorry I missed your post. It should be possible to do the same thing for each of those methods. The error you received sounds like you just did not change the name of the alias. However, the following should work:


class Game_Interpreter
  alias maqj_vpedit_questrevel_7oc4 quest_revealed?
  def quest_revealed?(*args)
    args.each { |id| return false unless maqj_vpedit_questrevel_7oc4(id) }
    return true
  end
end

Mewgull

I thank you for the willing to help, but I seemed to have solved it myself.
The error was caused by the arrangement of my scripts in the script editor. I fiddled around with their positions and it worked. The error hasn't shown up since! Thanks lol :P

Kalacious

Quote from: modern algebra on July 31, 2013, 12:31:44 AM
That does sound strange. If you could upload a demo with the error recreated I will take a look. If you're nervous about sharing your main project, then feel free to just recreate the error in a new project and upload that.


@Kalacious - Sorry I missed your post. It should be possible to do the same thing for each of those methods. The error you received sounds like you just did not change the name of the alias. However, the following should work:


class Game_Interpreter
  alias maqj_vpedit_questrevel_7oc4 quest_revealed?
  def quest_revealed?(*args)
    args.each { |id| return false unless maqj_vpedit_questrevel_7oc4(id) }
    return true
  end
end


Yay Thanks! Question, isnt quest(1).name suppose to give me the name of said quest? if so then you message options of \#{code}, where I do: \#{quest(1).name} doesnt work

Necrofenser

How can i use variables in quest objectives?
I wan't to make something like this:
Quest objective: Kill 5 monsters;
And with every kill, quest objective should update (Kills 1/5, Kills 2/5... Kills 5/5). And when variable KILLS is 5 i will mark this objective as complete (with common event probably).
Right now I don't know how to show variable in quest objectives. So please add this feature, or explain me how to use variables, because I didn't saw anything about this in script comments.

Rogueworld

#197
I just wanted to thank you modern algebra, for this great script. It is by far better than any alternatives I have come across.

Edit: Question removed: Stupid mistakes.

modern algebra

Quote from: Kalacious on August 07, 2013, 11:32:37 PM
Yay Thanks! Question, isnt quest(1).name suppose to give me the name of said quest? if so then you message options of \#{code}, where I do: \#{quest(1).name} doesnt work

Sorry to take so long to respond. I've been absent. Anyway, that method will only work in a regular Script call because the method is defined in Game_Interpreter, not Window_Message. If you want to access the name of a quest from inside a message, you will need to use:

$game_party.quests[1]

@Necrofenser -

You can show the value of a variable in an objective with the code:


\\v[n]


Where n is the ID of the variable. So, if you are recording Kills in variable 4, then you would use:


q[:objectives][0] = "Kills: \\v[4]/5"


As for marking the objective complete, you would have to do that manually by, for instance, checking whenever you update the kills variable and completing it when it equals 5.

Nosleinad

First of all, thanks a lot for sharing this script (again). Inm y humble opinion it's the best of it's kind.

I have found 01 bug and 01 incompability issue (while using a different font type). Here they are:

Bug:

  The :gold and :exp are having it's texts exchanged between each other. The icon and values are working allright, but when i set a reward to be :gold, it writes "XP" in the quest scene, and vice-versa.

Incompability:

I am using a script from zalerinian that allows the exchange of fonts. Everything is working fine (now) in other scenes, but in the quest scene the text is being cutted at the rewards section, even if the text line is small. I will post the zalerinian script and images of this section with the default VLGothic font and my alt Gabrielle font:

Zalerinian Font changer script
module Fonts
Original_Fonts = [ "VL Gothic", "Verdana", "Arial", "Courier New"]

def self.add_font(font_name, bold = false)
return if Font.default_name[0] == font_name
if font_name == "ORIGINAL_FONTS" then
Font.default_name = Original_Fonts
return
end
Font.default_bold = bold
puts "Bold set to " + Font.default_bold.to_s + "!"
Font.default_name.unshift(font_name)
puts "New Font System: " + Font.default_name.to_s + "\n\n"
end

def self.set_size(size)
Font.default_size = size
puts "Font size set to: " + Font.default_size.to_s
end

def self.set_bold(value)
if value == true || value == false
Font.default_bold = value
end
end

def self.remove_first
if Font.default_name.size == 1 then
puts "You should save at least one font, you know."
else
Font.default_name.shift
end
end
end

class Window_Base < Window
def line_height
return Font.default_size
end
end

class Window_Base < Window
alias convert_e_chars convert_escape_characters
def convert_escape_characters(text)
result = text.to_s.clone
result.gsub!(/\\F\[(\w+)\]/i) { Fonts.add_font($1) }
convert_e_chars(result)
end
end


Quest scene with default font


Quest scene with alt font