- /* Plugin generated by AMXX-Studio */
- #pragma compress 1
- #include <amxmodx>
- #include <engine>
- #include <fakemeta>
- #include <fakemeta_util>
- #include <hamsandwich>
- #include <xs>
- #include <zombie_escape>
- #include <ze_vip>
- #define PLUGIN "CSO Dual Sword Phantom Slayer"
- #define VERSION "1.0"
- #define AUTHOR "Natasha aka Asdian"
- #define CSW_DPS CSW_KNIFE
- #define weapon_dps "weapon_knife"
- #define v_model "models/v_dualsword.mdl"
- #define p_model "models/p_dualsword_a.mdl"
- #define p_model2 "models/p_dualsword_b.mdl"
- #define spr_wpn "knife_dualsword"
- new const weapon_sound[][] =
- {
- "weapons/dualsword_stab1.wav", // 0
- "weapons/dualsword_stab2.wav", // 1
- "weapons/dualsword_stab1_hit.wav", // 2
- "weapons/dualsword_stab2_hit.wav", // 3
- "weapons/katanad_hitwall.wav", // 4
- "weapons/dualsword_slash_1.wav", // 5
- "weapons/dualsword_slash_2.wav", // 6
- "weapons/dualsword_slash_3.wav", // 7
- "weapons/dualsword_slash_4.wav", // 8
- "weapons/dualsword_hit1.wav", // 9
- "weapons/dualsword_hit2.wav", // 10
- "weapons/dualsword_hit3.wav", // 11
- "weapons/dualsword_slash_4_1.wav", // 12
- "weapons/dualsword_slash_4_2.wav", // 13
- "weapons/dualsword_skill_end.wav", // 14
- "weapons/dualsword_fly1.wav", // 15
- "weapons/dualsword_fly2.wav", // 16
- "weapons/dualsword_fly3.wav", // 17
- "weapons/dualsword_fly4.wav", // 18
- "weapons/dualsword_fly5.wav", // 19
- "weapons/dualsword_skill_start.wav"
- }
- //Hit
- #define RESULT_HIT_NONE 0
- #define RESULT_HIT_PLAYER 1
- #define RESULT_HIT_WORLD 2
- enum _:WpnAnim
- {
- ANIM_IDLEA = 0,
- ANIM_SLASH1,
- ANIM_SLASH2,
- ANIM_SLASH3,
- ANIM_SLASH4,
- ANIM_SLASHEND,
- ANIM_DRAWA,
- ANIM_IDLEB,
- ANIM_STAB1,
- ANIM_STAB2,
- ANIM_STABEND,
- ANIM_DRAWB
- }
- new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
- new ef_sakura[4]
- new Float:g_Sound[33]
- new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
- new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
- new cvar_damage_special, cvar_special_range
- new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
- register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
- register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
- register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);
- register_think("dps_entytyd", "Fw_DPSEnt_Think")
- RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
- register_clcmd(spr_wpn, "hook_rb")
- cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
- cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
- cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
- cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
- cvar_slash_radius = register_cvar("dps_slashradius","120.0")
- cvar_slash_range = register_cvar("dps_slashrange","95.0")
- cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
- cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
- cvar_stab_radius = register_cvar("dps_stabradius","90.0")
- cvar_stab_range = register_cvar("dps_stabrange","150.0")
- cvar_damage_special = register_cvar("dps_specialdamage","95.0")
- cvar_special_range = register_cvar("dps_specialrange","120.0")
- cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
- cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
- cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
- cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
- cvar_remove = register_cvar("dps_remove_onnewround", "0")
- cvar_spr = register_cvar("dps_enable_sprites", "1")
- g_dps = ze_register_item("Dual Sword Phantom Slayer \r(VIP)", 50, 0)
- }
- public plugin_precache()
- {
- precache_model(v_model)
- precache_model(p_model)
- precache_model(p_model2)
- for(new i = 0; i < sizeof(weapon_sound); i++)
- precache_sound(weapon_sound[i])
- precache_model("models/dualswordfx.mdl")
- precache_model("models/dualsword_skill.mdl")
- precache_model("models/dualsword_skillfx1.mdl")
- precache_model("models/dualsword_skillfx2.mdl")
- ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
- ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
- ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
- ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
- new Txt[32]
- format(Txt, 31, "sprites/%s.txt", spr_wpn)
- engfunc(EngFunc_PrecacheGeneric, Txt)
- }
- public ze_user_infected(id) remove_dps(id)
- public ze_user_humanized(id) remove_dps(id)
- public hook_rb(id)
- {
- engclient_cmd(id, weapon_dps)
- return PLUGIN_HANDLED
- }
- public get_dps(id)
- {
- if (!is_user_alive(id))
- return
- g_had_dps[id] = 1
- g_mode[id] = 0
- g_slashend[id] = 0
- g_check[id] = 0
- g_soundmode[id] = 0
- fm_give_item(id, weapon_dps)
- if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
- else engclient_cmd(id,weapon_dps)
- }
- public client_connected(id) remove_dps(id)
- public client_disconnected(id) remove_dps(id)
- public Event_NewRound()
- {
- if(!get_pcvar_num(cvar_remove))
- return
- for(new i = 0; i < get_maxplayers(); i++)
- remove_dps(i)
- }
- public remove_dps(id)
- {
- g_had_dps[id] = 0
- g_slashend[id] = 0
- g_check[id] = 0
- static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
- if(!pev_valid(iEnt)) return
- set_pev(iEnt, pev_iuser1, 0)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 0)
- set_pev(iEnt, pev_fuser1, 0.0)
- }
- public ze_select_item_pre(id, itemid)
- {
- if (itemid != g_dps)
- return ZE_ITEM_AVAILABLE
- if (ze_is_user_zombie(id))
- return ZE_ITEM_DONT_SHOW
- if (!(ze_get_vip_flags(id) & VIP_A))
- return ZE_ITEM_DONT_SHOW
- return ZE_ITEM_AVAILABLE
- }
- public ze_select_item_post(id, itemid)
- {
- if (itemid != g_dps)
- return
- get_dps(id)
- }
- public Event_CurWeapon(id)
- {
- if(!is_user_alive(id))
- return 1
- if(get_user_weapon(id) != CSW_DPS)
- return 1
- if(!g_had_dps[id])
- return 1
- if(ze_is_user_zombie(id))
- return 1
- set_pev(id, pev_viewmodel2, v_model)
- set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
- Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
- static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
- if(!pev_valid(iEnt)) return 1
- set_pev(iEnt, pev_iuser1, 0)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 0)
- set_pev(iEnt, pev_fuser1, 0.0)
- g_slashend[id] = 0
- g_check[id] = 0
- set_pdata_float(id, 83, 0.23)
- set_pdata_float(iEnt, 46, 0.25);
- set_pdata_float(iEnt, 47, 0.25);
- set_pdata_float(iEnt, 48, 0.25);
- if(get_pcvar_num(cvar_spr))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
- write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
- write_byte(-1)
- write_byte(-1)
- write_byte(-1)
- write_byte(-1)
- write_byte(2)
- write_byte(1)
- write_byte(CSW_DPS)
- write_byte(0)
- message_end()
- }
- return 0
- }
- public message_DeathMsg(msg_id, msg_dest, msg_ent)
- {
- new szWeapon[64]
- get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
- if (strcmp(szWeapon, "knife"))
- return PLUGIN_CONTINUE
- new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
- if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
- return PLUGIN_CONTINUE
- set_msg_arg_string(4, "dualsword")
- return PLUGIN_CONTINUE
- }
- public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
- {
- if (!pev_valid(iEnt))
- return;
- if (pev(iEnt, pev_flags) & FL_KILLME)
- return;
- new classname[32];
- pev(iEnt, pev_classname, classname, 31);
- if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
- {
- if (iHost != pev(iEnt, pev_owner))
- set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
- }
- }
- public Fw_DPSEnt_Think(iEnt)
- {
- if(!pev_valid(iEnt))
- return
- new iOwner
- iOwner = pev(iEnt, pev_owner)
- if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || ze_is_user_zombie(iOwner))
- {
- remove_entity(iEnt)
- g_soundmode[iOwner] = 0
- return
- }
- if(!Get_Entity_Mode(iEnt))
- {
- new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
- iWpn = pev(iEnt, pev_iuser1)
- iState = pev(iWpn, pev_iuser4)
- Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
- pev(iOwner, pev_v_angle, vecAngle);
- vecAngle[0] = -vecAngle[0];
- set_pev(iEnt, pev_origin, vecOrigin);
- set_pev(iEnt, pev_angles, vecAngle);
- if(!iState || get_user_weapon(iOwner) != CSW_DPS)
- {
- new Float:fRenderAmount;
- pev(iEnt, pev_renderamt, fRenderAmount);
- fRenderAmount -= 4.5;
- if (fRenderAmount <= 5.0)
- {
- remove_entity(iEnt);
- return;
- }
- set_pev(iEnt, pev_renderamt, fRenderAmount);
- }
- }
- if(Get_Entity_Mode(iEnt) == 1)
- {
- set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
- static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
- Origin[2] -= 25.0
- Stock_Hook_Ent(iEnt, Origin, 0.01)
- if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
- {
- set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
- return
- }
- set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
- set_pev(iEnt, pev_origin, Origin);
- }
- if(Get_Entity_Mode(iEnt) == 2)
- {
- new Float:vecOrigin[3]
- GetGunPosition(iOwner, vecOrigin);
- new Float:fOldOrigin[3];
- pev(iEnt, pev_oldorigin, fOldOrigin);
- new Float:vecNewOrigin[3];
- pev(iEnt, pev_origin, vecNewOrigin);
- new Float:vecfff[3];
- xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
- xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
- set_pev(iEnt, pev_origin, vecNewOrigin);
- set_pev(iEnt, pev_oldorigin, vecOrigin);
- if (pev(iEnt, pev_iuser1) == 2)
- {
- new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
- if (fDist > 175.0 * 0.5)
- {
- remove_entity(iEnt);
- return;
- }
- }
- if(g_Sound[iOwner] < get_gametime())
- {
- if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- g_soundmode[iOwner]++
- if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
- g_Sound[iOwner] = get_gametime()+0.088;
- }
- }
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
- if(Get_Entity_Mode(iEnt) == 2)
- {
- new Float:fTimeLast;
- pev(iEnt, pev_fuser1, fTimeLast);
- if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
- {
- if (pev(iEnt, pev_iuser1) == 1)
- {
- new Float:fRenderAmount;
- pev(iEnt, pev_renderamt, fRenderAmount);
- fRenderAmount -= 7.5;
- if (fRenderAmount <= 5.0)
- {
- remove_entity(iEnt);
- return;
- }
- set_pev(iEnt, pev_renderamt, fRenderAmount);
- } else remove_entity(iEnt);
- g_soundmode[iOwner] = 0
- }
- }
- }
- public fw_Item_PostFrame(ent)
- {
- new id = pev(ent, pev_owner)
- if(!is_user_connected(id))
- return HAM_IGNORED
- if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
- return HAM_IGNORED
- if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
- {
- if(g_check[id] < 6) g_check[id] = 0
- set_pev(ent, pev_iuser3, 0)
- Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
- set_pdata_float(ent, 48, 4.03, 4)
- }
- new iButton = pev(id,pev_button)
- return AurezBotac(id, ent, iButton)
- }
- public AurezBotac(id, iEnt, iButton)
- {
- new iState = pev(iEnt, pev_iuser3)
- new iState2 = pev(iEnt, pev_iuser2)
- new iSlash = pev(iEnt, pev_iuser4)
- new Float:fSound; pev(iEnt, pev_fuser1, fSound)
- new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
- if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
- {
- if(!iState || iState == 1)
- {
- Set_WeaponAnim(id, ANIM_STABEND)
- set_pev(iEnt, pev_iuser2, 0)
- set_pdata_float(iEnt, 48, 1.45,4)
- }
- }
- if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
- {
- Set_WeaponAnim(id, ANIM_SLASHEND)
- set_pdata_float(iEnt, 48, 2.03,4)
- g_slashend[id] = 0
- }
- if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
- {
- new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
- new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
- new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
- switch (iHitResult)
- {
- case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
- case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
- }
- set_pev(iEnt, pev_iuser1, 0);
- }
- if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
- {
- set_pev(iEnt, pev_iuser4, 1 + iSlash)
- Set_WeaponAnim(id, 1 + iSlash)
- set_pdata_float(id, 83, 0.06)
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
- set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
- set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
- Create_Slash(id,iEnt,iSlash)
- if(iSlash == 3)
- {
- g_slashend[id] = 1
- set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
- set_pev(iEnt, pev_iuser4, 0)
- }
- }
- if(fSound && fSound < get_gametime())
- {
- SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
- set_pev(iEnt, pev_fuser1, 0.0)
- if(g_check[id] == 5)
- {
- Set_WeaponAnim(id, 14)
- SendSound(id,CHAN_ITEM,weapon_sound[20])
- g_check[id] = 6
- set_pdata_float(iEnt, 46, 1.03,4)
- set_pdata_float(iEnt, 47, 1.03,4)
- set_pdata_float(iEnt, 48, 1.03,4)
- set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
- DPS_Special(id, 0, 2.0)
- }
- }
- if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
- {
- set_pdata_float(iEnt, 46, 11.36,4)
- set_pdata_float(iEnt, 47, 11.36,4)
- set_pdata_float(iEnt, 48, 11.36,4)
- g_check[id] = 7
- set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
- Set_WeaponAnim(id, 15)
- }
- // NANI?!
- if(g_check[id] == 7 && fSound && fSound < get_gametime())
- {
- SendSound(id,CHAN_VOICE,weapon_sound[14])
- set_pev(iEnt, pev_fuser1, 0.0)
- g_check[id] = 0
- DPS_Special(id, 1, 1.46)
- }
- DPS_RealSpecial(id, iEnt, fRange)
- if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
- {
- g_mode[id] = 0
- g_slashend[id] = 0
- set_pev(iEnt, pev_iuser2, 1)
- set_pev(iEnt, pev_iuser4, 0)
- switch(iState)
- {
- case 0:
- {
- set_pdata_float(id, 83, 0.16)
- set_pdata_float(iEnt, 46, 0.4,4);
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 47, 0.4,4);
- set_pdata_float(iEnt, 48, 1.0,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser3, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_STAB1)
- SendSound(id, CHAN_WEAPON, weapon_sound[0])
- if(!g_check[id]) g_check[id] = 1
- else if(g_check[id] == 2) g_check[id] = 3
- else g_check[id] = 0
- }
- case 1:
- {
- set_pdata_float(id, 83, 0.16)
- set_pdata_float(iEnt, 46, 0.83,4);
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 47, 0.83,4);
- set_pdata_float(iEnt, 48, 1.5,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_STAB2)
- SendSound(id, CHAN_WEAPON, weapon_sound[1])
- if(g_check[id] == 3) g_check[id] = 4
- else g_check[id] = 0
- }
- }
- }
- if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
- {
- g_mode[id] = 1
- set_pdata_float(id, 83, 0.04)
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 46, 0.13,4);
- set_pdata_float(iEnt, 47, 0.13,4);
- set_pdata_float(iEnt, 48, 0.5,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_SLASH1)
- SendSound(id, CHAN_WEAPON, weapon_sound[5])
- Create_Slash(id,iEnt,0)
- if(g_check[id] == 1) g_check[id] = 2
- else if(g_check[id] == 4) g_check[id] = 5
- else g_check[id] = 0
- }
- iButton &= ~IN_ATTACK;
- iButton &= ~IN_ATTACK2;
- set_pev(id, pev_button, iButton);
- return HAM_IGNORED
- }
- stock Create_Slash(id,iEnt,seq)
- {
- new Float:vecOrigin[3], Float:vecAngle[3];
- GetGunPosition(id, vecOrigin);
- pev(id, pev_v_angle, vecAngle);
- vecAngle[0] = -vecAngle[0];
- new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
- // Set info for ent
- Set_Entity_Mode(pEntity, 0)
- set_pev(pEntity, pev_scale, 0.1);
- set_pev(pEntity, pev_iuser1, iEnt);
- set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(pEntity, pev_angles, vecAngle);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- }
- stock DPS_Special(id, seq, Float:fTime)
- {
- new Float:VecOrig[3], Float:VecAng[3]
- pev(id, pev_origin, VecOrig)
- pev(id, pev_angles, VecAng)
- new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
- set_pev(iEfx, pev_classname, "dps_entytyd");
- set_pev(iEfx, pev_origin, VecOrig)
- set_pev(iEfx, pev_frame, 0.0)
- set_pev(iEfx, pev_animtime, get_gametime())
- set_pev(iEfx, pev_framerate, 1.0)
- set_pev(iEfx, pev_sequence, seq)
- engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
- dllfunc(DLLFunc_Spawn, iEfx)
- Set_Entity_Mode(iEfx, 1)
- set_pev(iEfx, pev_angles, VecAng)
- set_pev(iEfx, pev_solid, SOLID_NOT)
- set_pev(iEfx, pev_owner, id)
- set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
- set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
- }
- stock DPS_RealSpecial(id, iEnt, Float:fRange)
- {
- new Float:fTimeEffect;
- pev(iEnt, pev_fuser4, fTimeEffect);
- if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
- {
- 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]))
- new Float:vecOrigin3[2][3], Float:vecOrigin[3];
- pev(id, pev_origin, vecOrigin3[0]);
- pev(id, pev_origin, vecOrigin);
- xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
- new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
- vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
- switch (random(3))
- {
- case 0:
- {
- vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
- }
- case 1:
- {
- vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
- }
- case 2:
- {
- vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
- }
- case 3:
- {
- vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
- }
- }
- if (random_num(0,9) > 8)
- {
- new Float:vecAngle2[3];
- vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
- vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
- new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)
- set_pev(pEntity, pev_angles, vecAngle2);
- set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(pEntity, pev_iuser1, 1);
- set_pev(pEntity, pev_iuser2, iEnt);
- set_pev(pEntity, pev_frame, 0.0);
- Set_Entity_Mode(pEntity, 2)
- set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
- set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
- set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
- set_pev(pEntity, pev_oldorigin, vecOrigin);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- }
- new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)
- set_pev(pEntity, pev_iuser1, 2);
- set_pev(pEntity, pev_iuser2, iEnt);
- Set_Entity_Mode(pEntity, 2)
- set_pev(pEntity, pev_frame, 0.0);
- set_pev(pEntity, pev_oldorigin, vecOrigin);
- set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
- set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
- set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
- }
- }
- stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
- {
- new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
- // Set info for ent
- set_pev(pEntity, pev_movetype, move);
- set_pev(pEntity, pev_owner, id);
- engfunc(EngFunc_SetModel, pEntity, models);
- set_pev(pEntity, pev_classname, "dps_entytyd");
- set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
- set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
- set_pev(pEntity, pev_origin, Start);
- set_pev(pEntity, pev_gravity, 0.01);
- set_pev(pEntity, pev_solid, solid);
- static Float:Velocity[3];
- Stock_Get_Speed_Vector(Start, End, speed, Velocity);
- set_pev(pEntity, pev_velocity, Velocity);
- new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
- vector_to_angle(Velocity, vecVAngle)
- if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
- set_pev(pEntity, pev_angles, vecVAngle);
- set_pev(pEntity, pev_rendermode, kRenderTransAdd);
- set_pev(pEntity, pev_renderamt, 255.0);
- set_pev(pEntity, pev_sequence, seq)
- set_pev(pEntity, pev_animtime, get_gametime());
- set_pev(pEntity, pev_framerate, 1.0)
- return pEntity;
- }
- stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
- stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)
- stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
- {
- xs_vec_sub(origin2, origin1, new_velocity)
- new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
- xs_vec_mul_scalar(new_velocity, num, new_velocity)
- }
- stock GetGunPosition(id, Float:vecSrc[3])
- {
- new Float:vecViewOfs[3];
- pev(id, pev_origin, vecSrc);
- pev(id, pev_view_ofs, vecViewOfs);
- xs_vec_add(vecSrc, vecViewOfs, vecSrc);
- }
- stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
- {
- new iHitResult
- if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
- else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)
- return iHitResult
- }
- stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
- {
- new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
- GetGunPosition(id, vecSrc);
- pev(id, pev_v_angle, v_angle);
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- new tr = create_tr2();
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- new iHitResult = RESULT_HIT_NONE;
- if (flFraction < 1.0)
- {
- new pEntity = get_tr2(tr, TR_pHit);
- iHitResult = RESULT_HIT_WORLD;
- if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
- {
- if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
- flDamage *= 1.0;
- iHitResult = RESULT_HIT_PLAYER;
- }
- if (pev_valid(pEntity))
- {
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- if (iHitgroup != -1)
- set_tr2(tr, TR_iHitgroup, iHitgroup);
- ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
- ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
- Stock_Fake_KnockBack(id, pEntity, flKnockBack)
- if (IsAlive(pEntity))
- {
- free_tr2(tr);
- return iHitResult;
- }
- }
- }
- free_tr2(tr);
- return iHitResult;
- }
- stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
- {
- new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
- pev(id, pev_origin, vecOrigin);
- new iHitResult = RESULT_HIT_NONE;
- GetGunPosition(id, vecSrc);
- pev(id, pev_v_angle, v_angle);
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- new tr = create_tr2();
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- new Float:EndPos2[3]
- get_tr2(tr, TR_vecEndPos, EndPos2)
- new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- iHitResult = RESULT_HIT_WORLD;
- if(bStab) Stock_SakuraEffect(id, EndPos2)
- }
- new Float:vecEndZ = vecEnd[2];
- new pEntity = -1;
- while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
- {
- if (!pev_valid(pEntity))
- continue;
- if (id == pEntity)
- continue;
- if (!IsAlive(pEntity))
- continue;
- if (!CheckAngle(id, pEntity, fAngle))
- continue;
- GetGunPosition(id, vecSrc);
- Stock_Get_Origin(pEntity, vecEnd);
- vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
- xs_vec_sub(vecEnd, vecSrc, vecForward);
- xs_vec_normalize(vecForward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- if (IsPlayer(pEntity) || IsHostage(pEntity))
- {
- iHitResult = RESULT_HIT_PLAYER;
- if(bStab) Stock_SakuraEffect(id, vecEnd)
- if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
- flDamage *= 1.0;
- }
- if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
- {
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
- ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
- ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
- Stock_Fake_KnockBack(id, pEntity, flKnockBack)
- }
- }
- free_tr2(tr);
- }
- return iHitResult;
- }
- stock Set_WeaponAnim(id, anim)
- {
- set_pev(id, pev_weaponanim, anim)
- message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
- write_byte(anim)
- write_byte(pev(id, pev_body))
- message_end()
- }
- stock Stock_Set_Vis(iEnt, iVis = 1)
- set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)
- stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
- {
- static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
- pev(ent, pev_origin, EntOrigin)
- if(!mode)
- {
- distance_f = get_distance_f(EntOrigin, TargetOrigin)
- fl_Time = distance_f / Speed
- pev(ent, pev_velocity, fl_Velocity)
- fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
- fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
- fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time
- if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
- else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
- } else {
- static Float:fl_EntVelocity[3], Float:fl_Acc[3]
- Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
- xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
- for(new i =0; i<3; i++)
- {
- if(fl_Velocity[i] > fl_EntVelocity[i])
- {
- fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
- fl_Acc[i] = floatmin(70.0, fl_Acc[i])
- fl_EntVelocity[i] += fl_Acc[i]
- }
- else if(fl_Velocity[i] < fl_EntVelocity[i])
- {
- fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
- fl_Acc[i] = floatmin(70.0, fl_Acc[i])
- fl_EntVelocity[i] -= fl_Acc[i]
- }
- }
- set_pev(ent, pev_velocity, fl_EntVelocity)
- }
- }
- stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
- {
- new Float:v3[3],i
- for(i=0;i<3;i++) v3[i]=start[i]-end[i]
- new Float:vl = vector_length(v3)
- for(i=0;i<3;i++) reOri[i] = v3[i] / vl
- }
- stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
- {
- static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
- pev(id, pev_origin, vOrigin)
- pev(id, pev_view_ofs,vUp)
- xs_vec_add(vOrigin,vUp,vOrigin)
- pev(id, pev_v_angle, vAngle)
- engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
- vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
- vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
- vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
- }
- stock IsPlayer(pEntity) return is_user_connected(pEntity)
- stock IsHostage(pEntity)
- {
- new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
- return equal(classname, "hostage_entity")
- }
- stock IsAlive(pEntity)
- {
- if (pEntity < 1) return 0
- return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
- }
- stock CheckBack(iEnemy,id)
- {
- new Float:anglea[3], Float:anglev[3]
- pev(iEnemy, pev_v_angle, anglea)
- pev(id, pev_v_angle, anglev)
- new Float:angle = anglea[1] - anglev[1]
- if (angle < -180.0) angle += 360.0
- if (angle <= 45.0 && angle >= -45.0) return 1
- return 0
- }
- stock CheckAngle(iAttacker, iVictim, Float:fAngle) return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))
- stock Float:Stock_CheckAngle(id,iTarget)
- {
- new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
- Stock_Get_Origin(id, vId_ori)
- Stock_Get_Origin(iTarget, vTar_ori)
- pev(id,pev_angles,vId_ang)
- for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
- fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
- if (fLength<=0.0)
- {
- vOricross[0]=0.0
- vOricross[1]=0.0
- } else {
- vOricross[0]=vOricross[0]*(1.0/fLength)
- vOricross[1]=vOricross[1]*(1.0/fLength)
- }
- engfunc(EngFunc_MakeVectors,vId_ang)
- global_get(glb_v_forward,vForward)
- fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
- return fRad //-> RAD 90' = 0.5rad
- }
- stock Stock_Get_Origin(id, Float:origin[3])
- {
- new Float:maxs[3],Float:mins[3]
- if (pev(id, pev_solid) == SOLID_BSP)
- {
- pev(id,pev_maxs,maxs)
- pev(id,pev_mins,mins)
- origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
- origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
- origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
- } else pev(id, pev_origin, origin)
- }
- public Stock_Fake_KnockBack(id, iVic, Float:iKb)
- {
- if(iVic > 32) return
- new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
- pev(id, pev_origin, vAttacker)
- pev(iVic, pev_origin, vVictim)
- vAttacker[2] = vVictim[2] = 0.0
- flags = pev(id, pev_flags)
- xs_vec_sub(vVictim, vAttacker, vVictim)
- new Float:fDistance
- fDistance = xs_vec_len(vVictim)
- xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
- pev(iVic, pev_velocity, vVelocity)
- xs_vec_mul_scalar(vVictim, iKb, vVictim)
- xs_vec_mul_scalar(vVictim, 50.0, vVictim)
- vVictim[2] = xs_vec_len(vVictim) * 0.15
- if(flags &~ FL_ONGROUND)
- {
- xs_vec_mul_scalar(vVictim, 1.2, vVictim)
- vVictim[2] *= 0.4
- }
- if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
- }
- stock Float:Stock_Get_Body_Dmg(iBody)
- {
- switch (iBody)
- {
- case HIT_GENERIC: return 0.75
- case 1: return 4.0
- case 2: return 1.0
- case 3: return 1.25
- case 4,5,6,7: return 0.75
- default: return 0.75
- }
- return 1.0
- }
- stock Stock_SakuraEffect(id, Float:vecOri[3])
- {
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
- write_byte(TE_BLOODSPRITE)
- engfunc(EngFunc_WriteCoord,vecOri[0])
- engfunc(EngFunc_WriteCoord,vecOri[1])
- engfunc(EngFunc_WriteCoord,vecOri[2])
- write_short(ef_sakura[g_mode[id]?2:0])
- write_short(ef_sakura[g_mode[id]?3:1])
- write_byte(g_mode[id]?178:128)
- write_byte(random_num(2,3))
- message_end()
- }
- stock can_damage(id1, id2)
- {
- if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
- return 1
- // Check team
- return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
- */
Dual Sword Phantom Slayer Crashing Server
Dual Sword Phantom Slayer Crashing Server
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
Mystic Viper wrote: ↑4 years agoI converted this new extra item but when i try to get it from shop server crashing for no reason from this plugin. Can someone fix it?
/* Plugin generated by AMXX-Studio */ #pragma compress 1 #include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <xs> #include <zombie_escape> #include <ze_vip> #define PLUGIN "CSO Dual Sword Phantom Slayer" #define VERSION "1.0" #define AUTHOR "Natasha aka Asdian" #define CSW_DPS CSW_KNIFE #define weapon_dps "weapon_knife" #define v_model "models/v_dualsword.mdl" #define p_model "models/p_dualsword_a.mdl" #define p_model2 "models/p_dualsword_b.mdl" #define spr_wpn "knife_dualsword" new const weapon_sound[][] = { "weapons/dualsword_stab1.wav", // 0 "weapons/dualsword_stab2.wav", // 1 "weapons/dualsword_stab1_hit.wav", // 2 "weapons/dualsword_stab2_hit.wav", // 3 "weapons/katanad_hitwall.wav", // 4 "weapons/dualsword_slash_1.wav", // 5 "weapons/dualsword_slash_2.wav", // 6 "weapons/dualsword_slash_3.wav", // 7 "weapons/dualsword_slash_4.wav", // 8 "weapons/dualsword_hit1.wav", // 9 "weapons/dualsword_hit2.wav", // 10 "weapons/dualsword_hit3.wav", // 11 "weapons/dualsword_slash_4_1.wav", // 12 "weapons/dualsword_slash_4_2.wav", // 13 "weapons/dualsword_skill_end.wav", // 14 "weapons/dualsword_fly1.wav", // 15 "weapons/dualsword_fly2.wav", // 16 "weapons/dualsword_fly3.wav", // 17 "weapons/dualsword_fly4.wav", // 18 "weapons/dualsword_fly5.wav", // 19 "weapons/dualsword_skill_start.wav" } //Hit #define RESULT_HIT_NONE 0 #define RESULT_HIT_PLAYER 1 #define RESULT_HIT_WORLD 2 enum _:WpnAnim { ANIM_IDLEA = 0, ANIM_SLASH1, ANIM_SLASH2, ANIM_SLASH3, ANIM_SLASH4, ANIM_SLASHEND, ANIM_DRAWA, ANIM_IDLEB, ANIM_STAB1, ANIM_STAB2, ANIM_STABEND, ANIM_DRAWB } new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33] new ef_sakura[4] new Float:g_Sound[33] new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range new cvar_damage_special, cvar_special_range new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_message(get_user_msgid("DeathMsg"), "message_DeathMsg") register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0") register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1); register_think("dps_entytyd", "Fw_DPSEnt_Think") RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame") register_clcmd(spr_wpn, "hook_rb") cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0") cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0") cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0") cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0") cvar_slash_radius = register_cvar("dps_slashradius","120.0") cvar_slash_range = register_cvar("dps_slashrange","95.0") cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0") cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0") cvar_stab_radius = register_cvar("dps_stabradius","90.0") cvar_stab_range = register_cvar("dps_stabrange","150.0") cvar_damage_special = register_cvar("dps_specialdamage","95.0") cvar_special_range = register_cvar("dps_specialrange","120.0") cvar_knockback[0] = register_cvar("dps_slashknockback","0.0") cvar_knockback[1] = register_cvar("dps_stabknockback","0.0") cvar_knockback[2] = register_cvar("dps_specialknockback","0.0") cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0") cvar_remove = register_cvar("dps_remove_onnewround", "0") cvar_spr = register_cvar("dps_enable_sprites", "1") g_dps = ze_register_item("Dual Sword Phantom Slayer \r(VIP)", 50, 0) } public plugin_precache() { precache_model(v_model) precache_model(p_model) precache_model(p_model2) for(new i = 0; i < sizeof(weapon_sound); i++) precache_sound(weapon_sound[i]) precache_model("models/dualswordfx.mdl") precache_model("models/dualsword_skill.mdl") precache_model("models/dualsword_skillfx1.mdl") precache_model("models/dualsword_skillfx2.mdl") ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr") ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr") ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr") ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr") new Txt[32] format(Txt, 31, "sprites/%s.txt", spr_wpn) engfunc(EngFunc_PrecacheGeneric, Txt) } public ze_user_infected(id) remove_dps(id) public ze_user_humanized(id) remove_dps(id) public hook_rb(id) { engclient_cmd(id, weapon_dps) return PLUGIN_HANDLED } public get_dps(id) { if (!is_user_alive(id)) return g_had_dps[id] = 1 g_mode[id] = 0 g_slashend[id] = 0 g_check[id] = 0 g_soundmode[id] = 0 fm_give_item(id, weapon_dps) if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id) else engclient_cmd(id,weapon_dps) } public client_connected(id) remove_dps(id) public client_disconnected(id) remove_dps(id) public Event_NewRound() { if(!get_pcvar_num(cvar_remove)) return for(new i = 0; i < get_maxplayers(); i++) remove_dps(i) } public remove_dps(id) { g_had_dps[id] = 0 g_slashend[id] = 0 g_check[id] = 0 static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS) if(!pev_valid(iEnt)) return set_pev(iEnt, pev_iuser1, 0) set_pev(iEnt, pev_iuser2, 0) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_iuser4, 0) set_pev(iEnt, pev_fuser1, 0.0) } public ze_select_item_pre(id, itemid) { if (itemid != g_dps) return ZE_ITEM_AVAILABLE if (ze_is_user_zombie(id)) return ZE_ITEM_DONT_SHOW if (!(ze_get_vip_flags(id) & VIP_A)) return ZE_ITEM_DONT_SHOW return ZE_ITEM_AVAILABLE } public ze_select_item_post(id, itemid) { if (itemid != g_dps) return get_dps(id) } public Event_CurWeapon(id) { if(!is_user_alive(id)) return 1 if(get_user_weapon(id) != CSW_DPS) return 1 if(!g_had_dps[id]) return 1 if(ze_is_user_zombie(id)) return 1 set_pev(id, pev_viewmodel2, v_model) set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model) Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB) static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS) if(!pev_valid(iEnt)) return 1 set_pev(iEnt, pev_iuser1, 0) set_pev(iEnt, pev_iuser2, 0) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_iuser4, 0) set_pev(iEnt, pev_fuser1, 0.0) g_slashend[id] = 0 g_check[id] = 0 set_pdata_float(id, 83, 0.23) set_pdata_float(iEnt, 46, 0.25); set_pdata_float(iEnt, 47, 0.25); set_pdata_float(iEnt, 48, 0.25); if(get_pcvar_num(cvar_spr)) { message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps) write_byte(-1) write_byte(-1) write_byte(-1) write_byte(-1) write_byte(2) write_byte(1) write_byte(CSW_DPS) write_byte(0) message_end() } return 0 } public message_DeathMsg(msg_id, msg_dest, msg_ent) { new szWeapon[64] get_msg_arg_string(4, szWeapon, charsmax(szWeapon)) if (strcmp(szWeapon, "knife")) return PLUGIN_CONTINUE new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373) if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)]) return PLUGIN_CONTINUE set_msg_arg_string(4, "dualsword") return PLUGIN_CONTINUE } public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet) { if (!pev_valid(iEnt)) return; if (pev(iEnt, pev_flags) & FL_KILLME) return; new classname[32]; pev(iEnt, pev_classname, classname, 31); if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4)) { if (iHost != pev(iEnt, pev_owner)) set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW)); } } public Fw_DPSEnt_Think(iEnt) { if(!pev_valid(iEnt)) return new iOwner iOwner = pev(iEnt, pev_owner) if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || ze_is_user_zombie(iOwner)) { remove_entity(iEnt) g_soundmode[iOwner] = 0 return } if(!Get_Entity_Mode(iEnt)) { new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3]; iWpn = pev(iEnt, pev_iuser1) iState = pev(iWpn, pev_iuser4) Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin); pev(iOwner, pev_v_angle, vecAngle); vecAngle[0] = -vecAngle[0]; set_pev(iEnt, pev_origin, vecOrigin); set_pev(iEnt, pev_angles, vecAngle); if(!iState || get_user_weapon(iOwner) != CSW_DPS) { new Float:fRenderAmount; pev(iEnt, pev_renderamt, fRenderAmount); fRenderAmount -= 4.5; if (fRenderAmount <= 5.0) { remove_entity(iEnt); return; } set_pev(iEnt, pev_renderamt, fRenderAmount); } } if(Get_Entity_Mode(iEnt) == 1) { set_pev(iEnt, pev_movetype, MOVETYPE_FLY) static Float:Origin[3]; pev(iOwner, pev_origin, Origin) Origin[2] -= 25.0 Stock_Hook_Ent(iEnt, Origin, 0.01) if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner)) { set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME) return } set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0}); set_pev(iEnt, pev_origin, Origin); } if(Get_Entity_Mode(iEnt) == 2) { new Float:vecOrigin[3] GetGunPosition(iOwner, vecOrigin); new Float:fOldOrigin[3]; pev(iEnt, pev_oldorigin, fOldOrigin); new Float:vecNewOrigin[3]; pev(iEnt, pev_origin, vecNewOrigin); new Float:vecfff[3]; xs_vec_sub(vecOrigin, fOldOrigin, vecfff); xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin); set_pev(iEnt, pev_origin, vecNewOrigin); set_pev(iEnt, pev_oldorigin, vecOrigin); if (pev(iEnt, pev_iuser1) == 2) { new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin); if (fDist > 175.0 * 0.5) { remove_entity(iEnt); return; } } if(g_Sound[iOwner] < get_gametime()) { if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM) g_soundmode[iOwner]++ if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0 g_Sound[iOwner] = get_gametime()+0.088; } } set_pev(iEnt, pev_nextthink, get_gametime() + 0.01) if(Get_Entity_Mode(iEnt) == 2) { new Float:fTimeLast; pev(iEnt, pev_fuser1, fTimeLast); if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime()) { if (pev(iEnt, pev_iuser1) == 1) { new Float:fRenderAmount; pev(iEnt, pev_renderamt, fRenderAmount); fRenderAmount -= 7.5; if (fRenderAmount <= 5.0) { remove_entity(iEnt); return; } set_pev(iEnt, pev_renderamt, fRenderAmount); } else remove_entity(iEnt); g_soundmode[iOwner] = 0 } } } public fw_Item_PostFrame(ent) { new id = pev(ent, pev_owner) if(!is_user_connected(id)) return HAM_IGNORED if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id]) return HAM_IGNORED if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id])) { if(g_check[id] < 6) g_check[id] = 0 set_pev(ent, pev_iuser3, 0) Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB) set_pdata_float(ent, 48, 4.03, 4) } new iButton = pev(id,pev_button) return AurezBotac(id, ent, iButton) } public AurezBotac(id, iEnt, iButton) { new iState = pev(iEnt, pev_iuser3) new iState2 = pev(iEnt, pev_iuser2) new iSlash = pev(iEnt, pev_iuser4) new Float:fSound; pev(iEnt, pev_fuser1, fSound) new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range) if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2) { if(!iState || iState == 1) { Set_WeaponAnim(id, ANIM_STABEND) set_pev(iEnt, pev_iuser2, 0) set_pdata_float(iEnt, 48, 1.45,4) } } if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id]) { Set_WeaponAnim(id, ANIM_SLASHEND) set_pdata_float(iEnt, 48, 2.03,4) g_slashend[id] = 0 } if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1)) { new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius) new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState]) new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]])) switch (iHitResult) { case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2]) case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4]) } set_pev(iEnt, pev_iuser1, 0); } if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4) { set_pev(iEnt, pev_iuser4, 1 + iSlash) Set_WeaponAnim(id, 1 + iSlash) set_pdata_float(id, 83, 0.06) if(!get_pcvar_num(cvar_fast_attack)) set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4); set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4); set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4); set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash]) Create_Slash(id,iEnt,iSlash) if(iSlash == 3) { g_slashend[id] = 1 set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5)) set_pev(iEnt, pev_iuser4, 0) } } if(fSound && fSound < get_gametime()) { SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12]) set_pev(iEnt, pev_fuser1, 0.0) if(g_check[id] == 5) { Set_WeaponAnim(id, 14) SendSound(id,CHAN_ITEM,weapon_sound[20]) g_check[id] = 6 set_pdata_float(iEnt, 46, 1.03,4) set_pdata_float(iEnt, 47, 1.03,4) set_pdata_float(iEnt, 48, 1.03,4) set_pev(iEnt, pev_fuser4, get_gametime()+1.7); DPS_Special(id, 0, 2.0) } } if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0) { set_pdata_float(iEnt, 46, 11.36,4) set_pdata_float(iEnt, 47, 11.36,4) set_pdata_float(iEnt, 48, 11.36,4) g_check[id] = 7 set_pev(iEnt, pev_fuser1, get_gametime() + 10.6) Set_WeaponAnim(id, 15) } // NANI?! if(g_check[id] == 7 && fSound && fSound < get_gametime()) { SendSound(id,CHAN_VOICE,weapon_sound[14]) set_pev(iEnt, pev_fuser1, 0.0) g_check[id] = 0 DPS_Special(id, 1, 1.46) } DPS_RealSpecial(id, iEnt, fRange) if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0) { g_mode[id] = 0 g_slashend[id] = 0 set_pev(iEnt, pev_iuser2, 1) set_pev(iEnt, pev_iuser4, 0) switch(iState) { case 0: { set_pdata_float(id, 83, 0.16) set_pdata_float(iEnt, 46, 0.4,4); if(!get_pcvar_num(cvar_fast_attack)) set_pdata_float(iEnt, 47, 0.4,4); set_pdata_float(iEnt, 48, 1.0,4); set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_iuser3, 1) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) Set_WeaponAnim(id, ANIM_STAB1) SendSound(id, CHAN_WEAPON, weapon_sound[0]) if(!g_check[id]) g_check[id] = 1 else if(g_check[id] == 2) g_check[id] = 3 else g_check[id] = 0 } case 1: { set_pdata_float(id, 83, 0.16) set_pdata_float(iEnt, 46, 0.83,4); if(!get_pcvar_num(cvar_fast_attack)) set_pdata_float(iEnt, 47, 0.83,4); set_pdata_float(iEnt, 48, 1.5,4); set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) Set_WeaponAnim(id, ANIM_STAB2) SendSound(id, CHAN_WEAPON, weapon_sound[1]) if(g_check[id] == 3) g_check[id] = 4 else g_check[id] = 0 } } } if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash) { g_mode[id] = 1 set_pdata_float(id, 83, 0.04) if(!get_pcvar_num(cvar_fast_attack)) set_pdata_float(iEnt, 46, 0.13,4); set_pdata_float(iEnt, 47, 0.13,4); set_pdata_float(iEnt, 48, 0.5,4); set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_iuser2, 0) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_iuser4, 1) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) Set_WeaponAnim(id, ANIM_SLASH1) SendSound(id, CHAN_WEAPON, weapon_sound[5]) Create_Slash(id,iEnt,0) if(g_check[id] == 1) g_check[id] = 2 else if(g_check[id] == 4) g_check[id] = 5 else g_check[id] = 0 } iButton &= ~IN_ATTACK; iButton &= ~IN_ATTACK2; set_pev(id, pev_button, iButton); return HAM_IGNORED } stock Create_Slash(id,iEnt,seq) { new Float:vecOrigin[3], Float:vecAngle[3]; GetGunPosition(id, vecOrigin); pev(id, pev_v_angle, vecAngle); vecAngle[0] = -vecAngle[0]; new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq) // Set info for ent Set_Entity_Mode(pEntity, 0) set_pev(pEntity, pev_scale, 0.1); set_pev(pEntity, pev_iuser1, iEnt); set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01}); set_pev(pEntity, pev_angles, vecAngle); set_pev(pEntity, pev_nextthink, get_gametime()+0.01); } stock DPS_Special(id, seq, Float:fTime) { new Float:VecOrig[3], Float:VecAng[3] pev(id, pev_origin, VecOrig) pev(id, pev_angles, VecAng) new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) set_pev(iEfx, pev_classname, "dps_entytyd"); set_pev(iEfx, pev_origin, VecOrig) set_pev(iEfx, pev_frame, 0.0) set_pev(iEfx, pev_animtime, get_gametime()) set_pev(iEfx, pev_framerate, 1.0) set_pev(iEfx, pev_sequence, seq) engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl") dllfunc(DLLFunc_Spawn, iEfx) Set_Entity_Mode(iEfx, 1) set_pev(iEfx, pev_angles, VecAng) set_pev(iEfx, pev_solid, SOLID_NOT) set_pev(iEfx, pev_owner, id) set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01}); set_pev(iEfx, pev_fuser1, get_gametime() + fTime) set_pev(iEfx, pev_nextthink, get_gametime() + 0.01) } stock DPS_RealSpecial(id, iEnt, Float:fRange) { new Float:fTimeEffect; pev(iEnt, pev_fuser4, fTimeEffect); if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime()) { 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])) new Float:vecOrigin3[2][3], Float:vecOrigin[3]; pev(id, pev_origin, vecOrigin3[0]); pev(id, pev_origin, vecOrigin); xs_vec_copy(vecOrigin3[0], vecOrigin3[1]); new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85); vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0); switch (random(3)) { case 0: { vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0); vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0); vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0); } case 1: { vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0); vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0); } case 2: { vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0); vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0); vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0); } case 3: { vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0); vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0); vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0); } } if (random_num(0,9) > 8) { new Float:vecAngle2[3]; vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0); vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0); new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0) set_pev(pEntity, pev_angles, vecAngle2); set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01}); set_pev(pEntity, pev_iuser1, 1); set_pev(pEntity, pev_iuser2, iEnt); set_pev(pEntity, pev_frame, 0.0); Set_Entity_Mode(pEntity, 2) set_pev(pEntity, pev_fuser1, get_gametime()+0.53); set_pev(pEntity, pev_fuser2, get_gametime()+0.5); set_pev(pEntity, pev_fuser3, get_gametime()+0.31); set_pev(pEntity, pev_oldorigin, vecOrigin); set_pev(pEntity, pev_nextthink, get_gametime()+0.01); } new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0) set_pev(pEntity, pev_iuser1, 2); set_pev(pEntity, pev_iuser2, iEnt); Set_Entity_Mode(pEntity, 2) set_pev(pEntity, pev_frame, 0.0); set_pev(pEntity, pev_oldorigin, vecOrigin); set_pev(pEntity, pev_fuser1, get_gametime()+0.2); set_pev(pEntity, pev_fuser2, get_gametime()+0.5); set_pev(pEntity, pev_fuser3, get_gametime()+0.3); set_pev(pEntity, pev_nextthink, get_gametime()+0.01); set_pev(iEnt, pev_fuser4, get_gametime()+0.05); } } stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY) { new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")); // Set info for ent set_pev(pEntity, pev_movetype, move); set_pev(pEntity, pev_owner, id); engfunc(EngFunc_SetModel, pEntity, models); set_pev(pEntity, pev_classname, "dps_entytyd"); set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0}); set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0}); set_pev(pEntity, pev_origin, Start); set_pev(pEntity, pev_gravity, 0.01); set_pev(pEntity, pev_solid, solid); static Float:Velocity[3]; Stock_Get_Speed_Vector(Start, End, speed, Velocity); set_pev(pEntity, pev_velocity, Velocity); new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle); vector_to_angle(Velocity, vecVAngle) if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]); set_pev(pEntity, pev_angles, vecVAngle); set_pev(pEntity, pev_rendermode, kRenderTransAdd); set_pev(pEntity, pev_renderamt, 255.0); set_pev(pEntity, pev_sequence, seq) set_pev(pEntity, pev_animtime, get_gametime()); set_pev(pEntity, pev_framerate, 1.0) return pEntity; } stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode) stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3) stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) { xs_vec_sub(origin2, origin1, new_velocity) new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) xs_vec_mul_scalar(new_velocity, num, new_velocity) } stock GetGunPosition(id, Float:vecSrc[3]) { new Float:vecViewOfs[3]; pev(id, pev_origin, vecSrc); pev(id, pev_view_ofs, vecViewOfs); xs_vec_add(vecSrc, vecViewOfs, vecSrc); } stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack) { new iHitResult if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack) else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack) return iHitResult } stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB) { new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3]; GetGunPosition(id, vecSrc); pev(id, pev_v_angle, v_angle); engfunc(EngFunc_MakeVectors, v_angle); global_get(glb_v_forward, vecForward); xs_vec_mul_scalar(vecForward, flRange, vecForward); xs_vec_add(vecSrc, vecForward, vecEnd); new tr = create_tr2(); engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr); new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction); if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr); get_tr2(tr, TR_flFraction, flFraction); new iHitResult = RESULT_HIT_NONE; if (flFraction < 1.0) { new pEntity = get_tr2(tr, TR_pHit); iHitResult = RESULT_HIT_WORLD; if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity))) { if (CheckBack(id, pEntity) && bStab && iHitgroup == -1) flDamage *= 1.0; iHitResult = RESULT_HIT_PLAYER; } if (pev_valid(pEntity)) { engfunc(EngFunc_MakeVectors, v_angle); global_get(glb_v_forward, vecForward); if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup); ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType); ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType) Stock_Fake_KnockBack(id, pEntity, flKnockBack) if (IsAlive(pEntity)) { free_tr2(tr); return iHitResult; } } } free_tr2(tr); return iHitResult; } stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0) { new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3]; pev(id, pev_origin, vecOrigin); new iHitResult = RESULT_HIT_NONE; GetGunPosition(id, vecSrc); pev(id, pev_v_angle, v_angle); engfunc(EngFunc_MakeVectors, v_angle); global_get(glb_v_forward, vecForward); xs_vec_mul_scalar(vecForward, flRange, vecForward); xs_vec_add(vecSrc, vecForward, vecEnd); new tr = create_tr2(); engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr); new Float:EndPos2[3] get_tr2(tr, TR_vecEndPos, EndPos2) new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction); if (flFraction < 1.0) { iHitResult = RESULT_HIT_WORLD; if(bStab) Stock_SakuraEffect(id, EndPos2) } new Float:vecEndZ = vecEnd[2]; new pEntity = -1; while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0) { if (!pev_valid(pEntity)) continue; if (id == pEntity) continue; if (!IsAlive(pEntity)) continue; if (!CheckAngle(id, pEntity, fAngle)) continue; GetGunPosition(id, vecSrc); Stock_Get_Origin(pEntity, vecEnd); vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange); xs_vec_sub(vecEnd, vecSrc, vecForward); xs_vec_normalize(vecForward, vecForward); xs_vec_mul_scalar(vecForward, flRange, vecForward); xs_vec_add(vecSrc, vecForward, vecEnd); engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr); get_tr2(tr, TR_flFraction, flFraction); if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr); get_tr2(tr, TR_flFraction, flFraction); if (flFraction < 1.0) { if (IsPlayer(pEntity) || IsHostage(pEntity)) { iHitResult = RESULT_HIT_PLAYER; if(bStab) Stock_SakuraEffect(id, vecEnd) if (CheckBack(id, pEntity) && bStab && iHitgroup == -1) flDamage *= 1.0; } if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck) { engfunc(EngFunc_MakeVectors, v_angle); global_get(glb_v_forward, vecForward); if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup); ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB); ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB) Stock_Fake_KnockBack(id, pEntity, flKnockBack) } } free_tr2(tr); } return iHitResult; } stock Set_WeaponAnim(id, anim) { set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(pev(id, pev_body)) message_end() } stock Stock_Set_Vis(iEnt, iVis = 1) set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW) stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0) { static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time pev(ent, pev_origin, EntOrigin) if(!mode) { distance_f = get_distance_f(EntOrigin, TargetOrigin) fl_Time = distance_f / Speed pev(ent, pev_velocity, fl_Velocity) fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity) else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01}) } else { static Float:fl_EntVelocity[3], Float:fl_Acc[3] Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity) xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity) for(new i =0; i<3; i++) { if(fl_Velocity[i] > fl_EntVelocity[i]) { fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i] fl_Acc[i] = floatmin(70.0, fl_Acc[i]) fl_EntVelocity[i] += fl_Acc[i] } else if(fl_Velocity[i] < fl_EntVelocity[i]) { fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i] fl_Acc[i] = floatmin(70.0, fl_Acc[i]) fl_EntVelocity[i] -= fl_Acc[i] } } set_pev(ent, pev_velocity, fl_EntVelocity) } } stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3]) { new Float:v3[3],i for(i=0;i<3;i++) v3[i]=start[i]-end[i] new Float:vl = vector_length(v3) for(i=0;i<3;i++) reOri[i] = v3[i] / vl } stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[]) { static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs,vUp) xs_vec_add(vOrigin,vUp,vOrigin) pev(id, pev_v_angle, vAngle) engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } stock IsPlayer(pEntity) return is_user_connected(pEntity) stock IsHostage(pEntity) { new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname)) return equal(classname, "hostage_entity") } stock IsAlive(pEntity) { if (pEntity < 1) return 0 return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0) } stock CheckBack(iEnemy,id) { new Float:anglea[3], Float:anglev[3] pev(iEnemy, pev_v_angle, anglea) pev(id, pev_v_angle, anglev) new Float:angle = anglea[1] - anglev[1] if (angle < -180.0) angle += 360.0 if (angle <= 45.0 && angle >= -45.0) return 1 return 0 } stock CheckAngle(iAttacker, iVictim, Float:fAngle) return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees)) stock Float:Stock_CheckAngle(id,iTarget) { new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3] Stock_Get_Origin(id, vId_ori) Stock_Get_Origin(iTarget, vTar_ori) pev(id,pev_angles,vId_ang) for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i] fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1]) if (fLength<=0.0) { vOricross[0]=0.0 vOricross[1]=0.0 } else { vOricross[0]=vOricross[0]*(1.0/fLength) vOricross[1]=vOricross[1]*(1.0/fLength) } engfunc(EngFunc_MakeVectors,vId_ang) global_get(glb_v_forward,vForward) fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1] return fRad //-> RAD 90' = 0.5rad } stock Stock_Get_Origin(id, Float:origin[3]) { new Float:maxs[3],Float:mins[3] if (pev(id, pev_solid) == SOLID_BSP) { pev(id,pev_maxs,maxs) pev(id,pev_mins,mins) origin[0] = (maxs[0] - mins[0]) / 2 + mins[0] origin[1] = (maxs[1] - mins[1]) / 2 + mins[1] origin[2] = (maxs[2] - mins[2]) / 2 + mins[2] } else pev(id, pev_origin, origin) } public Stock_Fake_KnockBack(id, iVic, Float:iKb) { if(iVic > 32) return new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags pev(id, pev_origin, vAttacker) pev(iVic, pev_origin, vVictim) vAttacker[2] = vVictim[2] = 0.0 flags = pev(id, pev_flags) xs_vec_sub(vVictim, vAttacker, vVictim) new Float:fDistance fDistance = xs_vec_len(vVictim) xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim) pev(iVic, pev_velocity, vVelocity) xs_vec_mul_scalar(vVictim, iKb, vVictim) xs_vec_mul_scalar(vVictim, 50.0, vVictim) vVictim[2] = xs_vec_len(vVictim) * 0.15 if(flags &~ FL_ONGROUND) { xs_vec_mul_scalar(vVictim, 1.2, vVictim) vVictim[2] *= 0.4 } if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim) } stock Float:Stock_Get_Body_Dmg(iBody) { switch (iBody) { case HIT_GENERIC: return 0.75 case 1: return 4.0 case 2: return 1.0 case 3: return 1.25 case 4,5,6,7: return 0.75 default: return 0.75 } return 1.0 } stock Stock_SakuraEffect(id, Float:vecOri[3]) { engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri) write_byte(TE_BLOODSPRITE) engfunc(EngFunc_WriteCoord,vecOri[0]) engfunc(EngFunc_WriteCoord,vecOri[1]) engfunc(EngFunc_WriteCoord,vecOri[2]) write_short(ef_sakura[g_mode[id]?2:0]) write_short(ef_sakura[g_mode[id]?3:1]) write_byte(g_mode[id]?178:128) write_byte(random_num(2,3)) message_end() } stock can_damage(id1, id2) { if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33) return 1 // Check team return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114)) } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
you forgot remove some includes that found in zombie_escape.inc
so replace your extra item code with:
Code: Select all
/* Plugin generated by AMXX-Studio */
#pragma compress 1
#include <engine>
#include <fakemeta_util>
#include <xs>
#include <zombie_escape>
#include <ze_vip>
#define PLUGIN "CSO Dual Sword Phantom Slayer"
#define VERSION "1.0"
#define AUTHOR "Natasha aka Asdian"
#define CSW_DPS CSW_KNIFE
#define weapon_dps "weapon_knife"
#define v_model "models/v_dualsword.mdl"
#define p_model "models/p_dualsword_a.mdl"
#define p_model2 "models/p_dualsword_b.mdl"
#define spr_wpn "knife_dualsword"
new const weapon_sound[][] =
{
"weapons/dualsword_stab1.wav", // 0
"weapons/dualsword_stab2.wav", // 1
"weapons/dualsword_stab1_hit.wav", // 2
"weapons/dualsword_stab2_hit.wav", // 3
"weapons/katanad_hitwall.wav", // 4
"weapons/dualsword_slash_1.wav", // 5
"weapons/dualsword_slash_2.wav", // 6
"weapons/dualsword_slash_3.wav", // 7
"weapons/dualsword_slash_4.wav", // 8
"weapons/dualsword_hit1.wav", // 9
"weapons/dualsword_hit2.wav", // 10
"weapons/dualsword_hit3.wav", // 11
"weapons/dualsword_slash_4_1.wav", // 12
"weapons/dualsword_slash_4_2.wav", // 13
"weapons/dualsword_skill_end.wav", // 14
"weapons/dualsword_fly1.wav", // 15
"weapons/dualsword_fly2.wav", // 16
"weapons/dualsword_fly3.wav", // 17
"weapons/dualsword_fly4.wav", // 18
"weapons/dualsword_fly5.wav", // 19
"weapons/dualsword_skill_start.wav"
}
//Hit
#define RESULT_HIT_NONE 0
#define RESULT_HIT_PLAYER 1
#define RESULT_HIT_WORLD 2
enum _:WpnAnim
{
ANIM_IDLEA = 0,
ANIM_SLASH1,
ANIM_SLASH2,
ANIM_SLASH3,
ANIM_SLASH4,
ANIM_SLASHEND,
ANIM_DRAWA,
ANIM_IDLEB,
ANIM_STAB1,
ANIM_STAB2,
ANIM_STABEND,
ANIM_DRAWB
}
new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
new ef_sakura[4]
new Float:g_Sound[33]
new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
new cvar_damage_special, cvar_special_range
new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);
register_think("dps_entytyd", "Fw_DPSEnt_Think")
RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
register_clcmd(spr_wpn, "hook_rb")
cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
cvar_slash_radius = register_cvar("dps_slashradius","120.0")
cvar_slash_range = register_cvar("dps_slashrange","95.0")
cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
cvar_stab_radius = register_cvar("dps_stabradius","90.0")
cvar_stab_range = register_cvar("dps_stabrange","150.0")
cvar_damage_special = register_cvar("dps_specialdamage","95.0")
cvar_special_range = register_cvar("dps_specialrange","120.0")
cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
cvar_remove = register_cvar("dps_remove_onnewround", "0")
cvar_spr = register_cvar("dps_enable_sprites", "1")
g_dps = ze_register_item("Dual Sword Phantom Slayer \r(VIP)", 50, 0)
}
public plugin_precache()
{
precache_model(v_model)
precache_model(p_model)
precache_model(p_model2)
for(new i = 0; i < sizeof(weapon_sound); i++)
precache_sound(weapon_sound[i])
precache_model("models/dualswordfx.mdl")
precache_model("models/dualsword_skill.mdl")
precache_model("models/dualsword_skillfx1.mdl")
precache_model("models/dualsword_skillfx2.mdl")
ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
new Txt[32]
format(Txt, 31, "sprites/%s.txt", spr_wpn)
engfunc(EngFunc_PrecacheGeneric, Txt)
}
public ze_user_infected(id) remove_dps(id)
public ze_user_humanized(id) remove_dps(id)
public hook_rb(id)
{
engclient_cmd(id, weapon_dps)
return PLUGIN_HANDLED
}
public get_dps(id)
{
if (!is_user_alive(id))
return
g_had_dps[id] = 1
g_mode[id] = 0
g_slashend[id] = 0
g_check[id] = 0
g_soundmode[id] = 0
fm_give_item(id, weapon_dps)
if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
else engclient_cmd(id,weapon_dps)
}
public client_connected(id) remove_dps(id)
public client_disconnected(id) remove_dps(id)
public Event_NewRound()
{
if(!get_pcvar_num(cvar_remove))
return
for(new i = 0; i < get_maxplayers(); i++)
remove_dps(i)
}
public remove_dps(id)
{
g_had_dps[id] = 0
g_slashend[id] = 0
g_check[id] = 0
static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
if(!pev_valid(iEnt)) return
set_pev(iEnt, pev_iuser1, 0)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 0)
set_pev(iEnt, pev_fuser1, 0.0)
}
public ze_select_item_pre(id, itemid)
{
if (itemid != g_dps)
return ZE_ITEM_AVAILABLE
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
if (!(ze_get_vip_flags(id) & VIP_A))
return ZE_ITEM_DONT_SHOW
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(id, itemid)
{
if (itemid != g_dps)
return
get_dps(id)
}
public Event_CurWeapon(id)
{
if(!is_user_alive(id))
return 1
if(get_user_weapon(id) != CSW_DPS)
return 1
if(!g_had_dps[id])
return 1
if(ze_is_user_zombie(id))
return 1
set_pev(id, pev_viewmodel2, v_model)
set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
if(!pev_valid(iEnt)) return 1
set_pev(iEnt, pev_iuser1, 0)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 0)
set_pev(iEnt, pev_fuser1, 0.0)
g_slashend[id] = 0
g_check[id] = 0
set_pdata_float(id, 83, 0.23)
set_pdata_float(iEnt, 46, 0.25);
set_pdata_float(iEnt, 47, 0.25);
set_pdata_float(iEnt, 48, 0.25);
if(get_pcvar_num(cvar_spr))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(-1)
write_byte(2)
write_byte(1)
write_byte(CSW_DPS)
write_byte(0)
message_end()
}
return 0
}
public message_DeathMsg(msg_id, msg_dest, msg_ent)
{
new szWeapon[64]
get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
if (strcmp(szWeapon, "knife"))
return PLUGIN_CONTINUE
new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
return PLUGIN_CONTINUE
set_msg_arg_string(4, "dualsword")
return PLUGIN_CONTINUE
}
public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
if (!pev_valid(iEnt))
return;
if (pev(iEnt, pev_flags) & FL_KILLME)
return;
new classname[32];
pev(iEnt, pev_classname, classname, 31);
if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
{
if (iHost != pev(iEnt, pev_owner))
set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
}
}
public Fw_DPSEnt_Think(iEnt)
{
if(!pev_valid(iEnt))
return
new iOwner
iOwner = pev(iEnt, pev_owner)
if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || ze_is_user_zombie(iOwner))
{
remove_entity(iEnt)
g_soundmode[iOwner] = 0
return
}
if(!Get_Entity_Mode(iEnt))
{
new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
iWpn = pev(iEnt, pev_iuser1)
iState = pev(iWpn, pev_iuser4)
Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
pev(iOwner, pev_v_angle, vecAngle);
vecAngle[0] = -vecAngle[0];
set_pev(iEnt, pev_origin, vecOrigin);
set_pev(iEnt, pev_angles, vecAngle);
if(!iState || get_user_weapon(iOwner) != CSW_DPS)
{
new Float:fRenderAmount;
pev(iEnt, pev_renderamt, fRenderAmount);
fRenderAmount -= 4.5;
if (fRenderAmount <= 5.0)
{
remove_entity(iEnt);
return;
}
set_pev(iEnt, pev_renderamt, fRenderAmount);
}
}
if(Get_Entity_Mode(iEnt) == 1)
{
set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
Origin[2] -= 25.0
Stock_Hook_Ent(iEnt, Origin, 0.01)
if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
{
set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
return
}
set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
set_pev(iEnt, pev_origin, Origin);
}
if(Get_Entity_Mode(iEnt) == 2)
{
new Float:vecOrigin[3]
GetGunPosition(iOwner, vecOrigin);
new Float:fOldOrigin[3];
pev(iEnt, pev_oldorigin, fOldOrigin);
new Float:vecNewOrigin[3];
pev(iEnt, pev_origin, vecNewOrigin);
new Float:vecfff[3];
xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
set_pev(iEnt, pev_origin, vecNewOrigin);
set_pev(iEnt, pev_oldorigin, vecOrigin);
if (pev(iEnt, pev_iuser1) == 2)
{
new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
if (fDist > 175.0 * 0.5)
{
remove_entity(iEnt);
return;
}
}
if(g_Sound[iOwner] < get_gametime())
{
if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_soundmode[iOwner]++
if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
g_Sound[iOwner] = get_gametime()+0.088;
}
}
set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
if(Get_Entity_Mode(iEnt) == 2)
{
new Float:fTimeLast;
pev(iEnt, pev_fuser1, fTimeLast);
if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
{
if (pev(iEnt, pev_iuser1) == 1)
{
new Float:fRenderAmount;
pev(iEnt, pev_renderamt, fRenderAmount);
fRenderAmount -= 7.5;
if (fRenderAmount <= 5.0)
{
remove_entity(iEnt);
return;
}
set_pev(iEnt, pev_renderamt, fRenderAmount);
} else remove_entity(iEnt);
g_soundmode[iOwner] = 0
}
}
}
public fw_Item_PostFrame(ent)
{
new id = pev(ent, pev_owner)
if(!is_user_connected(id))
return HAM_IGNORED
if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
return HAM_IGNORED
if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
{
if(g_check[id] < 6) g_check[id] = 0
set_pev(ent, pev_iuser3, 0)
Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
set_pdata_float(ent, 48, 4.03, 4)
}
new iButton = pev(id,pev_button)
return AurezBotac(id, ent, iButton)
}
public AurezBotac(id, iEnt, iButton)
{
new iState = pev(iEnt, pev_iuser3)
new iState2 = pev(iEnt, pev_iuser2)
new iSlash = pev(iEnt, pev_iuser4)
new Float:fSound; pev(iEnt, pev_fuser1, fSound)
new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
{
if(!iState || iState == 1)
{
Set_WeaponAnim(id, ANIM_STABEND)
set_pev(iEnt, pev_iuser2, 0)
set_pdata_float(iEnt, 48, 1.45,4)
}
}
if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
{
Set_WeaponAnim(id, ANIM_SLASHEND)
set_pdata_float(iEnt, 48, 2.03,4)
g_slashend[id] = 0
}
if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
{
new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
switch (iHitResult)
{
case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
}
set_pev(iEnt, pev_iuser1, 0);
}
if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
{
set_pev(iEnt, pev_iuser4, 1 + iSlash)
Set_WeaponAnim(id, 1 + iSlash)
set_pdata_float(id, 83, 0.06)
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
Create_Slash(id,iEnt,iSlash)
if(iSlash == 3)
{
g_slashend[id] = 1
set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
set_pev(iEnt, pev_iuser4, 0)
}
}
if(fSound && fSound < get_gametime())
{
SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
set_pev(iEnt, pev_fuser1, 0.0)
if(g_check[id] == 5)
{
Set_WeaponAnim(id, 14)
SendSound(id,CHAN_ITEM,weapon_sound[20])
g_check[id] = 6
set_pdata_float(iEnt, 46, 1.03,4)
set_pdata_float(iEnt, 47, 1.03,4)
set_pdata_float(iEnt, 48, 1.03,4)
set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
DPS_Special(id, 0, 2.0)
}
}
if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
{
set_pdata_float(iEnt, 46, 11.36,4)
set_pdata_float(iEnt, 47, 11.36,4)
set_pdata_float(iEnt, 48, 11.36,4)
g_check[id] = 7
set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
Set_WeaponAnim(id, 15)
}
// NANI?!
if(g_check[id] == 7 && fSound && fSound < get_gametime())
{
SendSound(id,CHAN_VOICE,weapon_sound[14])
set_pev(iEnt, pev_fuser1, 0.0)
g_check[id] = 0
DPS_Special(id, 1, 1.46)
}
DPS_RealSpecial(id, iEnt, fRange)
if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
{
g_mode[id] = 0
g_slashend[id] = 0
set_pev(iEnt, pev_iuser2, 1)
set_pev(iEnt, pev_iuser4, 0)
switch(iState)
{
case 0:
{
set_pdata_float(id, 83, 0.16)
set_pdata_float(iEnt, 46, 0.4,4);
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 47, 0.4,4);
set_pdata_float(iEnt, 48, 1.0,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser3, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_STAB1)
SendSound(id, CHAN_WEAPON, weapon_sound[0])
if(!g_check[id]) g_check[id] = 1
else if(g_check[id] == 2) g_check[id] = 3
else g_check[id] = 0
}
case 1:
{
set_pdata_float(id, 83, 0.16)
set_pdata_float(iEnt, 46, 0.83,4);
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 47, 0.83,4);
set_pdata_float(iEnt, 48, 1.5,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_STAB2)
SendSound(id, CHAN_WEAPON, weapon_sound[1])
if(g_check[id] == 3) g_check[id] = 4
else g_check[id] = 0
}
}
}
if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
{
g_mode[id] = 1
set_pdata_float(id, 83, 0.04)
if(!get_pcvar_num(cvar_fast_attack))
set_pdata_float(iEnt, 46, 0.13,4);
set_pdata_float(iEnt, 47, 0.13,4);
set_pdata_float(iEnt, 48, 0.5,4);
set_pev(iEnt, pev_iuser1, 1)
set_pev(iEnt, pev_iuser2, 0)
set_pev(iEnt, pev_iuser3, 0)
set_pev(iEnt, pev_iuser4, 1)
set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
Set_WeaponAnim(id, ANIM_SLASH1)
SendSound(id, CHAN_WEAPON, weapon_sound[5])
Create_Slash(id,iEnt,0)
if(g_check[id] == 1) g_check[id] = 2
else if(g_check[id] == 4) g_check[id] = 5
else g_check[id] = 0
}
iButton &= ~IN_ATTACK;
iButton &= ~IN_ATTACK2;
set_pev(id, pev_button, iButton);
return HAM_IGNORED
}
stock Create_Slash(id,iEnt,seq)
{
new Float:vecOrigin[3], Float:vecAngle[3];
GetGunPosition(id, vecOrigin);
pev(id, pev_v_angle, vecAngle);
vecAngle[0] = -vecAngle[0];
new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
// Set info for ent
Set_Entity_Mode(pEntity, 0)
set_pev(pEntity, pev_scale, 0.1);
set_pev(pEntity, pev_iuser1, iEnt);
set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(pEntity, pev_angles, vecAngle);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}
stock DPS_Special(id, seq, Float:fTime)
{
new Float:VecOrig[3], Float:VecAng[3]
pev(id, pev_origin, VecOrig)
pev(id, pev_angles, VecAng)
new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
set_pev(iEfx, pev_classname, "dps_entytyd");
set_pev(iEfx, pev_origin, VecOrig)
set_pev(iEfx, pev_frame, 0.0)
set_pev(iEfx, pev_animtime, get_gametime())
set_pev(iEfx, pev_framerate, 1.0)
set_pev(iEfx, pev_sequence, seq)
engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
dllfunc(DLLFunc_Spawn, iEfx)
Set_Entity_Mode(iEfx, 1)
set_pev(iEfx, pev_angles, VecAng)
set_pev(iEfx, pev_solid, SOLID_NOT)
set_pev(iEfx, pev_owner, id)
set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
}
stock DPS_RealSpecial(id, iEnt, Float:fRange)
{
new Float:fTimeEffect;
pev(iEnt, pev_fuser4, fTimeEffect);
if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
{
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]))
new Float:vecOrigin3[2][3], Float:vecOrigin[3];
pev(id, pev_origin, vecOrigin3[0]);
pev(id, pev_origin, vecOrigin);
xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
switch (random(3))
{
case 0:
{
vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
}
case 1:
{
vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
}
case 2:
{
vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
}
case 3:
{
vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
}
}
if (random_num(0,9) > 8)
{
new Float:vecAngle2[3];
vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)
set_pev(pEntity, pev_angles, vecAngle2);
set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
set_pev(pEntity, pev_iuser1, 1);
set_pev(pEntity, pev_iuser2, iEnt);
set_pev(pEntity, pev_frame, 0.0);
Set_Entity_Mode(pEntity, 2)
set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
set_pev(pEntity, pev_oldorigin, vecOrigin);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
}
new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)
set_pev(pEntity, pev_iuser1, 2);
set_pev(pEntity, pev_iuser2, iEnt);
Set_Entity_Mode(pEntity, 2)
set_pev(pEntity, pev_frame, 0.0);
set_pev(pEntity, pev_oldorigin, vecOrigin);
set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
}
}
stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
{
new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
// Set info for ent
set_pev(pEntity, pev_movetype, move);
set_pev(pEntity, pev_owner, id);
engfunc(EngFunc_SetModel, pEntity, models);
set_pev(pEntity, pev_classname, "dps_entytyd");
set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
set_pev(pEntity, pev_origin, Start);
set_pev(pEntity, pev_gravity, 0.01);
set_pev(pEntity, pev_solid, solid);
static Float:Velocity[3];
Stock_Get_Speed_Vector(Start, End, speed, Velocity);
set_pev(pEntity, pev_velocity, Velocity);
new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
vector_to_angle(Velocity, vecVAngle)
if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
set_pev(pEntity, pev_angles, vecVAngle);
set_pev(pEntity, pev_rendermode, kRenderTransAdd);
set_pev(pEntity, pev_renderamt, 255.0);
set_pev(pEntity, pev_sequence, seq)
set_pev(pEntity, pev_animtime, get_gametime());
set_pev(pEntity, pev_framerate, 1.0)
return pEntity;
}
stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)
stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
xs_vec_sub(origin2, origin1, new_velocity)
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
xs_vec_mul_scalar(new_velocity, num, new_velocity)
}
stock GetGunPosition(id, Float:vecSrc[3])
{
new Float:vecViewOfs[3];
pev(id, pev_origin, vecSrc);
pev(id, pev_view_ofs, vecViewOfs);
xs_vec_add(vecSrc, vecViewOfs, vecSrc);
}
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
new iHitResult
if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)
return iHitResult
}
stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
GetGunPosition(id, vecSrc);
pev(id, pev_v_angle, v_angle);
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
new iHitResult = RESULT_HIT_NONE;
if (flFraction < 1.0)
{
new pEntity = get_tr2(tr, TR_pHit);
iHitResult = RESULT_HIT_WORLD;
if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
{
if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
flDamage *= 1.0;
iHitResult = RESULT_HIT_PLAYER;
}
if (pev_valid(pEntity))
{
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
if (iHitgroup != -1)
set_tr2(tr, TR_iHitgroup, iHitgroup);
ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
Stock_Fake_KnockBack(id, pEntity, flKnockBack)
if (IsAlive(pEntity))
{
free_tr2(tr);
return iHitResult;
}
}
}
free_tr2(tr);
return iHitResult;
}
stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
pev(id, pev_origin, vecOrigin);
new iHitResult = RESULT_HIT_NONE;
GetGunPosition(id, vecSrc);
pev(id, pev_v_angle, v_angle);
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
new tr = create_tr2();
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
new Float:EndPos2[3]
get_tr2(tr, TR_vecEndPos, EndPos2)
new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
iHitResult = RESULT_HIT_WORLD;
if(bStab) Stock_SakuraEffect(id, EndPos2)
}
new Float:vecEndZ = vecEnd[2];
new pEntity = -1;
while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
{
if (!pev_valid(pEntity))
continue;
if (id == pEntity)
continue;
if (!IsAlive(pEntity))
continue;
if (!CheckAngle(id, pEntity, fAngle))
continue;
GetGunPosition(id, vecSrc);
Stock_Get_Origin(pEntity, vecEnd);
vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
xs_vec_sub(vecEnd, vecSrc, vecForward);
xs_vec_normalize(vecForward, vecForward);
xs_vec_mul_scalar(vecForward, flRange, vecForward);
xs_vec_add(vecSrc, vecForward, vecEnd);
engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
get_tr2(tr, TR_flFraction, flFraction);
if (flFraction < 1.0)
{
if (IsPlayer(pEntity) || IsHostage(pEntity))
{
iHitResult = RESULT_HIT_PLAYER;
if(bStab) Stock_SakuraEffect(id, vecEnd)
if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
flDamage *= 1.0;
}
if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
{
engfunc(EngFunc_MakeVectors, v_angle);
global_get(glb_v_forward, vecForward);
if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
Stock_Fake_KnockBack(id, pEntity, flKnockBack)
}
}
free_tr2(tr);
}
return iHitResult;
}
stock Set_WeaponAnim(id, anim)
{
set_pev(id, pev_weaponanim, anim)
message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(anim)
write_byte(pev(id, pev_body))
message_end()
}
stock Stock_Set_Vis(iEnt, iVis = 1)
set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)
stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
{
static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
pev(ent, pev_origin, EntOrigin)
if(!mode)
{
distance_f = get_distance_f(EntOrigin, TargetOrigin)
fl_Time = distance_f / Speed
pev(ent, pev_velocity, fl_Velocity)
fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time
if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
} else {
static Float:fl_EntVelocity[3], Float:fl_Acc[3]
Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
for(new i =0; i<3; i++)
{
if(fl_Velocity[i] > fl_EntVelocity[i])
{
fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
fl_Acc[i] = floatmin(70.0, fl_Acc[i])
fl_EntVelocity[i] += fl_Acc[i]
}
else if(fl_Velocity[i] < fl_EntVelocity[i])
{
fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
fl_Acc[i] = floatmin(70.0, fl_Acc[i])
fl_EntVelocity[i] -= fl_Acc[i]
}
}
set_pev(ent, pev_velocity, fl_EntVelocity)
}
}
stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
{
new Float:v3[3],i
for(i=0;i<3;i++) v3[i]=start[i]-end[i]
new Float:vl = vector_length(v3)
for(i=0;i<3;i++) reOri[i] = v3[i] / vl
}
stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
{
static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
pev(id, pev_origin, vOrigin)
pev(id, pev_view_ofs,vUp)
xs_vec_add(vOrigin,vUp,vOrigin)
pev(id, pev_v_angle, vAngle)
engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
stock IsPlayer(pEntity) return is_user_connected(pEntity)
stock IsHostage(pEntity)
{
new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
return equal(classname, "hostage_entity")
}
stock IsAlive(pEntity)
{
if (pEntity < 1) return 0
return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}
stock CheckBack(iEnemy,id)
{
new Float:anglea[3], Float:anglev[3]
pev(iEnemy, pev_v_angle, anglea)
pev(id, pev_v_angle, anglev)
new Float:angle = anglea[1] - anglev[1]
if (angle < -180.0) angle += 360.0
if (angle <= 45.0 && angle >= -45.0) return 1
return 0
}
stock CheckAngle(iAttacker, iVictim, Float:fAngle) return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))
stock Float:Stock_CheckAngle(id,iTarget)
{
new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
Stock_Get_Origin(id, vId_ori)
Stock_Get_Origin(iTarget, vTar_ori)
pev(id,pev_angles,vId_ang)
for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
if (fLength<=0.0)
{
vOricross[0]=0.0
vOricross[1]=0.0
} else {
vOricross[0]=vOricross[0]*(1.0/fLength)
vOricross[1]=vOricross[1]*(1.0/fLength)
}
engfunc(EngFunc_MakeVectors,vId_ang)
global_get(glb_v_forward,vForward)
fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
return fRad //-> RAD 90' = 0.5rad
}
stock Stock_Get_Origin(id, Float:origin[3])
{
new Float:maxs[3],Float:mins[3]
if (pev(id, pev_solid) == SOLID_BSP)
{
pev(id,pev_maxs,maxs)
pev(id,pev_mins,mins)
origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
} else pev(id, pev_origin, origin)
}
public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
if(iVic > 32) return
new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
pev(id, pev_origin, vAttacker)
pev(iVic, pev_origin, vVictim)
vAttacker[2] = vVictim[2] = 0.0
flags = pev(id, pev_flags)
xs_vec_sub(vVictim, vAttacker, vVictim)
new Float:fDistance
fDistance = xs_vec_len(vVictim)
xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
pev(iVic, pev_velocity, vVelocity)
xs_vec_mul_scalar(vVictim, iKb, vVictim)
xs_vec_mul_scalar(vVictim, 50.0, vVictim)
vVictim[2] = xs_vec_len(vVictim) * 0.15
if(flags &~ FL_ONGROUND)
{
xs_vec_mul_scalar(vVictim, 1.2, vVictim)
vVictim[2] *= 0.4
}
if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}
stock Float:Stock_Get_Body_Dmg(iBody)
{
switch (iBody)
{
case HIT_GENERIC: return 0.75
case 1: return 4.0
case 2: return 1.0
case 3: return 1.25
case 4,5,6,7: return 0.75
default: return 0.75
}
return 1.0
}
stock Stock_SakuraEffect(id, Float:vecOri[3])
{
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
write_byte(TE_BLOODSPRITE)
engfunc(EngFunc_WriteCoord,vecOri[0])
engfunc(EngFunc_WriteCoord,vecOri[1])
engfunc(EngFunc_WriteCoord,vecOri[2])
write_short(ef_sakura[g_mode[id]?2:0])
write_short(ef_sakura[g_mode[id]?3:1])
write_byte(g_mode[id]?178:128)
write_byte(random_num(2,3))
message_end()
}
stock can_damage(id1, id2)
{
if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
return 1
// Check team
return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Not working
This code should work safely with linux:
- #pragma compress 1
- #include <amxmodx>
- #include <engine>
- #include <fakemeta>
- #include <fakemeta_util>
- #include <hamsandwich>
- #include <xs>
- #include <zombie_escape>
- #include <ze_vip>
- #define PLUGIN "CSO Dual Sword Phantom Slayer"
- #define VERSION "1.0"
- #define AUTHOR "Natasha aka Asdian"
- #define CSW_DPS CSW_KNIFE
- #define weapon_dps "weapon_knife"
- #define v_model "models/v_dualsword.mdl"
- #define p_model "models/p_dualsword_a.mdl"
- #define p_model2 "models/p_dualsword_b.mdl"
- #define spr_wpn "knife_dualsword"
- new const weapon_sound[][] =
- {
- "weapons/dualsword_stab1.wav", // 0
- "weapons/dualsword_stab2.wav", // 1
- "weapons/dualsword_stab1_hit.wav", // 2
- "weapons/dualsword_stab2_hit.wav", // 3
- "weapons/katanad_hitwall.wav", // 4
- "weapons/dualsword_slash_1.wav", // 5
- "weapons/dualsword_slash_2.wav", // 6
- "weapons/dualsword_slash_3.wav", // 7
- "weapons/dualsword_slash_4.wav", // 8
- "weapons/dualsword_hit1.wav", // 9
- "weapons/dualsword_hit2.wav", // 10
- "weapons/dualsword_hit3.wav", // 11
- "weapons/dualsword_slash_4_1.wav", // 12
- "weapons/dualsword_slash_4_2.wav", // 13
- "weapons/dualsword_skill_end.wav", // 14
- "weapons/dualsword_fly1.wav", // 15
- "weapons/dualsword_fly2.wav", // 16
- "weapons/dualsword_fly3.wav", // 17
- "weapons/dualsword_fly4.wav", // 18
- "weapons/dualsword_fly5.wav", // 19
- "weapons/dualsword_skill_start.wav"
- }
- //Hit
- #define RESULT_HIT_NONE 0
- #define RESULT_HIT_PLAYER 1
- #define RESULT_HIT_WORLD 2
- enum _:WpnAnim
- {
- ANIM_IDLEA = 0,
- ANIM_SLASH1,
- ANIM_SLASH2,
- ANIM_SLASH3,
- ANIM_SLASH4,
- ANIM_SLASHEND,
- ANIM_DRAWA,
- ANIM_IDLEB,
- ANIM_STAB1,
- ANIM_STAB2,
- ANIM_STABEND,
- ANIM_DRAWB
- }
- new g_had_dps[33], g_mode[33], g_slashend[33], g_check[33], g_dps, g_soundmode[33]
- new ef_sakura[4]
- new Float:g_Sound[33]
- new cvar_damage_slash[4], cvar_slash_radius, cvar_slash_range
- new cvar_damage_stab[2], cvar_stab_radius, cvar_stab_range
- new cvar_damage_special, cvar_special_range
- new cvar_knockback[3], cvar_fast_attack, cvar_remove, cvar_spr
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR)
- register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
- register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
- register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
- register_forward(FM_AddToFullPack, "Fw_AddToFullPack_Post", 1);
- register_think("dps_entytyd", "Fw_DPSEnt_Think")
- RegisterHam(Ham_Item_PostFrame, weapon_dps, "fw_Item_PostFrame")
- register_clcmd(spr_wpn, "hook_rb")
- cvar_damage_slash[0] = register_cvar("dps_slashdamage_4","486.0")
- cvar_damage_slash[1] = register_cvar("dps_slashdamage_1","120.0")
- cvar_damage_slash[2] = register_cvar("dps_slashdamage_2","140.0")
- cvar_damage_slash[3] = register_cvar("dps_slashdamage_3","360.0")
- cvar_slash_radius = register_cvar("dps_slashradius","120.0")
- cvar_slash_range = register_cvar("dps_slashrange","95.0")
- cvar_damage_stab[0] = register_cvar("dps_stabdamage_2","1200.0")
- cvar_damage_stab[1] = register_cvar("dps_stabdamage_1","350.0")
- cvar_stab_radius = register_cvar("dps_stabradius","90.0")
- cvar_stab_range = register_cvar("dps_stabrange","150.0")
- cvar_damage_special = register_cvar("dps_specialdamage","95.0")
- cvar_special_range = register_cvar("dps_specialrange","120.0")
- cvar_knockback[0] = register_cvar("dps_slashknockback","0.0")
- cvar_knockback[1] = register_cvar("dps_stabknockback","0.0")
- cvar_knockback[2] = register_cvar("dps_specialknockback","0.0")
- cvar_fast_attack = register_cvar("dps_fast_attack_enabled", "0")
- cvar_remove = register_cvar("dps_remove_onnewround", "0")
- cvar_spr = register_cvar("dps_enable_sprites", "1")
- g_dps = ze_register_item("Dual Sword Phantom Slayer \r(VIP)", 50, 0)
- }
- public plugin_precache()
- {
- precache_model(v_model)
- precache_model(p_model)
- precache_model(p_model2)
- for(new i = 0; i < sizeof(weapon_sound); i++)
- precache_sound(weapon_sound[i])
- precache_model("models/dualswordfx.mdl")
- precache_model("models/dualsword_skill.mdl")
- precache_model("models/dualsword_skillfx1.mdl")
- precache_model("models/dualsword_skillfx2.mdl")
- ef_sakura[0] = precache_model("sprites/leaf01_dualsword.spr")
- ef_sakura[1] = precache_model("sprites/leaf02_dualsword.spr")
- ef_sakura[2] = precache_model("sprites/petal01_dualsword.spr")
- ef_sakura[3] = precache_model("sprites/petal02_dualsword.spr")
- new Txt[32]
- format(Txt, 31, "sprites/%s.txt", spr_wpn)
- engfunc(EngFunc_PrecacheGeneric, Txt)
- }
- public ze_user_infected(id) remove_dps(id)
- public ze_user_humanized(id) remove_dps(id)
- public hook_rb(id)
- {
- engclient_cmd(id, weapon_dps)
- return PLUGIN_HANDLED
- }
- public get_dps(id)
- {
- if (!is_user_alive(id))
- return
- g_had_dps[id] = 1
- g_mode[id] = 0
- g_slashend[id] = 0
- g_check[id] = 0
- g_soundmode[id] = 0
- fm_give_item(id, weapon_dps)
- if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id)
- else engclient_cmd(id,weapon_dps)
- }
- public client_connected(id) remove_dps(id)
- public client_disconnected(id) remove_dps(id)
- public Event_NewRound()
- {
- if(!get_pcvar_num(cvar_remove))
- return
- for(new i = 0; i < get_maxplayers(); i++)
- remove_dps(i)
- }
- public remove_dps(id)
- {
- g_had_dps[id] = 0
- g_slashend[id] = 0
- g_check[id] = 0
- static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
- if(!pev_valid(iEnt)) return
- set_pev(iEnt, pev_iuser1, 0)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 0)
- set_pev(iEnt, pev_fuser1, 0.0)
- }
- public ze_select_item_pre(id, itemid)
- {
- if (itemid != g_dps)
- return ZE_ITEM_AVAILABLE
- if (ze_is_user_zombie(id))
- return ZE_ITEM_DONT_SHOW
- if (!(ze_get_vip_flags(id) & VIP_A))
- return ZE_ITEM_DONT_SHOW
- return ZE_ITEM_AVAILABLE
- }
- public ze_select_item_post(id, itemid)
- {
- if (itemid != g_dps)
- return
- get_dps(id)
- }
- public Event_CurWeapon(id)
- {
- if(!is_user_alive(id))
- return 1
- if(get_user_weapon(id) != CSW_DPS)
- return 1
- if(!g_had_dps[id])
- return 1
- if(ze_is_user_zombie(id))
- return 1
- set_pev(id, pev_viewmodel2, v_model)
- set_pev(id, pev_weaponmodel2, g_mode[id] ? p_model2:p_model)
- Set_WeaponAnim(id, g_mode[id]?ANIM_DRAWA:ANIM_DRAWB)
- static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_DPS)
- if(!pev_valid(iEnt)) return 1
- set_pev(iEnt, pev_iuser1, 0)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 0)
- set_pev(iEnt, pev_fuser1, 0.0)
- g_slashend[id] = 0
- g_check[id] = 0
- set_pdata_float(id, 83, 0.23)
- set_pdata_float(iEnt, 46, 0.25, 4);
- set_pdata_float(iEnt, 47, 0.25, 4);
- set_pdata_float(iEnt, 48, 0.25, 4);
- if(get_pcvar_num(cvar_spr))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id)
- write_string(g_had_dps[id] == 1 ? spr_wpn : weapon_dps)
- write_byte(-1)
- write_byte(-1)
- write_byte(-1)
- write_byte(-1)
- write_byte(2)
- write_byte(1)
- write_byte(CSW_DPS)
- write_byte(0)
- message_end()
- }
- return 0
- }
- public message_DeathMsg(msg_id, msg_dest, msg_ent)
- {
- new szWeapon[64]
- get_msg_arg_string(4, szWeapon, charsmax(szWeapon))
- if (strcmp(szWeapon, "knife"))
- return PLUGIN_CONTINUE
- new iEntity = get_pdata_cbase(get_msg_arg_int(1), 373)
- if (!pev_valid(iEntity) || get_pdata_int(iEntity, 43, 4) != CSW_DPS || !g_had_dps[get_msg_arg_int(1)])
- return PLUGIN_CONTINUE
- set_msg_arg_string(4, "dualsword")
- return PLUGIN_CONTINUE
- }
- public Fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
- {
- if (!pev_valid(iEnt))
- return;
- if (pev(iEnt, pev_flags) & FL_KILLME)
- return;
- new classname[32];
- pev(iEnt, pev_classname, classname, 31);
- if (equal(classname,"dps_entytyd") && pev(iEnt, pev_iuser4))
- {
- if (iHost != pev(iEnt, pev_owner))
- set_es(esState, ES_Effects, (get_es(esState, ES_Effects) | EF_NODRAW));
- }
- }
- public Fw_DPSEnt_Think(iEnt)
- {
- if(!pev_valid(iEnt))
- return
- new iOwner
- iOwner = pev(iEnt, pev_owner)
- if(!is_user_alive(iOwner) || !is_user_connected(iOwner) || ze_is_user_zombie(iOwner))
- {
- remove_entity(iEnt)
- g_soundmode[iOwner] = 0
- return
- }
- if(!Get_Entity_Mode(iEnt))
- {
- new iWpn,iState,Float:vecOrigin[3], Float:vecAngle[3];
- iWpn = pev(iEnt, pev_iuser1)
- iState = pev(iWpn, pev_iuser4)
- Stock_Get_Postion(iOwner, 0.0, 0.0, 0.0, vecOrigin);
- pev(iOwner, pev_v_angle, vecAngle);
- vecAngle[0] = -vecAngle[0];
- set_pev(iEnt, pev_origin, vecOrigin);
- set_pev(iEnt, pev_angles, vecAngle);
- if(!iState || get_user_weapon(iOwner) != CSW_DPS)
- {
- new Float:fRenderAmount;
- pev(iEnt, pev_renderamt, fRenderAmount);
- fRenderAmount -= 4.5;
- if (fRenderAmount <= 5.0)
- {
- remove_entity(iEnt);
- return;
- }
- set_pev(iEnt, pev_renderamt, fRenderAmount);
- }
- }
- if(Get_Entity_Mode(iEnt) == 1)
- {
- set_pev(iEnt, pev_movetype, MOVETYPE_FLY)
- static Float:Origin[3]; pev(iOwner, pev_origin, Origin)
- Origin[2] -= 25.0
- Stock_Hook_Ent(iEnt, Origin, 0.01)
- if(pev(iEnt, pev_fuser1) < get_gametime() || !IsAlive(iOwner))
- {
- set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME)
- return
- }
- set_pev(iEnt, pev_velocity, Float:{1.0,1.0,1.0});
- set_pev(iEnt, pev_origin, Origin);
- }
- if(Get_Entity_Mode(iEnt) == 2)
- {
- new Float:vecOrigin[3]
- GetGunPosition(iOwner, vecOrigin);
- new Float:fOldOrigin[3];
- pev(iEnt, pev_oldorigin, fOldOrigin);
- new Float:vecNewOrigin[3];
- pev(iEnt, pev_origin, vecNewOrigin);
- new Float:vecfff[3];
- xs_vec_sub(vecOrigin, fOldOrigin, vecfff);
- xs_vec_add(vecNewOrigin, vecfff, vecNewOrigin);
- set_pev(iEnt, pev_origin, vecNewOrigin);
- set_pev(iEnt, pev_oldorigin, vecOrigin);
- if (pev(iEnt, pev_iuser1) == 2)
- {
- new Float:fDist = get_distance_f(vecOrigin, vecNewOrigin);
- if (fDist > 175.0 * 0.5)
- {
- remove_entity(iEnt);
- return;
- }
- }
- if(g_Sound[iOwner] < get_gametime())
- {
- if(!g_soundmode[iOwner]) emit_sound(iOwner, CHAN_ITEM, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 1) emit_sound(iOwner, CHAN_BODY, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 2) emit_sound(iOwner, CHAN_VOICE, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- if(g_soundmode[iOwner] == 3) emit_sound(iOwner, CHAN_WEAPON, weapon_sound[random_num(15,19)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- g_soundmode[iOwner]++
- if(g_soundmode[iOwner] > 3) g_soundmode[iOwner] = 0
- g_Sound[iOwner] = get_gametime()+0.088;
- }
- }
- set_pev(iEnt, pev_nextthink, get_gametime() + 0.01)
- if(Get_Entity_Mode(iEnt) == 2)
- {
- new Float:fTimeLast;
- pev(iEnt, pev_fuser1, fTimeLast);
- if (fTimeLast < get_gametime() || pev(pev(iEnt, pev_iuser2), pev_fuser1) < get_gametime())
- {
- if (pev(iEnt, pev_iuser1) == 1)
- {
- new Float:fRenderAmount;
- pev(iEnt, pev_renderamt, fRenderAmount);
- fRenderAmount -= 7.5;
- if (fRenderAmount <= 5.0)
- {
- remove_entity(iEnt);
- return;
- }
- set_pev(iEnt, pev_renderamt, fRenderAmount);
- } else remove_entity(iEnt);
- g_soundmode[iOwner] = 0
- }
- }
- }
- public fw_Item_PostFrame(ent)
- {
- new id = pev(ent, pev_owner)
- if(!is_user_connected(id))
- return HAM_IGNORED
- if(get_user_weapon(id) != CSW_DPS || !g_had_dps[id])
- return HAM_IGNORED
- if(get_pdata_float(ent, 48, 4) <= 0.01 && (!pev(ent, pev_iuser2) || !g_slashend[id]))
- {
- if(g_check[id] < 6) g_check[id] = 0
- set_pev(ent, pev_iuser3, 0)
- Set_WeaponAnim(id, g_mode[id]?ANIM_IDLEA:ANIM_IDLEB)
- set_pdata_float(ent, 48, 4.03, 4)
- }
- new iButton = pev(id,pev_button)
- return AurezBotac(id, ent, iButton)
- }
- public AurezBotac(id, iEnt, iButton)
- {
- new iState = pev(iEnt, pev_iuser3)
- new iState2 = pev(iEnt, pev_iuser2)
- new iSlash = pev(iEnt, pev_iuser4)
- new Float:fSound; pev(iEnt, pev_fuser1, fSound)
- new Float:fRange = get_pcvar_float(g_mode[id] ? cvar_slash_range : cvar_stab_range)
- if(!(iButton & IN_ATTACK) && get_pdata_float(iEnt, 46,4) <= 0.0 && iState2)
- {
- if(!iState || iState == 1)
- {
- Set_WeaponAnim(id, ANIM_STABEND)
- set_pev(iEnt, pev_iuser2, 0)
- set_pdata_float(iEnt, 48, 1.45,4)
- }
- }
- if(!(iButton & IN_ATTACK2) && get_pdata_float(iEnt, 47,4) <= 0.0 && g_slashend[id])
- {
- Set_WeaponAnim(id, ANIM_SLASHEND)
- set_pdata_float(iEnt, 48, 2.03,4)
- g_slashend[id] = 0
- }
- if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1))
- {
- new Float:fAngle = get_pcvar_float(g_mode[id] ? cvar_slash_radius : cvar_stab_radius)
- new Float:fDamage = get_pcvar_float(g_mode[id] ? cvar_damage_slash[iSlash] : cvar_damage_stab[iState])
- new iHitResult = KnifeAttack_Global(id, true, fRange, fAngle, fDamage, get_pcvar_float(cvar_knockback[1+g_mode[id]]))
- switch (iHitResult)
- {
- case RESULT_HIT_PLAYER : client_cmd(id, "spk %s", weapon_sound[g_mode[id]?random_num(9,11):iState+2])
- case RESULT_HIT_WORLD : client_cmd(id, "spk %s", weapon_sound[4])
- }
- set_pev(iEnt, pev_iuser1, 0);
- }
- if(get_pdata_float(iEnt, 47,4) <= 0.0 && iSlash && iSlash <= 4)
- {
- set_pev(iEnt, pev_iuser4, 1 + iSlash)
- Set_WeaponAnim(id, 1 + iSlash)
- set_pdata_float(id, 83, 0.06)
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 46, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
- set_pdata_float(iEnt, 47, iSlash == 3 ? (g_check[id] == 5 ? 0.43 : 0.7) : 0.13,4);
- set_pdata_float(iEnt, 48, iSlash == 3 ? 1.4 : 1.0,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- SendSound(id, CHAN_WEAPON, weapon_sound[5 + iSlash])
- Create_Slash(id,iEnt,iSlash)
- if(iSlash == 3)
- {
- g_slashend[id] = 1
- set_pev(iEnt, pev_fuser1, get_gametime() + (g_check[id] == 5 ? 0.43 : 0.5))
- set_pev(iEnt, pev_iuser4, 0)
- }
- }
- if(fSound && fSound < get_gametime())
- {
- SendSound(id,CHAN_VOICE,weapon_sound[g_check[id] == 5 ? 13 : 12])
- set_pev(iEnt, pev_fuser1, 0.0)
- if(g_check[id] == 5)
- {
- Set_WeaponAnim(id, 14)
- SendSound(id,CHAN_ITEM,weapon_sound[20])
- g_check[id] = 6
- set_pdata_float(iEnt, 46, 1.03,4)
- set_pdata_float(iEnt, 47, 1.03,4)
- set_pdata_float(iEnt, 48, 1.03,4)
- set_pev(iEnt, pev_fuser4, get_gametime()+1.7);
- DPS_Special(id, 0, 2.0)
- }
- }
- if(g_check[id] == 6 && get_pdata_float(iEnt, 46,4) <= 0.0)
- {
- set_pdata_float(iEnt, 46, 11.36,4)
- set_pdata_float(iEnt, 47, 11.36,4)
- set_pdata_float(iEnt, 48, 11.36,4)
- g_check[id] = 7
- set_pev(iEnt, pev_fuser1, get_gametime() + 10.6)
- Set_WeaponAnim(id, 15)
- }
- // NANI?!
- if(g_check[id] == 7 && fSound && fSound < get_gametime())
- {
- SendSound(id,CHAN_VOICE,weapon_sound[14])
- set_pev(iEnt, pev_fuser1, 0.0)
- g_check[id] = 0
- DPS_Special(id, 1, 1.46)
- }
- DPS_RealSpecial(id, iEnt, fRange)
- if(iButton & IN_ATTACK && get_pdata_float(iEnt, 46,4) <= 0.0)
- {
- g_mode[id] = 0
- g_slashend[id] = 0
- set_pev(iEnt, pev_iuser2, 1)
- set_pev(iEnt, pev_iuser4, 0)
- switch(iState)
- {
- case 0:
- {
- set_pdata_float(id, 83, 0.16)
- set_pdata_float(iEnt, 46, 0.4,4);
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 47, 0.4,4);
- set_pdata_float(iEnt, 48, 1.0,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser3, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_STAB1)
- SendSound(id, CHAN_WEAPON, weapon_sound[0])
- if(!g_check[id]) g_check[id] = 1
- else if(g_check[id] == 2) g_check[id] = 3
- else g_check[id] = 0
- }
- case 1:
- {
- set_pdata_float(id, 83, 0.16)
- set_pdata_float(iEnt, 46, 0.83,4);
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 47, 0.83,4);
- set_pdata_float(iEnt, 48, 1.5,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_STAB2)
- SendSound(id, CHAN_WEAPON, weapon_sound[1])
- if(g_check[id] == 3) g_check[id] = 4
- else g_check[id] = 0
- }
- }
- }
- if(iButton & IN_ATTACK2 && get_pdata_float(iEnt, 47) <= 0.0 && !iSlash)
- {
- g_mode[id] = 1
- set_pdata_float(id, 83, 0.04)
- if(!get_pcvar_num(cvar_fast_attack))
- set_pdata_float(iEnt, 46, 0.13,4);
- set_pdata_float(iEnt, 47, 0.13,4);
- set_pdata_float(iEnt, 48, 0.5,4);
- set_pev(iEnt, pev_iuser1, 1)
- set_pev(iEnt, pev_iuser2, 0)
- set_pev(iEnt, pev_iuser3, 0)
- set_pev(iEnt, pev_iuser4, 1)
- set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83))
- Set_WeaponAnim(id, ANIM_SLASH1)
- SendSound(id, CHAN_WEAPON, weapon_sound[5])
- Create_Slash(id,iEnt,0)
- if(g_check[id] == 1) g_check[id] = 2
- else if(g_check[id] == 4) g_check[id] = 5
- else g_check[id] = 0
- }
- iButton &= ~IN_ATTACK;
- iButton &= ~IN_ATTACK2;
- set_pev(id, pev_button, iButton);
- return HAM_IGNORED
- }
- stock Create_Slash(id,iEnt,seq)
- {
- new Float:vecOrigin[3], Float:vecAngle[3];
- GetGunPosition(id, vecOrigin);
- pev(id, pev_v_angle, vecAngle);
- vecAngle[0] = -vecAngle[0];
- new pEntity = DPS_Entites(id,"models/dualswordfx.mdl",vecOrigin,vecOrigin,0.01,SOLID_NOT,seq)
- // Set info for ent
- Set_Entity_Mode(pEntity, 0)
- set_pev(pEntity, pev_scale, 0.1);
- set_pev(pEntity, pev_iuser1, iEnt);
- set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(pEntity, pev_angles, vecAngle);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- }
- stock DPS_Special(id, seq, Float:fTime)
- {
- new Float:VecOrig[3], Float:VecAng[3]
- pev(id, pev_origin, VecOrig)
- pev(id, pev_angles, VecAng)
- new iEfx = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
- set_pev(iEfx, pev_classname, "dps_entytyd");
- set_pev(iEfx, pev_origin, VecOrig)
- set_pev(iEfx, pev_frame, 0.0)
- set_pev(iEfx, pev_animtime, get_gametime())
- set_pev(iEfx, pev_framerate, 1.0)
- set_pev(iEfx, pev_sequence, seq)
- engfunc(EngFunc_SetModel, iEfx, "models/dualsword_skill.mdl")
- dllfunc(DLLFunc_Spawn, iEfx)
- Set_Entity_Mode(iEfx, 1)
- set_pev(iEfx, pev_angles, VecAng)
- set_pev(iEfx, pev_solid, SOLID_NOT)
- set_pev(iEfx, pev_owner, id)
- set_pev(iEfx, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(iEfx, pev_fuser1, get_gametime() + fTime)
- set_pev(iEfx, pev_nextthink, get_gametime() + 0.01)
- }
- stock DPS_RealSpecial(id, iEnt, Float:fRange)
- {
- new Float:fTimeEffect;
- pev(iEnt, pev_fuser4, fTimeEffect);
- if (g_check[id] == 7 && fTimeEffect && fTimeEffect <= get_gametime())
- {
- 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]))
- new Float:vecOrigin3[2][3], Float:vecOrigin[3];
- pev(id, pev_origin, vecOrigin3[0]);
- pev(id, pev_origin, vecOrigin);
- xs_vec_copy(vecOrigin3[0], vecOrigin3[1]);
- new Float:fFloat = random_float(fRange * -0.85, fRange * 0.85);
- vecOrigin3[0][2] = vecOrigin3[1][2] = vecOrigin3[0][2] + random_float(-5.0, 65.0);
- switch (random(3))
- {
- case 0:
- {
- vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
- }
- case 1:
- {
- vecOrigin3[0][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
- }
- case 2:
- {
- vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] -= fFloat*random_float(-1.0, 1.0);
- }
- case 3:
- {
- vecOrigin3[0][0] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[0][1] -= fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][0] += fFloat*random_float(-1.0, 1.0);
- vecOrigin3[1][1] += fFloat*random_float(-1.0, 1.0);
- }
- }
- if (random_num(0,9) > 8)
- {
- new Float:vecAngle2[3];
- vecAngle2[0] = random_num(0,1) ? random_float(-30.0, -15.0) : random_float(15.0, 30.0);
- vecAngle2[1] = random_num(0,1) ? random_float(-180.0, 0.0) : random_float(0.0, 180.0);
- new pEntity = DPS_Entites(id,"models/dualsword_skillfx1.mdl",vecOrigin3[0],vecOrigin3[0],0.01,SOLID_NOT,0)
- set_pev(pEntity, pev_angles, vecAngle2);
- set_pev(pEntity, pev_velocity, Float:{0.01,0.01,0.01});
- set_pev(pEntity, pev_iuser1, 1);
- set_pev(pEntity, pev_iuser2, iEnt);
- set_pev(pEntity, pev_frame, 0.0);
- Set_Entity_Mode(pEntity, 2)
- set_pev(pEntity, pev_fuser1, get_gametime()+0.53);
- set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
- set_pev(pEntity, pev_fuser3, get_gametime()+0.31);
- set_pev(pEntity, pev_oldorigin, vecOrigin);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- }
- new pEntity = DPS_Entites(id,"models/dualsword_skillfx2.mdl",vecOrigin3[0],vecOrigin3[1],500.0,SOLID_TRIGGER,0)
- set_pev(pEntity, pev_iuser1, 2);
- set_pev(pEntity, pev_iuser2, iEnt);
- Set_Entity_Mode(pEntity, 2)
- set_pev(pEntity, pev_frame, 0.0);
- set_pev(pEntity, pev_oldorigin, vecOrigin);
- set_pev(pEntity, pev_fuser1, get_gametime()+0.2);
- set_pev(pEntity, pev_fuser2, get_gametime()+0.5);
- set_pev(pEntity, pev_fuser3, get_gametime()+0.3);
- set_pev(pEntity, pev_nextthink, get_gametime()+0.01);
- set_pev(iEnt, pev_fuser4, get_gametime()+0.05);
- }
- }
- stock DPS_Entites(id, models[], Float:Start[3], Float:End[3], Float:speed, solid, seq, move=MOVETYPE_FLY)
- {
- new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
- // Set info for ent
- set_pev(pEntity, pev_movetype, move);
- set_pev(pEntity, pev_owner, id);
- engfunc(EngFunc_SetModel, pEntity, models);
- set_pev(pEntity, pev_classname, "dps_entytyd");
- set_pev(pEntity, pev_mins, Float:{-1.0, -1.0, -1.0});
- set_pev(pEntity, pev_maxs, Float:{1.0, 1.0, 1.0});
- set_pev(pEntity, pev_origin, Start);
- set_pev(pEntity, pev_gravity, 0.01);
- set_pev(pEntity, pev_solid, solid);
- static Float:Velocity[3];
- Stock_Get_Speed_Vector(Start, End, speed, Velocity);
- set_pev(pEntity, pev_velocity, Velocity);
- new Float:vecVAngle[3]; pev(id, pev_v_angle, vecVAngle);
- vector_to_angle(Velocity, vecVAngle)
- if(vecVAngle[0] > 90.0) vecVAngle[0] = -(360.0 - vecVAngle[0]);
- set_pev(pEntity, pev_angles, vecVAngle);
- set_pev(pEntity, pev_rendermode, kRenderTransAdd);
- set_pev(pEntity, pev_renderamt, 255.0);
- set_pev(pEntity, pev_sequence, seq)
- set_pev(pEntity, pev_animtime, get_gametime());
- set_pev(pEntity, pev_framerate, 1.0)
- return pEntity;
- }
- stock Set_Entity_Mode(iEnt, mode) set_pev(iEnt, pev_iuser3, mode)
- stock Get_Entity_Mode(iEnt) return pev(iEnt,pev_iuser3)
- stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
- stock Stock_Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
- {
- xs_vec_sub(origin2, origin1, new_velocity)
- new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
- xs_vec_mul_scalar(new_velocity, num, new_velocity)
- }
- stock GetGunPosition(id, Float:vecSrc[3])
- {
- new Float:vecViewOfs[3];
- pev(id, pev_origin, vecSrc);
- pev(id, pev_view_ofs, vecViewOfs);
- xs_vec_add(vecSrc, vecViewOfs, vecSrc);
- }
- stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
- {
- new iHitResult
- if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
- else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)
- return iHitResult
- }
- stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
- {
- new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
- GetGunPosition(id, vecSrc);
- pev(id, pev_v_angle, v_angle);
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- new tr = create_tr2();
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- new iHitResult = RESULT_HIT_NONE;
- if (flFraction < 1.0)
- {
- new pEntity = get_tr2(tr, TR_pHit);
- iHitResult = RESULT_HIT_WORLD;
- if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
- {
- if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
- flDamage *= 1.0;
- iHitResult = RESULT_HIT_PLAYER;
- }
- if (pev_valid(pEntity))
- {
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- if (iHitgroup != -1)
- set_tr2(tr, TR_iHitgroup, iHitgroup);
- ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
- ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
- Stock_Fake_KnockBack(id, pEntity, flKnockBack)
- if (IsAlive(pEntity))
- {
- free_tr2(tr);
- return iHitResult;
- }
- }
- }
- free_tr2(tr);
- return iHitResult;
- }
- stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
- {
- new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
- pev(id, pev_origin, vecOrigin);
- new iHitResult = RESULT_HIT_NONE;
- GetGunPosition(id, vecSrc);
- pev(id, pev_v_angle, v_angle);
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- new tr = create_tr2();
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- new Float:EndPos2[3]
- get_tr2(tr, TR_vecEndPos, EndPos2)
- new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- iHitResult = RESULT_HIT_WORLD;
- if(bStab) Stock_SakuraEffect(id, EndPos2)
- }
- new Float:vecEndZ = vecEnd[2];
- new pEntity = -1;
- while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
- {
- if (!pev_valid(pEntity))
- continue;
- if (id == pEntity)
- continue;
- if (!IsAlive(pEntity))
- continue;
- if (!CheckAngle(id, pEntity, fAngle))
- continue;
- GetGunPosition(id, vecSrc);
- Stock_Get_Origin(pEntity, vecEnd);
- vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);
- xs_vec_sub(vecEnd, vecSrc, vecForward);
- xs_vec_normalize(vecForward, vecForward);
- xs_vec_mul_scalar(vecForward, flRange, vecForward);
- xs_vec_add(vecSrc, vecForward, vecEnd);
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
- get_tr2(tr, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- if (IsPlayer(pEntity) || IsHostage(pEntity))
- {
- iHitResult = RESULT_HIT_PLAYER;
- if(bStab) Stock_SakuraEffect(id, vecEnd)
- if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
- flDamage *= 1.0;
- }
- if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
- {
- engfunc(EngFunc_MakeVectors, v_angle);
- global_get(glb_v_forward, vecForward);
- if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
- ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
- ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
- Stock_Fake_KnockBack(id, pEntity, flKnockBack)
- }
- }
- free_tr2(tr);
- }
- return iHitResult;
- }
- stock Set_WeaponAnim(id, anim)
- {
- set_pev(id, pev_weaponanim, anim)
- message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
- write_byte(anim)
- write_byte(pev(id, pev_body))
- message_end()
- }
- stock Stock_Set_Vis(iEnt, iVis = 1)
- set_pev(iEnt, pev_effects, iVis == 1 ? pev(iEnt, pev_effects) & ~EF_NODRAW : pev(iEnt, pev_effects) | EF_NODRAW)
- stock Stock_Hook_Ent(ent, Float:TargetOrigin[3], Float:Speed, mode=0)
- {
- static Float:fl_Velocity[3],Float:EntOrigin[3],Float:distance_f,Float:fl_Time
- pev(ent, pev_origin, EntOrigin)
- if(!mode)
- {
- distance_f = get_distance_f(EntOrigin, TargetOrigin)
- fl_Time = distance_f / Speed
- pev(ent, pev_velocity, fl_Velocity)
- fl_Velocity[0] = (TargetOrigin[0] - EntOrigin[0]) / fl_Time
- fl_Velocity[1] = (TargetOrigin[1] - EntOrigin[1]) / fl_Time
- fl_Velocity[2] = (TargetOrigin[2] - EntOrigin[2]) / fl_Time
- if(vector_length(fl_Velocity) > 1.0) set_pev(ent, pev_velocity, fl_Velocity)
- else set_pev(ent, pev_velocity, Float:{0.01, 0.01, 0.01})
- } else {
- static Float:fl_EntVelocity[3], Float:fl_Acc[3]
- Stock_Directed_Vector(TargetOrigin, EntOrigin, fl_Velocity)
- xs_vec_mul_scalar(fl_Velocity, Speed, fl_Velocity)
- for(new i =0; i<3; i++)
- {
- if(fl_Velocity[i] > fl_EntVelocity[i])
- {
- fl_Acc[i] = fl_Velocity[i]-fl_EntVelocity[i]
- fl_Acc[i] = floatmin(70.0, fl_Acc[i])
- fl_EntVelocity[i] += fl_Acc[i]
- }
- else if(fl_Velocity[i] < fl_EntVelocity[i])
- {
- fl_Acc[i] = fl_EntVelocity[i]-fl_Velocity[i]
- fl_Acc[i] = floatmin(70.0, fl_Acc[i])
- fl_EntVelocity[i] -= fl_Acc[i]
- }
- }
- set_pev(ent, pev_velocity, fl_EntVelocity)
- }
- }
- stock Stock_Directed_Vector(Float:start[3],Float:end[3],Float:reOri[3])
- {
- new Float:v3[3],i
- for(i=0;i<3;i++) v3[i]=start[i]-end[i]
- new Float:vl = vector_length(v3)
- for(i=0;i<3;i++) reOri[i] = v3[i] / vl
- }
- stock Stock_Get_Postion(id,Float:forw,Float:right,Float:up,Float:vStart[])
- {
- static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
- pev(id, pev_origin, vOrigin)
- pev(id, pev_view_ofs,vUp)
- xs_vec_add(vOrigin,vUp,vOrigin)
- pev(id, pev_v_angle, vAngle)
- engfunc(EngFunc_AngleVectors, vAngle, vForward, vRight, vUp)
- vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
- vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
- vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
- }
- stock IsPlayer(pEntity) return is_user_connected(pEntity)
- stock IsHostage(pEntity)
- {
- new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
- return equal(classname, "hostage_entity")
- }
- stock IsAlive(pEntity)
- {
- if (pEntity < 1) return 0
- return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
- }
- stock CheckBack(iEnemy,id)
- {
- new Float:anglea[3], Float:anglev[3]
- pev(iEnemy, pev_v_angle, anglea)
- pev(id, pev_v_angle, anglev)
- new Float:angle = anglea[1] - anglev[1]
- if (angle < -180.0) angle += 360.0
- if (angle <= 45.0 && angle >= -45.0) return 1
- return 0
- }
- stock CheckAngle(iAttacker, iVictim, Float:fAngle) return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))
- stock Float:Stock_CheckAngle(id,iTarget)
- {
- new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
- Stock_Get_Origin(id, vId_ori)
- Stock_Get_Origin(iTarget, vTar_ori)
- pev(id,pev_angles,vId_ang)
- for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
- fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
- if (fLength<=0.0)
- {
- vOricross[0]=0.0
- vOricross[1]=0.0
- } else {
- vOricross[0]=vOricross[0]*(1.0/fLength)
- vOricross[1]=vOricross[1]*(1.0/fLength)
- }
- engfunc(EngFunc_MakeVectors,vId_ang)
- global_get(glb_v_forward,vForward)
- fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
- return fRad //-> RAD 90' = 0.5rad
- }
- stock Stock_Get_Origin(id, Float:origin[3])
- {
- new Float:maxs[3],Float:mins[3]
- if (pev(id, pev_solid) == SOLID_BSP)
- {
- pev(id,pev_maxs,maxs)
- pev(id,pev_mins,mins)
- origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
- origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
- origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
- } else pev(id, pev_origin, origin)
- }
- public Stock_Fake_KnockBack(id, iVic, Float:iKb)
- {
- if(iVic > 32) return
- new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
- pev(id, pev_origin, vAttacker)
- pev(iVic, pev_origin, vVictim)
- vAttacker[2] = vVictim[2] = 0.0
- flags = pev(id, pev_flags)
- xs_vec_sub(vVictim, vAttacker, vVictim)
- new Float:fDistance
- fDistance = xs_vec_len(vVictim)
- xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
- pev(iVic, pev_velocity, vVelocity)
- xs_vec_mul_scalar(vVictim, iKb, vVictim)
- xs_vec_mul_scalar(vVictim, 50.0, vVictim)
- vVictim[2] = xs_vec_len(vVictim) * 0.15
- if(flags &~ FL_ONGROUND)
- {
- xs_vec_mul_scalar(vVictim, 1.2, vVictim)
- vVictim[2] *= 0.4
- }
- if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
- }
- stock Float:Stock_Get_Body_Dmg(iBody)
- {
- switch (iBody)
- {
- case HIT_GENERIC: return 0.75
- case 1: return 4.0
- case 2: return 1.0
- case 3: return 1.25
- case 4,5,6,7: return 0.75
- default: return 0.75
- }
- return 1.0
- }
- stock Stock_SakuraEffect(id, Float:vecOri[3])
- {
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOri)
- write_byte(TE_BLOODSPRITE)
- engfunc(EngFunc_WriteCoord,vecOri[0])
- engfunc(EngFunc_WriteCoord,vecOri[1])
- engfunc(EngFunc_WriteCoord,vecOri[2])
- write_short(ef_sakura[g_mode[id]?2:0])
- write_short(ef_sakura[g_mode[id]?3:1])
- write_byte(g_mode[id]?178:128)
- write_byte(random_num(2,3))
- message_end()
- }
- stock can_damage(id1, id2)
- {
- if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
- return 1
- // Check team
- return(get_pdata_int(id1, 114) != get_pdata_int(id2, 114))
- }
He who fails to plan is planning to fail
Animations are bad coded
Stupidly coded, and i don't like this weapon so hope any other one fix it for you, now the new problem: Set animations properly
Moved to right section.
Moved to right section.
He who fails to plan is planning to fail
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
Create an account or sign in to join the discussion
You need to be a member in order to post a reply
Create an account
Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute
Sign in
Who is online
Users browsing this forum: No registered users and 15 guests