幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2966|回复: 2

[个人创意] 动态获得道具脚本 汉化专用简化版

[复制链接]

16

主题

36

帖子

1063

积分

⑥精研

积分
1063
发表于 2010-8-23 13:21:08 | 显示全部楼层 |阅读模式
改自 动态获得道具脚本 永劫的咎人版,杜绝了原版中当地图图大于窗口时的提示乱跳的问题。
使用方法更加简便,已知的问题:
当获取金钱时,脚本调用命令的第二个数值必须为0,例如:
get(0,0,4)
代表获得4个金币,如果处于第二位的物品序号不为0,肯定会出错!原因…………不明…………

实际效果图:
  

范例下载:
  

请注意,如有解包不能的,请将后缀改为7z并使用7-ZIP解包。
  1. #===========================================================================
  2. #动态获得道具脚本 汉化专用版 by hongqizhen
  3. #使用的时候选择事件第三页的脚本,输入
  4. # get(物品类型,物品序号,物品数量)
  5. # 物品类型:1=物品,2=武器,3=防具,0=金币
  6. # 物品数量:大于0时提示得到物品,物品数量增加,小于0时提示失去物品,物品数量
  7. #           减少,等于0时忽略
  8. #           如果不为金币时,小于-99或大于99的忽略
  9. #===========================================================================
  10. #冲突性:几乎没有,因为很少有外挂脚本会修改def start的。
  11. #即使发生冲突也应该很容易进行整合^ ^
  12. #===========================================================================
  13. #改自 动态获得道具脚本 永劫的咎人版
  14. #优点:代码段缩水到只剩1/3,使用简便
  15. #缺点:代码不直观,仅适用于汉化
  16. #附加:提示的中心点直接取用事件的屏幕坐标,杜绝了提示乱跑的问题。
  17. #===========================================================================
  18. class Game_Event < Game_Character
  19.   attr_reader   :event                    # event data 这个声明可不能忘啊!
  20.   #--------------------------------------------------------------------------
  21.   # ● 启动事件 #读取事件坐标
  22.   #--------------------------------------------------------------------------
  23.   def start
  24.       $event_x = 0
  25.       $event_y = 0
  26.     # 执行内容不为空的情况下
  27.     if @list.size > 1
  28.       @starting = true
  29.       #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  30.       #就是下面的这个取事件在屏幕上的位置的问题,让我走了好多弯路。
  31.       #其实简单到没边,不是么?
  32.       #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  33.       if $game_map.events[event.id] == nil
  34.         return
  35.       end
  36.       $event_x = $game_map.events[event.id].screen_x - 16 #取得事件屏幕X值
  37.       $event_y = $game_map.events[event.id].screen_y - 64 #取得事件屏幕Y值
  38.     end
  39.   end
  40. end
  41. #===========================================================================
  42. #     动态取得物品的窗口
  43. #===========================================================================
  44. class Window_get_item < Window_Base
  45.   #--------------------------------------------------------------------------
  46.   # ● 初始化对像
  47.   #--------------------------------------------------------------------------
  48.   def initialize(x,y,text)
  49.     super(x, y, 640, 50)
  50.     @text = text
  51.     self.contents = Bitmap.new(width - 32, height - 32)#只用來避免出錯
  52.     self.width =  self.contents.text_size(@text).width
  53.     self.contents = Bitmap.new(width - 32, height - 32)#重定位图
  54.     @text_width = self.contents.text_size(@text).width
  55.     @extra_width = @text_width - 140 > 0 ? @text_width - 140 : 0
  56.     self.x = $event_x > 0 ? $event_x - self.contents.width / 2 : self.contents.width
  57.     #几重保险运算
  58.     if $event_x - self.width / 2 <= 0
  59.       self.x = 0
  60.     end
  61.     if $event_x + self.width / 2 >= 640
  62.       self.x = 640 - self.width
  63.     end
  64.     self.y = $event_y
  65.     if $event_y + self.height / 2 + 6 >= 480
  66.       self.y = 480 - self.height
  67.     end
  68.     self.back_opacity = 200
  69.     refresh
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 刷新
  73.   #--------------------------------------------------------------------------
  74.   def refresh
  75.     self.contents.clear
  76.     self.contents.font.size = 18
  77.     self.contents.font.color = Color.new(255,255,0,255) #提示文本的颜色
  78.     self.contents.draw_text(5,0,self.width - 32,18,@text)
  79.     self.contents.font.color = normal_color
  80.   end
  81. end
  82. class Game_Party
  83.   def get(ty1, item_id, n)   
  84.     if ty1 > 0 and ty1 <= 3      
  85.       @item_id = item_id
  86.       @n = n
  87.       #和谐掉得到0个道具和三位数个道具的情况
  88.       if @n == 0 or @n > 99 or @n < -99
  89.         return
  90.       end
  91.       # 更改所持有的物品个数
  92.       if @item_id > 0
  93.         if ty1 == 1
  94.           @angel_item_dis = $data_items[item_id]
  95.           @items[@item_id] = [[item_number(@item_id) + @n, 0].max, 99].min
  96.         end
  97.         if ty1 == 2
  98.           @angel_item_dis = $data_weapons[item_id]
  99.           @weapons[@item_id] = [[weapon_number(@item_id) + @n, 0].max, 99].min
  100.         end
  101.         if ty1 == 3
  102.           @angel_item_dis = $data_armors[item_id]
  103.           @armors[@item_id] = [[armor_number(@item_id) + @n, 0].max, 99].min
  104.         end
  105.       end
  106.       #描绘图标的变量带入sprite
  107.       $angel_dis = Sprite.new
  108.       #描绘图标
  109.       if @angel_item_dis.icon_name != ""
  110.         $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  111.         $angel_dis.x = $event_x
  112.         $angel_dis.y = $event_y + 6
  113.         $angel_dis.opacity = 155
  114.       end
  115.       #移动图标
  116.       for i in 1..10
  117.         $angel_dis.y -= 4
  118.         $angel_dis.opacity += 10
  119.         $angel_dis.update
  120.         Graphics.update
  121.       end
  122.       #计算额外宽度
  123.       @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  124.       #描绘得到道具的窗口
  125.       if @n > 0 #如果得到的道具
  126.         @text = "得到" + " #{@n}" + "个【" + "#{@angel_item_dis.name}" + "】"
  127.       else#除此以外的场合
  128.         @n = 0 - n
  129.         @text = "失去" + " #{@n}" + "个【" + " #{@angel_item_dis.name}" + "】"
  130.       end
  131.       $one = 1
  132.       $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  133.       Audio.se_play("Audio/SE/"+"006-System06",80,100)
  134.       #只是等待50帧而已
  135.       50.times{Graphics.update}
  136.       #销毁
  137.       $angel_dis.dispose
  138.       $angel_name_window.dispose
  139.     else
  140.       #和谐掉得到0金钱的情况和类型值小于0的情况
  141.       @n = n
  142.       if ty1 < 0
  143.         return
  144.       end
  145.       if @n == 0
  146.         return
  147.       end
  148.       @gold = [[@gold + n, 0].max, 9999999].min
  149.       #描绘得到道具的窗口
  150.       if @n > 0 #如果得到的道具
  151.         @text = "得到" + " #{@n} " + "个" + "#{$data_system.words.gold}"
  152.       else#除此以外的场合
  153.         @n = 0 - n
  154.         @text = "失去" + " #{@n} " + "个" + "#{$data_system.words.gold}"
  155.       end
  156.       $one = 1
  157.       $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 : 0 ,$event_y - 4,@text)
  158.       Audio.se_play("Audio/SE/"+"006-System06",80,100)
  159.       #只是等待50帧而已
  160.       50.times{Graphics.update}
  161.       #销毁
  162.       $angel_name_window.dispose
  163.     end
  164.   end
  165. end
  166. class Interpreter
  167.   #========================================================================
  168.   #定义事件中动态获得东西,并自动区别类型,增减物品
  169.   #========================================================================
  170.   def  get(ty1,item_id, n)#ty1:1=物品,2=武器,3=防具,0=金币
  171.     if ty1== 0
  172.       item_id = 0
  173.     end
  174.     return $game_party.get(ty1,item_id, n)
  175.   end
  176. end
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

2

帖子

16

积分

②入门

积分
16
发表于 2010-8-26 19:36:42 | 显示全部楼层
刚开始学Ruby,学习
回复 支持 反对

使用道具 举报

0

主题

2

帖子

16

积分

②入门

积分
16
发表于 2010-8-28 17:47:40 | 显示全部楼层
好东西.谢了LZ
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 16:50 , Processed in 0.021020 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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