基础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 页)