Цитата:
необходимо уменьшить урон при падении до 10хп. делается это командой mp_falldamage 0.
|
Не совсем так. Это распространённое заблуждение. mp_falldamage лишь переключатель масштабирования урона при падении от текущей скорости падения. При 0 устанавливает фиксированный урон 10 единиц:
Код:
float CMultiplayRules::FlPlayerFallDamage( CBasePlayer *pPlayer )
{
int iFallDamage = (int)falldamage.GetFloat();
switch ( iFallDamage )
{
case 1://progressive
pPlayer->m_Local.m_flFallVelocity -= PLAYER_MAX_SAFE_FALL_SPEED;
return pPlayer->m_Local.m_flFallVelocity * DAMAGE_FOR_FALL_SPEED;
break;
default:
case 0:// fixed
return 10;
break;
}
}
https://github.com/ValveSoftware/sou...rules.cpp#L618
Варианты исправления:
1. SM плагин - хук OnTakeDamage с проверкой флага урона (DMG_FALL), либо взять какой-либо готовый плагин (возможно, необходимо будет его перебрать)
2. FlPlayerFallDamage объявлена виртуальной, поэтому возможен вариант SM плагина с хуком этой функции через DHooks, но преимущества перед №1 нет.
3. (По традиции) Сборка сервера из sdk, быстрее и стабильнее.
Вариант кода плагина по №1:
Код:
#pragma semicolon 1
#include <sdktools>
#include <sdkhooks>
#define DMG_FALL (1 << 5)
public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}
public Action:OnTakeDamage(client, &attacker, &inflictor, &Float:damage, &damagetype)
{
if (damagetype & DMG_FALL)
{
return Plugin_Handled;
}
return Plugin_Continue;
}
http://dropmefiles.com/k9CMC