Project1

标题: 早起提问,这个脚本有错误! [打印本页]

作者: bububinghe    时间: 2008-6-5 14:02
标题: 早起提问,这个脚本有错误!
如题,这是个新得失物品提示脚本.
系统设置:
  1. #==============================================================================
  2. # 新·得失物品                                                     By Sunny Boy
  3. #==============================================================================
  4. $SUNNYBOY_GETITEM_控制显示得失物品的开关号 = 41
  5. $SUNNYBOY_GETITEM_得到物品音 = "006-System06"
  6. $SUNNYBOY_GETITEM_失去物品音 = "005-System05"

  7. $SUNNYBOY_GETITEM_控制显示得失武器的开关号 = 42
  8. $SUNNYBOY_GETITEM_得到武器音 = "006-System06"
  9. $SUNNYBOY_GETITEM_失去武器音 = "005-System05"

  10. $SUNNYBOY_GETITEM_控制显示得失防具的开关号 = 43
  11. $SUNNYBOY_GETITEM_得到防具音 = "006-System06"
  12. $SUNNYBOY_GETITEM_失去防具音 = "005-System05"

  13. $SUNNYBOY_GETITEM_控制显示得失金钱的开关号 = 44
  14. $SUNNYBOY_GETITEM_得到金钱音 = "006-System06"
  15. $SUNNYBOY_GETITEM_失去金钱音 = "005-System05"

  16. $SUNNYBOY_GETITEM_控制显示得失经验的开关号 = 45
  17. $SUNNYBOY_GETITEM_得到经验音ME = "011-Item02"
  18. $SUNNYBOY_GETITEM_失去经验音ME = "012-Gag01"

  19. $SUNNYBOY_GETITEM_背景图片 = "GetItemBackground"
  20. $SUNNYBOY_GETITEM_小块图片 = "GetItemBlock"
  21. #==============================================================================
  22. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  23. #==============================================================================
复制代码

系统核心脚本
  1. #==============================================================================
  2. # 新·得失物品                                                     By Sunny Boy
  3. #==============================================================================
  4. class Interpreter
  5.   def sunnyboy_getitem_switch?(id)
  6.     case id
  7.     when 1
  8.       return $game_switches[$SUNNYBOY_GETITEM_控制显示得失物品的开关号]
  9.     when 2
  10.       return $game_switches[$SUNNYBOY_GETITEM_控制显示得失武器的开关号]
  11.     when 3
  12.       return $game_switches[$SUNNYBOY_GETITEM_控制显示得失防具的开关号]
  13.     when 4
  14.       return $game_switches[$SUNNYBOY_GETITEM_控制显示得失金钱的开关号]
  15.     when 5
  16.       return $game_switches[$SUNNYBOY_GETITEM_控制显示得失经验的开关号]
  17.     end
  18.   end
  19.   def sunnyboy_getitem_playsound(id)
  20.     case id
  21.     when 1
  22.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_得到物品音, 80)
  23.     when 2
  24.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_失去物品音, 80)
  25.     when 3
  26.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_得到武器音, 80)
  27.     when 4
  28.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_失去武器音, 80)
  29.     when 5
  30.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_得到防具音, 80)
  31.     when 6
  32.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_失去防具音, 80)
  33.     when 7
  34.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_得到金钱音, 80)
  35.     when 8
  36.       Audio.se_play("Audio/SE/" + $SUNNYBOY_GETITEM_失去金钱音, 80)
  37.     when 9
  38.       Audio.me_play("Audio/ME/" + $SUNNYBOY_GETITEM_得到经验音ME, 80)
  39.     when 10
  40.       Audio.me_play("Audio/ME/" + $SUNNYBOY_GETITEM_失去经验音ME, 80)
  41.     end
  42.   end
  43. end
  44. #==============================================================================
  45. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  46. #==============================================================================
复制代码

