引用 | 編輯
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高手 如果你覺得對你有用 就讓我吃朵花花 或推推吧~
x4
|
引用 | 編輯
Nailaz
2013-02-04 07:43 |
1樓
▲ ▼ |
2.建立變數 加[33]是因為要讓玩家個別取得ID,玩家最大數是32 []也不一定要是33可以是256等等的 x1 |
引用 | 編輯
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 |