Перейти к содержимому


Фотография

Доработка L4D2 SourceMod плагинов: Loot of Zombies, B&W on Defib, Bile the World


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 23 Октябрь 2022 - 21:51

Всем привет.
Есть несколько заброшенных SourceMod плагинов с AM по Left 4 Dead 2, в которых хотелось бы пофиксить баги и добавить пару фич/кваров. Самостоятельно у меня не получилось, а сами авторы плагинов давно их забросили и не отвечают.
Буду благодарен за помощь и готов заплатить за работу (пишите, сколько будут стоить фиксы/фичи).
 
Loot of Zombies
 
Баг:
Все выпадающие канистры, баллоны, фейерверки (Group 7 внутри исходника .sp), НЕ взрываются, если в них стрелять, пока их не возьмёшь в руки хотя бы раз (после этого становятся интерактивными и взрываются при выстреле по ним). 
 
Фичи:
  1. В плагине есть все заражённые, кроме ведьмы. Добавить с неё лут по аналогии с остальными, чтобы были такие же настройки и квары.
  2. Добавить выпадение лазеров по аналогии с другим лутом, чтобы они могли появиться на земле после убийства заражённого.
 
Black and White on Defib
 
В последней рабочей версии, которую мне удалось найти, нету квара для настройки кол-ва инкапов после дефиба.
В первых версиях плагина был следующий квар:
l4d2_bwdefib_incaps - Number of remaining incaps with which a defibed survivor is brought back. Default 0

Которым можно было настроить кол-во оставшихся инкапов после поднятия с дефиба.

Хочется вернуть эту настройку обратно.
Во вложении исходник первой версии и последней рабочей, в которой нет этого квара.
 
Bile the World
 
В плагине есть квар:
// If 1, Turn on Bile the World on Boomer Death to common infected, S.I., witch and tank.
l4d2_bile_the_world_boomer_death "1"

Хотело бы добавить ему больше вариантов настройки БЕЗ common infected, пример:

l4d2_bile_the_world_boomer_death 2 // Бумер при взрыве задевает только SI.
l4d2_bile_the_world_boomer_death 3 // Только боссов (witch and tank).
l4d2_bile_the_world_boomer_death 4 // SI И боссов.
 
-- 
По необходимости могу скинуть ссылки на AM с темами плагинов, где я их брал.
Буду благодарен любой помощи.

Прикрепленные файлы


  • Elllymn, KelType и StevMype это нравится

#2 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 24 Октябрь 2022 - 10:29

Я даже не знаю как на это реагировать) Вы там случайно не hardmod сборку делаете?).

По поводу плагинов)
1. l4d2_loot - Там проблема именно как спаун вещей делается (через sv_cheats команду). Скажем так, я наверное единственный кто дорабатывал и переписал потом с нуля.
Вопрос в другом)
- Вы можете использовать то что у вас уже есть с дополнительным плагином который исправляет данный баг
- Вы можете использовать последнюю версию 1.8, которую я обновлял до 2017 года и выкладывал тут + с дополнительным плагином
- Или я могу обновить версию 1.8  чтобы спаун был без sv_cheats способа. Тогда вам не надо будет использовать дополнительные плагины.

Свою версию 2.6 я не предлагаю так как она завязана нативами и другими плагинам и вы просто не осилите его так как там нет настроек cvar.

2. l4d2_bwdefib - там не нужен cvar l4d2_bwdefib_incaps
Так как есть стандартный cvar  который можно просто добавить в .cfg файл)

sm_cvar survivor_revive_health 40 - (по умолчанию "30") - временное здоровье выжившего после возрождения.

3. l4d2_biletheworld - автор версии 1.3.0 это HarryPotter он активный, и скорее всего сделает вашу просьбу когда будет у него время.


Сообщение отредактировал dr_lex: 24 Октябрь 2022 - 23:08

  • Mos это нравится

#3 AlexMy

AlexMy

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 032 сообщений

Отправлено 24 Октябрь 2022 - 20:49

