lynzxcv 发表于 2011-8-27 11:26

菜鸟求教为什么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


loveltzzm 发表于 2011-8-27 11:56

因为你只有zxcv ==-1 才有return,因此想要退出message只有走-1这条路

你把zxcv ==0 ~ 3 全部加return试试

另外你这个guard是什么效果?

lynzxcv 发表于 2011-8-27 12:06

因为你只有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楼的建议

lynzxcv 发表于 2011-8-27 12:35

难道是要把IF语句放在Begin ScriptEffectUpdate中吗?

sumizai1989 发表于 2011-8-27 12:38

要用Begin MenuMode

sumizai1989 发表于 2011-8-27 12:42

本帖最后由 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:46

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

这个Begin MenuMode
Begin Onload
有区别吗?都在什么时候用的?一直没搞明白
另外上面的代码无法保存,不知道哪有问题.............

sumizai1989 发表于 2011-8-27 13:59

这个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菜单激活时

lynzxcv 发表于 2011-8-27 14:09

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:21

本帖最后由 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:44

本帖最后由 lynzxcv 于 2011-8-27 14:45 编辑

回复 10# sumizai1989


    原来如此,继续痛苦实验中.....
Begin MenuMode
Begin Onload
这类有多少种,在什么情况下用有没有地方查的?

sumizai1989 发表于 2011-8-27 14:48

本帖最后由 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 12:59

本帖最后由 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:17

本帖最后由 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:40

本帖最后由 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

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

回复 15# sumizai1989



   MenuMode和GameMode一样都是反复运行的Block(前者还可以加上参数把可运行的情况具体化,见GECK官网),因此不设条件的话ShowMessage肯定要暴走了..其实做菜单没有必要用MenuMode的,至少我从来都不用..
   而LZ的ScriptEffectStart本身就只能运行一次,因此不需要条件..

sumizai1989 发表于 2011-8-28 16:50

本帖最后由 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:}

广场上的布偶猫 发表于 2011-8-28 22:51

回复 1# lynzxcv


    这就是传说中的脚本语句吗?看上去怎么那么熟悉……
endif在某些网页代码中也看得见。

求指教这种语句的结构特点……

1076661404 发表于 2011-8-28 23:00

c ?vf?vb? 什么语言?

StayLight 发表于 2011-8-28 23:08

本帖最后由 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..

StayLight 发表于 2011-8-28 23:10

回复 19# 1076661404


   是Gamebryo引擎的语言,比较像C..
页: [1]
查看完整版本: 菜鸟求教为什么GetButtonPressed的值不管按什么键都是一样的?