牙京
|
分享:
▼
x3
|
[插件] register_event註冊事件函數解說
register_event是AMX的註冊事件語句,簡單來說就是在特定事件發生的時候調用某個函數,來達到自己特定的目的。比如說,我們想在每局開始的時候,給每名玩家發一把M4(我比較喜歡M4),就可以用到register_event語句。下面我們來看一個具體的例子,Bread會結合這個例子來具體講解。
register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
這是一個典型的註冊事件語句,register_event至少應包含4個參數,分別是事件Event、函數Function、標誌位 Flag以及判斷條件Condition,而其中的判斷條件可以是多條並列。它的作用則是在事件Event出現的時候,先判斷是否符合Flag標誌位的標準,然後判斷此事件消息是否符合condition的條件,若兩者都通過則自動調用Function函數。.....-_-...難理解的話就先不要理解,下面我們來一一對參數進行講解。第一個參數Event是事件常量,比如說常見的"SendAudio","TextMsg"等等,具體的事件列表你可以在遊戲中由控制台敲入"meta game"(大小寫敏感)來獲得。第二個參數,Function,則需要由用戶自己定義。我們來舉個簡單的例子:
register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin") 在這條語句中,Event是"SendAudio",也就是發送聲音的事件。第二個參數,"t_win"則是由用戶自己定義的。整條語句的作用就是在T方獲勝的時候調用t_win這個函數。
再來看第三個參數,標誌位flag,用來標識事件類型。只有事件出現時符合其所規定的類型,函數才會被調用。它也是個常量,具體的賦值如下:
"a" 表示是全局事件,比如說開局,某方勝利等等,這種消息人人都可以看到,因此是全局信息 "b" 表示是發送給某個個體的事件,比如說某人被對方擊中等等 "c" 表示此信息重複發送給其他玩家,而對這個個體只發送一遍。這個解釋起來有點麻煩,你這樣理解好了。某個事件發送給你之後,會重複發給其他玩家,但即便如此,自定義函數也只會被調用一次。 "d" 表示此事件信息只發送給死亡玩家 "e" 表示此事件只發送給活著的玩家
對於我們的例子來說,SendAudio顯然是全局事件。再來看下面這個經典的例子::
register_event("TextMsg","setSpecMode","bd")
後面的參數先不要管,第三個參數用的是"bd",也就是說,只有事件"TextMsg"被發送給一個單獨的玩家,並且此玩家已經死亡的時候,"setSpecMode"才會被調用。
下面再來看最重要的部分,判斷條件:
在此之前,我們要清楚事件消息的發送格式,HL引擎在發送事件消息的時候,會在事件名之後跟上幾個參數,用來表達具體的信息。當然參數個數和類型會根據事件的不同而有所變化。在我們的這個例子中,"SendAudio"的參數共有兩個,第一個是sound mode,也就是聲音格式,第二個是聲音標識,為字符串型。 而判斷條件所要比對的,就是這幾個參數的信息。首先,每個條件在開頭要寫上一個數字,用來表示要比對的參數序列。再回到開頭的例子: "2&%!MRAD_terwin"
則表示要比對的是"SendAudio"第二個參數,聲音標識。然後,我們要介紹幾個邏輯符號。 "&" 表示包含關係,比如說"2&Bread",則表示若第二個參數中包含"Bread"則條件成立 "=" 表示完全相符,比如說"2=Bread",則表示第二個參數必須是"Bread",條件才成立 表示不包含,比如說"4!Bread",則表示第四個參數中不得包含"Bread",這樣條件才成立 ">"和"<" 和代數意義相同,比如說"3>15"則表示第3個參數必須大於15才行
這樣一來,"2&%!MRAD_terwin"的意思就不言而喻了。它要做的就是比對聲音標識中是否含有"%!MRAD_terwin"這個字符串。說到這裡,就廢話多說幾句。事件"SendAudio"顧名思義是向客戶端發送聲音的,而第二個參數則表示發送的聲音類型,比如說此例中的"%!MRAD_terwin"表示T方獲勝,還有"=%!MRAD_ctwin"(表示CT方勝利),"=%!MRAD_rounddraw"(表示平局)。相信大家對這些聲音都不會陌生。
register_event()語句因其獨特的作用,幾乎在每個知名插件中都能找到它的身影。我記憶猶深的是比賽插件playoff投票無效的BUG,就是由於使用"TeamScore"事件的時候考慮不夠周全.總之這個語句很有用就是了,嘿嘿...多看幾個經典的插件,慢慢就會靈活掌握的。
根據Bread之前的感覺來說,剛接觸register_event的時候,最頭疼的就是各個事件的具體參數,以及各個參數的意義。雖然"meta game"能把事件都調出來..卻看不到參數。有鑒於此,Bread在附件中為大家準備了簡單的事件列表,其中有比較詳盡的參數分析,經常用到的事件也都包括在內了。對了,忘了說,這份事件列表是從官方得來的,作者已經無從考證..無論如何...謝謝作者的辛勤勞動
轉自c7
|