基礎SMA教學 PART-4 如何運用代數

Home Home
<< 1 2 >>
跳頁: (共 2 頁)
引用 | 編輯 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
引用 | 編輯 Nailaz
2013-02-14 19:33
1樓
  
下面分隔線悲劇了 哈哈

獻花 x0
引用 | 編輯 Marchillus
2013-02-14 19:46
2樓
  
下面是引用 鄭柏昇 於 2013-02-14 19:33 發表的 : 到引言文
下面分隔線悲劇了 哈哈
額 咱確實悲劇了   不知為什跑到下面

獻花 x0
引用 | 編輯 烈Gama英仙座
2013-02-15 07:16
3樓
  
謝謝敖狼大大

一直用訊息也都看不出到底重點是啥!

有教學了

就看的清楚了!

沒有頭香(對不起啦~)

獻花 x0
引用 | 編輯 Marchillus
2013-02-15 10:24
4樓
  
下面是引用 烈Gama英仙座 於 2013-02-15 07:16 發表的 : 到引言文
謝謝敖狼大大

一直用訊息也都看不出到底重點是啥!

有教學了

就看的清楚了!

沒有頭香(對不起啦~)
呢 也謝謝gama一直在支持咱的教學~(該出第5集了嗎?

獻花 x1
引用 | 編輯 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 發表的 : 到引言文
我不得不說
樓主的每篇教學都很簡單實用
對新手都很有幫助


你這個看起來是 全場只有1個人能拿m4a1
.......



但我聽說.....
複製程式
其中math[0]不當作任何一個玩家
玩家好像由math[1-32]
所以用for時由1開始


獻花 x1
引用 | 編輯 Marchillus
2013-02-17 14:47
7樓
  
下面是引用 絕影華 於 2013-02-16 13:12 發表的 : 到引言文




但我聽說.....
複製程式
其中math[0]不當作任何一個玩家
玩家好像由math[1-32]
所以用for時由1開始
是的 謝謝提醒 忘記用迴圈=.=

獻花 x0
引用 | 編輯 kitty3d07
2013-02-17 18:26
8樓
  
哇...很混亂...

獻花 x0
引用 | 編輯 烈Gama英仙座
2013-02-18 20:34
9樓
  
下面是引用 ChaosX 於 2013-02-16 10:35 發表的: 到引言文
我不得不說
樓主的每篇教學都很簡單實用
對新手都很有幫助


你這個看起來是 全場只有1個人能拿m4a1
.......



我收到了


給樓主~~


這個還有一個小小小小的問題


沒有丟槍指令


要是本來就有主武器(例如MP5等等)用了會發現


變成雙主武


自己加上去了


順便請大大在教學內容加上去

獻花 x0
引用 | 編輯 八云の橙貓
2013-02-19 01:13
10樓
  
下面是引用 烈Gama英仙座 於 2013-02-18 20:34 發表的 : 到引言文




我收到了


給樓主~~


這個還有一個小小小小的問題


沒有丟槍指令


要是本來就有主武器(例如MP5等等)用了會發現


變成雙主武


自己加上去了


順便請大大在教學內容加上去



這個是外國人寫的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
引用 | 編輯 觀眾甲
2013-02-21 22:46
11樓
  
下面是引用 八云の橙貓 於 2013-02-19 01:13 發表的 : 到引言文


這個是外國人寫的stock 樓主或其他有需要的人可以參考看看

判別是否持有武器:
.......

未定義PRIMARY_WEAPONS_BIT_SUM

SECONDARY_WEAPONS_BIT_SUM

獻花 x0
引用 | 編輯 ChaosX
2013-02-21 22:55
12樓
  
下面是引用 觀眾甲 於 2013-02-21 22:46 發表的 : 到引言文


未定義PRIMARY_WEAPONS_BIT_SUM

SECONDARY_WEAPONS_BIT_SUM
要定義去看ZP主插件就有了

獻花 x1
引用 | 編輯 Marchillus
2013-02-23 21:34
13樓
  
下面是引用 八云の橙貓 於 2013-02-19 01:13 發表的 : 到引言文


這個是外國人寫的stock 樓主或其他有需要的人可以參考看看

判別是否持有武器:
.......
AMXX總是要繞個一大圈呢....

獻花 x0
引用 | 編輯 q949480075q
2013-03-03 12:53
14樓
  
傲狼大大  

我有几个问题

如下

register_logevent = ??   不明白

("roundstart",2, "1=Round_Start")
丨丨       ||       丨丨
function     ??       ??
  懂了      

既定数值是什么意思 ?? 望赐教

獻花 x0
引用 | 編輯 Marchillus
2013-03-03 14:49
15樓
  
下面是引用 q949480075q 於 2013-03-03 12:53 發表的 Re:by 傲狼,|基础SMA教学 PART-4 如何运用代数: 到引言文
傲狼大大  

我有几个问题

如下

register_logevent = ??   不明白

("roundstart",2, "1=Round_Start")
丨丨         ||         丨丨
function     ??       ??
  懂了      

既定数值是什么意思 ?? 望赐教
可以去第8集教學找喲  裡面有event跟logevent^^

獻花 x0
引用 | 編輯 Icery
2013-03-03 21:19
16樓
  
++的方法 VB2010好像也是這樣

VB6.0就不行這樣寫>"<

獻花 x0
引用 | 編輯 vincent1808
2013-04-06 11:00
17樓
  
我看不明白logevent是解什麼呢..
表情

獻花 x0
引用 | 編輯 Marchillus
2013-06-13 19:47
18樓
  
下面是引用 vincent1808 於 2013-04-06 11:00 發表的 : 到引言文
我看不明白logevent是解什麼呢..
表情
可以參考第8集的amxmodx

獻花 x0
引用 | 編輯 ak47klo
2013-06-14 14:24
19樓
  
真的是簡顯易懂好學習...
但是也太易懂了...
有些難一點的都沒講到...
看了5樓之後我懂更多了

獻花 x0
引用 | 編輯 Crazygay
2013-06-14 19:52
20樓
  
學了很多
表情

獻花 x0
引用 | 編輯 Crazygay
2013-06-14 19:52
21樓
  
真的不錯呀! 表情

獻花 x0
引用 | 編輯 j12412211202
2014-05-11 10:18
22樓
  
因為大大的教學。令我學會了如何製作sma

獻花 x0
引用 | 編輯 IWTLATDSBS
2014-08-15 12:49
23樓
  
威望 表情 表情 表情 表情 表情 表情

獻花 x0
引用 | 編輯 Lf2net618
2014-08-25 10:46
24樓
  
基礎!!!這個讓我學了超多QQ謝謝你 表情

獻花 x0
引用 | 編輯 Lf2net618
2014-10-07 21:21
25樓
  
如果學會就好了... 慢慢學不知道會不會比較好QQ

獻花 x0
引用 | 編輯 bswserver
2014-10-28 18:17
26樓
  
這對插件知識更進一步的認識~

獻花 x0
引用 | 編輯 fafses
2014-10-29 19:47
27樓
  
我明白了,謝謝你

獻花 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
<< 1 2 >>
跳頁: (共 2 頁)