Project1

标题: 求一句简单的脚本 [打印本页]

作者: 工藤~新一じ    时间: 2015-11-26 22:53
标题: 求一句简单的脚本
楼主因为一个效果,因为事件实在写不出来,所以要依赖脚本。
我想给1号职业在2级时学会3号特技。
因为是特定的剧情才有,而楼主又完全不会写脚本,所以希望大大帮忙!
作者: RyanBern    时间: 2015-11-26 22:56
利用数据库-职业直接进行设置不行吗?
作者: yang1zhi    时间: 2015-11-26 23:00
数据库不是有每个职业每级能学什么技能的设定吗
作者: 工藤~新一じ    时间: 2015-11-26 23:01
RyanBern 发表于 2015-11-26 22:56
利用数据库-职业直接进行设置不行吗?

。。不行
作者: 枫の叶    时间: 2015-11-27 07:58
本帖最后由 枫の叶 于 2015-11-27 13:07 编辑
  1. $game_party.actors.each do |a|
  2.   next if a.level < 2 or a.class_id != 1
  3.   a.learn_skill(3)
  4. end
复制代码

作者: 萧萧风色    时间: 2015-11-27 17:20
这个在数据库里不是可以直接设置么.....
作者: 工藤~新一じ    时间: 2015-11-27 18:43
萧萧风色 发表于 2015-11-27 17:20
这个在数据库里不是可以直接设置么.....

设定是这样的,完成某项任务后,如果主角达到某等级就会领悟技能,所以要这样设置。
当然如果更改职业也是可以做到这样的效果。
但角色很多,而且如果这个设置能用上的话,还有很多灵活运用的地方。
所以必须要这样写。
作者: 工藤~新一じ    时间: 2015-11-27 18:47
RyanBern 发表于 2015-11-26 22:56
利用数据库-职业直接进行设置不行吗?

最同情没有解释清楚。
版主大大可以到7楼看下。
因为本身角色对应的职业是不会这个技能的,必须要完成特定的任务后,才可以通过升级学该技能。
如果这个方法只用一两次,我可以新增一个职业让角色来更改,但我想灵活运用这个效果,所以希望能用脚本来写。
所以版主大大拜托拉!
作者: cinderelmini    时间: 2015-11-27 19:00
本帖最后由 cinderelmini 于 2015-11-27 21:00 编辑
不是需求效果的内容



楼层更新:给指定职业增加指定等级学会的技能
Main前Insert的脚本:
  1. class Interpreter
  2.   def class_add_skill(class_id, level, skill_id)
  3.     learing = RPG::Class::Learning.new
  4.     learing.level = level
  5.     learing.skill_id = skill_id
  6.     $data_classes[class_id].learnings.push(learing)
  7.   end
  8. end
复制代码
获得任务报酬的时候,
事件中用【脚本】输入:
  1. class_add_skill(职业ID, 学技能的等级, 要学的技能ID)
复制代码

作者: 工藤~新一じ    时间: 2015-11-27 19:22
枫の叶 发表于 2015-11-27 07:58

不行啊没有效果,怎么用?
直接在事件插入这段脚本,然后用增减水平来提高等级,仍然没有学会技能~
作者: 工藤~新一じ    时间: 2015-11-27 19:34
枫の叶 发表于 2015-11-27 07:58

测试了,是可以的。
但这个效果是这样的,完成此任务时如果角色达到某等级就学会某技能。
可不可以做成完成这个任务后,如果角色还没达到某等级,那等达到等级后再学会该技能。
我想做的效果是直接在数据库的职业里新增一个技能,等于是那样的效果。
作者: 冷峻逸    时间: 2015-11-27 20:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: 工藤~新一じ    时间: 2015-11-27 20:31
冷峻逸 发表于 2015-11-27 20:01
如果很少的话:
完成任务后转职成为另一个职业,其他一样只是技能不同

