HLFX.Ru Forum Страницы (3): « 1 2 [3]
Показать все 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)


Отправлено 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. Текущее время 13:46. Страницы (3): « 1 2 [3]
Показать все 38 сообщений этой темы на одной странице

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