Написание плагинов

skywalker

Участник
Сообщения
1,153
Реакции
263
@Someone, Мне нужно всех, там комментарий, 1 - всех Оффтоп
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
@Someone, Мне нужно всех, там комментарий, 1 - всех Оффтоп
У меня с такими настройками возрождает всех:
upload_2017-10-7_15-16-13.png
 
  • Мне нравится
Реакции: d4Ck

skywalker

Участник
Сообщения
1,153
Реакции
263
@Someone, У меня все так же, только время возрождение меньше: sm_ar_timer "45"
 

666FoX666

Участник
Сообщения
702
Реакции
210
Добрый вечер. Может кто-нибудь, пожалуйста, добавить проверку на команду? Т.е. если человек играет за Т и пишет !spec (!sp и т.д.), то ему выводит аля "соре, но для этой команды запрещен выход в наблюдатели".
C-подобный:
#include <sourcemod>
#include <sdktools>

#pragma newdecls required

#define PREFIX "[Say Spec]"

ConVar g_Cvar_bEnable = null,
    g_Cvar_bBlockSpectateMessage = null;

static const char g_sColorT[][] = {"#1",   "#2",   "#3",   "#4",   "#5",   "#6",   "#7",   "#8",   "#9",   "#10", "#OB",   "#OC",  "#OE",  "#HC",          "#HT", "#HE"},
                  g_sColorC[][] = {"\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E", "<font color='", "'>", "</font>"};

// Regular plugin information
public Plugin myinfo =
{
    name = "Say Back to Spector",
    author = "GoDtm666",
    description = "Say !spec | !sp (Back to Spector)",
    version = "1.2",
    url = "www.SourceTM.com"
}

public void OnPluginStart()
{
    g_Cvar_bEnable = CreateConVar( "sm_SBtS_enable", "1", "1 = Вкл | 0 = Выкл. плагина перемещении игроков написавших в чате !sp в спектры..\n1 = On | 0 = Off. Move the players wrote in the chat! Bts in the spectors.", FCVAR_NOTIFY, true, 0.0, true, 1.0);
    g_Cvar_bBlockSpectateMessage = CreateConVar("sm_SBtS_BlockSpecMessage", "1", "1 = Вкл | 0 = Выкл. Отключает стандартные сообщения о переходе в спектры. \n1 = On | 0 = Off. Block standart Spectate Message",FCVAR_NOTIFY,true,0.0,true,1.0);
    
    HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
    
    LoadTranslations("sm_saybacktospector.phrases.txt");
    
    AutoExecConfig(true, "sm_saybacktospec", "sourcemod");
}

