引用 | 編輯
Marchillus
2013-02-14 19:29 |
樓主
▼ |
||
x1
警告:這邊的變數不是運用於個人的 詳見第9集大家好~嫯狼又發了教學第4集~ 這次要教大家 如何運用代數! 代數其實可以在任何地方靈活運用 例如 當你煩惱BOSS模式如何讓Ts無武器 卻又不想讓ts一直丟武器的時候可以用 (怎麼好像在說Gama英仙呢) ^ 跳過 回歸正題囉 咱先教大家如何新增代數 new math <-----new意思是新的 在這也就是新增 而math則是我們要新增的代數名 在這之前 咱先回答新手的一些問題 Q:新增代數加在哪? A:如果要讓整個插件都可以直接用這個代數 就要在include完後加 如果是要讓一個public裡用 那就加在public裡啦 例如: 第一種方式 #include <amxmodx> #include <amxmisc> #include <fun> new math 第二種方式 public xxx(id) { new math ........................... <------------以下省略 } Q:通常代數用在哪? A:依咱一生的知識 咱能告訴你可以用在任何地方 Q:代數可以加在最下面嗎 A:你可以試試看 咱現在舉個例子給大家 #include <amxmodx> #include <fun> new math public plugin_init() { register_plugin("代數運用", "0.1", "Uw-Wolf") register_clcmd("say /giveme", "giveme") register_logevent("roundstart",2, "1=Round_Start") <----第一項是自訂的 之後還要再public 第2項則是既定數值 第3項也是既定的 這行的意思是開局時執行 } public giveme(id) { if(math == 1) { client_print(id, print_chat, "[AMXX]有人拿過m4了!") } else { give_item(id, "weapon_m4a1") math ++ <-----++意指+1 也就是可以寫成+1 strip_user_weapons(id) \\丟掉所有武器.... 也可以寫math = 1 (汝如果是要1的話 } } public roundstart() <----()是因為全數的人都要 (0)也可以 { math = 0 <-----其實代數math一開始是個不確定值 所以必須有這個動作 開局設為0 } 咱再給汝完整sma 汝們學會了嗎?(你怎麼每次都用這招 #include <amxmodx> #include <fun> new math public plugin_init() { register_plugin("代數運用", "0.1", "Uw-Wolf") register_clcmd("say /giveme", "giveme") register_logevent("roundstart",2, "1=Round_Start") } public giveme(id) { if(math == 1) { client_print(id, print_chat, "[AMXX]你拿過m4了!") } else { give_item(id, "weapon_m4a1") math ++ } } public roundstart() { math = 0 } --------------------------------------------------------分隔線---------------------------------------------------- 這個插件功能在於 說/giveme可以獲得m4a1 但是一局"只有"一人只能拿一把 (等咱弄懂在教吧....) 教學end by 嫯P.V.W狼 x0
|
引用 | 編輯
Marchillus
2013-02-14 19:46 |
2樓
▲ ▼ |
引用 | 編輯
Marchillus
2013-02-15 10:24 |
4樓
▲ ▼ |
引用 | 編輯
ChaosX
2013-02-16 10:35 |
5樓
▲ ▼ |
我不得不說
樓主的每篇教學都很簡單實用 對新手都很有幫助 你這個看起來是 全場只有1個人能拿m4a1 如果是要限制1人拿一次的話 最好改成 new math[33](全場最多32玩家) 下面的math 改成 math[id](每個玩家都有獨自的編號) 最後的restart 就不能寫 math == 0 這麼簡單了 因為你沒有給與特定的編號 而且每次玩的玩家編號都會不一樣 所以要用for迴圈 把全場所有的math都歸0 for(i = 1 ; i <= 32 ; i++) { math[ i ] == 0 } 0w0這也許是分隔線>w< 像你這樣 math ++ <-----++意指+1 也就是可以寫成+1 這個方法可以用在很多數字計算上(例如計算玩家血量或是錢數) 也可以用在很多的狀況分類上 (例如 math 紀錄了 狀況1 或 2 或 3 等不同數字會出下面不同狀況 狀況1 傷害輸出增加⑨⑨⑨倍 狀況2 隱形 狀況3 自爆) 但是 如果你的狀況只有很單純的 對或錯 2種的話 (像你舉例的有拿過或沒拿過) 你可以改用true(真) 和 false(假) 做判斷 之前的 new math 就要改成 new bool: math 這時後能紀錄的參數就只有true 和 false 兩種 這時後判斷式內就寫即可 if(math) <----(math是否為ture的意思) 正常情況預設都是 false 所以if(math) 不成立 就能執行else部分 原本的math++ 就可以改成 math = ture (和數字運算不同 只要1個 = 就好了) 這樣if(math) 就會成立了 當然restarts那邊就要改成 math = false (歸0) 另外 因為是永久的狀態紀錄 所以每回合要重算的話就一定要做 math = false 不然會一直都是ture >w<這好像是分隔線0w0 基本上我覺得樓主應看得懂 所以是寫給樓主看的 有心想學的看不懂我在說啥 請見諒 其他來灌水打醬油的笨蛋們就不用看了 沒提到的其他高人神手大大等等 如果看到哪裡有錯請糾正 才不會說我在這邊亂教 誤人子弟 >w< 這可能是分隔線>w< 以下是給3樓那個搶不到頭香的訊息(其他人就不用看了) 這太神奇了沒想到你也有搶不到頭香的一天 反正你媽媽知道你在這邊搶頭香她會很傷心 所以我以朋友身分建議你可以來搶頭七看看 因為我發現這裡的頭七比頭香還要難搶到手 搶到頭香沒甚麼厲害的反而搶到頭七才厲害 以上是給3樓那個搶不到頭香的訊息(其他人就不用看了) x1 |
引用 | 編輯
絕影華
2013-02-16 13:12 |
6樓
▲ ▼ |
下面是引用 ChaosX 於 2013-02-16 10:35 發表的 : 但我聽說..... 複製程式 其中math[0]不當作任何一個玩家 玩家好像由math[1-32] 所以用for時由1開始 x1 |
引用 | 編輯
Marchillus
2013-02-17 14:47 |
7樓
▲ ▼ |
下面是引用 絕影華 於 2013-02-16 13:12 發表的 :是的 謝謝提醒 忘記用迴圈=.= x0 |
引用 | 編輯
八云の橙貓
2013-02-19 01:13 |
10樓
▲ ▼ |
下面是引用 烈Gama英仙座 於 2013-02-18 20:34 發表的 : 這個是外國人寫的stock 樓主或其他有需要的人可以參考看看 判別是否持有武器: 複製程式 stock bool:has_weapon(id, haswhat) { static weapons[32], num, i, weaponid num = 0 if (!id) return false; get_user_weapons(id, weapons, num) for (i = 0;i < num;i++) { weaponid = weapons[i] if ((haswhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (haswhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) return true; } return false; } 複製程式 stock drop_weapons(id, dropwhat) { static weapons[32], num, i, weaponid num = 0 if (!id) return; get_user_weapons(id, weapons, num) for (i = 0; i < num; i++) { weaponid = weapons[i] if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) { static wname[32] get_weaponname(weaponid, wname, charsmax(wname)) engclient_cmd(id, "drop", wname) } } } 使用方法: 複製程式 if(has_weapon(id, 1) //持有主武器時 drop_weapons(id, 1) //丟棄主武器 如果是單純的直接give_item 可以這樣寫 複製程式 drop_weapons(id, 1) // 1=主槍 2=手槍 give_item(id, "weaopn_") 貼上來之後排版好像會怪怪的 還麻煩自行排版 以上 有誤請通知 ***2013/2/21*** (感謝ChaosX與上帝 指正 詳細請觀看回覆) 請在最前面增加常數 再進行stock 否則編譯會Error ZP定義的東西忘記貼上了7.7 複製程式 const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) x1 |
引用 | 編輯
Marchillus
2013-02-23 21:34 |
13樓
▲ ▼ |
引用 | 編輯
q949480075q
2013-03-03 12:53 |
14樓
▲ ▼ |
傲狼大大
我有几个问题 如下 register_logevent = ?? 不明白 ("roundstart",2, "1=Round_Start") 丨丨 || 丨丨 function ?? ?? 懂了 既定数值是什么意思 ?? 望赐教 x0 |
引用 | 編輯
Marchillus
2013-03-03 14:49 |
15樓
▲ ▼ |
引用 | 編輯
vincent1808
2013-04-06 11:00 |
17樓
▲ ▼ |
我看不明白logevent是解什麼呢..
x0 |
引用 | 編輯
Marchillus
2013-06-13 19:47 |
18樓
▲ ▼ |
引用 | 編輯
j12412211202
2014-05-11 10:18 |
22樓
▲ ▼ |
因為大大的教學。令我學會了如何製作sma
x0 |
引用 | 編輯
IWTLATDSBS
2014-08-15 12:49 |
23樓
▲ ▼ |
威望
x0 |
引用 | 編輯
snake8723
2015-07-22 15:36 |
28樓
▲ ▼ |
這個插件功能在於 說/giveme可以獲得m4a1 但是一局"只有"一人只能拿一把
(等咱弄懂在教吧....)是只說一場裡面只有一個人能拿一把M4? x0 |
引用 | 編輯
lilaihung8
2015-08-06 18:38 |
29樓
▲ |
我就是不明白這句
register_logevent("roundstart",2, "1=Round_Start") 甚麼第一 二 三項 roundstart是 2是 round_start 是 其他都明白-,- x0 |