![]() |
Страницы (2): [1] 2 » Показать все 21 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Клавиша управления (https://hlfx.ru/forum/showthread.php?threadid=2045)
Клавиша управления
Добрый день.
Вопрос такой: как создать новую клавишу управления и назначить на её выполнение функцию в классе CBasePlayer соответствующего игрока?
Пробовал регистрировать новые клавиши там же, где и IN_RELOAD, IN_ATTACK и т.д. На клиенте регистрируются правильно - размер переменной (типа int) равен 32 битам, место есть. Однако переменная, передающая эти клавиши на клиент - short или unsigned short, если мне не изменяет память, то есть 16 бит, и все заняты. Изменение размера приводит к ошибке сегментации памяти (segmentation fault), что вполне естественно.
Пока вопрос решился перестановкой ненужных серверу клавиш вроде IN_SCORE за границу шестнадцатого бита - 1 << 16, 1 << 17 и т. д., а на их место установкой бита нужной клавиши. Но, скорее всего, есть более лёгкий способ, например, путём обработки консольной команды вроде connect [ip]. Как это сделать? Заранее благодарю.
Добавлено 04-01-2010 в 15:29:
Забыл сказать: игра - hl1.
0xf35
Насколько я помню, изначально в хл меньше 16 клавиш, и мне вполне удавалось добавить несколько своих. А ты пробовал изменить размер buttons в usercmd для передачи всех 32 битов?
В delta.lst она обозначена как
DEFINE_DELTA( buttons, DT_SHORT, 16, 1.0 )
__________________
Пробовал, приводило к ошибке сегментации. Но не знал про delta.lst. Спасибо, попробую.
code:
// Experimental player impact stuff. int impact_index; vec3_t impact_position;
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Изменил в usercmd.h
unsigned short buttons; на
int buttons;
Файл delta.lst скопировал в папку модификации. Вместо
DEFINE_DELTA( buttons, DT_SHORT, 16, 1.0 )
пробовал:
DEFINE_DELTA( buttons, DT_INTEGER, 32, 1.0 )
DEFINE_DELTA( buttons, DT_INTEGER, 16, 1.0 )
DEFINE_DELTA( buttons, DT_SHORT, 32, 1.0 )
Опять ошибка сегментации. Где я ошибся?
Дядя Миша, можно, хорошая мысль. Но это хирургическое вмешательство топором будет. Должен быть другой способ.
ну если в usercmd.h она прописана как 16-битная, то шансов нет. Только полный перекомпил движка (сорцов которого нет).
Так что остается хирургическое вмешательство топором, имхо.
__________________
Понятно, с битами клавиш только так, хотя тоже неплохо. Битов - хоть завались. А существует способ запускать определённую функцию из класса игрока при вводе определённой консольной команды?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Base Defense on Steam, ModDB
PLut я так понял, ему нужна клавиша, чтобы в игре определять, нажата она или нет. А такие только через pev->buttons передаются с клиента.
Хотя можно с алиасами похимичить
__________________
Дык такие клавиши вроде как в самом движке, это вот, которые IN_ALT?
__________________
Base Defense on Steam, ModDB
PLut движок их просто передает по сети.
Сам не подглядывает.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Временная зона GMT. Текущее время 14:10. | Страницы (2): [1] 2 » Показать все 21 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024