HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено ~ X ~ 22-05-2015 в 10:39:
XaeroX по кол-ву багов интел никто ещё не обошёл. FDIV - только ОДИН баг. Из тыщ мильонов. 
Кажись, у фантома каникулы
Или творческий кризис. Или наоборот - стало всё понятно 
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
Отправлено XaeroX 22-05-2015 в 10:49:
~ X ~
Ну понятное дело, у AMD багов нет.
__________________
Отправлено ***FantoM*** 22-05-2015 в 14:27:
нужна помощь
не могу создать первичную атаку в medkit как в sven coop
что делать ?
Отправлено Ku2zoff 22-05-2015 в 15:42:
***FantoM*** я тебе сейчас дам кусочек кода от инженерного ключа, который добавляет броню союзникам и бьёт врагов.
C++ Source Code:
1 | float CWPNSpanner::Attack(BOOL bSecondary) |
5 | UTIL_MakeVectors(m_pPlayer->pev->v_angle); |
6 | Vector vecSrc = m_pPlayer->GetGunPosition(); |
7 | Vector vecEnd = vecSrc + gpGlobals->v_forward * SPANNER_DISTANCE; |
9 | UTIL_TraceLine(vecSrc, vecEnd, dont_ignore_monsters, ENT(m_pPlayer->pev), &tr); |
12 | if (tr.flFraction >= 1.0) |
14 | UTIL_TraceHull(vecSrc, vecEnd, dont_ignore_monsters, head_hull, ENT(m_pPlayer->pev), &tr); |
15 | if (tr.flFraction < 1.0) |
17 | CBaseEntity *pHit = CBaseEntity::Instance(tr.pHit); |
19 | if (!pHit || pHit->IsBSPModel()) |
20 | FindHullIntersection(vecSrc, tr, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX, m_pPlayer->edict()); |
22 | vecEnd = tr.vecEndPos; |
27 | m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; |
28 | m_pPlayer->SetAnimation(PLAYER_ATTACK1); |
30 | // переменные для эвента и времени атаки |
33 | int m_iAllyPlayer = FALSE; |
36 | if (tr.flFraction >= 1.0) // мимо |
48 | CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit); |
52 | CBasePlayer *pPlayer = (CBasePlayer *)pEntity; |
54 | if (pPlayer && (pPlayer->pev->team == m_pPlayer->pev->team)) |
60 | CBasePlayer *pPlayer = (CBasePlayer *)pEntity; |
62 | pPlayer->i_ArmorHelmet += SPANNER_ARMOR_ADD; |
63 | pPlayer->i_ArmorVest += SPANNER_ARMOR_ADD; |
64 | pPlayer->i_ArmorScutes += SPANNER_ARMOR_ADD; |
66 | if (pPlayer->i_ArmorHelmet > 100) |
67 | pPlayer->i_ArmorHelmet = 100; |
68 | if (pPlayer->i_ArmorVest > 100) |
69 | pPlayer->i_ArmorVest = 100; |
70 | if (pPlayer->i_ArmorScutes > 100) |
71 | pPlayer->i_ArmorScutes = 100; |
73 | if (pPlayer->i_ArmorHelmet == 100 && |
74 | pPlayer->i_ArmorVest == 100 && |
75 | pPlayer->i_ArmorScutes == 100) |
80 | // нам не нужно кускование с одного удара по башке |
83 | if (pEntity->IsAlive()) |
84 | bitsDamage = DMG_CLUB | DMG_NEVERGIB; |
86 | bitsDamage = DMG_CLUB; |
89 | pEntity->TraceAttack(m_pPlayer->pev, SPANNER_DMG, gpGlobals->v_forward, &tr, bitsDamage); |
90 | ApplyMultiDamage(m_pPlayer->pev, m_pPlayer->pev); |
95 | if (pEntity->Classify() != CLASS_NONE && pEntity->Classify() != CLASS_MACHINE) |
102 | PLAYBACK_EVENT_FULL(0, m_pPlayer->edict(), m_usSpannerAttack, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, |
103 | 0.0, 0.0, 0, m_iAllyPlayer, m_iHit, m_iHitWorld); |
105 | if (m_iHit && m_iHitWorld) |
106 | UTIL_DecalTrace(&tr, DECAL_GUNSHOT1 + RANDOM_LONG(0, 4)); |
108 | m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + m_flDelay + 0.5; |
Маленькое пояснение: первичная атака всегда наносит урон, даже союзникам, когда mp_friendlyfire 1. Вторичная бьёт только врагов, а союзникам добавляет броню. Самое главное, что ты тут можешь посмотреть, это как определить врага/союзника, и как этим оперировать. Код старый, тебе стоило бы заменить
C++ Source Code:
if (pPlayer && (pPlayer->pev->team == m_pPlayer->pev->team)) |
на
C++ Source Code:
if (g_pGameRules->PlayerRelationship((CBaseEntity *)m_pPlayer, pEntity) == GR_TEAMMATE) |
Остальное тебе надо додумать самому. Я в свен не играл, и не уверен, работает там аптечка так же как в TFC или нет. Но код вот этой атаки в режиме вторичной совпадает с логикой из TFC: своих лечим - врагов калечим.
Отправлено ***FantoM*** 23-05-2015 в 05:31:
Ku2zoff
вот видео из свен купа https://www.youtube.com/watch?v=o8jRc7WbT8s
Отправлено Ku2zoff 23-05-2015 в 08:28:
Ну так бы сразу и написал, что оживление нужно. Сложновато, но реализуемо. Придётся писать новые таски и скедьюлы для монстров. (Task и Schedule). Дерзай. schedule.cpp и monsters.cpp, там расположен этот код.
Отправлено ***FantoM*** 23-05-2015 в 08:40:
понятно
Отправлено SteamPlay43 24-05-2015 в 07:02:
Ku2zoff А нельзя просто проверку на смерть сделать? Мне кажется, это тогда просто подбавит трупам здоровья и все)
Отправлено Ghoul [BB] 24-05-2015 в 20:18:
И как вы собираетесь трупы оживлять? С помощью аптечки?! Не смешите!
Я уж молчу про то, что с фрагом делать? Отнимать при оживлении, да?!
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
Отправлено Ku2zoff 24-05-2015 в 20:40:
Цитата:
SteamPlay43 писал:
А нельзя просто проверку на смерть сделать? Мне кажется, это тогда просто подбавит трупам здоровья и все)
Неа. Если монстр умер, простым прибавлением здоровья не отделаешься. Здоровья ты ему прибавишь, но он всё равно будет мёртв. Надо его заново спавнить как минимум. Ну или новые таски выполнять на оживление, так красивее будет, он и анимацию проиграет, и спасибо скажет. Если сам не решишь, то может быть я накодю такую штуку. Т.к. аптечку у себя в моде буду делать скоро.
Отправлено Superuser8 24-05-2015 в 21:33:
Ku2zoff хотелось бы взглянуть на такую систему ( для игрока такое ещё бы было )
Отправлено Vadiman 25-05-2015 в 18:12:
Ребят, раз тут нубские вопросы проскакивали, я бы хотел спросить: можно ли сделать так, что пока игрок держит оружие, на него не действовал определенный дамаг от trigger_hurt (dmg_nervegas, например) ?
Отправлено Ku2zoff 25-05-2015 в 20:23:
Vadiman конечно. В функции триггера CBaseTrigger::HurtTouch делаешь проверку типа:
C++ Source Code:
3 | CBasePlayer *pPlayer = (CBasePlayer*)pOther; |
4 | if ((pPlayer->m_pActiveItem->m_iId == WEAPON_MP5) && (m_bitsDamageInflict & DMG_NERVEGAS)) |
Отправлено Vadiman 25-05-2015 в 21:50:
Ku2zoff спасибо большое 
Сделал противогаз на основе оружия (либо он, либо ствол), потому как не смог разобраться как оно в параное работает.
Отправлено ***FantoM*** 26-05-2015 в 10:37:
нужна помощь
меня заинтересовал VGUI
у меня вопрос
как закруглить вгуи