广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 21559 个阅读者
 
<<   1   2   3   4   5  下页 >>(共 6 页)
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
storym88349 手机
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x15 鲜花 x34
分享: 转寄此文章 Facebook Plurk Twitter 版主评分 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x7
[插件] SMA脚本:简易旧版选单制作
原创文章
咳咳!嗯...好久没发文了,正在想要发什么文来打发打发时间时,一时兴起就来打一篇选单的制作教学,不过我只会旧版的,因为新版的我看不懂 表情  

如果有回锅的话,可能是我没有看到,又或者是不小心给漏看了,多多包涵 表情    

那么~进入正题~



有写过SMA的都知道,最关键的include一定要打,但是这边我只讲选单相关,所以include相关请自行寻找 表情    

那么,请往下↓

复制程式
public plugin_init(){ 
    register_plugin("Menu","1.0","storym88349")    //注册脚本,常识就不多说了 
    register_clcmd("say menu","ShowMenu",-1,"Show Menu")    //注册命令,内容是说「menu」时执行ShowMenu 
    register_menucmd(register_menuid("\y选单教学:"), 1023, "MenuCMD" )    //注册选单命令,menuid需与要连结的选单一样才有用 
} 
public ShowMenu(id){    //这里是输入命令时的事件,在这里显示选单的内容 
    new szMenuBody[256]    //以new选告szMenuBody为变数,以此作为载体来储存选单内容 
    new keys    //宣告按键 
    new nLen = format( szMenuBody, 255, "\y选单教学:^n" )    //选单标题、内容 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w1. 有点懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. 好像懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w3. 应该懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w4. 不太懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w5. 你说啥?" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\w0. 退出" ) 
    keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)    //设定按键,这不难懂吧? 
    show_menu( id, keys, szMenuBody, -1 )    //显示选单 
} 
public MenuCMD( id,key ){    //执行选单的命令,此处的id下方需要用到此变数才加 
    switch( key ){    //switch在很多地方都用的到,ex:随机选取 
    case 0: client_print( id, print_chat, "你选了有点懂!" )    //这里的case0是w1的命令喔 
    case 1: client_print( id, print_chat, "你选了好像懂!" ) 
    case 2: client_print( id, print_chat, "你选了应该懂!" ) 
    case 3: client_print( id, print_chat, "你选了不太懂!" ) 
    case 4: client_print( id, print_chat, "需要我在说一遍?" )    //这段的意思是在玩家端的对话频道显示后面那句话 
    case 9: client_print( id, print_chat, "你选了退出!" )    //同样的,也可以输入别的命令 
    } 
}


写完~不懂请发问~有错请指正~表情


[ 此文章被storym88349在2009-10-10 19:48重新编辑 ]

此文章被评分,最近评分记录
财富:100 (by amore12) | 理由: 辛苦了!!



献花 x2 回到顶端 [楼 主] From:台湾 | Posted:2009-09-21 20:06 |
112459
个人文章 个人相簿 个人日记 个人地图
社区建设奖
小人物
级别: 小人物 该用户目前不上站
推文 x71 鲜花 x93
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

@@这个不错~话说能再解释一下include方面的东西吗?
另外...选单的振键能改其他吗???@@
↓                 ↓
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
↑                 ↑
这个不打可以吗@@
表情 好文帮你推荐一下 表情


献花 x0 回到顶端 [1 楼] From:香港城市电讯 | Posted:2009-09-21 21:13 |
112459
个人文章 个人相簿 个人日记 个人地图
社区建设奖
小人物
级别: 小人物 该用户目前不上站
推文 x71 鲜花 x93
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

复制程式
    new szMenuBody[256]    //以new选告szMenuBody为变数,以此作为载体来储存选单内容 
                 new keys    //宣告按键 
能解释一下吗?环是不太懂= =|||
复制程式
    register_clcmd("say menu","ShowMenu",-1,"Show Menu")
当中的-1是什么一意....囧= =另外Show Menu又是为何=口=
再来= =
复制程式
    register_menucmd(register_menuid("\y选单教学:"), 1023, "MenuCMD" )    //注册选单命令,menuid需与要连结的选单一样才有用 
这个要怎去改= =


献花 x0 回到顶端 [2 楼] From:香港城市电讯 | Posted:2009-09-21 21:27 |
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

虽然不太懂选单的写法,不过以前看「超级M4+M203」里的内容后,
发现:
复制程式
case 9: client_print( id, print_chat, "你选了退出!" )

好像要改成
复制程式
default:{client_print( id, print_chat, "你选了退出!" );return ╳╳╳;}
default好像是用在其他条件都不成立的时候的样子,如果用case 9我也不知可不可行…
而return没有的话应该不会退出选单吧…

虽然是让我受益良多~不过…我看一堆人看到内容后就按"0"退出了吧…


[ 此文章被a7811311622在2009-09-21 23:25重新编辑 ]


尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [3 楼] From:未知地址 | Posted:2009-09-21 23:06 |
storym88349 手机
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x15 鲜花 x34
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

回一楼:

include本来是不想说的,但既然问了,那就只好说了
AMX MOD X的脚本使用的是PAWN语言,又因为模仿了C/C++的架构,所以又被称为Small C
include指令在C/C++语言中也是一定会用到的
#include <amxmodx>
#include <amxmisc>
这两个是最基础的两个,主要是影响到语法的命令内容,include是「包含」的意思,用这个指令来载入所谓的「字典」
例如说,有个东西叫bomb_explode,这个命令是用在C4爆炸时执行事件,而此命令在csx之中,所以要加:
#include <csx>来使用,如果不加的话,在compile时就会显示「无效的命令」,从而导致compile失败

keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
看字面就知道这是按键的设定
据说只打1023也可以正常执行,但是我想既然是教学,还是打完整的好

回二楼:

new szMenuBody[256]↓

用new来宣告新变数,字面上的意思就是,增加一个名为szMenuBody的变数,并给予256位元的资料储存
在选单的语法中,每一句都有szMenuBody,就是要将资料储存在这里面。
变数的名称可以自己给,只要你打的语法可以正常执行打什么都可以。

register_clcmd("say menu","ShowMenu",-1,"Show Menu")

既然你问第三和第四格,前两个我就不说了。
第三格指的是使用者的资格,-1是不列入计算,也就是所有玩家都可以。
第四格其实可以不用打也能执行,官方的原文是"Description of the command"也就是命令的描述。

register_menucmd(register_menuid("\y选单教学:"), 1023, "MenuCMD" )

这个其实有做整合,第一格其实只要打menuid就好,但是如果在这里打了register_menuid的话,就不用在多打一行。
「选单教学:」就是选单的标题,前面的\y是颜色,y是黄色,w是白色,r是红色,其他的我不太清楚,就麻烦你们自行研究了。
1023的意义,可以看我给一楼的回文,之所以这里比较省略,是因为一个一个打实在很多。
最后的MenuCMD,就是连结到指令的语法,不难理解吧?名称也可以随便改。

回三楼:

我没看过超级M4+M203的原始码,不好意思...
case 9,是指switch(keys)的0键,是为了配合选单内容才这样写的。
default主要是用在所有case都不符合才使用的,我不太会用到它。
另外,在case之中如果要使用两个以上的命令,才要在两端加上{}

return的用法有三个:return PLUGIN_CONTINUE/PLUGIN_HANDLED/PLUGIN_HANDLED_MAIN
第一个就是继续使用插件
第二个是说插件命令停止,直到下次呼叫
第三个我不太会用,大概是说停止命令,但不中断呼叫
此外,可以打得简短些,根据我打得次序,可以只打0/1/2来代替

补充:

