Advertisement
MasamuneDate

Glock 18 - New

May 27th, 2018
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 24.20 KB | None | 0 0
  1. // Counter Strike 1.6 AMXX Weapon Glock 18 Custom
  2. // System :
  3. // There Are 2 diferrent system : 1. Shoot Mode, 2. Evolution
  4. /* 1. Shoot Mode
  5. Right Click to change shoot mode type
  6. there are 3 type
  7. 1. Normal
  8. 2. Auto
  9. 3. Burst
  10. */
  11.  
  12. /* 2. Evolution
  13. if you can give damage to enemy with 80 times, this weapon can evolution to
  14. powerful weapons and strong damage
  15. */
  16.  
  17. /* Credits :
  18.  
  19. 1. Romeo (Creator Model Weapons)
  20. gamebanana profiles : https://gamebanana.com/members/1304740
  21. 2. Mellowzy (Added some System)
  22. */
  23.  
  24.  
  25. #include <amxmodx>
  26. #include <engine>
  27. #include <fakemeta>
  28. #include <fakemeta_util>
  29. #include <hamsandwich>
  30. #include <cstrike>
  31. #include <fun>
  32. #include <xs>
  33.  
  34. #define PLUGIN "glock 18 custom"
  35. #define VERSION "1.0"
  36. #define AUTHOR "Mellowzy"
  37.  
  38. #define RECOIL 0.25
  39. #define DEFAULT_CLIP 40
  40. #define DEFAULT_BPAMMO 254
  41. #define RELOAD_TIME 2.0
  42. #define weapon_events "events/deagle.sc"
  43. #define model_old "models/w_deagle.mdl"
  44.  
  45. #define SPD_NORMAL 0.95
  46. #define SPD_AUTO 0.20
  47. #define SPD_BURST 0.15
  48. #define MAX_EVO 80
  49. #define G18 CSW_DEAGLE
  50. #define glock18_custom "weapon_deagle"
  51. #define WP_KEY 221132
  52. #define TASK_CHANGE 2010102010
  53. #define TASK_EVO 1212133912
  54.  
  55. new const glock_evo_model[3][] = {
  56.     "models/zth/evo/v_glock18_evo.mdl",
  57.     "models/zth/evo/p_glock18_evo.mdl",
  58.     "models/zth/evo/w_glock18_evo.mdl"
  59. }
  60. new const glock_nonevo_model[3][] = {
  61.     "models/zth/normal/v_glock18_custom.mdl",
  62.     "models/zth/normal/p_glock18_custom.mdl",
  63.     "models/zth/normal/w_glock18_custom.mdl"
  64. }
  65. new const glock_18_custom_sound[9][] = {
  66.     "weapons/glock18_custom1.wav",
  67.     "weapons/glock18_custom2.wav",
  68.     "weapons/TMP/Valentine/draw.wav",
  69.     "weapons/TMP/Valentine/magin.wav",
  70.     "weapons/TMP/Valentine/magout.wav",
  71.     "weapons/TMP/Valentine/ready.wav",
  72.     "weapons/TMP/Valentine/slideback.wav",
  73.     "weapons/TMP/Valentine/sliderelease.wav",
  74.     "weapons/TMP/Valentine/levelup.wav"
  75. }
  76. enum
  77. {
  78.     glock_custom_idle = 0,
  79.     glock_custom_reload,
  80.     glock_custom_draw,
  81.     glock_custom_shoot1,
  82.     glock_custom_shoot2,
  83.     glock_custom_shoot3
  84. }
  85. enum
  86. {
  87.     NORMAL = 0,
  88.     AUTO,
  89.     BURST
  90. }
  91. enum
  92. {
  93.     NONE = 0,
  94.     EVO
  95. }
  96. new iState, ShootCountToEVO[33], Trail
  97. new g_NumEvo[33]
  98. new g_had_wp[33], m_iBlood[2], Float:g_recoil[33], g_clip[33]
  99. new g_smokepuff_id, g_Event_FS, g_glockmode[33], StartEvo
  100. new shoot_count[33], cvar_damage, cvar_damageevo
  101. const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_MAC10)|(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)
  102.  
  103. public plugin_init()
  104. {
  105.     register_plugin(PLUGIN, VERSION, AUTHOR)
  106.     register_message(get_user_msgid("DeathMsg"), "message_DeathMsg");
  107.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  108.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  109.     register_forward(FM_CmdStart, "fw_CmdStart")
  110.     register_forward(FM_SetModel, "fw_SetModel")
  111.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") 
  112.  
  113.     RegisterHam(Ham_Item_AddToPlayer, glock18_custom, "ham_add_wp", 1)
  114.     RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack", 1)
  115.     RegisterHam(Ham_TraceAttack, "player", "ham_traceattack", 1)
  116.    
  117.     RegisterHam(Ham_Weapon_WeaponIdle, glock18_custom, "fw_Weapon_WeaponIdle_Post", 1)
  118.     RegisterHam(Ham_Item_Deploy, glock18_custom, "fw_Item_Deploy_Post", 1) 
  119.     RegisterHam(Ham_Item_PostFrame, glock18_custom, "fw_PostFrame")
  120.     RegisterHam(Ham_Weapon_Reload, glock18_custom, "fw_Reload")
  121.     RegisterHam(Ham_Weapon_Reload, glock18_custom, "fw_Reload_Post", 1)    
  122.     RegisterHam(Ham_Weapon_PrimaryAttack, glock18_custom, "fw_PrimaryAttack")
  123.     RegisterHam(Ham_Weapon_PrimaryAttack, glock18_custom, "fw_PrimaryAttack_Post", 1)
  124.    
  125.     RegisterHam(Ham_Spawn, "player", "fw_spawn_post", 1)
  126.    
  127.     cvar_damage = register_cvar("glock18_custom_dmg", "15.0")
  128.     cvar_damageevo = register_cvar("glock18_evo_dmg", "25.0")
  129.    
  130.     register_concmd("get_glock18_custom", "get_weapon")
  131.     register_clcmd("glock18_custom", "hook_change")
  132. }
  133.  
  134. public plugin_precache()
  135. {
  136.     for(new i = 0; i < sizeof(glock_nonevo_model); i++)
  137.         engfunc(EngFunc_PrecacheModel, glock_nonevo_model[i])
  138.     for(new i = 0; i < sizeof(glock_evo_model); i++)
  139.         engfunc(EngFunc_PrecacheModel, glock_evo_model[i])
  140.     for(new i = 0; i < sizeof(glock_18_custom_sound); i++)
  141.         engfunc(EngFunc_PrecacheSound, glock_18_custom_sound[i])   
  142.    
  143.     precache_generic("sprites/glock18_custom.txt")
  144.     precache_model("sprites/smoke_ia.spr")
  145.     m_iBlood[0] = precache_model("sprites/blood.spr")
  146.     m_iBlood[1] = precache_model("sprites/bloodspray.spr") 
  147.     g_smokepuff_id = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
  148.     Trail = precache_model("sprites/zbeam2.spr")
  149.    
  150.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
  151. }
  152.  
  153. public fw_PrecacheEvent_Post(type, const name[])
  154. {
  155.     if(equal(weapon_events, name)) g_Event_FS = get_orig_retval()      
  156. }
  157. public hook_change(id)
  158. {
  159.     engclient_cmd(id, glock18_custom)
  160.     return PLUGIN_HANDLED
  161. }
  162. public plugin_natives()
  163. {
  164.     register_native("get_glock18_custom", "get_weapon", 1)
  165. }
  166. public get_weapon(id)
  167. {
  168.     if(!is_user_alive(id))
  169.         return
  170.    
  171.     drop_weapons(id, 2)
  172.     g_had_wp[id] = 1
  173.     g_glockmode[id] = NORMAL
  174.     shoot_count[id] = 0
  175.     iState = NONE
  176.     ShootCountToEVO[id] = 0
  177.     StartEvo = 0
  178.     give_item(id, glock18_custom)
  179.     g_NumEvo[id] = MAX_EVO
  180.    
  181.     static ent; ent = fm_get_user_weapon_entity(id, G18)
  182.     if(pev_valid(ent)) cs_set_weapon_ammo(ent, DEFAULT_CLIP)
  183.    
  184.     cs_set_user_bpammo(id, G18, DEFAULT_BPAMMO)
  185.    
  186.     engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
  187.     write_byte(1)
  188.     write_byte(G18)
  189.     write_byte(DEFAULT_CLIP)
  190.     message_end()  
  191. }
  192.  
  193. public remove_weapon(id)
  194. {
  195.     g_had_wp[id] = 0
  196.     shoot_count[id] = 0
  197.     g_glockmode[id] = NORMAL
  198.     ShootCountToEVO[id] = 0
  199.     StartEvo = 0
  200.     iState = NONE
  201.     g_NumEvo[id] = MAX_EVO
  202. }
  203. public fw_spawn_post(id)
  204. {
  205.     remove_weapon(id)
  206. }
  207. public client_connect(id)remove_weapon(id)
  208. public client_disconnected(id)remove_weapon(id)
  209. public event_checkweapon(id)
  210. {
  211.     if(!is_user_alive(id))
  212.         return PLUGIN_HANDLED
  213.     if(get_user_weapon(id) != G18 || !g_had_wp[id])
  214.         return PLUGIN_HANDLED
  215.        
  216.     set_pev(id, pev_viewmodel2, iState == NONE ? glock_nonevo_model[0] : glock_evo_model[0])
  217.     set_pev(id, pev_weaponmodel2, iState == NONE ? glock_nonevo_model[1] : glock_evo_model[1])
  218.  
  219.     return PLUGIN_HANDLED
  220. }
  221. public message_DeathMsg(msg_id, msg_dest, id)
  222. {
  223.     static szTruncatedWeapon[33], iAttacker, iVictim
  224.     get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  225.    
  226.     iAttacker = get_msg_arg_int(1)
  227.     iVictim = get_msg_arg_int(2)
  228.    
  229.     if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  230.         return PLUGIN_CONTINUE
  231.    
  232.     if(equal(szTruncatedWeapon, "deagle") && get_user_weapon(iAttacker) == G18)
  233.     {
  234.         if(g_had_wp[id])
  235.         {
  236.             switch(iState)
  237.             {
  238.                 case NONE: set_msg_arg_string(4, "Glock 18 Custom")
  239.                 case EVO:set_msg_arg_string(4, "Glock 18 Evo")
  240.             }
  241.         }
  242.     }
  243.     return PLUGIN_CONTINUE
  244. }
  245. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
  246. {
  247.     if(!is_user_alive(id) || !is_user_connected(id))
  248.         return FMRES_IGNORED
  249.     if(get_user_weapon(id) != G18 || !g_had_wp[id])
  250.         return FMRES_IGNORED
  251.    
  252.     set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001)
  253.    
  254.     return FMRES_HANDLED
  255. }
  256.  
  257. public fw_CmdStart(id, uc_handle, seed)
  258. {
  259.     if(!is_user_alive(id) || !is_user_connected(id))
  260.         return FMRES_HANDLED
  261.     if(get_user_weapon(id) != G18 || !g_had_wp[id])
  262.         return FMRES_HANDLED
  263.     static Weapon; Weapon = fm_find_ent_by_owner(-1, glock18_custom, id);
  264.     if(!pev_valid(Weapon)) return FMRES_HANDLED
  265.     if(get_pdata_float(id, 83, 5) > 0.0 || get_pdata_float(Weapon, 46, 4) > 0.0 || get_pdata_float(Weapon, 47, 4) > 0.0)
  266.         return FMRES_HANDLED
  267.        
  268.     static CurButton
  269.     CurButton = get_uc(uc_handle, UC_Buttons)
  270.     if(CurButton & IN_ATTACK2)
  271.     {
  272.         Glock18Create_NextAttack(id, 1.0)
  273.         Glock18Create_TimeIdle(id, G18, 1.0)
  274.         switch(g_glockmode[id])
  275.         {
  276.             case NORMAL: set_task(0.3, "ChangeAuto", id+TASK_CHANGE)
  277.             case AUTO: set_task(0.3, "ChangeBurst", id+TASK_CHANGE)
  278.             case BURST:set_task(0.3, "ChangeNormal", id+TASK_CHANGE)
  279.         }
  280.     }
  281.        
  282.     return FMRES_HANDLED
  283. }
  284. public ChangeNormal(id)
  285. {
  286.     id -= TASK_CHANGE
  287.     g_glockmode[id] = NORMAL
  288.     Glock18Send_Anim(id, glock_custom_idle)
  289.     Glock18Create_NextAttack(id, 0.3)
  290.     Glock18Create_TimeIdle(id, G18, 0.3)
  291.     Set_Sound(id, CHAN_WEAPON, glock_18_custom_sound[7])
  292.     client_print(id, print_center, "Mode : Normal")
  293. }
  294. public ChangeAuto(id)
  295. {
  296.     id -= TASK_CHANGE
  297.     g_glockmode[id] = AUTO
  298.     Glock18Send_Anim(id, glock_custom_idle)
  299.     Glock18Create_NextAttack(id, 0.3)
  300.     Glock18Create_TimeIdle(id, G18, 0.3)
  301.     Set_Sound(id, CHAN_WEAPON, glock_18_custom_sound[7])
  302.     client_print(id, print_center, "Mode : Auto")
  303. }
  304. public ChangeBurst(id)
  305. {
  306.     id -= TASK_CHANGE
  307.     g_glockmode[id] = BURST
  308.     Glock18Send_Anim(id, glock_custom_idle)
  309.     Glock18Create_NextAttack(id, 0.3)
  310.     Glock18Create_TimeIdle(id, G18, 0.3)
  311.     Set_Sound(id, CHAN_WEAPON, glock_18_custom_sound[7])
  312.     client_print(id, print_center, "Mode : Burst")
  313. }
  314. public fw_SetModel(ent, const model[])
  315. {
  316.     if(!is_valid_ent(ent))
  317.         return FMRES_IGNORED
  318.    
  319.     static szClassName[33]
  320.     entity_get_string(ent, EV_SZ_classname, szClassName, charsmax(szClassName))
  321.    
  322.     if(!equal(szClassName, "weaponbox"))
  323.         return FMRES_IGNORED
  324.    
  325.     static iOwner
  326.     iOwner = entity_get_edict(ent, EV_ENT_owner)
  327.    
  328.     if(equal(model, model_old))
  329.     {
  330.         static at4cs
  331.         at4cs = find_ent_by_owner(-1, glock18_custom, ent)
  332.        
  333.         if(!is_valid_ent(at4cs))
  334.             return FMRES_IGNORED;
  335.        
  336.         if(g_had_wp[iOwner])
  337.         {
  338.             set_pev(at4cs, pev_impulse, WP_KEY)
  339.             g_had_wp[iOwner] = 0
  340.             shoot_count[iOwner] = 0
  341.             g_glockmode[iOwner] = NORMAL
  342.             ShootCountToEVO[iOwner] = 0
  343.             StartEvo = 0
  344.             engfunc(EngFunc_SetModel, ent, iState == NONE ? glock_nonevo_model[2] : glock_evo_model[2])
  345.            
  346.             return FMRES_SUPERCEDE
  347.         }
  348.     }
  349.    
  350.     return FMRES_IGNORED
  351. }
  352.  
  353.  
  354. public Event_CurWeapon(id)
  355. {
  356.     if(!is_user_alive(id) || !is_user_connected(id))
  357.         return FMRES_HANDLED
  358.     if(get_user_weapon(id) != G18 || !g_had_wp[id])
  359.         return FMRES_HANDLED
  360.  
  361.     static Float:Delay, Float:Delay2
  362.     static Ent; Ent = fm_get_user_weapon_entity(id, G18)
  363.     if(!pev_valid(Ent)) return FMRES_HANDLED
  364.    
  365.     new Float:ispeed[33]
  366.     switch(g_glockmode[id])
  367.     {
  368.         case NORMAL: ispeed[id] = SPD_NORMAL
  369.         case AUTO: ispeed[id] = SPD_AUTO
  370.         case BURST: ispeed[id] = SPD_BURST
  371.     }
  372.    
  373.     Delay = get_pdata_float(Ent, 46, 4) * ispeed[id]
  374.     Delay2 = get_pdata_float(Ent, 47, 4) * ispeed[id]
  375.    
  376.     if(Delay > 0.0)
  377.     {
  378.         set_pdata_float(Ent, 46, Delay, 4)
  379.         set_pdata_float(Ent, 47, Delay2, 4)
  380.     }
  381.     return FMRES_HANDLED
  382. }
  383.  
  384.  
  385. public fw_Weapon_WeaponIdle_Post(Ent)
  386. {
  387.     if(pev_valid(Ent) != 2)
  388.         return HAM_IGNORED 
  389.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
  390.     if(get_pdata_cbase(Id, 373) != Ent)
  391.         return HAM_IGNORED 
  392.     if(!g_had_wp[Id])
  393.         return HAM_IGNORED 
  394.        
  395.     if(get_pdata_float(Ent, 48, 4) <= 0.1)
  396.     {
  397.         Glock18Send_Anim(Id, glock_custom_idle)
  398.     }
  399.    
  400.     return HAM_IGNORED 
  401. }
  402.  
  403. public fw_Item_Deploy_Post(Ent)
  404. {
  405.     if(pev_valid(Ent) != 2)
  406.         return
  407.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
  408.     if(get_pdata_cbase(Id, 373) != Ent)
  409.         return
  410.     if(!g_had_wp[Id])
  411.         return
  412.    
  413.     set_pev(Id, pev_viewmodel2, iState == NONE ? glock_nonevo_model[0] : glock_evo_model[0])
  414.     set_pev(Id, pev_weaponmodel2, iState == NONE ? glock_nonevo_model[1] : glock_evo_model[1])
  415.    
  416.     Glock18Send_Anim(Id, glock_custom_draw)
  417. }
  418.  
  419. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  420. {
  421.     if (!is_user_connected(invoker))
  422.         return FMRES_IGNORED   
  423.     if(get_user_weapon(invoker) != G18 || !g_had_wp[invoker])
  424.         return FMRES_IGNORED
  425.     if(eventid != g_Event_FS)
  426.         return FMRES_IGNORED
  427.    
  428.     engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  429.     new iAnim[33]
  430.     iAnim[invoker] ++
  431.     switch(iAnim[invoker])
  432.     {
  433.         case 0:
  434.         {
  435.             iAnim[invoker] = glock_custom_shoot1
  436.         }
  437.         case 1:
  438.         {
  439.             iAnim[invoker] = glock_custom_shoot2
  440.         }
  441.         case 2:
  442.         {
  443.             iAnim[invoker] = glock_custom_shoot3
  444.         }
  445.     }
  446.     Glock18Send_Anim(invoker, iAnim[invoker])
  447.     Set_Sound(invoker, CHAN_WEAPON, glock_18_custom_sound[0])
  448.    
  449.     return FMRES_IGNORED
  450. }
  451.  
  452. public ham_add_wp(ent, id)
  453. {
  454.     if(!pev_valid(ent))
  455.         return HAM_IGNORED
  456.     if(pev(ent, pev_impulse) == WP_KEY)
  457.     {
  458.         g_had_wp[id] = 1
  459.         set_pev(ent, pev_impulse, 0)
  460.     }
  461.     message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
  462.     write_string("glock18_custom")
  463.     write_byte(8)
  464.     write_byte(35)
  465.     write_byte(-1)
  466.     write_byte(-1)
  467.     write_byte(1)
  468.     write_byte(1)
  469.     write_byte(G18)
  470.     message_end()
  471.    
  472.     return HAM_IGNORED
  473. }
  474.  
  475. public ham_item_postframe(iEnt)
  476. {
  477.     if (!pev_valid(iEnt)) return HAM_IGNORED
  478.    
  479.     new id = pev(iEnt, pev_owner)
  480.    
  481.     if(!is_user_alive(id) || !is_user_connected(id))
  482.         return HAM_IGNORED
  483.     if(get_user_weapon(id) != G18 || !g_had_wp[id])
  484.         return HAM_IGNORED 
  485.    
  486.     return HAM_IGNORED
  487. }
  488.  
  489. public ham_traceattack(ent, attacker, Float:Damage, Float:fDir[3], ptr, iDamageType)
  490. {
  491.     if(!is_user_alive(attacker) || !is_user_connected(attacker))
  492.         return HAM_IGNORED
  493.     if(get_user_weapon(attacker) != G18 || !g_had_wp[attacker])
  494.         return HAM_IGNORED
  495.    
  496.     static Float:flEnd[3], Float:vecPlane[3]
  497.    
  498.     get_tr2(ptr, TR_vecEndPos, flEnd)
  499.     get_tr2(ptr, TR_vecPlaneNormal, vecPlane)      
  500.        
  501.     if(!is_user_alive(ent))
  502.     {
  503.         make_bullet(attacker, flEnd)
  504.         fake_smoke(attacker, ptr)
  505.     } else {
  506.         static Float:flEnd[3]
  507.         get_tr2(ptr, TR_vecEndPos, flEnd)
  508.  
  509.         create_blood(flEnd)
  510.     }
  511.     static Float:iHitgroup
  512.     new Float:MultifDamage, Float: Mode_flDamage, Float:StateDmg
  513.     get_tr2(ptr, TR_iHitgroup, iHitgroup)
  514.     switch(g_glockmode[attacker])
  515.     {
  516.         case NORMAL:Mode_flDamage = 5.0
  517.         case AUTO: Mode_flDamage = 1.5
  518.         case BURST: Mode_flDamage = 2.0
  519.     }
  520.     switch(iHitgroup)
  521.     {
  522.         case HIT_HEAD: MultifDamage  = 2.75
  523.         case HIT_STOMACH: MultifDamage  = 1.25
  524.         case HIT_LEFTLEG: MultifDamage  = 0.75
  525.         case HIT_RIGHTLEG: MultifDamage  = 0.75
  526.         case HIT_GENERIC: MultifDamage =  2.75
  527.         default: MultifDamage  = 1.0
  528.     }
  529.     switch(iState)
  530.     {
  531.         case NONE: StateDmg = get_pcvar_float(cvar_damage) * 1.5
  532.         case EVO:
  533.         {
  534.             StateDmg = get_pcvar_float(cvar_damageevo) * 4.5
  535.             Shoot_Special(attacker)
  536.         }
  537.     }
  538.     SetHamParamFloat(3, StateDmg * Mode_flDamage * MultifDamage)       
  539.    
  540.     return HAM_HANDLED
  541. }
  542. public Shoot_Special(id)
  543. {
  544.     if(!is_user_alive(id) || !is_user_connected(id))
  545.         return
  546.    
  547.     static Float:StartOrigin[3], Float:EndOrigin[3], Float:EndOrigin2[3]
  548.    
  549.     Stock_Get_Postion(id, 40.0, 7.5, -5.0, StartOrigin)
  550.     Stock_Get_Postion(id, 4096.0, 0.0, 0.0, EndOrigin)
  551.    
  552.     static TrResult; TrResult = create_tr2()
  553.     engfunc(EngFunc_TraceLine, StartOrigin, EndOrigin, IGNORE_MONSTERS, id, TrResult)
  554.     get_tr2(TrResult, TR_vecEndPos, EndOrigin2)
  555.     free_tr2(TrResult)
  556.    
  557.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  558.     write_byte(TE_BEAMPOINTS)
  559.     engfunc(EngFunc_WriteCoord, StartOrigin[0])
  560.     engfunc(EngFunc_WriteCoord, StartOrigin[1])
  561.     engfunc(EngFunc_WriteCoord, StartOrigin[2])
  562.     engfunc(EngFunc_WriteCoord, EndOrigin2[0])
  563.     engfunc(EngFunc_WriteCoord, EndOrigin2[1])
  564.     engfunc(EngFunc_WriteCoord, EndOrigin2[2])
  565.     write_short(Trail)
  566.     write_byte(0)
  567.     write_byte(0)
  568.     write_byte(10)
  569.     write_byte(10)
  570.     write_byte(0)
  571.     write_byte(200)
  572.     write_byte(0)
  573.     write_byte(0)
  574.     write_byte(200)
  575.     write_byte(0)
  576.     message_end()
  577. }
  578. public fw_PrimaryAttack(ent)
  579. {
  580.     static id; id = pev(ent, pev_owner)
  581.    
  582.     set_pdata_int( ent, 64, -1)
  583.     pev(id, pev_punchangle, g_recoil[id])
  584.    
  585.     return HAM_IGNORED 
  586. }
  587.  
  588. public fw_PrimaryAttack_Post(ent)
  589. {
  590.     static id; id = pev(ent,pev_owner)
  591.     if(g_had_wp[id])
  592.     {
  593.         if(g_glockmode[id] == BURST)
  594.         {
  595.             shoot_count[id] ++
  596.             if(shoot_count[id] == 3)
  597.             {
  598.                 shoot_count[id] = 0
  599.                 Glock18Create_NextAttack(id, 0.3)
  600.                 Glock18Create_TimeIdle(id, G18, 0.3)
  601.             }
  602.         }
  603.         set_task(0.0, "CreateEvo", id+TASK_EVO)
  604.         static Float:push[3]
  605.         pev(id,pev_punchangle,push)
  606.         xs_vec_sub(push, g_recoil[id],push)
  607.        
  608.         push[1] += random_float(-1.5, 1.5)
  609.         xs_vec_mul_scalar(push, RECOIL,push)
  610.         xs_vec_add(push, g_recoil[id], push)
  611.         set_pev(id, pev_punchangle, push)
  612.     }
  613.    
  614.     return HAM_IGNORED
  615. }
  616. public CreateEvo(id)
  617. {
  618.     id -= TASK_EVO
  619.     if(!is_user_alive(id))
  620.         return
  621.     if(!g_had_wp[id])
  622.         return
  623.    
  624.     StartEvo = 1
  625.     ShootCountToEVO[id] ++
  626.     if(ShootCountToEVO[id] > g_NumEvo[id])
  627.     {
  628.         if(StartEvo)
  629.         {
  630.             iState = EVO
  631.             set_pev(id, pev_viewmodel2, glock_evo_model[0])
  632.             set_pev(id, pev_weaponmodel2, glock_evo_model[1])
  633.             set_hudmessage(255, 0, 0, -1.0, -1.0)
  634.             show_hudmessage(id, "Weapon Evolution!")
  635.             Set_Sound(id, CHAN_VOICE, glock_18_custom_sound[8])
  636.             g_NumEvo[id] = 999999
  637.         }
  638.     }
  639. }
  640.  
  641. public fw_PostFrame(ent)
  642. {
  643.     if(!pev_valid(ent))
  644.         return HAM_IGNORED
  645.    
  646.     static id
  647.     id = pev(ent, pev_owner)
  648.    
  649.     if(is_user_alive(id) && is_user_connected(id) && g_had_wp[id])
  650.     {  
  651.         static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
  652.        
  653.         static bpammo
  654.         bpammo = cs_get_user_bpammo(id, G18)
  655.        
  656.         static iClip; iClip = get_pdata_int(ent, 51, 4)
  657.         static fInReload; fInReload = get_pdata_int(ent, 54, 4)
  658.        
  659.         if(fInReload && flNextAttack <= 0.0)
  660.         {
  661.             static temp1
  662.             temp1 = min(DEFAULT_CLIP - iClip, bpammo)
  663.  
  664.             set_pdata_int(ent, 51, iClip + temp1, 4)
  665.             cs_set_user_bpammo(id, G18, bpammo - temp1)    
  666.            
  667.             set_pdata_int(ent, 54, 0, 4)
  668.            
  669.             fInReload = 0
  670.         }
  671.     }
  672.    
  673.     return HAM_IGNORED 
  674. }
  675.  
  676. public fw_Reload(ent)
  677. {
  678.     if(!pev_valid(ent))
  679.         return HAM_IGNORED
  680.    
  681.     static id
  682.     id = pev(ent, pev_owner)
  683.    
  684.     if(is_user_alive(id) && is_user_connected(id) && g_had_wp[id])
  685.     {      
  686.         g_clip[id] = -1
  687.        
  688.         static bpammo
  689.         bpammo = cs_get_user_bpammo(id, G18)
  690.        
  691.         static iClip; iClip = get_pdata_int(ent, 51, 4)
  692.        
  693.         if (bpammo <= 0)
  694.             return HAM_SUPERCEDE
  695.        
  696.         if(iClip >= DEFAULT_CLIP)
  697.             return HAM_SUPERCEDE       
  698.            
  699.        
  700.         g_clip[id] = iClip
  701.     }
  702.    
  703.     return HAM_IGNORED
  704. }
  705.  
  706. public fw_Reload_Post(ent)
  707. {
  708.     if(!pev_valid(ent))
  709.         return HAM_IGNORED
  710.    
  711.     static id
  712.     id = pev(ent, pev_owner)
  713.    
  714.     if(is_user_alive(id) && is_user_connected(id) && g_had_wp[id])
  715.     {  
  716.         if (g_clip[id] == -1)
  717.             return HAM_IGNORED
  718.        
  719.         static Float:reload_time
  720.         reload_time = RELOAD_TIME
  721.        
  722.         set_pdata_int(ent, 51, g_clip[id], 4)
  723.         set_pdata_float(ent, 48, reload_time, 4)
  724.         set_pdata_float(id, 83, reload_time, 5)
  725.         set_pdata_int(ent, 54, 1, 4)
  726.  
  727.         Glock18Send_Anim(id, glock_custom_reload)
  728.        
  729.     }
  730.    
  731.     return HAM_IGNORED
  732. }
  733.  
  734. stock Glock18Send_Anim(iPlayer, iAnim)
  735. {
  736.     set_pev(iPlayer, pev_weaponanim, iAnim)
  737.  
  738.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, iPlayer)
  739.     write_byte(iAnim)
  740.     write_byte(pev(iPlayer,pev_body))
  741.     message_end()
  742. }
  743.  
  744. stock drop_weapons(iPlayer, Slot)
  745. {
  746.     new item = get_pdata_cbase(iPlayer, 367+Slot, 4)
  747.     while(item > 0)
  748.     {
  749.         static classname[24]
  750.         pev(item, pev_classname, classname, charsmax(classname))
  751.         engclient_cmd(iPlayer, "drop", classname)
  752.         item = get_pdata_cbase(item, 42, 5)
  753.     }
  754.     set_pdata_cbase(iPlayer, 367, -1, 4)
  755. }
  756.  
  757. stock make_bullet(id, Float:Origin[3])
  758. {
  759.     // Find target
  760.     new decal = random_num(41, 45)
  761.     const loop_time = 2
  762.    
  763.     static Body, Target
  764.     get_user_aiming(id, Target, Body, 999999)
  765.    
  766.     if(is_user_connected(Target))
  767.         return
  768.    
  769.     for(new i = 0; i < loop_time; i++)
  770.     {
  771.         // Put decal on "world" (a wall)
  772.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  773.         write_byte(TE_WORLDDECAL)
  774.         engfunc(EngFunc_WriteCoord, Origin[0])
  775.         engfunc(EngFunc_WriteCoord, Origin[1])
  776.         engfunc(EngFunc_WriteCoord, Origin[2])
  777.         write_byte(decal)
  778.         message_end()
  779.        
  780.         // Show sparcles
  781.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  782.         write_byte(TE_GUNSHOTDECAL)
  783.         engfunc(EngFunc_WriteCoord, Origin[0])
  784.         engfunc(EngFunc_WriteCoord, Origin[1])
  785.         engfunc(EngFunc_WriteCoord, Origin[2])
  786.         write_short(id)
  787.         write_byte(decal)
  788.         message_end()
  789.     }
  790. }
  791.  
  792. public fake_smoke(id, trace_result)
  793. {
  794.     static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  795.    
  796.     get_weapon_attachment(id, vecSrc)
  797.     global_get(glb_v_forward, vecEnd)
  798.    
  799.     xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  800.     xs_vec_add(vecSrc, vecEnd, vecEnd)
  801.  
  802.     get_tr2(trace_result, TR_vecEndPos, vecSrc)
  803.     get_tr2(trace_result, TR_vecPlaneNormal, vecEnd)
  804.    
  805.     xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
  806.     xs_vec_add(vecSrc, vecEnd, vecEnd)
  807.    
  808.     TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  809.     TE_FLAG |= TE_EXPLFLAG_NOSOUND
  810.     TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  811.    
  812.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  813.     write_byte(TE_EXPLOSION)
  814.     engfunc(EngFunc_WriteCoord, vecEnd[0])
  815.     engfunc(EngFunc_WriteCoord, vecEnd[1])
  816.     engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
  817.     write_short(g_smokepuff_id)
  818.     write_byte(2)
  819.     write_byte(50)
  820.     write_byte(TE_FLAG)
  821.     message_end()
  822. }
  823.  
  824. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
  825. {
  826.     new Float:vfEnd[3], viEnd[3]
  827.     get_user_origin(id, viEnd, 3)  
  828.     IVecFVec(viEnd, vfEnd)
  829.    
  830.     new Float:fOrigin[3], Float:fAngle[3]
  831.    
  832.     pev(id, pev_origin, fOrigin)
  833.     pev(id, pev_view_ofs, fAngle)
  834.    
  835.     xs_vec_add(fOrigin, fAngle, fOrigin)
  836.    
  837.     new Float:fAttack[3]
  838.    
  839.     xs_vec_sub(vfEnd, fOrigin, fAttack)
  840.     xs_vec_sub(vfEnd, fOrigin, fAttack)
  841.    
  842.     new Float:fRate
  843.    
  844.     fRate = fDis / vector_length(fAttack)
  845.     xs_vec_mul_scalar(fAttack, fRate, fAttack)
  846.    
  847.     xs_vec_add(fOrigin, fAttack, output)
  848. }
  849.  
  850.  
  851. stock create_blood(const Float:origin[3])
  852. {
  853.     // Show some blood :)
  854.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  855.     write_byte(TE_BLOODSPRITE)
  856.     engfunc(EngFunc_WriteCoord, origin[0])
  857.     engfunc(EngFunc_WriteCoord, origin[1])
  858.     engfunc(EngFunc_WriteCoord, origin[2])
  859.     write_short(m_iBlood[1])
  860.     write_short(m_iBlood[0])
  861.     write_byte(75)
  862.     write_byte(5)
  863.     message_end()
  864. }
  865. stock Glock18Create_NextAttack(iPlayer, Float:NextAttack)
  866. {
  867.     if(!is_user_alive(iPlayer))
  868.         return
  869.    
  870.     set_pdata_float(iPlayer, 83, NextAttack, 5)
  871. }
  872. stock Glock18Create_TimeIdle(iPlayer, CSW_WPN,  Float:TimeIdle)
  873. {
  874.     static Glock; Glock = fm_get_user_weapon_entity(iPlayer, CSW_WPN)
  875.     if(!pev_valid(Glock)) return
  876.    
  877.     set_pdata_float(Glock, 46, TimeIdle, 4)
  878.     set_pdata_float(Glock, 47, TimeIdle, 4)
  879.     set_pdata_float(Glock, 48, TimeIdle + 1.0, 4)
  880. }
  881. stock Set_Sound(id, channel, const sound[])
  882. {
  883.     emit_sound(id, channel, sound, 1.0, ATTN_NORM, 0, PITCH_NORM)
  884. }
  885. stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
  886. {
  887.     static ptr
  888.     ptr = create_tr2()
  889.  
  890.     engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, ptr)
  891.    
  892.     static Float:EndPos[3]
  893.     get_tr2(ptr, TR_vecEndPos, EndPos)
  894.  
  895.     free_tr2(ptr)
  896.     return floatround(get_distance_f(end, EndPos))
  897. }
  898.  
  899. stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
  900. {
  901.     static Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
  902.     pev(id, pev_origin, fOrigin)
  903.     get_user_origin(id, iAimOrigin, 3) // end position from eyes
  904.     IVecFVec(iAimOrigin, fAimOrigin)
  905.     xs_vec_sub(fAimOrigin, fOrigin, fV1)
  906.    
  907.     static Float:fV2[3]
  908.     xs_vec_sub(fTarget, fOrigin, fV2)
  909.    
  910.     static iResult; iResult = get_angle_between_vectors(fV1, fV2)
  911.     if(TargetSize > 0.0)
  912.     {
  913.         static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
  914.         static fAngleToTargetSize; fAngleToTargetSize = floatround(floatatan(fTan, degrees))
  915.         iResult -= (iResult > 0) ? fAngleToTargetSize : -fAngleToTargetSize
  916.     }
  917.    
  918.     return iResult
  919. }
  920.  
  921. stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
  922. {
  923.     static Float:fA1[3], Float:fA2[3]
  924.     engfunc(EngFunc_VecToAngles, fV1, fA1)
  925.     engfunc(EngFunc_VecToAngles, fV2, fA2)
  926.    
  927.     static iResult; iResult = floatround(fA1[1] - fA2[1])
  928.     iResult = iResult % 360
  929.     iResult = (iResult > 180) ? (iResult - 360) : iResult
  930.    
  931.     return iResult
  932. }
  933. stock Stock_Get_Postion(id,Float:forw,Float:right, Float:up,Float:vStart[])
  934. {
  935.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  936.    
  937.     pev(id, pev_origin, vOrigin)
  938.     pev(id, pev_view_ofs,vUp) //for player
  939.     xs_vec_add(vOrigin,vUp,vOrigin)
  940.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  941.    
  942.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
  943.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
  944.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
  945.    
  946.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  947.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  948.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  949. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement