AMX MOD X
Пятница, 29.03.2024, 11:44:47



Приветствую Вас Гость | RSS
[ Главная ] [ Reality - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 13
  • 1
  • 2
  • 3
  • 12
  • 13
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Плагины » Готовые плагины » Reality (замедление, потеря HP, кровотечение, реальные шаги и др.)
Reality
se7hДата: Среда, 04.06.2008, 14:30:16 | Сообщение # 1
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Reality v1.89.1

Поддерживаемые моды:

CS 1.6
CS:CZ

Требуемые модули:

Fakemeta

Возможности плагина:

- замедление игроков в зависимости от количества ранений в ноги и переносимой амуниции (учитывается всё, включая патроны)
- смертельно раненные игроки постепенно погибают, кровоточат, если ранение с внешней раной, и оставляют следы крови на земле
- визуальные и звуковые эффекты при ранениях различного типа
- оглушение при близком взрыве flashbang, HEnade, потеря координации, звон в ушах
- возможность отвернуться от flashbang чтобы не ослепило
- вспышка света при детонации flashbang и выстрелах оружия
- реальные звуки шагов: чем ниже скорость, тем ниже частота шага, при дакинге и ходьбе громкость шагов меньше
- автоматический переход на ходьбу при продолжительном беге, звук дыхания
- броня делится на три составные части: каска (20 едениц), грудиннный отдел (40 едениц), отдел живота (40 едениц), в сумме они дают 80 (если броня без шлема) или 100 едениц

Переменные:

amx_reality (1 - вкл., 0 - выкл. плагин, по-умолчанию "1")
real_bleed (1 - вкл., 0 - выкл. кровавые эффекты, по-умолчанию "1")
real_hplose (потеря жизней от одного ранения за определённое время (период потери HP), по умолчанию "1", "0" - отключить опцию)
real_minhp (минимальный уровень повреждения в HP, после которого появляются раны и визуальные эффекты, по умолчанию "25")
real_hptimelose (период потери HP, по умолчанию "3")
real_speed (0 - выкл. зависимость скорости от массы, 1 - вкл. зависимость без влияния на гравитацию, 2 - вкл. зависимость с влиянием на гравитацию, по умолчанию "2")
real_speedlose (падение скорости на один килограмм массы амуниции, по умолчанию "5")
real_steps (1 - вкл., 0 - выкл. звук шагов, создаваемых плагином)
real_flashed (1 - вкл., 0 - выкл. эффект от flashbang, звон в ушах и временная глухота)
real_wlight (1 - вкл., 0 - выкл. вспышки света от выстрелов)
real_flight (1 - вкл., 0 - выкл. вспышку света при детонации flashbang)
real_damaged (1 - вкл., 0 - выкл. эффект от повреждения пулей - фейд, стук сердца и тяжёлое дыхание или взрывом - потеря координации, тряска, сердцебиение, дыхание, звон, временная глухота)
real_timeweariness (время в режиме бега через которое игрок, неимеющий никакой амуниции и ранений в ноги, автоматически переходит в режим ходьбы, по умолчанию "60", "0" - отключить опцию)
real_armor (1 - вкл., 0 - выкл. реалистичную броню)

!!!Изменения переменных вступают в силу после рестарта или при смене карты!!!

Звуки из архива sounds.rar распакуйте в cstrike\sound\player

Пример расчёта скорости:

Допустим, суммарная масса переносимой амуниции равна 6 кг, значит падение будет расчитано так: newspeed = defaultspeed - 6кг*real_speedlose
Значения масс взяты из достоверных источников (сайты фирм производителей оружия, патронов и т.д. и т.п.) и полностью соответствуют действительности

Если переменная real_steps равна "1", стандартные шаги нужно отключить (mp_footsteps 0)

Усталость от бега:

Если игрок на протяжении времени равного real_timeweariness будет непрерывно двигаться в режиме бега он устанет и автоматически перейдёт на ходьбу. Об уровне усталости свидетельствует цвет иконки O2 расположенной слева экрана: если она зелёная - запас кислорода в крови и мышцах израсходован не более чем на 33%, жёлтая - не более чем на 66%, красная - Вы на пределе, мигающая - Вы переходите на шаг, если значка нет - запас кислорода на максимуме
Кислород восстанавливается за время равное real_timeweariness/2 если Вы стоите на месте и за real_timeweariness если Вы продолжаете идти после автоперехода на ходьбу

Реалистичная физика брони:

Следует отметить, что сначала расходуется броня и только потом игрок теряет HP.
Если определённая часть брони разбита, то есть равна 0, место (голова, грудина, живот) перестаёт быть защищённым, хотя при этом другие части могут оставаться под защитой
Сегменты брони расходуются по отдельности, но в сумме (стандартное отображение на HUD) при покупке дают 100 (kevlar helmet) или 80 (kevlar vest) едениц
Голова: если Вы купили броню с каской (100 едениц), из них только 20 относятся к шлему, то есть при постоянном попадании в голову снимется 20 едениц, остальные же 80 останутся нетронутыми, независимо от будущих попаданий в голову
Грудина: 40 едениц, расходуются только при попадании в грудную клетку
Живот: 40 едениц, расходуются только при попадании в живот

Code
История версий:

1.3: добавлено: реалистичные шаги                            
1.33: полный переход на fakemeta                            
1.4: убран старый механизм сердцебиения; новые эффекты при повреждении и ослеплении (новые звуки); новые переменные                            
1.41: откорректирован подсчёт количества гранат                            
1.42: изменён механизм потери HP, убрана переменная real_hpnorm, теперь всё зависит от количества ран:                            
например, если 2 раны, то потеря будет равна 2*real_hplose, если ранений 5 - 5*real_hplose                            
кровоточащие ранения появляются только в том случае, если попали в незащищённое бронижелетом или каской место и урон от попадания более 30 HP, к примеру, если брони вообще нет - раны будут появляться при попадании в любое место (разумеется если урон больше 30)                            
1.5: изменена формула расчёта скорости, теперь учитывается реальная масса амуниции; добавлены ранения с внутренним кровотечением, по принципу такие же как и кровоточащие, но не льётся кровь                            
1.55: полностью переделана часть с расчётом скорости; теперь можно задать массу любого оружия, патрона, амуниции и устройства в исходнике плагина                            
1.56: к массе амуниции добавился нож и подсчёт количества бомб (некоторые плагины добавляют возможность покупки неограниченного числа бомб)                            
1.57: коррекция части с реальными шагами, а также некоторые улучшения структуры кода                            
1.58: улучшена часть подсчёта скорости, теперь нет необходимости высчитывать изменения каждый фрейм                            
1.59: плагин доработан для совместимости с CSDM                            
1.6: усталость от длительного бега                            
1.61: упрощёна и оптимизирована часть кода                            
1.62: изменено отношения отдых:бег на более правдоподобное                            
1.64: реалистичная физика брони                            
1.65: добавлена переменная включения/отключения реалистичной брони                            
1.66: длина шага разделена на два вида: бег и ходьба                            
1.67: теперь скорость напрямую зависит от степени поврежнения ног                            
1.68: теперь учитываются повреждения от встроенного на картах оружия                            
1.69: полная совместимость с Antipersonnel Mines                            
1.7: после длительного тестирования, переделан коэффициент падения скорости от ранений в ноги, теперь скорость падает не так сильно; пофиксен баг: звон от флэшки продолжался и после смерти игрока, а также ещё несколько нюансов связаных со звуком                            
1.71: теперь время непрерывного бега зависит от общей массы амуниции и силы повреждения ног, и рассчитывается по формуле runtime = real_timeweariness*currentmaxspeed/defaultmaxspeed                            
1.72: добавлены звуки передвижения по лестнице в режиме real_steps                            
1.73: механизм замедления от усталости полностью переделан, в следствие чего исправлена проблема с переходом на шаг (+speed), раньше всё время автоматически включался бег; добавлен звук отталкивания от поверхности при прыжке                            
1.74: во время ходьбы (клавиша +speed) и дакинга (клавиша +duck) усталость не накапливается                            
1.75: звук шагов в режиме ходьбы (+speed) и дакинга (+duck) становиться тише и регулируется внутри исходника #define VOL_WALK                            
1.76: добавлена вспышка света при детонации flashbang (эффект из плагина Flashbang Dynamic Light)                            
1.77: откорректирован способ создания message                            
1.78: исправлена ошибка с возможным делением на 0                            
1.79: исправлен недочёт с потерей брони при падении с высоты                            
1.8: - добавлена совместимость с CSCZ: теперь индексы декалей крови выбираются в зависимости от мода
- если вы теряете HP слева мигает красная иконка в виде черепа
- изменён механизм расчёта скорости, теперь она также зависит от текущего оружия, как это и было в оригинальной CS
- существенная оптимизация кода
1.81: устранено несколько багов; откорректированы некоторые параметры
1.82: найдено пару недочётов и потенциальных багов
1.83: пофиксен баг: скорость передвижения не менялась если игрок поднимал или выбрасывал щит; добавлена новая переменная real_minhp
1.84: исправлена недоработка: при отключенной потере скорости (g_speedlose 0) передвижение было невозможным
1.85: добавлена совмеcтимость с CSDM; названия переменных и функций в исходнике приведёны в порядок
1.86: исправлен ещё один недочёт связанный с CSDM: плагин не переводил выдаваемую автоматически при респавне броню в real_armor, отчего та "заканчивалась" с одного выстрела
1.86.1: исправлен баг: в определённых условиях возникала слишком высокая частота шагов
1.87: ещё больше реализма (при real_speed "2", новая переменная): теперь масса амуниции влияет не только на скорость, но и на Вашу гравитацию (высота прыжков и некотрые другие зависящие от неё величины)
1.88: новый реалистичный эффект: световые вспышки от выстрелов (переменная real_wlight)
1.88.1: исправлено - скорость передвижения не изменялась если игрок подбирал оружие при _cl_autowepswitch "0"
1.89: улучшена часть с эффектами от флэшки: если вы отвернулись от гранаты вас может оглушить, но эффекта ослепления не будет; исправлен кое-какой баг связанный с оглушением и дисконнектом
1.89.1: исправлен баг: спектаторы не могли летать
Прикрепления: reality.rar (37.8 Kb) · 3832018.rar (314.4 Kb)


 
lmiolДата: Четверг, 05.06.2008, 16:29:36 | Сообщение # 2
Лейтенант
Группа: Пользователи
Сообщений: 44
Репутация: 0
Статус: Не в сети
все выглядит заманчиво но врятли играбельно в самой кс УЖ больно людям нравиться как оно и есть :D
 
se7hДата: Четверг, 05.06.2008, 19:23:00 | Сообщение # 3
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (lmiol)
все выглядит заманчиво но врятли играбельно в самой кс УЖ больно людям нравиться как оно и есть

ИМХО, КС 1.6 слишком сказочна сама по себе B)


 
slogicДата: Пятница, 06.06.2008, 22:42:37 | Сообщение # 4
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Code
public client_disconnect(id)
      set_pev(id, pev_maxspeed, DEFSPEED)

