HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Создание кооперативного прохождения
Возможно ли сделать режим для игры в кооп?
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
fire64
Житель форума

Дата регистрации: Apr 2007
Проживает: Москва
Сообщений: 2362
Возраст: 35

Рейтинг



Цитата:
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
}



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

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

Сообщить модератору | IP: Записан
Сообщение: 121504

Старое сообщение 12-06-2013 07:28
- За что?
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 31

Рейтинг



SteamPlay43 Зачем ты заменил return TRUE и GR_TEAMMATE? Чем тебя они не устроили? Я тебе рабочий код скинул из своего мода, где нельзя дамажить других игроков ни под каким предлогом. Зачем рабочий код лопатить в краш-код?

И ты протестировал не мой код, а какую-то лабудень, которую ты, видно, писал в бреду.

__________________
Base Defense on Steam, ModDB

Отредактировано PLut 12-06-2013 в 08:09

Сообщить модератору | IP: Записан
Сообщение: 121509

Старое сообщение 12-06-2013 07:56
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
SteamPlay43 писал:
Я протестировал твой код - я стал бессмертен! Не работает(

Другой бы радовался, что стал бессмертным!

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 121512

Старое сообщение 12-06-2013 08:11
-
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 27

Рейтинг



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
}
и это не работает!

Сообщить модератору | IP: Записан
Сообщение: 121552

Старое сообщение 12-06-2013 18:45
- За что?
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 31

Рейтинг



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

Сообщить модератору | IP: Записан
Сообщение: 121560

Старое сообщение 12-06-2013 20:54
- За что?
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 27

Рейтинг



PLut Я так и думал, только не знал как правильно реализовать!
Спасибо за помощь!

Сообщить модератору | IP: Записан
Сообщение: 121561

Старое сообщение 12-06-2013 21:12
- За что?
PLut
Creator

Дата регистрации: Jun 2009
Проживает: Санкт-Петербург
Сообщений: 1220
Возраст: 31

Рейтинг



SteamPlay43 Наконец-то! Пожалуйста ;)

__________________
Base Defense on Steam, ModDB

Сообщить модератору | IP: Записан
Сообщение: 121562

Старое сообщение 12-06-2013 21:14
- За что?
SteamPlay43
Житель форума

Группа: Неопытный
Дата регистрации: May 2012
Проживает: Барнаул
Сообщений: 273
Возраст: 27

Рейтинг



Вот что в итоге вышло:

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
}

Отредактировано SteamPlay43 12-06-2013 в 22:01

Сообщить модератору | IP: Записан
Сообщение: 121563

Старое сообщение 12-06-2013 21:43
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 06:13. Новая тема    Ответить
Страницы (3): « 1 2 [3]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Создание кооперативного прохождения
Возможно ли сделать режим для игры в кооп?
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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