未完成的ShotgunReload

  1 #include <amxmodx>
  2 #include <hamsandwich>
  3 #include <fakemeta>
  4
  5 new const g_szWpnName[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10", "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550", "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249", "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552", "weapon_ak47", "weapon_knife", "weapon_p90" }
  6
  7 const m_flNextAttack = 83
  8
  9 const m_pPlayer = 41
 10 const m_iId = 43
 11
 12 const m_flNextPrimaryAttack = 46
 13 const m_flTimeWeaponIdle = 48
 14 const m_iPrimaryAmmoType = 49
 15 const m_iClip = 51
 16 const m_fInReload = 54
 17 const m_fInSpecialReload = 55
 18
 19 new const m_rgAmmo[32] = { 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407 } // int
 20
 21 public plugin_precache()
 22 {
 23     // Register Plugin
 24     register_plugin("GameWpn", "1.1", "crsky")
 25 }
 26
 27 public plugin_init()
 28 {
 29     // ShotGun
 30     RegisterHam(Ham_Item_PostFrame, g_szWpnName[CSW_XM1014], "HamF_WpnPostFrame")
 31     RegisterHam(Ham_Item_PostFrame, g_szWpnName[CSW_M3], "HamF_WpnPostFrame")
 32     RegisterHam(Ham_Weapon_WeaponIdle, g_szWpnName[CSW_XM1014], "HamF_WpnIdle")
 33     RegisterHam(Ham_Weapon_WeaponIdle, g_szWpnName[CSW_M3], "HamF_WpnIdle")
 34 }
 35
 36 public HamF_WpnPostFrame(iWpnEnt)
 37 {
 38     new iPlayer = get_pdata_cbase(iWpnEnt, m_pPlayer)
 39
 40     new fInReload = get_pdata_int(iWpnEnt, m_fInReload)
 41     new iClip = get_pdata_int(iWpnEnt, m_iClip)
 42     new iAmmoType = get_pdata_int(iWpnEnt, m_iPrimaryAmmoType)
 43     new iBpAmmo = get_pdata_int(iPlayer, m_rgAmmo[iAmmoType])
 44
 45     new iButton = pev(iPlayer, pev_button)
 46
 47     if (iButton & IN_ATTACK && get_pdata_float(iWpnEnt, m_flNextPrimaryAttack) <= 0.0)
 48     return
 49
 50     new iTempClip = get_pdata_int(iWpnEnt, m_iId) == CSW_M3 ? 8 : 7
 51
 52     if(iButton & IN_RELOAD && !fInReload)
 53     {
 54         new iClipExtra = 15
 55
 56         if(iClip >= iClipExtra)
 57         {
 58             set_pev(iPlayer, pev_button, iButton & ~IN_RELOAD)
 59         }
 60         else if(iClip == iTempClip && iBpAmmo)
 61         {
 62             ShotgunReload(iWpnEnt, iClipExtra, iClip, iBpAmmo, iPlayer)
 63         }
 64     }
 65 }
 66
 67 public HamF_WpnIdle(iWpnEnt)
 68 {
 69     new iPlayer = get_pdata_cbase(iWpnEnt, m_pPlayer)
 70
 71     if(get_pdata_float(iWpnEnt, m_flTimeWeaponIdle) > 0.0)
 72     return
 73
 74     new iClip = get_pdata_int(iWpnEnt, m_iClip)
 75     new fInSpecReload = get_pdata_int(iWpnEnt, m_fInSpecialReload)
 76
 77     if(!iClip && !fInSpecReload) return
 78
 79     if(fInSpecReload)
 80     {
 81         new iAmmoType = get_pdata_int(iWpnEnt, m_iPrimaryAmmoType)
 82         new iBpAmmo = get_pdata_int(iPlayer, m_rgAmmo[iAmmoType])
 83
 84         new iClipExtra = 15
 85         new iTempClip = get_pdata_int(iWpnEnt, m_iId) == CSW_M3 ? 8 : 7
 86
 87         Stock_SendWpnAnim(iPlayer, 3) // insert
 88
 89         if(iClip < iClipExtra && iClip == iTempClip && iBpAmmo)
 90         {
 91             ShotgunReload(iWpnEnt, iClipExtra, iClip, iBpAmmo, iPlayer)
 92             return
 93         }
 94         if(iClip == iClipExtra && iClip != iTempClip - 1)
 95         {
 96             Stock_SendWpnAnim(iPlayer, 4) // after_reload
 97             set_pdata_int(iWpnEnt, m_fInSpecialReload, 0)
 98             set_pdata_float(iWpnEnt, m_flTimeWeaponIdle, 1.8)
 99         }
100     }
101 }
102
103 public ShotgunReload(iWpnEnt, iMaxClip, iClip, iBpAmmo, iPlayer)
104 {
105     if(iBpAmmo <= 0 || iMaxClip == iClip)
106     return
107
108     if(get_pdata_float(iWpnEnt, m_flNextPrimaryAttack) > 0.0)
109     return
110
111     switch(get_pdata_int(iWpnEnt, m_fInSpecialReload))
112     {
113         case 0:
114         {
115             Stock_SendWpnAnim(iPlayer, 5) // start_reload
116
117             set_pdata_int(iWpnEnt, m_fInSpecialReload, 1)
118             set_pdata_float(iPlayer, m_flNextAttack, 0.55)
119             set_pdata_float(iWpnEnt, m_flNextPrimaryAttack, 0.55)
120             set_pdata_float(iWpnEnt, m_flTimeWeaponIdle, 0.55)
121
122             return
123         }
124         case 1:
125         {
126             if(get_pdata_float(iWpnEnt, m_flTimeWeaponIdle) > 0.0) return
127
128             set_pdata_int(iWpnEnt, m_fInSpecialReload, 2)
129             set_pdata_float(iWpnEnt, m_flTimeWeaponIdle, 0.45)
130         }
131         default:
132         {
133             new iAmmoType = get_pdata_int(iWpnEnt, m_iPrimaryAmmoType)
134
135             set_pdata_int(iWpnEnt, m_iClip, iClip + 1)
136             set_pdata_int(iPlayer, m_rgAmmo[iAmmoType], iBpAmmo - 1)
137             set_pdata_int(iWpnEnt, m_fInSpecialReload, 1)
138         }
139     }
140 }
141
142 stock Stock_SendWpnAnim(iPlayer, iAnim)
143 {
144     set_pev(iPlayer, pev_weaponanim, iAnim)
145     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, iPlayer)
146     write_byte(iAnim)
147     write_byte(pev(iPlayer, pev_body))
148     message_end()
149 }
时间: 2024-08-24 11:43:12