public Action OnClientSayCommand(int iClient, const char[] sCommand, const char[] sArgs)
{
    if(!g_Cvar_bEnable.BoolValue)
        return Plugin_Continue;

    if(iClient > 0 && !IsFakeClient(iClient))
    {
        if(StrEqual(sArgs, "!spec", false) || StrEqual(sArgs, "!sp", false) || StrEqual(sArgs, "!ыз") || StrEqual(sArgs, "!ызус") || StrEqual(sArgs, "!спек"))
        {
            if(GetClientTeam(iClient) > 1)
            {
                ChangeClientTeam(iClient, 1);
                if (GetUserMessageType() == UM_Protobuf)
                    PrintToChatAllEx(iClient, " \x01%s \x03%N \x01%T", PREFIX, iClient, "Client Back to Spector", iClient);
                else
                    PrintToChatAllEx(iClient, "\x01%s \x03%N \x01%T", PREFIX, iClient, "Client Back to Spector", iClient);
            }
            else
                PrintToChat2(iClient, "%T", "Client Spectors Spec", iClient);
            
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

public Action Event_PlayerTeam(Event eEvent, const char[] sName, bool bDontBroadcast)
{
    if (g_Cvar_bBlockSpectateMessage.BoolValue && g_Cvar_bEnable.BoolValue)
    {
        if(eEvent.GetInt("team") == 1)
            eEvent.BroadcastDisabled = true;
    }
    return Plugin_Continue;
}

void PrintToChat2(int iClient, const char[] sMesag, any ...)
{
    char sBufer[192];
    VFormat(sBufer, sizeof(sBufer), sMesag, 3);
    for(int i = 0; i < 16; i++)
        ReplaceString(sBufer, sizeof(sBufer), g_sColorT[i], g_sColorC[i]);

    if (GetUserMessageType() == UM_Protobuf)
        PrintToChat(iClient, " \x01%s %s", PREFIX, sBufer);
    else
        PrintToChat(iClient, "\x01%s %s", PREFIX, sBufer);
}

void PrintToChatAllEx(int iClient, const char[] sMesag, any ...)
{
    char sBuffer[192];
    VFormat(sBuffer, sizeof(sBuffer), sMesag, 3);
    for(int i = 0; i < 16; i++)
        ReplaceString(sBuffer, sizeof(sBuffer), g_sColorT[i], g_sColorC[i]);
    
    Handle hBf = StartMessageAll("SayText2");
    
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf prPb = UserMessageToProtobuf(hBf);
        if (prPb != null)
        {
            prPb.SetInt("ent_idx", iClient);
            prPb.SetBool("chat", true);
            prPb.SetString("msg_name", sBuffer);
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            EndMessage();
        }
    }
    else
    {
        BfWrite bfWri = UserMessageToBfWrite(hBf);
        if (bfWri != null) 
        { 
            bfWri.WriteByte(iClient);
            bfWri.WriteByte(0);
            bfWri.WriteString(sBuffer);
            EndMessage();
        }
    }
}
 

Вложения

  • sm_saybacktospector.sp
    3.9 КБ · Просмотры: 6

Someone

Участник
Сообщения
1,933
Реакции
1,653
Добрый вечер. Может кто-нибудь, пожалуйста, добавить проверку на команду? Т.е. если человек играет за Т и пишет !spec (!sp и т.д.), то ему выводит аля "соре, но для этой команды запрещен выход в наблюдатели".
C-подобный:
#include <sourcemod>
#include <sdktools>

#pragma newdecls required

#define PREFIX "[Say Spec]"

ConVar g_Cvar_bEnable = null,
    g_Cvar_bBlockSpectateMessage = null;

static const char g_sColorT[][] = {"#1",   "#2",   "#3",   "#4",   "#5",   "#6",   "#7",   "#8",   "#9",   "#10", "#OB",   "#OC",  "#OE",  "#HC",          "#HT", "#HE"},
                  g_sColorC[][] = {"\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\x09", "\x10", "\x0B", "\x0C", "\x0E", "<font color='", "'>", "</font>"};

// Regular plugin information
public Plugin myinfo =
{
    name = "Say Back to Spector",
    author = "GoDtm666",
    description = "Say !spec | !sp (Back to Spector)",
    version = "1.2",
    url = "www.SourceTM.com"
}

public void OnPluginStart()
{
    g_Cvar_bEnable = CreateConVar( "sm_SBtS_enable", "1", "1 = Вкл | 0 = Выкл. плагина перемещении игроков написавших в чате !sp в спектры..\n1 = On | 0 = Off. Move the players wrote in the chat! Bts in the spectors.", FCVAR_NOTIFY, true, 0.0, true, 1.0);
    g_Cvar_bBlockSpectateMessage = CreateConVar("sm_SBtS_BlockSpecMessage", "1", "1 = Вкл | 0 = Выкл. Отключает стандартные сообщения о переходе в спектры. \n1 = On | 0 = Off. Block standart Spectate Message",FCVAR_NOTIFY,true,0.0,true,1.0);
   
    HookEvent("player_team", Event_PlayerTeam, EventHookMode_Pre);
   
    LoadTranslations("sm_saybacktospector.phrases.txt");
   
    AutoExecConfig(true, "sm_saybacktospec", "sourcemod");
}

public Action OnClientSayCommand(int iClient, const char[] sCommand, const char[] sArgs)
{
    if(!g_Cvar_bEnable.BoolValue)
        return Plugin_Continue;

    if(iClient > 0 && !IsFakeClient(iClient))
    {
        if(StrEqual(sArgs, "!spec", false) || StrEqual(sArgs, "!sp", false) || StrEqual(sArgs, "!ыз") || StrEqual(sArgs, "!ызус") || StrEqual(sArgs, "!спек"))
        {
            if(GetClientTeam(iClient) > 1)
            {
                ChangeClientTeam(iClient, 1);
                if (GetUserMessageType() == UM_Protobuf)
                    PrintToChatAllEx(iClient, " \x01%s \x03%N \x01%T", PREFIX, iClient, "Client Back to Spector", iClient);
                else
                    PrintToChatAllEx(iClient, "\x01%s \x03%N \x01%T", PREFIX, iClient, "Client Back to Spector", iClient);
            }
            else
                PrintToChat2(iClient, "%T", "Client Spectors Spec", iClient);
           
            return Plugin_Handled;
        }
    }
    return Plugin_Continue;
}

public Action Event_PlayerTeam(Event eEvent, const char[] sName, bool bDontBroadcast)
{
    if (g_Cvar_bBlockSpectateMessage.BoolValue && g_Cvar_bEnable.BoolValue)
    {
        if(eEvent.GetInt("team") == 1)
            eEvent.BroadcastDisabled = true;
    }
    return Plugin_Continue;
}

void PrintToChat2(int iClient, const char[] sMesag, any ...)
{
    char sBufer[192];
    VFormat(sBufer, sizeof(sBufer), sMesag, 3);
    for(int i = 0; i < 16; i++)
        ReplaceString(sBufer, sizeof(sBufer), g_sColorT[i], g_sColorC[i]);

    if (GetUserMessageType() == UM_Protobuf)
        PrintToChat(iClient, " \x01%s %s", PREFIX, sBufer);
    else
        PrintToChat(iClient, "\x01%s %s", PREFIX, sBufer);
}

void PrintToChatAllEx(int iClient, const char[] sMesag, any ...)
{
    char sBuffer[192];
    VFormat(sBuffer, sizeof(sBuffer), sMesag, 3);
    for(int i = 0; i < 16; i++)
        ReplaceString(sBuffer, sizeof(sBuffer), g_sColorT[i], g_sColorC[i]);
   
    Handle hBf = StartMessageAll("SayText2");
   
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf prPb = UserMessageToProtobuf(hBf);
        if (prPb != null)
        {
            prPb.SetInt("ent_idx", iClient);
            prPb.SetBool("chat", true);
            prPb.SetString("msg_name", sBuffer);
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            prPb.AddString("params", "");
            EndMessage();
        }
    }
    else
    {
        BfWrite bfWri = UserMessageToBfWrite(hBf);
        if (bfWri != null)
        {
            bfWri.WriteByte(iClient);
            bfWri.WriteByte(0);
            bfWri.WriteString(sBuffer);
            EndMessage();
        }
    }
}
На 45 строке замени 1 на 2.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Не забудьте добавить в переводы фразу "Client Spec Block".
PHP:
"Client Spec Block"
{
    "ru"  "Извините, для этой команды запрещён переход в наблюдатели"
    "en"  "Sorry. For this team moving to spectators denied."
}
 

Вложения

  • sm_saybacktospector.sp
    4 КБ · Просмотры: 5

wh.Shark

Участник
Сообщения
94
Реакции
41
Этот участник форума занимается мошенничеством. Команда форума не рекомендует проводить сделки, подробнее.
Товарищи, просьба написать плагин :)
Граната-растяжка для Zombie Reloaded
Суть плагина: игрок(человек, не зомби) берет в руку Флешку(flash grenade) кидает например в стену, она прилипает и создаёт луч растяжки но не как zr lasermines, метра 3-4 в длинну, если зомби задевает луч, то он получает Х урона.
Доп. просьба добавить выдачу кол-во растяжек для админских флагов.
 

