09-19-2024, 08:09 AM 
	
	
	KDiurnalis VX + ACE
by Kyonides
Introduction
This is a Party's Journal Script!
Tweak this script's CONSTANTS in order to customize the Journal Menu's GUI.
You can find them under the KDiurnalis module.
There are three ways to open the Journal Menu.
KDiurnalis.open!
$scene = KDiurnalis::Scene.new
SceneManager.call(KDiurnalis::Scene)
To learn more about how to use my script
 please read the instructions embedded in it.Note:
The demo includes examples of how you can easily add entry lines to an existing date.
It will automatically create a new date entry if the current date is different from the previous one.
The Scripts - Version 1.0.5
 VX
  			Code:
# * KDiurnalis VX
#   Scripter : Kyonides Arkanthes
#   v 1.0.5 - 2022-06-16
# * Non Plug & Play Script * #
# The Party's Journal Script!
# Tweak this script's CONSTANTS in order to customize the Journal Menu's GUI.
# You can find them under the KDiurnalis module.
# * Overwritten Method * #
# Scene_File#do_load
# * Script Calls * #
# - Open Journal Scene - 2 Options
# $scene = KDiurnalis::Scene.new
# KDiurnalis.open!
# - Add New Journal Page Steps - #
# -- Step 1
# Location: can be replaced with a "String" or :map for current map name.
# $game_party.add_journal_entry("Title", Location)
# -- Step 2
# Add as many Message Windows and lines of text as you wish!
# -- Step 3
# - Stop Using Message Windows as Journal Entry's Page Contents
# Simply stop adding any more message windows!
module KDiurnalis
  LOAD_OPENS_JOURNAL = true
  SHOW_DATES = nil
  # Place the Backdrop in the Pictures directory.
  # Options: "Filename" or nil
  BACKDROP = "backdrop circles blue"
  TITLE = "%s's Journal"
  TITLE_ALIGN = 1
  NO_ENTRY = "No Entry Found"
  module Start
    TITLE = "My New Adventure"
    LOCATION = "Home"
    TEXT = []
    TEXT << "My history begins today."
    TEXT << "I am very excited indeed."
  end
  PAGES_FOUND = "%s Pages Found"
  PAGES_LABEL = "Page %s/%s"
  PAGES_LABEL_ALIGN = 2
  HELP_WIN_OPACITY = 160
  # Window's Coordinates = [X, Y, Width, Height, Opacity]
  LIST_WIN_COORD  = [8, 76, 160, 320, 160]
  DUMMY_WIN_COORD = [176, 76, 360, 84, 160]
  INFO_WIN_COORD  = [176, 76, 360, 320, 160]
  # * End of Setup * #
  extend self
  attr_accessor :use_message_window
  def open!() $scene = Scene.new end
  def after_load_scene
    LOAD_OPENS_JOURNAL ? open! : $scene = Scene_Map.new
  end
  def end_of_entry!() @use_message_window = nil end
  alias :end_of_message! :end_of_entry!
class KDJournal
  def initialize
    @dates = []
    date = KDDate.new
    entry = KDEntry.new(Start::TITLE.dup)
    entry.location = Start::LOCATION
    entry.texts = Start::TEXT.dup
    date.add_entry(entry)
    add_date(date)
  end
  def add_date(date)
    @dates.unshift(date)
    @last_date = date
  end
  def map(&blk) @dates.map(&blk) end
  def last() @dates[-1] end
  def [](pos) @dates[pos] end
  def empty?() @dates.empty? end
  def any?() @dates.any? end
  def size() @dates.size end
  attr_reader :dates, :last_date
end
class KDDate
  def initialize
    time = Time.now
    @year = time.year
    @month = time.month
    @month_name = time.strftime("%b")
    @day = time.mday
    @day_name = time.strftime("%a")
    @title = "#{@month_name} #{@day}, #{@year}"
    @entries = []
  end
  def same_date?(nyear, nmonth, nday)
    nyear == @year && nmonth == @month && nday == @day
  end
  def add_entry(entry)
    @entries << entry
    @last_entry = entry
  end
  attr_reader :year, :month, :month_name, :day, :day_name, :entries, :last_entry
  attr_accessor :title
