[SMA教学]巧妙使用变数 第{ 1 }集

Home Home
引用 | 编辑 mischna09
2013-02-04 07:21
楼主
推文 x1
===========================================


 轻松写插件~     表情             ~写插件轻松


===========================================
大家好~我又是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高手

如果你觉得对你有用
就让我吃朵花花 或推推吧~

本帖包含附件
档名: txt example.txt   (2022-06-09 14:20 / 2 KB)  
范例 - 因为不能上传SMA格式 所以使用TXT记事本
下载次数:15 需要威望:2


献花 x4
引用 | 编辑 Nailaz
2013-02-04 07:43
1楼
  
2.建立变数
直接写一个
new 变数名称[33] (<-我不大懂加33和不加33的差别 反正我通常都会加)
大多人会在前面加 g_ 我不觉得有差 可能只是方便分辨它是啥吧
就酱... (真短 =口=)

加[33]是因为要让玩家个别取得ID,玩家最大数是32
[]也不一定要是33可以是256等等的

献花 x1
引用 | 编辑 烈Gama英仙座
2013-02-04 11:50
2楼
  
这对我很有用

给你一个赞!!

希望能再多交一些

献花 x1
引用 | 编辑 绝影华
2013-02-04 12:47
3楼
  
下面是引用 郑柏升 于 2013-02-04 07:43 发表的 : 到引言文


加[33]是因为要让玩家个别取得ID,玩家最大数是32
[]也不一定要是33可以是256等等的



有时候我也会奇怪......
人数32  为什么不用new xxxx[32]

献花 x1
引用 | 编辑 八云の橙猫
2013-02-04 14:21
4楼
  
下面是引用 绝影华 于 2013-02-04 12:47 发表的 : 到引言文




有时候我也会奇怪......
人数32  为什么不用new xxxx[32]



玩家的id是1~32
但是 如果使用32的话 里面包含的只有0~31(0也算在内 编号32的玩家无法被指定到)


所以 用33的话 虽然0用不到 但是才可以包含1~32的位元组可以储存id


有错请指点

献花 x0
引用 | 编辑 绝影华
2013-02-04 14:59
5楼
  
下面是引用 八云の橙猫 于 2013-02-04 14:21 发表的 : 到引言文




玩家的id是1~32
但是 如果使用32的话 里面包含的只有0~31(0也算在内 编号32的玩家无法被指定到)


所以 用33的话 虽然0用不到 但是才可以包含1~32的位元组可以储存id


有错请指点



还以为像程式一样玩家由0开始计算
表情 表情 表情

献花 x1
引用 | 编辑 观众甲
2013-02-04 17:12
6楼
  
下面是引用 绝影华 于 2013-02-04 14:59 发表的 : 到引言文




还以为像程式一样玩家由0开始计算
表情 表情 表情

我也是这样以为
但是有一次用for的时候
发现有时候用for(new i=0;i<32;i++)显示某些文字的时候
会有错误
但是for(new i=1;i<32;i++)不会错误
我才发现到,0是显示给全部玩家-w-

献花 x0
引用 | 编辑 绝影华
2013-02-04 19:06
7楼
  
下面是引用 观众甲 于 2013-02-04 17:12 发表的 : 到引言文


我也是这样以为
但是有一次用for的时候
发现有时候用for(new i=0;i<32;i++)显示某些文字的时候
会有错误
但是for(new i=1;i<32;i++)不会错误
我才发现到,0是显示给全部玩家-w-



怪不得........
之前用for由0开始
在等级中玩家名字显示了伺服器的名称
表情

献花 x0
引用 | 编辑 幻影乂鬼狼
2013-02-05 20:41
8楼
  
内容很详细(打字打得很累吧
送你 表情

献花 x1
引用 | 编辑 kitty3d07
2013-02-17 18:33
9楼
  
神.
但我也很混乱

献花 x0
引用 | 编辑 sot86217
2013-02-22 19:48
10楼
  
期待下一集~你讲的非常详细悠

献花 x0
引用 | 编辑 Marchillus
2013-02-27 20:11
11楼
  
这个SMA是会编译错误的啊! 每个玩家其实没有分配到...
最后的event
g_free_time   没有指定对象是错误的...

献花 x0
引用 | 编辑 Marchillus
2013-03-10 13:26
12楼
  
g_free_time那边的i会因为论坛功能起冲突...

献花 x0
引用 | 编辑 Marchillus
2013-03-30 11:13
13楼
  
事实上你根本不必去用到[33]...
g_free_time就是一个单一变数
既然不能领的时候大家都是未开启变数
那直接省略[33]
这样也省的用回圈....

献花 x0
引用 | 编辑 CRxx排骨仔
2013-04-02 22:49
14楼
  
厉害。正在努力看中

献花 x1
引用 | 编辑 eeyear
2022-10-27 20:39
15楼
  
这对我很有用

给你一个赞!!

希望能再多交一些

献花 x0
引用 | 编辑 eeyear
2022-10-27 20:39
16楼
  
厉害。正在努力看中 表情 表情

献花 x0
引用 | 编辑 eeyear
2022-10-27 20:40
17楼
  
期待下一集~你讲的非常详细悠 表情

献花 x0