Project1

标题: 对话框 物品快捷带入脚本求修改 [打印本页]

作者: situkei    时间: 2014-7-8 23:19
标题: 对话框 物品快捷带入脚本求修改
我自己瞎编的根本不能执行,求大神修改下
#item_name
#--------------------------------------------------------------------------
  # ● 进行控制符的事前变换
  #    在实际绘制前、将控制符替换为实际的内容。
  #    为了减少歧异,文字「」会被首先替换为转义符(e)。
  #--------------------------------------------------------------------------
  def convert_escape_characters(text)
    result = text.to_s.clone

    result.gsub!(/eW[(d+)]/i) { item_name($1.to_i) }#获取物品id的名称

  end



  #--------------------------------------------------------------------------
  # ●在对话中 获取id的名称并在前面附加物品图标  使用方法:格式\w[1]
  #--------------------------------------------------------------------------
  def item_name(n)
    item = n >= 1 ? $data_items[n] : nil
    item ? item_name : ""
  end  




作者: tseyik    时间: 2014-7-8 23:25
本帖最后由 tseyik 于 2014-7-8 23:30 编辑

不是内置/I[n]就是顕示Icon麼?
參考
https://rpg.blue/thread-224143-1-1.html
作者: 喵呜喵5    时间: 2014-7-8 23:32
本帖最后由 喵呜喵5 于 2014-7-8 23:33 编辑

看注释中的这一句“为了减少歧异,文字\会被首先替换为转义符(\e)”
所以后面所有的判断都是以包含\e为前提进行的
你把自带的脚本删除了以后\e就不会转换了,你却还模仿原生脚本的写法判断\e当然就不行了

RUBY 代码复制
  1. def convert_escape_characters(text)
  2.     result = text.to_s.clone
  3.     result.gsub!(/\\/)            { "\e" }
  4.     result.gsub!(/\e\e/)          { "\\" }
  5.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  6.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  7.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  8.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  9.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  10.     result.gsub!(/\eW\[(\d+)\]/i) { item_name($1.to_i)}
  11.     result
  12.   end

作者: taroxd    时间: 2014-7-9 06:17
本帖最后由 taroxd 于 2014-7-9 06:22 编辑
喵呜喵5 发表于 2014-7-8 23:32
看注释中的这一句“为了减少歧异,文字\会被首先替换为转义符(\e)”
所以后面所有的判断都是以包含\e为前 ...


我才不吐槽没有定义 item_name 呢!看楼主这样子估计也不会自己定义了

to LZ:
不懂得脚本之前不要瞎编脚本呢。否则……后果自负的说……
作者: 喵呜喵5    时间: 2014-7-9 12:01
taroxd 发表于 2014-7-9 06:17
我才不吐槽没有定义 item_name 呢!看楼主这样子估计也不会自己定义了

to LZ:

楼主主楼不是定义了么…………

好吧,仔细一看这个定义也是错的…………
  1. def item_name(n)
  2.     item = n >= 1 ? $data_items[n] : nil
  3.     item ? item.name : ""
  4.   end  
复制代码

作者: VIPArcher    时间: 2014-7-9 14:22
其实我想吐槽一下这个东西貌似没什么用,然后,你试试这样可用吗?(未测试
  1.   #--------------------------------------------------------------------------
  2.   # ● 进行控制符的事前变换
  3.   #    在实际绘制前、将控制符替换为实际的内容。
  4.   #    为了减少歧异,文字「\」会被首先替换为转义符(\e)。
  5.   #--------------------------------------------------------------------------
  6.   def convert_escape_characters(text)
  7.     result = text.to_s.clone
  8.     result.gsub!(/\\/)            { "\e" }
  9.     result.gsub!(/\e\e/)          { "\\" }
  10.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  11.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  12.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  13.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  14.     result.gsub!(/\eW\[(\d+)\]/i) { item_name($1.to_i) }
  15.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  16.     result
  17.   end
复制代码
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取第 n 号道具名称
  3.   #--------------------------------------------------------------------------
  4.   def item_name(n)
  5.     item = n >= 1 ? $data_items[n].name : nil
  6.   end
复制代码

作者: situkei    时间: 2014-7-9 22:36
搞定了,谢谢,就是还是没有物品图标功能啊
不是用\i[x],是自己带出来的那种


作者: VIPArcher    时间: 2014-7-9 23:30
本帖最后由 VIPArcher 于 2014-7-11 16:30 编辑

那么你就这么玩:
  1.   #--------------------------------------------------------------------------
  2.   # ● 控制符的处理
  3.   #     code : 控制符的实际形式(比如“\C[1]”是“C”)
  4.   #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  5.   #     pos  : 绘制位置 {:x, :y, :new_x, :height}
  6.   #--------------------------------------------------------------------------
  7.   def process_escape_character(code, text, pos)
  8.     case code.upcase
  9.     when 'C'
  10.       change_color(text_color(obtain_escape_param(text)))
  11.     when 'I'
  12.       process_draw_icon(obtain_escape_param(text), pos)
  13.     when 'W'
  14.       process_draw_item(obtain_escape_param(text), pos)
  15.     when '{'
  16.       make_font_bigger
  17.     when '}'
  18.       make_font_smaller
  19.     end
  20.   end
复制代码
  1.   #--------------------------------------------------------------------------
  2.   # ● 处理控制符指定的道具图标和名字
  3.   #--------------------------------------------------------------------------
  4.   def process_draw_item(item_id, pos)
  5.     item = $data_items[item_id]
  6.     draw_item_name(item, pos[:x], pos[:y])
  7.     pos[:x] += 24 + text_size(item.name).width
  8.   end
复制代码
@taroxd 这下应该没问题了,嗯
作者: situkei    时间: 2014-7-11 15:54
VIPArcher 发表于 2014-7-9 23:30
那么你就这么玩:

有点小问题,最后一行代码没有把物品名称的文本长度写入,造成对话文字重叠,我尝试着写了一下,不行,您看看
  def process_draw_item(item_id, pos)
    text_width = text_size(item).width
    item = $data_items[item_id]
    draw_item_name(item, pos[:x], pos[:y])
    pos[:x] += text_width+24
  end




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1