HLFX.Ru Forum
Показать все 38 сообщений этой темы на одной странице

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:

Half-Life Создание кооперативного прохождения

Я часто думал почему в хл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".

__________________

xaerox on Vivino


Отправлено 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 )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_TEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return TRUE;
14
}


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 )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return TRUE;
14
}

А вот из за такого у меня вылетает мод:
C++ Source Code:
1
BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return CHalfLifeMultiplay::FPlayerCanTakeDamage( pPlayer, pAttacker );
14
}


Отправлено Cybermax 11-06-2013 в 22:14:

Можно добавить кооп-зомбимод-с-новогоднями шапками

__________________


Отправлено SteamPlay43 11-06-2013 в 22:16:

Одно не ясно, зачем нужны остальные ентити?

C++ Source Code:
1
// Player relationship return codes
2
enum
3
{
4
  GR_NOTTEAMMATE = 0,
5
  GR_TEAMMATE,
6
  GR_ENEMY,
7
  GR_ALLY,
8
  GR_NEUTRAL,
9
};


Добавлено 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 )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return CHalfLifeMultiplay::FPlayerCanTakeDamage( pPlayer, pAttacker );
14
}



Явные проблемы со зрением...
Ты же сделал бесконечную рекурсию.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено 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 )
2
{
3
  // half life deathmatch has only enemies
4
  return GR_NOTTEAMMATE;
5
}

Где ты видел тиммейта в обычном дм? Это же бред!

Добавлено 13-06-2013 в 01:45:

PLut Судя по твоему коду для дм должно быть так:
C++ Source Code:
1
BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return TRUE;
14
}
и это не работает!


Отправлено PLut 12-06-2013 в 20:54:

SteamPlay43 Я тебе сразу сказал, что всем игрокам нужно принудительно выставлять, что они GR_TEAMMATE. Я понятия не имею, что у тебя там не работает. У меня всё отлично работает.

Мог бы и сам справиться посмотрев код teamplay...

Посмотрим туда, в отношения игроков:

C++ Source Code:
1
int CHalfLifeTeamplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget )
2
{
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() )
6
    return GR_NOTTEAMMATE;
7
 
8
  if ( (*GetTeamID(pPlayer) != '\0') && (*GetTeamID(pTarget) != '\0') && !stricmp( GetTeamID(pPlayer), GetTeamID(pTarget) ) )
9
  {
10
    return GR_TEAMMATE;
11
  }
12
 
13
  return GR_NOTTEAMMATE;
14
}


Отсюда видим, что если игрок не в команде, то он не товарищ. Убираем проверку на команду и получится так:

C++ Source Code:
1
int CHalfLifeMultiplay::PlayerRelationship( CBaseEntity *pPlayer, CBaseEntity *pTarget )
2
{
3
  if ( !pPlayer || !pTarget || !pTarget->IsPlayer() )
4
    return GR_NOTTEAMMATE;
5
 
6
  return GR_TEAMMATE;
7
}


После чего смотрим в тимплее функцию проверки урона:

C++ Source Code:
1
BOOL CHalfLifeTeamplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_TEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return CHalfLifeMultiplay::FPlayerCanTakeDamage( pPlayer, pAttacker );
14
}


Возвращение идет на ту же самую функцию, НО В ДРУГОМ КЛАССЕ, где она возвращает 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 )
2
{
3
  if ( !pPlayer || !pTarget || !pTarget->IsPlayer() )
4
    return GR_TEAMMATE;
5
 
6
  // half life deathmatch has only enemies
7
  return GR_NOTTEAMMATE;
8
}
C++ Source Code:
1
BOOL CHalfLifeMultiplay::FPlayerCanTakeDamage( CBasePlayer *pPlayer, CBaseEntity *pAttacker )
2
{
3
  if ( pAttacker && PlayerRelationship( pPlayer, pAttacker ) == GR_NOTTEAMMATE )
4
  {
5
    // my teammate hit me.
6
    if ( (friendlyfire.value == 0) && (pAttacker != pPlayer) )
7
    {
8
      // friendly fire is off, and this hit came from someone other than myself,  then don't get hurt
9
      return FALSE;
10
    }
11
  }
12
 
13
  return TRUE;
14
}


Добавлено 13-06-2013 в 04:41:

fire64 Спасибо за помощь моему другу Ghost_22! Мы теперь знаем как в дм включить перемену карт. Я немного улучшил твой код.

Добавлено 13-06-2013 в 04:43:

Кстати если тут поставить TRUE то хл сойдёт сума!
C++ Source Code:
1
BOOL CHalfLifeRules::IsMultiplayer( void )
2
{
3
  return FALSE;
4
}
5
 
6
//=========================================================
7
//=========================================================
8
BOOL CHalfLifeRules::IsDeathmatch ( void )
9
{
10
  return FALSE;
11
}
12
 
13
//=========================================================
14
//=========================================================
15
BOOL CHalfLifeRules::IsCoOp( void )
16
{
17
  return FALSE;
18
}


Временная зона GMT. Текущее время 14:18.
Показать все 38 сообщений этой темы на одной странице

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