3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 3206|回复: 20
打印 上一主题 下一主题

[求助] 菜鸟求教为什么GetButtonPressed的值不管按什么键都是一样的?

  [复制链接]

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
跳转到指定楼层
主题
发表于 2011-8-27 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lynzxcv 于 2011-8-27 11:28 编辑

无论同MESSAGE中选哪个都没反应,估计是都当-1了。在前面加一个set GetButtonPressed to 0或着1的话所有键的返回值也都是0或1
前面加不加int buttonpressed也都一样
请各位高人帮我看看我是哪搞错了,万分感谢
scn lynzxcv
int zxcv

Begin ScriptEffectStart
      
showmessage  lynradiomessage     

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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

74

主题

2409

帖子

1万

积分

版主

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

贡献度
718
金元
97864
积分
12698
精华
4
注册时间
2006-11-24
舒服的沙发
发表于 2011-8-27 11:56 | 只看该作者
因为你只有zxcv ==  -1 才有return,因此想要退出message只有走-1这条路

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

另外你这个guard是什么效果?
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
硬硬的板凳
 楼主| 发表于 2011-8-27 12:06 | 只看该作者
因为你只有zxcv ==  -1 才有return,因此想要退出message只有走-1这条路

你把zxcv ==  0 ~ 3 全部加return ...
loveltzzm 发表于 2011-8-27 11:56



    guard是NPC的ID,问题是我不是消息退不出来,而是不管选什么按键zxcv ==0~3都无法执行
我现在都加上return试试,谢谢2楼的建议
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
冰凉的地板
 楼主| 发表于 2011-8-27 12:35 | 只看该作者
难道是要把IF语句放在Begin ScriptEffectUpdate中吗?
回复 支持 反对

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
5#
发表于 2011-8-27 12:38 | 只看该作者
要用Begin MenuMode
回复 支持 反对

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
6#
发表于 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  

  elseif  ButtonOther ==  0
  Player.placeatme guard1 1 50
  player.AddItem lynRadio 1 1
          Return  
  elseif  ButtonOther ==  1
  Player.placeatme guard2 1 50
  player.AddItem lynRadio 1 1
          Return  
  elseif  ButtonOther ==  2
  Player.placeatme guard3 1 50
  player.AddItem lynRadio 1 1
          Return  
  elseif  ButtonOther == 3
  Player.placeatme guard4 1 50
  player.AddItem lynRadio 1 1

  elseif zxcv ==  4
removeme
    endif
    endif
End
大概就这样  没测试过, 你试试
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
7#
 楼主| 发表于 2011-8-27 13:46 | 只看该作者
本帖最后由 lynzxcv 于 2011-8-27 13:48 编辑

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

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
8#
发表于 2011-8-27 13:59 | 只看该作者
这个Begin MenuMode
Begin Onload
有区别吗?都在什么时候用的?一直没搞明白
另外上面的代码无法保存,不 ...
lynzxcv 发表于 2011-8-27 13:46



     elseif zxcv ==  4
removeme
    endif
    endif
这里我忘记替换了, 你自己替换成和上面的一样就可以保存了

onload  看字面意思就知道了.

Begin MenuMode  菜单激活时
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
9#
 楼主| 发表于 2011-8-27 14:09 | 只看该作者
elseif zxcv ==  4
removeme
    endif
    endif
这里我忘记替换了, 你自己替换成和上面的一样就 ...
sumizai1989 发表于 2011-8-27 13:59



刚才就换了也存不了,太怪了,我再看看吧。非常感谢
回复 支持 反对

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
10#
发表于 2011-8-27 14:21 | 只看该作者
本帖最后由 sumizai1989 于 2011-8-27 14:42 编辑
刚才就换了也存不了,太怪了,我再看看吧。非常感谢
lynzxcv 发表于 2011-8-27 14:09



   当然保存不了啦, 你的脚本类型不是OJ, 换成OJ就可以保存了.(你以前的脚本用的肯定是效果的脚本类型而不是OJ)
  另外onload那少了个endif

  PS: 看了下你的帖子内容, onload并不适用于你的物品
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
11#
 楼主| 发表于 2011-8-27 14:44 | 只看该作者
本帖最后由 lynzxcv 于 2011-8-27 14:45 编辑

回复 10# sumizai1989


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

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
12#
发表于 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  

       elseif  ButtonOther ==  0   
          Player.placeatme guard1 1 50
          player.AddItem lynRadio 1 1
          Return  
       elseif  ButtonOther ==  1
          Player.placeatme guard2 1 50
          player.AddItem lynRadio 1 1
          Return  
       elseif  ButtonOther ==  2
          Player.placeatme guard3 1 50
          player.AddItem lynRadio 1 1
          Return  
       elseif  ButtonOther == 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