Думаешь, от этого есть какой толк?

В этом обработчике лучше всего все taskи для данного игрока удалить.

В new_round() используешь get_playersnum(). А ты уверен что id не присваиваются больше get_players()? По мне игра может сделать это запросто. Поэтому надежнее в этом случае использовать get_players(), заодно отфильтруешь HLTV клиентов.

В speed() нельзя возвращать PLUGIN_CONTINUE, потому что это обработчик FM функции. Для этого используется FMRES_IGNORED или FMRES_HANDLED (см. fakemeta_const.inc).

В остальных функциях по-моему можно смело выкинуть возвращение PLUGIN_CONTINUE, т.к. оно не нужно вообще.

PS. Жена все время обижается, что я не хвалю ее. А уменя такая дурная привычка, что я всех по себе сужу. Так что я исправляюсь, плагин в целом качественно написан. Респект! :)

 
se7hДата: Суббота, 07.06.2008, 10:05:01 | Сообщение # 5
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (slogic)
public client_disconnect(id)set_pev(id, pev_maxspeed, DEFSPEED)

Думаешь, от этого есть какой толк?

скорее всего нет, понимаю, что при следующем коннекте скорость установится по дефолту, но эт я для перестраховки )))

Quote (slogic)
В этом обработчике лучше всего все taskи для данного игрока удалить.