end
class KDEntry
  def initialize(new_title)
    @title = new_title
    @location = ""
    @texts = []
  end
  attr_reader :title
  attr_accessor :texts, :location
end
class KDHelpWindow < Window_Base
  def initialize
    x, w = 80, Graphics.width
    super(x, 12, w - x * 2, 56)
  end
  def set_text(text, align=0)
    return if text == @text or align == @align
    @text = text
    @align = align
    refresh
  end
  def refresh
    contents.clear
    contents.draw_text(0, 0, width - 32, 24, @text, @align)
  end
end
class KDListWindow < Window_Selectable
  def initialize(wx, wy, w, h)
    @data = []
    super
    @data = $game_party.journal_entries
    refresh
    @index = 0
  end
  def draw_item(index)
    item = @data[index]
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    contents.draw_text(rect, item.title)
  end
  def refresh
    create_contents
    item_max.times{|i| draw_item(i) }
  end
  def update_help() @help_window.index = @index end
  def item_max() @data.any? ? @data.size : 1 end
  def item() @data[@index] end
end
class KDDummyWindow < Window_Base
  def initialize(wx, wy, w, h)
    super
    @index = 0
    refresh
  end
  def refresh
    contents.clear
    date = $game_party.journal_entries[@index]
    pages = sprintf(PAGES_FOUND, date.entries.size)
    contents.draw_text(0, 0, width - 32, 24, pages)
  end
  def index=(pos)
    return if @index == pos
    @index = pos
    refresh
  end
end
class KDInfoWindow < Window_Base
  def show_entries(entry)
    self.visible = true
    @entries = entry
    @total = @entries.size
    @index = @total - 1
    @entry = @entries.last
    refresh
  end
  def refresh
    contents.clear
    w = width - 32
    f = contents.font
    f.bold = true
    contents.draw_text(0, 0, w, 24, @entry.title, 1)
    contents.draw_text(4, 32, w, 24, @entry.location)
    f.bold = false
    ly = 64
    @entry.texts.each do |text|
      contents.draw_text(4, ly, w, 24, text)
      ly += 24
    end
    ly = height - 56
    pages = sprintf(PAGES_LABEL, @index + 1, @entries.size)
    contents.draw_text(0, ly, w, 24, pages, PAGES_LABEL_ALIGN)
  end
  def update
    if Input.trigger?(Input::LEFT)
      return Sound.play_buzzer if @total == 1
      Sound.play_cursor
      @index = (@index - 1) % @total
      @entry = @entries[@index]
      refresh
      return
    elsif Input.trigger?(Input::RIGHT)
      return Sound.play_buzzer if @total == 1
      Sound.play_cursor
      @index = (@index + 1) % @total
      @entry = @entries[@index]
      refresh
    end
  end
  def clear() contents.clear end
end
class Scene < Scene_Base
  def start
    @stage = SHOW_DATES ? :list : :info
    lx, ly, lw, lh, lbo = LIST_WIN_COORD
    dx, dy, dw, dh, dbo = DUMMY_WIN_COORD
    ix, iy, iw, ih, ibo = INFO_WIN_COORD
    @backdrop = Sprite.new
    if BACKDROP
      @backdrop.bitmap = Cache.picture(BACKDROP).dup
    else
      @backdrop.bitmap = SceneManager.background_bitmap
      @backdrop.color.set(16, 16, 16, 128)
    end
    @help_window = KDHelpWindow.new
    text = sprintf(TITLE, $game_party.name)
    @help_window.set_text(text, TITLE_ALIGN)
    @help_window.back_opacity = HELP_WIN_OPACITY
    @list_window = KDListWindow.new(lx, ly, lw, lh)
    @list_window.back_opacity = lbo
    @list_window.visible = SHOW_DATES
    @dummy_window = KDDummyWindow.new(dx, dy, dw, dh)
    @dummy_window.back_opacity = dbo
    @dummy_window.visible = SHOW_DATES
    @list_window.help_window = @dummy_window
    @info_window = KDInfoWindow.new(ix, iy, iw, ih)
    @info_window.back_opacity = ibo
    @info_window.visible = !SHOW_DATES
    open_last_entry
  end
  def open_last_entry
    if SHOW_DATES
      date = @list_window.item
      @info_window.show_entries(date.entries)
    else
      entries = $game_party.journal_entries.map{|date| date.entries }
      entries = entries.flatten
      @info_window.show_entries(entries)
    end
    @stage = :info
  end
  def terminate
    @help_window.dispose
    @list_window.dispose
    @dummy_window.dispose
    @info_window.dispose
    @backdrop.bitmap.dispose
    @backdrop.dispose
  end
  def update
    case @stage
    when :list
      update_list
    when :info
      update_info
    end
  end
  def update_list
    @list_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
      return
    elsif Input.trigger?(Input::C)
      Sound.play_decision
      @dummy_window.visible = false
      open_last_entry
    end
  end
  def update_info
    @info_window.update
    if Input.trigger?(Input::B)
      Sound.play_cancel
      unless SHOW_DATES
        $scene = Scene_Map.new
        return
      end
      @info_window.visible = false
      @info_window.clear
      @dummy_window.visible = true
      @stage = :list
    end
  end