hardmod 

Что это значит?



#4 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 24 Октябрь 2022 - 22:53

Что это значит?

https://forum.myaren...mod/?hl=hardmod


  • Mos это нравится

#5 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 25 Октябрь 2022 - 22:37

Я даже не знаю как на это реагировать) Вы там случайно не hardmod сборку делаете?).

По поводу плагинов)
1. l4d2_loot - Там проблема именно как спаун вещей делается (через sv_cheats команду). Скажем так, я наверное единственный кто дорабатывал и переписал потом с нуля.
Вопрос в другом)
- Вы можете использовать то что у вас уже есть с дополнительным плагином который исправляет данный баг
- Вы можете использовать последнюю версию 1.8, которую я обновлял до 2017 года и выкладывал тут + с дополнительным плагином
- Или я могу обновить версию 1.8  чтобы спаун был без sv_cheats способа. Тогда вам не надо будет использовать дополнительные плагины.

Свою версию 2.6 я не предлагаю так как она завязана нативами и другими плагинам и вы просто не осилите его так как там нет настроек cvar.

2. l4d2_bwdefib - там не нужен cvar l4d2_bwdefib_incaps
Так как есть стандартный cvar  который можно просто добавить в .cfg файл)

sm_cvar survivor_revive_health 40 - (по умолчанию "30") - временное здоровье выжившего после возрождения.

3. l4d2_biletheworld - автор версии 1.3.0 это HarryPotter он активный, и скорее всего сделает вашу просьбу когда будет у него время.

 

1. Большое спасибо, не знал, что это не баг плагина, а проблема спауна через sv_cheats. Установил Physics fix из этого поста, проверил, всё работает, одной проблемой меньше.

 

А чем отличается ваш Loot of Zombies версии 1.8 и 2.6 от оригинала? Я просто последнюю версию брал здесь, вроде работает стабильно.

 

2. Мне как раз таки нужен квар incaps, чтобы регулировать их кол-во после дефиба. Условно говоря, чтобы после дефиба не 2 раза можно было инкапнуться, прежде, чем BW будет, а 1.

 

3. Да, с Гарри я уже связывался, но он готов только за $ доделать хотелки и нет, крипту он не принимает (а по другому я не могу ему $ перевести за работу, к сожалению).

 

P. S.

Скрытый текст


#6 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 25 Октябрь 2022 - 22:48

2. Мне как раз таки нужен квар incaps, чтобы регулировать их кол-во после дефиба. Условно говоря, чтобы после дефиба не 2 раза можно было инкапнуться, прежде, чем BW будет, а 1.

Ну так, установи в конфиг:
sm_cvar survivor_max_incapacitated_count "1"


  • Mos это нравится

#7 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 25 Октябрь 2022 - 22:53

Ну так, установи в конфиг:
sm_cvar survivor_max_incapacitated_count "1"

 

Это общее кол-во инкапов, а плагин позволял устанавливать их оставшееся кол-во после поднятия с дефиба.



#8 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 25 Октябрь 2022 - 23:16

Это общее кол-во инкапов, а плагин позволял устанавливать их оставшееся кол-во после поднятия с дефиба.

Серьезно?

Скрытый текст

Плагин рассчитан на то, что после оживления игрок будет на грани смерти, он таким и становится, что при оживлении игрок на грани смерти, и при падении после оживления он умрет.

Так что, с новой версией ничего менять не нужно. Игрок будет иметь лишь одно падение после оживления дефибом.

Он не меняет количество падений после дефиба, а выставляет количество текущих падений при оживлении игрока.


Сообщение отредактировал BloodyBlade: 25 Октябрь 2022 - 23:21

  • Mos это нравится

#9 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 26 Октябрь 2022 - 1:31

1. Большое спасибо, не знал, что это не баг плагина, а проблема спауна через sv_cheats. Установил Physics fix из этого поста, проверил, всё работает, одной проблемой меньше.
 
