幻想森林

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

[原创]动态获得物品脚本

[复制链接]

4

主题

54

帖子

606

积分

⑤进阶

积分
606
发表于 2007-8-17 15:51:17 | 显示全部楼层 |阅读模式
忙了两个晚上的成果。
今天上午修正一个“想当然”的bug,道具没有图标也可以使用。
效果如下:
紧急更新,去掉存档出错的bug
*获得道具的时候道具图标上移,然后出现介绍物品名称的窗口。
*图标显示和窗口的位置随得到道具的事件位置变化而变化。
*窗口大小随道具名称和数量变化而变化。
*如果得到道具只有一个,不显示数量。
*得到的道具为0或者负数或超过99个,脚本不执行(和谐和谐)。
*窗口位置如果超出地图单位,自动缩回。
  1. #===========================================================================
  2. #动态获得道具脚本 永劫的咎人 版
  3. #使用的时候选择事件第三页的脚本,输入 get_item("取得道具的名称",取得道具的数量)
  4. #即可得到相应的数量的相应道具。道具名称要用小引号括起来,写成 "回复剂" 的格式。
  5. #动态获得武器的代码是"get_weapon("武器名称",获得数量)"
  6. #动态获得防具的代码是"get_armor("防具名称",获得数量)"
  7. #获得金钱的代码是"get_gold(获得钱数)"
  8. #===========================================================================
  9. #获得金钱的时候特殊效果只有窗口随事件位置变化,米有动态哦~
  10. #因为默认是没有金钱图标的,如果想把效果加上去的话可以尝试自己修改这个脚本。
  11. #===========================================================================
  12. #冲突性:几乎没有,因为很少有外挂脚本会修改def start的。其他内容均为原创。
  13. #即使发生冲突也应该很容易进行整合^ ^
  14. #===========================================================================
  15. #感谢k' sama前两天解答了我读取事件坐标的问题。
  16. #===========================================================================
  17. class Game_Event < Game_Character
  18.   #--------------------------------------------------------------------------
  19.   # ● 启动事件 #读取事件坐标
  20.   #--------------------------------------------------------------------------
  21.   def start
  22.       $event_x = 0
  23.       $event_y = 0
  24.     # 执行内容不为空的情况下
  25.     if @list.size > 1
  26.       @starting = true
  27.       $event_x = @event.x * 32 + 3
  28.       $event_y = @event.y * 32
  29.     end
  30.   end
  31. end
  32. #===========================================================================
  33. #     动态取得物品的窗口
  34. #===========================================================================
  35. class Window_get_item < Window_Base
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #--------------------------------------------------------------------------
  39.   def initialize(x,y,text)
  40.     super(x, y, 640, 52)
  41.     @text = text
  42.     self.contents = Bitmap.new(width - 32, height - 32)#只用來避免出錯
  43.     #这个中心对齐忙了几乎一夜。。。。。。
  44.     @daomei = 30 - (self.contents.text_size(@text).width / 11 - 1) * 2
  45.     self.width =  self.contents.text_size(@text).width + @daomei
  46.     self.contents = Bitmap.new(width - 32, height - 32)#重定位图
  47.     @text_width = self.contents.text_size(@text).width
  48.     @extra_width = @text_width - 140 > 0 ? @text_width - 140 : 0
  49.     self.x = $event_x > 0 ? $event_x - self.contents.width / 2 : self.contents.width
  50.     #几重保险运算
  51.     if $event_x - self.width / 2 <= 0
  52.      self.x = 0
  53.    end
  54.     if $event_x + self.width / 2 >= $game_map.width * 32
  55.      self.x = $game_map.width * 32 - self.width
  56.    end
  57.     self.y = $event_y
  58.     if $event_y + self.height / 2 + 6 >= $game_map.height * 32
  59.       self.y = $game_map.height * 32 - self.height
  60.     end
  61.     self.back_opacity = 120
  62.     refresh
  63.   end
  64.   #--------------------------------------------------------------------------
  65.   # ● 刷新
  66.   #--------------------------------------------------------------------------
  67.   def refresh
  68.     self.contents.clear
  69.     self.contents.font.size = 18
  70.     self.contents.draw_text(0,0,self.width - 32,20,@text)
  71.   end
  72. end
  73. class Game_Party
  74.   #--------------------------------------------------------------------------
  75.   # ● 获得物品
  76.   #     item_id : 物品 ID
  77.   #     n       : 个数
  78.   #--------------------------------------------------------------------------
  79.   def get_item(item_id, n)
  80.     @angel_item_dis = $data_items[item_id]
  81.     @item_id = item_id
  82.     @n = n
  83.     #和谐掉得到0个道具以及负数个武器和三位数个武器的情况
  84.     if @n <= 0 or @n > 99
  85.       return
  86.     end
  87.     # 更新 hash 的个数数据
  88.     if @item_id > 0
  89.       @items[@item_id] = [[item_number(@item_id) + @n, 0].max, 99].min
  90.     end
  91.     #描绘图标的变量带入sprite
  92.     $angel_dis = Sprite.new
  93.     #描绘图标
  94.     if @angel_item_dis.icon_name != ""
  95.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  96.     $angel_dis.x = $event_x   
  97.     $angel_dis.y = $event_y
  98.     $angel_dis.opacity = 155
  99.   end
  100.     #移动图标
  101.     for i in 1..10
  102.       $angel_dis.y -= 4
  103.       $angel_dis.opacity += 10
  104.       $angel_dis.update
  105.       Graphics.update
  106.     end
  107.     #计算额外宽度
  108.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  109.     #描绘得到道具的窗口
  110.     if @n == 1 #如果得到的道具只有一个
  111.     $one = 1
  112.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  113.   else#除此以外的场合
  114.     $one = 2
  115.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  116.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  117.   end
  118.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  119.     #只是等待50帧而已
  120.     50.times{Graphics.update}
  121.     #销毁
  122.     $angel_dis.dispose
  123.     $angel_name_window.dispose
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 获得武器
  127.   #     item_id : 物品 ID
  128.   #     n       : 个数
  129.   #--------------------------------------------------------------------------
  130.   def get_weapon(item_id, n)
  131.     @angel_item_dis = $data_weapons[item_id]
  132.     @item_id = item_id
  133.     @n = n
  134.     #和谐掉得到0个武器以及负数个武器和三位数个武器的情况的情况
  135.     if @n <= 0 or @n > 99
  136.       return
  137.     end
  138.     # 更新 hash 的个数数据
  139.     if @item_id > 0
  140.       @weapons[@item_id] = [[weapon_number(@item_id) + @n, 0].max, 99].min
  141.     end
  142.     #描绘图标的变量带入sprite
  143.     $angel_dis = Sprite.new
  144.     #描绘图标
  145.     if @angel_item_dis.icon_name !=  ""
  146.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  147.     $angel_dis.x = $event_x   
  148.     $angel_dis.y = $event_y
  149.     $angel_dis.opacity = 155
  150.   end
  151.     #移动图标
  152.     for i in 1..10
  153.       $angel_dis.y -= 4
  154.       $angel_dis.opacity += 10
  155.       $angel_dis.update
  156.       Graphics.update
  157.     end
  158.     #计算额外宽度
  159.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  160.     #描绘得到道具的窗口
  161.     if @n == 1 #如果得到的道具只有一个
  162.     $one = 1
  163.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  164.   else#除此以外的场合
  165.     $one = 2
  166.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  167.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  168.   end
  169.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  170.     #只是等待50帧而已
  171.     50.times{Graphics.update}
  172.     #销毁
  173.     $angel_dis.dispose
  174.     $angel_name_window.dispose
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 获得防具
  178.   #     item_id : 物品 ID
  179.   #     n       : 个数
  180.   #--------------------------------------------------------------------------
  181.   def get_armor(item_id, n)
  182.     @angel_item_dis = $data_armors[item_id]
  183.     @item_id = item_id
  184.     @n = n
  185.     #和谐掉得到0个防具,负数个防具以及三位数个防具的情况
  186.     if @n <= 0 or @n > 99
  187.       return
  188.     end
  189.     # 更新 hash 的个数数据
  190.     if @item_id > 0
  191.       @armors[@item_id] = [[armor_number(@item_id) + @n, 0].max, 99].min
  192.     end
  193.     #描绘图标的变量带入sprite
  194.     $angel_dis = Sprite.new
  195.     #描绘图标
  196.     if @angel_item_dis.icon_name != ""
  197.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  198.     $angel_dis.x = $event_x   
  199.     $angel_dis.y = $event_y
  200.     $angel_dis.opacity = 155
  201.   end
  202.     #移动图标
  203.     for i in 1..10
  204.       $angel_dis.y -= 4
  205.       $angel_dis.opacity += 10
  206.       $angel_dis.update
  207.       Graphics.update
  208.     end
  209.     #p @angel_item_dis.name.length* 9
  210.     #计算额外宽度
  211.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  212.     #描绘得到道具的窗口
  213.     if @n == 1 #如果得到的道具只有一个
  214.     $one = 1
  215.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  216.   else#除此以外的场合
  217.     $one = 2
  218.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  219.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  220.   end
  221.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  222.     #只是等待50帧而已
  223.     50.times{Graphics.update}
  224.     #销毁
  225.     $angel_dis.dispose
  226.     $angel_name_window.dispose
  227.    end
  228.   #--------------------------------------------------------------------------
  229.   # ● 获得金钱
  230.   #     n       : 个数
  231.   #--------------------------------------------------------------------------
  232.   def get_gold( n)
  233.     @n = n
  234.     #和谐掉得到0金钱以及负数金钱的情况
  235.     if @n <= 0
  236.       return
  237.     end
  238.      @gold = [[@gold + n, 0].max, 9999999].min
  239.     #计算额外宽度
  240.     #@extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  241.     #描绘得到道具的窗口
  242.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 : 0 ,$event_y - 4,"#{n}" + "#{$data_system.words.gold}")
  243.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  244.     #只是等待50帧而已
  245.     50.times{Graphics.update}
  246.     #销毁
  247.     $angel_name_window.dispose
  248.    end
  249. end
  250. class Interpreter
  251.   #========================================================================
  252.   #定义事件中动态获得物品的方法
  253.   #========================================================================
  254.   def  get_item(item_name,n)
  255.     @item_name = item_name
  256.     for i in 1...$data_items.size
  257.       if $data_items[i].name ==  @item_name
  258.         @item_id = i
  259.       end
  260.     end
  261.      return $game_party.get_item(@item_id, n)
  262.    end
  263.   #========================================================================
  264.   #定义事件中动态获得武器的方法
  265.   #========================================================================
  266.     def  get_weapon(item_name, n)
  267.     @item_name = item_name
  268.     for i in 1...$data_weapons.size
  269.       if $data_weapons[i].name ==  @item_name
  270.         @item_id = i
  271.       end
  272.     end
  273.      return $game_party.get_weapon(@item_id, n)
  274.    end
  275.   #========================================================================
  276.   #定义事件中动态获得防具的方法
  277.   #========================================================================
  278.     def  get_armor(item_name, n)
  279.     @item_name = item_name
  280.     for i in 1...$data_armors.size
  281.       if $data_armors[i].name ==  @item_name
  282.         @item_id = i
  283.       end
  284.     end
  285.      return $game_party.get_armor(@item_id, n)
  286.    end
  287.   #========================================================================
  288.   #定义事件中动态获得金钱的方法
  289.   #========================================================================
  290.     def  get_gold(n)
  291.      return $game_party.get_gold(n)
  292.   end
  293. end
  294. #===========================================================================
  295. #动态获得道具脚本 永劫的咎人 版
  296. #使用的时候选择事件第三页的脚本,输入 get_item("取得道具的名称",取得道具的数量)
  297. #即可得到相应的数量的相应道具。道具名称要用小引号括起来,写成 "回复剂" 的格式。
  298. #动态获得武器的代码是"get_weapon("武器名称",获得数量)"
  299. #动态获得防具的代码是"get_armor("防具名称",获得数量)"
  300. #获得金钱的代码是"get_gold(获得钱数)"
  301. #===========================================================================
  302. #获得金钱的时候特殊效果只有窗口随事件位置变化,米有动态哦~
  303. #因为默认是没有金钱图标的,如果想把效果加上去的话可以尝试自己修改这个脚本。
  304. #===========================================================================
  305. #冲突性:几乎没有,因为很少有外挂脚本会修改def start的。其他内容均为原创。
  306. #即使发生冲突也应该很容易进行整合^ ^
  307. #===========================================================================
  308. #感谢k' sama前两天解答了我读取事件坐标的问题。
  309. #===========================================================================
  310. class Game_Event < Game_Character
  311.   #--------------------------------------------------------------------------
  312.   # ● 启动事件 #读取事件坐标
  313.   #--------------------------------------------------------------------------
  314.   def start
  315.       $event_x = 0
  316.       $event_y = 0
  317.     # 执行内容不为空的情况下
  318.     if @list.size > 1
  319.       @starting = true
  320.       $event_x = @event.x * 32 + 3
  321.       $event_y = @event.y * 32
  322.     end
  323.   end
  324. end
  325. #===========================================================================
  326. #     动态取得物品的窗口
  327. #===========================================================================
  328. class Window_get_item < Window_Base
  329.   #--------------------------------------------------------------------------
  330.   # ● 初始化对像
  331.   #--------------------------------------------------------------------------
  332.   def initialize(x,y,text)
  333.     super(x, y, 640, 52)
  334.     @text = text
  335.     self.contents = Bitmap.new(width - 32, height - 32)#只用來避免出錯
  336.     #这个中心对齐忙了几乎一夜。。。。。。
  337.     @daomei = 30 - (self.contents.text_size(@text).width / 11 - 1) * 2
  338.     self.width =  self.contents.text_size(@text).width + @daomei
  339.     self.contents = Bitmap.new(width - 32, height - 32)#重定位图
  340.     @text_width = self.contents.text_size(@text).width
  341.     @extra_width = @text_width - 140 > 0 ? @text_width - 140 : 0
  342.     self.x = $event_x > 0 ? $event_x - self.contents.width / 2 : self.contents.width
  343.     #几重保险运算
  344.     if $event_x - self.width / 2 <= 0
  345.      self.x = 0
  346.    end
  347.     if $event_x + self.width / 2 >= $game_map.width * 32
  348.      self.x = $game_map.width * 32 - self.width
  349.    end
  350.     self.y = $event_y
  351.     if $event_y + self.height / 2 + 6 >= $game_map.height * 32
  352.       self.y = $game_map.height * 32 - self.height
  353.     end
  354.     self.back_opacity = 120
  355.     refresh
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 刷新
  359.   #--------------------------------------------------------------------------
  360.   def refresh
  361.     self.contents.clear
  362.     self.contents.font.size = 18
  363.     self.contents.draw_text(0,0,self.width - 32,20,@text)
  364.   end
  365. end
  366. class Game_Party
  367.   #--------------------------------------------------------------------------
  368.   # ● 获得物品
  369.   #     item_id : 物品 ID
  370.   #     n       : 个数
  371.   #--------------------------------------------------------------------------
  372.   def get_item(item_id, n)
  373.     @angel_item_dis = $data_items[item_id]
  374.     @item_id = item_id
  375.     @n = n
  376.     #和谐掉得到0个道具以及负数个武器和三位数个武器的情况
  377.     if @n <= 0 or @n > 99
  378.       return
  379.     end
  380.     # 更新 hash 的个数数据
  381.     if @item_id > 0
  382.       @items[@item_id] = [[item_number(@item_id) + @n, 0].max, 99].min
  383.     end
  384.     #描绘图标的变量带入sprite
  385.     $angel_dis = Sprite.new
  386.     #描绘图标
  387.     if @angel_item_dis.icon_name != ""
  388.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  389.     $angel_dis.x = $event_x   
  390.     $angel_dis.y = $event_y
  391.     $angel_dis.opacity = 155
  392.   end
  393.     #移动图标
  394.     for i in 1..10
  395.       $angel_dis.y -= 4
  396.       $angel_dis.opacity += 10
  397.       $angel_dis.update
  398.       Graphics.update
  399.     end
  400.     #计算额外宽度
  401.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  402.     #描绘得到道具的窗口
  403.     if @n == 1 #如果得到的道具只有一个
  404.     $one = 1
  405.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  406.   else#除此以外的场合
  407.     $one = 2
  408.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  409.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  410.   end
  411.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  412.     #只是等待50帧而已
  413.     50.times{Graphics.update}
  414.     #销毁
  415.     $angel_dis.dispose
  416.     $angel_name_window.dispose
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 获得武器
  420.   #     item_id : 物品 ID
  421.   #     n       : 个数
  422.   #--------------------------------------------------------------------------
  423.   def get_weapon(item_id, n)
  424.     @angel_item_dis = $data_weapons[item_id]
  425.     @item_id = item_id
  426.     @n = n
  427.     #和谐掉得到0个武器以及负数个武器和三位数个武器的情况的情况
  428.     if @n <= 0 or @n > 99
  429.       return
  430.     end
  431.     # 更新 hash 的个数数据
  432.     if @item_id > 0
  433.       @weapons[@item_id] = [[weapon_number(@item_id) + @n, 0].max, 99].min
  434.     end
  435.     #描绘图标的变量带入sprite
  436.     $angel_dis = Sprite.new
  437.     #描绘图标
  438.     if @angel_item_dis.icon_name !=  ""
  439.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  440.     $angel_dis.x = $event_x   
  441.     $angel_dis.y = $event_y
  442.     $angel_dis.opacity = 155
  443.   end
  444.     #移动图标
  445.     for i in 1..10
  446.       $angel_dis.y -= 4
  447.       $angel_dis.opacity += 10
  448.       $angel_dis.update
  449.       Graphics.update
  450.     end
  451.     #计算额外宽度
  452.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  453.     #描绘得到道具的窗口
  454.     if @n == 1 #如果得到的道具只有一个
  455.     $one = 1
  456.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  457.   else#除此以外的场合
  458.     $one = 2
  459.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  460.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  461.   end
  462.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  463.     #只是等待50帧而已
  464.     50.times{Graphics.update}
  465.     #销毁
  466.     $angel_dis.dispose
  467.     $angel_name_window.dispose
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 获得防具
  471.   #     item_id : 物品 ID
  472.   #     n       : 个数
  473.   #--------------------------------------------------------------------------
  474.   def get_armor(item_id, n)
  475.     @angel_item_dis = $data_armors[item_id]
  476.     @item_id = item_id
  477.     @n = n
  478.     #和谐掉得到0个防具,负数个防具以及三位数个防具的情况
  479.     if @n <= 0 or @n > 99
  480.       return
  481.     end
  482.     # 更新 hash 的个数数据
  483.     if @item_id > 0
  484.       @armors[@item_id] = [[armor_number(@item_id) + @n, 0].max, 99].min
  485.     end
  486.     #描绘图标的变量带入sprite
  487.     $angel_dis = Sprite.new
  488.     #描绘图标
  489.     if @angel_item_dis.icon_name != ""
  490.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  491.     $angel_dis.x = $event_x   
  492.     $angel_dis.y = $event_y
  493.     $angel_dis.opacity = 155
  494.   end
  495.     #移动图标
  496.     for i in 1..10
  497.       $angel_dis.y -= 4
  498.       $angel_dis.opacity += 10
  499.       $angel_dis.update
  500.       Graphics.update
  501.     end
  502.     #p @angel_item_dis.name.length* 9
  503.     #计算额外宽度
  504.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  505.     #描绘得到道具的窗口
  506.     if @n == 1 #如果得到的道具只有一个
  507.     $one = 1
  508.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  509.   else#除此以外的场合
  510.     $one = 2
  511.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  512.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  513.   end
  514.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  515.     #只是等待50帧而已
  516.     50.times{Graphics.update}
  517.     #销毁
  518.     $angel_dis.dispose
  519.     $angel_name_window.dispose
  520.    end
  521.   #--------------------------------------------------------------------------
  522.   # ● 获得金钱
  523.   #     n       : 个数
  524.   #--------------------------------------------------------------------------
  525.   def get_gold( n)
  526.     @n = n
  527.     #和谐掉得到0金钱以及负数金钱的情况
  528.     if @n <= 0
  529.       return
  530.     end
  531.      @gold = [[@gold + n, 0].max, 9999999].min
  532.     #计算额外宽度
  533.     #@extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  534.     #描绘得到道具的窗口
  535.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 : 0 ,$event_y - 4,"#{n}" + "#{$data_system.words.gold}")
  536.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  537.     #只是等待50帧而已
  538.     50.times{Graphics.update}
  539.     #销毁
  540.     $angel_name_window.dispose
  541.    end
  542. end
  543. class Interpreter
  544.   #========================================================================
  545.   #定义事件中动态获得物品的方法
  546.   #========================================================================
  547.   def  get_item(item_name,n)
  548.     @item_name = item_name
  549.     for i in 1...$data_items.size
  550.       if $data_items[i].name ==  @item_name
  551.         @item_id = i
  552.       end
  553.     end
  554.      return $game_party.get_item(@item_id, n)
  555.    end
  556.   #========================================================================
  557.   #定义事件中动态获得武器的方法
  558.   #========================================================================
  559.     def  get_weapon(item_name, n)
  560.     @item_name = item_name
  561.     for i in 1...$data_weapons.size
  562.       if $data_weapons[i].name ==  @item_name
  563.         @item_id = i
  564.       end
  565.     end
  566.      return $game_party.get_weapon(@item_id, n)
  567.    end
  568.   #========================================================================
  569.   #定义事件中动态获得防具的方法
  570.   #========================================================================
  571.     def  get_armor(item_name, n)
  572.     @item_name = item_name
  573.     for i in 1...$data_armors.size
  574.       if $data_armors[i].name ==  @item_name
  575.         @item_id = i
  576.       end
  577.     end
  578.      return $game_party.get_armor(@item_id, n)
  579.    end
  580.   #========================================================================
  581.   #定义事件中动态获得金钱的方法
  582.   #========================================================================
  583.     def  get_gold(n)
  584.      return $game_party.get_gold(n)
  585.   end
  586. end
  587. #===========================================================================
  588. #动态获得道具脚本 永劫的咎人 版
  589. #使用的时候选择事件第三页的脚本,输入 get_item("取得道具的名称",取得道具的数量)
  590. #即可得到相应的数量的相应道具。道具名称要用小引号括起来,写成 "回复剂" 的格式。
  591. #动态获得武器的代码是"get_weapon("武器名称",获得数量)"
  592. #动态获得防具的代码是"get_armor("防具名称",获得数量)"
  593. #获得金钱的代码是"get_gold(获得钱数)"
  594. #===========================================================================
  595. #获得金钱的时候特殊效果只有窗口随事件位置变化,米有动态哦~
  596. #因为默认是没有金钱图标的,如果想把效果加上去的话可以尝试自己修改这个脚本。
  597. #===========================================================================
  598. #冲突性:几乎没有,因为很少有外挂脚本会修改def start的。其他内容均为原创。
  599. #即使发生冲突也应该很容易进行整合^ ^
  600. #===========================================================================
  601. #感谢k' sama前两天解答了我读取事件坐标的问题。
  602. #===========================================================================
  603. class Game_Event < Game_Character
  604.   #--------------------------------------------------------------------------
  605.   # ● 启动事件 #读取事件坐标
  606.   #--------------------------------------------------------------------------
  607.   def start
  608.       $event_x = 0
  609.       $event_y = 0
  610.     # 执行内容不为空的情况下
  611.     if @list.size > 1
  612.       @starting = true
  613.       $event_x = @event.x * 32 + 3
  614.       $event_y = @event.y * 32
  615.     end
  616.   end
  617. end
  618. #===========================================================================
  619. #     动态取得物品的窗口
  620. #===========================================================================
  621. class Window_get_item < Window_Base
  622.   #--------------------------------------------------------------------------
  623.   # ● 初始化对像
  624.   #--------------------------------------------------------------------------
  625.   def initialize(x,y,text)
  626.     super(x, y, 640, 52)
  627.     @text = text
  628.     self.contents = Bitmap.new(width - 32, height - 32)#只用來避免出錯
  629.     #这个中心对齐忙了几乎一夜。。。。。。
  630.     @daomei = 30 - (self.contents.text_size(@text).width / 11 - 1) * 2
  631.     self.width =  self.contents.text_size(@text).width + @daomei
  632.     self.contents = Bitmap.new(width - 32, height - 32)#重定位图
  633.     @text_width = self.contents.text_size(@text).width
  634.     @extra_width = @text_width - 140 > 0 ? @text_width - 140 : 0
  635.     self.x = $event_x > 0 ? $event_x - self.contents.width / 2 : self.contents.width
  636.     #几重保险运算
  637.     if $event_x - self.width / 2 <= 0
  638.      self.x = 0
  639.    end
  640.     if $event_x + self.width / 2 >= $game_map.width * 32
  641.      self.x = $game_map.width * 32 - self.width
  642.    end
  643.     self.y = $event_y
  644.     if $event_y + self.height / 2 + 6 >= $game_map.height * 32
  645.       self.y = $game_map.height * 32 - self.height
  646.     end
  647.     self.back_opacity = 120
  648.     refresh
  649.   end
  650.   #--------------------------------------------------------------------------
  651.   # ● 刷新
  652.   #--------------------------------------------------------------------------
  653.   def refresh
  654.     self.contents.clear
  655.     self.contents.font.size = 18
  656.     self.contents.draw_text(0,0,self.width - 32,20,@text)
  657.   end
  658. end
  659. class Game_Party
  660.   #--------------------------------------------------------------------------
  661.   # ● 获得物品
  662.   #     item_id : 物品 ID
  663.   #     n       : 个数
  664.   #--------------------------------------------------------------------------
  665.   def get_item(item_id, n)
  666.     @angel_item_dis = $data_items[item_id]
  667.     @item_id = item_id
  668.     @n = n
  669.     #和谐掉得到0个道具以及负数个武器和三位数个武器的情况
  670.     if @n <= 0 or @n > 99
  671.       return
  672.     end
  673.     # 更新 hash 的个数数据
  674.     if @item_id > 0
  675.       @items[@item_id] = [[item_number(@item_id) + @n, 0].max, 99].min
  676.     end
  677.     #描绘图标的变量带入sprite
  678.     $angel_dis = Sprite.new
  679.     #描绘图标
  680.     if @angel_item_dis.icon_name != ""
  681.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  682.     $angel_dis.x = $event_x   
  683.     $angel_dis.y = $event_y
  684.     $angel_dis.opacity = 155
  685.   end
  686.     #移动图标
  687.     for i in 1..10
  688.       $angel_dis.y -= 4
  689.       $angel_dis.opacity += 10
  690.       $angel_dis.update
  691.       Graphics.update
  692.     end
  693.     #计算额外宽度
  694.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  695.     #描绘得到道具的窗口
  696.     if @n == 1 #如果得到的道具只有一个
  697.     $one = 1
  698.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  699.   else#除此以外的场合
  700.     $one = 2
  701.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  702.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  703.   end
  704.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  705.     #只是等待50帧而已
  706.     50.times{Graphics.update}
  707.     #销毁
  708.     $angel_dis.dispose
  709.     $angel_name_window.dispose
  710.   end
  711.   #--------------------------------------------------------------------------
  712.   # ● 获得武器
  713.   #     item_id : 物品 ID
  714.   #     n       : 个数
  715.   #--------------------------------------------------------------------------
  716.   def get_weapon(item_id, n)
  717.     @angel_item_dis = $data_weapons[item_id]
  718.     @item_id = item_id
  719.     @n = n
  720.     #和谐掉得到0个武器以及负数个武器和三位数个武器的情况的情况
  721.     if @n <= 0 or @n > 99
  722.       return
  723.     end
  724.     # 更新 hash 的个数数据
  725.     if @item_id > 0
  726.       @weapons[@item_id] = [[weapon_number(@item_id) + @n, 0].max, 99].min
  727.     end
  728.     #描绘图标的变量带入sprite
  729.     $angel_dis = Sprite.new
  730.     #描绘图标
  731.     if @angel_item_dis.icon_name !=  ""
  732.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  733.     $angel_dis.x = $event_x   
  734.     $angel_dis.y = $event_y
  735.     $angel_dis.opacity = 155
  736.   end
  737.     #移动图标
  738.     for i in 1..10
  739.       $angel_dis.y -= 4
  740.       $angel_dis.opacity += 10
  741.       $angel_dis.update
  742.       Graphics.update
  743.     end
  744.     #计算额外宽度
  745.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  746.     #描绘得到道具的窗口
  747.     if @n == 1 #如果得到的道具只有一个
  748.     $one = 1
  749.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  750.   else#除此以外的场合
  751.     $one = 2
  752.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  753.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  754.   end
  755.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  756.     #只是等待50帧而已
  757.     50.times{Graphics.update}
  758.     #销毁
  759.     $angel_dis.dispose
  760.     $angel_name_window.dispose
  761.   end
  762.   #--------------------------------------------------------------------------
  763.   # ● 获得防具
  764.   #     item_id : 物品 ID
  765.   #     n       : 个数
  766.   #--------------------------------------------------------------------------
  767.   def get_armor(item_id, n)
  768.     @angel_item_dis = $data_armors[item_id]
  769.     @item_id = item_id
  770.     @n = n
  771.     #和谐掉得到0个防具,负数个防具以及三位数个防具的情况
  772.     if @n <= 0 or @n > 99
  773.       return
  774.     end
  775.     # 更新 hash 的个数数据
  776.     if @item_id > 0
  777.       @armors[@item_id] = [[armor_number(@item_id) + @n, 0].max, 99].min
  778.     end
  779.     #描绘图标的变量带入sprite
  780.     $angel_dis = Sprite.new
  781.     #描绘图标
  782.     if @angel_item_dis.icon_name != ""
  783.     $angel_dis.bitmap = Bitmap.new("Graphics/Icons/#{@angel_item_dis.icon_name}")
  784.     $angel_dis.x = $event_x   
  785.     $angel_dis.y = $event_y
  786.     $angel_dis.opacity = 155
  787.   end
  788.     #移动图标
  789.     for i in 1..10
  790.       $angel_dis.y -= 4
  791.       $angel_dis.opacity += 10
  792.       $angel_dis.update
  793.       Graphics.update
  794.     end
  795.     #p @angel_item_dis.name.length* 9
  796.     #计算额外宽度
  797.     @extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  798.     #描绘得到道具的窗口
  799.     if @n == 1 #如果得到的道具只有一个
  800.     $one = 1
  801.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@angel_item_dis.name)
  802.   else#除此以外的场合
  803.     $one = 2
  804.     @text = "#{@angel_item_dis.name} "+"×"+" #{@n}"
  805.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 - @extra_width / 2: 0 ,$event_y - 4,@text)
  806.   end
  807.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  808.     #只是等待50帧而已
  809.     50.times{Graphics.update}
  810.     #销毁
  811.     $angel_dis.dispose
  812.     $angel_name_window.dispose
  813.    end
  814.   #--------------------------------------------------------------------------
  815.   # ● 获得金钱
  816.   #     n       : 个数
  817.   #--------------------------------------------------------------------------
  818.   def get_gold( n)
  819.     @n = n
  820.     #和谐掉得到0金钱以及负数金钱的情况
  821.     if @n <= 0
  822.       return
  823.     end
  824.      @gold = [[@gold + n, 0].max, 9999999].min
  825.     #计算额外宽度
  826.     #@extra_width = @angel_item_dis.name.size * 9 - 140 > 0 ? @angel_item_dis.name.size  * 9 - 140 : 0
  827.     #描绘得到道具的窗口
  828.     $angel_name_window = Window_get_item.new($event_x - 56 > 0 ? $event_x - 56 : 0 ,$event_y - 4,"#{n}" + "#{$data_system.words.gold}")
  829.     Audio.se_play("Audio/SE/"+"006-System06",80,100)
  830.     #只是等待50帧而已
  831.     50.times{Graphics.update}
  832.     #销毁
  833.     $angel_name_window.dispose
  834.    end
  835. end
  836. class Interpreter
  837.   #========================================================================
  838.   #定义事件中动态获得物品的方法
  839.   #========================================================================
  840.   def  get_item(item_name,n)
  841.     @item_name = item_name
  842.     for i in 1...$data_items.size
  843.       if $data_items[i].name ==  @item_name
  844.         @item_id = i
  845.       end
  846.     end
  847.      return $game_party.get_item(@item_id, n)
  848.    end
  849.   #========================================================================
  850.   #定义事件中动态获得武器的方法
  851.   #========================================================================
  852.     def  get_weapon(item_name, n)
  853.     @item_name = item_name
  854.     for i in 1...$data_weapons.size
  855.       if $data_weapons[i].name ==  @item_name
  856.         @item_id = i
  857.       end
  858.     end
  859.      return $game_party.get_weapon(@item_id, n)
  860.    end
  861.   #========================================================================
  862.   #定义事件中动态获得防具的方法
  863.   #========================================================================
  864.     def  get_armor(item_name, n)
  865.     @item_name = item_name
  866.     for i in 1...$data_armors.size
  867.       if $data_armors[i].name ==  @item_name
  868.         @item_id = i
  869.       end
  870.     end
  871.      return $game_party.get_armor(@item_id, n)
  872.    end
  873.   #========================================================================
  874.   #定义事件中动态获得金钱的方法
  875.   #========================================================================
  876.     def  get_gold(n)
  877.      return $game_party.get_gold(n)
  878.   end
  879. end
