BlackPro
Участник
- Сообщения
- 75
- Реакции
- 11
Игроки плакать начнут. Хотя если это сделать ночью... Сделаю сегодня.почему?
Игроки плакать начнут. Хотя если это сделать ночью... Сделаю сегодня.почему?
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);
...
}
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");
}
}
}
Корректнее тогда будет уж заменитьОсновной проблемой было неккоретное удаление ентити. Которое впоследствии приводило к проблемам с едиктами.
Как видно , на сервере просто закончились свободные едикты, и проблема появлялась после множества смертей. Ну и если на сервере стоит акселератор, по логам в нем можно было это спокойно увидеть и без чьей-либо помощи.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
AcceptEntityInput(entity, "Kill");
RemoveEntity(entity);
RemoveEntity , делает то же самое что и AcceptEntityInput(entity, "Kill"); , разве что в немного другой обертке.Корректнее тогда будет уж заменитьнаC-подобный:AcceptEntityInput(entity, "Kill");
C-подобный:RemoveEntity(entity);
Так то оно да, тоже что и Молотов коктейль, или куча смоков, это уже от клиента зависит, да и труп быстренько исчезает, плюс улетает далеко, выглядит довольно круто. Идёшь ты такой гуляешь а тут из за угла шашлык летит... Прикольно))) корочь ресурсы у серва есть, остальное дело клиента, тем более что карта лёгкая, если уж и тут не тянут компы, то я не знаю...Сначала поджог трупа, а потом его растворение.
Наверняка фпс неплохо так проседает при хороших замесах, когда образуется много трупов в ограниченном пространстве.
ну сейчас добавил вроде бы крашей пока нет, слежу))Основной проблемой было неккоретное удаление ентити. Которое впоследствии приводило к проблемам с едиктами.
Как видно , на сервере просто закончились свободные едикты, и проблема появлялась после множества смертей. Ну и если на сервере стоит акселератор, по логам в нем можно было это спокойно увидеть и без чьей-либо помощи.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);
теперь использовать не получается#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;
}
Я немного не опытный, падений ведь много, на каждый краш ссылку давать? Окей учту. А что по поводу того из-за чего сервер падает, там ведь логи, там видно из-за какого плагина.@BlackPro, лучше бы прямо ссылки давал на краши, а не дебаг.лог, из которого надо выдирать этот айдишник, идти на сайт и вставлять. Сервер точно из-за этого падает?
Хотя бы на последний один. Со смартфона не удобно от слова совсем. Ну а вообще краши идентичны, так что не надо больше.падений ведь много, на каждый краш ссылку давать?
Got a presubmit token from server: 3b5d827b7c81d5f965c4bc29ed278837там ведь логи, там видно из-за какого плагина.
Если бы я знал... Я бы сюда не писал, сам бы всё исправил, а так как кодер из меня фиговый, я и исправить сам не могу.Судя по крашу, проблема именно в 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
хде
Я домой приду попробую что нибудь написать, не уверен что получится, но думаю примерно понял что как, но просто в чем разница создать все это при событии смерти, т.е локально, я ведь правильно понимаю что ты имеешь ввиду глобальное хранение, и при событии, брать ид игрока и отсылать ему...И ещё, разве у env_entity_dissolve нет собственного вида растворения в виде загорания и исчезновения? И что на счёт того, чтобы при старте раунда создавать один диссолв с target=cs_ragdoll и при гибели игрока ему Dissolve отправлять? Правда надо будет проверить как с несколькими игроками такое, вдруг баг или чего ещё будет