Project1

标题: 怪物追踪脚本 [打印本页]

作者: 89444640    时间: 2018-2-15 10:21
标题: 怪物追踪脚本
本帖最后由 89444640 于 2018-2-15 14:39 编辑

由rpg接龙2添加的脚本引发的。
怪物追踪脚本,我扔到自己工程中测试目前无冲突,所以准备拿过来用。
这个脚本使用方式是
在事件标题的任意位置添加<SensorX>,其中X是具体的数,象征角色距离本事件小于X格,启动本事件的一个特定的独立开关(脚本中我设定的是D,即角色本事件靠近X格内,自动开启独立开关D)

测试了一下,效果不错,比我以前用怪物随机移动好多了。怪物追的有理有据。
但是,有一些细节需要完善,现在怪物发现角色时候没有任何提示,由于可以根绝怪物种类不同设定不同视野,所以这个没提示会造成怪物追踪很难躲开。
我在测试中加了几个动画,试图让怪物在启动追踪时先播放一个发现角色的动画,但是……失败了,并不是开怪开启时播放,只能是接触的一瞬间显示。如图所示

我想了半天也不知道怎么从事件入手解决。
因此,求在此脚本中添加语句,以实现如下效果。
当怪物发现敌人时,播放动画113,因为动画是8帧,会造成敌人行动暂停行动8帧,然后敌人再开始追击角色,因为我有角色加速,如果能有这样的提示,完全来得及跑开避免战斗。
虽然不能干别的用了,我这脚本确实只用于做怪物追踪角色用,所以实现此效果即可。
谢谢。
工程如下。
Project1.rar (280.01 KB, 下载次数: 159)
加个私货,我试ipad能不能播放XD
https://otowabi.com/category/material/oversea/
作者: 张咚咚    时间: 2018-2-15 10:51
脚本77行后面加上
  1. @animation_id = 113 #动画ID
  2. @wait_count = 20 #等待帧数
复制代码

作者: 89444640    时间: 2018-2-15 11:18
张咚咚 发表于 2018-2-15 10:51
脚本77行后面加上

谢谢,测试了一下,这个在怪物靠近的时候没问题,但是会出现逃跑远离怪物的时候依然播放一次,是不是应该增加一些条件判断?就是角色逃离怪物追踪的时候,离开那个触发的范围时候不播放动画,或者播放一个汗水动画,表示怪物追不上角色了。
这个好像是轨迹系列通用表现手法- -b
作者: 89444640    时间: 2018-2-15 15:52
本帖最后由 89444640 于 2018-2-15 16:31 编辑
89444640 发表于 2018-2-15 11:18
谢谢,测试了一下,这个在怪物靠近的时候没问题,但是会出现逃跑远离怪物的时候依然播放一次,是不是应该 ...


蒙着来,写成这样
  if $game_self_switches[D] = true
      @animation_id = 113 #动画ID
      @wait_count = 8 #等待帧数
  end
能运行但是显示
无法识别独立开关D
蒙出来了  
if  @game_self_switches = enable
      @animation_id = 1 #动画ID
      @wait_count = 8 #等待帧数
  end  
应该是这样吧?试了一下不对……没效果
目前试蒙写了几十遍可能性,然后这样子是能运行  
if enable p self_switch_valid = true
      @animation_id = 1 #动画ID
      @wait_count = 8 #等待帧数
    else p
      self_switch_valid = false
  end
但是跳出的一个什么都没有的对话框写着ture 然后是undefined enable
rmxp F1里面写的是
GC.enable
允许使用垃圾回收。
返回此前的禁用状态(若此前已被禁用,则返回 true,若此前 GC 仍在工作,则返回 false)。
确实是返回ture了……怎么才能返回游戏正在执行的动作,而不是返回ture

作者: soulsaga    时间: 2018-2-15 16:43
本帖最后由 soulsaga 于 2018-2-15 16:46 编辑

#3#獨立開關
  key = [$game_map.map_id, @event_id, "x"]
  if $game_self_switches[key]
  end

$game_self_switches[地图ID, 事件ID, "独立开关ABCD"]

是这样么..
作者: 89444640    时间: 2018-2-15 17:28
soulsaga 发表于 2018-2-15 16:43
#3#獨立開關
  key = [$game_map.map_id, @event_id, "x"]
  if $game_self_switches[key]