согласен

Quote (slogic)
В new_round() используешь get_playersnum(). А ты уверен что id не присваиваются больше get_players()? По мне игра может сделать это запросто. Поэтому надежнее в этом случае использовать get_players(), заодно отфильтруешь HLTV клиентов.

new players[32], num
get_players(players, num, "h")
for(new i=0; i<num; i++)

таким образом?

Quote (slogic)
В speed() нельзя возвращать PLUGIN_CONTINUE, потому что это обработчик FM функции. Для этого используется FMRES_IGNORED или FMRES_HANDLED (см. fakemeta_const.inc).

учту

Quote (slogic)
В остальных функциях по-моему можно смело выкинуть возвращение PLUGIN_CONTINUE, т.к. оно не нужно вообще.

мысль такая была, но для перестраховки оставил

Спасибо за конструктивную критику! ;)


 
DaTaДата: Суббота, 07.06.2008, 11:26:42 | Сообщение # 6
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Code
    if(newspeed < 0)
   newspeed = 1.0

(newspeed имеет тип Float)
дело в том, что Float - это тип, который не поддерживает pawn компилятор, поэтому что-бы его эмулировать используют перегрузку операторов для работы с ним(см. float.inc)
Code

stock bool:operator<(Float:oper1, oper2)
  return floatcmp(oper1, float(oper2)) < 0;