回复 支持 反对

使用道具 举报

5

主题

576

帖子

1451

积分

游戏狂人

Rank: 6Rank: 6

贡献度
248
金元
4592
积分
1451
精华
0
注册时间
2008-7-18
13#
发表于 2011-8-28 12:59 | 只看该作者
本帖最后由 StayLight 于 2011-8-28 13:03 编辑

回复 1# lynzxcv

scn lynzxcv
int zxcv

Begin ScriptEffectStart  ;注意,此Block只能运行一次,因此无法单独用于做显示菜单之用..原因见后面的解释..
        
showmessage  lynradiomessage

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
    showmessage  lynradiomessage
    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的作用是在当前帧中止当前脚本的运行一次,仅此而已..
回复 支持 反对

使用道具 举报

23

主题

318

帖子

391

积分

高级玩家

Rank: 4

贡献度
30
金元
2709
积分
391
精华
0
注册时间
2005-6-29
14#
 楼主| 发表于 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



说明的很详细啊,帮了大忙了,万分感谢。也让我明白了很多只是照抄,还不太明白的东西。现在我还有个问题就是关于EVP的,真是百思不得其解
希望有空的话再帮帮忙
http://bbs.3dmgame.com/thread-2211974-1-1.html
回复 支持 反对

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
15#
发表于 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



   想请教下光大, 以这个脚本的1-3为例, 没有加任何条件或ruturn之类的来中止的话, 不会一直无限循环的运行1-3下的脚本命令吗?
   PS: 我之前用原版菜单时, 不加条件之类的脚本来中止时该命令就会无限循环的运行, 如showmesg就会不停的出现, 关一个来一个. 当时用的时Menusmode, 不是scripteffect
回复 支持 反对

使用道具 举报

5

主题

576

帖子

1451

积分

游戏狂人

Rank: 6Rank: 6

贡献度
248
金元
4592
积分
1451
精华
0
注册时间
2008-7-18
16#
发表于 2011-8-28 13:51 | 只看该作者
回复 15# sumizai1989



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

使用道具 举报

122

主题

7371

帖子

1万

积分

资深玩家

有事微信联系,微信号:simon9122

Rank: 9Rank: 9Rank: 9

贡献度
1982
金元
51847
积分
13133
精华
2
注册时间
2009-1-10

3DMer

QQ
17#
发表于 2011-8-28 16:50 | 只看该作者
本帖最后由 sumizai1989 于 2011-8-28 16:52 编辑
回复  sumizai1989



   MenuMode和GameMode一样都是反复运行的Block(前者还可以加上参数把可运行的情况 ...
StayLight 发表于 2011-8-28 13:51



   原来如此, 都是暴走型的. 暴走型的制作起来是会麻烦点, 每项都要设条件来中止才行, 一疏忽就暴走了.
   PS:暴走, 好生动的形容
回复 支持 反对

使用道具 举报

54

主题

1169

帖子

1274

积分

游戏狂人

Rank: 6Rank: 6

贡献度
127
金元
7655
积分
1274
精华
0
注册时间
2010-10-31
18#
发表于 2011-8-28 22:51 | 只看该作者
回复 1# lynzxcv


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

求指教这种语句的结构特点……
回复 支持 反对

使用道具 举报

25

主题

1531

帖子

1941

积分

游戏狂人

Rank: 6Rank: 6

贡献度
34
金元
18048
积分
1941
精华
0
注册时间
2010-12-15
19#
发表于 2011-8-28 23:00 | 只看该作者
c ?vf?vb? 什么语言  ?
回复 支持 反对

使用道具 举报

5

主题

576

帖子

1451

积分

游戏狂人

Rank: 6Rank: 6

贡献度
248
金元
4592
积分
1451
精华
0
注册时间
2008-7-18
20#
发表于 2011-8-28 23:08 | 只看该作者
本帖最后由 StayLight 于 2011-8-28 23:11 编辑

回复 18# 广场上的布偶猫

   脚本真的很不传说的..学脚本吧..

   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..
回复 支持 反对

使用道具 举报

5

主题

576

帖子

1451

积分

游戏狂人

Rank: 6Rank: 6

贡献度
248
金元
4592
积分
1451
精华
0
注册时间
2008-7-18
21#
发表于 2011-8-28 23:10 | 只看该作者
回复 19# 1076661404


   是Gamebryo引擎的语言,比较像C..
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-2-12 19:44 , Processed in 0.138096 second(s), 15 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表