cors

Участник
Сообщения
58
Реакции
2
Скриптеры напишите плиз простенький плагин который будет заменять стандартный звук когда бросают гранату,в заранее спс
 

Ice_Sochi

Участник
Сообщения
709
Реакции
413
Добрый день
Может написан у кого простейший плагин установки игроку префикса в чате или может кто написать его? Ни один из имеющихся типа custom chat colors и тд мне не подходит
Нужно подключить библиотеку smrpg и после проверки SMRPG_GetClientLevel(iClient) > 250 ставить ему префикс, можно прям в исходнике
Искал долго и упорно в гугле, нашел только пару вариантов на форуме вс, но работать на ксго они отказались
 

d4Ck

Урегулированный
Сообщения
730
Реакции
562
Добрый день
Может написан у кого простейший плагин установки игроку префикса в чате или может кто написать его? Ни один из имеющихся типа custom chat colors и тд мне не подходит
Нужно подключить библиотеку smrpg и после проверки SMRPG_GetClientLevel(iClient) > 250 ставить ему префикс, можно прям в исходнике
Искал долго и упорно в гугле, нашел только пару вариантов на форуме вс, но работать на ксго они отказались
Какой префикс?
 

Oter Bro

Участник
Сообщения
20
Реакции
0
Плагин на то что бы админ мог открыть менюшку, при наведении и нажатии кнопки, телепортироваться туда куда навёлся.
Заранее благодарю
 

cors

Участник
Сообщения
58
Реакции
2
Или кто нибудь может подсказать как перехватить событие когда игрок бросает гранату?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@cors, примерно вот так можно отловить момент броска и того, кто кинул гранату:
PHP:
public void OnEntityCreated(int ent, const char[] class)

{
    if(trContains(class, "_projectile") != -1) SDKHook(ent, SDKHook_SpawnPost, OnEntitySpawned);
}

public void OnEntitySpawned(int ent)
{
    int client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Grey83, StrContains*
Исправьте :)

А у гранат в названии энтити разве есть projectile?
 
  • Мне нравится
Реакции: d4Ck

cors

Участник
Сообщения
58
Реакции
2
@cors, примерно вот так можно отловить момент броска и того, кто кинул гранату:
PHP:
public void OnEntityCreated(int ent, const char[] class)

{
    if(trContains(class, "_projectile") != -1) SDKHook(ent, SDKHook_SpawnPost, OnEntitySpawned);
}

public void OnEntitySpawned(int ent)
{
    int client = GetEntPropEnt(ent, Prop_Send, "m_hOwnerEntity");
}
спс получилось,только там StrContains
 
Сверху Снизу