Project1

标题: 这个脚本谁来纠错~~~看你的功力啦 [打印本页]

作者: ichijouziken    时间: 2009-6-8 02:07
标题: 这个脚本谁来纠错~~~看你的功力啦
由于原作者不在线,需要你的帮忙哦……
我需要的是仙三学习技能的效果,也就是比如A技能使用了5次,就学会B技能,B技能使用了10次,就学会C技能……每一个角色都是这样,所以不能简单的安一个事件,那么我选择脚本!但是:问题是:先看脚本吧:
声明作者:
霜冻之狼

点数:11
称号:剑士
经验:769
帖子:940
注册:2009-1-28

以下引用霜冻之狼于2009-6-6 15:29:52的发言:

第一在main前面插入:

module RPG
class Skill
   def name
     return @name.split(/,/)[0]
   end
   def timemax
     return @name.split(/,/)[1]
   end
end
end
class Game_Actor < Game_Battler
attr_reader   :skillstime                   # 特技已用次数
@skillstime=[]
def skillstime
return @skillstime
end
end


其次在Scene_Battle 4第339行和第440行之间插入:

actor = @active_battler.id
if @active_battler.is_a?(Game_Actor) and skill.timemax != nil
if actor.skilltime[skill.id] == skill.timemax+1
actor.learn_skill(skill.id+1)
else
actor.skilltime[skill.id]=0 if actor.skilltime[skill.id] == nil
actor.skilltime[skill.id]+=1
end
end


使用范例:把技能名称改成"名称,次数"的形式,就会自动学习该技能下一个id的技能

比如把10号技能的技能名称改上"十字斩,2".此技能用两次后主角就会学到11号技能
比如把23号技能的技能名称改成"旋风斩,6".此技能用两次后主角就会学到24号技能

如果像取消这个功能,就把"十字斩,2"改成"十字斩"就行了

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


[本贴由作者于 2009-6-6 15:39:51 最后编辑]


这样编写之后出现了这个问题:

脚本 'Scene_Battle 4'的341 行 发生了 NoMethodError
undefined method `skilltime' for 3:Fixnum

我应该如何解决呢!~~~ [LINE]1,#dddddd[/LINE]此贴于 2009-6-11 12:16:33 被版主darkten提醒,请楼主看到后对本贴做出回应。
作者: tommay    时间: 2009-6-8 02:08
momo小狼,LZ很强!
[LINE]1,#dddddd[/LINE]
未防纯水,这脚本很难很难。。。
作者: ichijouziken    时间: 2009-6-8 02:42
也就是说,我需要加s吗……
作者: ichijouziken    时间: 2009-6-8 02:45
修改之后变成了:
脚本 'Scene_Battle 4'的341 行 发生了 NoMethodError
undefined method `skillstime' for 3:Fixnum
作者: 66rpg学习    时间: 2009-6-8 02:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: 66rpg学习    时间: 2009-6-8 02:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: ichijouziken    时间: 2009-6-8 02:53
然而…………
新建了一个文档,还是把小狼的直接写进去:结果是这样的:
脚本 'Scene_Battle 4'的341 行 发生了 NameError。
undefined local variable or method `skill' for #<Scene_Battle:Ox1199f48

作者: 雷特爾    时间: 2009-6-8 02:54
我很怀疑LZ还有沒有用了其它脚本。。

沖突了也说不定。。
作者: ichijouziken    时间: 2009-6-8 04:30
还使用了 柳大的技能分类 就是@名称,在说明里。这个应该不会有冲突吧。
作者: ichijouziken    时间: 2009-6-8 04:33
以下引用66rpg学习于2009-6-7 18:50:20的发言:

你把def skillstime
return @skillstime
end 删了试试


还是依旧
作者: darkten    时间: 2009-6-9 19:40

把“s”删去看看...
以下引用ichijouziken于2009-6-7 18:42:18的发言:
也就是说,我需要加s吗……


作者: goahead    时间: 2009-6-9 19:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: hitlerson    时间: 2009-6-9 22:47
真它囧一代码写的{/pz}


module RPG
class Skill
  attr_accessor:skillstime ←←←←←←←←←←←←←  skill的属性
  #alias initialize1 initialize  #这个不加          ↑当然放这里
  #def initialize                #也无所谓了        ↑
  #  @skillstime = 0             #第一次是nil       ↑
  #end                                              ↑attr_reader
  def name                                        # ↑  改成
    return @name.split(/,/)[0]                    #↑  attr_accessor
  end                                             #↑  可读写
  def timemax                                     #↑
    return @name.split(/,/)[1]                    #↑
  end                                             #↑
  def skillstime #这个是技能的属性当然定义给技能!#↑
    return @skillstime                            #↑
  end                                             #↑
end                                               ↑
end                                               ↑
#class Game_Actor < Game_Battler                  ↑
#attr_reader   :skillstime                   # 特技已用次数

#@skillstime=[]
#def skillstime             #干嘛又搞个skillstime?
#return @skillstime         #变量和函数拼啊
#end                        #看谁厉害。。。。

#end

skill.skillstime 调用
作者: 霜冻之狼    时间: 2009-6-10 01:16
我在Actor加skillstime.是因为楼主的需求,即使同一技能每个人的使用次数都会不同.
比如阿尔西斯用十字斩3次,克萝莉亚可能只用了1次,所以必须分开处理.

这段脚本我改好了,问题是卡在最后一关----timemax取得的不是数字,是字串符.
大家可以看一下我改的,会因为timemax是字串符而报错
module RPG
class Skill
  def name
    return @name.split(/,/)[0]
  end
  def timemax
    timemax = @name.split(/,/)[1]
    timemax != nil ? timemax : 0
    timemax.to_i
    return timemax
  end
end
end

class Game_Actor < Game_Battler
attr_accessor   :skillstime                   # 特技已用次数
@skillstime=[]
end
actor = @active_battler
if @active_battler.is_a?(Game_Actor) and @skill.timemax != 0
actor.skillstime[@skill.id] = 0 if actor.skillstime[@skill.id]==nil
if actor.skillstime[@skill.id]  ==  @skill.timemax+1
actor.learn_skill(@skill.id+1)
else
actor.skillstime[@skill.id]= @skill.timemax+1
end
end

作者: 66rpg学习    时间: 2009-6-12 08:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: ichijouziken    时间: 2009-6-13 01:16
那具体说应该如何做呢




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