end
end
class Game_Party
  alias :kyon_diurnalis_gm_pty_init :initialize
  def initialize
    kyon_diurnalis_gm_pty_init
    @journal_entries = KDiurnalis::KDJournal.new
  end
  def add_journal_entry(title, place)
    place = $game_map.map_name if place == :map
    date = @journal_entries.last_date
    time = Time.now
    KDiurnalis.use_message_window = true
    entry = KDiurnalis::KDEntry.new(title)
    entry.location = place
    if date and date.same_date?(time.year, time.month, time.day)
      date.add_entry(entry)
    else
      date = KDiurnalis::KDDate.new
      date.add_entry(entry)
      @journal_entries.add_date(date)
    end
  end
  def total_journal_entries?(n)
    @journal_entries.size == n
  end
  def last_journal_entry_pages?(n)
    @journal_entries.last.entries.size == n
  end
  attr_reader :journal_entries
end
class Game_Map
  alias :kyon_diurnalis_gm_map_setup :setup
  def setup(map_id)
    kyon_diurnalis_gm_map_setup(map_id)
    @map_name = load_data("Data/MapInfos.rvdata")[map_id].name
  end
  attr_reader :map_name
end
class Game_Event
  def name() @event.name end
  def name=(text) @event.name = text end
end
class Game_Interpreter
  alias :kyon_diurnalis_gm_int_comm_101 :command_101
  def process_journal_entries
    date = $game_party.journal_entries.last_date
    entry = date.last_entry
    codes = [101, 401]
    command = @list[@index]
    while codes.include?(command.code)
      line = command.parameters[0]
      line.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
      line.gsub!(/\\E\[([0-9]+)\]/i) { $game_map.events[$1.to_i].name }
      entry.texts << line if command.code == 401
      @index += 1
      command = @list[@index]
    end
    KDiurnalis.end_of_message!
    false
  end
  def command_101
    if KDiurnalis.use_message_window
      process_journal_entries
    else
      kyon_diurnalis_gm_int_comm_101
    end
  end
end
class Scene_File
  def do_load
    file = File.open(@savefile_windows[@index].filename, "rb")
    read_save_data(file)
    file.close
    KDiurnalis.after_load_scene
    RPG::BGM.fade(1500)
    Graphics.fadeout(60)
    Graphics.wait(40)
    return if KDiurnalis.show_last_entry
    @last_bgm.play
    @last_bgs.play
  end
end ACE
  			Code:
