HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Спрайт оружия
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



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_"), то работать не будет.

Сообщить модератору | IP: Записан
Сообщение: 73970

Старое сообщение 12-03-2011 00:07
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



[)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-

Сообщить модератору | IP: Записан
Сообщение: 73976

Старое сообщение 12-03-2011 07:49
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6871
Возраст: 34

Рейтинг



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

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

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

Сообщить модератору | IP: Записан
Сообщение: 73977

Старое сообщение 12-03-2011 07:50
- За что?
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



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

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


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

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


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

Сообщить модератору | IP: Записан
Сообщение: 73982

Старое сообщение 12-03-2011 09:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
[)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'

Сообщить модератору | IP: Записан
Сообщение: 73985

Старое сообщение 12-03-2011 10:19
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



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

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

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 73992

Старое сообщение 12-03-2011 10:54
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | IP: Записан
Сообщение: 73999

Старое сообщение 12-03-2011 11:25
-
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



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

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

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

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 74002

Старое сообщение 12-03-2011 11:47
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6871
Возраст: 34

Рейтинг



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

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

Сообщить модератору | IP: Записан
Сообщение: 74005

Старое сообщение 12-03-2011 12:09
- За что?
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



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

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 получить?

Сообщить модератору | IP: Записан
Сообщение: 74006

Старое сообщение 12-03-2011 13:26
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



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

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

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 74020

Старое сообщение 12-03-2011 13:54
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
[)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'

Сообщить модератору | IP: Записан
Сообщение: 74023

Старое сообщение 12-03-2011 13:59
-
[)r0n
Житель форума

Дата регистрации: Apr 2008
Проживает: (void)
Сообщений: 161

Рейтинг



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

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

Сообщить модератору | IP: Записан
Сообщение: 74407

Старое сообщение 16-03-2011 12:48
- За что?
SiPlus
GMod Lua Coder
Девойс

Дата регистрации: Jun 2007
Проживает: Санкт-Петербург
Сообщений: 317
Возраст: 28

Рейтинг



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

Сообщить модератору | IP: Записан
Сообщение: 74411

Старое сообщение 16-03-2011 13:06
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2090

Рейтинг



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

__________________
-Brain is dead-

Сообщить модератору | IP: Записан
Сообщение: 74413

Старое сообщение 16-03-2011 13:54
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 21:49. Новая тема    Ответить
Страницы (3): « 1 [2] 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Спрайт оружия
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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