HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- SOHL Custom Build (https://hlfx.ru/forum/forumdisplay.php?forumid=15)
-- Переключение оружия в Спирите (https://hlfx.ru/forum/showthread.php?threadid=539)
Отправлено MSteam 12-02-2007 в 13:34:
Переключение оружия в Спирите
Здравствуйте, ув. форумчане. Не знаю были, ли такие вопросы, но я ничего подобного так и не нашел.
Начиная с версии 1.4, в спирите теперь оружие выбираеться с некоторой задержкой, и в это время стрелять нельзя. Мне это нововведение несколько не по душе, но я не знаю что конкретно надо редактировать.
Как сделать так, что б всё было по-старому?
Отправлено Дядя Миша 12-02-2007 в 14:52:
MSteam все просто. У каждой пушки в функции Holster есть переменная m_flHolsterTime или что-то вроде этого. Достаточно это время поставить (для каждой пушки) равным нулю и все вернется на круги своя.
Отправлено MSteam 12-02-2007 в 19:57:
Дядя Миша, спасибо.
Называлось оно правда
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.0;
О, еще вопрос:
В player.cpp, есть следуйщее:
C++ Source Code:
1 | void CBasePlayer::Spawn( void ) |
3 | // ALERT(at_console, "PLAYER spawns at time %f\n", gpGlobals->time); |
5 | pev->classname = MAKE_STRING("player"); |
6 | [B]pev->health = 100;[/B] |
8 | pev->takedamage = DAMAGE_AIM; |
Выделенное жирным - здоровье. Будет ли для меня очень сложной вещью сменить этот параметр прямо в игре, с помощью ентити?
Отправлено XaeroX 12-02-2007 в 20:19:
MSteam да вроде можно свободно менять. В спирите есть для этого trigger_changevalue 
__________________
Отправлено MSteam 12-02-2007 в 21:03:
XaeroX, энтити, конечно есть, но параметры:
Entity to affect
Keyname to change
New value set
Ввели меня в заблуждение. Пробовал первому задавать значание player, а второму нужное здоровье, но при активации ничего не произошло... Как ею пользоваться-то?
Отправлено Дядя Миша 12-02-2007 в 21:55:
MSteam а никак. Trigger_changevalue - чистая фикция и работает на 5% всех энтить.
а чтобы менять здоровье игрока есть замечательная энтить, называется trigger_hurt 
Отправлено XaeroX 13-02-2007 в 08:26:
Дядя Миша она выше 100 поднять не может.
MSteam сделай так, чтобы она активировалась от триггера игроком, и в поле "Entity to affect" напиши "*locus". Кажется, так.
__________________
Отправлено MSteam 13-02-2007 в 15:46:
Увы, не помогло.
Отправлено XaeroX 13-02-2007 в 17:16:
MSteam если ты расскажешь, чего именно тебе надо сделать, можно уже подумать о разных вариантах 
__________________
Отправлено MSteam 13-02-2007 в 21:13:
XaeroX
Спасибо, что захотел помочь=)
Ну значит так. Допустим у игрока с начала игры максимально 100 жизней.
Потом с ним чё-то просходит, он пересекает опредёленный триггер, и у него уже максимально может быть 110. Или 50 например.
Не важно, главное что б во время игры можно было изменить максимальное значение...
Хотя было б интересно как это и с бронёй делать, но это уже не так важно.
Отправлено XaeroX 14-02-2007 в 06:03:
MSteam
Сделай простенькую энтитю. Вот так, например:
C++ Source Code:
1 | class CPlayerDataModifyTrigger : public CBaseDelay |
4 | void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); |
7 | LINK_ENTITY_TO_CLASS( player_modify, CPlayerDataModifyTrigger ); |
9 | void CPlayerDataModifyTrigger::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) |
13 | if (pActivator->IsPlayer()) |
16 | pPlayer = UTIL_PlayerByIndex(1); |
20 | pPlayer->pev->health = pev->health; |
21 | pPlayer->pev->armorvalue = pev->armorvalue; |
__________________
Отправлено MSteam 14-02-2007 в 19:18:
Спасибо работает. Правда максимальное значение всё-равно остаётся 100.
Тоесть, если поставить 80 - можно вылечить до 100.
Если 180 - лечится нельзя, пока не будет меньше 100. И выличитьтся тоже можно только до 100.
Хотя, всё-равно спасибо=)
Отправлено Дядя Миша 14-02-2007 в 19:39:
MSteam в самом игроке есть ограничитель, который не дает поставить здоровье выше ста.
Ищи дефайн MAX_HEALTH.
Отправлено MSteam 15-02-2007 в 01:23:
Дядя Миша, в player.cpp в функции Спавн, нашел строчку:
C++ Source Code:
pev->max_health = pev->health; |
Если мне правильно подсказывает логика, то изменяя одно, должно изменятся и другое...%)
Почему же этого не происходит?=(
Добавлено сегодня в 03:51:
Ага, всё, разобрался. Оно берёт начальное значение.
Буду менять той-же ентитей, с новым параметром.
Дядя Миша и XaeroX, спасибо!
Добавлено сегодня в 04:23:
Эм... Надеюсь, я не слишьком надоел, но у меня еще вопрос:
В клиенте, есть файл cl_until.h, в котором задаётся цвет худа:
C++ Source Code:
1 | inline void UnpackRGB(int &r, int &g, int &b, unsigned long ulRGB)\ |
3 | r = (ulRGB & 0xFF0000) >>16;\ |
4 | g = (ulRGB & 0xFF00) >> 8;\ |
На ресурсе ВЕРК, был тутор где рекомендовалось замнить эту ф-ю на:
C++ Source Code:
1 | inline void UnpackRGB(int &r, int &g, int &b, unsigned long ulRGB) |
3 | if ( ulRGB == RGB_YELLOWISH ) |
5 | r = CVAR_GET_FLOAT( "hud_red" ); |
6 | g = CVAR_GET_FLOAT( "hud_green" ); |
7 | b = CVAR_GET_FLOAT( "hud_blue" ); |
11 | r = (ulRGB & 0xFF0000) >>16; |
12 | g = (ulRGB & 0xFF00) >> 8; |
Таким, образом я иогу менять цвет худа из косоли, такими коммандами как hud_red и т.д.
Но как мне сделать такую этнтити, которая бы меняла худ, по её активации, и самое главное, не заносила этого в конфиг?
Просто я уже делал такую чтуку, но она просто отправляла значения Ред, Грин, Блу в консоль, и при следуйщем старте игры, худ был такой, как в последний раз=(
Я хочу так-же иметь возможность задавать временный цвет, т.е. при след. запуске игры, он снова будет жёлтый...
Отправлено XaeroX 15-02-2007 в 04:31:
Когда регистрируешь cvar_t, не указывай FCVAR_ARCHIVE, и она не будет писаться в конфиг 
__________________