lynzxcv 发表于 2011-8-28 12:46

不行了,昨天一晚今天一早上都没搞定EVP的问题,向大家求助

本帖最后由 lynzxcv 于 2011-8-28 14:04 编辑

先是设定了PACK的条件,设一个参照物(用GetScriptVariable),然后设aipackage ==0为sandbox,1为跟随,2为警戒

然后设一个电台,放在辅助栏里的。设
elseif zxcv == 2
set lynbase.aipackage to 0      ;lynbase为选用的参照物ID
elseif zxcv == 3
set lynbase.aipackage to 1
elseif zxcv == 4
set lynbase.aipackage to 2

这样使用时选项可以生效,但是NPC要过一段时间才能响应。于是就想给NPC设个EVP

给NPC建一个脚本(同时也是上面的参照物的脚本),然后:
scn lynguardxxxxx

int aipackage
int lynguardai

Begin GameMode
ifaipackage != lynguardai
evp
setlynguardai to aipackage
endif
End





这样没效果,还是不能执行evp,一样延时。。。于是改为
Begin GameMode
set aipackage to 10
ifaipackage != lynguardai
evp
setlynguardai to aipackage
endif
End


这样NPC可以马上响应,但是又成了不停的evp,结果是连动也动不了了。


又试了
Begin GameMode

iflynguardai == 1
evp
setlynguardai to 0
endif
End

然后在控制器中改为
elseif zxcv == 2
set lynbase.lynguardai to 1          ;lynbase为选用的参照物ID
set lynbase.aipackage to 0
elseif zxcv == 3
set lynbase.lynguardai to 1
set lynbase.aipackage to 1
elseif zxcv == 4
set lynbase.lynguardai to 1
set lynbase.aipackage to 2

同样没产生EVP效果,还是一样延时

StayLight 发表于 2011-8-28 13:37

Begin GameMode ;//还是Block相关的信息,GameMode是非暂停模式下每帧都会运行..
set aipackage to 10 ;//这句让我觉得很奇怪..你确定你没写错?
ifaipackage != lynguardai
evp
setlynguardai to aipackage
endif
End

lynzxcv 发表于 2011-8-28 13:44

本帖最后由 lynzxcv 于 2011-8-28 13:48 编辑

Begin GameMode ;//还是Block相关的信息,GameMode是非暂停模式下每帧都会运行..
set aipackage to 10 ;// ...
StayLight 发表于 2011-8-28 13:37 http://bbs.3dmgame.com/images/common/back.gif


    因为发现要设一个条件,不然NPC会出现无限EVP的状态,连动都动不了
之前没有任何地方设置lynguardai的值,这个脚本好像就不起效?
set aipackage to 10
这个是错了,应该是lynguardai to 10不过lynguardai to 10也是一样不行呀,也是无限evp

StayLight 发表于 2011-8-28 13:55

回复 3# lynzxcv



   这个完全是误解..指定变量时会自动赋值为0,不需要再操作..
   你目前把这个set XXX to XXX类的语句直接不加条件放进一个GameMode的Block里就意味着每一帧这句都会被执行..你确定这是你想要的效果么?

lynzxcv 发表于 2011-8-28 14:00

补充一下,NPC数量不止一个
是不是这个指令一帧只能完成一个NPC?然后因为setlynguardai to aipackage的原因其EVP它的NPC就不能执行EVP了?

lynzxcv 发表于 2011-8-28 14:02

本帖最后由 lynzxcv 于 2011-8-28 14:05 编辑

回复 4# StayLight


    因为按之前的试了EVP没有被执行,还是延时一段时间后才执行另一个PACK,而且是每过一会儿其中一个NPC开始执行新PACK

补充一下,NPC数量不止一个
是不是这个指令一帧只能完成一个NPC?然后因为setlynguardai to aipackage的原因其它的NPC就不能执行EVP了?

StayLight 发表于 2011-8-28 14:06

脚本可以只有一份,但是每个选用改脚本的物件在运行此脚本时其实都是独立的..
如果你要给你的NPC加脚本的话那你就要考虑每个NPC在什么什么情况下应该执行怎么怎么样的脚本..

lynzxcv 发表于 2011-8-28 14:11

如你所说,物件在运行此脚本时其实都是独立的


那么应该来说所有NPC会同时执行EVP才对呀,而且确实在gamemode 中写set lynguardaito 10 后是所有的NPC都一起执行了EVP,只是随后又被不断EVP卡死了而已。
就是不明白
ifaipackage != lynguardai
evp
setlynguardai to aipackage
endif
为什么就是不行,一定是延时执行AI包,怀疑是不是这一段语句跟本就没起效

lynzxcv 发表于 2011-8-28 14:13

注:NPC是用道具脚本中的
Player.placeatme guard 8 50
这句刷出来的

lynzxcv 发表于 2011-8-28 14:31

在道具脚本中写入的Begin ScriptEffectStart写入
set lynbase.lynguardai to 10
这下只好像可以同时执行EVP了,但有时有延迟,有时又还行,头疼啊{:3_164:}

StayLight 发表于 2011-8-28 14:37

你执行EvP的条件可是A不等于B..
可是以你目前的写法来看大部分时候这个条件都能成立,因为你每一桢都在执行把某个变量设为一个常数的指令..

lynzxcv 发表于 2011-8-28 15:30

本帖最后由 lynzxcv 于 2011-8-28 18:03 编辑

ifaipackage != lynguardai   
evp   
setlynguardai to aipackage
endif
当我使用呼叫器选某项的时候执行set lynbase.aipackage to 0,某项为to 1,某项为to 2
这时aipackage != lynguardai肯定就成立了呀
然后evp
evp后再执行setlynguardai to aipackage,这样避免了不停执行EVP。当呼叫器选了另一项时aipackage的值就更改了,这时aipackage != lynguardai又成立了,于是又evp。这个思路应该没问题才对呀{:3_155:}

StayLight 发表于 2011-8-28 22:50

你最好把文件发过来我看一下吧..貌似说不清楚的样子..
页: [1]
查看完整版本: 不行了,昨天一晚今天一早上都没搞定EVP的问题,向大家求助