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=3783)
Отправлено fire64 12-06-2013 в 07:28:
Цитата:
SteamPlay43 писал:
А вот из за такого у меня вылетает мод:
C++ Source Code:
1 | BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) |
3 | if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE ) |
6 | if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) ) |
8 | // friendly fire is off, and this hit came from someone other than myself, then don't get hurt |
13 | return CHalfLifeMultiplay::FPlayerCanTakeDamage( pPlayer, pAttacker ); |
Явные проблемы со зрением...
Ты же сделал бесконечную рекурсию.__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Отправлено PLut 12-06-2013 в 07:56:
SteamPlay43 Зачем ты заменил return TRUE и GR_TEAMMATE? Чем тебя они не устроили? Я тебе рабочий код скинул из своего мода, где нельзя дамажить других игроков ни под каким предлогом. Зачем рабочий код лопатить в краш-код?
И ты протестировал не мой код, а какую-то лабудень, которую ты, видно, писал в бреду.
__________________
Base Defense on Steam, ModDB
Отправлено Дядя Миша 12-06-2013 в 08:11:
Цитата:
SteamPlay43 писал:
Я протестировал твой код - я стал бессмертен! Не работает(
Другой бы радовался, что стал бессмертным!__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SteamPlay43 12-06-2013 в 18:45:
fire64 Я просто тогда не сильно шарил в хл сдк!
Добавлено 13-06-2013 в 01:34:
PLut В дм ентити твоя и аттакера одинаковые - GR_NOTTEAMMATE, а GR_TEAMMATE - тимплей. Ты что этого не видел?
C++ Source Code:
1 | int CHalfLifeMultiplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ) |
3 | // half life deathmatch has only enemies |
Где ты видел тиммейта в обычном дм? Это же бред!
Добавлено 13-06-2013 в 01:45:
PLut Судя по твоему коду для дм должно быть так:
C++ Source Code:
1 | BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) |
3 | if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE ) |
6 | if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) ) |
8 | // friendly fire is off, and this hit came from someone other than myself, then don't get hurt |
и это не работает!
Отправлено PLut 12-06-2013 в 20:54:
SteamPlay43 Я тебе сразу сказал, что всем игрокам нужно принудительно выставлять, что они GR_TEAMMATE. Я понятия не имею, что у тебя там не работает. У меня всё отлично работает.
Мог бы и сам справиться посмотрев код teamplay...
Посмотрим туда, в отношения игроков:
C++ Source Code:
1 | int CHalfLifeTeamplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ) |
3 | // half life multiplay has a simple concept of Player Relationships. |
4 | // you are either on another player's team, or you are not. |
5 | if ( !pPlayer || !pTarget || !pTarget->IsPlayer() ) |
8 | if ( (*GetTeamID(pPlayer) != '\0') && (*GetTeamID(pTarget) != '\0') && !stricmp( GetTeamID(pPlayer), GetTeamID(pTarget) ) ) |
13 | return GR_NOTTEAMMATE; |
Отсюда видим, что если игрок не в команде, то он не товарищ. Убираем проверку на команду и получится так:
C++ Source Code:
1 | int CHalfLifeMultiplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ) |
3 | if ( !pPlayer || !pTarget || !pTarget->IsPlayer() ) |
После чего смотрим в тимплее функцию проверки урона:
C++ Source Code:
1 | BOOL CHalfLifeTeamplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) |
3 | if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_TEAMMATE ) |
6 | if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) ) |
8 | // friendly fire is off, and this hit came from someone other than myself, then don't get hurt |
13 | return CHalfLifeMultiplay::FPlayerCanTakeDamage( pPlayer, pAttacker ); |
Возвращение идет на ту же самую функцию, НО В ДРУГОМ КЛАССЕ, где она возвращает TRUE. Следовательно, раз мы переносим эту функцию в DM, то просто заменяем на TRUE.
Вот и всё, а теперь думай где ты ошибся. Всё давно вальвой за тебя написано.__________________
Base Defense on Steam, ModDB
Отправлено SteamPlay43 12-06-2013 в 21:12:
PLut Я так и думал, только не знал как правильно реализовать!
Спасибо за помощь!
Отправлено PLut 12-06-2013 в 21:14:
SteamPlay43 Наконец-то! Пожалуйста ;)
__________________
Base Defense on Steam, ModDB
Отправлено SteamPlay43 12-06-2013 в 21:43:
Вот что в итоге вышло:
C++ Source Code:
1 | int CHalfLifeMultiplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget ) |
3 | if ( !pPlayer || !pTarget || !pTarget->IsPlayer() ) |
6 | // half life deathmatch has only enemies |
C++ Source Code:
1 | BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker ) |
3 | if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE ) |
6 | if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) ) |
8 | // friendly fire is off, and this hit came from someone other than myself, then don't get hurt |
Добавлено 13-06-2013 в 04:41:
fire64 Спасибо за помощь моему другу Ghost_22! Мы теперь знаем как в дм включить перемену карт. Я немного улучшил твой код.
Добавлено 13-06-2013 в 04:43:
Кстати если тут поставить TRUE то хл сойдёт сума!
C++ Source Code:
1 | BOOL CHalfLifeRules::IsMultiplayer( void ) |
6 | //========================================================= |
7 | //========================================================= |
8 | BOOL CHalfLifeRules::IsDeathmatch ( void ) |
13 | //========================================================= |
14 | //========================================================= |
15 | BOOL CHalfLifeRules::IsCoOp( void ) |