m_hRagdoll что-то вызывает краш сервера

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
А разница попробуй на домашнем, нам же нужно удостоверится, что плагин вызывает ошибку, хотя не вижу причины вызывать ее.
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #23
А разница попробуй на домашнем, нам же нужно удостоверится, что плагин вызывает ошибку, хотя не вижу причины вызывать ее.

некоторые функции могут корректно работать на виндовс, а вот на Линукс наоборот.
 

WanekWest

Помешан на "Даунских названиях"
Сообщения
442
Реакции
143
У меня было чуть другое(просто закрывалась кс у игрока), но все же. Может поможет. Сам не знал что делать. Феникс подсказал.

C-подобный:
HookEvent("player_death", EventPlayerDrath, EventHookMode_Pre);

void EventPlayerDrath(Event hEvent, const char[] sEvName, bool bdontBoadcast)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("userid"));
    .....
        int ragdoll = GetEntPropEnt(iClient, Prop_Send, "m_hRagdoll");
        if (ragdoll > 0) RemoveEdict(ragdoll);
    ...
}
 

Boeing 767

заскамили мамонта ни за что, ни про что
Сообщения
524
Реакции
913
Основной проблемой было неккоретное удаление ентити. Которое впоследствии приводило к проблемам с едиктами.
C-подобный:
void PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char dname[8];
    FormatEx(dname, sizeof(dname), "dis_%d", client);
    int Ragdoll = GetEntPropEnt(client, Prop_Send, "m_hRagdoll");
    if(Ragdoll > 0)
    {
        AcceptEntityInput(Ragdoll, "Ignite");
        int entity = CreateEntityByName("env_entity_dissolver");
        if (entity > 0)
        {
            DispatchKeyValue(Ragdoll, "targetname", dname);
            DispatchKeyValue(entity, "target", dname);
            DispatchKeyValue(entity, "dissolvetype", "1");
            AcceptEntityInput(entity, "Dissolve");
            AcceptEntityInput(entity, "Kill");
        }
    }
}
Как видно , на сервере просто закончились свободные едикты, и проблема появлялась после множества смертей. Ну и если на сервере стоит акселератор, по логам в нем можно было это спокойно увидеть и без чьей-либо помощи.
1594805411544.png
 
Последнее редактирование:

MaZa

Участник
Сообщения
1,732
Реакции
980
Основной проблемой было неккоретное удаление ентити. Которое впоследствии приводило к проблемам с едиктами.
C-подобный:
void PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char dname[8];
    FormatEx(dname, sizeof(dname), "dis_%d", client);
    int Ragdoll = GetEntPropEnt(client, Prop_Send, "m_hRagdoll");
    if(Ragdoll > 0)
    {
        IgniteEntity(iRagdoll, 7.0);
        int entity = CreateEntityByName("env_entity_dissolver");
        if (entity > 0)
        {
            DispatchKeyValue(Ragdoll, "targetname", dname);
            DispatchKeyValue(entity, "target", dname);
            DispatchKeyValue(entity, "dissolvetype", "1");
            AcceptEntityInput(entity, "Dissolve");
            AcceptEntityInput(entity, "Kill");
        }
    }
}
Как видно , на сервере просто закончились свободные едикты, и проблема появлялась после множества смертей. Ну и если на сервере стоит акселератор, по логам в нем можно было это спокойно увидеть и без чьей-либо помощи.
Посмотреть вложение 61707
Корректнее тогда будет уж заменить
C-подобный:
  AcceptEntityInput(entity, "Kill");
на
C-подобный:
RemoveEntity(entity);
 

Boeing 767

заскамили мамонта ни за что, ни про что
Сообщения
524
Реакции
913

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Сначала поджог трупа, а потом его растворение.
Наверняка фпс неплохо так проседает при хороших замесах, когда образуется много трупов в ограниченном пространстве.
 

BlackPro

Участник
Сообщения
75
Реакции
11
Сначала поджог трупа, а потом его растворение.
Наверняка фпс неплохо так проседает при хороших замесах, когда образуется много трупов в ограниченном пространстве.
Так то оно да, тоже что и Молотов коктейль, или куча смоков, это уже от клиента зависит, да и труп быстренько исчезает, плюс улетает далеко, выглядит довольно круто. Идёшь ты такой гуляешь а тут из за угла шашлык летит... Прикольно))) корочь ресурсы у серва есть, остальное дело клиента, тем более что карта лёгкая, если уж и тут не тянут компы, то я не знаю...
А вообще я такой что если можно было по характеристикам впускать игроков, то слабых не впустил.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
И ещё интересно нафига поджигать труп на 3 секунды

