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:
Проблемы с переменными
Ввёл переменную которая меняется при подборе или выбрасывания оружия. Собственно код :
C++ Source Code:
1 | if ( pItem->m_iId == WEAPON_AK47 ) |
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 ); |
7 | else if ( pItem->m_iId == WEAPON_GLOCK ) |
9 | pItem->m_BackPack = pItem->m_BackPack; |
10 | pItem->m_BackPack = pItem->m_BackPack + GLOCK_WEIGHT; |
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 ) |
3 | if( m_BackPack + MP5_WEIGHT >= m_BackPack_Max ) |
5 | UTIL_ShowMessage("#BACKPACK_FULL", this ); |
10 | m_BackPack = m_BackPack + MP5_WEIGHT; |
13 | else if ( pItem->m_iId == WEAPON_GLOCK ) |
15 | if( m_BackPack + GLOCK_WEIGHT >= m_BackPack_Max ) |
17 | UTIL_ShowMessage("#BACKPACK_FULL", this ); |
22 | m_BackPack = m_BackPack + GLOCK_WEIGHT; |
25 | else if ( pItem->m_iId == WEAPON_CROWBAR ) |
27 | if( m_BackPack + 195 >= m_BackPack_Max ) //test |
29 | UTIL_ShowMessage("#BACKPACK_FULL", this ); |
34 | m_BackPack = m_BackPack + 195; //test |
38 | MESSAGE_BEGIN( MSG_ONE, gmsgBackPack, NULL, pev ); |
39 | WRITE_BYTE( m_BackPack ); |
И в CBasePlayer::DropPlayerItem
C++ Source Code:
1 | if ( pWeapon->m_iId == WEAPON_AK47 ) |
3 | m_BackPack = m_BackPack - MP5_WEIGHT; |
5 | else if ( pWeapon->m_iId == WEAPON_GLOCK ) |
7 | m_BackPack = m_BackPack - GLOCK_WEIGHT; |
9 | else if ( pWeapon->m_iId == WEAPON_CROWBAR ) |
11 | m_BackPack = m_BackPack - 195; |
13 | ALERT ( at_debug, "Backpack weight set to : %d\n", m_BackPack ); |
15 | MESSAGE_BEGIN( MSG_ONE, gmsgBackPack, NULL, pev ); |
16 | WRITE_BYTE( m_BackPack ); |
В 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:
И следи за происходящим на экране
__________________
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 ) |
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 ); |
9 | else if ( pWeapon->m_iId == WEAPON_GLOCK ) |
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 ); |
17 | else if ( pWeapon->m_iId == WEAPON_CROWBAR ) |
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 ); |
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.
Отправлено Дядя Миша 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:
Модель на полу.
__________________
Сайт латвийского мода
Игроки в халф лайф делятся на две больше группы - те, кто не доехал на поезде и те, кто прошел несколько раз.