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)
Отправлено SteamPlay43 05-02-2013 в 11:30:
Создание кооперативного прохождения
Я часто думал почему в хл1 так и не реализовали кооп? Мне бы очень хотелось сделать в моде кооп режим, так как всем моим друзьям не нравится что мы можем случайно друг друга убить. Я искал туториалы но нечего не нашёл кроме включения монстров в мултиплеере, то что я давно уже реализовал. Всё что рассказывают туториалы я давно уже реализовал. На идею меня навёл Ghost_22, который уже писал на форуме про They Hunger Co-op, огромное спасибо fire64 всё работает как надо. Но этого мне не достаточно. Прошу помочь мне чем сможете.
Отправлено Cybermax 05-02-2013 в 11:39:
Боюсь тебя уже опередили http://www.svencoop.com/
Отправлено SteamPlay43 05-02-2013 в 11:44:
Мне не очень нравится sven co-op из за его наварочености, я бы хотел сделать co-op как сделал Zhouy (http://hlcoop.clan.pro/) у него взят оригинальный хл за основу. Я пробовал сделать как он конфигурациями сервера но нечего не выходило и я решил сделать мод.
Отправлено FiEctro 05-02-2013 в 11:58:
Вот еще кооп мод один:
http://www.moddb.com/mods/unity-half-life-co-op
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено XaeroX 05-02-2013 в 11:59:
FiEctro
У нас на форуме не принято приводить ссылки на проекты, содержащие в названии слово "Unity". 
__________________
Отправлено FiEctro 05-02-2013 в 12:01:
XaeroX
Я же не про двиг, тем бадгер занимается
.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено SteamPlay43 05-02-2013 в 12:04:
XaeroX Полностью с тобой солгасен они не понятно что в том моде пытаются сделать. Мне хотелось сделать что нибудь своё, но очень похожее на синглплеер хл.
Отправлено Cybermax 05-02-2013 в 12:04:
Прохождение хл в кооперативе, избитая идея. Я бы сказал очень банально.
Отправлено SteamPlay43 05-02-2013 в 12:13:
Я же не говорю что там не будет новых карт и т.д. Но всё же я добавляю новые оружия и пытаюсь не перебарщивать с новшествами.
Отправлено FiEctro 05-02-2013 в 12:17:
>> Но всё же я добавляю новые оружия
Уже переборщил.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Cybermax 05-02-2013 в 12:21:
Зачем ещё один свенкоп? Какие пушки хочешь добавить?
Отправлено SteamPlay43 05-02-2013 в 12:27:
Свои - значит свои я не собираюсь перекачивать модели со sven co-op и т.д. Причём заинтересованность некоторых людей очень велика и я хочу помочь им!
Отправлено SteamPlay43 05-02-2013 в 18:39:
Цитата:
FiEctro писал:
>> Но всё же я добавляю новые оружия
Уже переборщил.
Дада 
Добавлено 06-02-2013 в 02:39:
Без них то и мод делать смысла нету!
Отправлено SteamPlay43 10-06-2013 в 20:58:
Большая проблема в том что можно случайно убить своих. Использовать тимплей не очень удобно.
Цитата:
Scrama писал:
1. В TakeDamage или как он там в ХЛ называется проверь ентитю-атакера, если тиммейт, то return, очень просто.
Таким образом получается что ты не сможешь самому себе наносить урон!
У кого какие идеи?
Отправлено ONeiLL 11-06-2013 в 06:31:
SteamPlay43 если атакер == тот который принимает урон, то мы наносим урон
Отправлено FreeSlave 11-06-2013 в 15:01:
Бесконечное количество респаунов и восстанавливающиеся предметы в свен купе по сути убивают весь ко-оп. Ты можешь не задумываться о том, сколько здоровья или патронов осталось у товарища - он воскреснет и всё будет как прежде. Хотелось бы ко-оп по типу того, что сделали в L4D - команда с ограниченным числом игроков должна пройти карту, причем при смерти игроки умирают насовсем (ну или есть несколько точек, где они могут респауниться с маленьким количеством хп и без оружия). Плюс можно ввести классы как в Team Fortress, так что каждый член команды будет особенным (дамагер, хилер и прочее).
Отправлено PLut 11-06-2013 в 15:22:
По теме:
C++ Source Code:
1 | BOOL CHalfLifeMultiplay::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 |
SteamPlay43 В чем проблема?
И ты пробовал как сказал Scrama? С чего ты взял, что сам себе наносить урон не будешь?
Чуть не по теме:
FreeSlave Прям как в Base Defense ;)__________________
Base Defense on Steam, ModDB
Отправлено FreeSlave 11-06-2013 в 15:35:
PLut, не совсем то. Монстры в HL довольны скучны, когда набегают на игрока. ИИ был спроектирован скорее с учетом того, что игрок будет перемещаться по карте, встречая монстров, а не ждать, когда они сами прийдут. Хотя может ты менял ИИ, чтобы монстры специально охотились за игроком, но по видео этого не заметно. Предположу, что можно просто спрятаться в здании, а монстры так и останутся блуждать по улице, не понимая что они должны делать.
Отправлено Skaarj 11-06-2013 в 15:35:
FreeSlave В Анрил1 кооп такой, появляешся после сметри в начале карты с единичкой в руках.
Забавно конечно толпой валить Титана единичкой, но в большинстве такой расклад выбешивает.
В Ку1 ФФ в коопе кажсь включен по умолчанию, и ничего, заже добавляет фан случайно пойманая ракета тиммейта и последующий локальный ДМ в этом месте.
Отправлено PLut 11-06-2013 в 15:38:
FreeSlave Да, так и останутся на улице :( Пока не придумал как это побороть... Хотя и не задумывался особо, думаешь стоит?
__________________
Base Defense on Steam, ModDB
Отправлено Дядя Миша 11-06-2013 в 15:49:
Цитата:
Skaarj писал:
локальный ДМ
ДМ не локальный, ДМ - глобальный 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено FreeSlave 11-06-2013 в 15:55:
Skaarj, количество респов можно ограничить (если их вообще оставлять) или сделать спец. команты, где респаунится игрок, но дверь открывается только с другой стороны (собственно, как в L4D). Ну и дифибрилляторы и магию вортигонтов никто не отменял. Можно придумать множество способ респауна, при которых всё равно остается реальный шанс проиграть. И мочить босса с одним хп никто не заставляет - нужно будет просто поаккуратнее заново проходить уровень (опять же, как в L4D).
PLut, честно говоря я вообще не уверен в целесообразности мода, направленного чисто на оборону своих же тел. Но defence-мод можно было бы сделать частью более общей ко-оп модификации, как один из режимов игры (вроде выживания). Скажу лишь, когда я делал defence-карту для Sven Co-op я прибег к одной хитрости - выставил респаун барников, так что монстры, видя врага всегда набегали на базу.
Отправлено SteamPlay43 11-06-2013 в 21:57:
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 |
А вот из за такого у меня вылетает мод:
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 ); |
Отправлено Cybermax 11-06-2013 в 22:14:
Можно добавить кооп-зомбимод-с-новогоднями шапками
__________________
ㅤ
Отправлено SteamPlay43 11-06-2013 в 22:16:
Одно не ясно, зачем нужны остальные ентити?
C++ Source Code:
1 | // Player relationship return codes |
Добавлено 12-06-2013 в 05:16:
Cybermax Сделать кооп модов хл будет интересней!
Отправлено Cybermax 11-06-2013 в 22:18:
Цитата:
SteamPlay43 писал:
Cybermax Сделать кооп модов хл будет интересней!
Что?__________________
ㅤ
Отправлено SteamPlay43 11-06-2013 в 22:24:
Cybermax Я про то что такое есть в кс, а нужно что то новое!
Отправлено Cybermax 11-06-2013 в 22:40:
Цитата:
SteamPlay43 писал:
Cybermax Сделать кооп модов хл будет интересней!
Цитата:
Cybermax писал:
Что?
Цитата:
SteamPlay43 писал:
Cybermax Я про то что такое есть в кс, а нужно что то новое!
Что есть в кс? Кооп зомби мод с шапками? Нет ну сурьездно может я что-то пропустил?__________________
ㅤ
Отправлено SteamPlay43 11-06-2013 в 23:05:
Cybermax В кс есть кооп! http://www.moddb.com/mods/cs-coop
Добавлено 12-06-2013 в 06:05:
PLut Я протестировал твой код - я стал бессмертен! Не работает(
Отправлено FiEctro 12-06-2013 в 06:05:
PLut
Ну расставь им пути на карте, и пропиши чтобы монстры сами смотрели какой ближе и патрулировали, в первокваке что то подобное кажется было.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено 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 ) |