对,这样也能达到效果。
但自己想把这个功能灵活一些。要能直接用一段脚本来表达最好。
作者: 枫の叶    时间: 2015-11-27 21:19
RUBY 代码复制
  1. #---------------------------------------------------------------------
  2. module Fy
  3.   #用开关关联技能,对应的开关未打开时,无论多少等级,所有角色对应技能都不能学会。
  4.   #包括用事件强制学也不能。
  5.   #下面设置格式是:技能ID=>开关ID 。需要更多的可以照格式添加。
  6.   Restricted_class_skills = {3=>10, 4=>11}
  7. end
  8. #---------------------------------------------------------------------
  9. class Game_Actor < Game_Battler
  10.   alias fy_learn_skill learn_skill
  11.   def learn_skill(skill_id)
  12.     return if Fy::Restricted_class_skills.keys.include?(skill_id) and
  13.      ! $game_switches[Fy::Restricted_class_skills[skill_id]]
  14.     fy_learn_skill(skill_id)
  15.   end
  16.   def skill_refresh
  17.     for i in 1..@level
  18.       for j in $data_classes[@class_id].learnings
  19.         if j.level == i
  20.           learn_skill(j.skill_id)
  21.         end
  22.       end
  23.     end
  24.   end
  25. end
  26. #---------------------------------------------------------------------
  27. class Game_Switches
  28.   def []=(switch_id, value)
  29.     if switch_id <= 5000
  30.       @data[switch_id] = value
  31.       if value and Fy::Restricted_class_skills.values.include?(switch_id)
  32.         $data_actors.size.times do |i|
  33.           next if $game_actors[i].nil?
  34.           $game_actors[i].skill_refresh
  35.         end
  36.       end
  37.     end
  38.   end
  39. end
  40. #---------------------------------------------------------------------

作者: cinderelmini    时间: 2015-11-27 22:41
本帖最后由 cinderelmini 于 2015-11-28 11:48 编辑

顺便把新游戏删除任务学到的职业技能相关写出来了,
这样配合窝⑨楼那段应该能做到楼主想要的效果了,就是下面这段脚本必须Main前。
(如果用了其他标题脚本导致没效果的话再另外整合吧,不过既然alias了除非标题用了别的scene啥的不然应该不会。)


  1. class Scene_Save < Scene_File
  2.   #--------------------------------------------------------------------------
  3.   # ● 确定时的处理
  4.   #--------------------------------------------------------------------------
  5.   alias ruok_on_decision on_decision
  6.   def on_decision(filename)
  7.     save_data($data_classes, "Data/Classes_#{filename}")
  8.     ruok_on_decision(filename)
  9.   end
  10. end

  11. class Scene_Load < Scene_File
  12.   #--------------------------------------------------------------------------
  13.   # ● 确定时的处理
  14.   #--------------------------------------------------------------------------
  15.   alias ruok_on_decision on_decision
  16.   def on_decision(filename)
  17.     if FileTest.exist?("Data/Classes_#{filename}")
  18.       $data_classes       = load_data("Data/Classes_#{filename}")
  19.     end
  20.     ruok_on_decision(filename)
  21.   end
  22. end

  23. class Scene_Title
  24.   #--------------------------------------------------------------------------
  25.   # ● 获取任务获得的技能列表
  26.   #--------------------------------------------------------------------------
  27.   def quest_skill
  28.     hash_temp = {
  29.     # 职业ID => [等级, 技能ID],
  30.     1 => [2, 5],
  31.     2 => [3, 7],
  32.     }
  33.     return hash_temp
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 从数据库里删除之前游戏里保存的任务技能
  37.   #--------------------------------------------------------------------------
  38.   def delete_quest_skill
  39.     for class_id in quest_skill.keys
  40.       level    = quest_skill[class_id][0]
  41.       skill_id = quest_skill[class_id][1]
  42.       learing = RPG::Class::Learning.new
  43.       learing.level = level
  44.       learing.skill_id = skill_id
  45.       for learn in $data_classes[class_id].learnings
  46.         if learn.level == learing.level && learn.skill_id == learing.skill_id
  47.           $data_classes[class_id].learnings.delete(learn)
  48.           next
  49.         end
  50.       end
  51.     end
  52.     save_data($data_classes, "Data/Classes.rxdata")
  53.     $data_classes       = load_data("Data/Classes.rxdata")
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 命令 : 新游戏
  57.   #--------------------------------------------------------------------------
  58.   alias ruok_command_new_game command_new_game
  59.   def command_new_game
  60.     delete_quest_skill
  61.     ruok_command_new_game
  62.   end
  63. end
复制代码
在【quest_skill】那段里面自己填任务学到的职业技能参数
格式就是注释里写的那样【职业ID => [学习等级. 技能ID],】这样,在大括号的范围内往下加,
(注意最后一个之前别漏掉半角逗号)
然后就可以用了,每次新游戏之前都会检查和删除掉之前通过任务给职业数据添加的技能,读存档的话不会删,
存档的时候会在Data文件夹里存一个备份的职业数据,读档的时候会读那个文件,
这样大概可以做到新游戏还原默认职业技能表,读档获取游戏职业技能表吧……
PS:测试模式的话,进行了职业技能添加之后,
数据库的职业技能列表还是打开工程的时候那样的不会变,
但是实际上数据文件已经变了,关掉工程再开就会看到变化,
如果不关工程去编辑职业信息并保存数据的话也会改变那个数据文件,
不过既然存档的时候备份了职业数据应该没什么问题了。






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