是这段

  #--------------------------------------------------------------------------
  # ● Execute_Sensor Effect
  #--------------------------------------------------------------------------            
  def execute_sensor_effect(enable,key)      
      @pattern = 0
      @pattern_count = 0
  if enable p self_switch_valid ["d"]= true
      @animation_id = 1 #动画ID
      @wait_count = 8 #等待帧数
    else p
      self_switch_valid = false
  end  
      $game_self_switches[key] = enable
      self.refresh
  end
end
不知道怎么写
说实话,写的是啥我基本看不懂- -b
我这是依然跳出无法定义什么什么的。
要不拿楼顶工程试试?
作者: soulsaga    时间: 2018-2-15 17:46
本帖最后由 soulsaga 于 2018-2-15 18:26 编辑

RUBY 代码复制
  1. def execute_sensor_effect(enable,key)      
  2.       @pattern = 0
  3.       @pattern_count = 0               
  4.       $game_self_switches[key] = enable
  5.       if $game_self_switches[key]
  6.       @animation_id = 113 #动画ID
  7.       @wait_count = 20 #等待帧数
  8.       else
  9.       @animation_id = 114 #动画ID
  10.       @wait_count = 20 #等待帧数
  11.       end
  12.       self.refresh
  13.    end
  14. end



这样就好..你可以加个流汗动画..
作者: 89444640    时间: 2018-2-15 22:17
soulsaga 发表于 2018-2-15 17:46
def execute_sensor_effect(enable,key)      
      @pattern = 0
      @pattern_count = 0              ...

效果……如下,还算可以接受,

这是一个追击问题,敌人追击速度是4,角色加速以后速度是5,不手残追不上。
设置敌人追击等待是8帧,追不上显示汗水等待30帧

但是如果怪物以速度5冲过来,等待8帧就有点难躲了。
速度6的情况根本就躲不开。



作者: 芯☆淡茹水    时间: 2018-2-19 10:12
以前就明雷效果做了一系列的改造,包括随机和追击。

总感觉默认随机移动应用到怪身上稍微有那么点别扭,就那么有规律的不停走啊走,,,所有改造成了随机的停顿,随机的转向和随机的移动步数。
至于追击,在脚本里改就更方便了。
作者: 89444640    时间: 2018-2-19 10:36
芯☆淡茹水 发表于 2018-2-19 10:12
以前就明雷效果做了一系列的改造,包括随机和追击。

总感觉默认随机移动应用到怪身上稍微有那么点别扭,就 ...

嗯,随机移动一直不停确实闹心的慌,能随机停顿就好多了。
不知道会不会有冲突,我搜一下看看。然后默认的随机移动有个别地方做故意用了这个效果的事,
比如这个……

如果这个脚本是直接改成所有都这样……不是一直这么动,就没这么好玩了XD

一些通道过于狭窄的敌方,需要让这里的敌人是移动缓慢且不是经常移动,背面视野X格以内看不见玩家,这样容易躲避。

我这一直是先得有脚本,看看冲突和能不能用再确定优化方向,所以能实现一部分效果就知足了,
作者: 芯☆淡茹水    时间: 2018-2-19 11:25
89444640 发表于 2018-2-19 10:36
嗯,随机移动一直不停确实闹心的慌,能随机停顿就好多了。
不知道会不会有冲突,我搜一下看看。然后默认 ...

这儿有个简单的,让 随机NPC 不那么累:
  1. #==============================================================================
  2. class Game_Event < Game_Character
  3.   #--------------------------------------------------------------------------
  4.   alias xr_new_move_initialize initialize
  5.   def initialize(map_id, event)
  6.     xr_new_move_initialize(map_id, event)
  7.     @move_wait = @move_kind = 0
  8.     @move_step = []
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   def move_type_random
  12.     @move_wait == 0 && @move_step == [] ? set_move_type : update_random
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   def set_move_type
  16.     @move_kind = rand 3
  17.     @move_wait = @move_kind < 2 ? rand(100)+20 : 0
  18.     @move_step = @move_kind == 2 ? [rand(5)+1, rand(4)] : []
  19.     @move_kind == 1 && turn_random
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   def update_random
  23.     @move_step != [] && move_to_random
  24.     @move_wait -= 1 if @move_wait > 0
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   def move_to_random
  28.     case @move_step[1]
  29.     when 0  ;move_down(false)
  30.     when 1  ;move_left(false)
  31.     when 2  ;move_right(false)
  32.     when 3  ;move_up(false)
  33.     end
  34.     @move_step[0] > 0 ? @move_step[0] -= 1 : @move_step = []
  35.   end
  36. end
  37. #==============================================================================
复制代码





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