复制代码

另外,此脚本虽然内容不少,但是原理并不复杂,都是些初级知识的啦,想学习脚本的朋友们可以把这个脚本读懂然后仿写一点其他的效果,例如随文字数量变化的window_help之类的。

评分

参与人数 1 +1 收起 理由
化冻 + 1

查看全部评分

我需要不再伤感,没有那种人,没有不平的地方。
回复

使用道具 举报

88

主题

5419

帖子

214748万

积分

版主

S素世上最伟大最华丽

Rank: 7Rank: 7Rank: 7

积分
2147483647
QQ
发表于 2007-8-17 16:15:21 | 显示全部楼层
很好,鼓掌~~

*得到的道具为0或者负数,脚本不执行(和谐和谐)。
大于99也该和谐,和谐~~~

动态,呃,一开始就联想到动态分配内存,呃,无视S吧...hoho
回复 支持 反对

使用道具 举报

0

主题

43

帖子

494

积分

④见习

积分
494
发表于 2007-8-17 16:54:07 | 显示全部楼层
9R的东西...0 0
来支持~~
回复 支持 反对

使用道具 举报

4

主题

54

帖子

606

积分

⑤进阶

积分
606
 楼主| 发表于 2007-8-19 19:46:06 | 显示全部楼层
更新
超过99个的时候和谐
使用输入道具名称即可不用再去背id,更加方便。
我需要不再伤感,没有那种人,没有不平的地方。
回复 支持 反对