А чем отличается ваш Loot of Zombies версии 1.8 и 2.6 от оригинала? Я просто последнюю версию брал здесь, вроде работает стабильно.

Версия v1.8 это последняя версия от автора Jonny) Чем отличие от v1.6 я не могу сказать так как не сравнивал их.
Я только перевел по сути на новый syntax когда переходил на Sourcemod 1.8 больше изменений я там не делал

Версия v2.6 (на данный момент) это уже переписанная версия под моим авторством. От оригинала там остался только шаблон по рандомному выпадению вещей.

Чем отличается:
1. Старый оригинальный v1.8 состоит из 2809 строк кода (это если сравнивать с тем что я обновил). Версия v2.6 из 1665 строк кода.
2. Изменен метод стауна вещей, так же исправлена проблема когда вещи застревали в текстурах или улетали за карту.
3. Добавлена поддержка выпадания оружия разных видов скинов (например: золотой лом и все что добавили после последнего DLC). А так же рандомное изменение патронов (например выпал Ak47 а там может быть с 0 патронов до полного комплекта)
4. Добавлены классы по лимиту, чтобы топ оружие не падало через каждого босса.
 

3. Да, с Гарри я уже связывался, но он готов только за $ доделать хотелки и нет, крипту он не принимает (а по другому я не могу ему $ перевести за работу, к сожалению).

добавил новый cvar

l4d2_bile_the_world_boomer_death_vomit 1
1 - Только живые (по умолчанию)
2 - Только ведьма и танк
3 - Все

Там заблев делается в двух вариантах
1. От смерти толстого и 2 от уничтожение объекта (то есть при взрыве живота)

Добавил только в событие взрыва живота, по идеи этого достаточно должно быть.

Сам код не проверял, так что могу ошибиться в правильности кода

 


Сообщение отредактировал dr_lex: 26 Октябрь 2022 - 1:33

  • Mos это нравится

#10 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 29 Октябрь 2022 - 15:01

Серьезно?

Скрытый текст

Плагин рассчитан на то, что после оживления игрок будет на грани смерти, он таким и становится, что при оживлении игрок на грани смерти, и при падении после оживления он умрет.

Так что, с новой версией ничего менять не нужно. Игрок будет иметь лишь одно падение после оживления дефибом.

Он не меняет количество падений после дефиба, а выставляет количество текущих падений при оживлении игрока.

 

Извиняюсь, если не правильно понял сообщение, но я попробовал добавить в конфиг квару sm_cvar survivor_max_incapacitated_count 1 и проверил — она меняет общее кол-во инкапов, не зависимо от причины. Т. е. не важно, с дефиба игрока оживили или открыли его, у всех игроков будет указанное в этой кваре кол-во инкапов до ЧБ экрана.

 

В общем, я открыл 2 исходника и перенёс логику с кол-вом инкапов из старой версии в новую. Вроде, операция прошла успешно : ) Там синтаксис отличался, но по аналогии удалось добавить переменную с кол-во инкапов, значение которой назначается игроку после оживления с дефиба в Event_PlayerDefibed:

int  MaxIncaps = GetConVarInt(FindConVar("survivor_max_incapacitated_count"));
SetEntProp(iSubject, Prop_Send, "m_currentReviveCount", (MaxIncaps - GetConVarInt(hg_RemainingIncaps)));

if (GetEntProp(iSubject, Prop_Send, "m_currentReviveCount") == MaxIncaps) {
    SetEntProp(iSubject, Prop_Send, "m_isGoingToDie", 1);
   SetEntProp(iSubject, Prop_Send, "m_bIsOnThirdStrike", 1);
}

В итоге, теперь можно сделать так, что у игроков как обычно 2 инкапа до ЧБ, а вот после оживления с дефиба у игрока будет 1 инкап до ЧБ.

 

Доработанный исходник во вложении.

Вопрос с  B&W on Defib решён, осталось разобраться с Loot of Zombies и Bile the World. 

 

 

 

 

 

 

 

 

 

