Как перевести игрока без команды (или спектратора) в команду и сделать живым?

Сообщения
401
Реакции
113
Помог
2 раз(а)
Здравствуйте!

Собственно, вопрос в заголовке. Если игрок ни разу не заходил в игру, зашел сразу в спектраторы или не выбрал команду, то:

1) rg_join_team(...) - переводит за нужную команду из команды (UNASSIGNED или SPECTRATOR), но в начале раунда *) игрок будет мертвый.

Если дополнительно сделать ExecuteHam(Ham_CS_RoundRespawn, ...) - ничего не происходит...

Если сделать что-то вроде этого (я уже много комбинаций перепробовал):
Код:
rg_join_team(i_i, any:(TEAM_TRANSFER[i_i]));
rg_reset_user_model(i_i, true);
set_member(i_i, m_iJoiningState, JOINED);
set_member(i_i, m_bSkipSpawn, false);
//set_member(i_i, m_bNotKilled, false);
//set_entvar(i_i, var_deadflag, DEAD_NO);
ExecuteHam(Ham_CS_RoundRespawn, i_i);
/*
rg_reset_user_model(i_i, true);
set_entvar(i_i, var_deadflag, DEAD_NO);
set_member(i_i, m_bNotKilled, false);
set_member(i_i, m_bTeamChanged, false);
ExecuteHam(Ham_CS_RoundRespawn, i_i);
*/
игрок появляется без прицела и рук. Автомат можно купить, пистолет тоже, но ни на нож, ни на пистолет переключиться нельзя... С ножом понятно - возможно он не выдался, но почему на купленный пестик не переключает, мне не понятно - только оружие в основном слоте (primary). Гранаты тоже не выдаются мне, похоже игра считает, что я труп.. И, самое главное, в дальнейшем я всегда появляюсь на респе без рук... С аналогичными симптомами, всегда... Пробую сейчас Ham_Spawn - возможно, в этом проблема...


Мне нужно как-то вызвать GetIntoGame() https://github.com/s1lentq/ReGameDL...4255613c4f0e/regamedll/dlls/player.cpp#L10475
или придется воспроизвести ее код...

Подскажите, пожалуйста, как мне это починить? Корректно воскресить игрока не дожидаясь следующего раунда...

Если игрок хоть раз входил в игру - переводится все норм... Такое ощущение, что где-то какой-то флаг нужно установить.. Я перепробовал штук 5: var_deadflag = dead_no, m_bTeamChanged и т.п., все хоть как-то связано с признаками трупа...

2) rg_set_user_team(...) - делает аналогичные предыдущему пункту действия для игрока который не выбрал команду или спектратора который ни разу не входил в игру. Для команды (CT, TT) работает отлично.

Я не вижу никакой логической разницы между двумя этими функциями... Как и с табличкой на двери, которую можно либо прибить, либо приклеить. Понимаю, что я тупой и не понимаю многих задумок разработчиков ReAPI, поэтому хотелось бы найти какое-то универсальное rf_set_team(...) безо всяких заморочек делающее то, что от нее просят - всегда, а не когда на небе сойдутся звезды и я угадаю нужный момент...

*) Эти манипуляции я делаю в начале раунда в RegisterHookChain(RG_CSGameRules_CheckMapConditions, "new_round");...
 
Последнее редактирование:
Сообщения
499
Реакции
271
Помог
6 раз(а)
Скорее всего, проблема кроется в значении квара mp_roundrespawn_time. Для присоединения к игре нового игрока хватает rg_join_team(), но при том условии, что от начала раунда ещё не прошло время, установленное в кваре.
9 Окт 2024
Я не вижу никакой логической разницы между двумя этими функциями... Как и с табличкой на двери, которую можно либо прибить, либо приклеить. Понимаю, что я тупой и не понимаю многих задумок разработчиков ReAPI, поэтому хотелось бы найти какое-то универсальное rf_set_team(...) безо всяких заморочек делающее то, что от нее просят - всегда, а не когда на небе сойдутся звезды и я угадаю нужный момент...
Там разница есть. Под капот не лез, но на практике, rg_join_team() нужен именно для новых игроков. Он правильно их присоединяет к команде. А rg_set_user_team() подходит, чтобы менять команду игроку, который уже не в TEAM_UNASSIGNED.
 
