Project1

标题: 小功能:技能书 [打印本页]

作者: 天地有正气    时间: 2013-12-27 12:32
标题: 小功能:技能书
经常会看到有人问RMXP的技能书的技能书怎么制作,回答经常是状态法,但是,如果角色很多的话,用状态法实在太麻烦了,所以就有了这个脚本。
  1. #技能书 by 天地有正气
  2. class Interpreter
  3.   def skill_book(book_id,skill_id,skill_state)
  4.     for i in 0..$game_party.actors.size
  5.       if $game_party.actors[i].states.include?(skill_state)
  6.         i += 1
  7.         if $game_actors[i].skills.include?(skill_id)
  8.           $game_system.se_play($data_system.buzzer_se)
  9.           $game_actors[i].remove_state(skill_state)
  10.           $scene = Scene_Menu.new(0)
  11.           break
  12.         else  
  13.         $game_actors[i].learn_skill(skill_id)
  14.         $game_actors[i].remove_state(skill_state)
  15.         $game_party.gain_item(book_id,-1)
  16.         break
  17.         end
  18.       end  
  19.     end  
  20.   end
  21. end
复制代码
用法:首先设置一个物品名为技能书,不消耗的,附加一个状态。状态随便什么都可以,只是要设为不消耗,定量为0。然后在公共事件里写这句:
skill_book(物品编号,技能编号,状态编号),这样就能学技能了,如果技能书很多怕公共事件太多的话可以用条件分歧判定物品名来减少公共事件。
@protosssonny
作者: 怪蜀黍    时间: 2013-12-27 13:17
  1. i += 1
复制代码
这句有什么用?测试过吗?
作者: 小传子    时间: 2013-12-27 18:14
在物品使用加一个判断就好了,物品拥有属性时另作处理
作者: 天地有正气    时间: 2013-12-27 18:16
protosssonny 发表于 2013-12-27 13:17
这句有什么用?测试过吗?

测试过,有效。原因P叔会不知道?貌似是因为$game_party.actors是从0开始的,而$game_actor是从1开始的...
作者: 火烧兔子    时间: 2013-12-27 20:12
这个确实好用,用状态太浪费时间了
作者: 丰聪耳神子    时间: 2013-12-27 20:12
这种技能书是一次性的还是循环使用的?说实话看不懂代码。我自己做的时候都是用事件来做的
作者: 亿万星辰    时间: 2013-12-28 08:50
代码逻辑有问题吧

既然循环是以$game_party.actors队列编号为循环依据的,怎么下面又当成了$game_actors角色的编号了

应该直接以$game_party.actors[ i ]作为角色实例的引用。
  1. #技能书 by 天地有正气
  2. class Interpreter
  3.   def skill_book(book_id,skill_id,skill_state)
  4.     for i in 0..$game_party.actors.size
  5.       if $game_party.actors[i].states.include?(skill_state)
  6.         if $game_party.actors[i].skills.include?(skill_id)
  7.           $game_system.se_play($data_system.buzzer_se)
  8.           $game_party.actors[i].remove_state(skill_state)
  9.           $scene = Scene_Menu.new(0)
  10.           break
  11.         else  
  12.           $game_party.actors[i].learn_skill(skill_id)
  13.           $game_party.actors[i].remove_state(skill_state)
  14.           $game_party.gain_item(book_id,-1)
  15.           break
  16.         end
  17.       end  
  18.     end  
  19.   end
  20. end
复制代码

作者: chd114    时间: 2013-12-28 18:10
做技能书的时候太麻烦了···而且还要占用数据库物品,如果加新物品或者技能变了还要修改···假如有500个可以用技能书学习的技能···难道我还要慢慢加500个新物品吗···
作者: 天地有正气    时间: 2013-12-28 19:17
chd114 发表于 2013-12-28 18:10
做技能书的时候太麻烦了···而且还要占用数据库物品,如果加新物品或者技能变了还要修改···假如有500 ...

那您是想就设定一个技能书,描绘物品名时额外描绘?
作者: 天地有正气    时间: 2013-12-28 19:17
chd114 发表于 2013-12-28 18:10
做技能书的时候太麻烦了···而且还要占用数据库物品,如果加新物品或者技能变了还要修改···假如有500 ...

那您是想就设定一个技能书,描绘物品名时额外描绘?
作者: chd114    时间: 2013-12-28 19:29
天地有正气 发表于 2013-12-28 19:17
那您是想就设定一个技能书,描绘物品名时额外描绘?

其实你可以参考下永夜幻想曲的那种技能书系统···不占用数据库物品,而是直接生成,好处是你删掉技能的同时那种技能书自然就没了,而技能修改了技能书也可以跟着自己变




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