设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8750|回复: 54

[原创] 老衲出品,AMXX插件入门级教程!献给想学插件的新手们~     [复制链接]

Rank: 7Rank: 7Rank: 7

帖子
524
精华
0
声望
2069 点
金币
123 Mold
被赞许
0 次
注册时间
2009-9-30
发表于 2010-7-9 15:14:55 |显示全部楼层
本帖最后由 wzh625lc 于 2010-7-9 15:18 编辑

老衲最近心血来潮,想写个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
-------------------------------------------------------------------
入门插件教程到此为止,日后有空老衲会写一个进阶的教程
这里顺便奉上本人制作的一份源码,英雄插件
不过,若你只看懂这些者源码还是看不懂的- -
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
已有 6 人评分声望 金币 收起 理由
wocaomama + 5 优秀作品
xp200798 + 20 + 5
Marshal + 48 + 10 我很赞同
开热闹 + 5 刚好我在找插件编写的基础教程 ...
gzy0405 + 20 看懂一点点了

总评分: 声望 + 128  金币 + 15   查看全部评分

使用道具 举报

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2836
精华
2
声望
12984 点
金币
2999 Mold
被赞许
28 次
注册时间
2006-4-28

Mod中国同盟社至高荣誉

发表于 2010-7-9 15:27:35 |显示全部楼层
写得有点乱,最好能弄成天书那样

使用道具 举报

Moderator

他们叫我疯子呢。。。

Rank: 8Rank: 8

帖子
3076
精华
3
声望
5278 点
金币
676 Mold
被赞许
67 次
注册时间
2009-10-22

MTT职员 黑暗使者 Modchina灌水王 懒人勋章 可爱小猫

发表于 2010-7-9 15:29:52 |显示全部楼层
收藏了
不会插件就是烦...

使用道具 举报

Rank: 10Rank: 10Rank: 10

帖子
1442
精华
0
声望
5057 点
金币
523 Mold
被赞许
3 次
注册时间
2009-9-11

可爱小猫

发表于 2010-7-9 15:59:43 |显示全部楼层
回复 1# wzh625lc
我想看实例,最好是N个实例
好无聊

使用道具 举报

Rank: 8Rank: 8

帖子
1304
精华
3
声望
2290 点
金币
1140 Mold
被赞许
20 次
注册时间
2009-11-28
发表于 2010-7-9 16:42:06 |显示全部楼层
我啥都看不懂···
大概因为我小学生吧···
竭诚为MODCHINA服务!!

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1721
精华
0
声望
2842 点
金币
88 Mold
被赞许
0 次
注册时间
2010-6-23

图界之神 可爱小猫 懒人勋章

发表于 2010-7-9 17:10:09 |显示全部楼层
不错,收藏下来,以后慢慢看

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
1687
精华
0
声望
3804 点
金币
881 Mold
被赞许
10 次
注册时间
2009-12-28
发表于 2010-7-9 17:21:00 |显示全部楼层
我对插件一点也不懂,甚至连放哪都.......

使用道具 举报

Rank: 7Rank: 7Rank: 7

帖子
680
精华
0
声望
1987 点
金币
213 Mold
被赞许
0 次
注册时间
2010-4-25

图界之神

发表于 2010-7-9 17:33:47 |显示全部楼层
很好呀  刚刚想学习下插件的编写 找了半天都米看到基础教程  嘿嘿  你这个就来了
**** 隐藏信息 跟帖后才能显示 *****

使用道具 举报

Rank: 5Rank: 5

帖子
270
精华
0
声望
938 点
金币
186 Mold
被赞许
0 次
注册时间
2009-11-20
发表于 2010-7-10 00:00:28 |显示全部楼层
哎呀·  头都看晕了...

使用道具 举报

Moderator

搞怪憨豆

Rank: 8Rank: 8

帖子
2954
精华
2
声望
7014 点
金币
1740 Mold
被赞许
16 次
注册时间
2009-1-29
发表于 2010-7-14 14:23:48 |显示全部楼层
看着现在网上寥寥无几的AMXX入门教程,也只有这篇适合新手看了……

使用道具 举报

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

回顶部