Сообщения
3
Реакции
12
1. Это не сделает его живым, но автоматически присоединит к команде.
mp_auto_join_team​
0​
0​
1​
Automatically joins the team.
0 disabled
1 enable (Use in conjunction with the cvar humans_join_team any/CT/T)​
2. Возможно, следует добавить rg_give_default_items?
 
Сообщения
401
Реакции
113
Помог
2 раз(а)
CHEL74, это как-то связано с set_member(i_i, m_iJoiningState, JOINED)... Пока я его не поменял, вообще респавн не проходил... Тестирую просто Ham_Spawn, так делает регейм для игрока с m_iJoiningState = GETINTOGAME, после rg_join_team().
9 Окт 2024
Там разница есть. Под капот не лез, но на практике, rg_join_team() нужен именно для новых игроков.
Я наверно слишком тупой чтобы понимать такие тонкости... И для этого действительно нужно целых 2 разные функции. Какая мне разница какой там игрок. Я нажал кнопку - хочу результат, без танцев...
9 Окт 2024
Ham_Spawn - тоже самое... Пулек нет, прицела нет, гранат нет...
1728471208150.png
 

Вложения

Сообщения
584
Реакции
1,006
Помог
18 раз(а)
Код:
rg_set_user_team(id, TEAM_CT);
ExecuteHamB(Ham_CS_RoundRespawn, id);
rg_give_default_items(id);
Должно быть достаточно.
 
Сообщения
401
Реакции
113
Помог
2 раз(а)
Mistrick, как говорит Оки - нишиша! Нет пулек, гранат и прицела...
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Опачки.. заработало :boast:
1728476007732.png
Код:
rg_join_team(i_i, any:(TEAM_TRANSFER[i_i]));
// Clone GetIntoGame()
set_member(i_i, m_bNotKilled, false);
set_member(i_i, m_iIgnoreGlobalChat, IGNOREMSG_NONE);
set_member(i_i, m_iTeamKills, 0);
set_member(i_i, m_iFOV, 90);
set_member(i_i, m_bIsInRebuy, false);
set_member(i_i, m_bJustConnected, false);
set_member(i_i, m_fLastMovement, get_gametime());
rg_reset_maxspeed(i_i);
set_member(i_i, m_iJoiningState, JOINED);
ExecuteHamB(Ham_CS_RoundRespawn, i_i);
Думаю ключиком к успеху был set_member(i_i, m_bJustConnected, false). Всем спасибо за помощь!
 
Последнее редактирование:
Сообщения
401
Реакции
113
Помог
2 раз(а)
Не порядок, 2 раза шприц выдался, значит 2 раза респавн прошел... Вот так работает корректно:
Код:
rg_join_team(i_i, any:(TEAM_TRANSFER[i_i]));
// Clone GetIntoGame()
set_member(i_i, m_bNotKilled, false);
set_member(i_i, m_iIgnoreGlobalChat, IGNOREMSG_NONE);
set_member(i_i, m_iTeamKills, 0);
set_member(i_i, m_iFOV, 90);
set_member(i_i, m_bIsInRebuy, false);
set_member(i_i, m_bJustConnected, false);
set_member(i_i, m_fLastMovement, get_gametime());
rg_reset_maxspeed(i_i);
set_member(i_i, m_iJoiningState, JOINED);
set_entvar(i_i, var_deadflag, DEAD_NO);
 
Сообщения
37
Реакции
2
Помог
1 раз(а)
Refresh, господин ДЕПУТАТ, извините что не по теме, но не подскажете что за плагин рассчитывающий вероятность победы и баланс раунда?
 
Сообщения
401
Реакции
113
Помог
2 раз(а)
RAMA21, это дядя Оки где-то купил фигню, я в этом особо не разбираюсь.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу