Есть ли способ убить или остановить партикл который не спавниться с помощью плагина? Проблема в том, что он вшит в модель. Можно конечно переписать модель и удалить от туда код, но хочется сделать сервер без загрузки доп файлов клиенту.
#1
Отправлено 04 Март 2019 - 11:33
#2
Отправлено 04 Март 2019 - 12:11
Что за модель?
Кастомная?
#3
Отправлено 04 Март 2019 - 12:26
в l4d_lastboss хороший пример удаление партиклов:
public void PrecacheParticle(char [] particlename) { int particle = CreateEntityByName("info_particle_system"); if (IsValidEdict(particle)) { DispatchKeyValue(particle, "effect_name", particlename); DispatchKeyValue(particle, "targetname", "particle"); DispatchSpawn(particle); ActivateEntity(particle); AcceptEntityInput(particle, "start"); CreateTimer(0.01, DeleteParticles, particle, TIMER_FLAG_NO_MAPCHANGE); } } public Action DeleteParticles(Handle timer, any particle) { char classname[64]; if (IsValidEntity(particle) && GetEdictClassname(particle, classname, sizeof(classname))) { if (StrEqual(classname, "info_particle_system", false)) RemoveEdict(particle); } }
- Game Over - L4D2 - CS:GO это нравится
#4
Отправлено 04 Март 2019 - 13:41
Что за модель?
Кастомная?
models/props_vehicles/helicopter_rescue.mdl Из кастомной я бы вырезал эту функцию)
Спасибо, там проблема в том, что партикл закреплён в таком виде
Он всегда будет порождаться и не убивается при передвижении вертолёта. Можно конечно сделать повторяющийся таймер и он будет убивать новые порождённые частицы. Мне интересно можно ли его как-нибудь вообще заблочить, чтобы он никогда не появлялся.
Сообщение отредактировал Game Over - L4D2 - CS:GO: 04 Март 2019 - 13:48
#5
Отправлено 04 Март 2019 - 15:24
Удалил частицы которые крепились к вертолёту (Удалены какие-то корявые анимации, багов замечено не было).
Ссылка на исходник вертолёта (alliedmods) https://forums.allie...82&d=1532170933
Отрыть и заменить модель.
helicopter_rescue.mdl на fix_helicopter_rescue.mdl
значение 3.0 делает вертолёт больше,чтобы он не выглядел как игрушка,от 3 лица можно оставить по умолчанию чтобы не закрывал обзор.
/////////////////////////////////// L4D2 ////////////////////////////////// l4d_helicopter_size = CreateConVar("l4d_helicopter_size", "3.0", "helicopter's size [1.0, 2.0, 3.0]"); void CreateHelicopter(int client, int infoIndex) { if(DummyEnt[client]>0) { RemoveHelicopter(client); } float modelScale=l4d_helicopter_size.FloatValue; if(modelScale<1.0)modelScale=1.0; else if(modelScale>2.0)modelScale=2.0; else if(modelScale<3.0)modelScale=3.0; .................................................... int CreateModel(int client) { float modelScale=l4d_helicopter_size.FloatValue; if(modelScale<1.0)modelScale=1.0; else if(modelScale>2.0)modelScale=2.0; else if(modelScale<3.0)modelScale=3.0; modelScale*=3.0; ....................................................
Работает в L4D, но требует загрузки файлов и некоторого редактирования.Убрать вид от 3 лица и сделать от первого, передвинув персонажи к кабине пилота. Стекло с обратной стороны модели прозрачное и всё прекрасно видно и тгд.
В первой части modelScale не работает и данную функцию необходимо удалить. Требует редактирования многих других вещей для L4D.
Скачать модель https://yadi.sk/d/bTIpQCzsMhsebQ
Сообщение отредактировал Game Over - L4D2 - CS:GO: 04 Март 2019 - 15:59
- BHaType это нравится
#6
Отправлено 07 Март 2019 - 17:42
AlexMy, я бы его хорошим не назвал. Вместо передачи индекса в таймер через reference, идёт проверка имени класса.
Да и как это поможет ТС, у него нет требуемых индексов, т.к. партикли создаёт не он, а модель.
Можно сделать намного проще, написав сразу после создания партикля:
SetVariantString("OnUser1 !self:Kill::0.01:1"); AcceptEntityInput(ent, "AddOutput"); AcceptEntityInput(ent, "FireUser1");
Это не требует проверок валидности.
GameOver, попробуй сделать так:
#pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <sdktools> #include <sdkhooks> public void OnEntityCreated(int entity, const char[] classname) { if (StrEqual(classname, "info_particle_system", false)) { PrintToChatAll("%i - %s - created", entity, classname); SDKHook(entity, SDKHook_SpawnPost, OnSpawnPost_Particle); } } public Action OnSpawnPost_Particle(int ref) { int entity = EntRefToEntIndex(ref); if (entity != INVALID_ENT_REFERENCE) { int iData; //iData = GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity"); //iData = GetEntPropEnt(entity, Prop_Data, "m_pParent"); //iData = GetEntProp(entity, Prop_Data, "m_iParentAttachment"); iData = GetEntPropEnt(entity, Prop_Data, "m_hParent"); PrintToChatAll("parent: %i", iData); SDKUnhook(entity, SDKHook_SpawnPost, OnSpawnPost_Particle); AcceptEntityInput(entity, "KillHierarchy"); PrintToChatAll("%i - killed", entity); } }
Заведи глобальный счётчик. Перед спауном модели делай counter++, создавай таймер и в его колбеке counter--, в OnEntityCreated соответственно проверяй кол-во ссылок > 0, а в round_start обнуляй.
Перед удалением партикля, идентифицируешь его по признаку родителя (все указанные выше действительны), положив предварительно в глобальную переменную. По признаку имени (effect_name) я не понял как получить. m_iName мне вернуло пустую строку. Может, сам найдешь нужный проп.
EDIT. Чуть подправил. Сначала анхук, потом килл. Хотя говорят, что в таких случаях снимать хук вообще не нужно.
Сообщение отредактировал dragokas: 07 Март 2019 - 17:49
- Game Over - L4D2 - CS:GO это нравится
#7
Отправлено 07 Март 2019 - 20:02
AlexMy, я бы его хорошим не назвал. Вместо передачи индекса в таймер через reference, идёт проверка имени класса.
Да и как это поможет ТС, у него нет требуемых индексов, т.к. партикли создаёт не он, а модель.
Можно сделать намного проще, написав сразу после создания партикля:
SetVariantString("OnUser1 !self:Kill::0.01:1"); AcceptEntityInput(ent, "AddOutput"); AcceptEntityInput(ent, "FireUser1");Это не требует проверок валидности.
GameOver, попробуй сделать так:
#pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <sdktools> #include <sdkhooks> public void OnEntityCreated(int entity, const char[] classname) { if (StrEqual(classname, "info_particle_system", false)) { PrintToChatAll("%i - %s - created", entity, classname); SDKHook(entity, SDKHook_SpawnPost, OnSpawnPost_Particle); } } public Action OnSpawnPost_Particle(int ref) { int entity = EntRefToEntIndex(ref); if (entity != INVALID_ENT_REFERENCE) { int iData; //iData = GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity"); //iData = GetEntPropEnt(entity, Prop_Data, "m_pParent"); //iData = GetEntProp(entity, Prop_Data, "m_iParentAttachment"); iData = GetEntPropEnt(entity, Prop_Data, "m_hParent"); PrintToChatAll("parent: %i", iData); SDKUnhook(entity, SDKHook_SpawnPost, OnSpawnPost_Particle); AcceptEntityInput(entity, "KillHierarchy"); PrintToChatAll("%i - killed", entity); } }Заведи глобальный счётчик. Перед спауном модели делай counter++, создавай таймер и в его колбеке counter--, в OnEntityCreated соответственно проверяй кол-во ссылок > 0, а в round_start обнуляй.
Перед удалением партикля, идентифицируешь его по признаку родителя (все указанные выше действительны), положив предварительно в глобальную переменную. По признаку имени (effect_name) я не понял как получить. m_iName мне вернуло пустую строку. Может, сам найдешь нужный проп.
EDIT. Чуть подправил. Сначала анхук, потом килл. Хотя говорят, что в таких случаях снимать хук вообще не нужно.
Спасибо!
Темы с аналогичным тегами particle, частицы
Игровые сервера →
MineCraft →
Как отключить партиклы от зелий на всём сервереАвтор Graviy , 27 июл 2022 Частицы, Зелья, Сервер, Партиклы |
|
|
||
Игровые сервера →
MineCraft →
Как отключить партиклы от зелий на всём сервереАвтор Graviy , 27 июл 2022 Частицы, Зелья, Сервер, Партиклы |
|
|
||
Игровые сервера →
Left 4 Dead →
недостающий файлАвтор Game Over - L4D2 - CS:GO , 10 сен 2019 vtf, particle |
|
|
||
Игровые сервера →
Left 4 Dead 2 →
Инструкция пользовательский партикл (Custom particles)Автор Game Over - L4D2 - CS:GO , 03 июл 2018 custom particles, particles и 8 еще... |
|
|
||
Игровые сервера →
Left 4 Dead 2 →
custom particleАвтор Apocalypse 2 , 12 мар 2016 particle |
|
|
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных