RSSy MYGO.pl Opublikowano Kwiecień 4, 2021 o 19:14 RSSy Udostępnij Opublikowano Kwiecień 4, 2021 o 19:14 Hello, can someone fix this plugins and make it work for linux? it doesn't crash in HLDS windows. When i try to upload it on my linux server it crash. Holy sword divine order: PHP Code: #include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <xs> #include <zp50_core> #include <zp50_class_nemesis> #include <crxknives> #pragma compress 1 #define NAME "[ZE] Knife: Holy Sword Divine Order" #define VER "1.0" #define AUTHOR "Asdian DX" #define CSW_HOLYSWORD CSW_KNIFE #define weapon_holysword "weapon_knife" #define v_model "models/gcg_csze/v_holysword.mdl" #define p_model "models/gcg_csze/p_holysword.mdl" #define spr_wpn "gcg_csze/knife_holysword" #define anim_ext "knife" new const weapon_sound[][] = { "weapons/holysword_slash1.wav", // 0 "weapons/holysword_slash2.wav", // 1 "weapons/holysword_slash3.wav", // 2 "weapons/tomahawk_slash1_hit.wav", // 3 "weapons/tomahawk_slash2_hit.wav", // 4 "weapons/combatknife_wall.wav", // 5 // specials "weapons/holysword_cannon.wav", // 6 "weapons/holysword_cannon_exp.wav", // 7 "weapons/holysword_charge_loop.wav", // 8 "weapons/holysword_charge_slash.wav", // 9 "weapons/holysword_paring_slash.wav", // 10 "weapons/holysword_parryattack.wav" // 11 } new const entity_models[][] = { "models/gcg_csze/ef_holysword_chargecannon.mdl", "models/gcg_csze/ef_holysword_parryattack.mdl", "models/gcg_csze/ef_holysword_parryattack2.mdl" } //SLASH #define SLASH_ANGLE 30.0 #define SLASH_DAMAGE 110.0 #define SLASH_RANGE 120.0 #define SLASH_KNOCKBACK 1.0 //STACK #define STACK_ANGLE 40.0 #define STACK_DAMAGE 125.0 #define STACK_RANGE 150.0 #define STACK_KNOCKBACK 3.0 //CHARGE #define CHARGE_DAMAGE 90.0 #define CHARGE_RADIUS 10.0 #define CHARGE_KNOCKBACK 5.0 //BLAST-DEF #define BLAST_DAMAGE 400.0 #define BLAST_RADIUS 179.0 #define BLAST_RANGE 120.0 #define BLAST_KNOCKBACK 15.0 new const Float:AttackDamage_Mul[3] = { 1.0, 1.5, 2.0 } //Hit #define RESULT_HIT_NONE 0 #define RESULT_HIT_PLAYER 1 #define RESULT_HIT_WORLD 2 #define DMG_GIB_CORPSE (DMG_CRUSH | DMG_FALL | DMG_BLAST | DMG_SONIC)// | DMG_CLUB) #define DMG_SHOWNHUD (DMG_POISON | DMG_ACID | DMG_FREEZE | DMG_SLOWFREEZE | DMG_DROWN | DMG_BURN | DMG_SLOWBURN | DMG_NERVEGAS | DMG_RADIATION | DMG_SHOCK) #define DMG_ALL (DMG_GIB_CORPSE | DMG_SHOWNHUD) enum _:iAnim { ANIM_IDLE = 0, ANIM_DRAW, ANIM_SLASH1, ANIM_SLASH2, ANIM_SLASH3, ANIM_SLASH_CHARGE, ANIM_CHARGE_START, ANIM_CHARGE_LOOP, ANIM_CHARGE_SLASH1, ANIM_CHARGE_SLASH2, ANIM_PARING, ANIM_PARING_SLASH1, ANIM_PARING_SLASH2 } new g_had_holysword[33], g_isStack[33], Float:g_fTimer[33], g_isDef[33] new spr_blood_spray, spr_blood_drop, spr1, spr2, szAnimation[64] new const ATTRIBUTE_BONUS_XP[] = "HOLYSWORD" public plugin_init() { register_plugin(NAME, VER, AUTHOR) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_message(get_user_msgid("DeathMsg"), "message_DeathMsg") register_forward(FM_ClientCommand , "Fw_ClientCommand") register_event("HLTV", "event_newround", "a", "1=0", "2=0") RegisterHam(Ham_Item_PostFrame, weapon_holysword, "fw_Item_PostFrame") RegisterHam(Ham_Think, "info_target", "fw_MF_Think") RegisterHam(Ham_Touch, "info_target", "fw_HS_Touch") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") register_clcmd(spr_wpn, "hook_hs") } public plugin_precache() { precache_model(v_model) precache_model(p_model) new i for(i = 0; i < sizeof(weapon_sound); i++) precache_sound(weapon_sound[i]) for(i = 0; i < sizeof(entity_models); i++) precache_model(entity_models[i]) spr1 = precache_model("sprites/gcg_csze/muzzleflash65.spr") spr2 = precache_model("sprites/gcg_csze/muzzleflash78.spr") spr_blood_spray = precache_model("sprites/bloodspray.spr") spr_blood_drop = precache_model("sprites/blood.spr") new Txt[64] format(Txt, 63, "sprites/%s.txt", spr_wpn) engfunc(EngFunc_PrecacheGeneric, Txt) } public hook_hs(id) { engclient_cmd(id, weapon_holysword) return PLUGIN_HANDLED } public zp_fw_core_infect_post(id) remove_hsword(id) public crxknives_knife_updated(id, iKnife, bool:bOnConnect) { static iValue if(crxknives_get_attribute_int(id, ATTRIBUTE_BONUS_XP, iValue) && iValue == 1) { g_had_holysword[id] = 1 } else { g_had_holysword[id] = 0 } } public zp_fw_core_cure_post(id) crxknives_get_attribute_int(id, ATTRIBUTE_BONUS_XP, g_had_holysword[id]) public event_newround() { new iPlayers[32], iPnum, iPlayer for(new i = 0; i < iPnum; i++) { iPlayer = iPlayers[i] crxknives_get_attribute_int(iPlayer, ATTRIBUTE_BONUS_XP, g_had_holysword[iPlayer]) } } public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) { if (!is_user_alive(attacker)) return HAM_IGNORED; if (g_isDef[victim] && !(damage_type & DMG_ALL)) { if (g_isDef[victim] == 1) { g_isDef[victim] = 2 return HAM_SUPERCEDE } return HAM_SUPERCEDE } return HAM_IGNORED } public Fw_ClientCommand(id) { new sCmd[32] read_argv(0,sCmd,31) if(equal(sCmd,"lastinv") || equal(sCmd,"weapon_",7)) if(g_isDef[id]) return FMRES_SUPERCEDE return FMRES_IGNORED } public get_hsword(id) { if (!is_user_alive(id)) return g_had_holysword[id] = 1 g_isStack[id] = 0 g_isDef[id] = 0 if (get_user_weapon(id) == CSW_HOLYSWORD) Event_CurWeapon(id) else engclient_cmd(id,weapon_holysword) message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string(g_had_holysword[id] == 1 ? spr_wpn : weapon_holysword) write_byte(-1) write_byte(-1) write_byte(-1) write_byte(-1) write_byte(2) write_byte(1) write_byte(CSW_HOLYSWORD) write_byte(0) message_end() } public remove_hsword(id) { g_had_holysword[id] = 0 } public Event_CurWeapon(id) { if(!is_user_alive(id)) return PLUGIN_HANDLED if(get_user_weapon(id) != CSW_HOLYSWORD) return PLUGIN_HANDLED if(!g_had_holysword[id]) return PLUGIN_HANDLED new IsSpec = (g_isStack[id] == 5) set_pev(id, pev_viewmodel2, v_model) set_pev(id, pev_weaponmodel2, p_model) Set_WeaponAnim(id, IsSpec?ANIM_DRAW+13:ANIM_DRAW) static iEnt; iEnt = fm_get_user_weapon_entity(id, CSW_HOLYSWORD) if(!pev_valid(iEnt)) return 1 set_pdata_float(id, 83, 1.0) set_pdata_float(iEnt, 46, 1.03); set_pdata_float(iEnt, 47, 1.03); set_pdata_float(iEnt, 48, 1.03); g_isDef[id] = 0 set_pev(iEnt, pev_iuser1, 0) set_pev(iEnt, pev_iuser2, 0) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_iuser4, 0) return PLUGIN_CONTINUE } 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_HOLYSWORD || !g_had_holysword[get_msg_arg_int(1)]) return PLUGIN_CONTINUE set_msg_arg_string(4, "holysword") return PLUGIN_CONTINUE } 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_HOLYSWORD || !g_had_holysword[id]) return HAM_IGNORED new iButton = pev(id,pev_button) new IsSpec = (g_isStack[id] == 5) if (get_pdata_float(ent, 48, 4) <= 0.0) { if(g_isDef[id] == 1) g_isDef[id] = 0 set_pev(ent, pev_iuser4, 0) set_pev(id, pev_body, IsSpec) Set_WeaponAnim(id, IsSpec?ANIM_IDLE+13:ANIM_IDLE) set_pdata_float(ent, 48, 8.06,4); } return AurezLegendOfBotac(id, ent, iButton) } public Float:DmgAdjust(IsSpec,iSlash,iType) { if(!iType) return (IsSpec)?STACK_ANGLE:SLASH_ANGLE else if(iType == 1) return (IsSpec?STACK_DAMAGE:SLASH_DAMAGE) * AttackDamage_Mul[iSlash] else if(iType == 2) return (IsSpec)?STACK_KNOCKBACK:SLASH_KNOCKBACK else if(iType == 3) return (IsSpec)?STACK_RANGE:SLASH_RANGE return 1.0 } public AurezLegendOfBotac(id, iEnt, iButton) { new bStab2 = pev(iEnt, pev_iuser2); new iState = pev(iEnt, pev_iuser3) new iHold = pev(iEnt, pev_iuser4) new IsSpec = (g_isStack[id] == 5) new Float:flCheck; pev(iEnt, pev_fuser1, flCheck) if(g_isDef[id] == 2) { Set_WeaponAnim(id, !IsSpec?ANIM_PARING_SLASH1:ANIM_PARING_SLASH1+13) g_isDef[id] = 3 Gunkata_Blast(id, IsSpec) SendSound(id, CHAN_WEAPON, weapon_sound[11]) client_cmd(id, "spk %s", weapon_sound[10]) set_pdata_float(id, 83, 0.5) set_pdata_float(iEnt, 46, 2.03,4); set_pdata_float(iEnt, 47, 2.03,4); set_pdata_float(iEnt, 48, 2.03,4); } if(get_pdata_float(id, 83) <= 0.0 && g_isDef[id] == 3) { KnifeAttack2(id, IsSpec, BLAST_RANGE, BLAST_RADIUS, BLAST_DAMAGE, BLAST_KNOCKBACK) g_isDef[id] = 4 if(IsSpec) g_isStack[id] = 0 set_pev(iEnt, pev_fuser1, get_gametime() + 2.03) } if(pev(iEnt, pev_fuser1) < get_gametime() && g_isDef[id] == 4) { set_pev(iEnt, pev_iuser4, 0) g_isDef[id] = 0 } if (!(iButton & IN_ATTACK)) { if (iState == 2) { set_pdata_float(id, 83, 0.7) set_pdata_float(iEnt, 46, 1.7,4); set_pdata_float(iEnt, 47, 1.7,4); set_pdata_float(iEnt, 48, 1.7,4); //client_print(id, print_center, "Play player knife sequence") //formatex(szAnimation, charsmax(szAnimation), pev(id, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", anim_ext) //UTIL_PlayerAnimation(id, szAnimation) Set_WeaponAnim(id, IsSpec?ANIM_CHARGE_SLASH1+13:ANIM_CHARGE_SLASH1) SendSound(id, CHAN_WEAPON, weapon_sound[9]) g_isStack[id] = 6 set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_iuser2, 0) set_pev(iEnt, pev_iuser3, 0) set_pev(iEnt, pev_iuser4, 0) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) } if (iState < 2) { if(g_fTimer[id] < get_gametime() && bStab2) { //UTIL_PlayerAnimation(id, szAnimation) Set_WeaponAnim(id, ANIM_SLASH_CHARGE) set_pdata_float(iEnt, 48, 1.36,4); set_pev(iEnt, pev_iuser2, 0) } set_pev(iEnt, pev_iuser3, 0) } } if (get_pdata_float(id, 83) <= 0.0 && pev(iEnt, pev_iuser1) && !g_isDef[id]) { // range angle dmg knockback new iHitResult iHitResult = KnifeAttack_Global(id, IsSpec, DmgAdjust(IsSpec,iHold,3),DmgAdjust(IsSpec,iHold,0),DmgAdjust(IsSpec,iHold,1),DmgAdjust(IsSpec,iHold,2)) switch (iHitResult) { case RESULT_HIT_PLAYER : SendSound(id, CHAN_VOICE, weapon_sound[random_num(3, 4)]) case RESULT_HIT_WORLD : SendSound(id, CHAN_VOICE, weapon_sound[5]) } new Float:vecSrc[3], Float:vecEnd[3], Float:vecForward[3]; GetGunPosition(id, vecSrc); global_get(glb_v_forward, vecForward); xs_vec_mul_scalar(vecForward, DmgAdjust(IsSpec,iHold,3), 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) if(iHitResult != RESULT_HIT_NONE) { new Float:iVicOrig[3], pEntity = -1; new Float:realOrig[3]; pev(id, pev_origin, realOrig) if(iHitResult == RESULT_HIT_PLAYER) { while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, realOrig, DmgAdjust(IsSpec,iHold,3))) != 0) { if (!pev_valid(pEntity)) continue; if (id == pEntity) continue; if (!IsAlive(pEntity)) continue; if (!CheckAngle(id, pEntity, DmgAdjust(IsSpec,iHold,0))) continue; if(g_isStack[id] < 6 && can_damage(id, pEntity)) { if(g_isStack[id] < 5) { g_isStack[id]++ if(g_isStack[id] == 5) set_pev(iEnt, pev_iuser2, 1) } else g_isStack[id] = 5 } Stock_Get_Origin(pEntity, iVicOrig); iVicOrig[2] -= 15.0 Make_EffSprite(iVicOrig,0) } } else Make_EffSprite(EndPos2,(g_isStack[id] == 6)) } if(iHold == 2) iHold = 0 else iHold += 1 if(g_isStack[id] == 6) { MakeMuzzleFlash(id) g_isStack[id] = 0 iHold = 0 } set_pev(iEnt, pev_iuser1, 0); set_pev(iEnt, pev_iuser4, iHold) } if(get_pdata_float(iEnt, 46, 4) > 0.0) return HAM_IGNORED if(iButton & IN_ATTACK) { switch(iState) { case 0: { if(iHold == 1) { set_pdata_float(id, 83, 0.16) set_pdata_float(iEnt, 46, 0.66,4); set_pdata_float(iEnt, 47, 0.66,4); set_pdata_float(iEnt, 48, 2.03,4); //client_print(id, print_center, "Play player knife sequence slash 2") formatex(szAnimation, charsmax(szAnimation), pev(id, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", anim_ext) UTIL_PlayerAnimation(id, szAnimation) Set_WeaponAnim(id, !IsSpec?ANIM_SLASH2:ANIM_SLASH2+13) g_fTimer[id] = get_gametime() + 0.66 } else { set_pdata_float(id, 83, 0.3) set_pdata_float(iEnt, 46, 0.76,4); set_pdata_float(iEnt, 47, 0.76,4); set_pdata_float(iEnt, 48, 2.03,4); //client_print(id, print_center, "Play player knife sequence slash 1 & 3") formatex(szAnimation, charsmax(szAnimation), pev(id, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", anim_ext) UTIL_PlayerAnimation(id, szAnimation) Set_WeaponAnim(id, !IsSpec?(!iHold?ANIM_SLASH1:ANIM_SLASH3):(!iHold?ANIM_SLASH1+13:ANIM_SLASH3+13)) g_fTimer[id] = get_gametime() + 0.76 } SendSound(id, CHAN_WEAPON, weapon_sound[random(2)]) set_pev(iEnt, pev_iuser1, 1) set_pev(iEnt, pev_iuser3, 1) set_pev(iEnt, pev_fuser4, get_gametime() + get_pdata_float(id, 83)) } case 1: { set_pdata_float(iEnt, 46, 0.7,4); set_pdata_float(iEnt, 47, 0.7,4); set_pdata_float(iEnt, 48, 0.7,4); Set_WeaponAnim(id, !IsSpec?ANIM_CHARGE_START:ANIM_CHARGE_START+12) set_pev(iEnt, pev_iuser3, 2) } case 2: { set_pdata_float(iEnt, 46, 1.7,4); set_pdata_float(iEnt, 47, 1.7,4); set_pdata_float(iEnt, 48, 1.7,4); Set_WeaponAnim(id, !IsSpec?ANIM_CHARGE_LOOP:ANIM_CHARGE_LOOP+12) SendSound(id, CHAN_WEAPON, weapon_sound[8]) } } } if(iButton & IN_ATTACK2) { set_pdata_float(iEnt, 46, 3.03,4); set_pdata_float(iEnt, 47, 3.03,4); set_pdata_float(iEnt, 48, 3.03,4); g_isDef[id] = 1 Set_WeaponAnim(id, !IsSpec?ANIM_PARING:ANIM_PARING+12) } iButton &= ~IN_ATTACK; iButton &= ~IN_ATTACK2; set_pev(id, pev_button, iButton); return HAM_IGNORED } public fw_MF_Think(iEnt) { if(!pev_valid(iEnt)) return static Classname[32], iOwner, iStat pev(iEnt, pev_classname, Classname, sizeof(Classname)) iOwner = pev(iEnt, pev_owner) iStat = pev(iEnt, pev_iuser1) if(equal(Classname, "hsword_special")) { if(!iStat) { if(entity_range(iEnt, iOwner) > 600.0) { mleduk(iEnt, iOwner) set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME) return; } set_pev(iEnt, pev_nextthink, get_gametime() + 0.01) } else if(iStat == 1) set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME) } } public fw_HS_Touch(iPtr,iPtd) { if(!pev_valid(iPtr)) return static Classname[32], iOwner pev(iPtr, pev_classname, Classname, sizeof(Classname)) iOwner = pev(iPtr, pev_owner) new Float:fOrigin[3] pev(iPtr, pev_origin, fOrigin) if(equal(Classname, "hsword_special")) { if(!iPtd || !is_user_alive(iPtd)) { mleduk(iPtr, iOwner) set_pev(iPtr, pev_flags, pev(iPtr, pev_flags) | FL_KILLME) } else if(IsPlayer(iPtd)) { if(iPtd == iOwner) return new pEntity = -1; while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, fOrigin, 30.0)) != 0) { if (!pev_valid(pEntity)) continue; if (iOwner == pEntity) continue; if (!IsAlive(pEntity)) continue; if (!CheckAngle(iOwner, pEntity, 179.0)) continue; mleduk(iPtr, iOwner) } } set_pev(iPtr, pev_nextthink, get_gametime() + 0.01) } } public mleduk(iPtr, iOwner) { new Float:fOrigin[3] pev(iPtr, pev_origin, fOrigin) engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, fOrigin[0]) engfunc(EngFunc_WriteCoord, fOrigin[1]) engfunc(EngFunc_WriteCoord, fOrigin[2]) write_short(spr1) write_byte(6) write_byte(15) write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND) message_end() engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, fOrigin[0]) engfunc(EngFunc_WriteCoord, fOrigin[1]) engfunc(EngFunc_WriteCoord, fOrigin[2]) write_short(spr2) write_byte(9) write_byte(15) write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND) message_end() SendSound(iPtr, CHAN_VOICE, weapon_sound[7]) Stock_RadiusDamage(fOrigin, iPtr, iOwner, CHARGE_DAMAGE, CHARGE_RADIUS, CHARGE_KNOCKBACK, (1<<24)) } stock Gunkata_Blast(id, IsSpec) { new Float:origin[3] pev(id, pev_origin, origin) origin[2] -= 15.0 new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) set_pev(pEntity, pev_movetype, MOVETYPE_NONE); set_pev(pEntity, pev_owner, id); engfunc(EngFunc_SetModel, pEntity, entity_models[1+IsSpec]); set_pev(pEntity, pev_classname, "hsword_special"); set_pev(pEntity, pev_solid, SOLID_NOT); set_pev(pEntity, pev_iuser1, 1) set_pev(pEntity, pev_origin, origin) set_pev(pEntity, pev_frame, 0.0) set_pev(pEntity, pev_animtime, get_gametime()) set_pev(pEntity, pev_framerate, 1.0) set_pev(pEntity, pev_sequence, 1) engfunc(EngFunc_SetSize, pEntity, Float:{-1.0, -1.0, -1.0}, Float:{1.0, 1.0, 1.0}) dllfunc(DLLFunc_Spawn, pEntity) set_pev(pEntity, pev_scale, 1.0); set_pev(pEntity, pev_nextthink, get_gametime() + 0.55) } public MakeMuzzleFlash(id) { static Float:vAvel[3],Float:targetOri[3], Float:vAngle[3], Float:vVelocity[3],Float:fOrigin2[3], Float:vPlayerVelocity[3]; pev(id, pev_origin, fOrigin2) pev(id, pev_v_angle, vAngle) pev(id, pev_velocity, vPlayerVelocity); fm_get_aim_origin(id, targetOri) new iFlame = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target")) Stock_GetSpeedVector(fOrigin2, targetOri, 1050.0, vVelocity); xs_vec_add(vVelocity, vPlayerVelocity, vVelocity); vector_to_angle(vVelocity, vAngle) if(vAngle[0] > 90.0) vAngle[0] = -(360.0 - vAngle[0]); dllfunc(DLLFunc_Spawn, iFlame) set_pev(iFlame, pev_classname, "hsword_special") set_pev(iFlame, pev_animtime, get_gametime()) set_pev(iFlame, pev_framerate, 1.0) set_pev(iFlame ,pev_angles, vAngle) set_pev(iFlame, pev_movetype, MOVETYPE_FLY) set_pev(iFlame, pev_frame, 1.0) set_pev(iFlame, pev_scale, 1.5) set_pev(iFlame, pev_rendermode, kRenderTransAdd) set_pev(iFlame, pev_renderamt, 255.0) engfunc(EngFunc_SetModel, iFlame, entity_models[0]) engfunc(EngFunc_SetSize, iFlame, {2.0,2.0,2.0}, {2.0,2.0,2.0}) set_pev(iFlame, pev_origin, fOrigin2) set_pev(iFlame, pev_iuser1, 0) vAvel[2] = random_float(-200.0, 200.0) set_pev(iFlame, pev_avelocity, vAvel) set_pev(iFlame, pev_velocity, vVelocity) set_pev(iFlame, pev_solid, SOLID_TRIGGER) set_pev(iFlame, pev_owner, id) set_pev(iFlame, pev_nextthink, get_gametime() + 0.01) client_cmd(id, "spk %s", weapon_sound[6]) } stock Stock_GetSpeedVector(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 Stock_Get_Velocity_Angle(entity, Float:output[3]) { static Float:velocity[3] pev(entity, pev_velocity, velocity) vector_to_angle(velocity, output) if( output[0] > 90.0 ) output[0] = -(360.0 - output[0]) } stock SendSound(id, chan, sample[]) emit_sound(id, chan, sample, VOL_NORM, ATTN_NORM, 0, PITCH_NORM) 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 Float:EndPos2[3] get_tr2(tr, TR_vecEndPos, EndPos2) 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 *= 3.0; iHitResult = RESULT_HIT_PLAYER; } if (pev_valid(pEntity) && id != 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; 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 (CheckBack(id, pEntity) && bStab && iHitgroup == -1) flDamage *= 3.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 Stock_RadiusDamage(Float:vecSrc[3], pevInflictor, pevAttacker, Float:flDamage, Float:flRadius, Float:fKnockBack, bitsDamageType, bool:bSkipAttacker=true, bool:bCheckTeam=false) { new pEntity = -1, tr = create_tr2(), Float:flAdjustedDamage, Float:falloff, iHitResult = RESULT_HIT_NONE falloff = flDamage / flRadius new bInWater = (engfunc(EngFunc_PointContents, vecSrc) == CONTENTS_WATER) vecSrc[2] += 1.0 if(!pevAttacker) pevAttacker = pevInflictor while((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecSrc, flRadius)) != 0) { if(pev(pEntity, pev_takedamage) == DAMAGE_NO) continue if(bInWater && !pev(pEntity, pev_waterlevel)) continue if(!bInWater && pev(pEntity, pev_waterlevel) == 3) continue if(bCheckTeam && IsPlayer(pEntity) && pEntity != pevAttacker) if(!can_damage(pEntity, pevAttacker)) continue if(bSkipAttacker && pEntity == pevAttacker) continue new Float:vecEnd[3] pev(pEntity, pev_origin, vecEnd) engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, 0, tr) new Float:flFraction get_tr2(tr, TR_flFraction, flFraction) if(flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, 0, tr) if(pev_valid(pEntity)) { pev(pEntity, pev_origin, vecEnd) xs_vec_sub(vecEnd, vecSrc, vecEnd) new Float:fDistance = xs_vec_len(vecEnd) if(fDistance < 1.0) fDistance = 0.0 flAdjustedDamage = fDistance * falloff if(get_tr2(tr, TR_pHit) != pEntity) flAdjustedDamage *= 0.3 if(flAdjustedDamage <= 0) continue ExecuteHamB(Ham_TraceAttack, pEntity, pevAttacker, flAdjustedDamage, vecEnd, tr, bitsDamageType) ExecuteHamB(Ham_TakeDamage, pEntity, pevAttacker, pevAttacker, flAdjustedDamage, bitsDamageType); Stock_Fake_KnockBack(pevAttacker, pEntity, fKnockBack) iHitResult = RESULT_HIT_PLAYER } } 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 Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle) { static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId) if(!pev_valid(entwpn)) return set_pdata_float(entwpn, 46, TimeIdle, 4) set_pdata_float(entwpn, 47, TimeIdle, 4) set_pdata_float(entwpn, 48, TimeIdle + 0.5, 4) } stock Set_PlayerNextAttack(id, Float:nexttime) { set_pdata_float(id, 83, nexttime, 5) } stock Make_EffSprite(Float:fOrigin[3],bStab) { engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, fOrigin[0]) engfunc(EngFunc_WriteCoord, fOrigin[1]) engfunc(EngFunc_WriteCoord, fOrigin[2]) write_short(bStab?spr1:spr2) write_byte(bStab?2:3) write_byte(40) write_byte(TE_EXPLFLAG_NODLIGHTS | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NOSOUND) message_end() } 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 GetGunPosition(id, Float:vecScr[3]) { new Float:vecViewOfs[3] pev(id, pev_origin, vecScr) pev(id, pev_view_ofs, vecViewOfs) xs_vec_add(vecScr, vecViewOfs, vecScr) } 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) } stock SpawnBlood(const Float:vecOrigin[3], iColor, iAmount) { if(iAmount == 0) return if (!iColor) return iAmount *= 2 if(iAmount > 255) iAmount = 255 engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin) write_byte(TE_BLOODSPRITE) engfunc(EngFunc_WriteCoord, vecOrigin[0]) engfunc(EngFunc_WriteCoord, vecOrigin[1]) engfunc(EngFunc_WriteCoord, vecOrigin[2]) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(iColor) write_byte(min(max(3, iAmount / 10), 16)) message_end() } 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_BloodEffect(Float:vecOri[3], scale) { message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BLOODSPRITE) engfunc(EngFunc_WriteCoord,vecOri[0]) engfunc(EngFunc_WriteCoord,vecOri[1]) engfunc(EngFunc_WriteCoord,vecOri[2]) write_short(spr_blood_spray) write_short(spr_blood_drop) write_byte(75) write_byte(scale) 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)) } stock UTIL_PlayerAnimation(id, szAnimation[]) { static iAnimDesired, Float:fFrameRate, Float:fGroundSpeed, bool:bLoops; if((iAnimDesired = lookup_sequence(id, szAnimation, fFrameRate, bLoops, fGroundSpeed)) == -1) iAnimDesired = 0; static Float:fGameTime; fGameTime = get_gametime(); set_pev(id, pev_frame, 0.0); set_pev(id, pev_framerate, 1.0); set_pev(id, pev_animtime, fGameTime); set_pev(id, pev_sequence, iAnimDesired); set_pdata_int(id, 40, bLoops, 4); set_pdata_int(id, 39, 0, 4); set_pdata_float(id, 36, fFrameRate, 4); set_pdata_float(id, 37, fGroundSpeed, 4); set_pdata_float(id, 38, fGameTime, 4); set_pdata_int(id, 73, 28); set_pdata_int(id, 74, 28); set_pdata_float(id, 220, fGameTime); } Dual phantom sword: PHP Code: #include <amxmodx> #include <engine> #include <fun> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <xs> #include <zp50_core> #include <crxknives> #include <reapi> // Anti Decompile #pragma compress 1 #define CSW_DPS CSW_KNIFE #define weapon_dps "weapon_knife" #define v_model "models/gcg_csze/v_dualsword.mdl" #define p_model "models/gcg_csze/p_dualsword_a.mdl" #define p_model2 "models/gcg_csze/p_dualsword_b.mdl" 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_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 new const ATTRIBUTE_BONUS_XP[] = "DPS" public plugin_init() { register_plugin("[ZE] Knife: Dual Phantom Sword", "1.0", "Asdian DX") 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") 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") } 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/gcg_csze/dualswordfx.mdl") precache_model("models/gcg_csze/dualsword_skill.mdl") precache_model("models/gcg_csze/dualsword_skillfx1.mdl") precache_model("models/gcg_csze/dualsword_skillfx2.mdl") ef_sakura[0] = precache_model("sprites/gcg_csze/leaf01_dualsword.spr") ef_sakura[1] = precache_model("sprites/gcg_csze/leaf02_dualsword.spr") ef_sakura[2] = precache_model("sprites/gcg_csze/petal01_dualsword.spr") ef_sakura[3] = precache_model("sprites/gcg_csze/petal02_dualsword.spr") } public crxknives_knife_updated(id, iKnife, bool:bOnConnect) { static iValue if(crxknives_get_attribute_int(id, ATTRIBUTE_BONUS_XP, iValue) && iValue == 1) { get_dps(id) } else { remove_dps(id) } } public Event_NewRound() { new iPlayers[32], iPnum, iPlayer get_players(iPlayers, iPnum) for(new i = 0; i < iPnum; i++) { iPlayer = iPlayers[i] crxknives_get_attribute_int(iPlayer, ATTRIBUTE_BONUS_XP, g_had_dps[iPlayer]) } } public zp_fw_core_infect_post(i) remove_dps(i) public zp_fw_core_cure_post(id) { static iValue if(crxknives_get_attribute_int(id, ATTRIBUTE_BONUS_XP, iValue) && iValue == 1) { get_dps(id) } else { g_had_dps[id] = 0 } } 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 give_item(id, weapon_dps) if (get_user_weapon(id) == CSW_DPS) Event_CurWeapon(id) } public client_connect(id) remove_dps(id) public client_disconnected(id) remove_dps(id) 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 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(zp_core_is_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); 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) || zp_core_is_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/gcg_csze/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/gcg_csze/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/gcg_csze/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/gcg_csze/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)) } Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi