[Grief.QQ] 发表于 2005-9-1 19:54:58

【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

昨天我们知道了怎样去制作一个简单的菜单,但是这在实际中是远远不够用的,因为一个程序效

果可能需要提供不止十个以上的选择,这个时候,选择菜单就需要分页来表示了,简单的说,就是

可以在第一页选择第二页,依此类推,而且每一个分页都可以返回上级菜单和直接退出。今天我

们就来学习多级菜单的简单原理。
首先,我们的菜单看起来应该象这样。
菜单一
1.
2.
3.
....
9.Next(More)
0.Exit

菜单二
1.
2.
3.
....
9.Back(More,Next)
0.Exit
菜单的建立在上篇中已经说过了,今天主要是了解如何运用循环语句和数组来自动生成十个或

十个以内的菜单来达到精简代码的目的。

注意,生成多页菜单还有其他更好的方法,但是,今天我们仅仅需要了解最基础的就可以,主

要就是循环语句的运用和参数的替代调用。

好了,让我们动手开始吧!
首先,我们先用个最简单的方法,定义两个菜单,然后在一个菜单的倒数第二个选择中也就是

NEXT或者MORE来激活第二个菜单,然后在第二个菜单中的倒数第二个选择BACK来激活第一个菜

单,这样,就简单的实现了我们想要的目的,他看起来就象这样
public menu1(id)
{
}
public menu2(id)
{
}
public menu1cmd(id,key)
{
case 0....
case 1....
..........
case 8:menu2( id )
case 9:regurn PLUGIN_HANDLED
}
public menu2cmd(id,key)
{
case 0....
case 1....
..........
case 8:menu1( id )
case 9:regurn PLUGIN_HANDLED
}
如果大家熟悉我写的上篇心得(如何制作选择菜单),那么这里就不应该感到陌生。好了,来

说说今天的重点吧。
循环语句在几乎所有的编程语言或脚本语言中都存在,AMX也不例外。
for(条件)
{
事件
}
这是FOR循环的基本语法。
另一个我们要用到的就是二维数组。在AMX中定义看起来如下
new abc = {"hello","how are u","byebye"}
abc是包含三个元素的一个数组,它包含了hello,how are u,byebye三个字符串,这里,这

个数字一定要和字符串的数量一样。这里我们可以把第一页的十个菜单的名称全部写在一个数

组中,这样就可以节省很多代码。下面是第一页菜单的代码:
public FirstPgaeMenu( id )
//开始定义第一页菜单。
{
        new testMenu
//定义菜单的最大字符串数量,这里因为有十个选择,所以我们定义大一点。
        new coun = 0
//定义菜单的字符串变量,初始值为0
        new i
//定义变量 i ,以便为FOR循环使用。
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|

(1<<9)
//定义菜单的热键为按顺序1到0
        new menu_gut[] =

{"HaHa","Fuck","Shit","Cheat","Pig","Cry","Smile","Yumen","More..."}
//定义一个二维数组,它包含9个元素,也就是菜单的9个选择,那为什么不定义十个呢?等一

下我会说明的。
        coun += format( testMenu, 511-coun, "\wFirstPage^n^n" )
//这里和昨天的一样,开始菜单标题,去掉多余的字符串值并保留其它用。
        for ( i = 0; i < 9; i++ )
//这里开始循环了,i=0;i<9;i++表示从0开始,i开始累加,并且必须小于9,因为是循环,所

以我们可以理解为,i=0 ,i=2,i=3,,,,,,,i=8,,,i是不停的累加赋值给自己。但是这个i并不是

一下子就从i=0到了i=9,而是i=0,然后继续下面的代码,下面的代码执行完了之后,然后从i=1

又开始执行下面的代码,一直到i=8,才执行完毕,所以,如果我们不看这个循环,那么下面的

代码就可以解释为
***********************************************************************
coun += format( testMenu, 511-coun, "\w%d. %s^n",0,menu_gut )
......
coun += format( testMenu, 511-coun, "\w%d. %s^n",8,menu_gut )
***********************************************************************
用了循环,怎样,代码精简了不少吧!!!不知道看到这里大家明白了没有。
        {
        coun += format( testMenu, 511-coun, "\w%d. %s^n",i+1,menu_gut )
//这里是循环代码的执行主体部分,它的意思就是:
创建一行字符串,并且生成字符串(也就是菜单)索引,然后去掉多余的部分留做他用,然后

以白色显示,并且自动生成一个序号,%d这里意思是参数的替代调用,它表示一个可以替代调

用的字符,简单的说,他替代调用的就是前面部分自动生成的索引号,也就是0,%s同样的,他

替代调用的就是后面的menu_gut的值,因为menu_gut是我们上面定义的数组,表示的是

数组中字符的索引值而不是单纯的数字0(以为它是从0开始循环到8结束。),所以%s就调用的是

数组中第一个字符HaHa,因为这里是第一次循环,到了下次循环,那么它代替的就是第二个字

符,同样的道理,%d也是一个道理,到了第二次循环,他就代替的是数字1..

哎,我实在不知道该用怎样的语言去解释上面那段简短的代码,这是我能做到的最通俗的解释

了。如果你实在看不明白,建议你去看看C++,或者windows XP/2003里面,FOR命令的用法,它

里面就有类似的参数替代调用的说明。
        }
        coun += format( testMenu, 511-coun, "^n\w0. Exit")
//这里我跟大家解释上面为什么数组我只定义9个,循环也只循环9次,为什么不把最后个选择

项也一起循环生成,那样不是更简单么,好了,如果i=0;i<10,i++,那么,最后一个菜单的显示

会如何??没错,就象下面这样:
...
...
9...
10..
我想,有个10,两位数哎,不怎么好看吧????
        show_menu(id,keys,testMenu,-1)
//开始显示菜单,等待热键响应,保留时间为-1,就是一直保留。
        return PLUGIN_CONTINUE
}
上次好象忘记解释^n了,他表示换行。。。

