XaeroX писал: Ну зачем ты вопросы такие задаёшь? Не думаю, что кто-то до сих пор спирит использует. Исходники его открыты - изучай.
Есть же ещё такая вещь, как память.
Открываешь исходники, а там:
code:/*float tempswap;
// MJB I've tried adding this code so I can swap the vector components,
// but for some reason it just isn't working. I have no idea why.
// Perhaps YOU know why and could fix it?
Ох лол. То есть фича у нас не работает, но в фгд мы её добавим.
Пытаюсь сделать для yaw игрока такое же ограничение углов -89...89, как это сделано для питча. Пробовал в функциях AdjustAngles и MouseMove, по аналогии с питчем писал
и т.д.
результат один: внезапно халфа невзлюбила отрицательный yaw, и при виде его сразу выставляет максимально возможный положительный, который ты вписал.
Что делает функция anglemod? Я раньше думал, что она для плавного поворота между двумя значениями. Тут нашёл такое объяснение:
code:
/**
* This function adds or substracts 360 enough times needed to the given angle in
* order to set it into the range [0, 360) and returns the resulting angle. Letting
* the engine have a hand on angles that are outside these bounds may cause the
* game to freeze by screwing up the engine math code.
*/
inline float AngleMod(float a)
{
return (360.0 / 65536) * ((int)(a * (65536.0 / 360.0)) & 65535);
}
Судя по объяснению, это избавление от отрицательных значений угла. Но тогда почему запись такой пипец? По идее достаточно же if (yaw<0) yaw=yaw+360.
(int) этот со скобочками не гуглится. Битовый AND тоже непонятно зачем нужен, если 65535 битовое это одни единички, и в сочетании с & он просто передаёт значение дальше.
Делал гигантизм в Хаммере, получается карту с visibility matrix больше примерно 200мб в принципе нельзя осветить на 32-х битной версии из-за нехватки оперативки?
Спасибо. Погуглю конечно про обёртку, но особо не надеюсь... А можно напрямую заюзать gEngFuncs.ConPrintf? Или она принимает не нормальные типы данных, а эти ваши эдикты?
Crystallize не совсем понял, при чём тут эдикты. Серверный ALERT имеет два аргумента: тип алерта и собственно текст. Тип не особо важен, если ты просто хочешь слать в консоль диагностические сообщения. НО если хочешь прям как на сервере, придётся писать мудрёную функцию. Чтобы учитывать каждый тип алерта:
at_notice - просто уведомление в левом верхнем углу экрана
at_console - уведомление с записью в консоль
at_aiconsole - то же, что и at_console, но только при кваре developer 2
at_warning - не помню точно, чем отличается от предыдущих. По-моему, добавляет перед текстом "WARNING: "
at_error - вроде бы добавляет перед текстом "ERROR: "
at_logged - сообщение в серверную консоль, так же пишется в лог сервера
Ku2zoff писал: не совсем понял, при чём тут эдикты.
Просто читал какое-то обсуждение на хлру, типа почему лучше использовать функции движка в обёрнутом, а не в сыром виде. Типа потому что в сыром виде они работают не с привычными данными, а только с эдиктами.
Вопрос в общем пока отпадает, оказалось я проглядел что в спирите на клиенте уже реализована gEngfuncs.Con_DPrintf и gEngfuncs.Con_Printf. Понять бы ещё разницу между ними...
Crystallize писал: оказалось я проглядел что в спирите на клиенте уже реализована gEngfuncs.Con_DPrintf и gEngfuncs.Con_Printf. Понять бы ещё разницу между ними...
Элементарно, Ватсон!
gEngfuncs.Con_Printf - выводит сообщение всегда.
gEngfuncs.Con_D(ebug)Printf - только когда игра запущена в дебаге, либо с кваром developer
Помогите, пожалуйста, с Iron Sight. Сделал, я, значит, эту штуку на Мосинке, теперь она практически работает: анимация, разброс, легкий зум. Осталось сделать замедление скорости передвижения игрока. Как это можно сделать? А то скачет с зумом, как угорелый.
Плюс вопрос: как убрать диагональное ускорение игрока? А то вперед и вбок нормально ходит, а диагонально скорость увеличивается чуть ли не в два раза.
И еще: как сделать двойное условие? Если зум включен и если патронов больше 1, то... Если зум включен и если патрон единственный, то...
Работаю в XashXT.