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

Тема в разделе "Программирование / Скриптинг", создана пользователем iamdss, 14 сен 2015.

  1. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Подскажите, пожалуйста, какие есть способы узнать высоту поверхности (пола) карты в определённой точке? Если возможно, конечно, и как.
     
  2. Reiko1231

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Навскидку: пол\потолок TraceRay вверх\вниз, если ничего не нашло, то WorldMax[2] - WorldMin[2] - текущая Z координата для потолка карты, и для пола другие знаки.
     
  3. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Спасибо, вариант с TraceRay сейчас попробую. А можно подробнее про

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

    Reiko1231 AlexTheRegent

    Сообщения:
    237
    Симпатии:
    569
    Та же, что и начала TraceRay (позиция игрока, прицела, смотря от чего нужно).
     
  5. iamdss

    iamdss

    Сообщения:
    117
    Симпатии:
    0
    Тогда второй способ не подходит. Пробую первый:

    Код:
    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);
        }
    }
    Показывает пол/потолок корректно. Поправьте, если есть ошибки или есть что улучшить.