Silent írta: Nemtom nevét...rendelj szerót hfgtôl és ott van ilýen plugin...xd jó ötlet ... de nem... van rá egy ötletem meik lehet az
Kód: #include <amxmodx> #include <cstrike> #include <fakemeta> #include <hamsandwich>
#define PLUGIN_NAME "Real Weapon Speed" #define PLUGIN_VERSION "1.0" #define PLUGIN_AUTHOR "Numb"
//#define DEBUG
#define PDWeaponType 43 #define PDNextSecAttack 47 #define PDActiveItem 373
#define WEIGHT_GLOCK18 0.900 #define WEIGHT_USP 1.000 #define WEIGHT_DEAGLE 1.800 #define WEIGHT_P228 1.030 #define WEIGHT_ELITE 1.150 #define WEIGHT_FIVESEVEN 0.618 #define WEIGHT_M3 3.500 #define WEIGHT_XM1014 4.000 #define WEIGHT_MP5NAVY 3.420 #define WEIGHT_MAC10 3.820 #define WEIGHT_TMP 1.300 #define WEIGHT_P90 3.000 #define WEIGHT_UMP45 2.270 #define WEIGHT_GALIL 4.350 #define WEIGHT_FAMAS 3.400 #define WEIGHT_AK47 4.790 #define WEIGHT_M4A1 3.220 #define WEIGHT_SG552 3.100 #define WEIGHT_AUG 4.090 #define WEIGHT_G3SG1 4.410 #define WEIGHT_SG550 7.020 #define WEIGHT_SCOUT 3.300 #define WEIGHT_AWP 6.000 #define WEIGHT_M249 6.000 #define WEIGHT_FLASHBANG 0.350 #define WEIGHT_HEGRENADE 0.350 #define WEIGHT_SMOKEGRENADE 0.350 #define WEIGHT_C4 2.000 #define WEIGHT_KNIFE 0.200 #define WEIGHT_SHIELD 5.000 #define WEIGHT_USP_S 0.200 #define WEIGHT_M4A1_S 0.200
#define SPEED_BONUCE_SHIELD 50 #define SPEED_BONUCE_ZOOM1 20 #define SPEED_BONUCE_ZOOM2 40 #define SPEED_BONUCE_ZOOM3 80
new const Float:fWeaponWeights[] = { 0.0, WEIGHT_P228, 0.0, WEIGHT_SCOUT, WEIGHT_HEGRENADE, WEIGHT_XM1014, WEIGHT_C4, WEIGHT_MAC10, WEIGHT_AUG, WEIGHT_SMOKEGRENADE, WEIGHT_ELITE, WEIGHT_FIVESEVEN, WEIGHT_UMP45, WEIGHT_SG550, WEIGHT_GALIL, WEIGHT_FAMAS, WEIGHT_USP, WEIGHT_GLOCK18, WEIGHT_AWP, WEIGHT_MP5NAVY, WEIGHT_M249, WEIGHT_M3, WEIGHT_M4A1, WEIGHT_TMP, WEIGHT_G3SG1, WEIGHT_FLASHBANG, WEIGHT_DEAGLE, WEIGHT_SG552, WEIGHT_AK47, WEIGHT_KNIFE, WEIGHT_P90, };
new Float:g_fOldNextSecAttack;
new g_iCvarP_MinSpeed; new g_iCvarP_MaxSpeed; new g_iCvarP_MinGrav; new g_iCvarP_MaxGrav;
public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR); g_iCvarP_MinSpeed = register_cvar("rw_min_speed", "210.0"); g_iCvarP_MaxSpeed = register_cvar("rw_max_speed", "260.0"); g_iCvarP_MinGrav = register_cvar("rw_highest_gravity_proc", "0.81"); g_iCvarP_MaxGrav = register_cvar("rw_lowest_gravity_proc", "1.01"); new const iWeaponList[29][] = { "weapon_glock18", "weapon_usp", "weapon_deagle", "weapon_p228", "weapon_elite", "weapon_fiveseven", "weapon_m3", "weapon_xm1014", "weapon_mp5navy", "weapon_mac10", "weapon_tmp", "weapon_p90", "weapon_ump45", "weapon_galil", "weapon_famas", "weapon_ak47", "weapon_m4a1", "weapon_sg552", "weapon_aug", "weapon_g3sg1", "weapon_sg550", "weapon_scout", "weapon_awp", "weapon_m249", "weapon_flashbang", "weapon_hegrenade", "weapon_smokegrenade", "weapon_knife", "weapon_c4" }; for( new iTemp; iTemp<29; iTemp++ ) { RegisterHam(Ham_Item_Deploy, iWeaponList[iTemp], "Ham_Item_Deploy_Post", 1); RegisterHam(Ham_CS_Item_GetMaxSpeed, iWeaponList[iTemp], "Ham_GetItemMaxSpeed_Pre", 0); } RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_usp", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_m4a1", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_aug", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_g3sg1", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg550", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp", "Ham_SecondaryAttack_Pre", 0); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_usp", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_m4a1", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg552", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_aug", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_g3sg1", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_sg550", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_awp", "Ham_SecondaryAttack_Post", 1); RegisterHam(Ham_AddPlayerItem, "player", "Ham_AddPlayerItem_Post", 1); RegisterHam(Ham_Spawn, "player", "Ham_Spawn_player_Post", 1); #if defined DEBUG register_forward(FM_PlayerPreThink, "FM_PlayerPreThink_Post", 1); #endif }
#if defined DEBUG public FM_PlayerPreThink_Post(iPlrId) { if( is_user_alive(iPlrId) ) { static Float:s_fVelocity[3]; pev(iPlrId, pev_velocity, s_fVelocity); client_print(iPlrId, print_center, "Speed: %f", vector_length(s_fVelocity)); } } #endif
public Ham_Item_Deploy_Post(iEnt) { if( !pev_valid(iEnt) ) return HAM_IGNORED; new iPlrId = pev(iEnt, pev_owner); if( !is_user_alive(iPlrId) ) return HAM_IGNORED; new iCsWeaponType = get_pdata_int(iEnt, PDWeaponType, 4); if( iCsWeaponType<1 || iCsWeaponType==2 || iCsWeaponType>30 ) return HAM_IGNORED; new Float:fWeight = fWeaponWeights[iCsWeaponType]; if( cs_get_user_shield(iPlrId) && (iCsWeaponType==CSW_KNIFE || iCsWeaponType==CSW_GLOCK18 || iCsWeaponType==CSW_USP || iCsWeaponType==CSW_DEAGLE || iCsWeaponType==CSW_P228 || iCsWeaponType==CSW_FIVESEVEN || iCsWeaponType==CSW_FLASHBANG || iCsWeaponType==CSW_HEGRENADE || iCsWeaponType==CSW_SMOKEGRENADE) ) fWeight += WEIGHT_SHIELD; else if( cs_get_weapon_silen(iEnt) ) fWeight += ((iCsWeaponType==CSW_USP)?WEIGHT_USP_S:WEIGHT_M4A1_S); new Float:fSpeed; pev(iPlrId, pev_maxspeed, fSpeed); if( fSpeed!=1.0 ) { fSpeed = float(floatround(get_speed_by_weight(fWeight))); engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed); set_pev(iPlrId, pev_maxspeed, fSpeed); } set_gravity_by_weight(iPlrId, fWeight); return HAM_IGNORED; }
public Ham_GetItemMaxSpeed_Pre(iEnt, Float:fSpeed) { new iPlrId = pev(iEnt, pev_owner); if( !is_user_alive(iPlrId) ) return HAM_IGNORED; new iCsWeaponType = get_pdata_int(iEnt, PDWeaponType, 4); if( iCsWeaponType<1 || iCsWeaponType==2 || iCsWeaponType>30 ) return HAM_IGNORED; if( cs_get_user_shield(iPlrId) && (iCsWeaponType==CSW_KNIFE || iCsWeaponType==CSW_GLOCK18 || iCsWeaponType==CSW_USP || iCsWeaponType==CSW_DEAGLE || iCsWeaponType==CSW_P228 || iCsWeaponType==CSW_FIVESEVEN || iCsWeaponType==CSW_FLASHBANG || iCsWeaponType==CSW_HEGRENADE || iCsWeaponType==CSW_SMOKEGRENADE) ) { new Float:fSpeed; ExecuteHam(Ham_CS_Item_GetMaxSpeed, iEnt, fSpeed); if( fSpeed==180.0 ) SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType]+WEIGHT_SHIELD)-SPEED_BONUCE_SHIELD))); else SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType]+WEIGHT_SHIELD)))); return HAM_SUPERCEDE; } else { if( cs_get_weapon_silen(iEnt) ) { SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType]+((iCsWeaponType==CSW_USP)?WEIGHT_USP_S:WEIGHT_M4A1_S))))); return HAM_SUPERCEDE; } else { switch( cs_get_user_zoom(iPlrId) ) { case CS_SET_AUGSG552_ZOOM: SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM1))); case CS_SET_FIRST_ZOOM: SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM2))); case CS_SET_SECOND_ZOOM: SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM3))); default: SetHamReturnFloat(float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])))); } return HAM_SUPERCEDE; } } return HAM_IGNORED; }
public Ham_SecondaryAttack_Pre(iEnt) g_fOldNextSecAttack = get_pdata_float(iEnt, PDNextSecAttack, 4);
public Ham_SecondaryAttack_Post(iEnt) { if( !pev_valid(iEnt) ) return HAM_IGNORED; if( g_fOldNextSecAttack==get_pdata_float(iEnt, PDNextSecAttack, 4) ) return HAM_IGNORED; new iPlrId = pev(iEnt, pev_owner); if( !is_user_alive(iPlrId) ) return HAM_IGNORED; new iCsWeaponType = get_pdata_int(iEnt, PDWeaponType, 4); if( iCsWeaponType<1 || iCsWeaponType==2 || iCsWeaponType>30 ) return HAM_IGNORED; if( cs_get_user_shield(iPlrId) && iCsWeaponType==CSW_USP ) return HAM_IGNORED; new Float:fSpeed, Float:fWeight = fWeaponWeights[iCsWeaponType]; pev(iPlrId, pev_maxspeed, fSpeed); if( iCsWeaponType==CSW_USP || iCsWeaponType==CSW_M4A1 ) { if( cs_get_weapon_silen(iEnt) ) fWeight += ((iCsWeaponType==CSW_USP)?WEIGHT_USP_S:WEIGHT_M4A1_S); if( fSpeed!=1.0 ) { fSpeed = float(floatround(get_speed_by_weight(fWeight))); engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed); set_pev(iPlrId, pev_maxspeed, fSpeed); } set_gravity_by_weight(iPlrId, fWeight); } else if( fSpeed!=1.0 ) { switch( cs_get_user_zoom(iPlrId) ) { case CS_SET_AUGSG552_ZOOM: fSpeed = float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM1)); case CS_SET_FIRST_ZOOM: fSpeed = float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM2)); case CS_SET_SECOND_ZOOM: fSpeed = float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType])-SPEED_BONUCE_ZOOM3)); default: fSpeed = float(floatround(get_speed_by_weight(fWeaponWeights[iCsWeaponType]))); } engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed); set_pev(iPlrId, pev_maxspeed, fSpeed); } return HAM_IGNORED; }
public Ham_AddPlayerItem_Post(iPlrId, iEnt) { if( !is_user_alive(iPlrId) ) return HAM_IGNORED; if( !pev_valid(iEnt) ) return HAM_IGNORED; if( iEnt!=get_pdata_cbase(iPlrId, PDActiveItem, 4) ) return HAM_IGNORED; new iCsWeaponType = get_pdata_int(iEnt, PDWeaponType, 4); if( iCsWeaponType<1 || iCsWeaponType==2 || iCsWeaponType>30 ) return HAM_IGNORED; new Float:fWeight = fWeaponWeights[iCsWeaponType]; if( cs_get_user_shield(iPlrId) && (iCsWeaponType==CSW_KNIFE || iCsWeaponType==CSW_GLOCK18 || iCsWeaponType==CSW_USP || iCsWeaponType==CSW_DEAGLE || iCsWeaponType==CSW_P228 || iCsWeaponType==CSW_FIVESEVEN || iCsWeaponType==CSW_FLASHBANG || iCsWeaponType==CSW_HEGRENADE || iCsWeaponType==CSW_SMOKEGRENADE) ) fWeight += WEIGHT_SHIELD; else if( cs_get_weapon_silen(iEnt) ) fWeight += ((iCsWeaponType==CSW_USP)?WEIGHT_USP_S:WEIGHT_M4A1_S); new Float:fSpeed; pev(iPlrId, pev_maxspeed, fSpeed); if( fSpeed!=1.0 ) { fSpeed = float(floatround(get_speed_by_weight(fWeight))); engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed); set_pev(iPlrId, pev_maxspeed, fSpeed); } set_gravity_by_weight(iPlrId, fWeight); return HAM_IGNORED; }
public Ham_Spawn_player_Post(iPlrId) { if( !is_user_alive(iPlrId) ) return HAM_IGNORED; new iEnt = get_pdata_cbase(iPlrId, PDActiveItem, 4); if( !pev_valid(iEnt) ) return HAM_IGNORED; new iCsWeaponType = get_pdata_int(iEnt, PDWeaponType, 4); if( iCsWeaponType<1 || iCsWeaponType==2 || iCsWeaponType>30 ) return HAM_IGNORED; new Float:fWeight = fWeaponWeights[iCsWeaponType]; if( cs_get_user_shield(iPlrId) && (iCsWeaponType==CSW_KNIFE || iCsWeaponType==CSW_GLOCK18 || iCsWeaponType==CSW_USP || iCsWeaponType==CSW_DEAGLE || iCsWeaponType==CSW_P228 || iCsWeaponType==CSW_FIVESEVEN || iCsWeaponType==CSW_FLASHBANG || iCsWeaponType==CSW_HEGRENADE || iCsWeaponType==CSW_SMOKEGRENADE) ) fWeight += WEIGHT_SHIELD; else if( cs_get_weapon_silen(iEnt) ) fWeight += ((iCsWeaponType==CSW_USP)?WEIGHT_USP_S:WEIGHT_M4A1_S); new Float:fSpeed; pev(iPlrId, pev_maxspeed, fSpeed); if( fSpeed!=1.0 ) { fSpeed = float(floatround(get_speed_by_weight(fWeight))); engfunc(EngFunc_SetClientMaxspeed, iPlrId, fSpeed); set_pev(iPlrId, pev_maxspeed, fSpeed); } set_gravity_by_weight(iPlrId, fWeight); return HAM_IGNORED; }
Float:clamp_f(Float:Value, Float:MinValue, Float:MaxValue) { if( Value<=MinValue ) { return MinValue; } if( Value>=MaxValue ) { return MaxValue; } return Value; }
Float:get_cvar_float_minspeed() return clamp_f(get_pcvar_float(g_iCvarP_MinSpeed), 2.0, 320.0);
Float:get_cvar_float_maxspeed() return clamp_f(get_pcvar_float(g_iCvarP_MaxSpeed), 2.0, 320.0);
Float:get_cvar_float_mingravp() return clamp_f(get_pcvar_float(g_iCvarP_MinGrav), 0.0, 150.0);
Float:get_cvar_float_maxgravp() return clamp_f(get_pcvar_float(g_iCvarP_MaxGrav), 0.0, 150.0);
bool:set_gravity_by_weight(iPlrId, Float:fWeight) { if( fWeight<=0.0 ) set_pev(iPlrId, pev_gravity, 1.0); else { new Float:fMinValue = get_cvar_float_mingravp(); new Float:fMaxValue = get_cvar_float_maxgravp(); if( !fMinValue ) fMinValue = 1.0; if( !fMaxValue ) fMaxValue = 1.0; if( fMinValue==fMaxValue ) { set_pev(iPlrId, pev_gravity, fMinValue); return true; } else if( fMinValue>fMaxValue ) { new Float:fTempValue = fMaxValue; fMaxValue = fMinValue; fMinValue = fTempValue; } #if defined DEBUG client_print(iPlrId, print_chat, "set grav: %f", (1.0+(1.0-(fMaxValue-((fMaxValue-fMinValue)*fWeight/7.02))))); #endif set_pev(iPlrId, pev_gravity, (1.0+(1.0-(fMaxValue-((fMaxValue-fMinValue)*fWeight/7.02))))); return true; } return false; }
Float:get_speed_by_weight(Float:fWeight) { if( fWeight<=0.0 ) return get_cvar_float_maxspeed(); new Float:fMinValue = get_cvar_float_minspeed(); new Float:fMaxValue = get_cvar_float_maxspeed(); if( fMinValue==fMaxValue ) return fMinValue; else if( fMinValue>fMaxValue ) { new Float:fTempValue = fMaxValue; fMaxValue = fMinValue; fMinValue = fTempValue; } return (fMaxValue-((fMaxValue-fMinValue)*fWeight/7.02)); }
/* 3.51*100%/7.02 = 50%
(260-210)*50%/100% = 25
260-25 = 235 */
|