注册会员 登录
Project1 返回首页

喵呜喵5的树洞 https://rpg.blue/?291206 [收藏] [复制] [分享] [RSS]

日志

【脚本】地图显示变量

热度 36已有 5974 次阅读2013-9-26 20:39 |个人分类:脚本

这个脚本需要搭配我的基础脚本共同使用:https://rpg.blue/home.php?mod=space&uid=291206&do=blog&id=13513

=begin

===============================================================================

  地图显示变量 By 喵呜喵5

===============================================================================


【说明】


  在地图上显示变量,支持许多的自定义操作


=end

$m5script ||= {};raise("需要喵呜喵5基础脚本的支持") unless $m5script[:M5Base]

$m5script[:M5Var20140815] = 20160307;M5script.version(20150706)

module M5Var20140815;VAR_CONFIG =[

=begin

#==============================================================================

#  设定部分

#==============================================================================


  下面的每一对大括号对应地图上的一个窗口,中间的内容就是窗口的属性

  具体的格式请参考下面给出的范例(※注意每大括号最后的逗号)


  添加内容的格式为:


    需要设置的属性: 属性的值 ,


  (※ 冒号和属性的值之间请加上空格,不要忘记每条设置最后的逗号)


  可以设置的属性如下:


  VAR      要显示的变量的ID

  X        窗口左上角的X坐标

  Y        窗口左上角的Y坐标

  X2       窗口右下角的X坐标

  Y2       窗口右下角的Y坐标

  Z        窗口的Z高度,可以为负数

           高度比较大的窗口将遮住高度比较低的窗口

  HINT1    在变量的数值前面显示的提示文字(前后要加英文引号)

  HINT2    在变量的数值后面显示的提示文字(前后要加英文引号)

  POSX     窗口文字的起始X坐标

  POSY     窗口文字的起始Y坐标

  BACK     窗口的背景图片,文件放在Graphics/System/下(前后要加英文引号)

           文件不存在时,窗口背景透明

  SX       背景图片的X坐标

  SY       背景图片的Y坐标

  SWI      窗口的开关ID,当对应ID的开关打开时不显示这个窗口

  INV_SWI  窗口的开关ID,当对应ID的开关【关闭】时不显示这个窗口

  EVAL     窗口显示的内容变为代码的返回值,VAR属性将被忽略(需要双引号)

           如果不懂意思的话请不要设置这个属性

  SCENE    窗口只在特定的 Scene 才显示,如果不懂意思的话请不要设置这个属性


=end


  {

  VAR:   1,

  X:     0,

  X2:    544,

  Y2:    416,

  HINT1: "\\i[10]1号变量的值是",

  HINT2: "的说(打开2号开关试试?)",

  SWI:   2,

  POSX: 50,

  },


  {

  VAR: 2,

  X2: 544,

  HINT1: "2号变量的\n值是:",

  BACK: "",

  },


  {

  X:       0,

  HINT1:   "这个是不显示变量数值的窗口\n",

  HINT2:   "仅当2号开关打开时才显示",

  INV_SWI:  2,

  },


  {

  EVAL:  "$game_player.x",

  HINT1: "玩家的地图X坐标为:",

  SCENE: Scene_Menu,

  },



  ] # 请不要删除这行


  Z = 200   # 如果窗口遮住其他不希望遮住的内容了,请调小这个数值


  SWI = 1   # 对应ID的开关打开时,关闭本脚本的功能,不在地图上显示变量,

            # 这个全局开关优先于各个窗口单独设置的开关

            # 我的其他需要本脚本支持的脚本也会受到这个开关的影响而失效

            # 如果不需要这个开关的话,这里请填 nil


  INV_SWI = nil  # 对应ID的开关【关闭】时,关闭本脚本的功能,不在地图上显示变量,

                 # 这个全局开关优先于各个窗口单独设置的开关以及上面设置的开关

                 # 我的其他需要本脚本支持的脚本也会受到这个开关的影响而失效

                 # 如果不需要这个开关的话,这里请填 nil


#==============================================================================

#  设定结束

#==============================================================================

