HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нужна помощь в дороботке backweapons (https://hlfx.ru/forum/showthread.php?threadid=3776)
Отправлено Danger 30-01-2013 в 21:39:
Нужна помощь в дороботке backweapons
Для контри на amxx есть мод backweapons(модели оружия на спине), вот решил я сделать в своем моде подобную фичу.
В общем я все cделал, все работает отлично но только когда я один на сервере)), если на сервере больше одного игрока возникает такая проблема, допустим у меня и в другого игрока есть ak47, в обоих игроков модель ak47 отображается на спине, но если один из игроков вибросит ak47 то модель исчезает в обоих игроков.
Как решить эту проблему?
Все изменения делал в: CStudioModelRenderer::StudioDrawPlayer и на сервере в каждую пушку добавил кеширование модели b_назание_пушки.mdl
C++ Source Code:
5 | for (int i = MAX_WEAPONS-1; i > 0; i-- ) |
8 | if ( gHUD.m_iWeaponBits & ( 1 << p->iId ) ) |
11 | for (int i1=0; i1<20; ++i1) |
13 | if(pweaponmodel->name[9+i1]=='.' ) |
15 | PModelname[i1] = '\0'; |
19 | PModelname[i1] = pweaponmodel->name[9+i1]; |
21 | WeapName[i1] = p->szName[7+i1]; |
23 | if( p->iId ==6 || p->iId ==5 || p->iId ==3 || p->iId == 4) |
25 | char modname[24] = {"models/b_"}; |
26 | strcat(modname, WeapName); |
27 | strcat(modname, ".mdl\0"); |
30 | bweaponmodel[i] = IEngineStudio.Mod_ForName(modname,1); |
32 | if(strcmp(WeapName,PModelname)) |
34 | m_bStudioHeader[i] = (studiohdr_t *)IEngineStudio.Mod_Extradata (bweaponmodel[i]); |
36 | IEngineStudio.StudioSetHeader( m_bStudioHeader[i] ); |
37 | StudioMergeBones( bweaponmodel[i]); |
38 | IEngineStudio.StudioSetupLighting (&lighting); |
40 | StudioCalcAttachments( ); |
41 | *m_pCurrentEntity = saveent; |
Отправлено HAWK0044 31-01-2013 в 02:05:
а ты не думал,что gHUD.m_iWeaponBits и вообще весь класс худа(включая аммо.цпп) это чисто клиентские фишки,а амхх - серверный мод? Вобщем тебе либо нужно взять pev->weapons на клиенте из энтитии игрока которого рисуешь (вроде как так нельзя сделать, не помню), либо отослать все оружия, т.е 4 байта(1 WRITE_LONG) для каждого клиента каждому клиенту с этим самым pev->weapons ну и конечно же выбранное оружие, это аж целых пять байт. можно конечно отослать 1 байт на выбранное оружие, но там уже надо по-другому делать. Ну и соответственно тебе нужно будет смотреть если ли нужное тебе оружие именно у этого игрока, а не у тебя в gHUD или где-то еще в клиентском стаффе.
Отправлено Дядя Миша 31-01-2013 в 08:14:
WeaponBits актуальны только для локального игрока. А ты проверяешь их "для себя", а пушки рисуешь "для всех".
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено marikcool 31-01-2013 в 09:18:
лучше чисто на сервере атачами сделать.
__________________
vk.com/skullcapstudios
Отправлено Дядя Миша 31-01-2013 в 16:44:
Ну да. Создаем энтить с MOVETYPE_FOLLOW, указываем в aiment игрока и всё. Точно также аттачатся флаги в CTF.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Danger 01-02-2013 в 22:37:
Цитата:
HAWK0044 писал:.... отослать все оружия, т.е 4 байта(1 WRITE_LONG) для каждого клиента каждому клиенту с этим самым pev->weapons....
А как получить pev->weapons другого игрока на серевере?
Ещо вопрос в entity_state_s есть переменые iuser1, iuser2 и т.д. В их можно передавать дание ис сервера? если да, то как?
Отправлено Ku2zoff 02-02-2013 в 03:18:
Danger в иузерах 1 и 2 передаются данные для режима наблюдения. Так что их трогать не надо.
Отправлено marikcool 02-02-2013 в 05:22:
Цитата:
Danger писал:
Ещо вопрос в entity_state_s есть переменые iuser1, iuser2 и т.д. В их можно передавать дание ис сервера? если да, то как?
через delta.lst можно расшарить на передачу любой параметр из entvars структуры.__________________
vk.com/skullcapstudios
Отправлено HAWK0044 02-02-2013 в 09:10:
Danger находишь объект класса другова игрока на сервере,например
CBasePlayer *Target = (CBasePlayer*)UTIL_PlayerByIndex(1); естественно по индексу.Ну а далее
Target->pev->weapons .
Отправлено Дядя Миша 02-02-2013 в 13:27:
Цитата:
Danger писал:
А как получить pev->weapons другого игрока на серевере?
Странный вопрос. А зачем получать pev->weapons другого игрока?
Всё решается в классе того же игрока без дополнительных проверок просто и изящно. Вы, вместо того, чтобы разобраться как всё устроено уподобляетесь тому чукче, который таскал камаз, прицепив к нему собачью упряжку. Или тому суровому лесорубу, который валил лес бензопилой, а потом ему мужыки сказали, что её завести надо.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'