HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Подскажите с аптечкой
нестандартный вариант
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
KiQ
Житель форума

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

Рейтинг



Post Подскажите с аптечкой

Собственно в своей игре хочу сделать чтобы после поднятия аптечки (item_healthkit) здоровье прибавлялось не сразу а постепенно, допустим в течении 10-15сек. Я думал надо копать в func_healthcharger, но там просто делается проверка на то, держит ли игрок use. В общих чертах представляю что надо делать в цикле, но не будет ли он замораживать все другие процессы? Честно скажу что как то не сталкивался с многопоточностью и реализацией трэдов в С++, поэтому затруднение.

__________________
-Brain is dead-

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

Старое сообщение 13-01-2011 21:36
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35059
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


KiQ
Это надо делать в коде игрока (player.cpp). При поднятии аптечки просто запоминается некое значение m_flIdealHealth, а потом в PlayerPreThink пишется чтото типа:

C++ Source Code:
if (pev->health < m_flIdealHealth)
  pev->health += min(m_flIdealHealth - pev->health, gpGlobals->frametime * 0.5f);

__________________

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

Старое сообщение 13-01-2011 23:44
-
KiQ
Житель форума

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

Рейтинг



Спасибо за помощь, правда я пошел несколько иным путем, но отталкиваясь от этого. В общем сначала я изменил player.cpp - добавил функции int getCurrentHealth( void ) и void getGradualyHealth( void ). Добавил три переменных - int m_flIdealHealth, int m_idealHealthBuff и BOOL isHealthCharge. В функции PreThink прописал условие if(isHealthCharge) {
getGradualyHealth();
SetThink( getGradualyHealth );
pev->nextthink = gpGlobals->time + 0.5;
}
Вот функция getGradualyHealth():
void CBasePlayer::getGradualyHealth() {
if (pev->health < 100 && pev->health < m_idealHealthBuff + m_flIdealHealth) {
pev->health += 1;
} else {
isHealthCharge = false;
}
}
Теперь я перешел к работе в item_healthkit. В функции поднятия после if(pPlayer->TakeHealth ....
Я вписал следущее:
pPlayer->m_idealHealthBuff = pPlayer->getCurrentHealth();
pPlayer->m_flIdealHealth = gSkillData.healthkitCapacity;
pPlayer->isHealthCharge = true;
Собственно это и запускает механизм постепенного восстановления здоровья. В общем я все скомпилировал, проблем не возникло. Все работает, видно что здоровье прибавляется по единице за каждый проход функции. Но осталась одна проблема - это происходит очень быстро. Хотелось бы все же около 10-15 секунд, а происходит все примерно за секунду. Изменение значения в pev->nextthink = gpGlobals->time + 0.5 не дало результатов, и я подозреваю что использую его неправильно. Собственно подскажите пожалуйста что можно сделать, заранее благодарен

__________________
-Brain is dead-

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

Старое сообщение 14-02-2011 19:51
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



KiQ самое простое - прибавлять не по еденичке, а по 0.1 процента
Впрочем скорость прибавления будет зависеть от cl_cmdrate.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 14-02-2011 20:21
-
KiQ
Житель форума

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

Рейтинг



Дядя Миша а, то то я думал, причем тут floatы Худ я так понял будет обновлятся каждые десять проходов. А все что связано с SetThink можно убрать? Хм, насчет cl_cmdrate я так думаю надо его понизить, но это плохо скажется на сетевой игре, как я знаю.

__________________
-Brain is dead-

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

Старое сообщение 14-02-2011 20:28
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
KiQ писал:
Хм, насчет cl_cmdrate я так думаю надо его понизить, но это плохо скажется на сетевой игре, как я знаю.

а я не уверен, что он вообще в сингле дает какой-то эффект.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 14-02-2011 20:58
-
KiQ
Житель форума

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

Рейтинг



Дядя Миша в том то и дело, что там будет также кооператив и дм. Если в первый как правило играют по локалке, то со вторым все сложнее. Ну а потом, а что если игрок захочет помнять его через консоль? нехорошо получится...

__________________
-Brain is dead-

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

Старое сообщение 14-02-2011 21:02
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



KiQ ну тада вводи еще одну переменную.
и делай вот так по такому принципу

C++ Source Code:
1
if (m_flSuitUpdate <= gpGlobals->time)
2
{
3
  if (m_flSuitUpdate == 0)
4
    // play queue is empty, don't delay too long before playback
5
  m_flSuitUpdate = gpGlobals->time + SUITFIRSTUPDATETIME;
6
  else
7
    m_flSuitUpdate = gpGlobals->time + SUITUPDATETIME;
8
}

Все тчинки по сути устроены именно так.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 14-02-2011 21:36
-
KiQ
Житель форума

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

Рейтинг



Ок спасибо завтра опробую все варианты. Еще у меня одна непонятка возникла, из за которой я и добавил функцию getCurrentHealth. Я сначала написал просто pPlayer->health, после чего компил естественно ругнулся. В функции getCurrentHealth я всего лишь возвращаю значение pev->health. Но ведь насколько я знаю (возможно неправильно), pev это типа аналога this для энтить. Почему тогда он находит health, а прямое обращение к классу не находит? Да, в player.h я health не нашел, тогда откуда ее берет pev для меня непонятка.

__________________
-Brain is dead-

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

Старое сообщение 14-02-2011 21:44
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



Цитата:
KiQ писал:
pPlayer->health

pPlayer->pev->health, не тупи.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 14-02-2011 21:52
-
KiQ
Житель форума

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

Рейтинг



Дядя Миша я не туплю, я повышаю уровень квалификации в общем завтра потестю аптечку, потом отпишусь, если траффик останется. Спасибо за помощь

__________________
-Brain is dead-

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

Старое сообщение 14-02-2011 21:56
- За что?
KiQ
Житель форума

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

Рейтинг



Congratulation!

Допилил таки аптечку Все отлично работает, спасибо за советы! Прикладываю свой рассказ-тутор как же сделать плавное восстановление здоровья

Вложение: gradualy_health_charging.zip (6.7 кб)
Этот файл был скачан 243 раз.

__________________
-Brain is dead-

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

Старое сообщение 15-02-2011 20:24
- За что?
 Дядя Миша
racing for fish

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

Рейтинг



KiQ не надо нам в аттаче. Запили нормальную тему в ветке туторов.

__________________
My Projects: download page

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

Цитата:

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

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

Старое сообщение 15-02-2011 20:34
-
KiQ
Житель форума

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

Рейтинг



Дядя Миша дак там в html вроде все грамотно оформлено. Впрочем сейчас запостю в туторах.

Добавлено сегодня в 22:08:

Запостил

__________________
-Brain is dead-

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

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



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


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

Временная зона GMT. Текущее время 02:50. Новая тема    Ответить
  Предыдущая тема   Следующая тема
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