Кстати, тот же эффект можно сделать без создания энтити env_entity_dissolver: SDKHooks_TakeDamage(Ragdoll, 0, 0, 1000.0, DMG_BURN|DMG_DISSOLVE);
С NPC прокатывает. Как с трупом будет - хз, и с уроном (выделен синим) можно поиграться (м/б нужно будет предварительно назначить хп трупу с помощью SetEntityHealth)
 

BlackPro

Участник
Сообщения
75
Реакции
11
Основной проблемой было неккоретное удаление ентити. Которое впоследствии приводило к проблемам с едиктами.
C-подобный:
void PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char dname[8];
    FormatEx(dname, sizeof(dname), "dis_%d", client);
    int Ragdoll = GetEntPropEnt(client, Prop_Send, "m_hRagdoll");
    if(Ragdoll > 0)
    {
        AcceptEntityInput(Ragdoll, "Ignite");
        int entity = CreateEntityByName("env_entity_dissolver");
        if (entity > 0)
        {
            DispatchKeyValue(Ragdoll, "targetname", dname);
            DispatchKeyValue(entity, "target", dname);
            DispatchKeyValue(entity, "dissolvetype", "1");
            AcceptEntityInput(entity, "Dissolve");
            AcceptEntityInput(entity, "Kill");
        }
    }
}
Как видно , на сервере просто закончились свободные едикты, и проблема появлялась после множества смертей. Ну и если на сервере стоит акселератор, по логам в нем можно было это спокойно увидеть и без чьей-либо помощи.
Посмотреть вложение 61707
ну сейчас добавил вроде бы крашей пока нет, слежу))
Ну у меня есть вопрос, как сделать горение в течении трёх секунд как это было изначально(я так понимаю теперь это делается как-то по другому):
IgniteEntity(Ragdoll, 3.0); теперь использовать не получается
иначе это не так эффектно выглядит, как бы не успевает разгараться, и моделька трупа палевно изчезает, не очень красиво, хотелось бы исправить если это возможно.
Сообщения автоматически склеены:

Упал сервер...
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdkhooks>
#include <sdktools>

public OnPluginStart() HookEvent("player_death",PlayerDeath);

void PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    char dname[8];
    FormatEx(dname, sizeof(dname), "dis_%d", client);
    int Ragdoll = GetEntPropEnt(client, Prop_Send, "m_hRagdoll");
    if(Ragdoll > 0)
    {
        AcceptEntityInput(Ragdoll, "Ignite");
        IgniteEntity(Ragdoll, 3.0);
        int entity = CreateEntityByName("env_entity_dissolver");
        if (entity > 0)
        {
            DispatchKeyValue(Ragdoll, "targetname", dname);
            DispatchKeyValue(entity, "target", dname);
            DispatchKeyValue(entity, "dissolvetype", "1");
            AcceptEntityInput(entity, "Dissolve");
            AcceptEntityInput(entity, "Kill");
        }
    }
}

public OnClientPutInServer(iClient) SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage);

public Action:OnTakeDamage(iClient, &attaker, &inflictor, &Float:damage, &damagetype)
{
    if(!(0 < attaker <= MaxClients) && damagetype == DMG_BURN) return Plugin_Handled;
    return Plugin_Continue;
}

Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: I3TJ-YWOU-IONH
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: ZB6W-M4L6-F2YJ
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: HP4R-YAK6-PODL
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: MQWU-QBJ5-G2XE
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: YTRM-V2BK-P6KF
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: 2UWZ-RKEL-E5RU
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: K53E-ZQKW-C4KW
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: G33N-32LC-27AO
Оффтоп
 
Последнее редактирование:

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@BlackPro, лучше бы прямо ссылки давал на краши, а не дебаг.лог, из которого надо выдирать этот айдишник, идти на сайт и вставлять. Сервер точно из-за этого падает?
 

BlackPro