Версия v1.8 это последняя версия от автора Jonny) Чем отличие от v1.6 я не могу сказать так как не сравнивал их.
Я только перевел по сути на новый syntax когда переходил на Sourcemod 1.8 больше изменений я там не делал

Версия v2.6 (на данный момент) это уже переписанная версия под моим авторством. От оригинала там остался только шаблон по рандомному выпадению вещей.

Чем отличается:
1. Старый оригинальный v1.8 состоит из 2809 строк кода (это если сравнивать с тем что я обновил). Версия v2.6 из 1665 строк кода.
2. Изменен метод стауна вещей, так же исправлена проблема когда вещи застревали в текстурах или улетали за карту.
3. Добавлена поддержка выпадания оружия разных видов скинов (например: золотой лом и все что добавили после последнего DLC). А так же рандомное изменение патронов (например выпал Ak47 а там может быть с 0 патронов до полного комплекта)
4. Добавлены классы по лимиту, чтобы топ оружие не падало через каждого босса.
 

добавил новый cvar

l4d2_bile_the_world_boomer_death_vomit 1
1 - Только живые (по умолчанию)
2 - Только ведьма и танк
3 - Все

Там заблев делается в двух вариантах
1. От смерти толстого и 2 от уничтожение объекта (то есть при взрыве живота)

Добавил только в событие взрыва живота, по идеи этого достаточно должно быть.

Сам код не проверял, так что могу ошибиться в правильности кода

 

Судя по описанию, версия v2.6 Loot of Zombies переработана капитально, можно с ней ознакомиться? Есть ссылка на гит?

 

 

 

Спасибо за помощь с Bile the World, но, не сработало. Сначала не работало, потому что новая квара была логического типа, я её изменил на целочисленную. Потом понял, что не работает потому, что её проверка происходит в методе для игроков, а не заражённых.

 

В общем, я начал опытным путём менять условия с заражёнными, но застрял на том, что не знаю как правильно называются классы заражённых. 

Всё происходит в методе VomitSplash:

void VomitSplash(bool BoomerDeath, float pos[3], int client)
{		

        ...
	
	if (BoomerDeath)
	{

                ...
	
		char class[STRINGLENGTH_CLASSES];
	
		int maxents = GetMaxEntities();
		for (int i = MaxClients+1; i <= maxents; i++)
		{
			if (!IsValidEdict(i)) continue;
			GetEdictClassname(i, class, sizeof(class));
			
			if (strcmp(class, CLASS_ZOMBIE) != 0 && strcmp(class, CLASS_WITCH) != 0) continue;
			
			SetClientEyePosition(i, targetpos);
			if (GetVectorDistance(pos, targetpos) > g_fBoomerDeath_Radius || !IsVisibleTo(pos, targetpos))
			{
				continue;
			}
			
			L4D2_Infected_OnHitByVomitJar(i, client);
		}
	}

        ...

}

Здесь проверка, что объект, которого задел взрыв бумера, является классом CLASS_ZOMBIE _И_ классом CLASS_WITCH. Почему тут ведьма отдельно мне не понятно и если вместо них добавлять условие типа:

