HLFX.Ru Forum Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

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=1268)


Отправлено ToMMuK 30-04-2008 в 13:43:

Half-Life Проблемы с переменными

Ввёл переменную которая меняется при подборе или выбрасывания оружия. Собственно код :

C++ Source Code:
1
if ( pItem->m_iId == WEAPON_AK47 )
2
{
3
  pItem->m_BackPack = pItem->m_BackPack;
4
  pItem->m_BackPack = pItem->m_BackPack + MP5_WEIGHT;
5
  //				ALERT ( at_debug, "Backpack weight set to : %d\n", pItem->m_BackPack );
6
}
7
else if ( pItem->m_iId == WEAPON_GLOCK )
8
{
9
  pItem->m_BackPack = pItem->m_BackPack;
10
  pItem->m_BackPack = pItem->m_BackPack + GLOCK_WEIGHT;
11
}
12
ALERT ( at_debug, "Backpack weight add : %d\n", pItem->m_BackPack  );


Но в игре при подъёме АК он мне пишет "Backpack weight set to : 15", а затем при подборе Глока пишет "Backpack weight set to : 10" Хотя поидее должен писать "Backpack weight set to : 25". Собственно что я зделал не так?

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Government-Man 30-04-2008 в 14:24:

>>> pItem->m_BackPack = pItem->m_BackPack;
В чем смысл этой строки?

Добавлено 30-04-2008 в 20:24:

Я конечно не сильно в хлсдк разбираюсь, но... m_BackPack - это я так понимаю, вес "рюкзака" игрока? Тогда какого художника он вообще делает в итеме? %) В плеера добавь...


Отправлено ToMMuK 30-04-2008 в 14:27:

pItem->m_BackPack = pItem->m_BackPack;
Ни в чём, без неё тоже самое

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Jumpdaphuckup! 30-04-2008 в 21:17:

В строке pItem->m_BackPack = pItem->m_BackPack; действительно нет никакого смысла. Убери ее.
А чтобы тебе смогли помочь, расскажи куда ты этот код вставил и покажи как и где ты объявляешь переменную m_BackPack.

__________________
avtobus zekov


Отправлено ToMMuK 01-05-2008 в 14:21:

В CBasePlayer::AddPlayerItem добавил.

C++ Source Code:
1
if ( pItem->m_iId == WEAPON_AK47 )
2
{
3
  if( m_BackPack + MP5_WEIGHT >= m_BackPack_Max )
4
  {
5
    UTIL_ShowMessage("#BACKPACK_FULL", this );
6
    return FALSE;
7
  }
8
  else
9
  {
10
    m_BackPack = m_BackPack + MP5_WEIGHT;
11
  }
12
}
13
else if ( pItem->m_iId == WEAPON_GLOCK )
14
{
15
  if( m_BackPack + GLOCK_WEIGHT >= m_BackPack_Max )
16
  {
17
    UTIL_ShowMessage("#BACKPACK_FULL", this );
18
    return FALSE;
19
  }
20
  else
21
  {
22
    m_BackPack = m_BackPack + GLOCK_WEIGHT;
23
  }
24
}
25
else if ( pItem->m_iId == WEAPON_CROWBAR )
26
{
27
  if( m_BackPack + 195 >= m_BackPack_Max ) //test
28
  {
29
    UTIL_ShowMessage("#BACKPACK_FULL", this );
30
    return FALSE;
31
  }
32
  else
33
  {
34
    m_BackPack = m_BackPack + 195; //test
35
  }
36
}
37
 
38
MESSAGE_BEGIN( MSG_ONE, gmsgBackPack, NULL, pev );
39
WRITE_BYTE( m_BackPack );
40
MESSAGE_END();


И в CBasePlayer::DropPlayerItem

C++ Source Code:
1
if ( pWeapon->m_iId == WEAPON_AK47 )
2
{
3
  m_BackPack = m_BackPack - MP5_WEIGHT;
4
}
5
else if ( pWeapon->m_iId == WEAPON_GLOCK )
6
{
7
  m_BackPack = m_BackPack - GLOCK_WEIGHT;
8
}
9
else if ( pWeapon->m_iId == WEAPON_CROWBAR )
10
{
11
  m_BackPack = m_BackPack - 195;
12
}
13
ALERT ( at_debug, "Backpack weight set to : %d\n", m_BackPack );
14
 
15
MESSAGE_BEGIN( MSG_ONE, gmsgBackPack, NULL, pev );
16
WRITE_BYTE( m_BackPack );
17
MESSAGE_END();


В SaveData добавил :
C++ Source Code:
DEFINE_FIELD( CBasePlayer, m_BackPack, FIELD_INTEGER ),
DEFINE_FIELD( CBasePlayer, m_BackPack_Max, FIELD_INTEGER ),


