菜鸟求教为什么GetButtonPressed的值不管按什么键都是一样的?
本帖最后由 lynzxcv 于 2011-8-27 11:28 编辑无论同MESSAGE中选哪个都没反应,估计是都当-1了。在前面加一个set GetButtonPressed to 0或着1的话所有键的返回值也都是0或1
前面加不加int buttonpressed也都一样
请各位高人帮我看看我是哪搞错了,万分感谢{:3_198:}
scn lynzxcv
int zxcv
Begin ScriptEffectStart
showmessagelynradiomessage
set zxcv to GetButtonPressed
if zxcv ==-1
player.AddItem lynRadio 1 1
Return
elseif zxcv ==0
Player.placeatme guard1 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==1
Player.placeatme guard2 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==2
Player.placeatme guard3 1 50
player.AddItem lynRadio 1 1
elseif zxcv == 3
Player.placeatme guard4 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==4
set zxcv to -1
endif
End
Begin ScriptEffectUpdate
; <<< Not Used >>>
End
Begin ScriptEffectFinish
; <<< Not Used >>>
End
因为你只有zxcv ==-1 才有return,因此想要退出message只有走-1这条路
你把zxcv ==0 ~ 3 全部加return试试
另外你这个guard是什么效果? 因为你只有zxcv ==-1 才有return,因此想要退出message只有走-1这条路
你把zxcv ==0 ~ 3 全部加return ...
loveltzzm 发表于 2011-8-27 11:56 http://bbs.3dmgame.com/images/common/back.gif
guard是NPC的ID,问题是我不是消息退不出来,而是不管选什么按键zxcv ==0~3都无法执行
我现在都加上return试试,谢谢2楼的建议 难道是要把IF语句放在Begin ScriptEffectUpdate中吗? 要用Begin MenuMode 本帖最后由 sumizai1989 于 2011-8-27 14:43 编辑
scn lynzxcv
short lynzxcv
short ButtonOther
Begin MenuMode
if lynzxcv == 1
set ButtonOther to GetButtonPressed
if ButtonOther ==-1
player.AddItem lynRadio 1 1
Return
elseifButtonOther ==0
Player.placeatme guard1 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther ==1
Player.placeatme guard2 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther ==2
Player.placeatme guard3 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther == 3
Player.placeatme guard4 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==4
removeme
endif
endif
End
大概就这样没测试过, 你试试 本帖最后由 lynzxcv 于 2011-8-27 13:48 编辑
这个Begin MenuMode
Begin Onload
有区别吗?都在什么时候用的?一直没搞明白
另外上面的代码无法保存,不知道哪有问题............. 这个Begin MenuMode
Begin Onload
有区别吗?都在什么时候用的?一直没搞明白
另外上面的代码无法保存,不 ...
lynzxcv 发表于 2011-8-27 13:46 http://bbs.3dmgame.com/images/common/back.gif
elseif zxcv ==4
removeme
endif
endif
这里我忘记替换了, 你自己替换成和上面的一样就可以保存了
onload看字面意思就知道了.
Begin MenuMode菜单激活时 elseif zxcv ==4
removeme
endif
endif
这里我忘记替换了, 你自己替换成和上面的一样就 ...
sumizai1989 发表于 2011-8-27 13:59 http://bbs.3dmgame.com/images/common/back.gif
刚才就换了也存不了,太怪了,我再看看吧。非常感谢 本帖最后由 sumizai1989 于 2011-8-27 14:42 编辑
刚才就换了也存不了,太怪了,我再看看吧。非常感谢
lynzxcv 发表于 2011-8-27 14:09 http://bbs.3dmgame.com/images/common/back.gif
当然保存不了啦, 你的脚本类型不是OJ, 换成OJ就可以保存了.(你以前的脚本用的肯定是效果的脚本类型而不是OJ)
另外onload那少了个endif
PS: 看了下你的帖子内容, onload并不适用于你的物品 本帖最后由 lynzxcv 于 2011-8-27 14:45 编辑
回复 10# sumizai1989
原来如此,继续痛苦实验中.....
Begin MenuMode
Begin Onload
这类有多少种,在什么情况下用有没有地方查的? 本帖最后由 sumizai1989 于 2011-8-27 14:55 编辑
scn lynzxcv
short lynzxcv
short ButtonOther
Begin MenuMode
if lynzxcv == 1 ; 至于怎么触发这个条件, 就由你自己来操作了, 菜单的脚本就大概是这样
set ButtonOther to GetButtonPressed
if ButtonOther ==-1
Return
elseifButtonOther ==0
Player.placeatme guard1 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther ==1
Player.placeatme guard2 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther ==2
Player.placeatme guard3 1 50
player.AddItem lynRadio 1 1
Return
elseifButtonOther == 3
Player.placeatme guard4 1 50
player.AddItem lynRadio 1 1
Return
elseif zxcv ==4
removeme
endif
endif
End
1-4加Return不是必须的, 这加上不过是为了只让按下按钮后的命令运行一次, 而不会无限的运行, 主要不知道你整个菜单是想怎么写, 所以就加个Rutrun上去先
·············································
ps:
if ButtonOther ==-1
Return
这只是类似一个检查的惯例写法而已, 不能在这加任何其它的指令(如你帖子那加的additem这都是错误的)
·············································
有很多种Begin的, 你在GECK里看原版脚本就能找到不少, 或者去GECK得网站那搜索Begin 本帖最后由 StayLight 于 2011-8-28 13:03 编辑
回复 1# lynzxcv
scn lynzxcv
int zxcv
Begin ScriptEffectStart;注意,此Block只能运行一次,因此无法单独用于做显示菜单之用..原因见后面的解释..
showmessagelynradiomessage
set zxcv to GetButtonPressed
if zxcv ==-1
player.AddItem lynRadio 1 1
Return
elseif zxcv ==0
Player.placeatme guard1 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==1
Player.placeatme guard2 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==2
Player.placeatme guard3 1 50
player.AddItem lynRadio 1 1
elseif zxcv == 3
Player.placeatme guard4 1 50
player.AddItem lynRadio 1 1
elseif zxcv ==4
set zxcv to -1
endif
End
Begin ScriptEffectUpdate
; <<< Not Used >>>
End
Begin ScriptEffectFinish
; <<< Not Used >>>
End
;//其实上面的脚本写得99%没有问题,但是GetButtonPressed有个毛病就是必须要等一帧才能获得正确的数值..因此你不能弃用ScriptEffectUpdate这个Block..正确的写法应当是:
scn lynzxcv
int zxcv
Begin ScriptEffectStart
showmessagelynradiomessage
player.AddItem lynRadio 1 1 ;//之后每次都加一次有些多余,放在这里比较好..
End
Begin ScriptEffectUpdate
set zxcv to GetButtonPressed
if zxcv ==-1 || zxcv == 4 ;//如果后面只是漏加的话就这么做..
return
elseif zxcv ==0
Player.placeatme guard1 1 50
elseif zxcv ==1
Player.placeatme guard2 1 50
elseif zxcv ==2
Player.placeatme guard3 1 50
elseif zxcv == 3
Player.placeatme guard4 1 50
elseif zxcv ==4
player.RemoveItem lynRadio 1 1 ;//如果你是故意要在这个情况下让物品消失的话就这么做..
return
endif
End
最后别忘了把效果的时间改成一个非零的值就可以了..
此外return的作用是在当前帧中止当前脚本的运行一次,仅此而已.. 本帖最后由 lynzxcv 于 2011-8-28 13:19 编辑
回复lynzxcv
scn lynzxcv
int zxcv
Begin ScriptEffectStart;注意,此Block只能运行一次,因此无 ...
StayLight 发表于 2011-8-28 12:59 http://bbs.3dmgame.com/images/common/back.gif
说明的很详细啊,帮了大忙了,万分感谢。也让我明白了很多只是照抄,还不太明白的东西。现在我还有个问题就是关于EVP的,真是百思不得其解{:3_151:}
希望有空的话再帮帮忙
http://bbs.3dmgame.com/thread-2211974-1-1.html 本帖最后由 sumizai1989 于 2011-8-28 13:41 编辑
回复lynzxcv
scn lynzxcv
int zxcv
Begin ScriptEffectStart;注意,此Block只能运行一次,因此无 ...
StayLight 发表于 2011-8-28 12:59 http://bbs.3dmgame.com/images/common/back.gif
想请教下光大, 以这个脚本的1-3为例, 没有加任何条件或ruturn之类的来中止的话, 不会一直无限循环的运行1-3下的脚本命令吗?
PS: 我之前用原版菜单时, 不加条件之类的脚本来中止时该命令就会无限循环的运行, 如showmesg就会不停的出现, 关一个来一个. 当时用的时Menusmode, 不是scripteffect 回复 15# sumizai1989
MenuMode和GameMode一样都是反复运行的Block(前者还可以加上参数把可运行的情况具体化,见GECK官网),因此不设条件的话ShowMessage肯定要暴走了..其实做菜单没有必要用MenuMode的,至少我从来都不用..
而LZ的ScriptEffectStart本身就只能运行一次,因此不需要条件.. 本帖最后由 sumizai1989 于 2011-8-28 16:52 编辑
回复sumizai1989
MenuMode和GameMode一样都是反复运行的Block(前者还可以加上参数把可运行的情况 ...
StayLight 发表于 2011-8-28 13:51 http://bbs.3dmgame.com/images/common/back.gif
原来如此, 都是暴走型的. 暴走型的制作起来是会麻烦点, 每项都要设条件来中止才行, 一疏忽就暴走了.
PS:暴走, 好生动的形容{:3_143:} 回复 1# lynzxcv
这就是传说中的脚本语句吗?看上去怎么那么熟悉……
endif在某些网页代码中也看得见。
求指教这种语句的结构特点…… c ?vf?vb? 什么语言? 本帖最后由 StayLight 于 2011-8-28 23:11 编辑
回复 18# 广场上的布偶猫
脚本真的很不传说的..学脚本吧..{:3_111:}
endif标记的是上一个if的结尾..
来一个例子吧..
if player.GetAV Karma <= -500 ;//如果玩家的道德小于或等于-500则执行下面的指令..
MessageBoxEx "You are evil." ;//MessageBoxEx是NVSE的新指令,可以直接从文本和format specifier生成信息框..
elseif player.GetAV Intelligence == 1 ;//如果上面的指令不能满足则执行这里的指令,前提条件是这里的条件被满足了..所有脚本的运行都是从上到下的..elseif也可以有多个..
MessageBoxEx "You are stupid."
else ;//如果上面两个的条件都满足不了则执行这里的指令..
MessageBoxEx "You seem normal."
endif ;//结束if..
回复 19# 1076661404
是Gamebryo引擎的语言,比较像C..
页:
[1]