Advertisement
mihay111

barlogblue5

Jul 28th, 2019
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.79 KB | None | 0 0
  1. //=========================================================================
  2. #define CSW_WEAPON CSW_AUG
  3. new const g_weapon_entity[]= "weapon_aug"
  4. new const g_weaponbox_model[]= "models/w_aug.mdl"
  5.  
  6. #define WEAPON_NAME "Balrog-5 Blue"
  7. #define WEAPON_COST 85
  8. #define SLOT 1
  9.  
  10. #define DAMAGE 2.5
  11. #define RATE_OF_FIRE 0.095
  12. #define CLIP 85
  13. #define AMMO 90
  14. #define TIME_RELOAD 2.1
  15. #define ANIM_IDLE 0
  16. #define ANIM_SHOOT_1 random_num(1,2)
  17. #define ANIM_RELOAD 3
  18. #define ANIM_DRAW 4
  19.  
  20. #define BODY_NUMBER 0
  21. new const MODELS[][]={
  22. "models/BZ_gun/v_bluebalrog5.mdl",
  23. "models/BZ_gun/p_bluebalrog5.mdl",
  24. "models/BZ_gun/w_bluebalrog5.mdl"
  25. }
  26. new const SOUNDS[][]= {
  27. "weapons/bluebalrog5-1.wav",
  28. "weapons/balrog5_clipin1.wav",
  29. "weapons/balrog5_clipin2.wav",
  30. "weapons/balrog5_clipout1.wav"
  31. }
  32. #define WEAPONLIST "bz_bluebalrog51"
  33. new const SPRITES[][]= {
  34. "sprites/bz_sprite/640hud2.spr",
  35. "sprites/bz_sprite/640hud78.spr"
  36. }
  37. //=========================================================================
  38. #include <amxmodx>
  39. #include <engine>
  40. #include <xs>
  41. #include <fakemeta>
  42. #include <fakemeta_util>
  43. #include <hamsandwich>
  44. #include <zombieplague>
  45.  
  46. new g_msgWeaponList,g_wpn_variables[10],g_iszWeaponKey,g_index_smoke,g_index_shell, g_itemid
  47. #define is_valid_weapon(%1) (pev_valid(%1)&&pev(%1, pev_impulse) == g_iszWeaponKey)
  48. public plugin_precache() {
  49. for(new i;i<=charsmax(MODELS);i++)precache_model(MODELS[i])
  50. for(new i;i<=charsmax(SOUNDS);i++)precache_sound(SOUNDS[i])
  51. for(new i;i<=charsmax(SPRITES);i++) precache_generic(SPRITES[i])
  52. new tmp[32];formatex(tmp,charsmax(tmp),"sprites/%s.txt",WEAPONLIST)
  53. precache_generic(tmp)
  54. for(new i;i<=charsmax(SPRITES);i++)precache_generic(SPRITES[i])
  55. g_index_smoke=precache_model("sprites/balrog5stack.spr")
  56. g_index_shell=precache_model("models/pshell.mdl")
  57. g_iszWeaponKey = engfunc(EngFunc_AllocString, WEAPON_NAME)
  58. register_clcmd(WEAPONLIST, "clcmd_weapon")
  59. register_message(78, "message_weaponlist")
  60. }
  61. public plugin_init() {
  62. register_forward(FM_SetModel, "fm_setmodel")
  63. register_forward(FM_UpdateClientData, "fm_updateclientdata_post", 1)
  64. register_forward(FM_PlaybackEvent, "fm_playbackevent")
  65. RegisterHam(Ham_Item_Deploy, g_weapon_entity, "ham_item_deploy_post",1)
  66. RegisterHam(Ham_Weapon_PrimaryAttack, g_weapon_entity, "ham_weapon_primaryattack")
  67. RegisterHam(Ham_Weapon_Reload, g_weapon_entity, "ham_weapon_reload")
  68. RegisterHam(Ham_Weapon_WeaponIdle, g_weapon_entity, "ham_weapon_idle")
  69. RegisterHam(Ham_Item_PostFrame, g_weapon_entity, "ham_item_postframe")
  70. RegisterHam(Ham_Item_AddToPlayer, g_weapon_entity, "ham_item_addtoplayer")
  71. RegisterHam(Ham_TraceAttack, "player", "ham_traceattack_post",1)
  72. RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack_post",1)
  73. RegisterHam(Ham_TraceAttack, "func_breakable", "ham_traceattack_post",1)
  74. g_msgWeaponList=get_user_msgid("WeaponList")
  75. g_iszWeaponKey=engfunc(EngFunc_AllocString, WEAPON_NAME)
  76. g_itemid=zp_register_extra_item(WEAPON_NAME,WEAPON_COST, ZP_TEAM_HUMAN)
  77. }
  78. public plugin_natives() register_native("give_balrog5","native_give_weapon", 1)
  79. public clcmd_weapon(id){
  80. engclient_cmd(id, g_weapon_entity)
  81. return PLUGIN_HANDLED
  82. }
  83. public message_weaponlist(msg_id,msg_dest,id)if(get_msg_arg_int(8)==CSW_WEAPON)for(new i=2;i<=9;i++)g_wpn_variables[i]=get_msg_arg_int(i)
  84. public fm_setmodel(model_entity,model[]){
  85. if(!pev_valid(model_entity)||!equal(model,g_weaponbox_model))return FMRES_IGNORED
  86. static weap;weap=fm_find_ent_by_owner(-1,g_weapon_entity,model_entity)
  87. if(!is_valid_weapon(weap))return FMRES_IGNORED
  88. fm_entity_set_model(model_entity,MODELS[2])
  89. set_pev(model_entity,pev_body,BODY_NUMBER)
  90. return FMRES_SUPERCEDE
  91. }
  92. public fm_updateclientdata_post(id,SendWeapons,CD_Handle){
  93. if(!is_user_alive(id))return
  94. static weapon_ent; weapon_ent=get_pdata_cbase(id,373,5)
  95. if(is_valid_weapon(weapon_ent))set_cd(CD_Handle, CD_flNextAttack, get_gametime()+0.001)
  96. }
  97. public fm_playbackevent(flags,id){
  98. if(!is_user_alive(id))return FMRES_IGNORED
  99. static weapon_ent;weapon_ent=get_pdata_cbase(id, 373, 5)
  100. if(!is_valid_weapon(weapon_ent))return FMRES_IGNORED
  101. return FMRES_SUPERCEDE
  102. }
  103. public ham_item_deploy_post(weapon_ent){
  104. if(!is_valid_weapon(weapon_ent))return
  105. static id;id=get_pdata_cbase(weapon_ent,41,4)
  106. set_pev(id, pev_viewmodel2, MODELS[0]),set_pev(id, pev_weaponmodel2, MODELS[1])
  107. play_weapon_animation(id, ANIM_DRAW)
  108. set_pdata_float(id, 83, 0.5, 5),set_pdata_float(weapon_ent, 48, 1.4, 4)
  109. }
  110. public ham_weapon_primaryattack(weapon_entity) {
  111. if(!is_valid_weapon(weapon_entity))return HAM_IGNORED
  112. if(get_pdata_float(weapon_entity,46,4)>0.0||!get_pdata_int(weapon_entity,51,4))return HAM_IGNORED
  113. static id; id = get_pdata_cbase(weapon_entity, 41, 4)
  114. static clip;clip=get_pdata_int(weapon_entity,51,4)
  115. ExecuteHam(Ham_Weapon_PrimaryAttack, weapon_entity)
  116. if(clip<=get_pdata_int(weapon_entity,51,4))return HAM_IGNORED
  117. emit_sound(id, CHAN_WEAPON, SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  118. play_weapon_animation(id, ANIM_SHOOT_1)
  119. set_pdata_float(weapon_entity,46,RATE_OF_FIRE,4)
  120. set_pdata_float(weapon_entity, 48, RATE_OF_FIRE+0.5, 4)
  121. set_pdata_int(weapon_entity,57,g_index_shell,4)
  122. set_pdata_float(id,111,get_gametime())
  123. return HAM_SUPERCEDE
  124. }
  125. public ham_weapon_reload(weapon_entity) {
  126. if(!is_valid_weapon(weapon_entity))return HAM_IGNORED
  127. static id; id = get_pdata_cbase(weapon_entity,41,4)
  128. static bpammo;bpammo=get_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),5)
  129. static clip;clip=get_pdata_int(weapon_entity,51,4)
  130. if(!bpammo||clip==CLIP)return HAM_SUPERCEDE
  131. ExecuteHam(Ham_Weapon_Reload,weapon_entity)
  132. play_weapon_animation(id,ANIM_RELOAD)
  133. set_pdata_int(id,363,90,5)
  134. set_pdata_float(id,83,TIME_RELOAD,5)
  135. set_pdata_float(weapon_entity, 48, TIME_RELOAD+1.0, 4)
  136. set_pdata_int(weapon_entity,54,1,4)
  137. return HAM_SUPERCEDE
  138. }
  139. public ham_weapon_idle(ent) {
  140. if(!is_valid_weapon(ent))return HAM_IGNORED
  141. static id; id = get_pdata_cbase(ent, 41, 4)
  142. if(get_pdata_float(ent, 48, 4)>0.0)return HAM_IGNORED
  143. play_weapon_animation(id, ANIM_IDLE)
  144. set_pdata_float(ent, 48, 5.0, 4)
  145. return HAM_SUPERCEDE
  146. }
  147. public ham_item_postframe(weapon_entity) {
  148. if(!is_valid_weapon(weapon_entity)) return
  149. static id; id = get_pdata_cbase(weapon_entity,41,4)
  150. if(get_pdata_int(weapon_entity, 54, 4)&&get_pdata_float(id, 83, 5)<=0.0){
  151. static bpammo;bpammo=get_pdata_int(id, 376 + get_pdata_int(weapon_entity, 49, 4), 5)
  152. static clip;clip=get_pdata_int(weapon_entity, 51, 4)
  153. for(new i=clip; i<CLIP;i++)if(bpammo)bpammo--,clip++
  154. set_pdata_int(weapon_entity,54,0,4)
  155. set_pdata_int(weapon_entity,51,clip,4)
  156. set_pdata_int(id,376+get_pdata_int(weapon_entity,49,4),bpammo,5)
  157. }
  158. }
  159. public ham_item_addtoplayer(weapon_entity,id)if(is_valid_weapon(weapon_entity))set_weaponlist(id,1)
  160. public ham_traceattack_post(pEntity,attacker,Float:flDamage,Float:direction[3],pentru,damage_type) {
  161. if(!is_user_connected(attacker)||!(damage_type&DMG_BULLET))return
  162. static weapon_entity;weapon_entity=get_pdata_cbase(attacker, 373, 5)
  163. if(!is_valid_weapon(weapon_entity))return
  164. new Float:vecEnd[3],Float:vecPlane[3]
  165. get_tr2(pentru,TR_vecEndPos,vecEnd)
  166. get_tr2(pentru,TR_vecPlaneNormal,vecPlane)
  167. xs_vec_mul_scalar(vecPlane,5.0,vecPlane)
  168. new Float:Origin[3]
  169. get_weapon_position(attacker, Origin, .add_forward=10.0, .add_right=3.0, .add_up=-2.5)
  170.  
  171. new Float:Velo[3]
  172. Velo[0]=vecEnd[0]-Origin[0]
  173. Velo[1]=vecEnd[1]-Origin[1]
  174. Velo[2]=vecEnd[2]-Origin[2]
  175.  
  176.  
  177. xs_vec_normalize(Velo, Velo)
  178. xs_vec_mul_scalar(Velo, 4096.0, Velo)
  179.  
  180. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  181. write_byte(TE_USERTRACER)
  182. engfunc(EngFunc_WriteCoord,Origin[0])
  183. engfunc(EngFunc_WriteCoord,Origin[1])
  184. engfunc(EngFunc_WriteCoord,Origin[2])
  185. engfunc(EngFunc_WriteCoord,Velo[0])
  186. engfunc(EngFunc_WriteCoord,Velo[1])
  187. engfunc(EngFunc_WriteCoord,Velo[2])
  188. write_byte(20)
  189. write_byte(7)
  190. write_byte(3)
  191. message_end()
  192. if(!is_user_alive(pEntity)){
  193. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  194. write_byte(TE_GUNSHOTDECAL)
  195. engfunc(EngFunc_WriteCoord,vecEnd[0])
  196. engfunc(EngFunc_WriteCoord,vecEnd[1])
  197. engfunc(EngFunc_WriteCoord,vecEnd[2])
  198. write_short(pEntity)
  199. write_byte(random_num(41,45))
  200. message_end()
  201. xs_vec_add(vecEnd,vecPlane,vecEnd)
  202. }
  203. message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
  204. write_byte(TE_EXPLOSION)
  205. engfunc(EngFunc_WriteCoord,vecEnd[0])
  206. engfunc(EngFunc_WriteCoord,vecEnd[1])
  207. engfunc(EngFunc_WriteCoord,vecEnd[2]-10.0)
  208. write_short(g_index_smoke)
  209. write_byte(random_num(1,4))
  210. write_byte(20)
  211. write_byte(TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOPARTICLES)
  212. message_end()
  213. }
  214. public native_give_weapon(id,itemid) {
  215. new Ent=give_weapon(id)
  216. set_pdata_int(id,376+get_pdata_int(Ent,49,4),AMMO,5)
  217. }
  218. public zp_extra_item_selected(id,itemid) {
  219. if(itemid!=g_itemid)return
  220. new Ent=give_weapon(id)
  221. set_pdata_int(id,376+get_pdata_int(Ent,49,4),AMMO,5)
  222. }
  223. public give_weapon(id){
  224. new Float:Origin[3]; pev(id, pev_origin, Origin)
  225. new wName[32],iItem=get_pdata_cbase(id, 367 + SLOT, 5);
  226. while (pev_valid(iItem)==2)pev(iItem,pev_classname,wName,31),engclient_cmd(id,"drop",wName),iItem=get_pdata_cbase(id, 367 + SLOT, 5);
  227. new iWeapon=engfunc(EngFunc_CreateNamedEntity,engfunc(EngFunc_AllocString,g_weapon_entity))
  228. if(!pev_valid(iWeapon)) return 0
  229. dllfunc(DLLFunc_Spawn, iWeapon)
  230. engfunc(EngFunc_SetOrigin, iWeapon, Origin)
  231. set_pev(iWeapon, pev_impulse, g_iszWeaponKey)
  232. set_pdata_int(iWeapon, 51, CLIP, 4)
  233. new save = pev(iWeapon,pev_solid)
  234. dllfunc(DLLFunc_Touch,iWeapon,id)
  235. if(pev(iWeapon, pev_solid)!=save)return iWeapon
  236. engfunc(EngFunc_RemoveEntity,iWeapon)
  237. return 0
  238. }
  239. stock play_weapon_animation(id,sequence)set_pev(id, pev_weaponanim, sequence),message_begin(MSG_ONE,SVC_WEAPONANIM,_,id),write_byte(sequence),write_byte(0),message_end()
  240. stock set_weaponlist(id,num=0){
  241. message_begin(MSG_ONE,g_msgWeaponList,_,id)
  242. write_string(num?WEAPONLIST:g_weapon_entity)
  243. for(new i=2;i<=9;i++)write_byte(g_wpn_variables[i])
  244. message_end()
  245. }
  246. stock get_weapon_position(id, Float:fOrigin[3], Float:add_forward=0.0, Float:add_right=0.0, Float:add_up=0.0)
  247. {
  248. static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
  249. static Float:Forward[3], Float:Right[3], Float:Up[3]
  250.  
  251. pev(id, pev_v_angle, vAngles)
  252. pev(id, pev_origin, fOrigin)
  253. pev(id, pev_view_ofs, ViewOfs)
  254. xs_vec_add(fOrigin, ViewOfs, fOrigin)
  255.  
  256. pev(id, pev_v_angle, Angles)
  257.  
  258. engfunc(EngFunc_MakeVectors, Angles)
  259.  
  260. global_get(glb_v_forward, Forward)
  261. global_get(glb_v_right, Right)
  262. global_get(glb_v_up, Up)
  263.  
  264. xs_vec_mul_scalar(Forward, add_forward, Forward)
  265. xs_vec_mul_scalar(Right, add_right, Right)
  266. xs_vec_mul_scalar(Up, add_up, Up)
  267.  
  268. fOrigin[0]=fOrigin[0]+Forward[0]+Right[0]+Up[0]
  269. fOrigin[1]=fOrigin[1]+Forward[1]+Right[1]+Up[1]
  270. fOrigin[2]=fOrigin[2]+Forward[2]+Right[2]+Up[2]
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement