Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- * Weapon Balance Mod
- * by Numb
- *
- *
- * Description:
- * This plugin ensures that all firearms will be useful. In other words, less popular
- * weapons are just as deadly now as normally mostly used ones. However due to large weapon
- * choice what Counter-Strike offers, this plugin isn't designed only to balance the
- * weapons power and how useful they are. It as well brings in new strategies - all weapons
- * are more balanced up, but some are more useful in various tactical situations than
- * others.
- *
- *
- * Requires:
- * FakeMeta
- * HamSandWich
- *
- *
- * Cvars:
- *
- * + "shotgun_tracers" - shotgun bullet tracers (just add the numbers).
- * - "1" - First-Person special tracers.
- * - "2" - Non-First-Person tracers. [default]
- * - "4" - First-Person tracers (1 must be disabled).
- *
- * + "shotgun_doubleshot" - shotgun ability to perform a double-shot.
- * - "0" - disabled. [default]
- * - "1" - enabled.
- *
- * + "weapon_autoswitch_fix" - smart autoswitch if _cl_autowepswitch is enabled.
- * - "0" - disabled.
- * - "1" - enabled. [default]
- *
- * + "weapon_silentpickup" - silent weapon pick up ability.
- * - "0" - disabled.
- * - "1" - enabled. [default]
- *
- * + "sniper_zoom_reset" - resets awp and scout zoom after fire.
- * - "0" - disabled.
- * - "1" - enabled.
- * - "2" - doesn't reset awp zoom, forces scout zoom to stay.
- * - "3" - resets awp zoom, forces scout zoom to stay. [default]
- *
- * + "glock_recoil" - visual recoil for glock.
- * - "0" - disabled.
- * - "1" - enabled. [default]
- *
- *
- * Additional info:
- * Tested in Counter-Strike 1.6 with amxmodx 1.8.3 (dev build hg83). You may find servers
- * what are using this plugin by pasting "weapon_balance" cvar in search options.
- *
- *
- * Notes:
- * This plugin only modifies bullet power, accuracy in some cases, and recoil percentage -
- * it does not change recoil to anything totally new. It took several months for this
- * plugin to see daylight; initial event what triggered creation of this mod is VALVe's
- * ( http://www.valvesoftware.com/ ) statement that Counter-Strike: Global Offensive
- * ( http://store.steampowered.com/app/1800/ ) will have balanced weapons.
- *
- *
- * Warnings:
- * It is highly recommended to install Accuracy Fix
- * ( http://forums.alliedmods.net/showthread.php?p=1549133 ), Rate of Fire Fix
- * ( http://forums.alliedmods.net/showthread.php?t=188182 ), Sniper Crosshairs
- * ( http://forums.alliedmods.net/showthread.php?t=188976 ) and Reload Animation Fix
- * ( http://forums.alliedmods.net/showthread.php?p=1620401 ) plugins before this one (in
- * that order). Also it is not suggested to pause this plugin non-manually.
- *
- *
- * Credits:
- * I would like to thank Arkshine ( http://forums.alliedmods.net/member.php?u=7779 ) for
- * CS-SDK ( https://github.com/Arkshine/CSSDK/ ), ConnorMcLeod
- * ( http://forums.alliedmods.net/member.php?u=18946 ) for some useful tips, xPaw
- * ( http://forums.alliedmods.net/member.php?u=39377 ) and n0br41ner
- * ( http://forums.alliedmods.net/member.php?u=182852 ) for helping in alpha version tests,
- * p3tsin ( http://forums.alliedmods.net/member.php?u=7025 ) creator of Potti - a
- * controllable fakeplayer ( http://forums.alliedmods.net/showthread.php?p=255078 ) plugin
- * what helped me in pre-beta tests, and ProClashGamers Clan
- * ( http://www.proclashgamers.com/ ) for help in beta tests.
- *
- *
- * Change-Log:
- *
- * + 1.9
- * - Added: More zoom reset options.
- *
- * + 1.8
- * - Fixed: Scout delay between empty clicking sound and reload.
- *
- * + 1.7
- * - Added: glock_recoil cvar to enable or disable glock recoil.
- * - Fixed: Ability to move during freezetime.
- *
- * + 1.6
- * - Added: sniper_zoom_reset cvar to reset awp and scout zoom after fire.
- *
- * + 1.5
- * - Fixed: Recoil change doesn't effect screen shake when taking damage.
- *
- * + 1.4
- * - Fixed: Shotgun recoil calculation.
- *
- * + 1.3
- * - Fixed: Minor code improvements.
- *
- * + 1.2
- * - Fixed: With Rate of Fire Fix while zoomed with SG552 or AUG, recoil is smaller.
- *
- * + 1.1
- * - Fixed: Is user walking check when not in water.
- *
- * + 1.0
- * - First release.
- *
- *
- * Downloads:
- * Amx Mod X forums: http://forums.alliedmods.net/showthread.php?p=1752298#post1752298
- *
- **/
- /**
- *
- * Weapon Information v1.9:
- * (% means compared to original)
- *
- * + Glock18
- * - Power: 152.5%
- * - Recoil: Only visual.
- * - Accuracy: Improved.
- * - Most efficient: From close to average ranges.
- * - Notes: None.
- *
- * * USP
- * - Power: 102.5%
- * - Recoil: 80%
- * - Accuracy: Same.
- * - Most efficient: From close-average to average-long ranges.
- * - Notes: None.
- *
- * + P228
- * - Power: 122.5%
- * - Recoil: 70%
- * - Accuracy: Same.
- * - Most efficient: From close-average to long ranges.
- * - Notes: Acts almost as USP, but is more powerful and easier to control. A good choice
- * for a secondary weapon.
- *
- * + Deagle
- * - Power: 95%
- * - Recoil: 90%
- * - Accuracy: Same.
- * - Most efficient: With Accuracy Fix plugin from average to long ranges. Else from
- * close-average to average.
- * - Notes: Most powerful pistol, however as a backup weapon it doesn't have the best fire
- * ratio.
- *
- * + FiveSeven
- * - Power: 117.5%
- * - Recoil: 60%
- * - Accuracy: Same.
- * - Most efficient: From close to long ranges.
- * - Notes: Acts almost as Glock18, but is more powerful on long ranges. However it still
- * has some recoil.
- *
- * + Elites
- * - Power: 132.5%
- * - Recoil: 60%.
- * - Accuracy: Improved.
- * - Most efficient: From close to close-average ranges.
- * - Notes: A good choice to have as secondary, when primary weapon runs out of bullets on
- * close shooting ranges.
- *
- * + M3
- * - Power: 85%
- * - Recoil: Same.
- * - Accuracy: 75% better.
- * - Most efficient: From close-average to average-long ranges.
- * - Notes: Bullet spread is improved much. A good weapon to have when in tight corners.
- *
- * + XM1014
- * - Power: 82.5%
- * - Recoil: Same.
- * - Accuracy: 72.5% better.
- * - Most efficient: From close to average-long ranges.
- * - Notes: Bullet spread is improved much. A good weapon to have when in tight corners.
- *
- * + TMP
- * - Power: 145%
- * - Recoil: 55%
- * - Accuracy: Improved.
- * - Most efficient: From close to average ranges.
- * - Notes: A stealthy killing machine.
- *
- * + MAC10
- * - Power: With Rate of Fire Fix plugin 117.5% Else 147.5%
- * - Recoil: 55%
- * - Accuracy: Improved.
- * - Most efficient: From close to average ranges.
- * - Notes: If you compare TMP to M4A1, than this one is AK47 counter-version.
- *
- * + MP5Navy
- * - Power: 142.5%
- * - Recoil: 80%
- * - Accuracy: Improved.
- * - Most efficient: From close-average to average-long ranges.
- * - Notes: Second best long range sub-machine-gun.
- *
- * + UMP45
- * - Power: 140%
- * - Recoil: 55%
- * - Accuracy: Improved much.
- * - Most efficient: From average-long to long ranges.
- * - Notes: If ducked, all bullets will go in the middle of the crosshair. Else it's
- * upwards line. However due to long rate of fire it isn't a good choice for close combats.
- *
- * + P90
- * - Power: 137.5%
- * - Recoil: 50%
- * - Accuracy: Same.
- * - Most efficient: From close-average to average-long ranges.
- * - Notes: Due to 50 bullets clip weapon doesn't run on empty so often, therefor it's
- * easier to survive a situation when attacked by many enemies at once.
- *
- * + Galil
- * - Power: 112.5%
- * - Recoil: 80%
- * - Accuracy: Improved.
- * - Most efficient: From close to average-long ranges.
- * - Notes: None.
- *
- * + Famas
- * - Power: With Rate of Fire Fix plugin 85% Else 105%
- * - Recoil: 80%
- * - Accuracy: Same.
- * - Most efficient: From close-average to long ranges.
- * - Notes: None.
- *
- * + AK47
- * - Power: 97.5%
- * - Recoil: 70%
- * - Accuracy: Same.
- * - Most efficient: From close to average-long ranges.
- * - Notes: None.
- *
- * + M4A1
- * - Power: 102.5%
- * - Recoil: 80%
- * - Accuracy: Same.
- * - Most efficient: From close-average to long ranges.
- * - Notes: None.
- *
- * + SG552
- * - Power: 107.5%
- * - Recoil: With Rate of Fire Fix zoomed 65% Else 75%
- * - Accuracy: Same.
- * - Most efficient: From close-average to average-long ranges.
- * - Notes: Good choice for a terrorist rifle when in long range combat.
- *
- * + AUG
- * - Power: 112.5%
- * - Recoil: With Rate of Fire Fix zoomed 55% Else 65%
- * - Accuracy: Same.
- * - Most efficient: From average to long ranges.
- * - Notes: Good choice for a CT rifle when in long range combat.
- *
- * + Scout
- * - Power: 87.5%
- * - Recoil: Same.
- * - Accuracy: Improved when un-zoomed.
- * - Most efficient: From average-long to long ranges.
- * - Notes: Acts like a shotgun due to faster rate of fire, and is accurate when running
- * while un-zoomed.
- *
- * + AWP
- * - Power: 97.5%
- * - Recoil: Same.
- * - Accuracy: Same.
- * - Most efficient: From average-long to long ranges.
- * - Notes: AWP does a massive amount of damage, but be prepared to take out your pistol to
- * finish what you started. Good pistol choice is crucial. However you may zoom-in while
- * reloading your bullet. Also after you fired, your speed is auto-reset - there is no
- * need to tap Q twice.
- *
- * + SG550
- * - Power: 112.5%
- * - Recoil: Same.
- * - Accuracy: Improved when un-zoomed.
- * - Most efficient: From average to long ranges.
- * - Notes: Just like Scout, this weapon is accurate while running un-zoomed.
- *
- * + G3SG1
- * - Power: 107.5%
- * - Recoil: Same.
- * - Accuracy: Improved when un-zoomed.
- * - Most efficient: From average to long ranges.
- * - Notes: Just like Scout and SG550, this weapon is accurate while running un-zoomed.
- *
- * + M249
- * - Power: With Rate of Fire Fix plugin 90% Else 130%
- * - Recoil: 60%
- * - Accuracy: Same.
- * - Most efficient: From close-average to long ranges.
- * - Notes: Spray and pray. Except 100 bullets will do all the praying for you. The most
- * money required and in a sense the best automatic weapon in the game. But due to its
- * weight, you might not want to go in the middle of the field on low bullets - it takes time to reload or run away.
- *
- **/
- #include <amxmodx>
- #include <fakemeta>
- #include <hamsandwich>
- #define PLUGIN_NAME "Weapon Balance Mod"
- #define PLUGIN_VERSION "1.9"
- #define PLUGIN_AUTHOR "Numb"
- #define PLUGIN_INFO "http://forums.alliedmods.net/showthread.php?p=1752299#post1752299"
- #define m_flStartThrow 30
- #define m_pPlayer 41
- #define m_iId 43
- #define m_flNextPrimaryAttack 46
- #define m_flNextSecondaryAttack 47
- #define m_flTimeWeaponIdle 48
- #define m_iClip 51
- #define m_fInReload 54
- #define m_fInSpecialReload 55
- #define m_flAccuracy 62
- #define m_iShotsFired 64
- #define m_fWeaponState 74
- #define WEAPONSTATE_GLOCK18_BURST_MODE (1<<1)
- #define WEAPONSTATE_FAMAS_BURST_MODE (1<<4)
- #define m_LastHitGroup 75
- #define m_flNextAttack 83
- #define m_iLastZoom 109
- #define m_bResumeZoom 110
- #define m_iFOV 363
- #define m_pActiveItem 373
- #define m_iClAutoWepSwitch 509
- #define SetPlayerBit(%1,%2) ( %1 |= ( 1 << ( %2 & 31 ) ) )
- #define ClearPlayerBit(%1,%2) ( %1 &= ~( 1 << ( %2 & 31 ) ) )
- #define CheckPlayerBit(%1,%2) ( %1 & ( 1 << ( %2 & 31 ) ) )
- new g_iMaxPlayers;
- new g_iConnected;
- new g_iAlive;
- new g_iOldClip;
- new g_iFMFwd_TraceLine_Pre;
- new g_iFMFwd_PlrPostThink_Post;
- new g_iShotgunOwner;
- new g_iTraceBeam;
- new Float:g_fAimTo[3];
- new Float:g_fAimFrom[3];
- new Float:g_fBackupSpeed[3];
- new Float:g_fBackupAngle[3];
- new bool:g_bDoubleShot;
- new bool:g_bM3;
- new bool:g_bFakedFov;
- new bool:g_bFakedSpeed;
- new g_iOldWpn;
- new g_iDefaultAutoSwitch = -1;
- new bool:g_bPickedUpWeapon;
- new Float:g_fLastAttack[33];
- new g_iUserInWalk;
- new g_iShotgunTracers;
- new g_iCvarShotgunTracers;
- new g_iCvarShotGunDoubleShot;
- new g_iCvarAutoSwitchFix;
- new g_iCvarSilentPickUp;
- new g_iCvarSniperReset;
- new g_iCvarGlockRecoil;
- new g_iMsgId_TextMsg;
- new g_iMsgId_Crosshair;
- new bool:g_bRateOfFireFix;
- new bool:g_bInFreezeTime;
- public plugin_precache()
- g_iTraceBeam = precache_model("sprites/zbeam6.spr");
- public plugin_init()
- {
- register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
- register_cvar("weapon_balance", PLUGIN_VERSION, (FCVAR_SERVER|FCVAR_SPONLY));
- g_iCvarShotgunTracers = register_cvar("shotgun_tracers", "2");
- // 1 = see first person special tracer
- // 2 = see non-first person tracers
- // 4 = see first person normal tracers (1 must be disabled)
- g_iCvarShotGunDoubleShot = register_cvar("shotgun_doubleshot", "0");
- g_iCvarAutoSwitchFix = register_cvar("weapon_autoswitch_fix", "1");
- g_iCvarSilentPickUp = register_cvar("weapon_silentpickup", "1");
- g_iCvarSniperReset = register_cvar("sniper_zoom_reset", "3");
- g_iCvarGlockRecoil = register_cvar("glock_recoil", "1");
- register_event("SetFOV", "Event_SetFOV", "be", "1!90");
- register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
- register_logevent("LogEvent_RoundStart", 2, "1=Round_Start");
- register_forward(FM_CmdStart, "FM_CmdStart_Post", 1);
- register_forward(FM_EmitSound, "FM_EmitSound_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_glock18", "Ham_Attack_glock_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_glock18", "Ham_Attack_glock_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_usp", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_usp", "Ham_Attack_usp_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p228", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p228", "Ham_Attack_p228_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_deagle", "Ham_Attack_deagle_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_fiveseven", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_fiveseven", "Ham_Attack_57_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite", "Ham_Attack_elite_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_elite", "Ham_Attack_elite_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m3", "Ham_Attack_shotgun_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m3", "Ham_Attack_shotgun_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_xm1014", "Ham_Attack_shotgun_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_xm1014", "Ham_Attack_shotgun_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_tmp", "Ham_Attack_tmp_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_tmp", "Ham_Attack_subgun_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mac10", "Ham_Attack_mac10_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mac10", "Ham_Attack_subgun_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "Ham_Attack_mp5_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_mp5navy", "Ham_Attack_mp5_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ump45", "Ham_Attack_ump45_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ump45", "Ham_Attack_subgun_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_p90", "Ham_Attack_p90_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "Ham_Attack_galil_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_galil", "Ham_Attack_galil_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_famas", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_famas", "Ham_Attack_famas_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "Ham_Attack_ak47_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m4a1", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m4a1", "Ham_Attack_m4a1_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg552", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg552", "Ham_Attack_sg552_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_aug", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_aug", "Ham_Attack_aug_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout", "Ham_Attack_scout_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout", "Ham_Attack_scout_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "Ham_Attack_awp_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_awp", "Ham_Attack_awp_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg550", "Ham_Attack_sniper_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_sg550", "Ham_Attack_sniper_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_g3sg1", "Ham_Attack_sniper_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_g3sg1", "Ham_Attack_sniper_Post", 1);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "Ham_Attack_Pre", 0);
- RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "Ham_Attack_m249_Post", 1);
- RegisterHam(Ham_Item_Deploy, "weapon_glock18", "Ham_Deploy_glock_Post", 1);
- RegisterHam(Ham_Item_Deploy, "weapon_famas", "Ham_Deploy_famas_Post", 1);
- RegisterHam(Ham_Item_Deploy, "weapon_m3", "Ham_Deploy_shotgun_Post", 1);
- RegisterHam(Ham_Item_Deploy, "weapon_xm1014", "Ham_Deploy_shotgun_Post", 1);
- RegisterHam(Ham_Item_Deploy, "weapon_scout", "Ham_Deploy_scout_Post", 1);
- RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "Ham_SecAttack_sniper_Post", 1);
- RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp", "Ham_SecAttack_sniper_Post", 1);
- RegisterHam(Ham_Player_PostThink, "player", "Ham_Player_PostThink_Pre", 0);
- RegisterHam(Ham_AddPlayerItem, "player", "Ham_AddPlayerItem_Pre", 0);
- RegisterHam(Ham_Spawn, "player", "Ham_Spawn_player_Post", 1);
- RegisterHam(Ham_Killed, "player", "Ham_Killed_player_Post", 1);
- RegisterHam(Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0);
- g_iMsgId_TextMsg = get_user_msgid("TextMsg");
- g_iMaxPlayers = clamp(get_maxplayers(), 1, 32);
- }
- public clcmd_wpnbalance(iPlrId)
- {
- client_print(iPlrId, print_notify, "* %s %s plugin ensures that all firearms will be useful.", PLUGIN_NAME, PLUGIN_VERSION);
- client_print(iPlrId, print_notify, "* More information: %s", PLUGIN_INFO);
- client_print(iPlrId, print_chat, "* %s %s plugin ensures that all firearms will be useful.", PLUGIN_NAME, PLUGIN_VERSION);
- client_print(iPlrId, print_chat, "* More information: %s", PLUGIN_INFO);
- new iBuffer[32];
- formatex(iBuffer, 31, "%s v%s", PLUGIN_NAME, PLUGIN_VERSION);
- show_motd(iPlrId, PLUGIN_INFO, iBuffer);
- }
- public plugin_unpause()
- {
- g_iConnected = 0;
- g_iAlive = 0;
- g_iUserInWalk = 0;
- for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
- {
- if( is_user_alive(iPlrId) )
- {
- SetPlayerBit(g_iConnected, iPlrId);
- SetPlayerBit(g_iAlive, iPlrId);
- }
- else if( is_user_connected(iPlrId) )
- SetPlayerBit(g_iConnected, iPlrId);
- g_fLastAttack[iPlrId] = 0.0;
- }
- g_bInFreezeTime = false;
- }
- public client_putinserver(iPlrId)
- {
- SetPlayerBit(g_iConnected, iPlrId);
- ClearPlayerBit(g_iUserInWalk, iPlrId);
- g_fLastAttack[iPlrId] = 0.0;
- }
- public client_disconnect(iPlrId)
- {
- ClearPlayerBit(g_iConnected, iPlrId);
- ClearPlayerBit(g_iUserInWalk, iPlrId);
- g_fLastAttack[iPlrId] = 0.0;
- }
- public Event_CurWeapon(iPlrId)
- {
- static s_iFov;
- if( CheckPlayerBit(g_iAlive, iPlrId) )
- s_iFov = get_pdata_int(iPlrId, m_iFOV, 5); //pev(iPlrId, pev_fov, s_fFov);
- else if( pev(iPlrId, pev_iuser1)==4 )
- {
- static s_iSpectated;
- s_iSpectated = pev(iPlrId, pev_iuser2);
- if( 0<s_iSpectated<=g_iMaxPlayers )
- {
- if( CheckPlayerBit(g_iAlive, s_iSpectated) )
- s_iFov = get_pdata_int(s_iSpectated, m_iFOV, 5); //pev(iSpectated, pev_fov, s_fFov);
- else
- return;
- }
- else
- return;
- }
- else
- return;
- if( s_iFov!=90 )
- return;
- message_begin(MSG_ONE, g_iMsgId_Crosshair, _, iPlrId);
- write_byte(1);
- message_end();
- return;
- }
- public Event_SetFOV(iPlrId)
- {
- if( g_bInFreezeTime )
- return;
- new iWpnEnt = get_pdata_cbase(iPlrId, m_pActiveItem, 5);
- if( iWpnEnt<=0 )
- return;
- switch( get_pdata_int(iWpnEnt, m_iId, 4) )
- {
- case CSW_SCOUT, CSW_AWP:
- {
- new Float:fSpeed;
- ExecuteHamB(Ham_CS_Item_GetMaxSpeed, iWpnEnt, fSpeed);
- engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed);
- set_pev(iPlrId, pev_maxspeed, fSpeed);
- }
- default: return;
- }
- }
- public Event_NewRound()
- g_bInFreezeTime = true;
- public LogEvent_RoundStart()
- g_bInFreezeTime = false;
- public FM_CmdStart_Post(iPlrId, iUcHandle, iSpeed)
- {
- static Float:s_fForwardMove, Float:s_fSideMove, Float:s_fUpMove, Float:s_fOldSpeed[33];
- get_uc(iUcHandle, UC_ForwardMove, s_fForwardMove);
- get_uc(iUcHandle, UC_SideMove, s_fSideMove);
- if( pev(iPlrId, pev_waterlevel)>=2 )
- get_uc(iUcHandle, UC_UpMove, s_fUpMove);
- else
- s_fUpMove = 0.0;
- if( ((s_fForwardMove*s_fForwardMove)+(s_fSideMove*s_fSideMove)+(s_fUpMove*s_fUpMove))>22500.0 ) // 150*150 (wants to move at speed above 150)
- ClearPlayerBit(g_iUserInWalk, iPlrId);
- else if( s_fForwardMove || s_fSideMove || s_fUpMove ) // wants to move at speed below 150
- {
- SetPlayerBit(g_iUserInWalk, iPlrId);
- s_fOldSpeed[iPlrId] = 0.0;
- }
- else if( CheckPlayerBit(g_iUserInWalk, iPlrId) ) // doesn't want to move at all
- {
- static Float:s_fVelocity[3], Float:s_fSpeed;
- pev(iPlrId, pev_velocity, s_fVelocity);
- s_fSpeed = ((s_fVelocity[0]*s_fVelocity[0])+(s_fVelocity[1]*s_fVelocity[1])+(s_fVelocity[2]*s_fVelocity[2]));
- if( !s_fSpeed || (s_fSpeed>22500.0) ) // stopped moving after walking
- ClearPlayerBit(g_iUserInWalk, iPlrId); // or was pushed to speed above 150 after walking
- else
- {
- if( !s_fOldSpeed[iPlrId] )
- s_fOldSpeed[iPlrId] = s_fSpeed;
- else if( s_fSpeed>=s_fOldSpeed[iPlrId] )
- ClearPlayerBit(g_iUserInWalk, iPlrId); // was pushed when slowing down
- else
- s_fOldSpeed[iPlrId] = s_fSpeed;
- }
- }
- g_iDefaultAutoSwitch = (get_pdata_int(iPlrId, m_iClAutoWepSwitch, 5)?1:0);
- g_bPickedUpWeapon = false;
- g_iOldWpn = 0;
- }
- public FM_PlayerPostThink_Post(iPlrId)
- {
- g_bM3 = false;
- if( g_iFMFwd_TraceLine_Pre )
- {
- unregister_forward(FM_TraceLine, g_iFMFwd_TraceLine_Pre, 0);
- g_iFMFwd_TraceLine_Pre = 0;
- }
- if( g_iFMFwd_PlrPostThink_Post )
- {
- unregister_forward(FM_PlayerPostThink, g_iFMFwd_PlrPostThink_Post, 1);
- g_iFMFwd_PlrPostThink_Post = 0;
- }
- }
- public FM_TraceLine_Pre(Float:fStart[3], Float:fEnd[3], iNoMonsters, iEntToSkip, iTraceResult)
- {
- if( g_fAimFrom[0]!=fStart[0] || g_fAimFrom[1]!=fStart[1] || g_fAimFrom[2]!=fStart[2] )
- return FMRES_IGNORED;
- static Float:s_fTraceEnd[3];
- if( g_bM3 )
- {
- if( g_bDoubleShot )
- {
- s_fTraceEnd[0] = (fEnd[0]-g_fAimTo[0])*0.475;
- s_fTraceEnd[1] = (fEnd[1]-g_fAimTo[1])*0.475;
- s_fTraceEnd[2] = (fEnd[2]-g_fAimTo[2])*0.475;
- }
- else
- {
- s_fTraceEnd[0] = (fEnd[0]-g_fAimTo[0])*0.25;
- s_fTraceEnd[1] = (fEnd[1]-g_fAimTo[1])*0.25;
- s_fTraceEnd[2] = (fEnd[2]-g_fAimTo[2])*0.25;
- }
- }
- else if( g_bDoubleShot )
- {
- s_fTraceEnd[0] = (fEnd[0]-g_fAimTo[0])*0.525;
- s_fTraceEnd[1] = (fEnd[1]-g_fAimTo[1])*0.525;
- s_fTraceEnd[2] = (fEnd[2]-g_fAimTo[2])*0.525;
- }
- else
- {
- s_fTraceEnd[0] = (fEnd[0]-g_fAimTo[0])*0.275;
- s_fTraceEnd[1] = (fEnd[1]-g_fAimTo[1])*0.275;
- s_fTraceEnd[2] = (fEnd[2]-g_fAimTo[2])*0.275;
- }
- s_fTraceEnd[0] += g_fAimTo[0];
- s_fTraceEnd[1] += g_fAimTo[1];
- s_fTraceEnd[2] += g_fAimTo[2];
- engfunc(EngFunc_TraceLine, fStart, s_fTraceEnd, iNoMonsters, iEntToSkip, iTraceResult);
- get_tr2(iTraceResult, TR_vecEndPos, s_fTraceEnd);
- if( !g_iShotgunTracers )
- return FMRES_SUPERCEDE;
- for( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
- {
- if( CheckPlayerBit(g_iConnected, iPlrId) )
- {
- if( iPlrId==g_iShotgunOwner || (!CheckPlayerBit(g_iAlive, iPlrId) && pev(iPlrId, pev_iuser1)==4 && pev(iPlrId, pev_iuser2)==g_iShotgunOwner) )
- {
- if( g_iShotgunTracers&1 )
- {
- message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlrId);
- write_byte(TE_BEAMPOINTS);
- engfunc(EngFunc_WriteCoord, fStart[0]);
- engfunc(EngFunc_WriteCoord, fStart[1]);
- engfunc(EngFunc_WriteCoord, fStart[2]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[0]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[1]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[2]);
- write_short(g_iTraceBeam);
- write_byte(0); // starting frame
- write_byte(1); // frame rate in 0.1's
- write_byte(1); // life in 0.1's
- write_byte(2); // line width in 0.1's
- write_byte(0); // noise amplitude in 0.01's
- write_byte(255); // red
- write_byte(255); // green
- write_byte(31); // blue
- write_byte(15); // brightness
- write_byte(15); // scroll speed in 0.1's
- message_end();
- }
- else if( g_iShotgunTracers&4 )
- {
- message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlrId);
- write_byte(TE_TRACER)
- engfunc(EngFunc_WriteCoord, fStart[0]);
- engfunc(EngFunc_WriteCoord, fStart[1]);
- engfunc(EngFunc_WriteCoord, fStart[2]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[0]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[1]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[2]);
- message_end();
- }
- }
- else if( g_iShotgunTracers&2 )
- {
- message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlrId);
- write_byte(TE_TRACER)
- engfunc(EngFunc_WriteCoord, fStart[0]);
- engfunc(EngFunc_WriteCoord, fStart[1]);
- engfunc(EngFunc_WriteCoord, fStart[2]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[0]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[1]);
- engfunc(EngFunc_WriteCoord, s_fTraceEnd[2]);
- message_end();
- }
- }
- }
- return FMRES_SUPERCEDE;
- }
- public FM_EmitSound_Pre(iEnt, iChannel, iSample[], Float:fVolume, Float:fAttenuation, iFlags, iPitch)
- {
- if( 0<iEnt<=g_iMaxPlayers )
- {
- if( g_bPickedUpWeapon && iChannel==CHAN_ITEM && equal(iSample, "items/gunpickup2.wav") && fVolume==VOL_NORM && fAttenuation==ATTN_NORM && !iFlags && iPitch==PITCH_NORM && get_pcvar_num(g_iCvarSilentPickUp)>0 )
- {
- //if( get_pdata_int(iEnt, m_iClAutoWepSwitch, 5) )
- if( g_iOldWpn!=get_pdata_cbase(iEnt, m_pActiveItem, 5) )
- return FMRES_IGNORED;
- static Float:s_fVelocity[3];
- pev(iEnt, pev_velocity, s_fVelocity);
- if( ((s_fVelocity[0]*s_fVelocity[0])+(s_fVelocity[1]*s_fVelocity[1])+(s_fVelocity[2]*s_fVelocity[2]))<=22500 )
- {
- client_cmd(iEnt, "spk ^"items/gunpickup1(t40)^"");
- return FMRES_SUPERCEDE;
- }
- }
- }
- return FMRES_IGNORED;
- }
- public Ham_Attack_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- }
- public Ham_Attack_glock_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( g_iOldClip>0 && (get_pdata_int(iEnt, m_iShotsFired, 4)<=0 || get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_GLOCK18_BURST_MODE) && get_pdata_float(iEnt, m_flAccuracy, 4)<0.73 )
- set_pdata_float(iEnt, m_flAccuracy, 0.73, 4);
- }
- public Ham_Attack_glock_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- if( get_pcvar_num(g_iCvarGlockRecoil)>0 )
- {
- static s_iOwner, Float:s_fPunchAngle[3];
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- pev(s_iOwner, pev_punchangle, s_fPunchAngle);
- if( s_fPunchAngle[0]>-25.0 )
- {
- s_fPunchAngle[0] -= 1.8;
- if( s_fPunchAngle[0]<-25.0 )
- s_fPunchAngle[0] = -25.0;
- }
- set_pev(s_iOwner, pev_punchangle, s_fPunchAngle);
- g_fLastAttack[s_iOwner] = (get_gametime()+0.5);
- }
- else
- g_fLastAttack[get_pdata_cbase(iEnt, m_pPlayer, 4)] = (get_gametime()+0.5);
- }
- }
- public Ham_Attack_usp_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_vertical_recoil(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.8, 0.15, 0.1, 0.25);
- }
- public Ham_Attack_p228_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_vertical_recoil(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.7, 0.15, 0.1, 0.3);
- }
- public Ham_Attack_deagle_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_vertical_recoil(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.9, 0.25, 0.05, 0.3);
- }
- public Ham_Attack_57_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_vertical_recoil(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.6, 0.15, 0.1, 0.3);
- }
- public Ham_Attack_elite_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( g_iOldClip>0 && get_pdata_int(iEnt, m_iShotsFired, 4)<=0 && get_pdata_float(iEnt, m_flAccuracy, 4)<0.7 )
- set_pdata_float(iEnt, m_flAccuracy, 0.7, 4);
- }
- public Ham_Attack_elite_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_vertical_recoil(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.6, 0.25, 0.1, 0.4);
- }
- public Ham_Attack_shotgun_Pre(iEnt)
- {
- if( (g_iOldClip=get_pdata_int(iEnt, m_iClip, 4))>0 )
- {
- if( pev((g_iShotgunOwner=get_pdata_cbase(iEnt, m_pPlayer, 4)), pev_waterlevel)!=3 )
- {
- g_iShotgunTracers = clamp(get_pcvar_num(g_iCvarShotgunTracers), 0, 7);
- static Float:s_fViewOfs[3], Float:s_fAngle[3];
- pev(g_iShotgunOwner, pev_origin, g_fAimFrom);
- pev(g_iShotgunOwner, pev_view_ofs, s_fViewOfs);
- pev(g_iShotgunOwner, pev_v_angle, s_fAngle);
- g_fAimFrom[0] += s_fViewOfs[0];
- g_fAimFrom[1] += s_fViewOfs[1];
- g_fAimFrom[2] += s_fViewOfs[2];
- pev(g_iShotgunOwner, pev_punchangle, s_fViewOfs);
- s_fAngle[0] += s_fViewOfs[0];
- s_fAngle[1] += s_fViewOfs[1];
- s_fAngle[2] += s_fViewOfs[2];
- s_fAngle[0] *= -1;
- if( get_pdata_int(iEnt, m_iId, 4)==CSW_M3 )
- {
- SphereToCartesian(g_fAimTo, g_fAimFrom, s_fAngle, Float:{0.0, 0.0, 3000.0});
- g_bM3 = true;
- }
- else
- {
- SphereToCartesian(g_fAimTo, g_fAimFrom, s_fAngle, Float:{0.0, 0.0, 3048.0});
- g_bM3 = false;
- }
- if( g_iFMFwd_TraceLine_Pre )
- unregister_forward(FM_TraceLine, g_iFMFwd_TraceLine_Pre, 0);
- if( g_iFMFwd_PlrPostThink_Post )
- unregister_forward(FM_PlayerPostThink, g_iFMFwd_PlrPostThink_Post, 1);
- g_iFMFwd_TraceLine_Pre = register_forward(FM_TraceLine, "FM_TraceLine_Pre", 0);
- g_iFMFwd_PlrPostThink_Post = register_forward(FM_PlayerPostThink, "FM_PlayerPostThink_Post", 1);
- pev(g_iShotgunOwner, pev_punchangle, g_fBackupAngle);
- }
- }
- }
- public Ham_Attack_shotgun_Post(iEnt)
- {
- if( g_iFMFwd_TraceLine_Pre )
- {
- unregister_forward(FM_TraceLine, g_iFMFwd_TraceLine_Pre, 0);
- g_iFMFwd_TraceLine_Pre = 0;
- }
- if( g_iFMFwd_PlrPostThink_Post )
- {
- unregister_forward(FM_PlayerPostThink, g_iFMFwd_PlrPostThink_Post, 1);
- g_iFMFwd_PlrPostThink_Post = 0;
- }
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- g_fLastAttack[g_iShotgunOwner] = (get_gametime()+0.5);
- if( !g_bDoubleShot )
- {
- if( g_iOldClip>1 && get_pcvar_num(g_iCvarShotGunDoubleShot)>0 && pev(g_iShotgunOwner, pev_button)&IN_ATTACK2 )
- {
- static Float:s_fAngleDifference, Float:s_fOldAngle;
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.0, 4);
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.0, 4);
- set_pev(g_iShotgunOwner, pev_punchangle, g_fBackupAngle);
- s_fOldAngle = g_fBackupAngle[0];
- g_bDoubleShot = true;
- ExecuteHamB(Ham_Weapon_PrimaryAttack, iEnt);
- g_bDoubleShot = false;
- pev(g_iShotgunOwner, pev_punchangle, g_fBackupAngle);
- s_fAngleDifference = (g_fBackupAngle[0]-s_fOldAngle);
- if( get_pdata_int(iEnt, m_iId, 4)==CSW_XM1014 )
- {
- if( g_fBackupAngle[0]>-25.0 && g_fBackupAngle[0]<0.0 )
- {
- s_fAngleDifference *= 1.6;
- g_fBackupAngle[0] = (s_fOldAngle+s_fAngleDifference);
- if( g_fBackupAngle[0]<-25.0 )
- g_fBackupAngle[0] = -25.0;
- set_pev(g_iShotgunOwner, pev_punchangle, g_fBackupAngle);
- }
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.45, 4); // animation 2 (super), 1 (normal)
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.45, 4); // but uh... ping will mess up animations
- }
- else if( g_fBackupAngle[0]>-25.0 && g_fBackupAngle[0]<0.0 )
- {
- s_fAngleDifference *= 2.1;
- g_fBackupAngle[0] = (s_fOldAngle+s_fAngleDifference);
- if( g_fBackupAngle[0]<-25.0 )
- g_fBackupAngle[0] = -25.0;
- set_pev(g_iShotgunOwner, pev_punchangle, g_fBackupAngle);
- }
- }
- else if( get_pdata_int(iEnt, m_iId, 4)==CSW_M3 ) // speedup bullet reload from 0.875 to 0.75
- {
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.75, 4); // animation 1 (super), 2 (normal)
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.75, 4); // but uh... ping will mess up animations
- }
- }
- }
- g_bM3 = false;
- }
- public Ham_Attack_tmp_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( get_pdata_float(iEnt, m_flAccuracy, 4)>0.9 )
- set_pdata_float(iEnt, m_flAccuracy, 0.9, 4);
- }
- public Ham_Attack_mac10_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( get_pdata_float(iEnt, m_flAccuracy, 4)>0.95 )
- set_pdata_float(iEnt, m_flAccuracy, 0.95, 4);
- }
- public Ham_Attack_mp5_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( get_pdata_float(iEnt, m_flAccuracy, 4)>0.4 )
- set_pdata_float(iEnt, m_flAccuracy, 0.4, 4);
- }
- public Ham_Attack_mp5_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.8, 0.2, 0.1, 0.3);
- }
- public Ham_Attack_ump45_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( get_pdata_float(iEnt, m_flAccuracy, 4)>0.3 )
- set_pdata_float(iEnt, m_flAccuracy, 0.3, 4);
- }
- public Ham_Attack_subgun_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.55, 0.25, 0.1, 0.3);
- }
- public Ham_Attack_p90_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.5, 0.15, 0.1, 0.3);
- }
- public Ham_Attack_galil_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_punchangle, g_fBackupAngle);
- if( g_iOldClip>0 && pev(get_pdata_cbase(iEnt, m_pPlayer, 4), pev_waterlevel)!=3 && get_pdata_float(iEnt, m_flAccuracy, 4)<0.95 )
- set_pdata_float(iEnt, m_flAccuracy, 0.95, 4);
- }
- public Ham_Attack_galil_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.8, 0.2, 0.1, 0.25);
- }
- public Ham_Attack_famas_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.8, 0.15, 0.1, 0.25);
- }
- public Ham_Attack_ak47_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.7, 0.2, 0.15, 0.3);
- }
- public Ham_Attack_m4a1_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.8, 0.2, 0.15, 0.3);
- }
- public Ham_Attack_sg552_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- if( g_bRateOfFireFix )
- {
- static s_iOwner;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- fix_punchangle_2d(s_iOwner, ((0<get_pdata_int(s_iOwner, m_iFOV, 5)<90)?0.65:0.75), 0.2, 0.15, 0.3);
- }
- else
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.75, 0.2, 0.15, 0.3);
- }
- }
- public Ham_Attack_aug_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- static s_iOwner, Float:s_fPunchAngle[3];
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- pev(s_iOwner, pev_punchangle, s_fPunchAngle);
- if( g_bRateOfFireFix )
- {
- static s_iOwner;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- fix_punchangle_2d(s_iOwner, ((0<get_pdata_int(s_iOwner, m_iFOV, 5)<90)?0.55:0.65), 0.2, 0.15, 0.3);
- }
- else
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.65, 0.2, 0.15, 0.3);
- }
- }
- public Ham_Attack_scout_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- if( g_iOldClip<=0 && !get_pdata_int(iEnt, m_fInReload, 4) )
- {
- ExecuteHamB(Ham_Weapon_PlayEmptySound, iEnt);
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.2, 4);
- return HAM_SUPERCEDE;
- }
- else if( g_iOldClip>0 )
- {
- static s_iOwner, Float:s_fFov;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- pev(s_iOwner, pev_fov, s_fFov);
- if( s_fFov==90.0 )
- {
- pev(s_iOwner, pev_velocity, g_fBackupSpeed);
- if( ((g_fBackupSpeed[0]*g_fBackupSpeed[0])+(g_fBackupSpeed[1]*g_fBackupSpeed[1]))<=19600.0 ) // 140*140
- {
- set_pev(s_iOwner, pev_fov, 40.0);
- g_bFakedFov = true;
- g_bFakedSpeed = false;
- }
- else
- {
- set_pev(s_iOwner, pev_velocity, Float:{170.0, 0.0, 0.0});
- g_bFakedFov = false;
- g_bFakedSpeed = true;
- }
- }
- else
- {
- g_bFakedFov = false;
- g_bFakedSpeed = false;
- }
- }
- else
- {
- g_bFakedFov = false;
- g_bFakedSpeed = false;
- }
- return HAM_IGNORED;
- }
- public Ham_Attack_scout_Post(iEnt)
- {
- static s_iOwner;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.55, 4);
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.0, 4);
- set_pdata_float(s_iOwner, m_flNextAttack, 0.0, 5);
- if( get_pdata_int(s_iOwner, m_bResumeZoom, 5) )
- {
- static s_iZoomReset;
- s_iZoomReset = get_pcvar_num(g_iCvarSniperReset);
- if( s_iZoomReset&2 )
- {
- static s_iFov;
- s_iFov = get_pdata_int(s_iOwner, m_iLastZoom, 5);
- set_pdata_int(s_iOwner, m_bResumeZoom, 0, 5);
- set_pdata_int(s_iOwner, m_iFOV, s_iFov, 5);
- set_pev(s_iOwner, pev_fov, float(s_iFov));
- }
- else
- {
- static Float:s_fSpeed;
- ExecuteHamB(Ham_CS_Item_GetMaxSpeed, iEnt, s_fSpeed);
- engfunc(EngFunc_SetClientMaxspeed, s_iOwner, s_fSpeed);
- set_pev(s_iOwner, pev_maxspeed, s_fSpeed);
- if( s_iZoomReset&1 )
- {
- //set_pdata_int(s_iOwner, m_iLastZoom, 90, 5);
- set_pdata_int(s_iOwner, m_bResumeZoom, 0, 5);
- set_pev(s_iOwner, pev_fov, 90.0);
- }
- }
- }
- g_fLastAttack[s_iOwner] = (get_gametime()+0.5);
- }
- if( g_bFakedFov )
- {
- //set_pdata_int(s_iOwner, m_iLastZoom, 90, 5);
- set_pdata_int(s_iOwner, m_bResumeZoom, 0, 5);
- set_pev(s_iOwner, pev_fov, 90.0);
- g_bFakedFov = false;
- }
- if( g_bFakedSpeed )
- {
- set_pev(s_iOwner, pev_velocity, g_fBackupSpeed);
- g_bFakedSpeed = false;
- }
- }
- public Ham_Deploy_scout_Post(iEnt)
- {
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.75, 4);
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.75, 4);
- set_pdata_float(get_pdata_cbase(iEnt, m_pPlayer, 4), m_flNextAttack, 0.75, 5);
- }
- public Ham_Attack_awp_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- if( g_iOldClip<=0 && !get_pdata_int(iEnt, m_fInReload, 4) )
- {
- ExecuteHamB(Ham_Weapon_PlayEmptySound, iEnt);
- set_pdata_float(iEnt, m_flNextPrimaryAttack, 0.2, 4);
- return HAM_SUPERCEDE;
- }
- return HAM_IGNORED;
- }
- public Ham_Attack_awp_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- {
- static s_iOwner;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- if( get_pdata_int(s_iOwner, m_bResumeZoom, 5) )
- {
- static s_iFov, Float:s_fSpeed;
- s_iFov = get_pdata_int(s_iOwner, m_iFOV, 5);
- set_pdata_int(s_iOwner, m_iFOV, 90, 5);
- ExecuteHamB(Ham_CS_Item_GetMaxSpeed, iEnt, s_fSpeed);
- engfunc(EngFunc_SetClientMaxspeed, s_iOwner, s_fSpeed);
- set_pev(s_iOwner, pev_maxspeed, s_fSpeed);
- if( get_pcvar_num(g_iCvarSniperReset)&1 )
- {
- //set_pdata_int(s_iOwner, m_iLastZoom, 90, 5);
- set_pdata_int(s_iOwner, m_bResumeZoom, 0, 5);
- set_pev(s_iOwner, pev_fov, 90.0);
- }
- else
- set_pdata_int(s_iOwner, m_iFOV, s_iFov, 5);
- }
- set_pdata_float(iEnt, m_flNextSecondaryAttack, 0.0, 4);
- set_pdata_float(s_iOwner, m_flNextAttack, 0.0, 5);
- g_fLastAttack[s_iOwner] = (get_gametime()+0.5);
- }
- }
- public Ham_SecAttack_sniper_Post(iEnt)
- {
- if( get_pdata_float(iEnt, m_flNextPrimaryAttack, 4)>0.0 )
- {
- new iOwner;
- iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- if( get_pdata_int(iOwner, m_bResumeZoom, 5) )
- {
- set_pdata_int(iOwner, m_bResumeZoom, 0, 5);
- /*switch( get_pdata_int(iOwner, m_iLastZoom, 5) ) // this commented part makes zooming
- { // during reload more complicated
- case 90:
- {
- set_pdata_int(iOwner, m_iFOV, 40, 5);
- set_pev(iOwner, pev_fov, 40.0);
- }
- case 40:
- {
- if( get_pdata_int(iEnt, m_iId, 4)==CSW_AWP )
- {
- set_pdata_int(iOwner, m_iLastZoom, 10, 5);
- set_pdata_int(iOwner, m_iFOV, 10, 5);
- set_pev(iOwner, pev_fov, 10.0);
- }
- else
- {
- set_pdata_int(iOwner, m_iLastZoom, 15, 5);
- set_pdata_int(iOwner, m_iFOV, 15, 5);
- set_pev(iOwner, pev_fov, 15.0);
- }
- }
- default:
- {
- set_pdata_int(iOwner, m_iLastZoom, 90, 5);
- set_pdata_int(iOwner, m_iFOV, 90, 5);
- set_pev(iOwner, pev_fov, 90.0);
- }
- }
- new Float:fSpeed;
- ExecuteHamB(Ham_CS_Item_GetMaxSpeed, iEnt, fSpeed);
- engfunc(EngFunc_SetClientMaxspeed, iOwner, fSpeed);
- set_pev(iOwner, pev_maxspeed, fSpeed);*/
- }
- }
- }
- public Ham_Attack_sniper_Pre(iEnt)
- {
- g_iOldClip = get_pdata_int(iEnt, m_iClip, 4);
- if( g_iOldClip>0 )
- {
- static s_iOwner, Float:s_fFov;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- pev(s_iOwner, pev_fov, s_fFov);
- if( s_fFov==90.0 )
- {
- pev(s_iOwner, pev_velocity, g_fBackupSpeed);
- if( ((g_fBackupSpeed[0]*g_fBackupSpeed[0])+(g_fBackupSpeed[1]*g_fBackupSpeed[1]))<=19600.0 ) // 140*140
- {
- set_pev(s_iOwner, pev_velocity, Float:{0.0, 0.0, 0.0});
- set_pev(s_iOwner, pev_fov, 40.0);
- g_bFakedFov = true;
- g_bFakedSpeed = false;
- }
- else
- {
- set_pev(s_iOwner, pev_velocity, Float:{0.0, 0.0, 0.0});
- g_bFakedFov = false;
- g_bFakedSpeed = true;
- }
- }
- else
- {
- g_bFakedFov = false;
- g_bFakedSpeed = false;
- }
- }
- else
- {
- g_bFakedFov = false;
- g_bFakedSpeed = false;
- }
- }
- public Ham_Attack_sniper_Post(iEnt)
- {
- static s_iOwner;
- s_iOwner = get_pdata_cbase(iEnt, m_pPlayer, 4);
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- g_fLastAttack[s_iOwner] = (get_gametime()+0.5);
- if( g_bFakedFov )
- {
- static Float:s_fVelocity[3];
- pev(s_iOwner, pev_velocity, s_fVelocity);
- g_fBackupSpeed[0] += s_fVelocity[0];
- g_fBackupSpeed[1] += s_fVelocity[1];
- g_fBackupSpeed[2] += s_fVelocity[2];
- set_pev(s_iOwner, pev_velocity, g_fBackupSpeed);
- set_pev(s_iOwner, pev_fov, 90.0);
- g_bFakedFov = false;
- }
- else if( g_bFakedSpeed )
- {
- static Float:s_fVelocity[3];
- pev(s_iOwner, pev_velocity, s_fVelocity);
- g_fBackupSpeed[0] += s_fVelocity[0];
- g_fBackupSpeed[1] += s_fVelocity[1];
- g_fBackupSpeed[2] += s_fVelocity[2];
- set_pev(s_iOwner, pev_velocity, g_fBackupSpeed);
- g_bFakedSpeed = false;
- }
- }
- public Ham_Attack_m249_Post(iEnt)
- {
- if( g_iOldClip>get_pdata_int(iEnt, m_iClip, 4) )
- fix_punchangle_2d(get_pdata_cbase(iEnt, m_pPlayer, 4), 0.6, 0.25, 0.1, 0.3);
- }
- public Ham_Player_PostThink_Pre(iPlrId)
- {
- g_iOldClip = 0;
- if( g_bPickedUpWeapon )
- {
- if( g_iDefaultAutoSwitch>0 )
- set_pdata_int(iPlrId, m_iClAutoWepSwitch, g_iDefaultAutoSwitch, 5);
- g_bPickedUpWeapon = false;
- }
- g_iDefaultAutoSwitch = -1;
- g_iOldWpn = 0;
- }
- public Ham_AddPlayerItem_Pre(iPlrId, iEnt)
- {
- if( g_iDefaultAutoSwitch!=-1 )
- {
- if( g_bPickedUpWeapon )
- return HAM_IGNORED;
- if( g_iDefaultAutoSwitch && should_block_autoswitch(iPlrId, get_pdata_cbase(iPlrId, m_pActiveItem, 5)) )
- {
- set_pdata_int(iPlrId, m_iClAutoWepSwitch, 0, 5);
- //client_print(iPlrId, print_center, "We've detected that you may not want%cauto-weapon-switch this time", 13);
- }
- g_iOldWpn = get_pdata_cbase(iPlrId, m_pActiveItem, 5);
- g_bPickedUpWeapon = true;
- }
- return HAM_IGNORED;
- }
- public Ham_Deploy_glock_Post(iEnt)
- {
- if( get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_GLOCK18_BURST_MODE )
- {
- message_begin(MSG_ONE, g_iMsgId_TextMsg, _, get_pdata_cbase(iEnt, m_pPlayer, 4));
- write_byte(print_center);
- write_string("#Switch_To_BurstFire");
- message_end();
- }
- }
- public Ham_Deploy_famas_Post(iEnt)
- {
- if( get_pdata_int(iEnt, m_fWeaponState, 4)&WEAPONSTATE_FAMAS_BURST_MODE )
- {
- message_begin(MSG_ONE, g_iMsgId_TextMsg, _, get_pdata_cbase(iEnt, m_pPlayer, 4));
- write_byte(print_center);
- write_string("#Switch_To_BurstFire");
- message_end();
- }
- }
- public Ham_Deploy_shotgun_Post(iEnt)
- {
- if( get_pcvar_num(g_iCvarShotGunDoubleShot)>0 )
- client_print(get_pdata_cbase(iEnt, m_pPlayer, 4), print_center, "Hold down secondary attack%cto use double shot", 13);
- }
- public Ham_Killed_player_Post(iPlrId, iAttackerId, iShouldGib)
- {
- ClearPlayerBit(g_iUserInWalk, iPlrId);
- g_fLastAttack[iPlrId] = 0.0;
- if( is_user_alive(iPlrId) )
- SetPlayerBit(g_iAlive, iPlrId);
- else
- ClearPlayerBit(g_iAlive, iPlrId);
- }
- public Ham_TakeDamage_Pre(iPlrId, iInfectorId, iAttackerId, Float:fDamage, iDamageBits)
- {
- if( 0<iAttackerId<=g_iMaxPlayers )
- {
- if( iInfectorId!=iAttackerId )
- return HAM_IGNORED;
- static s_iWpnEnt;
- if( (s_iWpnEnt=get_pdata_cbase(iAttackerId, m_pActiveItem, 5))<=0 )
- return HAM_IGNORED;
- switch( get_pdata_int(s_iWpnEnt, m_iId, 4) )
- {
- case CSW_GLOCK18: SetHamParamFloat(4, (fDamage*1.525));
- case CSW_USP: SetHamParamFloat(4, (fDamage*1.025));
- case CSW_P228: SetHamParamFloat(4, (fDamage*1.225));
- case CSW_DEAGLE: SetHamParamFloat(4, (fDamage*0.95));
- case CSW_FIVESEVEN: SetHamParamFloat(4, (fDamage*1.175));
- case CSW_ELITE: SetHamParamFloat(4, (fDamage*1.325));
- case CSW_M3:
- {
- if( g_bDoubleShot )
- SetHamParamFloat(4, (fDamage*0.625));
- else
- SetHamParamFloat(4, (fDamage*0.85));
- }
- case CSW_XM1014:
- {
- if( g_bDoubleShot )
- SetHamParamFloat(4, (fDamage*0.65));
- else
- SetHamParamFloat(4, (fDamage*0.825));
- }
- case CSW_TMP: SetHamParamFloat(4, (fDamage*1.45));
- case CSW_MAC10: SetHamParamFloat(4, (g_bRateOfFireFix?(fDamage*1.175):(fDamage*1.475)));
- case CSW_MP5NAVY: SetHamParamFloat(4, (fDamage*1.425));
- case CSW_UMP45: SetHamParamFloat(4, (fDamage*1.4));
- case CSW_P90: SetHamParamFloat(4, (fDamage*1.375));
- case CSW_GALIL: SetHamParamFloat(4, (fDamage*1.125));
- case CSW_FAMAS:
- {
- if( !g_bRateOfFireFix || get_pdata_int(s_iWpnEnt, m_fWeaponState, 4)&WEAPONSTATE_GLOCK18_BURST_MODE )
- SetHamParamFloat(4, (fDamage*1.05));
- else
- SetHamParamFloat(4, (fDamage*0.85));
- }
- case CSW_AK47: SetHamParamFloat(4, (fDamage*0.975));
- case CSW_M4A1: SetHamParamFloat(4, (fDamage*1.025));
- case CSW_SG552: SetHamParamFloat(4, (fDamage*1.075));
- case CSW_AUG: SetHamParamFloat(4, (fDamage*1.125));
- case CSW_SCOUT: SetHamParamFloat(4, (fDamage*0.875));
- case CSW_AWP: SetHamParamFloat(4, (fDamage*1.000));
- case CSW_SG550: SetHamParamFloat(4, (fDamage*1.125));
- case CSW_G3SG1: SetHamParamFloat(4, (fDamage*1.075));
- case CSW_M249: SetHamParamFloat(4, (g_bRateOfFireFix?(fDamage*0.9):(fDamage*1.3)));
- default: return HAM_IGNORED;
- }
- return HAM_HANDLED;
- }
- return HAM_IGNORED;
- }
- Float:get_recoil_fraction(iPlrId, Float:fSpeedFraction, Float:fDuckFraction, Float:fAirFraction)
- {
- static iFlags;
- if( (iFlags=pev(iPlrId, pev_flags))&FL_ONGROUND )
- {
- static Float:s_fVelocity[3], Float:s_fMaxSpeed;
- pev(iPlrId, pev_velocity, s_fVelocity);
- pev(iPlrId, pev_maxspeed, s_fMaxSpeed);
- if( iFlags&FL_DUCKING )
- return ((floatclamp(floatsqroot(((s_fVelocity[0]*s_fVelocity[0])+(s_fVelocity[1]*s_fVelocity[1])/(s_fMaxSpeed*s_fMaxSpeed))), 0.0, 1.0)*fSpeedFraction)-fDuckFraction);
- return (floatclamp(floatsqroot(((s_fVelocity[0]*s_fVelocity[0])+(s_fVelocity[1]*s_fVelocity[1])/(s_fMaxSpeed*s_fMaxSpeed))), 0.0, 1.0)*fSpeedFraction);
- }
- return fAirFraction;
- }
- fix_vertical_recoil(iPlrId, Float:fFraction, Float:s_fSpeedFraction, Float:s_fDuckFraction, Float:s_fAirFraction)
- {
- static Float:s_fPunchAngle[3], Float:s_fPunchDifference;
- pev(iPlrId, pev_punchangle, s_fPunchAngle);
- s_fPunchDifference = (s_fPunchAngle[0]-g_fBackupAngle[0]);
- if( s_fPunchDifference )
- {
- static Float:s_fRate;
- s_fRate = (fFraction+get_recoil_fraction(iPlrId, s_fSpeedFraction, s_fDuckFraction, s_fAirFraction));
- if( s_fRate<1.0 )
- {
- s_fPunchAngle[0] = (s_fPunchDifference*s_fRate);
- set_pev(iPlrId, pev_punchangle, s_fPunchAngle);
- }
- else if( s_fRate>1.0 )
- {
- if( s_fPunchAngle[0]>-25.0 )
- {
- s_fPunchAngle[0] = (s_fPunchDifference*s_fRate);
- if( s_fPunchAngle[0]<-25.0 )
- s_fPunchAngle[0] = -25.0;
- set_pev(iPlrId, pev_punchangle, s_fPunchAngle);
- }
- }
- }
- g_fLastAttack[iPlrId] = (get_gametime()+0.5);
- }
- fix_punchangle_2d(iPlrId, Float:fFraction, Float:fSpeedFraction, Float:fDuckFraction, Float:fAirFraction)
- {
- static Float:s_fPunchAngle[3], Float:s_fPunchDifference[2], Float:s_fFraction;
- pev(iPlrId, pev_punchangle, s_fPunchAngle);
- s_fFraction = (fFraction+get_recoil_fraction(iPlrId, fSpeedFraction, fDuckFraction, fAirFraction));
- s_fPunchDifference[0] = ((s_fPunchAngle[0]-g_fBackupAngle[0])*s_fFraction);
- s_fPunchDifference[1] = ((s_fPunchAngle[1]-g_fBackupAngle[1])*s_fFraction);
- if( (s_fPunchAngle[0]>-25.0 || 0.0<=fFraction<=1.0) && s_fPunchAngle[0]<0.0 )
- {
- s_fPunchAngle[0] = (g_fBackupAngle[0]+s_fPunchDifference[0]);
- if( s_fPunchAngle[0]<-25.0 && fFraction>1.0 )
- s_fPunchAngle[0] = -25.0;
- }
- if( -4.0<=s_fPunchAngle[1]<=4.0 || 0.0<=fFraction<=1.0 )
- {
- s_fPunchAngle[1] = (g_fBackupAngle[1]+s_fPunchDifference[1]);
- if( fFraction>1.0 )
- {
- if( s_fPunchAngle[1]>4.0 )
- s_fPunchAngle[1] = 4.0;
- else if( s_fPunchAngle[1]<-4.0 )
- s_fPunchAngle[1] = -4.0;
- }
- }
- set_pev(iPlrId, pev_punchangle, s_fPunchAngle);
- g_fLastAttack[iPlrId] = (get_gametime()+0.5);
- }
- // This function is useful cause when vertical angle isn't 0, horizontal angle isn't what we expect
- // it to be. Trust me - if we look up, than 45 degrees to the left isn't the edge of our screen,
- // but is directly up. Well, this one fixes it. Baiscally what it does is gives us a position what
- // we want to our cam-pos, cam-angle, and radius. Something like get_user_aiming(), but here we
- // can choose distance and angle and angle within an angle what we want.
- //
- // dest - return origin
- // origin - cam position
- // view - cam angle
- // anlge - angle to where "dest" should be (![z] is the distance/radius we want - not angle!)
- //
- // NOTES: ".ha" = horizontal (Y) or [1]; ".va" = vertical (X) or [0]; ".r" = (Z) or [2]
- // "angle.r" is angle[2] what actually is a radius or a distance we want from "origin" to "dest",
- // so don't get confused. WARNING: fView and fAngle variables do change within the function.
- bool:SphereToCartesian(Float:fDest[3], Float:fOrigin[3], Float:fView[3], Float:fAngle[3])
- {
- fView[1] *= (M_PI/180.0); // and now angle[0] and angle[1] has no effect?
- fView[0] *= (M_PI/180.0);
- fAngle[0] *= (M_PI/-180.0);
- fAngle[1] *= (M_PI/180.0);
- static Float:s_fSin0, Float:s_fCos0, Float:s_fSin1, Float:s_fCos1;
- s_fSin0 = floatsin((fAngle[0]+(M_PI*0.5)), radian);
- fDest[0] = fAngle[2]*s_fSin0*floatcos(fAngle[1], radian);
- fDest[1] = fAngle[2]*s_fSin0*floatsin(fAngle[1], radian);
- fDest[2] = fAngle[2]*floatcos((fAngle[0]+(M_PI*0.5)), radian);
- s_fSin0 = floatsin(fView[0], radian);
- s_fCos0 = floatcos(fView[0], radian);
- s_fSin1 = floatsin(fView[1], radian);
- s_fCos1 = floatcos(fView[1], radian);
- static Float:s_fTemp[3];
- s_fTemp[0] = (fDest[0]*s_fCos0*s_fCos1)-(fDest[1]*s_fSin1)+(fDest[2]*s_fSin0*s_fCos1);
- s_fTemp[1] = (fDest[0]*s_fCos0*s_fSin1)+(fDest[1]*s_fCos1)+(fDest[2]*s_fSin1*s_fSin0);
- s_fTemp[2] = (fDest[2]*s_fCos0)-(fDest[0]*s_fSin0);
- fDest[0] = (fOrigin[0]+s_fTemp[0]);
- fDest[1] = (fOrigin[1]+s_fTemp[1]);
- fDest[2] = (fOrigin[2]-s_fTemp[2]);
- return true;
- }
- bool:should_block_autoswitch(iPlrId, iActiveItem)
- {
- if( !CheckPlayerBit(g_iAlive, iPlrId) ) // respawn pickup
- return false;
- if( get_pcvar_num(g_iCvarAutoSwitchFix)<=0 )
- return false;
- if( CheckPlayerBit(g_iUserInWalk, iPlrId) || pev(iPlrId, pev_flags)&FL_DUCKING || g_fLastAttack[iPlrId]>get_gametime() || pev(iPlrId, pev_fov)!=90 )
- return true;
- static s_iButtons;
- s_iButtons = pev(iPlrId, pev_button);
- if( s_iButtons&IN_ATTACK || s_iButtons&IN_ATTACK2 || s_iButtons&IN_USE )
- return true;
- if( iActiveItem>0 )
- {
- if( get_pdata_int(iActiveItem, m_fInReload, 4) || get_pdata_int(iActiveItem, m_fInSpecialReload, 4) )
- return true;
- else
- {
- switch( get_pdata_int(iActiveItem, m_iId, 4) )
- {
- case CSW_KNIFE: return true;
- case CSW_FLASHBANG, CSW_HEGRENADE, CSW_SMOKEGRENADE:
- {
- if( get_pdata_float(iActiveItem, m_flStartThrow, 3) && get_pdata_float(iActiveItem, m_flTimeWeaponIdle, 4)<=0.0 )
- return true;
- }
- }
- }
- }
- static Float:s_fVelocity[3];
- pev(iPlrId, pev_velocity, s_fVelocity);
- if( !s_fVelocity[0] && !s_fVelocity[1] && !s_fVelocity[2] )
- {
- pev(iPlrId, pev_basevelocity, s_fVelocity)
- if( !s_fVelocity[0] && !s_fVelocity[1] && !s_fVelocity[2] )
- return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement