===========================================
輕鬆寫插件~
~寫插件輕鬆
===========================================
大家好~我又是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高手
如果你覺得對你有用
就讓我吃朵花花 或推推吧~