# * KDiurnalis ACE
#   Scripter : Kyonides Arkanthes
#   v 1.0.5 - 2022-06-16
# * Non Plug & Play Script * #
# The Party's Journal Script!
# Tweak this script's CONSTANTS in order to customize the Journal Menu's GUI.
# You can find them under the KDiurnalis module.
# * Overwritten Method * #
# Scene_Load#on_load_success
# * Script Calls * #
# - Open Journal Scene - 2 Options
# $scene = KDiurnalis::Scene.new
# KDiurnalis.open!
# - Add New Journal Page Steps - #
# -- Step 1
# Location: can be replaced with a "String" or :map for current map name.
# $game_party.add_journal_entry("Title", Location)
# -- Step 2
# Add as many Message Windows and lines of text as you wish!
# -- Step 3
# - Stop Using Message Windows as Journal Entry's Page Contents
# Simply stop adding any more message windows!
module KDiurnalis
  LOAD_OPENS_JOURNAL = true
  SHOW_DATES = nil
  # Place the Backdrop in the Titles1 directory.
  # Options: "Filename" or nil
  BACKDROP = "backdrop circles blue"
  TITLE = "%s's Journal"
  TITLE_ALIGN = 1
  NO_ENTRY = "No Entry Found"
  module Start
    TITLE = "My New Adventure"
    LOCATION = "Home"
    TEXT = []
    TEXT << "My history begins today."
    TEXT << "I am very excited indeed."
  end
  PAGES_FOUND = "%s Pages Found"
  PAGES_LABEL = "Page %s/%s"
  PAGES_LABEL_ALIGN = 2
  HELP_WIN_OPACITY = 160
  # Window's Coordinates = [X, Y, Width, Height, Opacity]
  LIST_WIN_COORD  = [8, 76, 160, 320, 160]
  DUMMY_WIN_COORD = [176, 76, 360, 84, 160]
  INFO_WIN_COORD  = [176, 76, 360, 320, 160]
  # * End of Setup * #
  extend self
  attr_accessor :use_message_window
  def open!() SceneManager.goto(Scene) end
  def after_load_scene
    LOAD_OPENS_JOURNAL ? open! : SceneManager.goto(Scene_Map)
  end
  def end_of_entry!() @use_message_window = nil end
  alias :end_of_message! :end_of_entry!
class KDJournal
  def initialize
    @dates = []
    date = KDDate.new
    entry = KDEntry.new(Start::TITLE.dup)
    entry.location = Start::LOCATION
    entry.texts = Start::TEXT.dup
    date.add_entry(entry)
    add_date(date)
  end
  def add_date(date)
    @dates.unshift(date)
    @last_date = date
  end
  def map(&blk) @dates.map(&blk) end
  def last() @dates[-1] end
  def [](pos) @dates[pos] end
  def empty?() @dates.empty? end
  def any?() @dates.any? end
  def size() @dates.size end
  attr_reader :dates, :last_date
end
class KDDate
  def initialize
    time = Time.now
    @year = time.year
    @month = time.month
    @month_name = time.strftime("%b")
    @day = time.mday
    @day_name = time.strftime("%a")
    @title = "#{@month_name} #{@day}, #{@year}"
    @entries = []
  end
  def same_date?(nyear, nmonth, nday)
    nyear == @year && nmonth == @month && nday == @day
  end
  def add_entry(entry)
    @entries << entry
    @last_entry = entry
  end
  attr_reader :year, :month, :month_name, :day, :day_name, :entries, :last_entry
  attr_accessor :title
end
class KDEntry
  def initialize(new_title)
    @title = new_title
    @location = ""
    @texts = []
  end
  attr_reader :title
  attr_accessor :texts, :location
end
class KDHelpWindow < Window_Base
  def initialize
    x, w = 80, Graphics.width
    super(x, 12, w - x * 2, 52)
  end
  def set_text(text, align=0)
    return if text == @text or align == @align
    @text = text
    @align = align
    refresh
  end
  def refresh
    contents.clear
    draw_text(0, 0, contents_width, 26, @text, @align)
  end
end
class KDListWindow < Window_Selectable
  def initialize(wx, wy, w, h)
    @data = []
    super
    @data = $game_party.journal_entries
    refresh
    select(0)
    activate
  end
  def draw_item(index)
    item = @data[index]
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    draw_text(rect, item.title)
  end
  def refresh
    create_contents
    item_max.times{|i| draw_item(i) }
  end
  def item_max() @data.any? ? @data.size : 1 end
  def item() @data[@index] end
  attr_writer :desc_window
end
class KDDummyWindow < Window_Base
  def initialize(wx, wy, w, h)
    super
    @index = 0
    refresh
  end
  def refresh
    contents.clear
    date = $game_party.journal_entries[@index]
    pages = sprintf(PAGES_FOUND, date.entries.size)
    draw_text(0, 0, contents_width, 24, pages)
  end
  def index=(pos)
    return if @index == pos
    @index = pos
    refresh
  end
