Project1

标题: 如何用脚本召唤战斗画面,并自设将参战的敌人属性? [打印本页]

作者: 黑白界    时间: 2015-3-7 21:20
标题: 如何用脚本召唤战斗画面,并自设将参战的敌人属性?
RUBY 代码复制
  1. def command_301
  2.     return if $game_party.in_battle
  3.     if @params[0] == 0                      # 直接指定
  4.       troop_id = @params[1]
  5.     elsif @params[0] == 1                   # 变量指定
  6.       troop_id = $game_variables[@params[1]]
  7.     else                                    # 地图指定的敌群
  8.       troop_id = $game_player.make_encounter_troop_id
  9.     end
  10.     if $data_troops[troop_id]
  11.       BattleManager.setup(troop_id, @params[2], @params[3])
  12.       BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
  13.       $game_player.make_encounter_count
  14.       SceneManager.call(Scene_Battle)
  15.     end
  16.     Fiber.yield
  17.   end

以上是VA自带的战斗事件的写法,改了n次都跳错误

不引用数据库中的敌群。
敌群只一个敌人,如何用脚本设定该敌人的属性、掉落等,并开始战斗?
作者: taroxd    时间: 2015-3-7 21:26
本帖最后由 taroxd 于 2015-3-7 21:31 编辑

因为 $game_troop 非常依赖数据库,所以要实现这个很难。

不如把数据库里面的其中一栏专门留给自定义敌群吧。
比如说第 60 号敌群用作自定义的话,就通过 $data_troops[60] 对数据库进行修改(修改姿势见 F1 的 RPG::Troop 文档),然后与 60 号敌群战斗即可。
但是,记住以后不要在任何其他地方使用 60 号敌群。修改也不建议直接更改属性(当然不是不可以),而是用 $data_troop[60] = RPG::Troop.new 赋予新值后再进行更改。

或者完全推倒默认系统,构建一个自己的系统也可以。这样想怎么自定义就怎么自定义(我认真的)
作者: 黑白界    时间: 2015-3-7 21:33
taroxd 发表于 2015-3-7 21:26
因为 $game_troop 非常依赖数据库,所以要实现这个很难。

不如把数据库里面的其中一栏专门留给自定义敌群 ...

思路我了解了。
其他代码我大概能猜出意思,但是
  1.       BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
复制代码
是什么意思?
作者: taroxd    时间: 2015-3-7 21:36
本帖最后由 taroxd 于 2015-3-7 21:39 编辑
黑白界 发表于 2015-3-7 21:33
思路我了解了。
其他代码我大概能猜出意思,但是是什么意思?


设置事件分支。

在战斗结束后,BattleManager 负责调用这段代码 @branch[@indent] = n,其中 n 代表战斗的结果。
然后事件解释器就会根据这个 n 来决定进入哪个事件分支(胜利的场合/失败的场合/撤退的场合)

当你不用事件时,这句代码不加亦可

针对战斗事件转译成事件脚本,可以参考 https://rpg.blue/thread-374907-1-1.html
打开 DEBUG 模式,然后写个战斗事件,看看控制台中输出的脚本吧。缩进应该会十分混乱,但希望能对你有帮助。
作者: 黑白界    时间: 2015-3-7 22:16
本帖最后由 黑白界 于 2015-3-7 22:17 编辑
taroxd 发表于 2015-3-7 21:36
设置事件分支。

在战斗结束后,BattleManager 负责调用这段代码 @branch[@indent] = n,其中 n 代表战斗 ...


还有点问题。
怎么修改一个敌群中包含的敌人的编号?
$data_troops[n]只能调用RPG::Troop中定义的函数,
那么RPG::Troop的内部类RPG::Troop::Member里的函数怎么调用呢?
我写$data_troops[60].members.enemy_id=1,报错了
写$data_troops[60].enemy_id=1也报错





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