MasamuneDate

Earth Guardian

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