===========================================
轻松写插件~
~写插件轻松
===========================================
大家好~我又是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高手
如果你觉得对你有用
就让我吃朵花花 或推推吧~