HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Клавиша управления
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
0xf35
Новичок

Дата регистрации: Dec 2009
Проживает: /dev/earth0
Сообщений: 7

Рейтинг



Клавиша управления

Добрый день.

Вопрос такой: как создать новую клавишу управления и назначить на её выполнение функцию в классе 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.

Сообщить модератору | | IP: Записан
Сообщение: 49901

Старое сообщение 04-01-2010 12:29
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


0xf35
Насколько я помню, изначально в хл меньше 16 клавиш, и мне вполне удавалось добавить несколько своих. А ты пробовал изменить размер buttons в usercmd для передачи всех 32 битов?
В delta.lst она обозначена как
DEFINE_DELTA( buttons, DT_SHORT, 16, 1.0 )

__________________

Сообщить модератору | | IP: Записан
Сообщение: 49905

Старое сообщение 04-01-2010 12:36
-
0xf35
Новичок

Дата регистрации: Dec 2009
Проживает: /dev/earth0
Сообщений: 7

Рейтинг



Пробовал, приводило к ошибке сегментации. Но не знал про delta.lst. Спасибо, попробую.

Сообщить модератору | | IP: Записан
Сообщение: 49908

Старое сообщение 04-01-2010 13:51
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
0xf35 писал:
Изменение размера приводит к ошибке сегментации памяти (segmentation fault)

по моему там обычный экзепшен вылетает. Но дело даже не в этом.
Дело в том, что по сети все равно передается только 16 бит.
Там еще есть пара неюзаных переменных:
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'

Сообщить модератору | | IP: Записан
Сообщение: 49910

Старое сообщение 04-01-2010 13:56
-
0xf35
Новичок

Дата регистрации: Dec 2009
Проживает: /dev/earth0
Сообщений: 7

Рейтинг



Изменил в 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 )

Опять ошибка сегментации. Где я ошибся?

Дядя Миша, можно, хорошая мысль. Но это хирургическое вмешательство топором будет. Должен быть другой способ.

Сообщить модератору | | IP: Записан
Сообщение: 49911

Старое сообщение 04-01-2010 14:02
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


ну если в usercmd.h она прописана как 16-битная, то шансов нет. Только полный перекомпил движка (сорцов которого нет).
Так что остается хирургическое вмешательство топором, имхо.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 49914

Старое сообщение 04-01-2010 14:10
-
0xf35
Новичок

Дата регистрации: Dec 2009
Проживает: /dev/earth0
Сообщений: 7

Рейтинг



Понятно, с битами клавиш только так, хотя тоже неплохо. Битов - хоть завались. А существует способ запускать определённую функцию из класса игрока при вводе определённой консольной команды?

Сообщить модератору | | IP: Записан
Сообщение: 49915

Старое сообщение 04-01-2010 14:14
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
0xf35 писал:
Изменил в usercmd.h
unsigned short buttons; на
int buttons;

нельзя так. у тебяж куча вещей подвинулась в клиенте, а в движке осталась по старым смещениям.
Цитата:
0xf35 писал:
Но это хирургическое вмешательство топором будет

Это почему еще?
Есть отличная непоюзанная переменная - бери и пользуйся.
По другому тоже можно - например отправлять команды на сервер при помощи клиентских команд. На этом весь VGUI построен.
Разумеется на сервере команда приходит вполне конкретному игроку, а не кому попало.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 49916

Старое сообщение 04-01-2010 14:43
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
0xf35 писал:
А существует способ запускать определённую функцию из класса игрока при вводе определённой консольной команды?

Ну да... Посмотри в client.cpp код ClientCommand.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 49918

Старое сообщение 04-01-2010 14:52
-
0xf35
Новичок

Дата регистрации: Dec 2009
Проживает: /dev/earth0
Сообщений: 7

Рейтинг



Цитата:
Дядя Миша писал:
нельзя так. у тебяж куча вещей подвинулась в клиенте, а в движке осталась по старым смещениям.

Согласен, потому меня и удивила возможность обозначать размеры элементов структуры в delta.lst - как оказалось, это действительно не так. Но проверить не мешало.
Цитата:
Дядя Миша писал:
Это почему еще?

Просто изначально не предполагалось, что оно будет использоваться именно так. Существовала (уже не существует) опасность, что Valve измененит движок и задействует эти переменные - теперь, конечно, это невозможно. Спасибо, хорошая мысль, ничего не имею против.
Цитата:
XaeroX писал:
Посмотри в client.cpp код ClientCommand.

Спасибо. Тоже очень полезный механизм - если уйти от темы клавиш.

Сообщить модератору | | IP: Записан
Сообщение: 49922

Старое сообщение 04-01-2010 15:16
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
0xf35 писал:
потому меня и удивила возможность обозначать размеры элементов структуры в delta.lst

То у тебя возможность регулировать размер пересылаемых по сети данных. Если тебе надо отослать всего 8 бит, вместо 16 - это можно настроить. И сэкономить траффик.
Цитата:
0xf35 писал:
Просто изначально не предполагалось, что оно будет использоваться именно так

Важно что оно не используется движком, зато передается по сети.
В других модах (например стратегиях), эти две переменные нужны, чтобы кликать юнитов, например. Или в инветаре копаться, выбирать предмет.
Оно для этого и было сделано. Но конечно никто не мешает заюзать для чего-нить другого.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 49924

Старое сообщение 04-01-2010 16:06
-
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 29

Рейтинг



Цитата:
0xf35 писал:
Спасибо. Тоже очень полезный механизм - если уйти от темы клавиш.


Почему уйти от темы? Создаешь команду, набираешь в консоли - всё работает. А чтобы была клавиша, то бинди эту команду на кнопку, вот тебе и новая клавиша. Это тебе, наверно, XaeroX и хотел сказать

__________________
Base Defense on Steam, ModDB

Сообщить модератору | | IP: Записан
Сообщение: 49933

Старое сообщение 05-01-2010 09:44
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34527
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


PLut я так понял, ему нужна клавиша, чтобы в игре определять, нажата она или нет. А такие только через pev->buttons передаются с клиента.
Хотя можно с алиасами похимичить

__________________

Сообщить модератору | | IP: Записан
Сообщение: 49938

Старое сообщение 05-01-2010 10:14
-
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 29

Рейтинг



Дык такие клавиши вроде как в самом движке, это вот, которые IN_ALT?

__________________
Base Defense on Steam, ModDB

Сообщить модератору | | IP: Записан
Сообщение: 49948

Старое сообщение 05-01-2010 12:13
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32213
Нанёс повреждений: 392 ед.

Рейтинг



PLut движок их просто передает по сети.
Сам не подглядывает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | | IP: Записан
Сообщение: 49950

Старое сообщение 05-01-2010 12:22
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 11:15. Новая тема    Ответить
Страницы (2): [1] 2 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Клавиша управления
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024