廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 21556 個閱讀者
 
<<   1   2   3   4   5  下頁 >>(共 6 頁)
發表文章 發表投票 回覆文章
  可列印版   加為IE收藏   收藏主題   上一主題 | 下一主題   
storym88349 手機
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x15 鮮花 x34
分享: 轉寄此文章 Facebook Plurk Twitter 版主評分 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片
推文 x7
[插件] SMA腳本:簡易舊版選單製作
原創文章
咳咳!嗯...好久沒發文了,正在想要發什麼文來打發打發時間時,一時興起就來打一篇選單的製作教學,不過我只會舊版的,因為新版的我看不懂 表情  

如果有回鍋的話,可能是我沒有看到,又或者是不小心給漏看了,多多包涵 表情    

那麼~進入正題~



有寫過SMA的都知道,最關鍵的include一定要打,但是這邊我只講選單相關,所以include相關請自行尋找 表情    

那麼,請往下↓

複製程式
public plugin_init(){ 
    register_plugin("Menu","1.0","storym88349")    //註冊腳本,常識就不多說了 
    register_clcmd("say menu","ShowMenu",-1,"Show Menu")    //註冊命令,內容是說「menu」時執行ShowMenu 
    register_menucmd(register_menuid("\y選單教學:"), 1023, "MenuCMD" )    //註冊選單命令,menuid需與要連結的選單一樣才有用 
} 
public ShowMenu(id){    //這裡是輸入命令時的事件,在這裡顯示選單的內容 
    new szMenuBody[256]    //以new選告szMenuBody為變數,以此作為載體來儲存選單內容 
    new keys    //宣告按鍵 
    new nLen = format( szMenuBody, 255, "\y選單教學:^n" )    //選單標題、內容 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w1. 有點懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. 好像懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w3. 應該懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w4. 不太懂!" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n\w5. 你說啥?" ) 
    nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\w0. 退出" ) 
    keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)    //設定按鍵,這不難懂吧? 
    show_menu( id, keys, szMenuBody, -1 )    //顯示選單 
} 
public MenuCMD( id,key ){    //執行選單的命令,此處的id下方需要用到此變數才加 
    switch( key ){    //switch在很多地方都用的到,ex:隨機選取 
    case 0: client_print( id, print_chat, "你選了有點懂!" )    //這裡的case0是w1的命令喔 
    case 1: client_print( id, print_chat, "你選了好像懂!" ) 
    case 2: client_print( id, print_chat, "你選了應該懂!" ) 
    case 3: client_print( id, print_chat, "你選了不太懂!" ) 
    case 4: client_print( id, print_chat, "需要我在說一遍?" )    //這段的意思是在玩家端的對話頻道顯示後面那句話 
    case 9: client_print( id, print_chat, "你選了退出!" )    //同樣的,也可以輸入別的命令 
    } 
}


寫完~不懂請發問~有錯請指正~表情


[ 此文章被storym88349在2009-10-10 19:48重新編輯 ]

此文章被評分,最近評分記錄
財富:100 (by amore12) | 理由: 辛苦了!!



獻花 x2 回到頂端 [樓 主] From:臺灣 | Posted:2009-09-21 20:06 |
112459
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
小人物
級別: 小人物 該用戶目前不上站
推文 x71 鮮花 x93
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

@@這個不錯~話說能再解釋一下include方面的東西嗎?
另外...選單的振鍵能改其他嗎???@@
↓                 ↓
keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
↑                 ↑
這個不打可以嗎@@
表情 好文幫你推薦一下 表情


獻花 x0 回到頂端 [1 樓] From:香港城市電訊 | Posted:2009-09-21 21:13 |
112459
個人文章 個人相簿 個人日記 個人地圖
社區建設獎
小人物
級別: 小人物 該用戶目前不上站
推文 x71 鮮花 x93
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

複製程式
    new szMenuBody[256]    //以new選告szMenuBody為變數,以此作為載體來儲存選單內容 
                 new keys    //宣告按鍵 
能解釋一下嗎?環是不太懂= =|||
複製程式
    register_clcmd("say menu","ShowMenu",-1,"Show Menu")
當中的-1是什麼一意....囧= =另外Show Menu又是為何=口=
再來= =
複製程式
    register_menucmd(register_menuid("\y選單教學:"), 1023, "MenuCMD" )    //註冊選單命令,menuid需與要連結的選單一樣才有用 
這個要怎去改= =