class Window_Var < M5script::Window_Var

  #--------------------------------------------------------------------------

  # ● 开始处理

  #--------------------------------------------------------------------------

  def initialize(config,cal)

    super(config,cal)

    update

    refresh if @config[:ONLY]

  end

  #--------------------------------------------------------------------------

  # ● 获取窗口的设置

  #--------------------------------------------------------------------------

  def get_config(config)

    super(config)

    @config[:Z] += Z

    @config[:HINT1] ||= ""

    @config[:HINT2] ||= ""

    @config[:POSX] ||= 0

    @config[:POSY] ||= 0

    return if @config[:EVAL]

    @config[:EVAL] = "$game_variables[#{@config[:VAR]}]"

  end

  #--------------------------------------------------------------------------

  # ● 更新

  #--------------------------------------------------------------------------

  def update

    super

    return if update_close_judge

    @background_sprite.opacity = 255 if @background_sprite and \

    @background_sprite.opacity != 255

    open if close?

    update_content unless @config[:ONLY]

  end

  #--------------------------------------------------------------------------

  # ● 更新窗口的关闭判断

  #--------------------------------------------------------------------------

  def update_close_judge

    if close_judge

      @background_sprite.opacity = 0 if @background_sprite and \

      @background_sprite.opacity != 0

      close if open?

      return true

    end

    false

  end

  #--------------------------------------------------------------------------

  # ● 窗口是否应该关闭? (true:关闭)

  #--------------------------------------------------------------------------

  def close_judge

    return true if INV_SWI && !$game_switches[INV_SWI]

    return true if SWI && $game_switches[SWI]

    return true if @config[:INV_SWI] && !$game_switches[@config[:INV_SWI]]

    return true if @config[:SWI] && $game_switches[@config[:SWI]]

    false

  end

  #--------------------------------------------------------------------------

  # ● 更新窗口内容

  #--------------------------------------------------------------------------

  def update_content

    cont = @cont

    begin

      @cont = eval(@config[:EVAL]).to_s

    rescue

      p "窗口:#{@config}","错误:#{$!.to_s}","追踪:#{$!.backtrace}"

      msgbox('地图显示变量脚本的某个窗口发生错误,错误信息已输出到控制台')

      exit

    end

    refresh unless cont == @cont

  end

  #--------------------------------------------------------------------------

  # ● 描绘文字

  #--------------------------------------------------------------------------

  def refresh

    if @config[:ONLY] then @word = "#{@config[:HINT1]}#{@config[:HINT2]}"

    else @word = "#{@config[:HINT1]}#{@cont}#{@config[:HINT2]}"

    end

    update_placement

    update_position

    draw_text_ex(@config[:POSX], @config[:POSY], @word)

  end

end

end # M5Var20140815

#--------------------------------------------------------------------------

# ● Scene_Base

#--------------------------------------------------------------------------

class Scene_Base

  #--------------------------------------------------------------------------

  # ● 生成窗口

  #--------------------------------------------------------------------------

  alias m5_20131103_start start

  def start

    m5_20131103_start

    @m5_20140815_cal_size_window = M5script::Window_Cal.new

    @m5_20140815_var_windows = []

    (M5Var20140815::VAR_CONFIG + self.class.m5_20150517_window).each do |config|

      next unless config

      next unless self.class == (config[:SCENE] ? config[:SCENE] : Scene_Map)

      if !(config[:VAR] || config[:EVAL])

        next unless (config[:HINT1] || config[:HINT2])

        config[:ONLY] = true

      end

      @m5_20140815_var_windows.push(

        M5Var20140815::Window_Var.new(config,@m5_20140815_cal_size_window) )

    end

    @m5_20140815_var_windows.compact!

  end

  #--------------------------------------------------------------------------

  # ● 更新窗口

  #--------------------------------------------------------------------------

  alias m5_20131103_update update

  def update

    m5_20131103_update

    return if scene_changing?

    return unless @m5_20140815_var_windows

    @m5_20140815_var_windows.each {|window| window.update if window}

  end

  #--------------------------------------------------------------------------

  # ● 释放窗口

  #--------------------------------------------------------------------------

  alias m5_20131103_terminate terminate

  def terminate

    m5_20131103_terminate

    return unless @m5_20140815_var_windows

    @m5_20140815_var_windows.each {|window| window.dispose if window}

  end

  #--------------------------------------------------------------------------

  # ● 为其他脚本提供的接口

  #--------------------------------------------------------------------------

  def self.m5_20150517_window(config = nil)

    @m5_20150517_add_window ||= []

    return @m5_20150517_add_window unless config

    hash = { EVAL: "#{config}.text", SCENE: self }

    [:X, :Y, :X2, :Y2, :Z, :BACK, :SX, :SY, :POSX, :POSY, :SWI,

      :INV_SWI].each do |key|

      hash[key] = config.const_get(key) rescue nil

    end

    @m5_20150517_add_window.push hash

  end

end

8

鸡蛋
4

鲜花

刚表态过的朋友 (12 人)

发表评论 评论 (40 个评论)