核心动画脚本

  1. #==============================================================================
  2. # 新·得失物品                                                     By Sunny Boy
  3. #==============================================================================
  4. class Interpreter
  5.   def sunnyboy_getitem_ani_1
  6.     @sunnyboy_getitem_block = Sprite.new
  7.     @sunnyboy_getitem_block.bitmap = RPG::Cache.picture($SUNNYBOY_GETITEM_小块图片)
  8.     @sunnyboy_getitem_block.x = 640
  9.     @sunnyboy_getitem_block.y = 320
  10.     @sunnyboy_getitem_block.z = 9998
  11.     loop do
  12.       # 刷新游戏画面
  13.       Graphics.update
  14.       # 刷新输入信息
  15.       Input.update
  16.       if @sunnyboy_getitem_block.x > 619 then
  17.         for i in 1...5
  18.           @sunnyboy_getitem_block.x -= 1 if @sunnyboy_getitem_block.x > 619
  19.         end
  20.       else
  21.         break
  22.       end
  23.     end
  24.    
  25.     @sunnyboy_getitem_back = Sprite.new
  26.     @sunnyboy_getitem_back.bitmap = RPG::Cache.picture($SUNNYBOY_GETITEM_背景图片)
  27.     @sunnyboy_getitem_back.x = 619
  28.     @sunnyboy_getitem_back.y = 320
  29.     @sunnyboy_getitem_back.z = 9997
  30.     loop do
  31.       # 刷新游戏画面
  32.       Graphics.update
  33.       # 刷新输入信息
  34.       Input.update
  35.       if @sunnyboy_getitem_back.x > 370 then
  36.         for i in 1...10
  37.           @sunnyboy_getitem_back.x -= 1 if @sunnyboy_getitem_back.x > 370
  38.         end
  39.       else
  40.         break
  41.       end
  42.     end
  43.    
  44.     @sunnyboy_getitem_text = Sprite.new
  45.     @sunnyboy_getitem_text.opacity = 0
  46.     @sunnyboy_getitem_text.x = @sunnyboy_getitem_back.x
  47.     @sunnyboy_getitem_text.y = @sunnyboy_getitem_back.y
  48.     @sunnyboy_getitem_text.z = 9999
  49.     @sunnyboy_getitem_text.bitmap = Bitmap.new(249, 49)
  50.     @sunnyboy_getitem_text.bitmap.font.size = 16
  51.     return @sunnyboy_getitem_text.bitmap
  52.   end
  53.   
  54.   def sunnyboy_getitem_ani_2
  55.     loop do
  56.       # 刷新游戏画面
  57.       Graphics.update
  58.       # 刷新输入信息
  59.       Input.update
  60.       if @sunnyboy_getitem_text.opacity != 255 then
  61.         @sunnyboy_getitem_text.opacity += 10
  62.       else
  63.         break
  64.       end
  65.     end
  66.    
  67.     frame_count = 0
  68.     loop do
  69.       # 刷新游戏画面
  70.       Graphics.update
  71.       # 刷新输入信息
  72.       Input.update
  73.       frame_count += 1
  74.       break if frame_count == 40
  75.     end
  76.    
  77.     loop do
  78.       # 刷新游戏画面
  79.       Graphics.update
  80.       # 刷新输入信息
  81.       Input.update
  82.       if @sunnyboy_getitem_text.opacity != 0 then
  83.         @sunnyboy_getitem_text.opacity -= 10
  84.       else
  85.         break
  86.       end
  87.     end
  88.     @sunnyboy_getitem_text.dispose
  89.    
  90.     loop do
  91.       # 刷新游戏画面
  92.       Graphics.update
  93.       # 刷新输入信息
  94.       Input.update
  95.       if @sunnyboy_getitem_back.x != 619 then
  96.         for i in 1...10
  97.           @sunnyboy_getitem_back.x += 1 if @sunnyboy_getitem_back.x != 619
  98.         end
  99.       else
  100.         break
  101.       end
  102.     end
  103.    
  104.     @sunnyboy_getitem_back.dispose
  105.    
  106.     loop do
  107.       # 刷新游戏画面
  108.       Graphics.update
  109.       # 刷新输入信息
  110.       Input.update
  111.       if @sunnyboy_getitem_block.x != 640 then
  112.         for i in 1...5
  113.           @sunnyboy_getitem_block.x += 1 if @sunnyboy_getitem_block.x != 640
  114.         end
  115.       else
  116.         break
  117.       end
  118.     end
  119.    
  120.     @sunnyboy_getitem_block.dispose
  121.   end
  122. end
  123. #==============================================================================
  124. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  125. #==============================================================================
复制代码

得失物品脚本

  1. #==============================================================================
  2. # 新·得失物品                                                     By Sunny Boy
  3. #==============================================================================
  4. class Interpreter
  5.   def command_126
  6.     # 获取要操作的值
  7.     value = operate_value(@parameters[1], @parameters[2], @parameters[3])
  8.     # 增减物品
  9.     $game_party.gain_item(@parameters[0], value)
  10.    
  11.     if !sunnyboy_getitem_switch?(1) then
  12.       text = sunnyboy_getitem_ani_1
  13.       item = $data_items[@parameters[0]]
  14.       if value >= 1 then
  15.         text.draw_text(6, 6, 237, 16, "得到物品:")
  16.         text.draw_text(34, 22, 209, 24, "× " + value.to_s, 2)
  17.         sunnyboy_getitem_playsound(1)
  18.       else
  19.         text.draw_text(6, 6, 237, 16, "失去物品:")
  20.         text.draw_text(34, 22, 209, 24, "× " + (0 - value).to_s, 2)
  21.         sunnyboy_getitem_playsound(2)
  22.       end
  23.       bitmap = RPG::Cache.icon(item.icon_name)
  24.       text.blt(6, 22, bitmap, Rect.new(0, 0, 24, 24))
  25.       text.draw_text(34, 22, 209, 24, item.name)
  26.       sunnyboy_getitem_ani_2
  27.       
  28.     end
  29.    
  30.     # 继续
  31.     return true
  32.   end
  33. end
  34. #==============================================================================
  35. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  36. #==============================================================================
复制代码


就是这个脚本,运行起来没问题,但是问题出在:
假设你在某NPC处得到物品A,提示完毕后,发现存档失败!
错误提示:
脚本'Scene_save'的73行 发生了TypeError
nomarshal_dump is defined for class Sprite [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: wy29    时间: 2008-6-5 22:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: bububinghe    时间: 2008-6-6 02:24
回楼上,不是Scene_save的问题,你仔细看看我的描述.

作者: 3535    时间: 2008-6-6 03:05
RP问题,尝试在主站重新COPY一次,我以前也试过。- -
http://rpg.blue/htm/Topic_47717.htm
作者: bububinghe    时间: 2008-6-6 03:13
以下引用3535于2008-6-5 19:05:32的发言:

RP问题,尝试在主站重新COPY一次,我以前也试过。- -
http://rpg.blue/htm/Topic_47717.htm

你也用过这个脚本吗?
copy什么?system????
作者: Infrared    时间: 2008-6-6 03:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: bububinghe    时间: 2008-6-6 03:18
以下引用Infrared于2008-6-5 19:16:10的发言:


以下引用bububinghe于2008-6-5 19:13:52的发言:


以下引用3535于2008-6-5 19:05:32的发言:

RP问题,尝试在主站重新COPY一次,我以前也试过。- -
http://rpg.blue/htm/Topic_47717.htm


你也用过这个脚本吗?
copy什么?system????


得失物品提示脚本- -


[本贴由作者于 2008-6-5 19:16:18 最后编辑]



我用的是 新得失物品提示脚本
它的错误貌似出现在动画显示部分
和你说的..
....原理一样吗?
作者: Infrared    时间: 2008-6-6 03:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: bububinghe    时间: 2008-6-6 03:32
你也用这个脚本测试了?
作者: Infrared    时间: 2008-6-6 03:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: bububinghe    时间: 2008-6-6 04:20
以下引用Infrared于2008-6-5 19:41:59的发言:


以下引用bububinghe于2008-6-5 19:32:30的发言:

你也用这个脚本测试了?


你重新COPY了还是不行?


不行,用你给的地址上的那个copy也没用

作者: 3535    时间: 2008-6-6 04:37
找到问题了,是这样:由于sunnyboy_getitem_back是@开头,$game_system.map_interpreter就包含了这个Sprite对象。

解决方法:
@sunnyboy_getitem_text = nil,加在@sunnyboy_getitem_text.dispose下。
@sunnyboy_getitem_back = nil,加在@sunnyboy_getitem_back.dispose下。
@sunnyboy_getitem_block = nil,加在@sunnyboy_getitem_block.dispose下。

[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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