獻花 x0 回到頂端 [2 樓] From:香港城市電訊 | Posted:2009-09-21 21:27 |
a7811311622 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章 社區建設獎
頭銜:我…在工作了…我…在工作了…
版主
級別: 版主 該用戶目前不上站
版區: CS提問區
推文 x771 鮮花 x2152
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

雖然不太懂選單的寫法,不過以前看「超級M4+M203」裡的內容後,
發現:
複製程式
case 9: client_print( id, print_chat, "你選了退出!" )

好像要改成
複製程式
default:{client_print( id, print_chat, "你選了退出!" );return ╳╳╳;}
default好像是用在其他條件都不成立的時候的樣子,如果用case 9我也不知可不可行…
而return沒有的話應該不會退出選單吧…

雖然是讓我受益良多~不過…我看一堆人看到內容後就按"0"退出了吧…


[ 此文章被a7811311622在2009-09-21 23:25重新編輯 ]


尚無簽名,歡迎 [新增個性化簽名]
獻花 x0 回到頂端 [3 樓] From:未知地址 | Posted:2009-09-21 23:06 |
storym88349 手機
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x15 鮮花 x34
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

回一樓:

include本來是不想說的,但既然問了,那就只好說了
AMX MOD X的腳本使用的是PAWN語言,又因為模仿了C/C++的架構,所以又被稱為Small C
include指令在C/C++語言中也是一定會用到的
#include <amxmodx>
#include <amxmisc>
這兩個是最基礎的兩個,主要是影響到語法的命令內容,include是「包含」的意思,用這個指令來載入所謂的「字典」
例如說,有個東西叫bomb_explode,這個命令是用在C4爆炸時執行事件,而此命令在csx之中,所以要加:
#include <csx>來使用,如果不加的話,在compile時就會顯示「無效的命令」,從而導致compile失敗

keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
看字面就知道這是按鍵的設定
據說只打1023也可以正常執行,但是我想既然是教學,還是打完整的好

回二樓:

new szMenuBody[256]↓

用new來宣告新變數,字面上的意思就是,增加一個名為szMenuBody的變數,並給予256位元的資料儲存
在選單的語法中,每一句都有szMenuBody,就是要將資料儲存在這裡面。
變數的名稱可以自己給,只要你打的語法可以正常執行打什麼都可以。

register_clcmd("say menu","ShowMenu",-1,"Show Menu")

既然你問第三和第四格,前兩個我就不說了。
第三格指的是使用者的資格,-1是不列入計算,也就是所有玩家都可以。
第四格其實可以不用打也能執行,官方的原文是"Description of the command"也就是命令的描述。

register_menucmd(register_menuid("\y選單教學:"), 1023, "MenuCMD" )

這個其實有做整合,第一格其實只要打menuid就好,但是如果在這裡打了register_menuid的話,就不用在多打一行。
「選單教學:」就是選單的標題,前面的\y是顏色,y是黃色,w是白色,r是紅色,其他的我不太清楚,就麻煩你們自行研究了。
1023的意義,可以看我給一樓的回文,之所以這裡比較省略,是因為一個一個打實在很多。
最後的MenuCMD,就是連結到指令的語法,不難理解吧?名稱也可以隨便改。

回三樓:

我沒看過超級M4+M203的原始碼,不好意思...
case 9,是指switch(keys)的0鍵,是為了配合選單內容才這樣寫的。
default主要是用在所有case都不符合才使用的,我不太會用到它。
另外,在case之中如果要使用兩個以上的命令,才要在兩端加上{}

return的用法有三個:return PLUGIN_CONTINUE/PLUGIN_HANDLED/PLUGIN_HANDLED_MAIN
第一個就是繼續使用插件
第二個是說插件命令停止,直到下次呼叫
第三個我不太會用,大概是說停止命令,但不中斷呼叫
此外,可以打得簡短些,根據我打得次序,可以只打0/1/2來代替

補充:

既然提到了switch,就不得不說另一個也常常會使用switch的語法:隨機
複製程式
new rand = random_num(0,3)    //宣告變數rand,並使rand為隨機數字0~3(共四個) 
switch(rand){    //發現了嗎?這裡用的是變數rand,和按鍵的不同喔! 
    case 0: client_print( id, print_chat, "你抽到了一萬元!" ) 
    case 1: client_print( id, print_chat, "你抽到了五千元!" ) 
    default : client_print( id, print_chat, "你什麼都沒得到!")    //一時興起寫了default,很久沒用這個,有錯請指正 


如此如此這般這般,就完成了一段隨機的語法,那些隨機播放音效的大都是用這種方法寫的。




另外還有一個東西,叫做define(定義),和new的用法很像,但是又不太一樣
例如說,我先在#include下面打上#define keys (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
這樣一來,整個插件之中,使用到keys的部份,就不需要重新宣告keys,直接使用就可以。
為何呢?因為我在一開始就把keys定義成(1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
所以就不需要在宣告變數,是個很方便的命令。

此外,在隨機的語法也可以用得上。
#define MAX_NUM 4
new rand = random_num(0,MAX_NUM-1)
發現了嗎?這樣寫和上面的隨機是一樣的喔!而且這樣寫就可以直接設定總數,而不會被第一個數字到底是0還是1搞混。
此外要修改時,也可以直接修改定義,雖然有些雞肋,但在大量重複使用時也是常用用法之一。


[ 此文章被storym88349在2009-09-22 19:40重新編輯 ]

此文章被評分,最近評分記錄
財富:200 (by amore12) | 理由: 辛苦了!!


獻花 x3 回到頂端 [4 樓] From:臺灣 | Posted:2009-09-22 19:12 |
a7811311622 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章 社區建設獎
頭銜:我…在工作了…我…在工作了…
版主
級別: 版主 該用戶目前不上站
版區: CS提問區
推文 x771 鮮花 x2152
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

我會說要加return是擔心沒加會變成:
按了"0"後的確是跳出,不過選單還在畫面上…不知會不會變成這樣…
至於switch和#define我之前寫的插件都玩過了,所以我算是了解了…
還真的像雞肋一樣…食之無味,棄之可惜啊…


尚無簽名,歡迎 [新增個性化簽名]
獻花 x0 回到頂端 [5 樓] From:未知地址 | Posted:2009-09-22 21:31 |
koto07 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x23 鮮花 x45
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

請問選單要有下一頁 又該怎樣寫 表情


獻花 x0 回到頂端 [6 樓] From:臺灣中華電信 | Posted:2009-09-22 21:54 |
a7811311622 手機
個人頭像
個人文章 個人相簿 個人日記 個人地圖
特殊貢獻獎 優秀管理員勳章 社區建設獎
頭銜:我…在工作了…我…在工作了…
版主
級別: 版主 該用戶目前不上站
版區: CS提問區
推文 x771 鮮花 x2152
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 koto07 於 2009-09-22 21:54 發表的 : 到引言文
請問選單要有下一頁 又該怎樣寫 表情

雖然沒寫過…不過依在下淺見…應該是設定一個鍵可以開啟另一個選單,
簡單說寫兩個選單,然後利用一個鍵來交互切換…

以上言論純是猜測,如有雷同,純屬巧合…


尚無簽名,歡迎 [新增個性化簽名]
獻花 x0 回到頂端 [7 樓] From:未知地址 | Posted:2009-09-22 22:52 |
koto07 手機
個人文章 個人相簿 個人日記 個人地圖
初露鋒芒
級別: 初露鋒芒 該用戶目前不上站
推文 x23 鮮花 x45
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

摁摁 我去試試看


獻花 x0 回到頂端 [8 樓] From:臺灣中華電信 | Posted:2009-09-23 19:15 |
storym88349 手機
個人文章 個人相簿 個人日記 個人地圖
小人物
級別: 小人物 該用戶目前不上站
推文 x15 鮮花 x34
分享: 轉寄此文章 Facebook Plurk Twitter 複製連結到剪貼簿 轉換為繁體 轉換為簡體 載入圖片

下面是引用 koto07 於 2009-09-22 21:54 發表的 : 到引言文
請問選單要有下一頁 又該怎樣寫 表情


既然我在這篇教學中,將0設定為退出,那麼就依慣例,將9設為下一頁
在這邊要重新註冊新的選單,因為寫下一頁的語法其實不過是將另一個選單叫過來而已
將case 9的指令寫成顯示選單的指令,到下一頁之後,也可以依樣畫葫蘆的寫回到上一頁的語法

一切就是那麼的簡單表情

之前看過另一種寫法,但是我看半天都看不懂,所以只好作罷了

如果有人可以提供別的寫法的話,歡迎一起來研究~


獻花 x0 回到頂端 [9 樓] From:臺灣 | Posted:2009-09-23 19:34 |

<<   1   2   3   4   5  下頁 >>(共 6 頁)
首頁  發表文章 發表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.061756 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言