Advertisement
MasamuneDate

CSO - Dual Uzi / Port to CoD MW Extened

Jul 29th, 2019
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 25.49 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <codmod>
  3. #include <engine>
  4. #include <fakemeta>
  5. #include <fakemeta_util>
  6. #include <hamsandwich>
  7. #include <cstrike>
  8. #include <xs>
  9. #include <fun>
  10.  
  11. #define PLUGIN "[CSO] Dual Uzi"
  12. #define VERSION "1.0"
  13. #define AUTHOR "Dias Pendragon"
  14.  
  15. // Data Config
  16. #define MODEL_V "models/codbaru/v_dualuzi.mdl"
  17. #define MODEL_P "models/codbaru/p_dualuzi.mdl"
  18. #define MODEL_W "models/codbaru/w_dualuzi.mdl"
  19. #define MODEL_W_OLD "models/w_mp5.mdl"
  20.  
  21. #define CSW_BASE CSW_MP5NAVY
  22. #define weapon_base "weapon_mp5navy"
  23.  
  24. #define SUBMODEL -1 // can -1
  25. #define WEAPON_CODE 2102015
  26. #define WEAPON_EVENT "events/mp5n.sc"
  27. #define ANIM_EXT "dualpistols"
  28.  
  29. #define ANIME_SHOOT 3
  30. #define ANIME_RELOAD 15 // can -1
  31. #define ANIME_DRAW 16 // can -1
  32. #define ANIME_IDLE random_num(0, 1) // can -1
  33.  
  34. new const WeaponSounds[10][] =
  35. {
  36.     "weapons/dualuzi-1.wav",
  37.     "weapons/dualuzi_draw.wav",
  38.     "weapons/dualuzi_idle2_1.wav",
  39.     "weapons/dualuzi_idle2_2.wav",
  40.     "weapons/dualuzi_clipin1.wav",
  41.     "weapons/dualuzi_clipout1.wav",
  42.     "weapons/dualuzi_off_shoulder.wav",
  43.     "weapons/dualuzi_on_shoulder.wav",
  44.     "weapons/dualuzi_on_shoulder_reload1.wav",
  45.     "weapons/dualuzi_on_shoulder_reload2.wav"
  46. }
  47.  
  48. enum
  49. {
  50.     ANIME_IDLEX = 0,
  51.     ANIME_IDLE2,
  52.     ANIME_LEFT_EMPTY,
  53.     ANIME_SHOOT_L1,
  54.     ANIME_SHOOT_L2,
  55.     ANIME_SHOOT_L3,
  56.     ANIME_SHOOT_L4,
  57.     ANIME_SHOOT_L5,
  58.     ANIME_SHOOT_LLAST,
  59.     ANIME_SHOOT_R1,
  60.     ANIME_SHOOT_R2,
  61.     ANIME_SHOOT_R3,
  62.     ANIME_SHOOT_R4,
  63.     ANIME_SHOOT_R5,
  64.     ANIME_SHOOT_RLAST,
  65.     ANIME_RELOADX,
  66.     ANIME_DRAWX,
  67.     ANIME_CHANGE_TO_B,
  68.     ANIME_B_IDLE,
  69.     ANIME_B_SHOOT_L,
  70.     ANIME_B_SHOOT_LLAST,
  71.     ANIME_B_LEFT_EMPTY,
  72.     ANIME_B_SHOOT_R,
  73.     ANIME_B_SHOOT_RLAST,
  74.     ANIME_B_RELOAD,
  75.     ANIME_CHANGE_TO_A
  76. }
  77.  
  78. // Weapon Config
  79. #define DAMAGE 35 // 49 for Zombie
  80. #define ACCURACY 70 // 0 - 100 ; -1 Default
  81. #define CLIP 60
  82. #define BPAMMO 300
  83. #define SPEED 0.05
  84. #define RECOIL 0.5
  85. #define RELOAD_TIME 3.0
  86.  
  87. // MACROS
  88. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
  89. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
  90. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
  91.  
  92. //new g_Base
  93. new g_Had_Base, g_Clip[33], g_OldWeapon[33], Float:g_Recoil[33][3]
  94. new g_Event_Base, g_SmokePuff_SprId, g_MsgCurWeapon, g_ShellId
  95.  
  96. // Safety
  97. new g_HamBot
  98. new g_IsConnected, g_IsAlive, g_PlayerWeapon[33]
  99.  
  100. new const nazwa[]   = "Earth Guardian";
  101. new const opis[]    = "You got Dual UZI, Extreme Health but weak ( Special infinite ammo until bug fixed / remove )";
  102. new const bronie    = 1<<CSW_MP5NAVY | 1<<CSW_USP ;
  103. new const zdrowie   = 300;
  104. new const kondycja  = 0;
  105. new const inteligencja = -50;
  106. new const wytrzymalosc = -250;
  107.  
  108. new ma_klase[33];
  109.  
  110. public plugin_init()
  111. {
  112.     register_plugin(PLUGIN, VERSION, AUTHOR)
  113.     cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
  114.     // Safety
  115.     Register_SafetyFunc()
  116.    
  117.     // Event
  118.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  119.    
  120.     // Forward
  121.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  122.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
  123.     register_forward(FM_SetModel, "fw_SetModel")  
  124.     register_forward(FM_CmdStart, "fw_CmdStart")
  125.  
  126.     // Ham
  127.     RegisterHam(Ham_Item_Deploy, weapon_base, "fw_Item_Deploy_Post", 1)
  128.     RegisterHam(Ham_Item_AddToPlayer, weapon_base, "fw_Item_AddToPlayer_Post", 1)
  129.     RegisterHam(Ham_Weapon_WeaponIdle, weapon_base, "fw_Weapon_WeaponIdle_Post", 1)
  130.     RegisterHam(Ham_Item_PostFrame, weapon_base, "fw_Item_PostFrame")  
  131.     RegisterHam(Ham_Weapon_Reload, weapon_base, "fw_Weapon_Reload")
  132.     RegisterHam(Ham_Weapon_Reload, weapon_base, "fw_Weapon_Reload_Post", 1)
  133.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base, "fw_Weapon_PrimaryAttack")
  134.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base, "fw_Weapon_PrimaryAttack_Post", 1)
  135.  
  136.    
  137.     RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
  138.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player")
  139.    
  140.     // Cache
  141.     g_MsgCurWeapon = get_user_msgid("CurWeapon")
  142.    
  143.     // Get
  144.     //register_clcmd("say /uzi", "Get_Base")
  145. }
  146.  
  147. public plugin_precache()
  148. {
  149.     precache_model(MODEL_V)
  150.     precache_model(MODEL_P)
  151.     precache_model(MODEL_W)
  152.    
  153.     for(new i = 0; i < sizeof(WeaponSounds); i++)
  154.         precache_sound(WeaponSounds[i])
  155.    
  156.     g_ShellId = engfunc(EngFunc_PrecacheModel, "models/pshell.mdl")
  157.     g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
  158.     register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
  159. }
  160.  
  161.  
  162. public cod_class_enabled(id)
  163. {
  164.     ma_klase[id] = true;
  165.     //cod_give_weapon(id, CSW_MP5NAVY)
  166.     Get_Base(id)
  167. }
  168.  
  169. public cod_class_disabled(id)
  170. {
  171.         ma_klase[id] = false;
  172.     Remove_Base(id)
  173. }
  174.  
  175.  
  176. public fw_PrecacheEvent_Post(type, const name[])
  177. {
  178.     if(equal(WEAPON_EVENT, name)) g_Event_Base = get_orig_retval()    
  179. }
  180.  
  181. public client_putinserver(id)
  182. {
  183.         Safety_Connected(id)
  184.    
  185.     if(!g_HamBot && is_user_bot(id))
  186.     {
  187.         g_HamBot = 1
  188.         set_task(0.1, "Register_HamBot", id)
  189.     }
  190. }
  191.  
  192. public Register_HamBot(id)
  193. {
  194.     Register_SafetyFuncBot(id)
  195.     RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player")
  196. }
  197.  
  198. public client_disconnect(id)
  199. {
  200.         Safety_Disconnected(id)
  201. }
  202. /*
  203. public Mileage_WeaponGet(id, ItemID)
  204. {
  205.     if(ItemID == g_Base) Get_Base(id)
  206. }
  207.  
  208. public Mileage_WeaponRefillAmmo(id, ItemID)
  209. {
  210.     if(ItemID == g_Base) cs_set_user_bpammo(id, CSW_BASE, BPAMMO)
  211. }
  212.  
  213. public Mileage_WeaponRemove(id, ItemID)
  214. {
  215.     if(ItemID == g_Base) Remove_Base(id)
  216. }*/
  217.  
  218. public Get_Base(id)
  219. {
  220.     Set_BitVar(g_Had_Base, id)
  221.     give_item(id, weapon_base)
  222.    
  223.     // Clip & Ammo
  224.     static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
  225.     if(!pev_valid(Ent)) return
  226.    
  227.     cs_set_weapon_ammo(Ent, CLIP)
  228.     cs_set_user_bpammo(id, CSW_BASE, BPAMMO)
  229.    
  230.     message_begin(MSG_ONE_UNRELIABLE, g_MsgCurWeapon, _, id)
  231.     write_byte(1)
  232.     write_byte(CSW_BASE)
  233.     write_byte(CLIP)
  234.     message_end()
  235.    
  236.     cs_set_weapon_silen(Ent, 0, 0)
  237. }
  238.  
  239. public Remove_Base(id)
  240. {
  241.     UnSet_BitVar(g_Had_Base, id)
  242. }
  243.  
  244. public Event_CurWeapon(id)
  245. {
  246.     static CSWID; CSWID = read_data(2)
  247.     static SubModel; SubModel = SUBMODEL
  248.    
  249.     if((CSWID == CSW_BASE && g_OldWeapon[id] != CSW_BASE) && Get_BitVar(g_Had_Base, id))
  250.     {
  251.         if(SubModel != -1) Draw_NewWeapon(id, CSWID)
  252.     } else if((CSWID == CSW_BASE && g_OldWeapon[id] == CSW_BASE) && Get_BitVar(g_Had_Base, id)) {
  253.         static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASE)
  254.         if(!pev_valid(Ent))
  255.         {
  256.             g_OldWeapon[id] = get_user_weapon(id)
  257.             return
  258.         }
  259.        
  260.         set_pdata_float(Ent, 46, SPEED, 4)
  261.         set_pdata_float(Ent, 47, SPEED, 4)
  262.     } else if(CSWID != CSW_BASE && g_OldWeapon[id] == CSW_BASE) {
  263.         if(SubModel != -1) Draw_NewWeapon(id, CSWID)
  264.     }
  265.    
  266.     g_OldWeapon[id] = get_user_weapon(id)
  267. }
  268.  
  269. public Draw_NewWeapon(id, CSW_ID)
  270. {
  271.     if(CSW_ID == CSW_BASE)
  272.     {
  273.         static ent
  274.         ent = fm_get_user_weapon_entity(id, CSW_BASE)
  275.        
  276.         if(pev_valid(ent) && Get_BitVar(g_Had_Base, id))
  277.         {
  278.             set_pev(ent, pev_effects, pev(ent, pev_effects) &~ EF_NODRAW)
  279.             engfunc(EngFunc_SetModel, ent, MODEL_P)
  280.             set_pev(ent, pev_body, SUBMODEL)
  281.         }
  282.     } else {
  283.         static ent
  284.         ent = fm_get_user_weapon_entity(id, CSW_BASE)
  285.        
  286.         if(pev_valid(ent)) set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW)            
  287.     }
  288. }
  289.  
  290. public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
  291. {
  292.     if(!is_alive(id))
  293.         return FMRES_IGNORED  
  294.     if(get_user_weapon(id) == CSW_BASE && Get_BitVar(g_Had_Base, id))
  295.         set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001)
  296.    
  297.     return FMRES_HANDLED
  298. }
  299.  
  300. public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  301. {
  302.     if (!is_connected(invoker))
  303.         return FMRES_IGNORED  
  304.     if(get_player_weapon(invoker) != CSW_BASE || !Get_BitVar(g_Had_Base, invoker))
  305.         return FMRES_IGNORED
  306.     if(eventid != g_Event_Base)
  307.         return FMRES_IGNORED
  308.    
  309.     engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  310.     DualAttack(invoker)
  311.    
  312.     return FMRES_SUPERCEDE
  313. }
  314. public DualAttack(id)
  315. {
  316.     static iFlags, iAnimDesired, iWeaponState, iItem, szAnimation[64]
  317.    
  318.     #define WEAPONSTATE_ELITE_LEFT (1 << 3)
  319.    
  320.     iItem = fm_get_user_weapon_entity(id, CSW_BASE)
  321.     if(!pev_valid(iItem)) return
  322.    
  323.     iFlags = pev(id, pev_flags);
  324.     iWeaponState = get_pdata_int(iItem, 74, 4)
  325.    
  326.     if(iWeaponState & WEAPONSTATE_ELITE_LEFT)
  327.     {  
  328.         iWeaponState &= ~ WEAPONSTATE_ELITE_LEFT;
  329.    
  330.         Set_WeaponAnim(id, ANIME_SHOOT_L1)
  331.         Make_Shell(id, 1)
  332.        
  333.         formatex(szAnimation, charsmax(szAnimation), iFlags & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", ANIM_EXT);
  334.     } else {
  335.         iWeaponState |= WEAPONSTATE_ELITE_LEFT;
  336.        
  337.         Set_WeaponAnim(id, ANIME_SHOOT_R1)
  338.         Make_Shell(id, 0)
  339.        
  340.         formatex(szAnimation, charsmax(szAnimation), iFlags & FL_DUCKING ? "crouch_shoot2_%s" : "ref_shoot2_%s", ANIM_EXT);
  341.     }
  342.    
  343.     if((iAnimDesired = lookup_sequence(id, szAnimation)) == -1)
  344.         iAnimDesired = 0;
  345.    
  346.     set_pev(id, pev_sequence, iAnimDesired)
  347.     set_pdata_int(iItem, 74, iWeaponState, 4)
  348.    
  349.     emit_sound(id, CHAN_WEAPON, WeaponSounds[0], 1.0, 0.4, 0, 94 + random_num(0, 15))
  350. }
  351.  
  352. public Make_Shell(id, Right)
  353. {
  354.     static Float:player_origin[3], Float:origin[3], Float:origin2[3], Float:gunorigin[3], Float:oldangles[3], Float:v_forward[3], Float:v_forward2[3], Float:v_up[3], Float:v_up2[3], Float:v_right[3], Float:v_right2[3], Float:viewoffsets[3];
  355.    
  356.     pev(id, pev_v_angle, oldangles); pev(id,pev_origin,player_origin); pev(id, pev_view_ofs, viewoffsets);
  357.  
  358.     engfunc(EngFunc_MakeVectors, oldangles)
  359.    
  360.     global_get(glb_v_forward, v_forward); global_get(glb_v_up, v_up); global_get(glb_v_right, v_right);
  361.     global_get(glb_v_forward, v_forward2); global_get(glb_v_up, v_up2); global_get(glb_v_right, v_right2);
  362.    
  363.     xs_vec_add(player_origin, viewoffsets, gunorigin);
  364.    
  365.     if(!Right)
  366.     {
  367.         xs_vec_mul_scalar(v_forward, 10.3, v_forward); xs_vec_mul_scalar(v_right, 2.0, v_right);
  368.         xs_vec_mul_scalar(v_up, -2.7, v_up);
  369.         xs_vec_mul_scalar(v_forward2, 10.0, v_forward2); xs_vec_mul_scalar(v_right2, 4.0, v_right2);
  370.         xs_vec_mul_scalar(v_up2, -3.0, v_up2);
  371.     } else {
  372.         xs_vec_mul_scalar(v_forward, 10.3, v_forward); xs_vec_mul_scalar(v_right, -4.0, v_right);
  373.         xs_vec_mul_scalar(v_up, -3.7, v_up);
  374.         xs_vec_mul_scalar(v_forward2, 10.0, v_forward2); xs_vec_mul_scalar(v_right2, 2.0, v_right2);
  375.         xs_vec_mul_scalar(v_up2, -4.0, v_up2);
  376.     }
  377.    
  378.     xs_vec_add(gunorigin, v_forward, origin);
  379.     xs_vec_add(gunorigin, v_forward2, origin2);
  380.     xs_vec_add(origin, v_right, origin);
  381.     xs_vec_add(origin2, v_right2, origin2);
  382.     xs_vec_add(origin, v_up, origin);
  383.     xs_vec_add(origin2, v_up2, origin2);
  384.  
  385.     static Float:velocity[3]
  386.     get_speed_vector(origin2, origin, random_float(140.0, 160.0), velocity)
  387.  
  388.     static angle; angle = random_num(0, 360)
  389.  
  390.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  391.     write_byte(TE_MODEL)
  392.     engfunc(EngFunc_WriteCoord, origin[0])
  393.     engfunc(EngFunc_WriteCoord,origin[1])
  394.     engfunc(EngFunc_WriteCoord,origin[2])
  395.     engfunc(EngFunc_WriteCoord,velocity[0])
  396.     engfunc(EngFunc_WriteCoord,velocity[1])
  397.     engfunc(EngFunc_WriteCoord,velocity[2])
  398.     write_angle(angle)
  399.     write_short(g_ShellId)
  400.     write_byte(1)
  401.     write_byte(20)
  402.     message_end()
  403. }
  404.  
  405. public fw_SetModel(entity, model[])
  406. {
  407.     if(!pev_valid(entity))
  408.         return FMRES_IGNORED
  409.    
  410.     static Classname[32]
  411.     pev(entity, pev_classname, Classname, sizeof(Classname))
  412.    
  413.     if(!equal(Classname, "weaponbox"))
  414.         return FMRES_IGNORED
  415.    
  416.     static iOwner
  417.     iOwner = pev(entity, pev_owner)
  418.    
  419.     if(equal(model, MODEL_W_OLD))
  420.     {
  421.         static weapon; weapon = find_ent_by_owner(-1, weapon_base, entity)
  422.        
  423.         if(!pev_valid(weapon))
  424.             return FMRES_IGNORED;
  425.        
  426.         if(Get_BitVar(g_Had_Base, iOwner))
  427.         {
  428.             set_pev(weapon, pev_impulse, WEAPON_CODE)
  429.             engfunc(EngFunc_SetModel, entity, MODEL_W)
  430.             set_pev(entity, pev_body, SUBMODEL)
  431.        
  432.             Remove_Base(iOwner)
  433.            
  434.             return FMRES_SUPERCEDE
  435.         }
  436.     }
  437.  
  438.     return FMRES_IGNORED;
  439. }
  440.  
  441. public fw_CmdStart(id, uc_handle, seed)
  442. {
  443.     if (!is_alive(id))
  444.         return FMRES_IGNORED  
  445.     if(get_player_weapon(id) != CSW_BASE || !Get_BitVar(g_Had_Base, id))
  446.         return FMRES_IGNORED
  447.        
  448.     static Button; Button = get_uc(uc_handle, UC_Buttons)  
  449.    
  450.     if(Button & IN_ATTACK2)
  451.     {
  452.         static Float:Time; Time = get_pdata_float(id, 83, 5)
  453.         if(Time > 0.0) return FMRES_IGNORED
  454.        
  455.         if(cs_get_user_zoom(id) != CS_SET_AUGSG552_ZOOM) cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
  456.         else cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
  457.        
  458.         Time = 0.25
  459.         set_pdata_float(id, 83, Time, 5)
  460.     }
  461.    
  462.     return FMRES_IGNORED
  463. }
  464.  
  465. public fw_Item_Deploy_Post(Ent)
  466. {
  467.     if(pev_valid(Ent) != 2)
  468.         return
  469.     static Id; Id = get_pdata_cbase(Ent, 41, 4)
  470.     if(get_pdata_cbase(Id, 373) != Ent)
  471.         return
  472.     if(!Get_BitVar(g_Had_Base, Id))
  473.         return
  474.        
  475.     static SubModel; SubModel = SUBMODEL
  476.    
  477.     set_pev(Id, pev_viewmodel2, MODEL_V)
  478.     set_pev(Id, pev_weaponmodel2, SubModel != -1 ? "" : MODEL_P)
  479.    
  480.     static Draw; Draw = ANIME_DRAW
  481.     if(Draw != -1) Set_WeaponAnim(Id, ANIME_DRAW)
  482.    
  483.     set_pdata_string(Id, (492) * 4, ANIM_EXT, -1 , 20)
  484. }
  485.  
  486. public fw_Item_AddToPlayer_Post(Ent, id)
  487. {
  488.     if(!pev_valid(Ent))
  489.         return HAM_IGNORED
  490.        
  491.     if(pev(Ent, pev_impulse) == WEAPON_CODE)
  492.     {
  493.         Set_BitVar(g_Had_Base, id)
  494.         set_pev(Ent, pev_impulse, 0)
  495.     }
  496.    
  497.     return HAM_HANDLED
  498. }
  499.  
  500. public fw_Item_PostFrame(ent)
  501. {
  502.     static id; id = pev(ent, pev_owner)
  503.     if(!is_user_alive(id))
  504.         return HAM_IGNORED
  505.     if(!Get_BitVar(g_Had_Base, id))
  506.         return HAM_IGNORED
  507.    
  508.     static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
  509.     static bpammo; bpammo = cs_get_user_bpammo(id, CSW_BASE)
  510.    
  511.     static iClip; iClip = get_pdata_int(ent, 51, 4)
  512.     static fInReload; fInReload = get_pdata_int(ent, 54, 4)
  513.    
  514.     if(fInReload && flNextAttack <= 0.0)
  515.     {
  516.         static temp1
  517.         temp1 = min(CLIP - iClip, bpammo)
  518.  
  519.         set_pdata_int(ent, 51, iClip + temp1, 4)
  520.         cs_set_user_bpammo(id, CSW_BASE, bpammo - temp1)      
  521.        
  522.         set_pdata_int(ent, 54, 0, 4)
  523.        
  524.         fInReload = 0
  525.     }      
  526.    
  527.     return HAM_IGNORED
  528. }
  529.  
  530. public fw_Weapon_Reload(ent)
  531. {
  532.     static id; id = pev(ent, pev_owner)
  533.     if(!is_user_alive(id))
  534.         return HAM_IGNORED
  535.     if(!Get_BitVar(g_Had_Base, id))
  536.         return HAM_IGNORED
  537.  
  538.     g_Clip[id] = -1
  539.        
  540.     static BPAmmo; BPAmmo = cs_get_user_bpammo(id, CSW_BASE)
  541.     static iClip; iClip = get_pdata_int(ent, 51, 4)
  542.        
  543.     if(BPAmmo <= 0)
  544.         return HAM_SUPERCEDE
  545.     if(iClip >= CLIP)
  546.         return HAM_SUPERCEDE      
  547.            
  548.     g_Clip[id] = iClip
  549.    
  550.     return HAM_HANDLED
  551. }
  552.  
  553. public fw_Weapon_Reload_Post(ent)
  554. {
  555.     static id; id = pev(ent, pev_owner)
  556.     if(!is_user_alive(id))
  557.         return HAM_IGNORED
  558.     if(!Get_BitVar(g_Had_Base, id))
  559.         return HAM_IGNORED
  560.    
  561.     if((get_pdata_int(ent, 54, 4) == 1))
  562.     { // Reload
  563.         if(g_Clip[id] == -1)
  564.             return HAM_IGNORED
  565.        
  566.         set_pdata_int(ent, 51, g_Clip[id], 4)
  567.        
  568.         static Reload; Reload = ANIME_RELOAD
  569.         if(Reload != -1) Set_WeaponAnim(id, ANIME_RELOAD)
  570.         Set_PlayerNextAttack(id, RELOAD_TIME)
  571.     }
  572.    
  573.     return HAM_HANDLED
  574. }
  575.  
  576. public fw_Weapon_WeaponIdle_Post( iEnt )
  577. {
  578.     if(pev_valid(iEnt) != 2)
  579.         return
  580.     static Id; Id = get_pdata_cbase(iEnt, 41, 4)
  581.     if(get_pdata_cbase(Id, 373) != iEnt)
  582.         return
  583.     if(!Get_BitVar(g_Had_Base, Id))
  584.         return
  585.        
  586.     static Idle; Idle = ANIME_IDLE
  587.    
  588.     if(Idle != -1 && get_pdata_float(iEnt, 48, 4) <= 0.25)
  589.     {
  590.         Set_WeaponAnim(Id, ANIME_IDLE)
  591.         set_pdata_float(iEnt, 48, 20.0, 4)
  592.     }  
  593. }
  594.  
  595. public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
  596. {
  597.     if(!is_connected(Attacker))
  598.         return HAM_IGNORED
  599.     if(get_player_weapon(Attacker) != CSW_BASE || !Get_BitVar(g_Had_Base, Attacker))
  600.         return HAM_IGNORED
  601.        
  602.     static Float:flEnd[3], Float:vecPlane[3]
  603.        
  604.     get_tr2(Ptr, TR_vecEndPos, flEnd)
  605.     get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)      
  606.            
  607.     Make_BulletHole(Attacker, flEnd, Damage)
  608.     Make_BulletSmoke(Attacker, Ptr)
  609.  
  610.     SetHamParamFloat(3, float(DAMAGE))
  611.    
  612.     return HAM_HANDLED
  613. }
  614.  
  615. public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
  616. {
  617.     if(!is_connected(Attacker))
  618.         return HAM_IGNORED
  619.     if(get_player_weapon(Attacker) != CSW_BASE || !Get_BitVar(g_Had_Base, Attacker))
  620.         return HAM_IGNORED
  621.  
  622.     static Float:flEnd[3]
  623.     get_tr2(Ptr, TR_vecEndPos, flEnd)  
  624.        
  625.     SetHamParamFloat(3, float(DAMAGE))
  626.    
  627.     return HAM_HANDLED
  628. }
  629.  
  630. public fw_Weapon_PrimaryAttack(Ent)
  631. {
  632.     static id; id = pev(Ent, pev_owner)
  633.     if(!is_alive(id))
  634.         return
  635.     if(!Get_BitVar(g_Had_Base, id))
  636.         return
  637.  
  638.     pev(id, pev_punchangle, g_Recoil[id])
  639. }
  640.  
  641. public fw_Weapon_PrimaryAttack_Post(Ent)
  642. {
  643.     static id; id = pev(Ent, pev_owner)
  644.     if(!is_alive(id))
  645.         return
  646.     if(!Get_BitVar(g_Had_Base, id))
  647.         return
  648.  
  649.     static Float:Push[3]
  650.     pev(id, pev_punchangle, Push)
  651.     xs_vec_sub(Push, g_Recoil[id], Push)
  652.    
  653.     xs_vec_mul_scalar(Push, RECOIL, Push)
  654.     xs_vec_add(Push, g_Recoil[id], Push)
  655.    
  656.     set_pev(id, pev_punchangle, Push)
  657.  
  658.     // Acc
  659.     static Accena; Accena = ACCURACY
  660.     if(Accena != -1)
  661.     {
  662.         static Float:Accuracy
  663.         Accuracy = (float(100 - ACCURACY) * 1.5) / 100.0
  664.  
  665.         set_pdata_float(Ent, 62, Accuracy, 4);
  666.     }
  667. }
  668.  
  669. /* ===============================
  670. ------------- SAFETY -------------
  671. =================================*/
  672. public Register_SafetyFunc()
  673. {
  674.     register_event("CurWeapon", "Safety_CurWeapon", "be", "1=1")
  675.    
  676.     RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
  677.     RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
  678. }
  679.  
  680. public Register_SafetyFuncBot(id)
  681. {
  682.     RegisterHamFromEntity(Ham_Spawn, id, "fw_Safety_Spawn_Post", 1)
  683.     RegisterHamFromEntity(Ham_Killed, id, "fw_Safety_Killed_Post", 1)
  684. }
  685.  
  686. public Safety_Connected(id)
  687. {
  688.     Set_BitVar(g_IsConnected, id)
  689.     UnSet_BitVar(g_IsAlive, id)
  690.    
  691.     g_PlayerWeapon[id] = 0
  692. }
  693.  
  694. public Safety_Disconnected(id)
  695. {
  696.     UnSet_BitVar(g_IsConnected, id)
  697.     UnSet_BitVar(g_IsAlive, id)
  698.    
  699.     g_PlayerWeapon[id] = 0
  700. }
  701.  
  702. public Safety_CurWeapon(id)
  703. {
  704.     if(!is_alive(id))
  705.         return
  706.        
  707.     static CSW; CSW = read_data(2)
  708.     if(g_PlayerWeapon[id] != CSW) g_PlayerWeapon[id] = CSW
  709. }
  710.  
  711. public fw_Safety_Spawn_Post(id)
  712. {
  713.     if(!is_user_alive(id))
  714.         return
  715.        
  716.     Set_BitVar(g_IsAlive, id)
  717.    
  718.     if(ma_klase[id]){
  719.     //cod_give_weapon(id, CSW_MP5NAVY)
  720.     Get_Base(id)
  721.     }
  722. }
  723.  
  724. public fw_Safety_Killed_Post(id)
  725. {
  726.     UnSet_BitVar(g_IsAlive, id)
  727. }
  728.  
  729. public is_connected(id)
  730. {
  731.     if(!(1 <= id <= 32))
  732.         return 0
  733.     if(!Get_BitVar(g_IsConnected, id))
  734.         return 0
  735.  
  736.     return 1
  737. }
  738.  
  739. public is_alive(id)
  740. {
  741.     if(!is_connected(id))
  742.         return 0
  743.     if(!Get_BitVar(g_IsAlive, id))
  744.         return 0
  745.        
  746.     return 1
  747. }
  748.  
  749. public get_player_weapon(id)
  750. {
  751.     if(!is_alive(id))
  752.         return 0
  753.    
  754.     return g_PlayerWeapon[id]
  755. }
  756.  
  757. /* ===============================
  758. --------- END OF SAFETY  ---------
  759. =================================*/
  760.  
  761. stock Set_WeaponAnim(id, anim)
  762. {
  763.     set_pev(id, pev_weaponanim, anim)
  764.    
  765.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  766.     write_byte(anim)
  767.     write_byte(pev(id, pev_body))
  768.     message_end()
  769. }
  770.  
  771. stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
  772. {
  773.     // Find target
  774.     static Decal; Decal = random_num(41, 45)
  775.     static LoopTime;
  776.    
  777.     if(Damage > 100.0) LoopTime = 2
  778.     else LoopTime = 1
  779.    
  780.     for(new i = 0; i < LoopTime; i++)
  781.     {
  782.         // Put decal on "world" (a wall)
  783.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  784.         write_byte(TE_WORLDDECAL)
  785.         engfunc(EngFunc_WriteCoord, Origin[0])
  786.         engfunc(EngFunc_WriteCoord, Origin[1])
  787.         engfunc(EngFunc_WriteCoord, Origin[2])
  788.         write_byte(Decal)
  789.         message_end()
  790.        
  791.         // Show sparcles
  792.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  793.         write_byte(TE_GUNSHOTDECAL)
  794.         engfunc(EngFunc_WriteCoord, Origin[0])
  795.         engfunc(EngFunc_WriteCoord, Origin[1])
  796.         engfunc(EngFunc_WriteCoord, Origin[2])
  797.         write_short(id)
  798.         write_byte(Decal)
  799.         message_end()
  800.     }
  801. }
  802.  
  803. stock Make_BulletSmoke(id, TrResult)
  804. {
  805.     static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
  806.    
  807.     get_weapon_attachment(id, vecSrc)
  808.     global_get(glb_v_forward, vecEnd)
  809.    
  810.     xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
  811.     xs_vec_add(vecSrc, vecEnd, vecEnd)
  812.  
  813.     get_tr2(TrResult, TR_vecEndPos, vecSrc)
  814.     get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
  815.    
  816.     xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
  817.     xs_vec_add(vecSrc, vecEnd, vecEnd)
  818.    
  819.     TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
  820.     TE_FLAG |= TE_EXPLFLAG_NOSOUND
  821.     TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
  822.    
  823.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
  824.     write_byte(TE_EXPLOSION)
  825.     engfunc(EngFunc_WriteCoord, vecEnd[0])
  826.     engfunc(EngFunc_WriteCoord, vecEnd[1])
  827.     engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
  828.     write_short(g_SmokePuff_SprId)
  829.     write_byte(2)
  830.     write_byte(50)
  831.     write_byte(TE_FLAG)
  832.     message_end()
  833. }
  834.  
  835. stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
  836. {
  837.     static Float:vfEnd[3], viEnd[3]
  838.     get_user_origin(id, viEnd, 3)  
  839.     IVecFVec(viEnd, vfEnd)
  840.    
  841.     static Float:fOrigin[3], Float:fAngle[3]
  842.    
  843.     pev(id, pev_origin, fOrigin)
  844.     pev(id, pev_view_ofs, fAngle)
  845.    
  846.     xs_vec_add(fOrigin, fAngle, fOrigin)
  847.    
  848.     static Float:fAttack[3]
  849.    
  850.     xs_vec_sub(vfEnd, fOrigin, fAttack)
  851.     xs_vec_sub(vfEnd, fOrigin, fAttack)
  852.    
  853.     static Float:fRate
  854.    
  855.     fRate = fDis / vector_length(fAttack)
  856.     xs_vec_mul_scalar(fAttack, fRate, fAttack)
  857.    
  858.     xs_vec_add(fOrigin, fAttack, output)
  859. }
  860.  
  861. stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
  862. {
  863.     new Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  864.    
  865.     pev(id, pev_origin, vOrigin)
  866.     pev(id, pev_view_ofs,vUp) //for player
  867.     xs_vec_add(vOrigin,vUp,vOrigin)
  868.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  869.    
  870.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
  871.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
  872.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
  873.    
  874.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  875.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  876.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  877. }
  878.  
  879. stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
  880. {
  881.     new_velocity[0] = origin2[0] - origin1[0]
  882.     new_velocity[1] = origin2[1] - origin1[1]
  883.     new_velocity[2] = origin2[2] - origin1[2]
  884.     new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
  885.     new_velocity[0] *= num
  886.     new_velocity[1] *= num
  887.     new_velocity[2] *= num
  888.    
  889.     return 1;
  890. }
  891.  
  892. stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
  893. {
  894.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
  895.     if(!pev_valid(entwpn))
  896.         return
  897.        
  898.     set_pdata_float(entwpn, 46, TimeIdle, 4)
  899.     set_pdata_float(entwpn, 47, TimeIdle, 4)
  900.     set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4)
  901. }
  902.  
  903. stock Set_PlayerNextAttack(id, Float:nexttime)
  904. {
  905.     set_pdata_float(id, 83, nexttime, 5)
  906. }
  907.  
  908. stock Get_Position(id,Float:forw, Float:right, Float:up, Float:vStart[])
  909. {
  910.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  911.    
  912.     pev(id, pev_origin, vOrigin)
  913.     pev(id, pev_view_ofs,vUp) //for player
  914.     xs_vec_add(vOrigin,vUp,vOrigin)
  915.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  916.    
  917.     angle_vector(vAngle,ANGLEVECTOR_FORWARD,vForward) //or use EngFunc_AngleVectors
  918.     angle_vector(vAngle,ANGLEVECTOR_RIGHT,vRight)
  919.     angle_vector(vAngle,ANGLEVECTOR_UP,vUp)
  920.    
  921.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  922.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  923.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  924. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement