...я могу, а как проверить только на наличие в названии класса слова "weapon_"? Что то мне подсказывает, что если я напишу FClassnameIs(pEntity->pev, "weapon_"), то работать не будет.
Отправлено KiQ 12-03-2011 в 07:49:
[)r0n а почему ты не хочешь сделать вывод спрайта сразу в этом условии?
C++ Source Code:
1 | if (FClassnameIs (pEntity->pev ,"weapon_mp5"){ |
4 | if (FClassnameIs (pEntity->pev ,"weapon_crowbar"){ |
7 | if (FClassnameIs (pEntity->pev ,"weapon_egon"){ |
8 | //Рисуем спрайт пылесоса |
__________________
-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 )) |
3 | CBasePlayerWeapon *pWeapon = (CBasePlayerWeapon *)pEnnity; |
4 | pWeapon->GetItemInfo(blablabla ); |
Цитата:
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) |
4 | if (pev->frags && (pLooker->pev->origin - pSeen->pev->origin).Length() > pev->frags) |
7 | // check FOV if appropriate |
8 | if (pev->max_health < 360) |
10 | // copied from CBaseMonster's FInViewCone function |
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() ); |
19 | // ALERT(at_debug, "flDot is %f\n", flDot); |
21 | if ( pev->max_health == -1 ) |
23 | CBaseMonster *pMonst = pLooker->MyMonsterPointer(); |
25 | flComp = pMonst->m_flFieldOfView; |
27 | return FALSE; // not a monster, can't use M-M-M-MonsterVision |
30 | // outside field of view |
35 | // check LOS if appropriate |
36 | if (!FBitSet(pev->spawnflags, SF_ONSIGHT_NOLOS)) |
39 | if (SF_ONSIGHT_NOGLASS) |
40 | UTIL_TraceLine( pLooker->EyePosition(), pSeen->pev->origin, ignore_monsters, ignore_glass, pLooker->edict(), &tr ); |
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()) |
Добавлено 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-