好了,今天就到这里咯,其实关于循环,还有很多很多,你可以参考一下AMX自代的源代码,或

者其他的代码,其实了解到这里,如果你仔细看过我的解释的话,那么你要看懂一个代码并不

是件困难的事情,甚至马上就能写出一个简单的代码来的。

下面是我写好并且通过测试的代码,游戏中你say /facemenu ,那么,将显示菜单,你可以选

择下页菜单,在下页菜单里,你可以返回上级或者直接退出。每个菜单都可以在你的头上显示

一个C4模型。
说到这里,其实只要把我的代码稍微添加一些,修改一些,就可以实现多页多级菜单进行选择

表情,俗话说授人于鱼不如授人于渔,所以代码大家就自己完成吧,哈哈。。。。。。
其实多页多级多命令选择执行,可以用更少的代码就可以完成的,这里我就不多说了,这是需

要自己去理解的。

Enigmaya 发表于 2005-9-2 16:53:53

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

Post by '
']我想,有个10,两位数哎,不怎么好看吧????

其实问题的关键是这么按下10。。。按下1的同时按0??至于好不好看到其次了。

呵呵。。。

真的不错,效率挺高的嘛,还有什么更好的方法也一块儿说了吧。

[Grief.QQ] 发表于 2005-9-2 18:34:56

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

没有啊,怎么会发生让你同时按下1和0这样的事情呢,菜单的显示标题是从一开始的,但是它的索引是从0开始的呀,如果定义的热键为1<<0|..按顺序来的话,第十个选择的热键是0而不是10,呵呵!!!

更好的方法是有,但是不是那么好理解,晚点我再告诉大家吧!

Enigmaya 发表于 2005-9-2 19:16:56

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

Post by '
']没有啊,怎么会发生让你同时按下1和0这样的事情呢,菜单的显示标题是从一开始的,但是它的索引是从0开始的呀,如果定义的热键为1<<0|..按顺序来的话,第十个选择的热键是0而不是10,呵呵!!!

更好的方法是有,但是不是那么好理解,晚点我再告诉大家吧!

不是的,我的意思是,一般第一反应都是按照显示的数字来安键。。。如果写个10,说不定当真有人去那样按呢。。。

想起那个ctrl+alt+delete的笑话了。。。

ssj4gogeta 发表于 2005-9-2 21:04:29

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

什么笑话,说说!!!

ssj4gogeta 发表于 2005-9-2 21:53:05

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

我刚刚研究了一下,觉得有几个地方可以修改一下!
new menu_gut[]

for ( j = 0; j < 8; j++ )

coun += format( testMenu, 511-coun, "^n\w9. NEXT")
coun += format( testMenu, 511-coun, "\w0. EXIT")

中间几页就这样

coun += format( testMenu, 511-coun, "^n\w9. NEXT")
coun += format( testMenu, 511-coun, "\w0. BACK")

最后一页这样
coun += format( testMenu, 511-coun, "^n^n\w0. BACK")

Enigmaya 发表于 2005-9-2 21:59:56

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

Post by ssj4gogeta
什么笑话,说说!!!

一个mm电脑死机了,问别人怎么办,别人说按ctrl+alt+delete关闭当前任务。

于是mm开始。。。。。可是弄了半天,又想了半天,解决不了,

于是又来问: c,r,a,d这几个字母我都能按下,可是要怎么才能同时按下3个t,3个l和3个e??

。。。。。。。。

ssj4gogeta 发表于 2005-9-2 22:03:23

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

