hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2025.06.17. 11:11



Jelenlévő felhasználók

Jelenleg 329 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 327 vendég

A legtöbb felhasználó (2761 fő) 2025.01.09. 20:06-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot]az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása Hozzászólás a témához  [1 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: Fegyver lőszer modosítás
HozzászólásElküldve:2013.07.14. 09:38 
Offline
Őskövület
Avatar

Csatlakozott:2012.02.27. 09:42
Hozzászólások:2588
Megköszönt másnak: 26 alkalommal
Megköszönték neki: 418 alkalommal
Hali! Valaki kitudná nekem szedni ebből, hogy ne lehessen SE cvarral SE parancsal modosítan a lőszert. Hanem a dezinek 10 golyó legyen 1 tárba alapból!
SMA Forráskód: [ Mindet kijelol ]
  1.  
  2. /* Copyright © 2008, ConnorMcLeod
  3.  
  4. Weapons MaxClip is free software;
  5. you can redistribute it and/or modify it under the terms of the
  6. GNU General Public License as published by the Free Software Foundation.
  7.  
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12.  
  13. You should have received a copy of the GNU General Public License
  14. along with Weapons MaxClip; if not, write to the
  15. Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  16. Boston, MA 02111-1307, USA.
  17. */
  18.  
  19. #include <amxmodx>
  20. #include <amxmisc>
  21. #include <fakemeta>
  22. #include <hamsandwich>
  23.  
  24. #define VERSION "0.3.0"
  25.  
  26. enum {
  27. idle,
  28. shoot1,
  29. shoot2,
  30. insert,
  31. after_reload,
  32. start_reload,
  33. draw
  34. }
  35.  
  36. enum _:ShotGuns {
  37. m3,
  38. xm1014
  39. }
  40.  
  41. const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
  42. const SHOTGUNS_BS = ((1<<CSW_M3)|(1<<CSW_XM1014))
  43. const SILENT_BS = ((1<<CSW_USP)|(1<<CSW_M4A1))
  44.  
  45. // weapons offsets
  46. #define XTRA_OFS_WEAPON 4
  47. #define m_pPlayer 41
  48. #define m_iId 43
  49. #define m_fKnown 44
  50. #define m_flNextPrimaryAttack 46
  51. #define m_flNextSecondaryAttack 47
  52. #define m_flTimeWeaponIdle 48
  53. #define m_iPrimaryAmmoType 49
  54. #define m_iClip 51
  55. #define m_fInReload 54
  56. #define m_fInSpecialReload 55
  57. #define m_fSilent 74
  58.  
  59. // players offsets
  60. #define XTRA_OFS_PLAYER 5
  61. #define m_flNextAttack 83
  62. #define m_rgAmmo_player_Slot0 376
  63.  
  64. stock const g_iDftMaxClip[CSW_P90+1] = {
  65. -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30,
  66. 20, 25, 30, 35, 25, 12, 20, 10, 30, 100,
  67. 8 , 30, 30, 20, 2, 7, 30, 30, -1, 50}
  68.  
  69. stock const Float:g_fDelay[CSW_P90+1] = {
  70. 0.00, 2.70, 0.00, 2.00, 0.00, 0.55, 0.00, 3.15, 3.30, 0.00, 4.50,
  71. 2.70, 3.50, 3.35, 2.45, 3.30, 2.70, 2.20, 2.50, 2.63, 4.70,
  72. 0.55, 3.05, 2.12, 3.50, 0.00, 2.20, 3.00, 2.45, 0.00, 3.40
  73. }
  74.  
  75. stock const g_iReloadAnims[CSW_P90+1] = {
  76. -1, 5, -1, 3, -1, 6, -1, 1, 1, -1, 14,
  77. 4, 2, 3, 1, 1, 13, 7, 4, 1, 3,
  78. 6, 11, 1, 3, -1, 4, 1, 1, -1, 1}
  79.  
  80. new g_iMaxClip[CSW_P90+1]
  81.  
  82. new HamHook:g_iHhPostFrame[CSW_P90+1]
  83. new HamHook:g_iHhAttachToPlayer[CSW_P90+1]
  84. new HamHook:g_iHhWeapon_WeaponIdle[ShotGuns]
  85.  
  86. public plugin_init()
  87. {
  88. register_plugin("Weapons MaxClip", VERSION, "ConnorMcLeod")
  89.  
  90. register_concmd("weapon_maxclip", "ConsoleCommand_WeaponMaxClip", ADMIN_CFG, " <weapon name> <maxclip>")
  91. }
  92.  
  93. public ConsoleCommand_WeaponMaxClip(id, lvl, cid)
  94. {
  95. if( cmd_access(id, lvl, cid, 3) )
  96. {
  97. new szWeaponName[17] = "weapon_"
  98. read_argv(1, szWeaponName[7], charsmax(szWeaponName)-7)
  99. new iId = get_weaponid(szWeaponName)
  100. if( iId && ~NOCLIP_WPN_BS & 1<<iId )
  101. {
  102. new szMaxClip[4]
  103. read_argv(2, szMaxClip, charsmax(szMaxClip))
  104. new iMaxClip = str_to_num(szMaxClip)
  105. new bool:bIsShotGun = !!( SHOTGUNS_BS & (1<<iId) )
  106. if( iMaxClip && iMaxClip != g_iDftMaxClip[iId] )
  107. {
  108. g_iMaxClip[iId] = iMaxClip
  109. if( g_iHhPostFrame[iId] )
  110. {
  111. EnableHamForward( g_iHhPostFrame[iId] )
  112. }
  113. else
  114. {
  115. g_iHhPostFrame[iId] = RegisterHam(Ham_Item_PostFrame, szWeaponName, bIsShotGun ? "Shotgun_PostFrame" : "Item_PostFrame")
  116. }
  117. if( g_iHhAttachToPlayer[iId] )
  118. {
  119. EnableHamForward( g_iHhAttachToPlayer[iId] )
  120. }
  121. else
  122. {
  123. g_iHhAttachToPlayer[iId] = RegisterHam(Ham_Item_AttachToPlayer, szWeaponName, "Item_AttachToPlayer")
  124. }
  125. if( bIsShotGun )
  126. {
  127. new iShotGunType = iId == CSW_M3 ? m3 : xm1014
  128. if( g_iHhWeapon_WeaponIdle[iShotGunType] )
  129. {
  130. EnableHamForward( g_iHhWeapon_WeaponIdle[iShotGunType] )
  131. }
  132. else
  133. {
  134. g_iHhWeapon_WeaponIdle[iShotGunType] = RegisterHam(Ham_Weapon_WeaponIdle, szWeaponName, "Shotgun_WeaponIdle")
  135. }
  136. }
  137. }
  138. else
  139. {
  140. g_iMaxClip[iId] = 0
  141. if( g_iHhPostFrame[iId] )
  142. {
  143. DisableHamForward( g_iHhPostFrame[iId] )
  144. }
  145. if( g_iHhAttachToPlayer[iId] )
  146. {
  147. DisableHamForward( g_iHhAttachToPlayer[iId] )
  148. }
  149. if( bIsShotGun )
  150. {
  151. new iShotGunType = iId == CSW_M3 ? m3 : xm1014
  152. if( g_iHhWeapon_WeaponIdle[iShotGunType] )
  153. {
  154. DisableHamForward( g_iHhWeapon_WeaponIdle[iShotGunType] )
  155. }
  156. }
  157. }
  158. }
  159. }
  160. return PLUGIN_HANDLED
  161. }
  162.  
  163. public Item_AttachToPlayer(iEnt, id)
  164. {
  165. if(get_pdata_int(iEnt, m_fKnown, XTRA_OFS_WEAPON))
  166. {
  167. return
  168. }
  169.  
  170. set_pdata_int(iEnt, m_iClip, g_iMaxClip[ get_pdata_int(iEnt, m_iId, XTRA_OFS_WEAPON) ], XTRA_OFS_WEAPON)
  171. }
  172.  
  173. public Item_PostFrame(iEnt)
  174. {
  175. static iId ; iId = get_pdata_int(iEnt, m_iId, XTRA_OFS_WEAPON)
  176. static iMaxClip ; iMaxClip = g_iMaxClip[iId]
  177. static fInReload ; fInReload = get_pdata_int(iEnt, m_fInReload, XTRA_OFS_WEAPON)
  178. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, XTRA_OFS_WEAPON)
  179. static Float:flNextAttack ; flNextAttack = get_pdata_float(id, m_flNextAttack, XTRA_OFS_PLAYER)
  180.  
  181. static iAmmoType ; iAmmoType = m_rgAmmo_player_Slot0 + get_pdata_int(iEnt, m_iPrimaryAmmoType, XTRA_OFS_WEAPON)
  182. static iBpAmmo ; iBpAmmo = get_pdata_int(id, iAmmoType, XTRA_OFS_PLAYER)
  183. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, XTRA_OFS_WEAPON)
  184.  
  185. if( fInReload && flNextAttack <= 0.0 )
  186. {
  187. new j = min(iMaxClip - iClip, iBpAmmo)
  188. set_pdata_int(iEnt, m_iClip, iClip + j, XTRA_OFS_WEAPON)
  189. set_pdata_int(id, iAmmoType, iBpAmmo-j, XTRA_OFS_PLAYER)
  190.  
  191. set_pdata_int(iEnt, m_fInReload, 0, XTRA_OFS_WEAPON)
  192. fInReload = 0
  193. }
  194.  
  195. static iButton ; iButton = pev(id, pev_button)
  196. if( (iButton & IN_ATTACK2 && get_pdata_float(iEnt, m_flNextSecondaryAttack, XTRA_OFS_WEAPON) <= 0.0)
  197. || (iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, XTRA_OFS_WEAPON) <= 0.0) )
  198. {
  199. return
  200. }
  201.  
  202. if( iButton & IN_RELOAD && !fInReload )
  203. {
  204. if( iClip >= iMaxClip )
  205. {
  206. set_pev(id, pev_button, iButton & ~IN_RELOAD)
  207. if( SILENT_BS & (1<<iId) && !get_pdata_int(iEnt, m_fSilent, XTRA_OFS_WEAPON) )
  208. {
  209. SendWeaponAnim( id, iId == CSW_USP ? 8 : 7 )
  210. }
  211. else
  212. {
  213. SendWeaponAnim(id, 0)
  214. }
  215. }
  216. else if( iClip == g_iDftMaxClip[iId] )
  217. {
  218. if( iBpAmmo )
  219. {
  220. set_pdata_float(id, m_flNextAttack, g_fDelay[iId], XTRA_OFS_PLAYER)
  221.  
  222. if( SILENT_BS & (1<<iId) && get_pdata_int(iEnt, m_fSilent, XTRA_OFS_WEAPON) )
  223. {
  224. SendWeaponAnim( id, iId == CSW_USP ? 5 : 4 )
  225. }
  226. else
  227. {
  228. SendWeaponAnim(id, g_iReloadAnims[iId])
  229. }
  230. set_pdata_int(iEnt, m_fInReload, 1, XTRA_OFS_WEAPON)
  231.  
  232. set_pdata_float(iEnt, m_flTimeWeaponIdle, g_fDelay[iId] + 0.5, XTRA_OFS_WEAPON)
  233. }
  234. }
  235. }
  236. }
  237.  
  238. SendWeaponAnim(id, iAnim)
  239. {
  240. set_pev(id, pev_weaponanim, iAnim)
  241.  
  242. message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id)
  243. write_byte(iAnim)
  244. write_byte(pev(id,pev_body))
  245. message_end()
  246. }
  247.  
  248. public Shotgun_WeaponIdle( iEnt )
  249. {
  250. if( get_pdata_float(iEnt, m_flTimeWeaponIdle, XTRA_OFS_WEAPON) > 0.0 )
  251. {
  252. return
  253. }
  254.  
  255. static iId ; iId = get_pdata_int(iEnt, m_iId, XTRA_OFS_WEAPON)
  256. static iMaxClip ; iMaxClip = g_iMaxClip[iId]
  257.  
  258. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, XTRA_OFS_WEAPON)
  259. static fInSpecialReload ; fInSpecialReload = get_pdata_int(iEnt, m_fInSpecialReload, XTRA_OFS_WEAPON)
  260.  
  261. if( !iClip && !fInSpecialReload )
  262. {
  263. return
  264. }
  265.  
  266. if( fInSpecialReload )
  267. {
  268. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, XTRA_OFS_WEAPON)
  269. static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, XTRA_OFS_PLAYER)
  270. static iDftMaxClip ; iDftMaxClip = g_iDftMaxClip[iId]
  271.  
  272. if( iClip < iMaxClip && iClip == iDftMaxClip && iBpAmmo )
  273. {
  274. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  275. return
  276. }
  277. else if( iClip == iMaxClip && iClip != iDftMaxClip )
  278. {
  279. SendWeaponAnim( id, after_reload )
  280.  
  281. set_pdata_int(iEnt, m_fInSpecialReload, 0, XTRA_OFS_WEAPON)
  282. set_pdata_float(iEnt, m_flTimeWeaponIdle, 1.5, XTRA_OFS_WEAPON)
  283. }
  284. }
  285. return
  286. }
  287.  
  288. public Shotgun_PostFrame( iEnt )
  289. {
  290. static id ; id = get_pdata_cbase(iEnt, m_pPlayer, XTRA_OFS_WEAPON)
  291.  
  292. static iBpAmmo ; iBpAmmo = get_pdata_int(id, 381, XTRA_OFS_PLAYER)
  293. static iClip ; iClip = get_pdata_int(iEnt, m_iClip, XTRA_OFS_WEAPON)
  294. static iId ; iId = get_pdata_int(iEnt, m_iId, XTRA_OFS_WEAPON)
  295. static iMaxClip ; iMaxClip = g_iMaxClip[iId]
  296.  
  297. // Support for instant reload (used for example in my plugin "Reloaded Weapons On New Round")
  298. // It's possible in default cs
  299. if( get_pdata_int(iEnt, m_fInReload, XTRA_OFS_WEAPON) && get_pdata_float(id, m_flNextAttack, 5) <= 0.0 )
  300. {
  301. new j = min(iMaxClip - iClip, iBpAmmo)
  302. set_pdata_int(iEnt, m_iClip, iClip + j, XTRA_OFS_WEAPON)
  303. set_pdata_int(id, 381, iBpAmmo-j, XTRA_OFS_PLAYER)
  304.  
  305. set_pdata_int(iEnt, m_fInReload, 0, XTRA_OFS_WEAPON)
  306. return
  307. }
  308.  
  309. static iButton ; iButton = pev(id, pev_button)
  310. if( iButton & IN_ATTACK && get_pdata_float(iEnt, m_flNextPrimaryAttack, XTRA_OFS_WEAPON) <= 0.0 )
  311. {
  312. return
  313. }
  314.  
  315. if( iButton & IN_RELOAD )
  316. {
  317. if( iClip >= iMaxClip )
  318. {
  319. set_pev(id, pev_button, iButton & ~IN_RELOAD) // still this fucking animation
  320. set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.5, XTRA_OFS_WEAPON) // Tip ?
  321. }
  322.  
  323. else if( iClip == g_iDftMaxClip[iId] )
  324. {
  325. if( iBpAmmo )
  326. {
  327. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  328. }
  329. }
  330. }
  331. }
  332.  
  333. Shotgun_Reload(iEnt, iId, iMaxClip, iClip, iBpAmmo, id)
  334. {
  335. if(iBpAmmo <= 0 || iClip == iMaxClip)
  336. return
  337.  
  338. if(get_pdata_int(iEnt, m_flNextPrimaryAttack, XTRA_OFS_WEAPON) > 0.0)
  339. return
  340.  
  341. switch( get_pdata_int(iEnt, m_fInSpecialReload, XTRA_OFS_WEAPON) )
  342. {
  343. case 0:
  344. {
  345. SendWeaponAnim( id , start_reload )
  346. set_pdata_int(iEnt, m_fInSpecialReload, 1, XTRA_OFS_WEAPON)
  347. set_pdata_float(id, m_flNextAttack, 0.55, 5)
  348. set_pdata_float(iEnt, m_flTimeWeaponIdle, 0.55, XTRA_OFS_WEAPON)
  349. set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.55, XTRA_OFS_WEAPON)
  350. set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.55, XTRA_OFS_WEAPON)
  351. return
  352. }
  353. case 1:
  354. {
  355. if( get_pdata_float(iEnt, m_flTimeWeaponIdle, XTRA_OFS_WEAPON) > 0.0 )
  356. {
  357. return
  358. }
  359. set_pdata_int(iEnt, m_fInSpecialReload, 2, XTRA_OFS_WEAPON)
  360. emit_sound(id, CHAN_ITEM, random_num(0,1) ? "weapons/reload1.wav" : "weapons/reload3.wav", 1.0, ATTN_NORM, 0, 85 + random_num(0,0x1f))
  361. SendWeaponAnim( id, insert )
  362.  
  363. set_pdata_float(iEnt, m_flTimeWeaponIdle, iId == CSW_XM1014 ? 0.30 : 0.45, XTRA_OFS_WEAPON)
  364. }
  365. default:
  366. {
  367. set_pdata_int(iEnt, m_iClip, iClip + 1, XTRA_OFS_WEAPON)
  368. set_pdata_int(id, 381, iBpAmmo-1, XTRA_OFS_PLAYER)
  369. set_pdata_int(iEnt, m_fInSpecialReload, 1, XTRA_OFS_WEAPON)
  370. }
  371. }
  372. }
  373.  

_________________
Kép


Hozzászólás jelentése
Vissza a tetejére
   
Hozzászólások megjelenítése: Rendezés 
Új téma nyitása Hozzászólás a témához  [1 hozzászólás ] 


Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 3 vendég


Nyithatsz új témákat ebben a fórumban.
Válaszolhatsz egy témára ebben a fórumban.
Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
Nem törölheted a hozzászólásaidat ebben a fórumban.
Nem küldhetsz csatolmányokat ebben a fórumban.

Keresés:
Ugrás:  
Powered by phpBB® Forum Software © phpBB Limited
Magyar fordítás © Magyar phpBB Közösség
Portal: Kiss Portal Extension © Michael O'Toole