注册会员 登录
Project1 返回首页

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

日志

【脚本】地图显示变量

热度 36已有 7308 次阅读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 个评论)

回复 喵呜喵5 2015-2-24 19:15
904109589: 请问字体的大小怎么样控制?
\\{   \\}
回复 duzine 2015-7-18 23:32
喵嗚喵5大觸,可否給新手咱一個飯粒吃呢喵?
回复 duzine 2015-7-19 13:25
就是想知道怎麼像圖中一樣可把變數放在同個框框裡
回复 喵呜喵5 2015-7-19 14:05
duzine: 就是想知道怎麼像圖中一樣可把變數放在同個框框裡
提示文字中插入 \\v[变量ID] ,另外不建议你这么做,你可以显示一张背景,其他的变量设置为背景透明
回复 aazz17269 2015-7-23 21:20
大大,7.6更新的新的脚本貌似和光的圆周率那个跳过标题画面的脚本冲突。
回复 喵呜喵5 2015-7-23 22:37
aazz17269: 大大,7.6更新的新的脚本貌似和光的圆周率那个跳过标题画面的脚本冲突。
脚本已更新,现在可以兼容了

另外多说一句,那个跳过标题画面脚本写的真烂
回复 chenyanwei263 2016-3-22 23:21
大神你好,我想请问下,我用了你这个地图显示变量的脚本,然后在地图上设置了一个并行的事件,使一个变量的值在脚本里设置为一个图标,该变量在不同场合可以显示不同的图标。可是我发现每次变量的值改变后,窗口内的内容不更新,需要我进入一次菜单然后弹出来后才更新,请问一下该怎么解决。
回复 喵呜喵5 2016-3-23 08:31
chenyanwei263: 大神你好,我想请问下,我用了你这个地图显示变量的脚本,然后在地图上设置了一个并行的事件,使一个变量的值在脚本里设置为一个图标,该变量在不同场合可以显示 ...
能给一下你这个不刷新的窗口的设置吗?
回复 chenyanwei263 2016-3-23 17:30
喵呜喵5: 能给一下你这个不刷新的窗口的设置吗?
{
  VAR:   62,
  X:     0,
  X2:    544,
  Y2:    416,
  HINT1: "\\v[61]",
  HINT2: "\\v[63]\\v[64]",
  INV_SWI:  493,
  POSX: 50,
  },

我自己想了一下,大概想明白了。
因为我把变量写在了hint里面,所以不会随时刷新。
原意是想同时显示几个变量,所以才这么写的。
想问下,怎么写才能同时显示几个变量。
谢谢喵呜喵大大。
回复 喵呜喵5 2016-3-24 13:27
chenyanwei263: {
  VAR:   62,
  X:     0,
  X2:    544,
  Y2:    416,
  HINT1: &quot;\\v[61]&quot;,
  HINT2: &quot;\\v[63]\\v[64]&quot;,
  INV_SWI:  493,
  POSX: 50, ...
确实是这样,为了提升效率,所以当脚本默认认为提示文字是不变的,提示文字改变时窗口不会去尝试进行刷新,个人是不建议一个窗口显示多个文字,

如果一定需要的话,添加这样一个设置:
EVAL: '"#{$game_variables[61]}#{$game_variables[62]}#{$game_variables[63]}#{$game_variables[64]}"',

或者等待之后脚本的更新,我考虑一下要不要加入一个窗口显示多个变量的功能
回复 chenyanwei263 2016-3-24 18:46
喵呜喵5: 确实是这样,为了提升效率,所以当脚本默认认为提示文字是不变的,提示文字改变时窗口不会去尝试进行刷新,个人是不建议一个窗口显示多个文字,

如果一定需要的 ...
谢谢喵呜喵大大,
测试后确实有用。
回复 pandeng421 2016-10-18 21:37
貌似1.3版的MV用不了啊
回复 元泱の蛮吉 2017-9-11 18:00
是不是改了,我记得上次的版本还有 添加颜色 大小 图标等快捷介绍,现在没了,希望添加上,
回复 喵呜喵5 2017-9-11 18:34
元泱の蛮吉: 是不是改了,我记得上次的版本还有 添加颜色 大小 图标等快捷介绍,现在没了,希望添加上,
添加颜色 大小 图标等快捷介绍是什么意思?显示对话时正常的转义符这个脚本都是支持的
回复 wan5337088 2017-12-3 09:44
请问喵喵大神,怎么去除显示变量的背景框框?只显示文字就行了。
回复 喵呜喵5 2017-12-3 11:16
wan5337088: 请问喵喵大神,怎么去除显示变量的背景框框?只显示文字就行了。
BACK 设置为 ""
回复 shengfeng 2017-12-20 21:37
怎样在角色状态栏里显示各自的变量? 也就是说如1号角色状态栏变量是独立的,不会显示在其他角色的状态栏里
回复 喵呜喵5 2017-12-22 10:18
shengfeng: 怎样在角色状态栏里显示各自的变量? 也就是说如1号角色状态栏变量是独立的,不会显示在其他角色的状态栏里
我想了想,这脚本虽然能实现这种效果,但需要设置的内容已经复杂到脱离这个脚本设计的初衷了……所以只能说没办法了
回复 shengfeng 2018-11-17 21:43
脚本还是有点小问题! 在变量变动的情况下变量不会改变必须按取消键退出后变量才会改变,比如在商店、菜单、状态等。   比如我在商店买1个物品变量1号加1,结果什么没加,退出商店后才加。
回复 喵呜喵5 2018-11-18 03:15
shengfeng: 脚本还是有点小问题! 在变量变动的情况下变量不会改变必须按取消键退出后变量才会改变,比如在商店、菜单、状态等。   比如我在商店买1个物品变量1号加1,结果 ...
你是用\v这个控制符显示变量的?
12

facelist doodle 涂鸦笔

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

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

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-27 12:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

返回顶部