引用 | 编辑
mischna09
2013-02-04 07:21 |
楼主
▼ |
||||||||||||
![]() 轻松写插件~ ![]() =========================================== 大家好~我又是Y14Y了~ [依然是AMXX新手] 最近因为帮好友写了魔王 其中使用了大量的变数 变数? 你问变数是什么吗? 今天你将会认识它并活用他 Let's GO! -------------主要介绍-------------------------------------------------- 1.变数是什么? 变数在SMA中扮演着一种 开关 或是 纪录数字 或是 代替 的脚色 你能透过各种事件 让这个开关or 数字发生变化 然后在其他的fuction中藉由取得此变数的直来控制他 如果是替代的脚色 则须写一个 解释他是 2.建立变数 直接写一个 new 变数名称[33] [33] 有时候在其他情况会用更大的数字 如256等等 如果不加 就变成 没有特定对象 大多人会在前面加 g_ 我不觉得有差 可能只是方便分辨它是啥吧 就酱... (真短 =口=) 3.变数建立位置 (原来还有~) 一般而言可以直接再SMA任何一个 [ 不是别人fuction地盘的地方 ] 供整个插件的所有fuction都能共用 或 [ 直接加在fuction里面 ] 这样范围就只有这个fuction了 4.解释 (开关与纪录数字不在此范围) 如果你今天建立的变数是用来当代替的脚色 那我直接用一个范例讲解好惹 public example(id) { new name[33], money[33] get_user_name(id, name, 32) money = get_user_money(id) client_print(id, print_chat, "我的名字是%s 我很穷 我只有%d块钱", name , money) } 看到了吗? 建立变数后就是要解释他 解释这是名字有点特别 要用这个格式 get_user_name(要解释谁的名字, 要解释的变数名称, 32) 其他的get_user 的这种都可以用money的解释法 顺便教一下好了 %s 和 %d 是取得名称或数字的意思 要解释的东西要写在后面 而且要有顺序之分! 请记得以下内容! 如果用错将导致显示不出来 或显示乱码 [ %s 是用来取得名称 如:玩家名字 || %d 试用来取得数字的 如:钱 击杀数] 5.我希望他是XX 需要做什么? (代替 不在此范围) 一个拿来成为开关或纪录数字的变数 不管你要拿来当开关还是纪录数字 不必刻意去做什么解释 P.S. 没动的变数在开关上是指 false (关闭) 在数字纪录上是0 6.如何用在 if 里面 (代替 不在此范围) 今天如果你希望这个式子是 如果 你的变数是开的状态 就要写 if (你的变数[id]) 如果是关的状态就 if (!你的变数[id]) 在前面加个惊叹号 数字纪录的话 if (你的变数[id] == 30) 就是如果此变数是30 也可以... if (你的变数[id] >= 30) 就是如果大于等于30 所以当然也能... if (你的变数[id] <= 30) 小于等于... 也能 if (你的变数[id] != 30) 如果不等于30 7.变数名称 但请明记一个重点 变数名字的开头第一个字 一定要是英文!!! -----------------主要介绍结束-------------------------------- 活用1 : 我会用一个范例插件(功能是开场限时可以领一把免费武器 CT是m4a1 TR是ak47)来做翻译 也就是把每句都变成中文 方便你更快学会 !!此插件为上次的选单教学中的范例撷取取出来的 上次并没有做详细解释!! ///////////////////////////////////////////////////////////////////////////////// #include <amxmodx> #include <fun> #define PLUGIN "变数实用范例 {1} - 只能在开场限时内执行的事" #define VERSION "1.0" #define AUTHOR "Y14Y" new g_free_time[33] public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_logevent( "event_round_start", 2, "1=Round_Start"); register_clcmd("14_free", "example") } public example(id) { if(is_user_alive(id) && get_user_team(id) == 1 && g_free_time[id]) { client_print(id, print_chat, "[系统]你领取了开场限时免费武器 - AK-47!") give_item(id, "weapon_ak47") } if(is_user_alive(id) && get_user_team(id) == 2 && g_free_time[id]) { give_item(id, "weapon_m4a1") client_print(id, print_chat, "[系统]你领取了开场限时免费武器 - M4A1!") } if(!g_free_time[id]) { client_print(id, print_chat, "[系统]限时免费武器的时间已经过了 下次早点吧!") return; } } public event_round_start() { for(new i = 0; i < get_maxplayers(); i++) { g_free_time = true set_task(10.0, "freeoff", i) } } public freeoff(id) { g_free_time[id] = false } ////////////////////////////////////////////////////////// 翻译 解释: (基础部分就不多加说明了) #include <amxmodx> //不说明 #include <fun> //不说明 #define PLUGIN "变数实用范例 {1} - 只能在开场限时内执行的事" //不说明 #define VERSION "1.0" //不说明 #define AUTHOR "Y14Y" //不说明 建立一个变数 (名字为)g_free_time[33] public plugin_init() //不说明 { register_plugin(PLUGIN, VERSION, AUTHOR) //不说明 注册事件("event_round_start"代表的事件是"回合开始") 注册指令("(指令)14_free", 触发"example") } public example(id) { 如果(玩家生存(id) 并且 取得队伍(id) 是 1(TR) 并且 g_free_time[id]这个变数是开启的) { client_print(id, print_chat, "[系统]你领取了开场限时免费武器 - AK-47!") //不说明 give_item(id, "weapon_ak47") //给玩家道具- 武器 AK47 } if(玩家生存(id) 并且 取得队伍(id) 是 2(CT) 并且 g_free_time[id]这个变数是开启的 ) { give_item(id, "weapon_m4a1") //给玩家道具- 武器 M4A1 client_print(id, print_chat, "[系统]你领取了开场限时免费武器 - M4A1!") //不说明 } if(g_free_time[id]这个变数是关闭的 ) { client_print(id, print_chat, "[系统]限时免费武器的时间已经过了 下次早点吧!") //不说明 return; //停止 } } public event_round_start() //事件:回合开始 { for(new i = 0; i < get_maxplayers(); i++) //不说明 { 将g_free_time设定为开启 计时器(10.0(秒), "执行freeoff" ,对象是i) } } public freeoff(id) { 将g_free_time设定为关闭 } ==================================== 如果身为高手的你觉得哪里讲错或有更好的讲法 欢迎说出~ ^^ 今天的教学就到这里了~祝你能成SMA高手 如果你觉得对你有用 就让我吃朵花花 或推推吧~
![]()
|
引用 | 编辑
Nailaz
2013-02-04 07:43 |
1楼
▲ ▼ |
2.建立变数 加[33]是因为要让玩家个别取得ID,玩家最大数是32 []也不一定要是33可以是256等等的 ![]() |
引用 | 编辑
Marchillus
2013-02-27 20:11 |
11楼
▲ ▼ |
这个SMA是会编译错误的啊! 每个玩家其实没有分配到...
最后的event g_free_time 没有指定对象是错误的... ![]() |
引用 | 编辑
Marchillus
2013-03-10 13:26 |
12楼
▲ ▼ |
g_free_time那边的i会因为论坛功能起冲突...
![]() |
引用 | 编辑
Marchillus
2013-03-30 11:13 |
13楼
▲ ▼ |
事实上你根本不必去用到[33]...
g_free_time就是一个单一变数 既然不能领的时候大家都是未开启变数 那直接省略[33] 这样也省的用回圈.... ![]() |