楼主,我被你害惨了,你把page打成了pgae

[Grief.QQ] 发表于 2005-9-2 22:13:32

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

呵呵,难免出点错误啦,,不好意思,,其实你说的我也想过了,只是以我的习惯来说,这样一来,就必须回到第一页菜单才能退出,我觉得好麻烦哦,,而且现在只是举例,只有两页,,如果有个七八页的话,总要返回到首页才能退出,,累啊.

ssj4gogeta 发表于 2005-9-2 22:22:34

回复: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作

呵呵,不过现在的菜单插件都是这种的。。。。。

对了,我改了下你的插件,不过出错了,你们谁有空帮我看看是哪点的问题!

#include <amxmod>
#define TE_PLAYERATTACHMENT 124

new boss
new byebye
new cold
new cool
new cry
new gogogo
new haixiu
new happy
new kiss
new koushui
new mad
new qiang
new sad
new se
new shangxiang
new shaxiao
new smile
new spiderman
new sure
new sweat
new wenhao
new wunai
new wuyu
new xieyan
new xinzui
new zhoumei

public plugin_init()
{
        register_plugin("face show","0.3","")
        register_clcmd( "say /facemenu","FirstPageMenu",0)
        register_menucmd(register_menuid("\wFirstPage"),1023,"FirstMenuCmd")
        register_menucmd(register_menuid("\wSecondPage"),1023,"SecondMenuCmd")
        register_menucmd(register_menuid("\wThirdPage"),1023,"ThirdMenuCmd")
        register_menucmd(register_menuid("\wFourthPage"),1023,"FourthMenuCmd")
        return PLUGIN_CONTINUE
}

public plugin_precache()
{
   boss = precache_model("sprites/boss.spr")
   byebye = precache_model("sprites/byebye.spr")
   cold = precache_model("sprites/cold.spr")
   cool = precache_model("sprites/cool.spr")
   cry = precache_model("sprites/cry.spr")
   gogogo = precache_model("sprites/gogogo.spr")
   haixiu = precache_model("sprites/haixiu.spr")
   happy = precache_model("sprites/happy.spr")
   kiss = precache_model("sprites/kiss.spr")
   koushui = precache_model("sprites/koushui.spr")
   mad = precache_model("sprites/mad.spr")
   qiang = precache_model("sprites/qiang.spr")
   sad = precache_model("sprites/sad.spr")
   se = precache_model("sprites/se.spr")
   shangxiang = precache_model("sprites/shangxiang.spr")
   shaxiao = precache_model("sprites/shaxiao.spr")
   smile = precache_model("sprites/smile.spr")
   spiderman = precache_model("sprites/spiderman.spr")
   sure = precache_model("sprites/sure.spr")
   sweat = precache_model("sprites/sweat.spr")
   wenhao = precache_model("sprites/wenhao.spr")
   wunai = precache_model("sprites/wunai.spr")
   wuyu = precache_model("sprites/wuyu.spr")
   xieyan = precache_model("sprites/xieyan.spr")
   xinzui = precache_model("sprites/xinzui.spr")
   zhoumei = precache_model("sprites/zhoumei.spr")
}

