HLFX.Ru Forum
Показать все 10 сообщений этой темы на одной странице

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:
1
char PModelname[24];
2
char WeapName[24];
3
WEAPON *p;
4
 
5
for (int i = MAX_WEAPONS-1; i > 0; i-- )
6
{
7
  p = gWR.GetWeapon(i);
8
  if ( gHUD.m_iWeaponBits & ( 1 << p->iId ) )
9
  {
10
 
11
    for (int i1=0; i1<20; ++i1)
12
    {
13
      if(pweaponmodel->name[9+i1]=='.' )
14
      {
15
        PModelname[i1] = '\0';
16
      }
17
      else
18
      {
19
        PModelname[i1] = pweaponmodel->name[9+i1];
20
      }
21
      WeapName[i1] = p->szName[7+i1];
22
    }
23
    if( p->iId ==6 || p->iId ==5 || p->iId ==3 || p->iId == 4)
24
    {
25
      char modname[24] = {"models/b_"};
26
      strcat(modname, WeapName);
27
      strcat(modname, ".mdl\0");
28
 
29
 
30
      bweaponmodel[i] = IEngineStudio.Mod_ForName(modname,1);
31
 
32
      if(strcmp(WeapName,PModelname))
33
      {
34
        m_bStudioHeader[i] = (studiohdr_t *)IEngineStudio.Mod_Extradata (bweaponmodel[i]);
35
 
36
        IEngineStudio.StudioSetHeader( m_bStudioHeader[i] );
37
        StudioMergeBones( bweaponmodel[i]);
38
        IEngineStudio.StudioSetupLighting (&lighting);
39
        StudioRenderModel( );
40
        StudioCalcAttachments( );
41
        *m_pCurrentEntity = saveent;
42
      }
43
    }
44
  }
45
 
46
};
47
 


Отправлено 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'


Временная зона GMT. Текущее время 12:45.
Показать все 10 сообщений этой темы на одной странице

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