Высота поверхности в точке карты

iamdss

Участник
Сообщения
126
Реакции
12
Подскажите, пожалуйста, какие есть способы узнать высоту поверхности (пола) карты в определённой точке? Если возможно, конечно, и как.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Навскидку: пол\потолок TraceRay вверх\вниз, если ничего не нашло, то WorldMax[2] - WorldMin[2] - текущая Z координата для потолка карты, и для пола другие знаки.
 

iamdss

Участник
Сообщения
126
Реакции
12
Спасибо, вариант с TraceRay сейчас попробую. А можно подробнее про

WorldMax[2] - WorldMin[2] - текущая Z координата для потолка карты

? Я не совсем понял, что есть текущая Z координата? У нас есть самая высокая и самая низкая точка, но где взять текущую Z для потолка?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Та же, что и начала TraceRay (позиция игрока, прицела, смотря от чего нужно).
 

iamdss

Участник
Сообщения
126
Реакции
12
Тогда второй способ не подходит. Пробую первый:

C-подобный:
public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:_angles[3], &weapon)
{
    if(IsPlayerAlive(client) && buttons & IN_USE)
    {
		decl Float:Origin[3];
		decl Float:Angles[3];
		new Float:Ceiling = 0.0;
		new Float:Floor = 0.0;

		GetClientEyePosition(client, Origin);
		Angles[0] = 89.0;
		TR_TraceRayFilter(Origin, Angles, MASK_PLAYERSOLID_BRUSHONLY, RayType_Infinite, Trace_FilterPlayers, client);
		if(TR_DidHit(INVALID_HANDLE))
		{
			TR_GetEndPosition(Origin, INVALID_HANDLE);
			Floor = Origin[2];
        }
		Angles[0] = -89.0;
		TR_TraceRayFilter(Origin, Angles, MASK_PLAYERSOLID_BRUSHONLY, RayType_Infinite, Trace_FilterPlayers, client);
		if(TR_DidHit(INVALID_HANDLE))
        {
			TR_GetEndPosition(Origin, INVALID_HANDLE);
			Ceiling = Origin[2];
        }
		PrintToConsole(client, "%f %f", Floor, Ceiling);
    }
}

Показывает пол/потолок корректно. Поправьте, если есть ошибки или есть что улучшить.
 
Сверху Снизу