Помогло, спасибоА если внутренние кавычки заменить на '
Ты получаешь этим самым индекс игрока (номер слота), а именно преобразуешь юзерид в индексGetClientOfUserId(hEvent.GetInt("userid"));
А тут сам юзерид (уникальное число для каждого игрока, присваемое при первом заходе на сервер после его рестарта). Используется, например, в таймерах (чтоб если игрок выйдет за время срабатывания, не потерять его).hEvent.GetInt("userid");
Спасибо огромноеТы получаешь этим самым индекс игрока (номер слота), а именно преобразуешь юзерид в индекс
Большинство случаев происходит как раз по индексу (переменные param[maxplayers+1], циклы по всем игрокам for int i=1…)
А тут сам юзерид (уникальное число для каждого игрока, присваемое при первом заходе на сервер после его рестарта). Используется, например, в таймерах (чтоб если игрок выйдет за время срабатывания, не потерять его).
Если на сервере игрока нет, то выполнить абсолютно любую команду, мне кажется, не получится.Привет всем. Подскажите, пожалуйста, возможно ли и как (желательно примером) выполнить команду от лица игрока, через консоль сервера, даже если его на нем нет? Чтобы сервер принимал, как будто клиент выполнил команду, будучи на сервере и отработали необходимые плагины.
Пример (игрока нет на сервере), и отправляется в серверную консоль мной команда sm_test "STEAM_0:0:25117956" "sm_resetrank" и она выполняется, якобы клиент ее отправил, будучи на сервере.
Видел много плагинов( [FUN] Fexec, Force CMD и прочее, не подходят). Необходима оправка именно по команде, как на примере :)
Да вопрос не именно глобальный, чтобы прям ядро делать, а речь идет что бы обмануть другой плагинЕсли на сервере игрока нет, то выполнить абсолютно любую команду, мне кажется, не получится.
Если же речь только о плагине статистики, то можно сделать сброс клиента отдельным модулем под конкретный плагин. Можно сделать ядро плагина с такими командами, и делать уже модули для каждой команды (т.е. для каждого плагина, которому принадлежит команда).
Ядро в данном случае нужно будет только для того, чтобы команда на такие случаи (sm_test) была единой.
Если же игрок онлайн, то через FakeClientCommand
Мб кто более опытный найдет иное решение
В 99% (если не в 100) плагинов команды выполняются либо по отношению к онлайн игроку, либо от лица онлайн игрока, и сделать иначе ты это в уже написанном плагине методом из-вне не сможешь.Да вопрос не именно глобальный, чтобы прям ядро делать, а речь идет что бы обмануть другой плагин, вводя стим и команду, и якобы это отправил он.
Статистику я в примере указал просто так, чтобы по этому примеру уже под себя переделать.
В своей идее, ты имеешь ввиду делать подключение к плагину и выполнять именно его функцию, указывая стим? Не совсем понял честно :)
Думаю если б такое было возможно, то ядра бы не писали и не пилили под них модули, а просто выполняли нужный функционал простым подключением к плагину из внеВ 99% (если не в 100) плагинов команды выполняются либо по отношению к онлайн игроку, либо от лица онлайн игрока, и сделать иначе ты это в уже написанном плагине методом из-вне не сможешь.
Возьмем за пример плагин статистики. Тебе нужно сбросить стату игрока. Почему бы просто не сделать модуль, который сможет обнулять оффлайн игроков? Ведь нет разницы, каким именно способом его обнулить: при помощи самого плагина статистики, каким-то образом обойдя его алгоритмы, если такое возможно, или модулем, написанным за 15 минут на коленке?)
Очень интересно. А на примере сможешь показать?) И ты наверное имеешь ввиду работу напрямую с базой, да? (внеший модуль, подключается к базе статистки, и работает по steam_id с базой)В 99% (если не в 100) плагинов команды выполняются либо по отношению к онлайн игроку, либо от лица онлайн игрока, и сделать иначе ты это в уже написанном плагине методом из-вне не сможешь.
Возьмем за пример плагин статистики. Тебе нужно сбросить стату игрока. Почему бы просто не сделать модуль, который сможет обнулять оффлайн игроков? Ведь нет разницы, каким именно способом его обнулить: при помощи самого плагина статистики, каким-то образом обойдя его алгоритмы, если такое возможно, или модулем, написанным за 15 минут на коленке?)
Конкретно в этом случае - да. Получить копию соединения с бд и отправлять нужные запросы.И ты наверное имеешь ввиду работу напрямую с базой, да? (внеший модуль, подключается к базе статистки, и работает по steam_id с базой)
Спасибо, я понял суть, увы вариант с базой данных не подходит, так как вопрос/идея не просто в запросах к бд, а выполнение функции уже существующего плагина, или же ее изменения на похожую стандартную, но с сохранением функционала и получение данных игрока не из сервера (при онлайне), а использование по команде в консоли, и вводя его так же текстом.Конкретно в этом случае - да. Получить копию соединения с бд и отправлять нужные запросы.
На выходных могу поискать, если нужно еще будет. Во многих плагинах есть натив из разряда VIP_GetDatabase.
Можно, берешь Стим из бд и выполняешь на этом Стиме действие)Спасибо, я понял суть, увы вариант с базой данных не подходит, так как вопрос/идея не просто в запросах к бд, а выполнение функции уже существующего плагина, или же ее изменения на похожую стандартную, но с сохранением функционала и получение данных игрока не из сервера (при онлайне), а использование по команде в консоли, и вводя его так же текстом.
Неужели нельзя так сделать?) Данные об игроке не получать, и выполнять над ним действие, а присвоить в ручную командой, и уже выполнять какой-нибудь действие.
А если выполнение команды от имени игрока не связано с базой данных ?Можно, берешь Стим из бд и выполняешь на этом Стиме действие)
Иначе не получится.
В любом случае тебе придется брать Стим из бд
Условно +- такА если выполнение команды от имени игрока не связано с базой данных ?
Тогда:
1. Брать подключение к статистике
2. Вводя в консоль стим, находить его в базе
3. Использовать полученные данные, для другого плагина
Так ?![]()
В чём проблема допилить api для плагина и уже юзать нативы из другого?А если выполнение команды от имени игрока не связано с базой данных ?
Тогда:
1. Брать подключение к статистике
2. Вводя в консоль стим, находить его в базе
3. Использовать полученные данные, для другого плагина
Так ?![]()
Отличная идеяВ чём проблема допилить api для плагина и уже юзать нативы из другого?
Сообщения автоматически склеены:
И возможно нужное вам уже реализовали, см. include
не знаю будет ли работать, но ошибка ушлаПофиксите пожалуйста плагин. Ошибка при компиляции
// C:\Users\admin\Desktop\sdfg\scripting\hl_challenge.sp(384) : error 181: function argument named 'rankingQueue' differs from prototype
#include <sdktools_functions>
#include <sdktools_sound>
#include <sdkhooks>
int g_iGrenadeThrowerOffset;
public void OnPluginStart()
{
g_iGrenadeThrowerOffset = FindSendPropInfo("CBaseCSGrenadeProjectile", "m_hThrower");
}
public Action Timer_EntityGrenade(Handle timer, any iEntity)
{
if (IsValidEntity(iEntity))
{
int iClient = GetEntDataEnt2(iEntity, g_iGrenadeThrowerOffset);
if (iClient > 0 && iClient <= MaxClients)
{
char sGrndProjectile[24];
GetEdictClassname(iEntity, sGrndProjectile, sizeof(sGrndProjectile));
if (strcmp(sGrndProjectile, "hegrenade_projectile") == 0) IgniteEntity(iEntity, 10.0, false, 45.0, false);
}
}
return Plugin_Continue;
}
public void OnEntityCreated(int iEntity, const char[] sClassName)
{
if (strcmp(sClassName, "hegrenade_projectile") == 0)
{
CreateTimer(0.0, Timer_EntityGrenade, iEntity, 2);
}
}