Теперь всё работает, но появился один глюк, после того как выкидываешь оружие, и после этого забиваешь m_BackPack до максимума, пытаешся поднять оружие которое выкинул, происходит следующее : модель оружия исчезает с земли, выдаётся сообщение что инвентарь полон. Собственно как сделать чтобы модель неубералась с земли когда m_BackPack = 200 или больше? Надеюсь меня кто-то понял.

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Jumpdaphuckup! 01-05-2008 в 15:39:

m_BackPack_Max можно сделать константой и не нужно ее сохранять. Например:

code:
#define BACK_PACK_MAX 200

А еще:
code:
m_BackPack = m_BackPack + MP5_WEIGHT;
можно заменить на
code:
m_BackPack += MP5_WEIGHT;


А если по делу, то ставь брэйкпойнт в начале функции
code:
CBasePlayerItem::DefaultTouch
И следи за происходящим на экране

__________________
avtobus zekov


Отправлено ToMMuK 01-05-2008 в 15:41:

Как бы сказать, пушка после того как выкидывается командой дроп, превращяется в энтитю "weaponbox", собственно поэтому и получается глюк с исчезновением модели.

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Jumpdaphuckup! 01-05-2008 в 15:49:

Блин, можно было хоть в коде смайлы отключить...

Добавлено 01-05-2008 в 18:49:

Цитата:
ToMMuK писал:
превращяется в энтитю "weaponbox"
Тогда все ясно. Используй CREATE_NAMED_ENTITY для выбрасывания нужного оружия в DropPlayerItem

__________________
avtobus zekov


Отправлено ToMMuK 01-05-2008 в 15:50:

То есть ты имеешь в виду делать проверку на выбрасываемое оружие и создавать энтитю?

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Jumpdaphuckup! 01-05-2008 в 15:53:

точно

__________________
avtobus zekov


Отправлено ToMMuK 01-05-2008 в 16:07:

Чёто ничего не получается.

C++ Source Code:
1
if ( pWeapon->m_iId == WEAPON_AK47 )
2
{
3
  CREATE_NAMED_ENTITY( MAKE_STRING( "weapon_ak74" ) );
4
  ALERT ( at_debug, "Created entity : weapon_ak74\n" );
5
  //						pev->angles.x = RANDOM_FLOAT( 25, -25 );
6
  //						pev->angles.y = RANDOM_FLOAT( 25, -25 );
7
  //						pev->angles.z = RANDOM_FLOAT( 25, -25 );
8
}
9
else if ( pWeapon->m_iId == WEAPON_GLOCK )
10
{
11
  CREATE_NAMED_ENTITY( MAKE_STRING( "weapon_glock" ) );
12
  ALERT ( at_debug, "Created entity : weapon_glock\n" );
13
  //						pev->angles.x = RANDOM_FLOAT( 25, -25 );
14
  //						pev->angles.y = RANDOM_FLOAT( 25, -25 );
15
  //						pev->angles.z = RANDOM_FLOAT( 25, -25 );
16
}
17
else if ( pWeapon->m_iId == WEAPON_CROWBAR )
18
{
19
  CREATE_NAMED_ENTITY( MAKE_STRING( "weapon_crowbar" ) );
20
  ALERT ( at_debug, "Created entity : weapon_crowbar\n" );
21
  //						pev->angles.x = RANDOM_FLOAT( 25, -25 );
22
  //						pev->angles.y = RANDOM_FLOAT( 25, -25 );
23
  //						pev->angles.z = RANDOM_FLOAT( 25, -25 );
24
}

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Дядя Миша 02-05-2008 в 11:37:

Еще бы оно получалось! У тебя backpack объявлен в классе итема. Т.е. ты каждому итему свой весь присваиваешь.
Объяви backpack в классе игрока, тогда уж.
А вес наоборот - бери из итема и плюсуй-отнимай к бэкпаку.

__________________
My Projects: download page

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

Цитата:

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


Отправлено ToMMuK 02-05-2008 в 13:20:

Всё получилось, осталась одна проблемка, Если выкинуть оружие, затем через команду Гив прописать этоже оружие, и пытаться поднять выброшенное, то оно будет добавлять патроны, а модель не исчезнет.

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Отправлено Дядя Миша 02-05-2008 в 13:38:

ToMMuK ты имеешь в виду модель на полу или в руках?

__________________
My Projects: download page

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

Цитата:

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


Отправлено ToMMuK 02-05-2008 в 14:05:

Модель на полу.

__________________
Сайт латвийского мода

Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.


Временная зона GMT. Текущее время 22:26. Страницы (2): [1] 2 »
Показать все 17 сообщений этой темы на одной странице

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