end
class KDInfoWindow < Window_Base
  def show_entries(entry)
    self.visible = true
    @entries = entry
    @total = @entries.size
    @index = @total - 1
    @entry = @entries.last
    refresh
  end
  def refresh
    contents.clear
    w = contents_width
    f = contents.font
    f.bold = true
    draw_text(0, 0, w, 24, @entry.title, 1)
    draw_text(4, 32, w, 24, @entry.location)
    f.bold = false
    ly = 64
    @entry.texts.each do |text|
      draw_text(4, ly, w, 24, text)
      ly += 24
    end
    ly = height - 52
    pages = sprintf(PAGES_LABEL, @index + 1, @entries.size)
    draw_text(0, ly, w, 24, pages, PAGES_LABEL_ALIGN)
  end
  def update
    if Input.trigger?(:LEFT)
      return Sound.play_buzzer if @total == 1
      Sound.play_cursor
      @index = (@index - 1) % @total
      @entry = @entries[@index]
      refresh
      return
    elsif Input.trigger?(:RIGHT)
      return Sound.play_buzzer if @total == 1
      Sound.play_cursor
      @index = (@index + 1) % @total
      @entry = @entries[@index]
      refresh
    end
  end
  def clear() contents.clear end
end
class Scene < Scene_Base
  def start
    create_main_viewport
    @stage = SHOW_DATES ? :list : :info
    lx, ly, lw, lh, lbo = LIST_WIN_COORD
    dx, dy, dw, dh, dbo = DUMMY_WIN_COORD
    ix, iy, iw, ih, ibo = INFO_WIN_COORD
    @backdrop = Sprite.new
    if BACKDROP
      @backdrop.bitmap = Cache.title1(BACKDROP).dup
    else
      @backdrop.bitmap = SceneManager.background_bitmap
      @backdrop.color.set(16, 16, 16, 128)
    end
    @help_window = KDHelpWindow.new
    text = sprintf(TITLE, $game_party.name)
    @help_window.set_text(text, TITLE_ALIGN)
    @help_window.back_opacity = HELP_WIN_OPACITY
    @list_window = KDListWindow.new(lx, ly, lw, lh)
    @list_window.back_opacity = lbo
    @list_window.visible = SHOW_DATES
    @dummy_window = KDDummyWindow.new(dx, dy, dw, dh)
    @dummy_window.back_opacity = dbo
    @dummy_window.visible = SHOW_DATES
    @list_window.desc_window = @dummy_window
    @info_window = KDInfoWindow.new(ix, iy, iw, ih)
    @info_window.back_opacity = ibo
    @info_window.visible = !SHOW_DATES
    open_last_entry
  end
  def open_last_entry
    if SHOW_DATES
      date = @list_window.item
      @info_window.show_entries(date.entries)
    else
      entries = $game_party.journal_entries.map{|date| date.entries }
      entries = entries.flatten
      @info_window.show_entries(entries)
    end
    @stage = :info
  end
  def terminate
    super
    @backdrop.bitmap.dispose
    @backdrop.dispose
  end
  def update
    Graphics.update
    Input.update
    case @stage
    when :list
      update_list
    when :info
      update_info
    end
  end
  def update_list
    @list_window.update
    if Input.trigger?(:B)
      Sound.play_cancel
      SceneManager.call(Scene_Map)
      return
    elsif Input.trigger?(:C)
      Sound.play_ok
      @dummy_window.visible = false
      open_last_entry
    end
  end
  def update_info
    @info_window.update
    if Input.trigger?(:B)
      Sound.play_cancel
      unless SHOW_DATES
        SceneManager.call(Scene_Map)
        return
      end
      @info_window.visible = false
      @info_window.clear
      @dummy_window.visible = true
      @stage = :list
    end
  end
