设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3127|回复: 14
打印 上一主题 下一主题

[已经解决] 求一句简单的脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
跳转到指定楼层
1
发表于 2015-11-26 22:53:22 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
楼主因为一个效果,因为事件实在写不出来,所以要依赖脚本。
我想给1号职业在2级时学会3号特技。
因为是特定的剧情才有,而楼主又完全不会写脚本,所以希望大大帮忙!

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

15
发表于 2015-11-27 22:41:21 | 只看该作者
本帖最后由 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:测试模式的话,进行了职业技能添加之后,
数据库的职业技能列表还是打开工程的时候那样的不会变,
但是实际上数据文件已经变了,关掉工程再开就会看到变化,
如果不关工程去编辑职业信息并保存数据的话也会改变那个数据文件,
不过既然存档的时候备份了职业数据应该没什么问题了。

点评

嘴上说着不要,身体却把代码写出来了……总之……配合⑨楼的话基本做到了楼主要的效果吧……可惜这种事不是一句脚本能做到的就是了…………  发表于 2015-11-27 22:56

评分

参与人数 1星屑 +50 梦石 +1 收起 理由
RyanBern + 50 + 1 嘴上说着不要,身体却把好人卡发出去了.

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
451
在线时间
228 小时
注册时间
2015-2-23
帖子
241
14
发表于 2015-11-27 21:19:29 | 只看该作者
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. #---------------------------------------------------------------------

点评

谢谢层主哦,其实9楼已经把脚本写出来了。  发表于 2015-11-27 21:28

评分

参与人数 1星屑 +50 梦石 +1 收起 理由
RyanBern + 50 + 1 认可答案

查看全部评分

制作XP特效,找我。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
13
 楼主| 发表于 2015-11-27 20:31:25 | 只看该作者
冷峻逸 发表于 2015-11-27 20:01
如果很少的话:
完成任务后转职成为另一个职业,其他一样只是技能不同

对,这样也能达到效果。
但自己想把这个功能灵活一些。要能直接用一段脚本来表达最好。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止访问)

梦石
0
星屑
88
在线时间
631 小时
注册时间
2014-8-4
帖子
3600
12
发表于 2015-11-27 20:01:57 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
11
 楼主| 发表于 2015-11-27 19:34:09 | 只看该作者
枫の叶 发表于 2015-11-27 07:58

测试了,是可以的。
但这个效果是这样的,完成此任务时如果角色达到某等级就学会某技能。
可不可以做成完成这个任务后,如果角色还没达到某等级,那等达到等级后再学会该技能。
我想做的效果是直接在数据库的职业里新增一个技能,等于是那样的效果。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
10
 楼主| 发表于 2015-11-27 19:22:49 | 只看该作者
枫の叶 发表于 2015-11-27 07:58

不行啊没有效果,怎么用?
直接在事件插入这段脚本,然后用增减水平来提高等级,仍然没有学会技能~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9397
在线时间
2748 小时
注册时间
2008-9-5
帖子
3543

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

9
发表于 2015-11-27 19:00:41 | 只看该作者
本帖最后由 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 22:08
也就是说,下次开始新游戏,没做那个任务,升到2级的时候也会学到这个技能的。  发表于 2015-11-27 21:57
要永久的话,在获取技能之后再换行加一句脚本【save_data($data_classes, "Data/Classes.rxdata") 】,慎用,这样做跟在数据库里加了个技能是一样的。  发表于 2015-11-27 21:56
嗯,成功了,多谢啦。如果想保存永久的?直接用一句脚本可以解决吗?  发表于 2015-11-27 21:49
这个修改只对本次游戏有效,毕竟是读数据文件的,如果保存的数据文件就是永久的了,下次开新游戏就会一开始职业技能树就会带这个技能了。  发表于 2015-11-27 21:33
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
8
 楼主| 发表于 2015-11-27 18:47:23 手机端发表。 | 只看该作者
RyanBern 发表于 2015-11-26 22:56
利用数据库-职业直接进行设置不行吗?

最同情没有解释清楚。
版主大大可以到7楼看下。
因为本身角色对应的职业是不会这个技能的,必须要完成特定的任务后,才可以通过升级学该技能。
如果这个方法只用一两次,我可以新增一个职业让角色来更改,但我想灵活运用这个效果,所以希望能用脚本来写。
所以版主大大拜托拉!

点评

恩。正在更新电脑,待会试。  发表于 2015-11-27 18:54
5楼的代码是可行的,请试一下。  发表于 2015-11-27 18:50
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
80
在线时间
216 小时
注册时间
2011-9-17
帖子
151
7
 楼主| 发表于 2015-11-27 18:43:16 手机端发表。 | 只看该作者
萧萧风色 发表于 2015-11-27 17:20
这个在数据库里不是可以直接设置么.....

设定是这样的,完成某项任务后,如果主角达到某等级就会领悟技能,所以要这样设置。
当然如果更改职业也是可以做到这样的效果。
但角色很多,而且如果这个设置能用上的话,还有很多灵活运用的地方。
所以必须要这样写。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-12 02:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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