if (StrEqual(class, "hunter") || (StrEqual(class, "charger") || (StrEqual(class, "tank") ) { ...

То ничего не работает. Также пробовал:

GetEntProp(i, Prop_Send, ENTPROP_ZOMBIE_CLASS) == 8

Тоже не сработало и я не смог найти API по L4D2, где были бы перечислены классы заражённых, их индексы и т. п. Нашёл только ивенты и энтити, а где тут найти перечень классов, переменных заражённых?

 

Как в вышеуказанном участке кода корректно написать условие, что если объект, которого задел взрыв бумера, является хантером ИЛИ танком ИЛИ громом и т. д. с перечислением всех особых, чтобы можно было по необходимости убирать/добавлять нужных?

Прикрепленные файлы

  • Прикрепленный файл  l4d2_BWDefib.sp   2,62К   5 Количество загрузок:

Сообщение отредактировал Mos: 29 Октябрь 2022 - 15:02


#11 BloodyBlade

BloodyBlade

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 102 сообщений

Отправлено 29 Октябрь 2022 - 16:26

Извиняюсь, если не правильно понял сообщение, но я попробовал добавить в конфиг квару sm_cvar survivor_max_incapacitated_count 1 и проверил — она меняет общее кол-во инкапов, не зависимо от причины. Т. е. не важно, с дефиба игрока оживили или открыли его, у всех игроков будет указанное в этой кваре кол-во инкапов до ЧБ экрана.

 

В общем, я открыл 2 исходника и перенёс логику с кол-вом инкапов из старой версии в новую. Вроде, операция прошла успешно : ) Там синтаксис отличался, но по аналогии удалось добавить переменную с кол-во инкапов, значение которой назначается игроку после оживления с дефиба в Event_PlayerDefibed:

int  MaxIncaps = GetConVarInt(FindConVar("survivor_max_incapacitated_count"));
SetEntProp(iSubject, Prop_Send, "m_currentReviveCount", (MaxIncaps - GetConVarInt(hg_RemainingIncaps)));

if (GetEntProp(iSubject, Prop_Send, "m_currentReviveCount") == MaxIncaps) {
    SetEntProp(iSubject, Prop_Send, "m_isGoingToDie", 1);
   SetEntProp(iSubject, Prop_Send, "m_bIsOnThirdStrike", 1);
}

В итоге, теперь можно сделать так, что у игроков как обычно 2 инкапа до ЧБ, а вот после оживления с дефиба у игрока будет 1 инкап до ЧБ.

Вот честно, та версия старая, и та, что сделал ты, назвать так, как назван исходник, это некорректно. Скорее L4D2_ReviveCountBeforeBW, потому-что, само название плагина оригинального подразумевает, что игрок, возрожденный дефибом будет уже ч/б, т.е. при следующем инкапе после оживления, он умрет, а не с 1 или с 2-умя инкапами до ч/б.


  • Mos это нравится

#12 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 29 Октябрь 2022 - 22:09

Вот честно, та версия старая, и та, что сделал ты, назвать так, как назван исходник, это некорректно. Скорее L4D2_ReviveCountBeforeBW, потому-что, само название плагина оригинального подразумевает, что игрок, возрожденный дефибом будет уже ч/б, т.е. при следующем инкапе после оживления, он умрет, а не с 1 или с 2-умя инкапами до ч/б.

 

Согласен, спасибо за корректировку. Переименованная версия во вложении.

Прикрепленные файлы



#13 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 30 Октябрь 2022 - 0:20

Судя по описанию, версия v2.6 Loot of Zombies переработана капитально, можно с ней ознакомиться? Есть ссылка на гит?

Я же вроде написал ещё в начале =)

Скрытый текст

 

Спасибо за помощь с Bile the World, но, не сработало. Сначала не работало, потому что новая квара была логического типа, я её изменил на целочисленную. Потом понял, что не работает потому, что её проверка происходит в методе для игроков, а не заражённых.
 
В общем, я начал опытным путём менять условия с заражёнными, но застрял на том, что не знаю как правильно называются классы заражённых.
Всё происходит в методе VomitSplash:

void VomitSplash(bool BoomerDeath, float pos[3], int client)
{        

        ...
    
    if (BoomerDeath)
    {

                ...
    
        char class[STRINGLENGTH_CLASSES];
    
        int maxents = GetMaxEntities();
        for (int i = MaxClients+1; i <= maxents; i++)
        {
            if (!IsValidEdict(i)) continue;
            GetEdictClassname(i, class, sizeof(class));
            
            if (strcmp(class, CLASS_ZOMBIE) != 0 && strcmp(class, CLASS_WITCH) != 0) continue;
            
            SetClientEyePosition(i, targetpos);
            if (GetVectorDistance(pos, targetpos) > g_fBoomerDeath_Radius || !IsVisibleTo(pos, targetpos))
            {
                continue;
            }
            
            L4D2_Infected_OnHitByVomitJar(i, client);
        }
    }

        ...

}
Здесь проверка, что объект, которого задел взрыв бумера, является классом CLASS_ZOMBIE _И_ классом CLASS_WITCH. Почему тут ведьма отдельно мне не понятно и если вместо них добавлять условие типа:
if (StrEqual(class, "hunter") || (StrEqual(class, "charger") || (StrEqual(class, "tank") ) { ...
То ничего не работает. Также пробовал:
GetEntProp(i, Prop_Send, ENTPROP_ZOMBIE_CLASS) == 8
Тоже не сработало и я не смог найти API по L4D2, где были бы перечислены классы заражённых, их индексы и т. п. Нашёл только ивенты и энтити, а где тут найти перечень классов, переменных заражённых?
 
Как в вышеуказанном участке кода корректно написать условие, что если объект, которого задел взрыв бумера, является хантером ИЛИ танком ИЛИ громом и т. д. с перечислением всех особых, чтобы можно было по необходимости убирать/добавлять нужных?

 

Пробуй так
Сделал на l4d2_bile_the_world_boomer_death все.

Сам не проверял, так что может что-то нет!


Вот честно, та версия старая, и та, что сделал ты, назвать так, как назван исходник, это некорректно. Скорее L4D2_ReviveCountBeforeBW, потому-что, само название плагина оригинального подразумевает, что игрок, возрожденный дефибом будет уже ч/б, т.е. при следующем инкапе после оживления, он умрет, а не с 1 или с 2-умя инкапами до ч/б.

Смысла даже нет!


  • Mos это нравится

#14 Mos

Mos

    Новичок

  • Пользователь
  • Pip
  • 9 сообщений

Отправлено 30 Октябрь 2022 - 13:54

Пробуй так

Сделал на l4d2_bile_the_world_boomer_death все.

Сам не проверял, так что может что-то нет!

 

Если квара 1 или 3, то взрыв бумера на ведьму и обычных заражённых НЕ действует. Срабатывает только на особых заражённых И танка.

То есть при значении квары 1 или 3 условия отрабатывают как-будто одинаково, хотя они разные. Не понимаю, как это работает...

 

Если квара 4, то сервер крашится при взрыве бумера, ошибки в логах не могу найти.

 

 

 

П. С.
Где можно почитать документацию по L4D2 API с названиями классов заражённых? Мне бы понять, как правильно обращаться к переменным/классам заражённых, чтобы писать условия соответствующие.



#15 dr_lex

dr_lex

    Постоянный пользователь

  • Пользователь
  • PipPipPipPipPip
  • 1 053 сообщений

Отправлено 31 Октябрь 2022 - 9:57

Если квара 1 или 3, то взрыв бумера на ведьму и обычных заражённых НЕ действует. Срабатывает только на особых заражённых И танка.

То есть при значении квары 1 или 3 условия отрабатывают как-будто одинаково, хотя они разные. Не понимаю, как это работает...

 

Если квара 4, то сервер крашится при взрыве бумера, ошибки в логах не могу найти.

 

 

 

П. С.
Где можно почитать документацию по L4D2 API с названиями классов заражённых? Мне бы понять, как правильно обращаться к переменным/классам заражённых, чтобы писать условия соответствующие.

L4D2_Director_Scripts

 

ZSpawn

        ZOMBIE_NORMAL = 0
        ZOMBIE_SMOKER = 1
        ZOMBIE_BOOMER = 2
        ZOMBIE_HUNTER = 3
        ZOMBIE_SPITTER = 4
        ZOMBIE_JOCKEY = 5
        ZOMBIE_CHARGER = 6
        ZOMBIE_WITCH = 7
        ZOMBIE_TANK = 8
        ZSPAWN_MOB = 10
        ZSPAWN_MUDMEN = 12
        ZSPAWN_WITCHBRIDE = 11

  • Mos это нравится


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных