Project1

标题: 求助!如何冻结物品? [打印本页]

作者: zhyd1010    时间: 2010-12-19 15:01
标题: 求助!如何冻结物品?
请问一下,如果我想要建立一个事件使某一属性的物品冻结(不能使用、不可丢弃、不可交易)
或解除冻结,可以通过什么方法来实现?
请求各位的帮助,谢谢!
作者: Wind2010    时间: 2010-12-19 15:10
LZ需要做到这种效果的物品少吗?如果少的话可以做一个相同的物品,设置成不能使用和售价为0,锁定和解锁就把这两个物品转换就Ok了
作者: zhyd1010    时间: 2010-12-19 15:17
回复 Wind2010 的帖子

不少,我是想使某一属性的物品在某些地图上不能使用。
你的方法虽然可以,但几乎所有的物品都要做两遍了。
对了,不仅仅是物品哦,还有装备什么的……
作者: 立华·奏    时间: 2010-12-19 15:45
本帖最后由 立华·奏 于 2010-12-20 22:54 编辑
  1. #--------------
  2. #Freeze Item
  3. #--------------
  4. #
  5. #Data
  6. class Game_System
  7.   attr :freeze_items
  8.   alias godseyes_initialize initialize unless self.instance_methods.include?("godseyes_initialize") #忽然发现我真的很NC - -
  9.   def initialize
  10.     @freeze_items = []
  11.     godseyes_initialize
  12.   end
  13. end

  14. #module RPG
  15. module RPG
  16.   class Item
  17.     def price
  18.       return $game_system.freeze_items.include?(@id) ? 0 : @price
  19.     end
  20.     def occasion
  21.       return $game_system.freeze_items.include?(@id) ? 3 : @occasion
  22.     end
  23.   end
  24. end

  25. #Interpreter
  26. class Interpreter
  27.   def freeze_item(id)
  28.     $game_system.freeze_items.push(id)
  29.   end
  30. end
复制代码
按下F11打开脚本编辑器后再Main上面新建脚本页,然后添加如上代码。
使用时请事件第三页脚本:
freeze_item(物品ID)
作者: zhyd1010    时间: 2010-12-19 15:55
回复 立华·奏 的帖子

原来如此,真是多谢了。
再麻烦你一下,如果我要将一种属性的物品全部冻结,可以修改这个代码实现吗?
作者: 立华·奏    时间: 2010-12-19 17:24
for i in $data_items
if i != nil
  if i.element_set.include?(属性编号)
   freeze_item(i.id)
  end
end
end
这样试试,未测试

作者: zhyd1010    时间: 2010-12-19 17:53
修改后
#--------------
#Freeze Item
#--------------
#
#Data
class Game_System
  attr :freeze_items
  alias godseyes_initialize initialize unless self.instance_methods.include?("God's Eyes")
  def initialize
    @freeze_items = []
    godseyes_initialize
  end
end

#module RPG
module RPG
  class Item
    for i in $data_items
      if i != nil
        if i.element_set.include?(017)
          def price
            return $game_system.freeze_items.include?(@id) ? 0 : @price
          end
          def occasion
            return $game_system.freeze_items.include?(@id) ? 3 : @occasion
          end
        end
      end
    end
  end
end

#Interpreter
class Interpreter
  def freeze_item(id)
    $game_system.freeze_items.push(id)
  end
end

可出现了
undefined method 'each' for nil:NilClass的问题
作者: Wind2010    时间: 2010-12-19 17:57
  1. for i in $data_items
  2. if i != nil
  3.   if i.element_set.include?(属性编号)
  4.    freeze_item(i.id)
  5.   end
  6. end
  7. end
复制代码
这段应该不是插入到那个脚本里面吧?
作者: zhyd1010    时间: 2010-12-19 18:01
呃,没有办法,对ruby语言如何建构还是不明,只能看懂,定义啦类啦什么的搞不清
不过错误好像不在这个问题上
刚刚我把
for i in $data_items
改成了
for i in 1...$data_items
错误变成了bad value for range
更不明了……

作者: 立华·奏    时间: 2010-12-20 22:53
请在事件调用的时候使用此代码……
for i in $data_items
if i != nil
  if i.element_set.include?(属性编号)
   freeze_item(i.id)
  end
end
end
作者: zhyd1010    时间: 2010-12-20 23:44
回复 立华·奏 的帖子

终于可以了!谢谢你的帮助!
不过话说回来……输入属性编号时输017它居然不认……纠结好了一会
话说,如果要使物品的价格回复成数据库中设定的价格有什么办法吗?
说一下思路就好了。
作者: 连贴大侠    时间: 2010-12-21 09:43
废屁~!当然用开关!
作者: 立华·奏    时间: 2010-12-21 12:34
本帖最后由 立华·奏 于 2010-12-21 12:37 编辑

那么……
class Interpreter
def unlock_item(id)
  $game_system.freeze_items.delete(id)
end
end
加入到脚本页
解锁物品请使用:
unlock_item(编号)
作者: zhyd1010    时间: 2010-12-21 13:02
好了,全部完成,谢谢帮助




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