Показать сообщение отдельно
  (#67) Старый
VSDK2013 VSDK2013 вне форума
Администратор
 
Сообщений: 84
Регистрация: 04.08.2016
Родина:
SID: STEAM_0:0:48289754
По умолчанию 04.08.2016, 15:45

Цитата:
необходимо уменьшить урон при падении до 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
Ответить с цитированием