注册 登录
MOD中国同盟社 返回首页

小丽的个人空间 http://www.modchina.com/?132693 [收藏] [复制] [分享] [RSS]

日志

转自【同盟社老衲出品】,AMXX插件入门级教程!献给想学插件的新手们~ ...

热度 5已有 736 次阅读2013-2-7 19:05

老衲最近心血来潮,想写个AMXX插件教程,其实本人会插件也不过几个月的时间,而且是自学成才- -,但一定程度上有憨豆的帮助
企鹅之前有过个教程,但是设权限太不厚道了,而且连老衲都进不去- -
但愿我能将我所知道奉献给大家
-------------------------------------------------
PS:看这个教程之前,你必须确定你有一定编程的知识,如加减乘除的表示等等
老衲还是一步步来吧

变量和数组:
这是AMXX插件也是编程中最常用的了
变量,就是储存一个值,可以随时修改,可以用一连串字母和数字代替(但首字母必须是字母)
在插件中,定义一个变量常常在插件开头用如:new a 表示(new 便是AMXX中用来定义的代码)
若你不为它赋值,它便是0
赋值的话就常常如:new abcd = 1
下面介绍浮点数,上面提到的"new"定义,只适用于定义一个整数
要定义一个小数,常常用如:new Float:a = 2.13(冒号别忘)
AMXX插件中一些时间就常常用浮点的表示方法
PS:若你给它的值并非小数,这是也有效的,但编译器会给你个warning

数组,就是储存多个值的一个变量
表示方法的话如:new num[33]
如此的话你定义了一个有着33个数值的数组
当然,你定义的都是整数,小数的话就可以如:new Float:num[33]
PS:定义的时候[]内的必须是数字而非变量,而且就上面的例子,数组的值是从num[ 0 ]开始的而非num[ 1 ]
若你要对变量进行定义的话,如:new num[3] = {1,2,3}
其实还有一种多重数组如new num[3][33],老衲这里不细讲
字符串,其实也是用数组表示的
表示方法很简单如:new num[] = "abcd"
PS:这里的[]内不必填写数字
因此,插件中一些文件的位置就经常如此定义如:
new const g_sound_revo[] = "zombi/zombi_evolution.wav"
注意:这里的"const"表示它是一个确定的变量并且无法更改

函数
函数是插件中最最常用的了(废话),目的是在特定时间执行一段命令
函数在AMXX中分为两大类,一类是可调用的,一类是自编的(个人理解)
可调用的函数又分为两类,一类是forward函数,一类是native函数
这些可调用函数都可以在addons\amxmodx\scripting\include内的INC文件中找到
forward的函数,说白了就是一种触发条件
举个例子,在addons\amxmodx\scripting\include中找到zombieplague.inc文件
下找到"forward zp_user_infected_post(id, infector, nemesis)"
前面的forward表示是一个forward函数(又是废话)
具体应用就如:
public zp_user_infected_post(id, infector, nemesis)
{
……
}
凡是FORWARD函数之前必须加"public"
并且FORWARD函数有一定的触发条件,这要结合INC文件查看,需一定英文基础
比如我举的这个例子,就是指“当任意僵尸感染人类时触发”
括号内的呢表示这段函数中提供的变量
我举的例子括号中的id表示被感染的人类,infector表示感染他的僵尸,nemesis则表示复仇之神
无需定义,即可以在下面的代码中使用
PS:只能在这段函数内,就如上面的“……”内使用
下面讲native语句
native函数就像是一种工具,可以对变量进行处理等等,往往使用在FORWARD函数之内
而native函数又分为get和set两种
get是指该native函数会返回一个值,因此使用时往往是“变量 = get native函数”
如:zombi = zp_get_zombie_count()(注:这些函数都可以在INC文件中找到)
判断是否为get函数你可以看INC文件中的说明,看他是否会return一个值
set函数是指对一些变量进行处理,不会返回一个值
用法常常如:zp_make_user_survivor(id)
set函数要注意,其括号内是需要一个变量或一个值,具体意思参照函数的说明
我举的例子的意思是:将玩家ID为id的玩家变为幸存者
自编的函数,其作用就是进行你所需要的功能
往往在插件的最后定义,名字任意
如:
stock zzyyxx(id)
{
……
}
(老衲才疏学浅,不知道这里为何stock可以,public也可以,甚至都可以不要- -)
当然,此时它就相当一段public函数了,括号内的你也可以自己定义
当然,如果你定义的是一段get函数,之后必须有return
如:
stock zzyyxx(id)
{
……
return xyz;(分号别忘)
}
不过,你既然定义了一个自己的函数,前面必须得使用它,并且括号内的需一一对应
PS:对应不是指变量名相同,而是指你摆对了你需要的位置

语句结构
AMXX里最常用的就是判断语句与循环语句
也就是if和for语句
判断语句就是判断一个条件是否成立再执行命令,举个例子
if(a == 1)
{
     a = 2
}
else
{
     a = 3
}
意思是:如果a=1的话,a=2,否则a=3
else表示条件不成立时所执行的命令,可省略
注意,在条件中,如上面的“a==1”用的必须是两个等号
如果表示不等于的话,如“a != 1”,“!”表示的是“不”的意思
当然,条件中并不一定是变量的相等,也经常用的native函数 如:
if(zp_get_user_zombie(id) && zombi == zp_get_zombie_count())
其中,“&&”表示“和”,只有当两个条件都成立的话才行
另一种是“||”,表示“或”,任一一个条件成立的话都行
你或许会有疑问:zp_get_user_zombie(id)不是get函数吗?前面怎么什么都没有?
有一类get函数比较特殊,它们只会返回“是”或“否”,也就是“1”或“0”
因此,对这类函数,可是直接用如:if(zp_get_user_zombie(id))
它的意思是当zp_get_user_zombie(id)返回的值是“1”的时候条件成立
也就是id是僵尸的时候条件成立
当然,如果表示返回的值是“0”的时候成立,可以在整个Native函数前加!,如:
if(!zp_get_user_zombie(id))

下面讲循环语句,其实AMXX里面循环语句最常用的就是循环所有的玩家,如:
for(new j = 0; j < 33; j++)
{
……
}

格式是这样的for(循环的变量;循环进行的条件;每次循环变量的改变量)
其中,j++表示j每次+1
其他的格式有j+=数字(表示每次+几,或者是j-=数字 表示每次-几)
其实AMXX在CS中循环的运用最多的也就是我举的那个例子了
循环所有玩家ID
-------------------------------------------------------------------
入门插件教程到此为止,日后有空老衲会写一个进阶的教程
这里顺便奉上本人制作的一份源码,英雄插件
不过,若你只看懂这些者源码还是看不懂的- -

路过

鸡蛋
5

鲜花

握手

雷人

刚表态过的朋友 (5 人)

收藏 分享 转发到开心网 举报

发表评论 评论 (3 个评论)

回复 zxc2611776 2013-4-5 00:21
额 貌似看不懂啊
回复 zsmoou 2013-5-23 10:04
完全看不懂,不过顶一个
回复 cenaam 2016-6-26 22:25
加油加油!一起成长!

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

回顶部