既然提到了switch,就不得不说另一个也常常会使用switch的语法:随机
复制程式
new rand = random_num(0,3)    //宣告变数rand,并使rand为随机数字0~3(共四个) 
switch(rand){    //发现了吗?这里用的是变数rand,和按键的不同喔! 
    case 0: client_print( id, print_chat, "你抽到了一万元!" ) 
    case 1: client_print( id, print_chat, "你抽到了五千元!" ) 
    default : client_print( id, print_chat, "你什么都没得到!")    //一时兴起写了default,很久没用这个,有错请指正 


如此如此这般这般,就完成了一段随机的语法,那些随机播放音效的大都是用这种方法写的。




另外还有一个东西,叫做define(定义),和new的用法很像,但是又不太一样
例如说,我先在#include下面打上#define keys (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
这样一来,整个插件之中,使用到keys的部份,就不需要重新宣告keys,直接使用就可以。
为何呢?因为我在一开始就把keys定义成(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
所以就不需要在宣告变数,是个很方便的命令。

此外,在随机的语法也可以用得上。
#define MAX_NUM 4
new rand = random_num(0,MAX_NUM-1)
发现了吗?这样写和上面的随机是一样的喔!而且这样写就可以直接设定总数,而不会被第一个数字到底是0还是1搞混。
此外要修改时,也可以直接修改定义,虽然有些鸡肋,但在大量重复使用时也是常用用法之一。


[ 此文章被storym88349在2009-09-22 19:40重新编辑 ]

此文章被评分,最近评分记录
财富:200 (by amore12) | 理由: 辛苦了!!


献花 x3 回到顶端 [4 楼] From:台湾 | Posted:2009-09-22 19:12 |
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我会说要加return是担心没加会变成:
按了"0"后的确是跳出,不过选单还在画面上…不知会不会变成这样…
至于switch和#define我之前写的插件都玩过了,所以我算是了解了…
还真的像鸡肋一样…食之无味,弃之可惜啊…


尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [5 楼] From:未知地址 | Posted:2009-09-22 21:31 |
koto07 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x23 鲜花 x45
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

请问选单要有下一页 又该怎样写 表情


献花 x0 回到顶端 [6 楼] From:台湾中华电信 | Posted:2009-09-22 21:54 |
a7811311622 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖 优秀管理员勋章 社区建设奖
头衔:我…在工作了…我…在工作了…
版主
级别: 版主 该用户目前不上站
版区: CS提问区
推文 x771 鲜花 x2152
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 koto07 于 2009-09-22 21:54 发表的 : 到引言文
请问选单要有下一页 又该怎样写 表情

虽然没写过…不过依在下浅见…应该是设定一个键可以开启另一个选单,
简单说写两个选单,然后利用一个键来交互切换…

以上言论纯是猜测,如有雷同,纯属巧合…


尚无签名,欢迎 [新增个性化签名]
献花 x0 回到顶端 [7 楼] From:未知地址 | Posted:2009-09-22 22:52 |
koto07 手机
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x23 鲜花 x45
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

摁摁 我去试试看


献花 x0 回到顶端 [8 楼] From:台湾中华电信 | Posted:2009-09-23 19:15 |
storym88349 手机
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x15 鲜花 x34
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用 koto07 于 2009-09-22 21:54 发表的 : 到引言文
请问选单要有下一页 又该怎样写 表情


既然我在这篇教学中,将0设定为退出,那么就依惯例,将9设为下一页
在这边要重新注册新的选单,因为写下一页的语法其实不过是将另一个选单叫过来而已
将case 9的指令写成显示选单的指令,到下一页之后,也可以依样画葫芦的写回到上一页的语法

一切就是那么的简单表情

之前看过另一种写法,但是我看半天都看不懂,所以只好作罢了

如果有人可以提供别的写法的话,欢迎一起来研究~


献花 x0 回到顶端 [9 楼] From:台湾 | Posted:2009-09-23 19:34 |

<<   1   2   3   4   5  下页 >>(共 6 页)
首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.023220 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言