[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