vb
Участник
- Сообщения
- 385
- Реакции
- 31
Есть , и довольно хорошо работает.а оно есть?
Есть , и довольно хорошо работает.а оно есть?
это какое жеЕсть , и довольно хорошо работает.
Дабы не засорять тему, напишу так, на чистом сервере без SM при подключении ничего не показывает, а вот как подключаю SM начинает показывать о подключении - отключении.это какое же
Стандартные сообщения не выводятся, сам тестировал.Дабы не засорять тему, напишу так, на чистом сервере без SM при подключении ничего не показывает, а вот как подключаю SM начинает показывать о подключении - отключении.
В общем решил использовать OnClientPostAdminCheck так будет вовремя выводить сообщение при коннекте.
Подтверждаю. Буду искать другой выход. Может все таки вариант от @Grey83 был неплохим.OnClientPostAdminCheck() может и не произойти...
Раньше был крюк player_connect_full , происходил он при полном коннекте, сейчас его судьбу не проверял.
Я не думаю, что это красиво будет выглядить :З@Wightjeck, можно свести в одно сообщение, если сильно нужно
Спасибо !!! а как то сделать задержку можно 30 секунд -1 минуту?а оно есть?
--- Добавлено позже ---
можно, дописывать нужно, но лень пока что если напомнишь позже допишуСпасибо !!! а как то сделать задержку можно 30 секунд -1 минуту?
Можно ли выдать сразу 3 гранаты, не проверял...Помогите написать плагин,чтобы по команде !he , выдавались 3 взрывные гранаты,и при повторном написании команды выводилось сообщение,что лимит исчерпан.
#include <sourcemod>
#include <sdktools_functions>
#include <sdkhooks>
public Plugin myinfo =
{
name = "Limited Grenade",
author = "Drumanid",
version = "1.0.0",
url = "Discord: Drumanid#9108 | Telegram: t.me/drumanid"
};
int g_iCountGrenade[MAXPLAYERS +1];
static const char g_sGrenade[32] = "weapon_hegrenade"; // Название гранаты
#define COMMAND "sm_he" // Команда выдачи гранат(ы)
#define COUNT 3 // Кол-во выдаваемых гранат
#define VE(%0) view_as<EventHook>(%0)
#define LC(%0) for(int %0 = 1; %0 <= MaxClients; ++%0) if(IsClientInGame(%0))
public void OnPluginStart()
{
LoadTranslations("limited_grenade.phrases.txt");
RegConsoleCmd(COMMAND, Comamnd);
HookEvent("round_start",VE(RoundStart), EventHookMode_PostNoCopy);
HookEvent("hegrenade_detonate", VE(HeGrenadeDetonate));
LC(iClient)
OnClientPostAdminCheck(iClient);
}
public Action Comamnd(int iClient, int iArgs)
{
if(iClient && iArgs == 0)
{
if(IsPlayerAlive(iClient))
{
if(g_iCountGrenade[iClient] == -1)
{
GivePlayerItem(iClient, g_sGrenade);
PrintHintText(iClient, "%t", "Give grenade", (g_iCountGrenade[iClient] = COUNT));
}
else
PrintToChat(iClient, "%t", "Took grenades");
}
else
PrintToChat(iClient, "%t", "Player is dead");
}
return Plugin_Handled;
}
void RoundStart()
{
LC(iClient)
g_iCountGrenade[iClient] = -1;
}
void HeGrenadeDetonate(Event hEvent)
{
RequestFrame(HeGrenadeDetonateFrame, hEvent.GetInt("userid"));
}
void HeGrenadeDetonateFrame(int iClient)
{
if((iClient = GetClientOfUserId(iClient)) &&
IsClientInGame(iClient) &&
IsPlayerAlive(iClient))
{
if(g_iCountGrenade[iClient] > 0)
{
if(--g_iCountGrenade[iClient] == 0)
{
PrintHintText(iClient, "%t", "No grenade");
return;
}
GivePlayerItem(iClient, g_sGrenade);
PrintHintText(iClient, "%t", "Count of greandes", g_iCountGrenade[iClient]);
}
}
}
void WeaponSwitchPost(int iClient, int iEntity)
{
if(g_iCountGrenade[iClient] < 1)
return;
int iOther = GetEntPropEnt(iEntity, Prop_Send, "m_hThrower");
if(iOther == iClient)
return;
char sItem[32];
GetEdictClassname(iEntity, sItem, sizeof(sItem));
if(StrEqual(sItem, g_sGrenade))
++g_iCountGrenade[iClient];
}
public void OnClientPostAdminCheck(int iClient)
{
g_iCountGrenade[iClient] = -1;
if(!IsFakeClient(iClient))
SDKHook(iClient, SDKHook_WeaponSwitchPost, WeaponSwitchPost);
}
Оставлю это здесь, может пригодится...Может кто вырезать из плагина Супер админка телепорт? Оставить только телепорт игрока (с флагом)
public Action:weapon_fire_on_empty(Event event, const char []name, bool silent)
{
int iClient = GetClientOfUserId(GetEventInt(event, "userid"));
new weapon = GetEntPropEnt(iClient, Prop_Send, "m_hActiveWeapon");
if(g_bEnable[iClient])
{
if(RemovePlayerItem(iClient, weapon))
{
AcceptEntityInput(weapon, "Kill");
decl String:item[32];
GetEventString(event, "weapon", item, 32);
GivePlayerItem(iClient, item);
}
}
}
Тогда в чём трабл сделать обрезание своими руками? Просто удаляешь сначала идёшь и к командам (sm_...), смотришь какое действие оно будет отсылать (CMD_Speed) на обработку, идёшь по нём (вниз файла) и удаляешь блок с этим названием процесса (public Action CMD_Speed), и так для каждой ненужной, компилишь, если есть варны/ошибки, то идёшь на ту строчку (советую с самого конца начинать фиксить) и удаляешь ненужное, за пару минут всё будет готово))Ему сто лет в обед. Еще и с багами, дюпает оружие.