end
end
class Game_Party
  alias :kyon_diurnalis_gm_pty_init :initialize
  def initialize
    kyon_diurnalis_gm_pty_init
    @journal_entries = KDiurnalis::KDJournal.new
  end
  def add_journal_entry(title, place)
    place = $game_map.display_name if place == :map
    date = @journal_entries.last_date
    time = Time.now
    KDiurnalis.use_message_window = true
    entry = KDiurnalis::KDEntry.new(title)
    entry.location = place
    if date and date.same_date?(time.year, time.month, time.day)
      date.add_entry(entry)
    else
      date = KDiurnalis::KDDate.new
      date.add_entry(entry)
      @journal_entries.add_date(date)
    end
  end
  def total_journal_entries?(n)
    @journal_entries.size == n
  end
  def last_journal_entry_pages?(n)
    @journal_entries.last.entries.size == n
  end
  attr_reader :journal_entries
end
class Game_Event
  def name() @event.name end
  def name=(text) @event.name = text end
end
class Game_Interpreter
  alias :kyon_diurnalis_gm_int_comm_101 :command_101
  def process_journal_entries
    @index += 1
    date = $game_party.journal_entries.last_date
    entry = date.last_entry
    codes = [101, 401]
    command = @list[@index]
    while codes.include?(command.code)
      if command.code == 401
        line = command.parameters[0]
        line.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
        line.gsub!(/\\E\[([0-9]+)\]/i) { $game_map.events[$1.to_i].name }
        entry.texts << line
      end
      @index += 1
      command = @list[@index]
    end
    @index -= 1
    KDiurnalis.end_of_message!
    true
  end
  def command_101
    if KDiurnalis.use_message_window
      process_journal_entries
    else
      kyon_diurnalis_gm_int_comm_101
    end
  end
end
class Scene_Load
  def on_load_success
    Sound.play_load
    fadeout_all
    $game_system.on_after_load
    KDiurnalis.after_load_scene
  end
endTerms & Conditions
Free as in
 beer for non commercial games.Contact me if you want to go commercial. (There will be an inexpensive charge for this script only.)
"For God has not destined us for wrath, but for obtaining salvation through our Lord Jesus Christ," 1 Thessalonians 5:9
Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
![[Image: SP1-Scripter.png]](https://www.save-point.org/images/userbars/SP1-Scripter.png)
![[Image: SP1-Writer.png]](https://www.save-point.org/images/userbars/SP1-Writer.png)
![[Image: SP1-Poet.png]](https://www.save-point.org/images/userbars/SP1-Poet.png)
![[Image: SP1-PixelArtist.png]](https://www.save-point.org/images/userbars/SP1-PixelArtist.png)
![[Image: SP1-Reporter.png]](https://i.postimg.cc/GmxWbHyL/SP1-Reporter.png)
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!
Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE
	Maranatha!
The Internet might be either your friend or enemy. It just depends on whether or not she has a bad hair day.
![[Image: SP1-Scripter.png]](https://www.save-point.org/images/userbars/SP1-Scripter.png)
![[Image: SP1-Writer.png]](https://www.save-point.org/images/userbars/SP1-Writer.png)
![[Image: SP1-Poet.png]](https://www.save-point.org/images/userbars/SP1-Poet.png)
![[Image: SP1-Reporter.png]](https://i.postimg.cc/GmxWbHyL/SP1-Reporter.png)
My Original Stories (available in English and Spanish)
List of Compiled Binary Executables I have published...
HiddenChest & Roole
Give me a free copy of your completed game if you include at least 3 of my scripts!

Just some scripts I've already published on the board...
KyoGemBoost XP VX & ACE, RandomEnkounters XP, KSkillShop XP, Kolloseum States XP, KEvents XP, KScenario XP & Gosu, KyoPrizeShop XP Mangostan, Kuests XP, KyoDiscounts XP VX, ACE & MV, KChest XP VX & ACE 2016, KTelePort XP, KSkillMax XP & VX & ACE, Gem Roulette XP VX & VX Ace, KRespawnPoint XP, VX & VX Ace, GiveAway XP VX & ACE, Klearance XP VX & ACE, KUnits XP VX, ACE & Gosu 2017, KLevel XP, KRumors XP & ACE, KMonsterPals XP VX & ACE, KStatsRefill XP VX & ACE, KLotto XP VX & ACE, KItemDesc XP & VX, KPocket XP & VX, OpenChest XP VX & ACE

