Dabar yra 2020 Sau 21 02:43




 Puslapis 11 [ 1 pranešimas ] 
Autorius Žinutė
 Pranešimo tema: zp extra items
Žinutės numeris: #1  StandartinėParašytas: 2020 Sau 05 02:13 
Jau po truputį tampa savu

Užsiregistravo: 2015 Gru 24 14:55
Pranešimai: 163
Karma: 7

Miestas: Kaunas
Iskilo problema kad plante ikirtus i deze ji sprogsta ir kartu mane uzmusa, reiktu kad dezes nesprogtu

  1. /* Plugin generated by AMXX-Studio */
  2. #pragma compress 1
  3.  
  4. #include <amxmodx>
  5. #include <engine>
  6. #include <fakemeta>
  7. #include <fakemeta_util>
  8. #include <hamsandwich>
  9. #include <xs>
  10. #include <zombieplague>
  11.  
  12. #define PLUGIN "CSO Dual Sword Phantom Slayer"
  13. #define VERSION "1.0"
  14. #define AUTHOR "Natasha aka Asdian"
  15.  
  16. #define CSW_DPS CSW_KNIFE
  17. #define weapon_dps "weapon_knife"
  18.  
  19. #define v_model "models/v_dualsword.mdl"
  20. #define p_model "models/p_dualsword_a.mdl"
  21. #define p_model2 "models/p_dualsword_b.mdl"
  22. #define spr_wpn "knife_dualsword"
  23.  
  24. new const weapon_sound[][] =
  25. {
  26.     "weapons/dualsword_stab1.wav",              // 0
  27.     "weapons/dualsword_stab2.wav",              // 1
  28.     "weapons/dualsword_stab1_hit.wav",          // 2
  29.     "weapons/dualsword_stab2_hit.wav",          // 3
  30.     "weapons/katanad_hitwall.wav",              // 4
  31.    
  32.     "weapons/dualsword_slash_1.wav",            // 5
  33.     "weapons/dualsword_slash_2.wav",            // 6
  34.     "weapons/dualsword_slash_3.wav",            // 7
  35.     "weapons/dualsword_slash_4.wav",            // 8
  36.     "weapons/dualsword_hit1.wav",               // 9
  37.     "weapons/dualsword_hit2.wav",               // 10
  38.     "weapons/dualsword_hit3.wav",               // 11
  39.     "weapons/dualsword_slash_4_1.wav",          // 12
  40.     "weapons/dualsword_slash_4_2.wav",          // 13
  41.     "weapons/dualsword_skill_end.wav",          // 14
  42.    
  43.     "weapons/dualsword_fly1.wav",               // 15
  44.     "weapons/dualsword_fly2.wav",               // 16
  45.     "weapons/dualsword_fly3.wav",               // 17
  46.     "weapons/dualsword_fly4.wav",               // 18
  47.     "weapons/dualsword_fly5.wav",               // 19
  48.     "weapons/dualsword_skill_start.wav"
  49. }
  50.  
  51. //Hit
  52. #define RESULT_HIT_NONE             0
  53. #define RESULT_HIT_PLAYER           1
  54. #define RESULT_HIT_WORLD            2
  55.  
  56. enum _:WpnAnim
  57. {
  58.     ANIM_IDLEA = 0,
  59.     ANIM_SLASH1,
  60.     ANIM_SLASH2,
  61.     ANIM_SLASH3,
  62.     ANIM_SLASH4,
  63.     ANIM_SLASHEND,
  64.     ANIM_DRAWA,
  65.     ANIM_IDLEB,
  66.     ANIM_STAB1,
  67.     ANIM_STAB2,
  68.     ANIM_STABEND,
  69.     ANIM_DRAWB
  70. }
  71.  
  72. new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
  73. new ef_sakura[4]
  74. new Float:g_Sound[33]
  75.  
  76. new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
  77. new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
  78. new cvar_damage_special, cvar_special_range
  79. new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr
  80.  
  81. public plugin_init()
  82. {
  83.     register_plugin(PLUGIN, VERSION, AUTHOR)
  84.    
  85.     register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
  86.     register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
  87.     register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
  88.     register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);
  89.  
  90.     register_think("dps_entytyd", "Fw_DPSEnt_Think")
  91.    
  92.     RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
  93.    
  94.     g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 0, ZP_TEAM_HUMAN)
  95.     register_clcmd(spr_wpn, "hook_rb")
  96.    
  97.     cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
  98.     cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
  99.     cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
  100.     cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
  101.     cvar_slash_radius = register_cvar("dps_slashradius","120.0")
  102.     cvar_slash_range = register_cvar("dps_slashrange","95.0")
  103.    
  104.     cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
  105.     cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
  106.     cvar_stab_radius = register_cvar("dps_stabradius","90.0")
  107.     cvar_stab_range = register_cvar("dps_stabrange","150.0")
  108.    
  109.     cvar_damage_special = register_cvar("dps_specialdamage","95.0")
  110.     cvar_special_range = register_cvar("dps_specialrange","120.0")
  111.    
  112.     cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
  113.     cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
  114.     cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
  115.    
  116.     cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
  117.     cvar_remove = register_cvar("dps_remove_onnewround", "0")
  118.     cvar_spr = register_cvar("dps_enable_sprites", "1")
  119.    
  120.     g_dps = zp_register_extra_item("Dual Sword Phantom Slayer", 10, ZP_TEAM_HUMAN)
  121. }
  122.  
  123. public plugin_precache()
  124. {
  125.     precache_model(v_model)
  126.     precache_model(p_model)
  127.     precache_model(p_model2)
  128.    
  129.     for(new i = 0; i < sizeof(weapon_sound); i++)
  130.         precache_sound(weapon_sound[i])
  131.    
  132.     precache_model("models/dualswordfx.mdl")
  133.     precache_model("models/dualsword_skill.mdl")
  134.     precache_model("models/dualsword_skillfx1.mdl")
  135.     precache_model("models/dualsword_skillfx2.mdl")
  136.    
  137.     ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
  138.     ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
  139.     ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
  140.     ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
  141.    
  142.     new Txt[32]
  143.     format(Txt, 31, "sprites/%s.txt", spr_wpn)
  144.     engfunc(EngFunc_PrecacheGeneric, Txt)
  145. }
  146.  
  147. public zp_extra_item_selected(i, d) if(d == g_dps) get_dps(i)
  148. public zp_user_infected_post(i) remove_dps(i)
  149. public zp_user_humanized_post(i) remove_dps(i)
  150.  
  151. public hook_rb(id)
  152. {
  153.     engclient_cmd(id, weapon_dps)
  154.     return PLUGIN_HANDLED
  155. }
  156.  
  157. public get_dps(id)
  158. {
  159.     if (!is_user_alive(id))
  160.         return
  161.  
  162.     g_had_dps[id] = 1
  163.     g_mode[id] = 0
  164.     g_slashend[id] = 0
  165.     g_check[id] = 0
  166.     g_soundmode[id] = 0
  167.    
  168.     fm_give_item(id, weapon_dps)
  169.    
  170.     if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
  171.     else engclient_cmd(id,weapon_dps)
  172. }
  173.  
  174. public client_connect(id) remove_dps(id)
  175. public client_disconnect(id) remove_dps(id)
  176.  
  177. public Event_NewRound()
  178. {
  179.     if(!get_pcvar_num(cvar_remove))
  180.         return
  181.    
  182.     for(new i = 0; i < get_maxplayers(); i++)
  183.         remove_dps(i)
  184. }
  185.  
  186. public remove_dps(id)
  187. {
  188.     g_had_dps[id] = 0
  189.     g_slashend[id] = 0
  190.     g_check[id] = 0
  191.    
  192.     static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
  193.     if(!pev_valid(iEnt)) return
  194.    
  195.     set_pev(iEnt, pev_iuser1, 0)
  196.     set_pev(iEnt, pev_iuser2, 0)
  197.     set_pev(iEnt, pev_iuser3, 0)
  198.     set_pev(iEnt, pev_iuser4, 0)
  199.     set_pev(iEnt, pev_fuser1, 0.0)
  200. }
  201.  
  202. public Event_CurWeapon(id)
  203. {
  204.     if(!is_user_alive(id))
  205.         return 1
  206.     if(get_user_weapon(id) != CSW_DPS)
  207.         return 1
  208.     if(!g_had_dps[id])
  209.         return 1
  210.     if(zp_get_user_zombie(id))
  211.         return 1
  212.        
  213.     set_pev(id, pev_viewmodel2, v_model)
  214.     set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
  215.    
  216.     Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
  217.    
  218.     static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
  219.     if(!pev_valid(iEnt)) return 1
  220.    
  221.     set_pev(iEnt, pev_iuser1, 0)
  222.     set_pev(iEnt, pev_iuser2, 0)
  223.     set_pev(iEnt, pev_iuser3, 0)
  224.     set_pev(iEnt, pev_iuser4, 0)
  225.     set_pev(iEnt, pev_fuser1, 0.0)
  226.        
  227.     g_slashend[id] = 0
  228.     g_check[id] = 0
  229.    
  230.     set_pdata_float(id, 83, 0.23)
  231.     set_pdata_float(iEnt, 46, 0.25);
  232.     set_pdata_float(iEnt, 47, 0.25);
  233.     set_pdata_float(iEnt, 48, 0.25);
  234.    
  235.     if(get_pcvar_num(cvar_spr))
  236.     {
  237.         message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
  238.         write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
  239.         write_byte(-1)
  240.         write_byte(-1)
  241.         write_byte(-1)
  242.         write_byte(-1)
  243.         write_byte(2)
  244.         write_byte(1)
  245.         write_byte(CSW_DPS)
  246.         write_byte(0)
  247.         message_end()
  248.     }
  249.     return 0
  250. }
  251.  
  252. public message_DeathMsg(msg_id, msg_dest, msg_ent)
  253. {
  254.     new szWeapon[64]
  255.     get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
  256.    
  257.     if (strcmp(szWeapon, "knife"))
  258.         return PLUGIN_CONTINUE
  259.  
  260.     new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
  261.     if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
  262.         return PLUGIN_CONTINUE
  263.  
  264.     set_msg_arg_string(4, "dualsword")
  265.     return PLUGIN_CONTINUE
  266. }
  267.  
  268. public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
  269. {
  270.     if (!pev_valid(iEnt))
  271.         return;
  272.     if (pev(iEnt, pev_flags) & FL_KILLME)
  273.         return;
  274.  
  275.     new classname[32];
  276.     pev(iEnt, pev_classname, classname, 31);
  277.  
  278.     if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
  279.     {
  280.         if (iHost != pev(iEnt, pev_owner))
  281.             set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
  282.     }
  283. }
  284.  
  285. public Fw_DPSEnt_Think(iEnt)
  286. {
  287.     if(!pev_valid(iEnt))
  288.         return
  289.    
  290.     new iOwner
  291.     iOwner = pev(iEnt, pev_owner)
  292.    
  293.     if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || zp_get_user_zombie(iOwner))
  294.     {
  295.         remove_entity(iEnt)
  296.         g_soundmode[iOwner] = 0
  297.         return
  298.     }
  299.    
  300.     if(!Get_Entity_Mode(iEnt))
  301.     {
  302.         new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
  303.         iWpn = pev(iEnt, pev_iuser1)
  304.         iState = pev(iWpn, pev_iuser4)
  305.         Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
  306.        
  307.         pev(iOwner, pev_v_angle, vecAngle);
  308.         vecAngle[0] = -vecAngle[0];
  309.        
  310.         set_pev(iEnt, pev_origin, vecOrigin);
  311.         set_pev(iEnt, pev_angles, vecAngle);
  312.        
  313.         if(!iState || get_user_weapon(iOwner) != CSW_DPS)
  314.         {
  315.             new Float:fRenderAmount;
  316.             pev(iEnt, pev_renderamt, fRenderAmount);
  317.  
  318.             fRenderAmount -= 4.5;
  319.  
  320.             if (fRenderAmount <= 5.0)
  321.             {
  322.                 remove_entity(iEnt);
  323.                 return;
  324.             }
  325.             set_pev(iEnt, pev_renderamt, fRenderAmount);
  326.         }
  327.     }
  328.    
  329.     if(Get_Entity_Mode(iEnt) == 1)
  330.     {
  331.         set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
  332.    
  333.         static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
  334.         Origin[2] -= 25.0
  335.        
  336.         Stock_Hook_Ent(iEnt, Origin, 0.01)
  337.        
  338.         if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
  339.         {
  340.             set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
  341.             return
  342.         }
  343.            
  344.         set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
  345.         set_pev(iEnt, pev_origin, Origin);
  346.     }
  347.    
  348.     if(Get_Entity_Mode(iEnt) == 2)
  349.     {
  350.         new Float:vecOrigin[3]
  351.         GetGunPosition(iOwner, vecOrigin);
  352.        
  353.         new Float:fOldOrigin[3];
  354.         pev(iEnt, pev_oldorigin, fOldOrigin);
  355.        
  356.         new Float:vecNewOrigin[3];
  357.         pev(iEnt, pev_origin, vecNewOrigin);
  358.        
  359.         new Float:vecfff[3];
  360.         xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
  361.         xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
  362.        
  363.         set_pev(iEnt, pev_origin, vecNewOrigin);
  364.         set_pev(iEnt, pev_oldorigin, vecOrigin);
  365.        
  366.         if (pev(iEnt, pev_iuser1) == 2)
  367.         {
  368.             new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
  369.             if (fDist > 175.0 * 0.5)
  370.             {
  371.                 remove_entity(iEnt);
  372.                 return;
  373.             }
  374.         }
  375.        
  376.         if(g_Sound[iOwner] < get_gametime())
  377.         {
  378.             if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  379.             if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  380.             if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  381.             if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  382.            
  383.             g_soundmode[iOwner]++
  384.             if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
  385.            
  386.             g_Sound[iOwner] = get_gametime()+0.088;
  387.         }
  388.     }
  389.     set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
  390.    
  391.     if(Get_Entity_Mode(iEnt) == 2)
  392.     {
  393.         new Float:fTimeLast;
  394.         pev(iEnt, pev_fuser1, fTimeLast);
  395.        
  396.         if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
  397.         {
  398.             if (pev(iEnt, pev_iuser1) == 1)
  399.             {
  400.                 new Float:fRenderAmount;
  401.                 pev(iEnt, pev_renderamt, fRenderAmount);
  402.                 fRenderAmount -= 7.5;
  403.                
  404.                 if (fRenderAmount <= 5.0)
  405.                 {
  406.                     remove_entity(iEnt);
  407.                     return;
  408.                 }
  409.                 set_pev(iEnt, pev_renderamt, fRenderAmount);
  410.             } else remove_entity(iEnt);
  411.            
  412.             g_soundmode[iOwner] = 0
  413.         }
  414.     }
  415. }
  416.  
  417. public fw_Item_PostFrame(ent)
  418. {
  419.     new id = pev(ent, pev_owner)
  420.    
  421.     if(!is_user_connected(id))
  422.         return HAM_IGNORED
  423.     if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
  424.         return HAM_IGNORED
  425.  
  426.     if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
  427.     {
  428.         if(g_check[id] < 6) g_check[id] = 0
  429.         set_pev(ent, pev_iuser3, 0)
  430.         Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
  431.         set_pdata_float(ent, 48, 4.03, 4)
  432.     }
  433.    
  434.     new iButton = pev(id,pev_button)
  435.     return AurezBotac(id, ent, iButton)
  436. }
  437.  
  438. public AurezBotac(id, iEnt, iButton)
  439. {
  440.     new iState = pev(iEnt, pev_iuser3)
  441.     new iState2 = pev(iEnt, pev_iuser2)
  442.     new iSlash = pev(iEnt, pev_iuser4)
  443.     new Float:fSound; pev(iEnt, pev_fuser1, fSound)
  444.     new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
  445.    
  446.     if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
  447.     {
  448.         if(!iState || iState == 1)
  449.         {
  450.             Set_WeaponAnim(id, ANIM_STABEND)
  451.             set_pev(iEnt, pev_iuser2, 0)
  452.             set_pdata_float(iEnt, 48, 1.45,4)
  453.         }
  454.     }
  455.    
  456.     if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
  457.     {
  458.         Set_WeaponAnim(id, ANIM_SLASHEND)
  459.         set_pdata_float(iEnt, 48, 2.03,4)
  460.         g_slashend[id] = 0
  461.     }
  462.    
  463.     if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
  464.     {
  465.         new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
  466.         new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
  467.        
  468.         new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
  469.         switch (iHitResult)
  470.         {
  471.             case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
  472.             case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
  473.         }
  474.         set_pev(iEnt, pev_iuser1, 0);
  475.     }
  476.    
  477.     if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
  478.     {
  479.         set_pev(iEnt, pev_iuser4, 1 + iSlash)
  480.         Set_WeaponAnim(id, 1 + iSlash)
  481.        
  482.         set_pdata_float(id, 83, 0.06)
  483.        
  484.         if(!get_pcvar_num(cvar_fast_attack))
  485.             set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
  486.        
  487.         set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
  488.         set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
  489.          
  490.         set_pev(iEnt, pev_iuser1, 1)
  491.         set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
  492.         SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
  493.         Create_Slash(id,iEnt,iSlash)
  494.        
  495.         if(iSlash == 3)
  496.         {
  497.             g_slashend[id] = 1
  498.            
  499.             set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
  500.             set_pev(iEnt, pev_iuser4, 0)
  501.         }
  502.     }
  503.    
  504.     if(fSound && fSound < get_gametime())
  505.     {
  506.         SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
  507.         set_pev(iEnt, pev_fuser1, 0.0)
  508.        
  509.         if(g_check[id] == 5)
  510.         {
  511.             Set_WeaponAnim(id, 14)
  512.             SendSound(id,CHAN_ITEM,weapon_sound[20])
  513.             g_check[id] = 6
  514.            
  515.             set_pdata_float(iEnt, 46, 1.03,4)
  516.             set_pdata_float(iEnt, 47, 1.03,4)
  517.             set_pdata_float(iEnt, 48, 1.03,4)
  518.            
  519.             set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
  520.             DPS_Special(id, 0, 2.0)
  521.         }
  522.     }
  523.    
  524.     if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
  525.     {
  526.         set_pdata_float(iEnt, 46, 11.36,4)
  527.         set_pdata_float(iEnt, 47, 11.36,4)
  528.         set_pdata_float(iEnt, 48, 11.36,4)
  529.        
  530.         g_check[id] = 7
  531.         set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
  532.         Set_WeaponAnim(id, 15)
  533.     }
  534.    
  535.     // NANI?!
  536.     if(g_check[id] == 7 && fSound && fSound < get_gametime())
  537.     {
  538.         SendSound(id,CHAN_VOICE,weapon_sound[14])
  539.         set_pev(iEnt, pev_fuser1, 0.0)
  540.         g_check[id] = 0
  541.        
  542.         DPS_Special(id, 1, 1.46)
  543.     }
  544.    
  545.     DPS_RealSpecial(id, iEnt, fRange)
  546.    
  547.     if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
  548.     {
  549.         g_mode[id] = 0
  550.         g_slashend[id] = 0
  551.        
  552.         set_pev(iEnt, pev_iuser2, 1)
  553.         set_pev(iEnt, pev_iuser4, 0)
  554.        
  555.         switch(iState)
  556.         {
  557.             case 0:
  558.             {
  559.                 set_pdata_float(id, 83, 0.16)
  560.                 set_pdata_float(iEnt, 46, 0.4,4);
  561.                
  562.                 if(!get_pcvar_num(cvar_fast_attack))
  563.                     set_pdata_float(iEnt, 47, 0.4,4);
  564.                    
  565.                 set_pdata_float(iEnt, 48, 1.0,4);
  566.                
  567.                 set_pev(iEnt, pev_iuser1, 1)
  568.                 set_pev(iEnt, pev_iuser3, 1)
  569.                 set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
  570.                
  571.                 Set_WeaponAnim(id, ANIM_STAB1)
  572.                 SendSound(id, CHAN_WEAPON, weapon_sound[0])
  573.                
  574.                 if(!g_check[id]) g_check[id] = 1
  575.                 else if(g_check[id] == 2) g_check[id] = 3
  576.                 else g_check[id] = 0
  577.             }
  578.             case 1:
  579.             {
  580.                 set_pdata_float(id, 83, 0.16)
  581.                 set_pdata_float(iEnt, 46, 0.83,4);
  582.                
  583.                 if(!get_pcvar_num(cvar_fast_attack))
  584.                     set_pdata_float(iEnt, 47, 0.83,4);
  585.                
  586.                 set_pdata_float(iEnt, 48, 1.5,4);
  587.                
  588.                 set_pev(iEnt, pev_iuser1, 1)
  589.                 set_pev(iEnt, pev_iuser3, 0)
  590.                 set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
  591.                
  592.                 Set_WeaponAnim(id, ANIM_STAB2)
  593.                 SendSound(id, CHAN_WEAPON, weapon_sound[1])
  594.                
  595.                 if(g_check[id] == 3) g_check[id] = 4
  596.                 else g_check[id] = 0
  597.             }
  598.         }
  599.     }
  600.    
  601.     if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
  602.     {
  603.         g_mode[id] = 1
  604.        
  605.         set_pdata_float(id, 83, 0.04)
  606.        
  607.         if(!get_pcvar_num(cvar_fast_attack))
  608.             set_pdata_float(iEnt, 46, 0.13,4);
  609.        
  610.         set_pdata_float(iEnt, 47, 0.13,4);
  611.         set_pdata_float(iEnt, 48, 0.5,4);
  612.        
  613.         set_pev(iEnt, pev_iuser1, 1)
  614.         set_pev(iEnt, pev_iuser2, 0)
  615.         set_pev(iEnt, pev_iuser3, 0)
  616.         set_pev(iEnt, pev_iuser4, 1)
  617.         set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
  618.        
  619.         Set_WeaponAnim(id, ANIM_SLASH1)
  620.         SendSound(id, CHAN_WEAPON, weapon_sound[5])
  621.        
  622.         Create_Slash(id,iEnt,0)
  623.        
  624.         if(g_check[id] == 1) g_check[id] = 2
  625.         else if(g_check[id] == 4) g_check[id] = 5
  626.         else g_check[id] = 0
  627.     }
  628.    
  629.     iButton &= ~IN_ATTACK;
  630.     iButton &= ~IN_ATTACK2;
  631.     set_pev(id, pev_button, iButton);
  632.     return HAM_IGNORED
  633. }
  634.  
  635. stock Create_Slash(id,iEnt,seq)
  636. {
  637.     new Float:vecOrigin[3], Float:vecAngle[3];
  638.     GetGunPosition(id, vecOrigin);
  639.     pev(id, pev_v_angle, vecAngle);
  640.     vecAngle[0] = -vecAngle[0];
  641.    
  642.     new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
  643.        
  644.     // Set info for ent 
  645.     Set_Entity_Mode(pEntity, 0)
  646.     set_pev(pEntity, pev_scale, 0.1);
  647.     set_pev(pEntity, pev_iuser1, iEnt);
  648.     set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
  649.     set_pev(pEntity, pev_angles, vecAngle);
  650.     set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
  651. }
  652.  
  653. stock DPS_Special(id, seq, Float:fTime)
  654. {
  655.     new Float:VecOrig[3], Float:VecAng[3]
  656.     pev(id, pev_origin, VecOrig)
  657.     pev(id, pev_angles, VecAng)
  658.    
  659.     new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  660.     set_pev(iEfx, pev_classname, "dps_entytyd");
  661.     set_pev(iEfx, pev_origin, VecOrig)
  662.     set_pev(iEfx, pev_frame, 0.0)
  663.     set_pev(iEfx, pev_animtime, get_gametime())
  664.     set_pev(iEfx, pev_framerate, 1.0)
  665.     set_pev(iEfx, pev_sequence, seq)
  666.     engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
  667.     dllfunc(DLLFunc_Spawn, iEfx)
  668.     Set_Entity_Mode(iEfx, 1)
  669.     set_pev(iEfx, pev_angles, VecAng)
  670.     set_pev(iEfx, pev_solid, SOLID_NOT)
  671.     set_pev(iEfx, pev_owner, id)
  672.     set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
  673.     set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
  674.     set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
  675. }
  676.  
  677. stock DPS_RealSpecial(id, iEnt, Float:fRange)
  678. {
  679.     new Float:fTimeEffect;
  680.     pev(iEnt, pev_fuser4, fTimeEffect);
  681.    
  682.     if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
  683.     {
  684.         KnifeAttack_Global(id, false, get_pcvar_float(cvar_special_range)*2.0, 180.0, get_pcvar_float(cvar_damage_special), get_pcvar_float(cvar_knockback[2]))
  685.            
  686.         new Float:vecOrigin3[2][3], Float:vecOrigin[3];
  687.         pev(id, pev_origin, vecOrigin3[0]);
  688.         pev(id, pev_origin, vecOrigin);
  689.         xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
  690.        
  691.         new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
  692.         vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
  693.        
  694.         switch (random(3))
  695.         {
  696.             case 0:
  697.             {
  698.                 vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
  699.                 vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
  700.                
  701.                 vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
  702.                 vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
  703.             }
  704.             case 1:
  705.             {
  706.                 vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
  707.                 vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
  708.                
  709.                 vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
  710.                 vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
  711.             }
  712.             case 2:
  713.             {
  714.                 vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
  715.                 vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
  716.                
  717.                 vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
  718.                 vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
  719.             }
  720.             case 3:
  721.             {
  722.                 vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
  723.                 vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
  724.                
  725.                 vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
  726.                 vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
  727.             }
  728.         }
  729.        
  730.         if (random_num(0,9) > 8)
  731.         {
  732.             new Float:vecAngle2[3];
  733.             vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
  734.             vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
  735.            
  736.             new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0) 
  737.             set_pev(pEntity, pev_angles, vecAngle2);
  738.             set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
  739.             set_pev(pEntity, pev_iuser1, 1);
  740.             set_pev(pEntity, pev_iuser2, iEnt);
  741.             set_pev(pEntity, pev_frame, 0.0);
  742.             Set_Entity_Mode(pEntity, 2)
  743.             set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
  744.             set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
  745.             set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
  746.             set_pev(pEntity, pev_oldorigin, vecOrigin);
  747.             set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
  748.         }
  749.        
  750.         new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0) 
  751.         set_pev(pEntity, pev_iuser1, 2);
  752.         set_pev(pEntity, pev_iuser2, iEnt);
  753.         Set_Entity_Mode(pEntity, 2)
  754.         set_pev(pEntity, pev_frame, 0.0);
  755.         set_pev(pEntity, pev_oldorigin, vecOrigin);
  756.         set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
  757.         set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
  758.         set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
  759.         set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
  760.        
  761.         set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
  762.     }
  763. }
  764.  
  765. stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
  766. {
  767.     new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
  768.        
  769.     // Set info for ent 
  770.     set_pev(pEntity, pev_movetype, move);
  771.     set_pev(pEntity, pev_owner, id);
  772.     engfunc(EngFunc_SetModel, pEntity, models);
  773.     set_pev(pEntity, pev_classname, "dps_entytyd");
  774.     set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
  775.     set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
  776.     set_pev(pEntity, pev_origin, Start);
  777.     set_pev(pEntity, pev_gravity, 0.01);
  778.     set_pev(pEntity, pev_solid, solid);
  779.    
  780.     static Float:Velocity[3];
  781.     Stock_Get_Speed_Vector(Start, End, speed, Velocity);
  782.     set_pev(pEntity, pev_velocity, Velocity);
  783.  
  784.     new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
  785.     vector_to_angle(Velocity, vecVAngle)
  786.    
  787.     if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
  788.     set_pev(pEntity, pev_angles, vecVAngle);
  789.    
  790.     set_pev(pEntity, pev_rendermode, kRenderTransAdd);
  791.     set_pev(pEntity, pev_renderamt, 255.0);
  792.     set_pev(pEntity, pev_sequence, seq)
  793.     set_pev(pEntity, pev_animtime, get_gametime());
  794.     set_pev(pEntity, pev_framerate, 1.0)
  795.     return pEntity;
  796. }
  797.  
  798. stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
  799. stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)
  800.  
  801. stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  802.  
  803. stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
  804. {
  805.     xs_vec_sub(origin2, origin1, new_velocity)
  806.     new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
  807.     xs_vec_mul_scalar(new_velocity, num, new_velocity)
  808. }
  809. stock GetGunPosition(id, Float:vecSrc[3])
  810. {
  811.     new Float:vecViewOfs[3];
  812.     pev(id, pev_origin, vecSrc);
  813.     pev(id, pev_view_ofs, vecViewOfs);
  814.     xs_vec_add(vecSrc, vecViewOfs, vecSrc);
  815. }
  816. stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
  817. {
  818.     new iHitResult
  819.     if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
  820.     else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)
  821.  
  822.     return iHitResult
  823. }
  824.  
  825. stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
  826. {
  827.     new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
  828.     GetGunPosition(id, vecSrc);
  829.  
  830.     pev(id, pev_v_angle, v_angle);
  831.     engfunc(EngFunc_MakeVectors, v_angle);
  832.  
  833.     global_get(glb_v_forward, vecForward);
  834.     xs_vec_mul_scalar(vecForward, flRange, vecForward);
  835.     xs_vec_add(vecSrc, vecForward, vecEnd);
  836.  
  837.     new tr = create_tr2();
  838.     engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
  839.  
  840.     new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
  841.     if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
  842.    
  843.     get_tr2(tr, TR_flFraction, flFraction);
  844.  
  845.     new iHitResult = RESULT_HIT_NONE;
  846.    
  847.     if (flFraction < 1.0)
  848.     {
  849.         new pEntity = get_tr2(tr, TR_pHit);
  850.         iHitResult = RESULT_HIT_WORLD;
  851.        
  852.         if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
  853.         {
  854.             if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
  855.                 flDamage *= 1.0;
  856.  
  857.             iHitResult = RESULT_HIT_PLAYER;
  858.         }
  859.  
  860.         if (pev_valid(pEntity))
  861.         {
  862.             engfunc(EngFunc_MakeVectors, v_angle);
  863.             global_get(glb_v_forward, vecForward);
  864.  
  865.             if (iHitgroup != -1)
  866.                 set_tr2(tr, TR_iHitgroup, iHitgroup);
  867.  
  868.             ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
  869.             ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
  870.             Stock_Fake_KnockBack(id, pEntity, flKnockBack)
  871.            
  872.             if (IsAlive(pEntity))
  873.             {
  874.                 free_tr2(tr);
  875.                 return iHitResult;
  876.             }
  877.         }
  878.     }
  879.     free_tr2(tr);
  880.     return iHitResult;
  881. }
  882.  
  883. stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
  884. {
  885.     new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
  886.     pev(id, pev_origin, vecOrigin);
  887.  
  888.     new iHitResult = RESULT_HIT_NONE;
  889.     GetGunPosition(id, vecSrc);
  890.  
  891.     pev(id, pev_v_angle, v_angle);
  892.     engfunc(EngFunc_MakeVectors, v_angle);
  893.  
  894.     global_get(glb_v_forward, vecForward);
  895.     xs_vec_mul_scalar(vecForward, flRange, vecForward);
  896.     xs_vec_add(vecSrc, vecForward, vecEnd);
  897.  
  898.     new tr = create_tr2();
  899.     engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
  900.    
  901.     new Float:EndPos2[3]
  902.     get_tr2(tr, TR_vecEndPos, EndPos2)
  903.    
  904.     new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
  905.     if (flFraction < 1.0)
  906.     {
  907.         iHitResult = RESULT_HIT_WORLD;
  908.         if(bStab) Stock_SakuraEffect(id, EndPos2)
  909.     }
  910.    
  911.     new Float:vecEndZ = vecEnd[2];
  912.    
  913.     new pEntity = -1;
  914.     while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
  915.     {
  916.         if (!pev_valid(pEntity))
  917.             continue;
  918.         if (id == pEntity)
  919.             continue;
  920.         if (!IsAlive(pEntity))
  921.             continue;
  922.         if (!CheckAngle(id, pEntity, fAngle))
  923.             continue;
  924.  
  925.         GetGunPosition(id, vecSrc);
  926.         Stock_Get_Origin(pEntity, vecEnd);
  927.  
  928.         vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
  929.  
  930.         xs_vec_sub(vecEnd, vecSrc, vecForward);
  931.         xs_vec_normalize(vecForward, vecForward);
  932.         xs_vec_mul_scalar(vecForward, flRange, vecForward);
  933.         xs_vec_add(vecSrc, vecForward, vecEnd);
  934.  
  935.         engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
  936.         get_tr2(tr, TR_flFraction, flFraction);
  937.  
  938.         if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
  939.         get_tr2(tr, TR_flFraction, flFraction);
  940.  
  941.         if (flFraction < 1.0)
  942.         {
  943.             if (IsPlayer(pEntity) || IsHostage(pEntity))
  944.             {
  945.                 iHitResult = RESULT_HIT_PLAYER;
  946.                 if(bStab) Stock_SakuraEffect(id, vecEnd)
  947.                
  948.                 if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
  949.                     flDamage *= 1.0;
  950.             }
  951.  
  952.             if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
  953.             {
  954.                 engfunc(EngFunc_MakeVectors, v_angle);
  955.                 global_get(glb_v_forward, vecForward);
  956.  
  957.                 if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
  958.  
  959.                 ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
  960.                 ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
  961.                
  962.                 Stock_Fake_KnockBack(id, pEntity, flKnockBack)
  963.             }
  964.         }
  965.         free_tr2(tr);
  966.     }
  967.     return iHitResult;
  968. }
  969.  
  970. stock Set_WeaponAnim(id, anim)
  971. {
  972.     set_pev(id, pev_weaponanim, anim)
  973.    
  974.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
  975.     write_byte(anim)
  976.     write_byte(pev(id, pev_body))
  977.     message_end()
  978. }
  979.  
  980. stock Stock_Set_Vis(iEnt, iVis = 1)
  981.     set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)
  982.  
  983. stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
  984. {
  985.     static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
  986.     pev(ent, pev_origin, EntOrigin)
  987.    
  988.     if(!mode)
  989.     {
  990.         distance_f = get_distance_f(EntOrigin, TargetOrigin)
  991.         fl_Time = distance_f / Speed
  992.            
  993.         pev(ent, pev_velocity, fl_Velocity)
  994.            
  995.         fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
  996.         fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
  997.         fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time
  998.  
  999.         if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
  1000.         else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
  1001.     } else {
  1002.         static Float:fl_EntVelocity[3], Float:fl_Acc[3]
  1003.         Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
  1004.         xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
  1005.        
  1006.         for(new i =0; i<3; i++)
  1007.         {
  1008.             if(fl_Velocity[i] > fl_EntVelocity[i])
  1009.             {
  1010.                 fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
  1011.                 fl_Acc[i] = floatmin(70.0, fl_Acc[i])
  1012.                 fl_EntVelocity[i] += fl_Acc[i]
  1013.             }
  1014.             else if(fl_Velocity[i] < fl_EntVelocity[i])
  1015.             {
  1016.                 fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
  1017.                 fl_Acc[i] = floatmin(70.0, fl_Acc[i])
  1018.                 fl_EntVelocity[i] -= fl_Acc[i]
  1019.             }
  1020.         }
  1021.         set_pev(ent, pev_velocity, fl_EntVelocity)
  1022.     }
  1023. }
  1024.  
  1025. stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
  1026. {   
  1027.     new Float:v3[3],i
  1028.     for(i=0;i<3;i++) v3[i]=start[i]-end[i]
  1029.  
  1030.     new Float:vl = vector_length(v3)
  1031.     for(i=0;i<3;i++) reOri[i] = v3[i] / vl
  1032. }
  1033.  
  1034. stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
  1035. {
  1036.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  1037.     pev(id, pev_origin, vOrigin)
  1038.     pev(id, pev_view_ofs,vUp)
  1039.     xs_vec_add(vOrigin,vUp,vOrigin)
  1040.     pev(id, pev_v_angle, vAngle)
  1041.    
  1042.     engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
  1043.    
  1044.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  1045.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  1046.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  1047. }
  1048.  
  1049. stock IsPlayer(pEntity) return is_user_connected(pEntity)
  1050.  
  1051. stock IsHostage(pEntity)
  1052. {
  1053.     new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
  1054.     return equal(classname, "hostage_entity")
  1055. }
  1056.  
  1057. stock IsAlive(pEntity)
  1058. {
  1059.     if (pEntity < 1) return 0
  1060.     return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
  1061. }
  1062.  
  1063. stock CheckBack(iEnemy,id)
  1064. {
  1065.     new Float:anglea[3], Float:anglev[3]
  1066.     pev(iEnemy, pev_v_angle, anglea)
  1067.     pev(id, pev_v_angle, anglev)
  1068.     new Float:angle = anglea[1] - anglev[1]
  1069.     if (angle < -180.0) angle += 360.0
  1070.     if (angle <= 45.0 && angle >= -45.0) return 1
  1071.     return 0
  1072. }
  1073.  
  1074. stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))
  1075.  
  1076. stock Float:Stock_CheckAngle(id,iTarget)
  1077. {
  1078.     new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
  1079.     Stock_Get_Origin(id, vId_ori)
  1080.     Stock_Get_Origin(iTarget, vTar_ori)
  1081.    
  1082.     pev(id,pev_angles,vId_ang)
  1083.     for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
  1084.    
  1085.     fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
  1086.    
  1087.     if (fLength<=0.0)
  1088.     {
  1089.         vOricross[0]=0.0
  1090.         vOricross[1]=0.0
  1091.     } else {
  1092.         vOricross[0]=vOricross[0]*(1.0/fLength)
  1093.         vOricross[1]=vOricross[1]*(1.0/fLength)
  1094.     }
  1095.    
  1096.     engfunc(EngFunc_MakeVectors,vId_ang)
  1097.     global_get(glb_v_forward,vForward)
  1098.    
  1099.     fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
  1100.     return fRad   //->   RAD 90' = 0.5rad
  1101. }
  1102.  
  1103. stock Stock_Get_Origin(id, Float:origin[3])
  1104. {
  1105.     new Float:maxs[3],Float:mins[3]
  1106.     if (pev(id, pev_solid) == SOLID_BSP)
  1107.     {
  1108.         pev(id,pev_maxs,maxs)
  1109.         pev(id,pev_mins,mins)
  1110.         origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
  1111.         origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
  1112.         origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
  1113.     } else pev(id, pev_origin, origin)
  1114. }
  1115.  
  1116. public Stock_Fake_KnockBack(id, iVic, Float:iKb)
  1117. {
  1118.     if(iVic > 32) return
  1119.    
  1120.     new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
  1121.     pev(id, pev_origin, vAttacker)
  1122.     pev(iVic, pev_origin, vVictim)
  1123.     vAttacker[2] = vVictim[2] = 0.0
  1124.     flags = pev(id, pev_flags)
  1125.    
  1126.     xs_vec_sub(vVictim, vAttacker, vVictim)
  1127.     new Float:fDistance
  1128.     fDistance = xs_vec_len(vVictim)
  1129.     xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
  1130.    
  1131.     pev(iVic, pev_velocity, vVelocity)
  1132.     xs_vec_mul_scalar(vVictim, iKb, vVictim)
  1133.     xs_vec_mul_scalar(vVictim, 50.0, vVictim)
  1134.     vVictim[2] = xs_vec_len(vVictim) * 0.15
  1135.    
  1136.     if(flags &~ FL_ONGROUND)
  1137.     {
  1138.         xs_vec_mul_scalar(vVictim, 1.2, vVictim)
  1139.         vVictim[2] *= 0.4
  1140.     }
  1141.     if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
  1142. }   
  1143.  
  1144. stock Float:Stock_Get_Body_Dmg(iBody)
  1145. {
  1146.     switch (iBody)
  1147.     {
  1148.         case HIT_GENERIC: return 0.75
  1149.         case 1: return 4.0
  1150.         case 2: return 1.0
  1151.         case 3: return 1.25
  1152.         case 4,5,6,7: return 0.75
  1153.         default: return 0.75
  1154.     }
  1155.     return 1.0
  1156. }
  1157.  
  1158. stock Stock_SakuraEffect(id, Float:vecOri[3])
  1159. {
  1160.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
  1161.     write_byte(TE_BLOODSPRITE)
  1162.     engfunc(EngFunc_WriteCoord,vecOri[0])
  1163.     engfunc(EngFunc_WriteCoord,vecOri[1])
  1164.     engfunc(EngFunc_WriteCoord,vecOri[2])
  1165.     write_short(ef_sakura[g_mode[id]?2:0])
  1166.     write_short(ef_sakura[g_mode[id]?3:1])
  1167.     write_byte(g_mode[id]?178:128)
  1168.     write_byte(random_num(2,3))
  1169.     message_end()
  1170. }
  1171.  
  1172. stock can_damage(id1, id2)
  1173. {
  1174.     if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
  1175.         return 1
  1176.        
  1177.     // Check team
  1178.     return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
  1179. }
  1180.  



_________________
Ačiū kad padedate pradedančiajam :)

Paveikslėlis
Atsijungęs
 Aprašymas  
 
Rodyti paskutinius pranešimus:  Rūšiuoti pagal  
 Puslapis 11 [ 1 pranešimas ] 


Dabar prisijungę

Vartotojai naršantys šį forumą: Registruotų vartotojų nėra ir 3 svečių


Jūs negalite kurti naujų temų šiame forume
Jūs negalite atsakinėti į temas šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite trinti savo pranešimų šiame forume
Jūs negalite prikabinti failų šiame forume

Ieškoti:
Pereiti į:  

cron