引用 | 编辑
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 |