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

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


Отправлено [)r0n 12-03-2011 в 00:07:

Ku2zoff, а зачем флаги? Оружие и так прекрасно подбирается, мне просто надо сделать, чтобы на экране появлялся спрайт оружия которое игрок возьмет, если нажмет на USE. Основной код при этом находиться в CBasePlayerWeapon::AddToPlayer. Т.к. благодаря новым проверкам, игрок не может взять оружие, пока не нажмет на USE.

2 Дядя Миша

code:
CBaseEntity *pEntity = NULL; while ((pEntity = UTIL_FindEntityInSphere( pEntity, pev->origin, 512 )) != NULL); { }


Вот сфера в 512 "чвототам", вот только я не знаю как сделать проверку не на все название класса, а только на его начало, т.е. сделать такую проверку...

code:
if (FClassnameIs(pEntity->pev, "weapon_mp5")


...я могу, а как проверить только на наличие в названии класса слова "weapon_"? Что то мне подсказывает, что если я напишу FClassnameIs(pEntity->pev, "weapon_"), то работать не будет.


Отправлено KiQ 12-03-2011 в 07:49:

[)r0n а почему ты не хочешь сделать вывод спрайта сразу в этом условии?

C++ Source Code:
1
if (FClassnameIs (pEntity->pev ,"weapon_mp5"){
2
  //Рисуем спрайт мп5
3
}
4
if (FClassnameIs (pEntity->pev ,"weapon_crowbar"){
5
  //Рисуем спрайт фомки
6
}
7
if (FClassnameIs (pEntity->pev ,"weapon_egon"){
8
  //Рисуем спрайт пылесоса
9
}
10
//И т.д.

__________________
-Brain is dead-


Отправлено Ku2zoff 12-03-2011 в 07:50:

>>Что то мне подсказывает, что если я напишу FClassnameIs(pEntity->pev, "weapon_"), то работать не будет.

[)r0n UTIL_FindEntityInSphere работает в определённом радиусе, игрок будет задом к оружию стоять, к тому же оружие будет за стенкой/ящиком/дверью/ещёчемто, а в ХУДе спрайт загорится. Нехорошо. Лучше сделать трейс по взгляду игрока. Ещё можно "подсветить" модель оружия, на которую направлен прицел или сделать "скобки" как в Деус Эксе, но второе сложнее.
А по поводу проверки на оружие как класс энтить вообще, придётся задать всем оружиям какую-нибудь переменную (её придётся объявить в классе CBaseEntity и по умолчанию сделать нулевой или FALSE, а для оружия единичкой или TRUE) и проверять её типа вот так:

C++ Source Code:
if (pEntity->мояпеременная != 0)
{
}


Отправлено [)r0n 12-03-2011 в 09:35:

KiQ, ок, попробуем.

Цитата:
Ku2zoff писал:
Лучше сделать трейс по взгляду игрока.


В трейсах не шарю, по этому я пока обойдусь сферами.

Цитата:
Ku2zoff писал:
Ещё можно "подсветить" модель оружия, на которую направлен прицел или сделать "скобки" как в Деус Эксе


покажешь как?


Отправлено Дядя Миша 12-03-2011 в 10:19:

Цитата:
[)r0n писал:
Что то мне подсказывает, что если я напишу FClassnameIs(pEntity->pev, "weapon_"), то работать не будет.

C++ Source Code:
1
if( !strncmp( STRING( pEntity->pev->classname ), "weapon_", 7 ))
2
{
3
  CBasePlayerWeapon *pWeapon = (CBasePlayerWeapon *)pEnnity;
4
  pWeapon->GetItemInfo(blablabla );
5
}

Цитата:
Ku2zoff писал:
Лучше сделать трейс по взгляду игрока.

угу и сидеть часами целится, чтобы трейс и оружие совпали.
Нахрен там трейс не нужен, лучше сделать проверку на FViewInCone, по типу trigger_onsight фспирите.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 12-03-2011 в 10:54:

Дядя Миша гугл подавился

Цитата:
По запросу FViewInCone не найдено ни одного документа.

__________________
-Brain is dead-


Отправлено Дядя Миша 12-03-2011 в 11:25:

Цитата:
KiQ писал:
гугл подавился

ты бы ему еще "рембытспецстройхимтресттехмонтаж" вбил, чтобы уж наверняка. Открывай combat.cpp на строчке 1170 и ога.
Правда его придется слегка переделать, поскольку он находится в классе монстров.

__________________
My Projects: download page

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

Цитата:

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


Отправлено KiQ 12-03-2011 в 11:47:

Дядя Миша ну я думал оно должно быть на вальвовской вики. Или они сами не знают всех функций что в движок напихали

Добавлено 12-03-2011 в 14:47:

А вообще мне пока что делать такую фишку не зачем. Просто возьму на заметку.

__________________
-Brain is dead-


Отправлено Ku2zoff 12-03-2011 в 12:09:

>>лучше сделать проверку на FViewInCone

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


Отправлено [)r0n 12-03-2011 в 13:26:

По поводу конуса, вот код с буржуинского форума:

C++ Source Code:
1
BOOL CBasePlayerWeapon :: CanSee(CBaseEntity *pLooker, CBaseEntity *pSeen)
2
{
3
  // out of range?
4
  if (pev->frags && (pLooker->pev->origin - pSeen->pev->origin).Length() > pev->frags)
5
    return FALSE;
6
 
7
  // check FOV if appropriate
8
  if (pev->max_health < 360)
9
  {
10
    // copied from CBaseMonster's FInViewCone function
11
    Vector2D vec2LOS;
12
    float flDot;
13
    float flComp = pev->health;
14
    UTIL_MakeVectors ( pLooker->pev->angles );
15
    vec2LOS = ( pSeen->pev->origin - pLooker->pev->origin ).Make2D();
16
    vec2LOS = vec2LOS.Normalize();
17
    flDot = DotProduct (vec2LOS , gpGlobals->v_forward.Make2D() );
18
 
19
    // ALERT(at_debug, "flDot is %f\n", flDot);
20
 
21
    if ( pev->max_health == -1 )
22
    {
23
      CBaseMonster *pMonst = pLooker->MyMonsterPointer();
24
      if (pMonst)
25
        flComp = pMonst->m_flFieldOfView;
26
      else
27
        return FALSE; // not a monster, can't use M-M-M-MonsterVision
28
    }
29
 
30
    // outside field of view
31
    if (flDot <= flComp)
32
      return FALSE;
33
  }
34
 
35
  // check LOS if appropriate
36
  if (!FBitSet(pev->spawnflags, SF_ONSIGHT_NOLOS))
37
  {
38
    TraceResult tr;
39
    if (SF_ONSIGHT_NOGLASS)
40
      UTIL_TraceLine( pLooker->EyePosition(), pSeen->pev->origin, ignore_monsters, ignore_glass, pLooker->edict(), &tr );
41
    else
42
      UTIL_TraceLine( pLooker->EyePosition(), pSeen->pev->origin, ignore_monsters, dont_ignore_glass, pLooker->edict(), &tr );
43
    if (tr.flFraction < 1.0 && tr.pHit != pSeen->edict())
44
      return FALSE;
45
  }


Добавлено 12-03-2011 в 16:26:

не могу месагу послать

в player.cpp
прописал int gmsgСoDws = 0;
затем ниже gmsgСoDws = REG_USER_MSG( "СoDws", 8 );

потом в weapons.h вставил external int gmsgСoDws;
а в weapon.cpp вставил это:

MESSAGE_BEGIN( MSG_ONE, gmsgCoDws, NULL, pev )
WRITE_STRING( STRING( pEntity->pev->classname ) );
MESSAGE_END();

вылезла ошибка:

error C2064: term does not evaluate to a function

И еще вопрос, как правильно получить мессагу на клиенте, чтобы потом отправленное можно было в tri.cpp получить?


Отправлено KiQ 12-03-2011 в 13:54:

--а в weapon.cpp вставил это:

а куда конкретно?

__________________
-Brain is dead-


Отправлено Дядя Миша 12-03-2011 в 13:59:

Цитата:
[)r0n писал:
error C2064: term does not evaluate to a function

это значит, ты пытаешься вызывать некую переменную как функцию.

__________________
My Projects: download page

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

Цитата:

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


Отправлено [)r0n 16-03-2011 в 12:48:

Наконец таки нашел где баг в серверной части: оказалось не хватает ";"

Как правильно "словить" на клиенте мою строку, чтобы в tri.pp можно было ей воспользоваться?


Отправлено SiPlus 16-03-2011 в 13:06:

Я вот что подумал: а нельзя ли сделать все это посылом сообщения клиенту от оружия через Touch оружия? К оружию прикасается игрок - оружие посылает сообщение игроку для включения элемента HUD с информацией о самом себе. Касание прекращается/игрок умирает - элемент HUD отключается.


Отправлено KiQ 16-03-2011 в 13:54:

SiPlus я так и предлагал, но вроде он хочет, чтобы спрайт рисовался и вблизи оружия, даже если непосредственного контакта нет.

__________________
-Brain is dead-


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

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