HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено Aynekko 06-09-2023 в 10:36:
Никак не могу понять, как можно передать строчку текста на клиент. А точнее, прописать в keyvalue энтити текст и потом, зная индекс энтити, получить его на клиенте. Я хотел попробовать ALLOC_STRING и получить id строчки на клиенте, но у меня в клиенте нет такой функции.
__________________
Мой мод на Xash
Отправлено Дядя Миша 06-09-2023 в 18:48:
ALLOC_STRING только на сервере.
Только через MESSAGE_BEGIN и WRITE_STRING.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Crystallize 07-09-2023 в 03:56:
Цитата:
Дядя Миша писал:
Может это какой-нибудь CalcBob чудит?
Кстати да, я боб отключил и это пропало.
Отправлено APAMk2 28-09-2023 в 06:36:
Вопросец, а можно-ли в MP при смене карты сохранить весь инвентарь игрока как это происходит в сингле? Бегло покопал форум и гуголь, ничего не нашёл, подозреваю просто где-то кусок из сингла в мультиплеер перенести, направьте по верному пути плз.
Отправлено Дядя Миша 28-09-2023 в 07:20:
В принципе можно, но халфа на такое не рассчитана, поэтому парой строк кода тут не отделаешься, придётся заморочиться. В том же квейке подобное было сделать куда как проще. Да оно там и работало - в кооперативе.
Вообщем надо выделить некоторое место и сохранить туда информацию о броне, здоровье, патронах и пушках для каждого игрока. А при заходе на новый уровень - дать всё это игроку. Какая-то глобальная структурка нужна где всё это держать во время смены уровня.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено APAMk2 28-09-2023 в 11:08:
Цитата:
Дядя Миша писал:
Какая-то глобальная структурка
Вроде game.h подходящее место, только теперь не знаю где остальной код дописывать, multiplay_gamerules.cpp похоже для этого не подходит, либо я не туда дописываю код (пробовал в CHalfLifeMultiplay::ChangeLevel и CHalfLifeMultiplay::Think), т.к. он не исполняется(ни один ALERT не сработал).
Структура:
C++ Source Code:
3 | extern struct PlayerChangeLevelSave |
7 | int ammo_count[15] = {15}; |
Сохранение и загрузка данных:
C++ Source Code:
1 | //multiplay_gamerules.cpp |
5 | PlayerChangeLevelSave player1, player2; |
6 | std::vector<PlayerChangeLevelSave> players = {player1, player2}; |
10 | void CHalfLifeMultiplay::Think() |
14 | for (int i = 0; i <= 1; i++) |
16 | CBaseEntity* pPlayer = UTIL_PlayerByIndex(i); |
17 | players[i].health = pPlayer->pev->health; |
18 | ALERT(at_console, "1Health:%i", pPlayer->pev->health); |
19 | players[i].hev_charge = pPlayer->pev->armorvalue; |
20 | ALERT(at_console, "1HEV:%i", pPlayer->pev->armorvalue); |
21 | players[i].ammo_count[1] = pPlayer->ammo_9mm; |
24 | ChangeLevel(); //intermission is over |
28 | void CHalfLifeMultiplay::ChangeLevel() |
31 | CHANGE_LEVEL(szNextMap, NULL); |
33 | for (int i = 0; i <= 1; i++) |
35 | CBaseEntity* pPlayer = UTIL_PlayerByIndex(i); |
36 | pPlayer->pev->health = players[i].health; |
37 | ALERT(at_console, "Health: %i", players[i].health); |
38 | pPlayer->pev->armorvalue = players[i].hev_charge; |
39 | ALERT(at_console, "HEV: %i", players[i].hev_charge); |
40 | pPlayer->ammo_9mm = players[i].ammo_count[1]; |
Отправлено Дядя Миша 28-09-2023 в 14:34:
Сохранять надо перед вызовом ChangeLevel, тут всё правильно.
А восстанавливать в PutClientInServer чёт такое вообщем.
Ну и завести ещё переменную, что игрока ожидает инвентарь с прошлого уровня, сделать проверку на мультиплеер.
Там кажется есть PlayerSpawn или подобная функция. Вот в ней попробуй.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено APAMk2 28-09-2023 в 16:57:
Перенёс в PlayerSpawn загрузку параметров, ох и долго-же я себе голову ломал...
По какой-то причине игре немного насрать на тот ChangeLevel что в multiplay_gamerules.cpp, перенёс сохранение в trigger.cpp и всё заработало , спасибо за помощь, пошёл допиливать код в адекватное состояние.
Отправлено SNMetamorph 28-09-2023 в 18:58:
Цитата:
APAMk2 писал:
Вопросец, а можно-ли в MP при смене карты сохранить весь инвентарь игрока как это происходит в сингле? Бегло покопал форум и гуголь, ничего не нашёл, подозреваю просто где-то кусок из сингла в мультиплеер перенести, направьте по верному пути плз.
Ищи на гитхабе исходники gravgun мода, там это было реализовано как-то.__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord
Отправлено Дядя Миша 28-09-2023 в 19:10:
Цитата:
APAMk2 писал:
немного насрать на тот ChangeLevel что в multiplay_gamerules.cpp, перенёс сохранение в trigger.cpp и всё заработало
Это очень просто. Тот чейнджлевел по задумке авторов должен был срабатывать после вызова функции NextLevel в triggers.cpp.
Однако эта функция не вызывается вообще ниоткуда
C++ Source Code:
2 | go to the next level for deathmatch |
3 | only called if a time or frag limit has expired |
Возможно это наследие из первокваки, которое забыли подключить. Что-то такое я там припоминаю.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Crystallize 01-10-2023 в 18:43:
Цитата:
Crystallize писал:
Интересно почему у него точность только три знака, а потом идут нули
Цитата:
Дядя Миша писал:
Потому что он восстанавливается из usercmd.msec у которого весь лимит - 250 милисекунд, путём умножения на тысячу.
Это получается у игрока свой особый фреймтайм? Я в PreThink двигаю игрока через SetAbsVelocity, и двигаю рядом спрайт, в основном для отладки, и спрайт держится рядом только если использовать этот калечный pmove->frametime, иначе постепенно уползает вперед.
Отправлено Дядя Миша 01-10-2023 в 19:11:
Цитата:
Crystallize писал:
Это получается у игрока свой особый фреймтайм?
Именно так. И время для него идёт иначе.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Crystallize 05-10-2023 в 08:20:
Как временно отключить гравитацию конкретно игроку? Чтобы он не дрейфовал вниз когда его передвигает SetAbsVelocity. Просто выставить мувтип fly не срабатывает.
Отправлено Дядя Миша 05-10-2023 в 12:10:
pev->gravity = 0.0f;
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено APAMk2 08-10-2023 в 12:51:
Решил ради тестов попробовать портануть модельку солдата из Q2 под ХЛ, столкнулся конечно-же с проблемой вертексной анимации и перегоне её в скелетную, чёт вспомнил о QR и QW, покопал их подфорум, ничё по этому поводу внятного не нашёл, ну неужели ничего внятного за все эти годы никто не придумал и нужно по классике ручками костылять модель в Т-позу и потом клеить на неё скелет из ХЛ или и того хуже - запиливать код вертексной анимации?