public cmdboss(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(boss)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdbyebye(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(byebye)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdcold(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(cold)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdcool(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(cool)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdcry(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(cry)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdgogogo(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(gogogo)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdhaixiu(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(haixiu)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdhappy(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(happy)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdkiss(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(kiss)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdkoushui(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(koushui)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdmad(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(mad)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdqiang(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(qiang)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdsad(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(sad)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdse(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(se)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdshangxiang(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(shangxiang)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdshaxiao(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(shaxiao)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdsmile(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(smile)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdspiderman(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(spiderman)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdsure(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(sure)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdsweat(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(sweat)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdwenhao(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(wenhao)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdwunai(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(wunai)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdwuyu(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(wuyu)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdxieyan(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(xieyan)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdxinzui(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(xinzui)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public cmdzhoumei(id)
{
if(!is_user_alive(id))
        {
        set_hudmessage(200, 100, 0, -1.0, 0.3, 0, 1.0, 5.0, 0.1, 0.2, 3)
        show_hudmessage(id,"Sorry,You Are Dead!!!")
        return PLUGIN_HANDLED
        }
message_begin(MSG_ALL,SVC_TEMPENTITY,{0,0,0},id)
write_byte(TE_PLAYERATTACHMENT)
write_byte(id)
write_coord(40)
write_short(zhoumei)
write_short(30)
message_end()
return PLUGIN_HANDLED
}

public FirstPageMenu( id )
{
        new testMenu
        new coun = 0
        new i
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
        new menu_gut[] = {"","byebye","cold","cool","娴娉","GOGOGO","瀹崇","楂"}
        coun += format( testMenu, 511-coun, "\wFirstPage^n^n" )
        for ( i = 0; i < 8; i++ )
        {
        coun += format( testMenu, 511-coun, "\w%d. %s^n",i+1,menu_gut )
        }
        coun += format( testMenu, 511-coun, "^n\w9. NEXT")
        coun += format( testMenu, 511-coun, "\w0. EXIT")
        show_menu(id,keys,testMenu,-1)
        return PLUGIN_CONTINUE
}

public SecondPageMenu( id )
{
        new coun = 0
        new j
        new testMenu
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
        new menu_gut[] = {"KISS","f按","unhappy","qiang","蹭激","茬","涓","荤"}
        coun += format( testMenu, 511-coun, "\wSecondPage^n^n" )
        for ( j = 0; j < 8; j++ )
        {
        coun += format( testMenu, 511-coun, "\w%d. %s^n",j+1,menu_gut )
        }
        coun += format( testMenu, 511-coun, "^n\w9. NEXT")
        coun += format( testMenu, 511-coun, "\w0. BACK")
        show_menu(id,keys,testMenu,-1)
        return PLUGIN_CONTINUE
}

public ThirdPageMenu( id )
{
        new coun = 0
        new k
        new testMenu
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
        new menu_gut[] = {"寰绗","渚?","姘","姹姘","","濂","璇",""}
        coun += format( testMenu, 511-coun, "\wThirdPage^n^n" )
        for ( k = 0; k < 8; k++ )
        {
        coun += format( testMenu, 511-coun, "\w%d. %s^n",k+1,menu_gut )
        }
        coun += format( testMenu, 511-coun, "^n\w9. NEXT")
        coun += format( testMenu, 511-coun, "\w0. BACK")
        show_menu(id,keys,testMenu,-1)
        return PLUGIN_CONTINUE
}

public FourthPageMenu( id )
{
        new coun = 0
        new l
        new testMenu
        new keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
        new menu_gut[] = {"蹇","辩"}
        coun += format( testMenu, 511-coun, "\wFourthPage^n^n" )
        for ( l = 0; l < 8; l++ )
        {
        coun += format( testMenu, 511-coun, "\w%d. %s^n",l+1,menu_gut )
        }
        coun += format( testMenu, 511-coun, "^n^n\w0. BACK")
        show_menu(id,keys,testMenu,-1)
        return PLUGIN_CONTINUE
}

public FirstMenuCmd(id,key)
{
        switch( key )
        {
        case 0: cmdboss(id)
        case 1: cmdbyebye(id)
        case 2: cmdcold(id)
        case 3: cmdcool(id)
        case 4: cmdcry(id)
        case 5: cmdgogogo(id)
        case 6: cmdhaixiu(id)
        case 7: cmdhappy(id)
        case 8: SecondPageMenu( id )
        case 9: return PLUGIN_HANDLED
        }
        return PLUGIN_HANDLED
}

public SecondMenuCmd(id,key)
{
        switch( key )
        {
        case 0: cmdkiss(id)
        case 1: cmdkoushui(id)
        case 2: cmdmad(id)
        case 3: cmdqiang(id)
        case 4: cmdsad(id)
        case 5: cmdse(id)
        case 6: cmdshangxiang(id)
        case 7: cmdshaxiao(id)
        case 8: ThirdPageMenu( id )
        case 9: FirstPageMenu( id )
        }
        return PLUGIN_HANDLED
}

public ThirdMenuCmd(id,key)
{
        switch( key )
        {
        case 0: cmdsmile(id)
        case 1: cmdspiderman(id)
        case 2: cmdsure(id)
        case 3: cmdsweat(id)
        case 4: cmdwenhao(id)
        case 5: cmdwunai(id)
        case 6: cmdwuyu(id)
        case 7: cmdxieyan(id)
        case 8: FourthPageMenu( id )
        case 9: SecondPageMenu( id )
        }
        return PLUGIN_HANDLED
}

public FourthMenuCmd(id,key)
{
        switch( key )
        {
        case 0: cmdxinzui(id)
        case 1: cmdzhoumei(id)
        case 9: ThirdPageMenu( id )
        }
        return PLUGIN_HANDLED
}

大概的形容一下出错情况,首先是换页的地方是这样显示的"9. NEXT10. BACK"没换行,不过按9和0又是分别的NEXT和BACK命令!
其次从第3页起表情无法打开,但第3页的菜单能打开,就是说在第三页选了一个表情后没反映,而且第3页点NEXT为直接退出,无法打开第四页,点BACK也是直接退出
页: [1] 2 3
查看完整版本: 【原创】怎样使用循环语句来精简代码--表情插件多页菜单制作