для правого операнда(к нулю) будет применена еще дополнительно функция float(), потому что он имеет тип int, что бы такой излишности небыло нужно для Float чисел делать такую запись:
Code
    if(newspeed < 0.0)
   newspeed = 1.0

тогда будет такая перегрузка:
Code
stock bool:operator<(Float:oper1, Float:oper2)
  return floatcmp(oper1, oper2) < 0;

можешь скомпилировать два варианта и сравнить размеры файла, если не веришь, или дизассемблить и сравнить кол-во инструкций
-------------
Code
    if(pev(id, pev_button) & IN_FORWARD|IN_BACK|IN_LEFT|IN_RIGHT && pev(id, pev_flags) & FL_ONGROUND)
  {

эта часть кода сработает не так как задумалось. Почему? Потому что

Code
pev(id, pev_button) & IN_FORWARD|IN_BACK|IN_LEFT|IN_RIGHT
будет всегда возвращать число != 0 из-за неправильной расстановки приоритетов, в твоем случае это эквивалентно такой записи:
Code
(pev(id, pev_button) & IN_FORWARD) |IN_BACK|IN_LEFT|IN_RIGHT

(см. таблицу приоритетов pawn'а http://www.compuphase.com/pawn/pawn-lang.pdf )

нужно было записать так:

Code
pev(id, pev_button) & (IN_FORWARD|IN_BACK|IN_LEFT|IN_RIGHT)

--------------
Code
    static textype[2]
  textype[0] = texturetype(id)

  if(equal(textype, "C"))
   emit_sound(id, CHAN_BODY, simplesteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "M"))
   emit_sound(id, CHAN_BODY, metalsteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "W"))
   emit_sound(id, CHAN_BODY, tilesteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "V"))
   emit_sound(id, CHAN_BODY, ventsteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "D"))
   emit_sound(id, CHAN_BODY, dirtsteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "S"))
   emit_sound(id, CHAN_BODY, liquidsteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "T"))
   emit_sound(id, CHAN_BODY, tilesteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "G"))
   emit_sound(id, CHAN_BODY, gratesteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else if(equal(textype, "N"))
   emit_sound(id, CHAN_BODY, snowsteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  else
   emit_sound(id, CHAN_BODY, simplesteps[num[id]], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)

оптимизируется так
Code
switch(texturetype(id))
{
  case 'C':
   emit_sound(id, CHAN_BODY, simplesteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'M':
   emit_sound(id, CHAN_BODY, metalsteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'W':
   emit_sound(id, CHAN_BODY, tilesteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'V':
   emit_sound(id, CHAN_BODY, ventsteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'D':
   emit_sound(id, CHAN_BODY, dirtsteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'S':
   emit_sound(id, CHAN_BODY, liquidsteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'T':
   emit_sound(id, CHAN_BODY, tilesteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'G':
   emit_sound(id, CHAN_BODY, gratesteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  case 'N':
   emit_sound(id, CHAN_BODY, snowsteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
  default:
   emit_sound(id, CHAN_BODY, simplesteps[random(4)], VOL_STEP, ATTN_NORM, 0, PITCH_NORM)
}
 
se7hДата: Суббота, 07.06.2008, 15:33:19 | Сообщение # 7
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
приятно читать советы опытных скриптеров, все будет учтено в новой версии
спасибо ребята ;)


 
WhiteBearДата: Суббота, 07.06.2008, 17:48:41 | Сообщение # 8
Подполковник
Группа: Пользователи
Сообщений: 132
Репутация: 2
Статус: Не в сети
se7h, может тады местному опытному народу и остальные свои наработки покажешь? ) С целью их оптимизации и улучшения конечно..
 
se7hДата: Суббота, 07.06.2008, 23:09:34 | Сообщение # 9
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (WhiteBear)
se7h, может тады местному опытному народу и остальные свои наработки покажешь? ) С целью их оптимизации и улучшения конечно..

нельзя людей перегружать, всё будет по порядку B)


 
makSuSДата: Воскресенье, 08.06.2008, 10:55:55 | Сообщение # 10
Подполковник
Группа: Пользователи
Сообщений: 111
Репутация: 0
Статус: Не в сети
можно ли сделать так, что при падении с высоты (при отнятии HP) и при попадании в игрока пули сердцебиение повышалось? :) и вообще роскошь - если рядом с игроком (5 метров и менее) бегает враг с ножом, то сердцебиение так же увеличивает свою частоту ;)
 
VENДата: Воскресенье, 08.06.2008, 15:05:55 | Сообщение # 11
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
вообще роскошь - если рядом с игроком (5 метров и менее) бегает враг с ножом, то сердцебиение так же увеличивает свою частоту
Прикольная идея. :]
 
se7hДата: Воскресенье, 08.06.2008, 18:37:22 | Сообщение # 12
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
Quote (makSuS)
можно ли сделать так, что при падении с высоты (при отнятии HP) и при попадании в игрока пули сердцебиение повышалось?

эта идея мне нравится и я её реализую

Quote (makSuS)
и вообще роскошь - если рядом с игроком (5 метров и менее) бегает враг с ножом, то сердцебиение так же увеличивает свою частоту

думаю тоже можно было бы сделать и необязательно чтобы с ножом игрок бегал, если просто заметить врага, сердцебиение будет чаще




Сообщение отредактировал se7h - Воскресенье, 08.06.2008, 18:38:41
 
makSuSДата: Воскресенье, 08.06.2008, 18:48:10 | Сообщение # 13
Подполковник
Группа: Пользователи
Сообщений: 111
Репутация: 0
Статус: Не в сети
Quote
если просто заметить врага, сердцебиение будет чаще

имхо будет большая нагрузка на сервер и явно бред - на карте de_dust2 ты видишь ногу игрока с точки А до точки Б и у тебя повышается сердцебиение? blink

короче вот мой букет предложений:
-сделать возможность включения/выключения следующих функций плагина посредством изменений параметров кваров.
-добавить возможность увеличения сердцебиения из за получаемых повреждений
-добавить возможность увеличения сердцебиения от "страха" который игрок испытывает при виде игрока с ножом на близком растоянии (так же возможность изменять это растоянии посредством изменений параметров кваров)
-совместить этот плагин с плагином http://amxmodx.ucoz.ru/forum/4-1697-1 - при зуме и появлении игрока на прицеле сердцебиение замедляется (типо игрок замедляет дыхание для прицеливания)

Сообщение отредактировал makSuS - Воскресенье, 08.06.2008, 19:12:03
 
se7hДата: Воскресенье, 08.06.2008, 22:44:10 | Сообщение # 14
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
я подумал, не буду делать фишку с учащением сердцебиения при виде врага, слишком неоднозначно всё
сделаю от попадания пули или от падения

насчёт замедления при зуме - это нереалистично, почему сердце должно биться медленно? представь картину - человек ранен, в ушах слышен стук сердца, ещё чуть-чуть и он умрёт от ран, из последних сил вглядывается в прицел в надежде хоть кого-то напоследок шлёмнуть и тут сердце загадочным образом замедляет ход... сказка, будет скорее наоборот, учащение


 
slogicДата: Понедельник, 09.06.2008, 13:27:54 | Сообщение # 15
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (se7h)
скорее всего нет, понимаю, что при следующем коннекте скорость установится по дефолту, но эт я для перестраховки )))

дело в том, что игрок уже реально отключен в client_disconnect(), и ты устанавшиваешь свойства фиктивному объекту, который будет уничтожен или очищен.

Quote (se7h)
new players[32], num
get_players(players, num, "h")
for(new i=0; i<num; i++)

таким образом?

Только учти, что ID игроков берутся так: players[i], а не так: i (распространенная ошибка).

 
AMX Mod X Форум » Плагины » Готовые плагины » Reality (замедление, потеря HP, кровотечение, реальные шаги и др.)
  • Страница 1 из 13
  • 1
  • 2
  • 3
  • 12
  • 13
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024