回复 mabingjun626 2013-10-20 20:02
建议添加上文字。。。可以做任务系统的~
回复 喵呜喵5 2013-10-20 20:19
mabingjun626: 建议添加上文字。。。可以做任务系统的~
之后有时间会做个更完善的版本,支持自定义位置自定义提示文字自定义背景
回复 mabingjun626 2013-10-20 20:43
好吧。快点快点啊。等着呢~~谢谢~
回复 喵呜喵5 2013-11-3 12:29
mabingjun626: 好吧。快点快点啊。等着呢~~谢谢~
已更新
回复 sballance 2014-2-13 02:27
问一下比如我想要做一个收集物品的任务效果,如何实时将某个物品数量转到变量里去呢?
回复 喵呜喵5 2014-2-13 12:15
sballance: 问一下比如我想要做一个收集物品的任务效果,如何实时将某个物品数量转到变量里去呢?
获得物品的时候变量赋值一下……
回复 sballance 2014-2-13 15:09
喵呜喵5: 获得物品的时候变量赋值一下……
那比如说是打怪掉的道具的话该怎么办
回复 请叫我小萌 2014-3-10 17:04
喵大请教一个问题,如何在对话中输入的变量指向的地图ID不显示具体的数字,而显示对应的地图名称?
比如我在其他地方令某个变量=地图ID,在对话中\V[变量] 显示的会是地图ID的数字,有什么办法显示成这地图ID对应的地图名称?(做那种记录曾经去过地方的回城类道具,显示记录的地图名字用)
回复 喵呜喵5 2014-3-10 17:08
请叫我小萌: 喵大请教一个问题,如何在对话中输入的变量指向的地图ID不显示具体的数字,而显示对应的地图名称?
比如我在其他地方令某个变量=地图ID,在对话中\V[变量] 显示 ...
直接用条件分支,如果变量的值为XXX时显示对话XXX……
回复 丽塔菌 2014-5-6 22:12
你好//我用了你的立绘菜单脚本,那么该如何让这个变量在菜单显示呢?
回复 喵呜喵5 2014-7-20 14:56
丽塔菌: 你好//我用了你的立绘菜单脚本,那么该如何让这个变量在菜单显示呢?
脚本已更新,脚本最后一个设置改成这样即可:
SCENE = [Scene_Map,Scene_M5Menu]
回复 喵呜喵5 2014-7-20 15:06
请叫我小萌: 喵大请教一个问题,如何在对话中输入的变量指向的地图ID不显示具体的数字,而显示对应的地图名称?
比如我在其他地方令某个变量=地图ID,在对话中\V[变量] 显示 ...
哦对了,既然你在其他地方都可以令某个变量=地图ID了,直接令某个变量=地图显示名称不就可以了么……变量操作最下方的脚本那里,用英文双引号括起来就可以让变量的数值等于一串文字了
回复 唐家耗子 2014-8-24 10:18
佛祖保佑- =
回复 淘米网 2014-8-27 11:57
为啥我添了基础脚本还是要不得呢
回复 喵kano 2014-12-1 22:12
请问喵呜巨巨可以实现打开开关后【显示】变量窗口吗?用默认的打开开关【不显示】有些不方便,比如开场滚个字幕啥的...自动开开关会有一段反应时间
回复 喵呜喵5 2014-12-2 13:14
喵kano: 请问喵呜巨巨可以实现打开开关后【显示】变量窗口吗?用默认的打开开关【不显示】有些不方便,比如开场滚个字幕啥的...自动开开关会有一段反应时间 ...
脚本已更新这一功能,设置窗口的 INVERSE 属性或者脚本的 INVERSE设置即可
回复 喵kano 2014-12-2 16:18
喵呜喵5: 脚本已更新这一功能,设置窗口的 INVERSE 属性或者脚本的 INVERSE设置即可
感谢喵呜大触_(:3」∠)_对了,线索整合脚本和基础脚本好像有冲突,彼此互相报错“superclass mismatch for class window_M5Help”
回复 喵呜喵5 2014-12-4 01:22
喵kano: 感谢喵呜大触_(:3」∠)_对了,线索整合脚本和基础脚本好像有冲突,彼此互相报错“superclass mismatch for class window_M5Help” ...
线索整合脚本已修正
回复 喵kano 2014-12-4 16:07
喵呜喵5: 线索整合脚本已修正
再次感谢喵呜大触_(:3」∠)_
回复 904109589 2015-2-24 18:19
请问字体的大小怎么样控制?
12下一页

facelist doodle 涂鸦笔

您需要登录后才可以评论 登录 | 注册会员

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:fux2@moe9th.com|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2020-3-31 03:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部