- #pragma compress 1
- #include <zombie_escape>
- #include <fakemeta_util>
- #define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_SPECIAL_CODE)
- // Linux extra offsets
- #define linux_diff_animating 4
- #define linux_diff_weapon 4
- #define linux_diff_player 5
- // CBasePlayerItem
- #define m_pPlayer 41
- // CBasePlayerWeapon
- #define m_flNextPrimaryAttack 46
- #define m_flNextSecondaryAttack 47
- #define m_flTimeWeaponIdle 48
- // CBaseMonster
- #define m_LastHitGroup 75
- #define m_flNextAttack 83
- // CBasePlayer
- #define m_flPainShock 108
- #define m_pActiveItem 373
- #define m_szAnimExtention 492
- // from model: Frames / FPS
- #define TIME_IDLE 401/30.0
- #define TIME_DRAW_ATTACK 16/30.0
- #define TIME_DRAW 31/30.0
- #define TIME_MIDSLASH1 33/30.0
- #define TIME_MIDSLASH1_HIT 69/30.0
- #define TIME_MIDSLASH2 29/30.0
- #define TIME_MIDSLASH2_HIT 43/30.0
- #define ANIM_IDLE 0
- #define ANIM_DRAW_ATTACK 1
- #define ANIM_DRAW 3
- #define ANIM_MIDSLASH1 4
- #define ANIM_MIDSLASH1_HIT 5
- #define ANIM_MIDSLASH2 7
- #define ANIM_MIDSLASH2_HIT 8
- #define ANIM_MIDSLASH2_FAIL 9
- #define KNIFE_REFERENCE "weapon_knife"
- #define KNIFE_MODEL_V "models/v_stormgiant.mdl"
- #define KNIFE_MODEL_P "models/p_stormgiant.mdl"
- new const KNIFE_SOUNDS[][] = {
- "weapons/stormgiant_attack_hit2.wav", // 0
- "weapons/stormgiant_hit1.wav", // 1
- "weapons/stormgiant_hit2.wav", // 2
- "weapons/stormgiant_midslash1.wav", // 3
- "weapons/stormgiant_midslash1_fail.wav", // 4
- "weapons/stormgiant_midslash1_hit.wav", // 5
- "weapons/stormgiant_midslash2_fail.wav", // 6
- "weapons/stormgiant_midslash2_hit.wav", // 7
- "weapons/stormgiant_metal1.wav", // 8
- "weapons/stormgiant_metal2.wav", // 9
- "weapons/stormgiant_stone1.wav", // 10
- "weapons/stormgiant_stone2.wav", // 11
- "weapons/stormgiant_wood1.wav", // 12
- "weapons/stormgiant_wood2.wav" // 13
- };
- #define SHOCK_SPRITE "sprites/ef_coilmg.spr"
- enum _: e_HitResultList {
- HIT_NONE = 0,
- HIT_WORLD,
- HIT_ENTITY
- };
- #define KNIFE_ANIM_EXTENSION "knife"
- #define DRAW_DAMAGE 390
- #define DRAW_DISTANCE 110
- #define MIDSLASH1_DAMAGE 910
- #define MIDSLASH1_DISTANCE 130
- #define MIDSLASH2_DAMAGE 700
- #define MIDSLASH2_DISTANCE 120
- #define STORMGIANT_KNOCKBACK 750
- #define STORMGIANT_SPEED 380.0
- new bool: g_bMelee[33],
- bool: g_bWeaponState[33],
- g_iSpriteIndex_Shock;
- public plugin_init() {
- register_plugin("Warhammer Storm Giant", "0.1", "inf");
- register_event("CurWeapon", "CurWeapon", "be", "1=1");
- register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData", true);
- RegisterHam(Ham_Item_Deploy, KNIFE_REFERENCE, "CWeapon__Deploy", true);
- RegisterHam(Ham_Item_PostFrame, KNIFE_REFERENCE, "CWeapon__PostFrame", false);
- RegisterHam(Ham_Weapon_WeaponIdle, KNIFE_REFERENCE, "CWeapon__WeaponIdle", false);
- RegisterHam(Ham_Weapon_PrimaryAttack, KNIFE_REFERENCE, "CWeapon__PrimaryAttack", false);
- RegisterHam(Ham_Weapon_SecondaryAttack, KNIFE_REFERENCE, "CWeapon__SecondaryAttack", false);
- }
- public plugin_precache() {
- // Precache models
- engfunc(EngFunc_PrecacheModel, KNIFE_MODEL_V);
- engfunc(EngFunc_PrecacheModel, KNIFE_MODEL_P);
- // Precache sounds
- for(new i = 0; i < sizeof KNIFE_SOUNDS; i++) engfunc(EngFunc_PrecacheSound, KNIFE_SOUNDS[i]);
- UTIL_PrecacheSoundsFromModel(KNIFE_MODEL_V);
- // Other
- g_iSpriteIndex_Shock = engfunc(EngFunc_PrecacheModel, SHOCK_SPRITE);
- }
- public plugin_natives()
- {
- register_native("SetUserWarHammer", "Command_GiveMelee", 1);
- register_native("DelUserWarHammer", "Remove_Melee", 1);
- }
- public client_putinserver(iPlayer) Remove_Melee(iPlayer);
- public ze_user_infected(iPlayer) Remove_Melee(iPlayer);
- public Remove_Melee(iPlayer) {
- g_bMelee[iPlayer] = false;
- g_bWeaponState[iPlayer] = false;
- }
- //public GetWeapon(iPlayer, iItemID) if(iItemID == g_iItemID) Command_GiveMelee(iPlayer);//
- public RemoveWeapon(iPlayer) Remove_Melee(iPlayer);
- public Command_GiveMelee(iPlayer) {
- g_bMelee[iPlayer] = true;
- g_bWeaponState[iPlayer] = false;
- static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
- ExecuteHamB(Ham_Item_Deploy, iItem);
- emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- public CurWeapon(iPlayer) {
- if(is_user_alive(iPlayer) && g_bMelee[iPlayer] && get_user_weapon(iPlayer) == CSW_KNIFE)
- set_pev(iPlayer, pev_maxspeed, STORMGIANT_SPEED);
- }
- public CWeapon__Deploy(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return;
- g_bWeaponState[iPlayer] = true;
- set_pev(iPlayer, pev_viewmodel2, KNIFE_MODEL_V);
- set_pev(iPlayer, pev_weaponmodel2, KNIFE_MODEL_P);
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_ATTACK);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, 5/30.0, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_DRAW_ATTACK, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 12/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_DRAW_ATTACK, linux_diff_weapon);
- set_pdata_string(iPlayer, m_szAnimExtention * 4, KNIFE_ANIM_EXTENSION, -1, linux_diff_player * linux_diff_animating);
- }
- public CWeapon__PostFrame(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- if(g_bWeaponState[iPlayer] == true) {
- g_bWeaponState[iPlayer] = false;
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_DRAW_ATTACK: FakeTraceLine(iPlayer, float(DRAW_DAMAGE), float(DRAW_DISTANCE));
- case ANIM_MIDSLASH1: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH1_HIT);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 39/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_MIDSLASH1_HIT, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH1_HIT, linux_diff_weapon);
- FakeTraceLine(iPlayer, float(MIDSLASH1_DAMAGE), float(MIDSLASH1_DISTANCE));
- }
- case ANIM_MIDSLASH2: {
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_MIDSLASH2_HIT, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 19/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH2_HIT, linux_diff_weapon);
- FakeTraceLine(iPlayer, float(MIDSLASH2_DAMAGE), float(MIDSLASH2_DISTANCE));
- }
- case ANIM_MIDSLASH2_FAIL: FakeTraceLine(iPlayer, float(DRAW_DAMAGE), float(DRAW_DISTANCE));
- }
- static szAnimation[64];
- formatex(szAnimation, charsmax(szAnimation), pev(iPlayer, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", KNIFE_ANIM_EXTENSION);
- UTIL_PlayerAnimation(iPlayer, szAnimation);
- }
- if(pev(iPlayer, pev_weaponanim) == ANIM_DRAW_ATTACK && get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) <= 0.0) {
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW);
- set_pdata_float(iPlayer, m_flNextAttack, TIME_DRAW, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_DRAW, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_DRAW, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_DRAW, linux_diff_weapon);
- }
- return HAM_IGNORED;
- }
- public CWeapon__WeaponIdle(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false || get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED;
- UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_IDLE, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public CWeapon__PrimaryAttack(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- g_bWeaponState[iPlayer] = true;
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH1);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, TIME_MIDSLASH1, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_MIDSLASH1, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_MIDSLASH1, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH1, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public CWeapon__SecondaryAttack(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- g_bWeaponState[iPlayer] = true;
- UTIL_SendWeaponAnim(iPlayer, pev(iPlayer, pev_weaponanim) == ANIM_DRAW_ATTACK ? ANIM_MIDSLASH2_FAIL : ANIM_MIDSLASH2);
- set_pdata_float(iPlayer, m_flNextAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? 1/30.0 : TIME_MIDSLASH2, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public FM_Hook_UpdateClientData(iPlayer, SendWeapons, CD_Handle) {
- if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
- if(get_user_weapon(iPlayer) == CSW_KNIFE && g_bMelee[iPlayer] == true) set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
- }
- public FakeTraceLine(iPlayer, Float: flDamage, Float: flDistance) {
- new Float: flOrigin[3], Float: flAngle[3], Float: flEnd[3], Float: flViewOfs[3];
- new Float: flForw[3], Float: flUp[3], Float: flRight[3];
- pev(iPlayer, pev_origin, flOrigin);
- pev(iPlayer, pev_view_ofs, flViewOfs);
- flOrigin[0] += flViewOfs[0];
- flOrigin[1] += flViewOfs[1];
- flOrigin[2] += flViewOfs[2];
- pev(iPlayer, pev_v_angle, flAngle);
- engfunc(EngFunc_AngleVectors, flAngle, flForw, flRight, flUp);
- new iTrace = create_tr2();
- new Float: flSendAngles[] = { 0.0, 10.0, -10.0 }
- new Float: flSendAnglesUp[] = { 0.0, 0.0, 0.0 }
- new Float: flTan;
- new Float: flMul;
- static Float: flFraction, pHit;
- static pHitEntity; pHitEntity = HIT_NONE;
- static iHitResult; iHitResult = HIT_NONE;
- for(new i; i < sizeof flSendAngles; i++) {
- flTan = floattan(flSendAngles[i], degrees);
- flEnd[0] = (flForw[0] * flDistance) + (flRight[0] * flTan * flDistance) + flUp[0] * flSendAnglesUp[i];
- flEnd[1] = (flForw[1] * flDistance) + (flRight[1] * flTan * flDistance) + flUp[1] * flSendAnglesUp[i];
- flEnd[2] = (flForw[2] * flDistance) + (flRight[2] * flTan * flDistance) + flUp[2] * flSendAnglesUp[i];
- flMul = (flDistance / vector_length(flEnd));
- flEnd[0] *= flMul;
- flEnd[1] *= flMul;
- flEnd[2] *= flMul;
- flEnd[0] = flEnd[0] + flOrigin[0];
- flEnd[1] = flEnd[1] + flOrigin[1];
- flEnd[2] = flEnd[2] + flOrigin[2];
- engfunc(EngFunc_TraceLine, flOrigin, flEnd, DONT_IGNORE_MONSTERS, iPlayer, iTrace);
- get_tr2(iTrace, TR_flFraction, flFraction);
- if(flFraction == 1.0) {
- engfunc(EngFunc_TraceHull, flOrigin, flEnd, HULL_HEAD, iPlayer, iTrace);
- get_tr2(iTrace, TR_flFraction, flFraction);
- engfunc(EngFunc_TraceLine, flOrigin, flEnd, DONT_IGNORE_MONSTERS, iPlayer, iTrace);
- pHit = get_tr2(iTrace, TR_pHit);
- }
- else pHit = get_tr2(iTrace, TR_pHit);
- if(flFraction != 1.0) {
- if(!iHitResult) {
- iHitResult = HIT_WORLD;
- new Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- UTIL_ShockEffect(vecEndPos);
- }
- }
- if(pHit > 0 && pHitEntity != pHit) {
- if(pev(pHit, pev_solid) == SOLID_BSP && !(pev(pHit, pev_spawnflags) & SF_BREAK_TRIGGER_ONLY)) ExecuteHamB(Ham_TakeDamage, pHit, iPlayer, iPlayer, flDamage, DMG_CLUB);
- else {
- FakeTraceAttack(pHit, iPlayer, flDamage, flForw, iTrace, DMG_CLUB);
- if(pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL) {
- if(is_user_alive(pHit) && ze_is_user_zombie(pHit)) {
- new iKnockBack = STORMGIANT_KNOCKBACK;
- if(pev(pHit, pev_flags) & (FL_DUCKING | FL_ONGROUND) == (FL_DUCKING | FL_ONGROUND)) iKnockBack = (iKnockBack / 3);
- new Float: vecVelocity[3]; pev(pHit, pev_velocity, vecVelocity);
- new Float: vecKnockBack[3]; velocity_by_aim(iPlayer, iKnockBack, vecKnockBack);
- vecVelocity[2] += 200.0;
- vecKnockBack[2] = vecVelocity[2];
- set_pev(pHit, pev_velocity, vecKnockBack);
- set_pdata_float(pHit, m_flPainShock, 1.0, linux_diff_player);
- }
- }
- }
- iHitResult = HIT_ENTITY;
- pHitEntity = pHit;
- if(iHitResult != HIT_ENTITY) {
- new Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- UTIL_ShockEffect(vecEndPos);
- }
- }
- }
- free_tr2(iTrace);
- switch(iHitResult) {
- case HIT_NONE: {
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_MIDSLASH1_HIT: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[4], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- case ANIM_MIDSLASH2: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_FAIL);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2_FAIL: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- case HIT_WORLD: {
- if(pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2) UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_HIT);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[random_num(8, 13)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case HIT_ENTITY: {
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_DRAW_ATTACK: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- case ANIM_MIDSLASH1_HIT: {
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_HIT);
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[7], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2_FAIL: {
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- }
- }
- }
- public FakeTraceAttack(iVictim, iAttacker, Float: flDamage, Float: vecDirection[3], iTrace, iDamageBits) {
- static Float: flTakeDamage; pev(iVictim, pev_takedamage, flTakeDamage);
- if(flTakeDamage == DAMAGE_NO) return PLUGIN_CONTINUE;
- if(!is_user_alive(iVictim)) return PLUGIN_CONTINUE;
- if(is_user_connected(iVictim)) if(iVictim == iAttacker) return PLUGIN_CONTINUE;
- static iHitgroup; iHitgroup = get_tr2(iTrace, TR_iHitgroup);
- static Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- set_pdata_int(iVictim, m_LastHitGroup, iHitgroup, linux_diff_player);
- switch(iHitgroup) {
- case HIT_HEAD: flDamage *= random_float(1.0, 2.0);
- case HIT_LEFTARM, HIT_RIGHTARM: flDamage *= random_float(0.5, 1.0);
- case HIT_LEFTLEG, HIT_RIGHTLEG: flDamage *= random_float(0.5, 1.0);
- case HIT_STOMACH: flDamage *= random_float(0.5, 1.0);
- }
- ExecuteHamB(Ham_TakeDamage, iVictim, iAttacker, iAttacker, flDamage, iDamageBits);
- if(ze_is_user_zombie(iVictim)) {
- UTIL_BloodDrips(iVictim, vecEndPos, floatround(flDamage));
- set_pdata_float(iVictim, m_flPainShock, 0.75, linux_diff_player);
- }
- return PLUGIN_HANDLED;
- }
- stock UTIL_ShockEffect(Float: vecOrigin[3]) {
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
- write_byte(TE_EXPLOSION);
- engfunc(EngFunc_WriteCoord, vecOrigin[0]);
- engfunc(EngFunc_WriteCoord, vecOrigin[1]);
- engfunc(EngFunc_WriteCoord, vecOrigin[2]);
- write_short(g_iSpriteIndex_Shock);
- write_byte(3);
- write_byte(15);
- write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES);
- message_end();
- }
- stock UTIL_BloodDrips(iVictim, Float: vecOrigin[3], iAmount) {
- if(iAmount > 255) iAmount = 255;
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
- write_byte(TE_BLOODSPRITE);
- engfunc(EngFunc_WriteCoord, vecOrigin[0]);
- engfunc(EngFunc_WriteCoord, vecOrigin[1]);
- engfunc(EngFunc_WriteCoord, vecOrigin[2]);
- write_short(engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr"));
- write_short(engfunc(EngFunc_PrecacheModel, "sprites/blood.spr"));
- write_byte(ExecuteHamB(Ham_BloodColor, iVictim));
- write_byte(min(max(3, iAmount / 10), 16));
- message_end();
- }
- stock UTIL_PlayerAnimation(iPlayer, szAnim[]) {
- new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
- if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1) iAnimDesired = 0;
- set_pev(iPlayer, pev_frame, 0.0);
- set_pev(iPlayer, pev_framerate, 1.0);
- set_pev(iPlayer, pev_animtime, get_gametime());
- set_pev(iPlayer, pev_sequence, iAnimDesired);
- set_pdata_int(iPlayer, 40, bLoops, linux_diff_animating);
- set_pdata_int(iPlayer, 39, 0, linux_diff_animating);
- set_pdata_float(iPlayer, 36, flFrameRate, linux_diff_animating);
- set_pdata_float(iPlayer, 37, flGroundSpeed, linux_diff_animating);
- set_pdata_float(iPlayer, 38, get_gametime(), linux_diff_animating);
- set_pdata_int(iPlayer, 73, 28, linux_diff_player);
- set_pdata_int(iPlayer, 74, 28, linux_diff_player);
- set_pdata_float(iPlayer, 220, get_gametime(), linux_diff_player);
- }
- stock UTIL_SendWeaponAnim(iPlayer, iAnim, iBody = 0) {
- set_pev(iPlayer, pev_weaponanim, iAnim);
- message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
- write_byte(iAnim);
- write_byte(iBody);
- message_end();
- }
- stock UTIL_PrecacheSoundsFromModel(const szModelPath[]) {
- new iFile;
- if((iFile = fopen(szModelPath, "rt"))) {
- new szSoundPath[64];
- new iNumSeq, iSeqIndex;
- new iEvent, iNumEvents, iEventIndex;
- fseek(iFile, 164, SEEK_SET);
- fread(iFile, iNumSeq, BLOCK_INT);
- fread(iFile, iSeqIndex, BLOCK_INT);
- for(new k, i = 0; i < iNumSeq; i++) {
- fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
- fread(iFile, iNumEvents, BLOCK_INT);
- fread(iFile, iEventIndex, BLOCK_INT);
- fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
- for(k = 0; k < iNumEvents; k++) {
- fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
- fread(iFile, iEvent, BLOCK_INT);
- fseek(iFile, 4, SEEK_CUR);
- if(iEvent != 5004) continue;
- fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
- if(strlen(szSoundPath)) {
- strtolower(szSoundPath);
- engfunc(EngFunc_PrecacheSound, szSoundPath);
- }
- }
- }
- }
- fclose(iFile);
- }
warhammer
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
warhammer
Hey, when I pick up this knife, I can walk if freeze time. Can someone tell me how to fix this?
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
[quote=czirimbolo post_id=10284 time=1564414223 user_id=89]
Hey, when I pick up this knife, I can walk if freeze time. Can someone tell me how to fix this?
Hey, when I pick up this knife, I can walk if freeze time. Can someone tell me how to fix this?
- #pragma compress 1
- #include <zombie_escape>
- #include <fakemeta_util>
- #define CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_SPECIAL_CODE)
- // Linux extra offsets
- #define linux_diff_animating 4
- #define linux_diff_weapon 4
- #define linux_diff_player 5
- // CBasePlayerItem
- #define m_pPlayer 41
- // CBasePlayerWeapon
- #define m_flNextPrimaryAttack 46
- #define m_flNextSecondaryAttack 47
- #define m_flTimeWeaponIdle 48
- // CBaseMonster
- #define m_LastHitGroup 75
- #define m_flNextAttack 83
- // CBasePlayer
- #define m_flPainShock 108
- #define m_pActiveItem 373
- #define m_szAnimExtention 492
- // from model: Frames / FPS
- #define TIME_IDLE 401/30.0
- #define TIME_DRAW_ATTACK 16/30.0
- #define TIME_DRAW 31/30.0
- #define TIME_MIDSLASH1 33/30.0
- #define TIME_MIDSLASH1_HIT 69/30.0
- #define TIME_MIDSLASH2 29/30.0
- #define TIME_MIDSLASH2_HIT 43/30.0
- #define ANIM_IDLE 0
- #define ANIM_DRAW_ATTACK 1
- #define ANIM_DRAW 3
- #define ANIM_MIDSLASH1 4
- #define ANIM_MIDSLASH1_HIT 5
- #define ANIM_MIDSLASH2 7
- #define ANIM_MIDSLASH2_HIT 8
- #define ANIM_MIDSLASH2_FAIL 9
- #define KNIFE_REFERENCE "weapon_knife"
- #define KNIFE_MODEL_V "models/v_stormgiant.mdl"
- #define KNIFE_MODEL_P "models/p_stormgiant.mdl"
- new const KNIFE_SOUNDS[][] = {
- "weapons/stormgiant_attack_hit2.wav", // 0
- "weapons/stormgiant_hit1.wav", // 1
- "weapons/stormgiant_hit2.wav", // 2
- "weapons/stormgiant_midslash1.wav", // 3
- "weapons/stormgiant_midslash1_fail.wav", // 4
- "weapons/stormgiant_midslash1_hit.wav", // 5
- "weapons/stormgiant_midslash2_fail.wav", // 6
- "weapons/stormgiant_midslash2_hit.wav", // 7
- "weapons/stormgiant_metal1.wav", // 8
- "weapons/stormgiant_metal2.wav", // 9
- "weapons/stormgiant_stone1.wav", // 10
- "weapons/stormgiant_stone2.wav", // 11
- "weapons/stormgiant_wood1.wav", // 12
- "weapons/stormgiant_wood2.wav" // 13
- };
- #define SHOCK_SPRITE "sprites/ef_coilmg.spr"
- enum _: e_HitResultList {
- HIT_NONE = 0,
- HIT_WORLD,
- HIT_ENTITY
- };
- #define KNIFE_ANIM_EXTENSION "knife"
- #define DRAW_DAMAGE 390
- #define DRAW_DISTANCE 110
- #define MIDSLASH1_DAMAGE 910
- #define MIDSLASH1_DISTANCE 130
- #define MIDSLASH2_DAMAGE 700
- #define MIDSLASH2_DISTANCE 120
- #define STORMGIANT_KNOCKBACK 750
- #define STORMGIANT_SPEED 380.0
- new bool: g_bMelee[33],
- bool: g_bWeaponState[33],
- g_iSpriteIndex_Shock;
- new g_freezetime
- public plugin_init() {
- register_plugin("Warhammer Storm Giant", "0.1", "inf");
- register_event("CurWeapon", "CurWeapon", "be", "1=1");
- register_event("HLTV", "event_newround", "a", "1=0", "2=0")
- register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData", true);
- RegisterHam(Ham_Item_Deploy, KNIFE_REFERENCE, "CWeapon__Deploy", true);
- RegisterHam(Ham_Item_PostFrame, KNIFE_REFERENCE, "CWeapon__PostFrame", false);
- RegisterHam(Ham_Weapon_WeaponIdle, KNIFE_REFERENCE, "CWeapon__WeaponIdle", false);
- RegisterHam(Ham_Weapon_PrimaryAttack, KNIFE_REFERENCE, "CWeapon__PrimaryAttack", false);
- RegisterHam(Ham_Weapon_SecondaryAttack, KNIFE_REFERENCE, "CWeapon__SecondaryAttack", false);
- }
- public event_newround(id)
- {
- g_freezetime = true
- }
- public ze_zombie_appear()
- {
- g_freezetime = false
- }
- public plugin_precache() {
- // Precache models
- engfunc(EngFunc_PrecacheModel, KNIFE_MODEL_V);
- engfunc(EngFunc_PrecacheModel, KNIFE_MODEL_P);
- // Precache sounds
- for(new i = 0; i < sizeof KNIFE_SOUNDS; i++) engfunc(EngFunc_PrecacheSound, KNIFE_SOUNDS[i]);
- UTIL_PrecacheSoundsFromModel(KNIFE_MODEL_V);
- // Other
- g_iSpriteIndex_Shock = engfunc(EngFunc_PrecacheModel, SHOCK_SPRITE);
- }
- public plugin_natives()
- {
- register_native("SetUserWarHammer", "Command_GiveMelee", 1);
- register_native("DelUserWarHammer", "Remove_Melee", 1);
- }
- public client_putinserver(iPlayer) Remove_Melee(iPlayer);
- public ze_user_infected(iPlayer) Remove_Melee(iPlayer);
- public Remove_Melee(iPlayer) {
- g_bMelee[iPlayer] = false;
- g_bWeaponState[iPlayer] = false;
- }
- //public GetWeapon(iPlayer, iItemID) if(iItemID == g_iItemID) Command_GiveMelee(iPlayer);//
- public RemoveWeapon(iPlayer) Remove_Melee(iPlayer);
- public Command_GiveMelee(iPlayer) {
- g_bMelee[iPlayer] = true;
- g_bWeaponState[iPlayer] = false;
- static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
- ExecuteHamB(Ham_Item_Deploy, iItem);
- emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- public CurWeapon(iPlayer) {
- if(is_user_alive(iPlayer) && g_bMelee[iPlayer] && get_user_weapon(iPlayer) == CSW_KNIFE && !g_freezetime)
- set_pev(iPlayer, pev_maxspeed, STORMGIANT_SPEED);
- }
- public CWeapon__Deploy(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return;
- g_bWeaponState[iPlayer] = true;
- set_pev(iPlayer, pev_viewmodel2, KNIFE_MODEL_V);
- set_pev(iPlayer, pev_weaponmodel2, KNIFE_MODEL_P);
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW_ATTACK);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, 5/30.0, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_DRAW_ATTACK, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 12/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_DRAW_ATTACK, linux_diff_weapon);
- set_pdata_string(iPlayer, m_szAnimExtention * 4, KNIFE_ANIM_EXTENSION, -1, linux_diff_player * linux_diff_animating);
- }
- public CWeapon__PostFrame(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- if(g_bWeaponState[iPlayer] == true) {
- g_bWeaponState[iPlayer] = false;
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_DRAW_ATTACK: FakeTraceLine(iPlayer, float(DRAW_DAMAGE), float(DRAW_DISTANCE));
- case ANIM_MIDSLASH1: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH1_HIT);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 39/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_MIDSLASH1_HIT, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH1_HIT, linux_diff_weapon);
- FakeTraceLine(iPlayer, float(MIDSLASH1_DAMAGE), float(MIDSLASH1_DISTANCE));
- }
- case ANIM_MIDSLASH2: {
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_MIDSLASH2_HIT, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 19/30.0, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH2_HIT, linux_diff_weapon);
- FakeTraceLine(iPlayer, float(MIDSLASH2_DAMAGE), float(MIDSLASH2_DISTANCE));
- }
- case ANIM_MIDSLASH2_FAIL: FakeTraceLine(iPlayer, float(DRAW_DAMAGE), float(DRAW_DISTANCE));
- }
- static szAnimation[64];
- formatex(szAnimation, charsmax(szAnimation), pev(iPlayer, pev_flags) & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", KNIFE_ANIM_EXTENSION);
- UTIL_PlayerAnimation(iPlayer, szAnimation);
- }
- if(pev(iPlayer, pev_weaponanim) == ANIM_DRAW_ATTACK && get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) <= 0.0) {
- UTIL_SendWeaponAnim(iPlayer, ANIM_DRAW);
- set_pdata_float(iPlayer, m_flNextAttack, TIME_DRAW, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_DRAW, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_DRAW, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_DRAW, linux_diff_weapon);
- }
- return HAM_IGNORED;
- }
- public CWeapon__WeaponIdle(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false || get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED;
- UTIL_SendWeaponAnim(iPlayer, ANIM_IDLE);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_IDLE, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public CWeapon__PrimaryAttack(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- g_bWeaponState[iPlayer] = true;
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH1);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- set_pdata_float(iPlayer, m_flNextAttack, TIME_MIDSLASH1, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, TIME_MIDSLASH1, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, TIME_MIDSLASH1, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, TIME_MIDSLASH1, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public CWeapon__SecondaryAttack(iItem) {
- static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
- if(g_bMelee[iPlayer] == false) return HAM_IGNORED;
- g_bWeaponState[iPlayer] = true;
- UTIL_SendWeaponAnim(iPlayer, pev(iPlayer, pev_weaponanim) == ANIM_DRAW_ATTACK ? ANIM_MIDSLASH2_FAIL : ANIM_MIDSLASH2);
- set_pdata_float(iPlayer, m_flNextAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? 1/30.0 : TIME_MIDSLASH2, linux_diff_player);
- set_pdata_float(iItem, m_flNextPrimaryAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- set_pdata_float(iItem, m_flTimeWeaponIdle, pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL ? TIME_MIDSLASH2_HIT : TIME_MIDSLASH2, linux_diff_weapon);
- return HAM_SUPERCEDE;
- }
- public FM_Hook_UpdateClientData(iPlayer, SendWeapons, CD_Handle) {
- if(get_cd(CD_Handle, CD_DeadFlag) != DEAD_NO) return;
- if(get_user_weapon(iPlayer) == CSW_KNIFE && g_bMelee[iPlayer] == true) set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
- }
- public FakeTraceLine(iPlayer, Float: flDamage, Float: flDistance) {
- new Float: flOrigin[3], Float: flAngle[3], Float: flEnd[3], Float: flViewOfs[3];
- new Float: flForw[3], Float: flUp[3], Float: flRight[3];
- pev(iPlayer, pev_origin, flOrigin);
- pev(iPlayer, pev_view_ofs, flViewOfs);
- flOrigin[0] += flViewOfs[0];
- flOrigin[1] += flViewOfs[1];
- flOrigin[2] += flViewOfs[2];
- pev(iPlayer, pev_v_angle, flAngle);
- engfunc(EngFunc_AngleVectors, flAngle, flForw, flRight, flUp);
- new iTrace = create_tr2();
- new Float: flSendAngles[] = { 0.0, 10.0, -10.0 }
- new Float: flSendAnglesUp[] = { 0.0, 0.0, 0.0 }
- new Float: flTan;
- new Float: flMul;
- static Float: flFraction, pHit;
- static pHitEntity; pHitEntity = HIT_NONE;
- static iHitResult; iHitResult = HIT_NONE;
- for(new i; i < sizeof flSendAngles; i++) {
- flTan = floattan(flSendAngles[i], degrees);
- flEnd[0] = (flForw[0] * flDistance) + (flRight[0] * flTan * flDistance) + flUp[0] * flSendAnglesUp[i];
- flEnd[1] = (flForw[1] * flDistance) + (flRight[1] * flTan * flDistance) + flUp[1] * flSendAnglesUp[i];
- flEnd[2] = (flForw[2] * flDistance) + (flRight[2] * flTan * flDistance) + flUp[2] * flSendAnglesUp[i];
- flMul = (flDistance / vector_length(flEnd));
- flEnd[0] *= flMul;
- flEnd[1] *= flMul;
- flEnd[2] *= flMul;
- flEnd[0] = flEnd[0] + flOrigin[0];
- flEnd[1] = flEnd[1] + flOrigin[1];
- flEnd[2] = flEnd[2] + flOrigin[2];
- engfunc(EngFunc_TraceLine, flOrigin, flEnd, DONT_IGNORE_MONSTERS, iPlayer, iTrace);
- get_tr2(iTrace, TR_flFraction, flFraction);
- if(flFraction == 1.0) {
- engfunc(EngFunc_TraceHull, flOrigin, flEnd, HULL_HEAD, iPlayer, iTrace);
- get_tr2(iTrace, TR_flFraction, flFraction);
- engfunc(EngFunc_TraceLine, flOrigin, flEnd, DONT_IGNORE_MONSTERS, iPlayer, iTrace);
- pHit = get_tr2(iTrace, TR_pHit);
- }
- else pHit = get_tr2(iTrace, TR_pHit);
- if(flFraction != 1.0) {
- if(!iHitResult) {
- iHitResult = HIT_WORLD;
- new Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- UTIL_ShockEffect(vecEndPos);
- }
- }
- if(pHit > 0 && pHitEntity != pHit) {
- if(pev(pHit, pev_solid) == SOLID_BSP && !(pev(pHit, pev_spawnflags) & SF_BREAK_TRIGGER_ONLY)) ExecuteHamB(Ham_TakeDamage, pHit, iPlayer, iPlayer, flDamage, DMG_CLUB);
- else {
- FakeTraceAttack(pHit, iPlayer, flDamage, flForw, iTrace, DMG_CLUB);
- if(pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2_FAIL) {
- if(is_user_alive(pHit) && ze_is_user_zombie(pHit)) {
- new iKnockBack = STORMGIANT_KNOCKBACK;
- if(pev(pHit, pev_flags) & (FL_DUCKING | FL_ONGROUND) == (FL_DUCKING | FL_ONGROUND)) iKnockBack = (iKnockBack / 3);
- new Float: vecVelocity[3]; pev(pHit, pev_velocity, vecVelocity);
- new Float: vecKnockBack[3]; velocity_by_aim(iPlayer, iKnockBack, vecKnockBack);
- vecVelocity[2] += 200.0;
- vecKnockBack[2] = vecVelocity[2];
- set_pev(pHit, pev_velocity, vecKnockBack);
- set_pdata_float(pHit, m_flPainShock, 1.0, linux_diff_player);
- }
- }
- }
- iHitResult = HIT_ENTITY;
- pHitEntity = pHit;
- if(iHitResult != HIT_ENTITY) {
- new Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- UTIL_ShockEffect(vecEndPos);
- }
- }
- }
- free_tr2(iTrace);
- switch(iHitResult) {
- case HIT_NONE: {
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_MIDSLASH1_HIT: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[4], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- case ANIM_MIDSLASH2: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_FAIL);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2_FAIL: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- case HIT_WORLD: {
- if(pev(iPlayer, pev_weaponanim) == ANIM_MIDSLASH2) UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_HIT);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[random_num(8, 13)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case HIT_ENTITY: {
- switch(pev(iPlayer, pev_weaponanim)) {
- case ANIM_DRAW_ATTACK: emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- case ANIM_MIDSLASH1_HIT: {
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[5], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2: {
- UTIL_SendWeaponAnim(iPlayer, ANIM_MIDSLASH2_HIT);
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[7], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- case ANIM_MIDSLASH2_FAIL: {
- emit_sound(iPlayer, CHAN_ITEM, KNIFE_SOUNDS[6], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- emit_sound(iPlayer, CHAN_WEAPON, KNIFE_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- }
- }
- }
- public FakeTraceAttack(iVictim, iAttacker, Float: flDamage, Float: vecDirection[3], iTrace, iDamageBits) {
- static Float: flTakeDamage; pev(iVictim, pev_takedamage, flTakeDamage);
- if(flTakeDamage == DAMAGE_NO) return PLUGIN_CONTINUE;
- if(!is_user_alive(iVictim)) return PLUGIN_CONTINUE;
- if(is_user_connected(iVictim)) if(iVictim == iAttacker) return PLUGIN_CONTINUE;
- static iHitgroup; iHitgroup = get_tr2(iTrace, TR_iHitgroup);
- static Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
- set_pdata_int(iVictim, m_LastHitGroup, iHitgroup, linux_diff_player);
- switch(iHitgroup) {
- case HIT_HEAD: flDamage *= random_float(1.0, 2.0);
- case HIT_LEFTARM, HIT_RIGHTARM: flDamage *= random_float(0.5, 1.0);
- case HIT_LEFTLEG, HIT_RIGHTLEG: flDamage *= random_float(0.5, 1.0);
- case HIT_STOMACH: flDamage *= random_float(0.5, 1.0);
- }
- ExecuteHamB(Ham_TakeDamage, iVictim, iAttacker, iAttacker, flDamage, iDamageBits);
- if(ze_is_user_zombie(iVictim)) {
- UTIL_BloodDrips(iVictim, vecEndPos, floatround(flDamage));
- set_pdata_float(iVictim, m_flPainShock, 0.75, linux_diff_player);
- }
- return PLUGIN_HANDLED;
- }
- stock UTIL_ShockEffect(Float: vecOrigin[3]) {
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
- write_byte(TE_EXPLOSION);
- engfunc(EngFunc_WriteCoord, vecOrigin[0]);
- engfunc(EngFunc_WriteCoord, vecOrigin[1]);
- engfunc(EngFunc_WriteCoord, vecOrigin[2]);
- write_short(g_iSpriteIndex_Shock);
- write_byte(3);
- write_byte(15);
- write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES);
- message_end();
- }
- stock UTIL_BloodDrips(iVictim, Float: vecOrigin[3], iAmount) {
- if(iAmount > 255) iAmount = 255;
- engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecOrigin, 0);
- write_byte(TE_BLOODSPRITE);
- engfunc(EngFunc_WriteCoord, vecOrigin[0]);
- engfunc(EngFunc_WriteCoord, vecOrigin[1]);
- engfunc(EngFunc_WriteCoord, vecOrigin[2]);
- write_short(engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr"));
- write_short(engfunc(EngFunc_PrecacheModel, "sprites/blood.spr"));
- write_byte(ExecuteHamB(Ham_BloodColor, iVictim));
- write_byte(min(max(3, iAmount / 10), 16));
- message_end();
- }
- stock UTIL_PlayerAnimation(iPlayer, szAnim[]) {
- new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
- if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1) iAnimDesired = 0;
- set_pev(iPlayer, pev_frame, 0.0);
- set_pev(iPlayer, pev_framerate, 1.0);
- set_pev(iPlayer, pev_animtime, get_gametime());
- set_pev(iPlayer, pev_sequence, iAnimDesired);
- set_pdata_int(iPlayer, 40, bLoops, linux_diff_animating);
- set_pdata_int(iPlayer, 39, 0, linux_diff_animating);
- set_pdata_float(iPlayer, 36, flFrameRate, linux_diff_animating);
- set_pdata_float(iPlayer, 37, flGroundSpeed, linux_diff_animating);
- set_pdata_float(iPlayer, 38, get_gametime(), linux_diff_animating);
- set_pdata_int(iPlayer, 73, 28, linux_diff_player);
- set_pdata_int(iPlayer, 74, 28, linux_diff_player);
- set_pdata_float(iPlayer, 220, get_gametime(), linux_diff_player);
- }
- stock UTIL_SendWeaponAnim(iPlayer, iAnim, iBody = 0) {
- set_pev(iPlayer, pev_weaponanim, iAnim);
- message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
- write_byte(iAnim);
- write_byte(iBody);
- message_end();
- }
- stock UTIL_PrecacheSoundsFromModel(const szModelPath[]) {
- new iFile;
- if((iFile = fopen(szModelPath, "rt"))) {
- new szSoundPath[64];
- new iNumSeq, iSeqIndex;
- new iEvent, iNumEvents, iEventIndex;
- fseek(iFile, 164, SEEK_SET);
- fread(iFile, iNumSeq, BLOCK_INT);
- fread(iFile, iSeqIndex, BLOCK_INT);
- for(new k, i = 0; i < iNumSeq; i++) {
- fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
- fread(iFile, iNumEvents, BLOCK_INT);
- fread(iFile, iEventIndex, BLOCK_INT);
- fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
- for(k = 0; k < iNumEvents; k++) {
- fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
- fread(iFile, iEvent, BLOCK_INT);
- fseek(iFile, 4, SEEK_CUR);
- if(iEvent != 5004) continue;
- fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
- if(strlen(szSoundPath)) {
- strtolower(szSoundPath);
- engfunc(EngFunc_PrecacheSound, szSoundPath);
- }
- }
- }
- }
- fclose(iFile);
- }[/code]
Last edited by Raheem 4 years ago, edited 1 time in total.
Reason: Updated ze_zombie_appear(id) --> ze_zombie_appear()
Reason: Updated ze_zombie_appear(id) --> ze_zombie_appear()
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
//// cso_melee_stormgiant.sma
//
// C:\Users\macie\Documents\Compiler v1.8.3\scripting\cso_melee_stormgiant.sma(117) : error 025: function heading differs from prototype
//
// 1 Error.
// Could not locate output file compiled\cso_melee_stormgiant.amx (compile failed).
//
// Compilation Time: 1,56 sec
// -------------------------------
//
// C:\Users\macie\Documents\Compiler v1.8.3\scripting\cso_melee_stormgiant.sma(117) : error 025: function heading differs from prototype
//
// 1 Error.
// Could not locate output file compiled\cso_melee_stormgiant.amx (compile failed).
//
// Compilation Time: 1,56 sec
// -------------------------------
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
@czirimblo idk why you facing this problem ask @Raheem
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
worked. Can you tell me what did you change? I have the same problem with another knife
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
ze_zombie_appear(id) --> ze_zombie_appear()
-
- Veteran Member
- Posts: 598
- Joined: 7 years ago
- Contact:
ok but what else? what exactly did you add to this code?
-
- Veteran Member
- Posts: 408
- Joined: 5 years ago
- Contact:
look i added this:
Code: Select all
new g_freezetime
public plugin_init()
{
register_event("HLTV", "event_newround", "a", "1=0", "2=0")
}
public event_newround(id)
{
g_freezetime = true
}
public ze_zombie_appear()
{
g_freezetime = false
}
Code: Select all
if(g_freezetime)
return
// set knife speed
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: Bing [Bot] and 11 guests