设为首页收藏本站同能贴吧 切换语言 繁体中文
开启辅助访问 切换到窄版
扫描二维码关注官方公众号
返回列表
+ 发新帖
查看: 95|回复: 0

[转载发布] KDiurnalis VX

[复制链接]
累计送礼:
0 个
累计收礼:
1 个
  • TA的每日心情
    开心
    前天 04:10
  • 签到天数: 209 天

    连续签到: 2 天

    [LV.7]常住居民III

    4446

    主题

    864

    回帖

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    7
    卡币
    22899
    OK点
    16
    推广点
    0
    同能卷
    50
    积分
    28239

    灌水之王

    发表于 3 天前 | 显示全部楼层 |阅读模式
    KDiurnalis VX
    version 1.0.5
    by Kyonides Arkanthes



    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 two ways to open the Journal Menu.
    $scene = KDiurnalis::Scene.new
    KDiurnalis.open!

    To learn more about how to use my script please read the instructions embedded in it.

    Notes:

    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.

    Now it features stuff like automatic substitutions of tags like \n[1] or \e[1]!

    The Script

                    Ruby:       
    # * 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_dateendclass 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 :titleendclass KDEntry  def initialize(new_title)    @title = new_title    @location = ""    @texts = []  end  attr_reader :title  attr_accessor :texts, :locationendclass 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)  endendclass 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] endendclass 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  endendclass 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 endendclass 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  endendendclass 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_entriesendclass 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_nameendclass Game_Event  def name() @event.name end  def name=(text) @event.name = text endendclass 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  endendclass 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  endend





    Terms & 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.)


    本贴来自国际rpgmaker官方论坛作者:kyonides处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/kdiurnalis-vx.148589/
    天天去同能,天天有童年!
    回复 送礼论坛版权

    使用道具 举报

    文明发言,和谐互动
    文明发言,和谐互动
    高级模式
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    简体中文
    繁體中文
    English(英语)
    日本語(日语)
    Deutsch(德语)
    Русский язык(俄语)
    بالعربية(阿拉伯语)
    Türkçe(土耳其语)
    Português(葡萄牙语)
    ภาษาไทย(泰国语)
    한어(朝鲜语/韩语)
    Français(法语)
    关闭

    幸运抽奖

    社区每日抽奖来袭,快来试试你是欧皇还是非酋~

    立即查看

    聊天机器人
    Loading...

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2026-7-14 14:21 , Processed in 0.067926 second(s), 55 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表