未完成的ShotgunReload的相关文章

expect 实现交互(未完成)

expect介绍 expect命令是一个实现交互功能的软件套件,是基于TCL的脚本编程语言,在企业运维中,系统会以交互的形式要求运维人员输入指定的字符串,之后才能继续执行命令.例如:为用户设置密码时,一般情况下需要手工输入两次密码,比如使用ssh连接远程服务器时,第一次连和系统实现两次交互. 简单的说,expect用来自动实现与交互程序通信的,无需管理员手工干预 spawn启动指定进程>expect获取期待的关键字>send向指定进程发送字符>进程执行完毕,退出 expect  表达式 

化学方程式配平【测试中】【未完成】

化学元素周期表(Element.txt): 1    H    氢    12    He    氦    43    Li    锂    74    Be    铍    95    B    硼    116    C    碳    127    N    氮    148    O    氧    169    F    氟    1910    Ne    氖    2011    Na    钠    2312    Mg    镁    2413    Al    铝    27

《此生未完成》读后感

曾几何时,看了一遍又一遍<此生未完成>,并非因为它是一个将死之人的生命日记,也并非是想提醒自己应该珍惜当下,好好保养身体,或许是于娟的文笔有触动人心弦的地方,也或许是真心想知道活着的意义吧 书简介 <此生未完成>是于娟临时的生命日记 .于娟--女,山东济宁人,1979年4月-2011年4月.2008年,获复旦大学经济学博士学位. 于娟在2009年12月于娟确诊患乳腺癌后,写下一年多病中日记,在日记中反思生活细节,在生命的最后日子里,于娟完全放下了生死,放下了名利权情,写下了这本&l

Android Configuration介绍 (未完成)

博客很空,想赶紧填一篇东西,选的这个题目看了下中文网络中还不是很常见,但是由于我也不了解全部的configuration,需要验证思路,写起来也很慢,先发个未完成的占座. 所谓Configuration指的是Configuration.java这个类所代表的配置信息,它的位置在($ANDROID_ROOT)/frameworks/base/core/java/android/content/res/Configuration.java 本文分三部分: 一. 逐一讲解成员变量,了解功能和每一个数值

【shell】oracle安装脚本 - 未完成

自动安装oracle所需要的rpm包(需要访问外网): #! /bin/sh rpmpack=" binutils compat-libstdc++* elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libg

解决yum安装过程中断导致后续使用yum始终提示有未完成事务的问题

今天在用yum装软件的时候手贱点了ctrl+c,在后面使用yum的时候始终提示:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them. 意思是说有未完成的yum事务,建议先运行yum-complete-transaction命令清除 解决办法:安装 yum-complete-transaction,提示中已经给出了这

【未完成】《统计机器翻译》读书笔记:系列0,全书概述与个人总结

说明:本系列文章是本人在阅读统计机器翻译后所做的个人读书笔记,会按照每一章的顺序来按章详细叙述内容总结和习题解答. 系列0:全书概述与个人总结 本书是大牛Philipp Koehn的作品,他是开源项目Moses项目的领导者,具体可以去www.statmt.org/moses/查看,我也会在未来的半个月写一些有关Moses学习的博文. 本书分为三个部分:基础知识(介绍机器翻译需要语言学的基础.概率论的基础).核心方法(基于词的翻译模型.基于短语的翻译模型.解码decoding).前沿研究 在绪论部

leetcode 算法 之 马拉松算法(Manacher&#39;s algorithm)(未完成)

马拉松算法:马拉松算法是用来计算一个字符串中最长的回文字符串(对称字符串,如aba abba). 首先,我们拿到一个字符串S,然后在S中的每个字符之间加#.例如:S="abcb" T="a#b#c#b" 我们T字符串的每一个T[i]向延伸d个字符 使得 T[i-d,i+d]是一个回文字符串.你会立刻发现,d就是以T[i]为中心的最长回文字符串的长度. 我们建立一个P数组,是的P数组的长度等于T的长度,每一个P[i]的值表示对应的T[i]为中心的最大回文字符串的长度.

一个未完成创业项目的思考——创业杂记

在写这篇之前,首先要道歉. 我写这篇东西的目的,原本是为了记录创业几年来的一些历程.但在上一篇<技术型创业者容易遇到的三大问题>中,我对好友的项目多加评论,导致了读者"大灰兔"的质疑.P2P网站中的5000注册用户的确是不少,盈利问题的确也是不错,但大牛君在此地仅仅是一个小技术人员,无股权无期权,只是为了技术爱好去研究一些数据样本.这样一来,在我看还是相对比较耽误时间的.但这都是主观意识,各位读者口味不同,期待还是求同存异.不过,既然之前发生了这样的问题,在之后的文章中,我