使用道具 举报

好人卡的 该用户已被删除
发表于 2007-8-19 22:25:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

4

主题

54

帖子

606

积分

⑤进阶

积分
606
 楼主| 发表于 2007-8-20 12:54:33 | 显示全部楼层
对不起因为没有注意留下了同一个事件连续得到物品位置错乱的bug
已经去掉
我需要不再伤感,没有那种人,没有不平的地方。
回复 支持 反对

使用道具 举报

122

主题

4962

帖子

74

积分

超级版主

Rank: 8Rank: 8

积分
74

声命组银赏

QQ
发表于 2007-8-20 13:07:31 | 显示全部楼层



图片帮连……
回复 支持 反对

使用道具 举报

4

主题

54

帖子

606

积分

⑤进阶

积分
606
 楼主| 发表于 2007-8-20 15:16:27 | 显示全部楼层
6r的图片在发布之后全删了- -
我需要不再伤感,没有那种人,没有不平的地方。
回复 支持 反对

使用道具 举报

122

主题

4962

帖子

74

积分

超级版主

Rank: 8Rank: 8

积分
74

声命组银赏

QQ
发表于 2007-8-20 15:37:44 | 显示全部楼层
引用第7楼永劫的咎人于2007-08-20 15:16发表的  :
6r的图片在发布之后全删了- -

图片链接已经修复
回复 支持 反对

使用道具 举报

5

主题

50

帖子

552

积分

⑤进阶

积分
552
QQ
发表于 2007-8-22 15:23:30 | 显示全部楼层
[s:6]  [s:6]  [s:6]    偶为什么用不起啊,好难啊,谁教教偶,偶是新人,可以++++偶滴QQ545463137
n\ ▼ ﹎wǒɑ僞椹嬷 總s'敗給現實…」●
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 12:13 , Processed in 0.015469 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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