Участник
Сообщения
75
Реакции
11
@BlackPro, лучше бы прямо ссылки давал на краши, а не дебаг.лог, из которого надо выдирать этот айдишник, идти на сайт и вставлять. Сервер точно из-за этого падает?
Я немного не опытный, падений ведь много, на каждый краш ссылку давать? Окей учту. А что по поводу того из-за чего сервер падает, там ведь логи, там видно из-за какого плагина.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Судя по крашу, проблема именно в AcceptEntityInput, который вероятно не может просто выполниться, либо выполняется на важной Entity типа worldspawn
Сообщения автоматически склеены:

падений ведь много, на каждый краш ссылку давать?
Хотя бы на последний один. Со смартфона не удобно от слова совсем. Ну а вообще краши идентичны, так что не надо больше.


там ведь логи, там видно из-за какого плагина.
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: G33N-32LC-27AO

хде
 

BlackPro

Участник
Сообщения
75
Реакции
11
Судя по крашу, проблема именно в AcceptEntityInput, который вероятно не может просто выполниться, либо выполняется на важной Entity типа worldspawn
Сообщения автоматически склеены:


Хотя бы на последний один. Со смартфона не удобно от слова совсем. Ну а вообще краши идентичны, так что не надо больше.



Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837
Classified module /usr/lib/preload_x86.so as System
Submitting symbols for /usr/lib/preload_x86.so
Failed to process symbol file
Uploaded crash dump: Crash ID: G33N-32LC-27AO

хде
Если бы я знал... Я бы сюда не писал, сам бы всё исправил, а так как кодер из меня фиговый, я и исправить сам не могу.
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
И ещё, разве у env_entity_dissolve нет собственного вида растворения в виде загорания и исчезновения? И что на счёт того, чтобы при старте раунда создавать один диссолв с target=cs_ragdoll и при гибели игрока ему Dissolve отправлять? Правда надо будет проверить как с несколькими игроками такое, вдруг баг или чего ещё будет
 

BlackPro

Участник
Сообщения
75
Реакции
11
Ну понял, буду давать ссылку, сам просто сейчас с телефона, дома утром по быстрому отписался и по делам побежал.
Сообщения автоматически склеены:

И ещё, разве у env_entity_dissolve нет собственного вида растворения в виде загорания и исчезновения? И что на счёт того, чтобы при старте раунда создавать один диссолв с target=cs_ragdoll и при гибели игрока ему Dissolve отправлять? Правда надо будет проверить как с несколькими игроками такое, вдруг баг или чего ещё будет
Я домой приду попробую что нибудь написать, не уверен что получится, но думаю примерно понял что как, но просто в чем разница создать все это при событии смерти, т.е локально, я ведь правильно понимаю что ты имеешь ввиду глобальное хранение, и при событии, брать ид игрока и отсылать ему...
 

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
@BlackPro, имел в виду растворять все куколки (ragdoll от игроков) одним диссолвом, но в принципе присваивать одного игрока тоже можно
 

BlackPro

Участник
Сообщения
75
Реакции
11
@BlackPro, имел в виду растворять все куколки (ragdoll от игроков) одним диссолвом, но в принципе присваивать одного игрока тоже можно
Я просто если честно хз как реализовать такую конструкцию, из-за отсутствия опыта в написании кода.
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Дайте и мне поделиться мыслями:
cs_ragdoll - для начала, что это такое.
Это такая физическая модель игрока, которая при жизни игрока, грубо говоря, прилеплена скелетом(или вставлена внутрь) и в точности повторяющая движения основной модели, она невидима. Это не хитбокс и не физбокс. Создаётся на стороне клиента, соответственно управлять ею с сервера нет никакой возможности. После смерти игрока основная модель исчезает, а cs_ragdoll проявляется, и так как она скомпилирована тряпичной куклой, то при потере управления она таковой и становится, повторять просто не за кем. То что диссолве(растворение) существует - это просто выполнение на стороне клиента, именно на этой модели, с какими либо условиями, точно так, как скомпилирована модель.

Повторюсь - так как это всё на стороне клиента - получить координаты, или что либо похожее со стороны сервера не представляется возможным. Соответственно и все косяки связанны с этим.
Я конечно могу быть и неправ - это мои наблюдения и представления об этом движке.
 
Последнее редактирование:
Сверху Снизу