引用 | 編輯
八云の橙貓
2023-11-18 04:01 |
樓主
▼ |
||
x2
【插件資訊】插件來源:原創 使用指令:sma編譯成amxx放入plugins資料夾 安裝路徑:.sma - 放入scripting .inc - 放入include 【插件介紹】 複製程式 主樓 -- 插件介紹 一樓 -- INC介紹 二樓 -- 實例說明 【編寫與測試環境】 Amx mod X 1.10 1.8.3以後都可以運行,如運作不順利推薦更新至Amx mod X 1.9版本 【使用模塊】 <amxmodx> <fakemeta> <nvault> 使用請務必確認模塊版本為最新或支援使用的版本 從古至今可能各位有看過不同類型伺服器有推出第三方組隊功能 常見的類似於魔王、Biohazard、Zombie Riot 等等的PVE型對抗伺服器 本插件提供API功能可以讓你在各類型插件中呼叫Native達成類似 共享經驗、共享自訂掉落物、共享隊伍情報... 等等功能 使用的是傳統menu寫法(抱歉我覺得新式menu真的好難用) 請注意:本插件適用於對AMXX Pawn編寫有一定程度了解的中階級玩家使用 本人不負責教學延伸功能、如不會使用Native呼叫等等,那該插件對你來說只是一個普通顯示組隊功能的插件 【介紹】 起始如沒有任何隊伍時,選單會顯示這樣 來創建一個隊伍吧! 接著會得到以下樣式,系統會告訴你創建隊伍成功,也會廣播給所有玩家知道你創建了隊伍,細項等等逐步解釋隊長功能 <隊伍資訊> 介面中會顯示哪些玩家在你的隊伍,以及基本資訊 請忽略職業顯示,這是我的第三方插件,您也可以在這裡加入自訂想顯示的情報(需修改SMA) 假設有隊員時,我們可以選擇一個隊員進行操作,此處您也可以自行修改SMA加入不同功能 可以選擇踢出該隊員,或者委任他成為新的隊長 <解散隊伍> 解散當前隊伍,需要是隊長才可以進行,解散後所有隊員都會被移出隊伍 <邀請入隊> 邀請當前沒有所屬隊伍的隊員進入隊伍 SMA內可以自行增加判斷篩選過濾的條件 收到邀請時,會如下圖顯示倒數 接受後,就會進到隊長的所屬隊伍內 離開隊伍時,隊伍會自動將空欄位整理並向上方堆疊剩餘的隊員 <重新命名隊伍> 選擇後,會看到左上角跳出訊息框可以輸入新的隊伍名稱 你也可以開啟控制台 輸入 TeamName "名稱" 達成改變成中文隊名的效果 <隊伍控制項> 此處也可以透過SMA自由修改加入您想新增的設定 插件內有使用nvault的保存功能,會記憶玩家的設定 (分享掉落物只是Sample、沒有實際功能) 只提供SMA與INC 50威望 如有錯誤請將plugins.ini中的amxx後方輸入 debug 提供異常行數與情況回報給我修復 INC介紹將於一樓說明 ---------------------- ** Ver 1.01 - 修正找尋隊伍時,如該隊伍隊長中途離線導致選擇隊伍console有報錯的訊息 [此文章售價 5 雅幣已有 7 人購買]若發現會員採用欺騙的方法獲取財富,請立刻舉報,我們會對會員處以2-N倍的罰金,嚴重者封掉ID! x5
|
引用 | 編輯
八云の橙貓
2023-11-18 04:02 |
1樓
▲ ▼ |
<INC內容說明>
隊伍控制使用enum,您可以增加其他自訂命名的控制組數名稱 需要同步在sma內新增對應的中文敘述 複製程式 enum _:MAX_TEAM_SETTING { JOIN_TYPE = 0, SHARE_DROPS } 複製程式 /** * 顯示隊伍主要選單 * * @noreturn */ native show_team_menu(id); 複製程式 /** * 確認玩家是否存在隊伍中 * * @return 1 有隊伍 * 0 沒有隊伍 */ native get_user_has_team(id); 複製程式 /** * 檢查兩位玩家是否存於同隊伍中 * * @param id 比較對象1 * @param target 比較對象2 * * * @return -1 比較對象1不在隊伍內 * -2 比較對象2不在隊伍內 * -3 比較對象有一方出現錯誤 * 1 同隊伍 * 0 不同隊伍 */ native get_user_same_team(id, target); 複製程式 /** * 檢查該隊伍編號是否存在成員 * * @param team_num 隊伍編號 * * @return 1 有成員 * 0 無成員 */ native get_team_has_member(team_num); 複製程式 /** * 取得對象的隊伍編號 * * @param id 客戶端編號 * * @return -1 沒有隊伍 */ native get_team_num(id); 複製程式 /** * 取得指定隊伍編號內的指定欄位隊友id * * @param team_num 隊伍編號 * @param slot 欄位編號 * * @return -1 隊伍編號超出指定範圍 * -2 欄位超出指定範圍 */ native get_team_member(team_num, slot); 複製程式 /** * 取得與指定對象相同隊伍編號欄位的客戶端id * * @note 與 get_team_member 不同的是,這個會直接找尋指定對象存在隊伍id,可以用來更快 * 判斷一些處理 * * @param id 客戶端id * @param slot 需要搜尋的欄位 * * @return -1 隊伍編號超出指定範圍 * -2 欄位超出指定範圍 */ native get_same_team_member(id, slot); 複製程式 /** * 取得對象的隊伍成員數量 * * @param id 客戶端id * * @return -1 隊伍編號超出指定範圍 */ native get_team_member_counts(id); 複製程式 /** * 取得隊伍控制設定的參數 * * @param id 客戶端id * @param setting 設定類別(參照 enum _:MAX_TEAM_SETTING) * * @return 對象未連接或設定項目不存在時會回傳0,關閉也會回傳0,如有效則會回傳其他參數設定數字 */ native get_team_setting(id, setting); x1 |
引用 | 編輯
八云の橙貓
2023-11-18 04:18 |
2樓
▲ ▼ |
雖然文章說不負責延伸教學
但還是提供一下應用實例講解一下INC效果 此處是組隊分配經驗值的寫法,可以參考看看就好 複製程式 new g_storge_exp[MAX_TEAMS] //新增全域變數儲存隊伍內的經驗值 //team const的INC內已經定義MAX_TEAMS的最大隊伍值,故include後可以直接呼叫做使用 ... 複製程式 ... //此處可放在自訂的擊殺判斷內 if(get_team_num(id) != -1) //判斷玩家所存隊伍為有效隊伍時 g_storge_exp[get_team_num(id)] += floatround(exp_amount * 0.1) //往全域變數內儲存10%的經驗值 ... 複製程式 //延續上一段 static i //頻繁呼叫所以我們定義靜數做使用,減少插件重複創建變數又將他移除 for(i = 0; i < MAX_TEAMS; i++) { if(!get_team_has_member(i) || !g_storge_exp[i]) //如果隊伍不存在玩家(空隊伍) 或者儲存經驗槽為空 跳過 continue; static a //此處同樣以靜數運作 for(a = 0; a < MAX_TEAMATES; a++) { static user; user = get_team_member(i, a) //迴圈會每次將對應隊伍i以及其隊員a帶入值給user if(get_team_member_counts(user) < 2) //我判斷隊伍中少於2人的情況則不會給他經驗值 break; if(!user) // user不存在則跳過 continue; give_user_exp(user, g_storge_exp[i]) //給每個user經驗值 client_print_color(user, print_team_blue, "^4[LEVEL] ^3因組隊額外獲得 ^4%d 經驗值 ", g_storge_exp[i]) } g_storge_exp[i] = 0 //隊友全部都分配到經驗值後,記得將變數清空,否則會無限累積 }... x0 |