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

Overlord

Участник
Сообщения
537
Реакции
108
У меня при покупке VIP, выдаются некоторые флаги. Очень нужен плагин, который бы проверял бы игроков и заносил людей с флагами в таблицу админов MA и после убирал.
[VIP] Admin - Создаешь группу с нужными флагами под нужную группу vip .
 

panaria

Участник
Сообщения
5
Реакции
1
Кто может реализовать на sourcemod,в интернете для 1.6 есть,хотелось бы на соурс

Плагин для розыгрыша денег на сервере без участия администраторов
Администратор на картах прячет сундучки в каждом из них будут деньги (т.е. игрок взял сундук и получил деньги на кошелёк сайта)
указывает время начала розыгрыша (в указанное время на карте появляются сундучки)
указывает время провидения розыгрыша (через указанное время сундучки исчезают)

Определённой командой откроется меню календаря. Тут удобно, безо всяких усилий можно добавлять и убирать даты и время для розыгрышей.

За день до начала розыгрыша HUD сообщение с отчётом времени до начала розыгрыша
В момент розыгрыша HUD сообщение с временем о окончание розыгрыша

Определённой командой откроется меню редактирования сундучков. При открытом меню сундучки видны на карте, их можно добавлять, удалять, разворачивать, менять их цвет .

Если что,пишите в вк Pavel Ichimbaїev
спасибо
 

0-BuTaJIuK-0

Участник
Сообщения
235
Реакции
57
Добрый день, кто может помочь?
В чем заключается плагин:
При написании команды, игрок меняет модель (и она держится до смены мапы)

Вот код обычной замены модели при спавне:
PHP:
#include <sdktools>

public OnPluginStart()
{
    HookEvent("player_spawn", OnPlayerSpawn);
}

public OnMapStart()
{
   Тут много скачивания
   И прикеш
}

public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if( client > 0 && IsClientInGame(client) && IsPlayerAlive(client) ) {
        if ( GetClientTeam(client) == 2 ) {
            SetEntityModel(client, "models/player/butagames/fb_t_gk.mdl");
            SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/t_arms_phoenix.mdl");
        }
        if ( GetClientTeam(client) == 3 ) {
            SetEntityModel(client, "models/player/butagames/fb_ct_gk.mdl");
            SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/ct_arms_sas.mdl");
        }
    }
}
Буду очень благодарен!
 

Rostu

Добрая душа
Сообщения
986
Реакции
622
@0-BuTaJIuK-0, Если я вас правильно понял
PHP:
#include <sdktools>

new bool:g_bSkin[MAXPLAYERS + 1];
public OnPluginStart()
{
    RegConsoleCmd("sm_skin",Cmd_Skin);
    HookEvent("player_spawn", OnPlayerSpawn);
}
public OnClientPutInServer(client)
{
    g_bSkin[client] = false;
}
public Action:Cmd_Skin(client, args)
{
    g_bSkin[client] = !(g_bSkin[client]);
    //PrintToChat(client,"Вы успешно %s установление скина", g_bSkin[client] ? "включили" : "выключили");
}

public OnPlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if( client  && IsClientInGame(client) && g_bSkin[client] )
    {
        new team = GetClientTeam(client);
        if ( team == 2 )
        {
            SetEntityModel(client, "models/player/butagames/fb_t_gk.mdl");
            SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/t_arms_phoenix.mdl");
        }
        if ( team == 3 )
        {
            SetEntityModel(client, "models/player/butagames/fb_ct_gk.mdl");
            SetEntPropString(client, Prop_Send, "m_szArmsModel", "models/weapons/ct_arms_sas.mdl");
        }
    }
}
 

0-BuTaJIuK-0

Участник
Сообщения
235
Реакции
57
@Rostu Спасибо!
А как грамотно добавить таймер в одну секунду между спавном и выдачей модели? Боюсь, что другой плагин перебьет.
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
@Rostu Спасибо!
А как грамотно добавить таймер в одну секунду между спавном и выдачей модели? Боюсь, что другой плагин перебьет.
PHP:
#include <sdktools>

#pragma newdecls required

#define TIME 1.0  //Ваше время для таймера

bool g_bSkin[MAXPLAYERS + 1];
public void OnPluginStart()
{
    RegConsoleCmd("sm_skin",    Cmd_Skin);
    HookEvent("player_spawn", OnPlayerSpawn);
}
public void OnClientPutInServer(int iClient)
{
    g_bSkin[iClient] = false;
}
public Action Cmd_Skin(int iClient, int iArgs)
{
    g_bSkin[iClient] = !g_bSkin[iClient];
    return Plugin_Handled;
}

public void OnPlayerSpawn(Event event, const char[] name, bool bdontBroadcast)
{
    CreateTimer(TIME, TIMER_CB, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
}

public Action TIMER_CB(Handle hTimer, any iUID)
{
    iUID = GetClientOfUserId(iUID);
    if(!iUID || !IsClientInGame(iUID) || !IsPlayerAlive(iUID) || !g_bSkin[iUID])
        return Plugin_Handled;
    int team;
    if((team = GetClientTeam(iUID))>1){
        char szMDL[PLATFORM_MAX_PATH];
        Format(szMDL, sizeof(szMDL), "models/player/butagames/%s", (team == 2) ? "fb_t_gk.mdl" : "fb_ct_gk.mdl");
        SetEntityModel(iUID, szMDL);
        Format(szMDL, sizeof(szMDL), "models/weapons/%s", (team == 2) ? "t_arms_phoenix.mdl" : "ct_arms_sas.mdl");
        SetEntPropString(iUID, Prop_Send, "m_szArmsModel", szMDL);
     
    }
    return Plugin_Handled;
}
 
Последнее редактирование:

AlexPa1

Участник
Сообщения
292
Реакции
54
Ребят напиши сделайте мне таймер в этот плагин, спавнишься и через N сек окрашивание модели. Я пытался но
upload_2018-7-24_8-43-53.png

C-подобный:
#include <sdktools>

#pragma newdecls required

#define TIME 3.5  //Ваше время для таймера

static const int iColor[][] =
{
    {255, 0, 0},     // террористы
    {0, 0, 255}    // контр-террористы
};

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    CreateTimer(TIME, TIMER_CB, TIMER_FLAG_NO_MAPCHANGE);
}

public Action TIMER_CB(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(!client) return;
    int team = GetClientTeam(client);
    if(team < 2) return;

    team -= 2;
    SetEntityRenderMode(client, RENDER_TRANSCOLOR);
    SetEntityRenderColor(client, iColor[team][0], iColor[team][1], iColor[team][2], 255);
}
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Ребят напиши сделайте мне таймер в этот плагин, спавнишься и через N сек окрашивание модели. Я пытался но Посмотреть вложение 32456
PHP:
#include <sdktools>

#pragma newdecls required

#define TIME 3.5  //Ваше время для таймера

public void OnPluginStart()
{
    HookEvent("player_spawn", Event_Spawn);
}

public void Event_Spawn(Event event, const char[] name, bool dontBroadcast)
{
    CreateTimer(TIME, TIMER_CB, GetEventInt(event, "userid"), TIMER_FLAG_NO_MAPCHANGE);
}

public Action TIMER_CB(Handle hTimer, any client)
{
    client = GetClientOfUserId(client);
    if(!client || !IsClientInGame(client) || !IsPlayerAlive(client)) return Plugin_Handled;
    int team;
    if((team = GetClientTeam(client)) < 2) return Plugin_Handled;
    int r = (team == 2) ? 255 : 0;
    int b = (team == 2) ? 0 : 255;
    SetEntityRenderColor(client, r, 0, b, 255);
    return Plugin_Handled;
}
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Почините пожалуйста плагин, сделайте так чтобы настройки были без конфига и текст брался не из файла а из исходника, крч все настройки в исходники. Игра КСС. И уберите эту поддержку цветов не нужную)
--- Добавлено позже ---
Видел на одном сервере что аптечка выпадающие при смерти остается на месте убитого а не улетает а левитирует над ним, кому понравилась идея можете написать для народа) плагин вроде "Health Kit" (2.5.3) by acik
 

Вложения

  • Teleport-Protection-master.zip
    21 КБ · Просмотры: 8
  • ColorVariables-master.zip
    76.8 КБ · Просмотры: 10
Последнее редактирование:

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Почините пожалуйста плагин, сделайте так чтобы настройки были без конфига и текст брался не из файла а из исходника, крч все настройки в исходники. Игра КСС. И уберите эту поддержку цветов не нужную)
 

Вложения

  • telekill_protection.sp
    2 КБ · Просмотры: 7

AlexPa1

Участник
Сообщения
292
Реакции
54
Видел на одном сервере что аптечка выпадающие при смерти остается на месте убитого а не улетает а левитирует над ним, кому понравилась идея можете написать для народа) плагин вроде "Health Kit" (2.5.3) by acik
Зашел на сервер, воскресился, написало в чат что защита включена и все, захожу в телепорт 0 реакции.
C-подобный:
L 07/26/2018 - 12:38:55: [SM] Exception reported: Client index 39 is invalid
L 07/26/2018 - 12:38:55: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:38:55: [SM] Call stack trace:
L 07/26/2018 - 12:38:55: [SM]   [0] IsClientInGame
L 07/26/2018 - 12:38:55: [SM]   [1] Line 40, D:\1 Server 123\cstrike\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
L 07/26/2018 - 12:38:59: [SM] Exception reported: Client index 40 is invalid
L 07/26/2018 - 12:38:59: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:38:59: [SM] Call stack trace:
L 07/26/2018 - 12:38:59: [SM]   [0] IsClientInGame
L 07/26/2018 - 12:38:59: [SM]   [1] Line 40, D:\1 Server \cstrike 123\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
L 07/26/2018 - 12:39:02: [SM] Exception reported: Client index 41 is invalid
L 07/26/2018 - 12:39:02: [SM] Blaming: telekill_protection.smx
L 07/26/2018 - 12:39:02: [SM] Call stack trace:
L 07/26/2018 - 12:39:02: [SM]   [0] IsClientInGame
L 07/26/2018 - 12:39:02: [SM]   [1] Line 40, D:\1 Server 123\cstrike\addons\sourcemod\scripting\telekill_protection.sp::Timer_GodMode
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Можете написать плагин который бы блокировал звук "шлепка\удара" об землю с большой высоты? mp_footsteps 0 не хочу ставить, хочу слышать как шагает противник.
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Купил я значит плагин, замораживающую гранату себе на зомби мод а она замораживает всех а нужно только противоположную команду только. Какой код нужно добавить или от куда посмотреть можно?Оффтоп
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Почините пожалуйста плагин, сделайте так чтобы настройки были без конфига и текст брался не из файла а из исходника, крч все настройки в исходники. Игра КСС. И уберите эту поддержку цветов не нужную)
PHP:
#include <sdktools>
//                    Время между телепортацией и до отключения защиты
static const float    fTime = 1.0;
//                    Текст при включении защиты
static const char    sProtectOn[]    = "[\x0EAnti-Telekill\x01] \x04You are protected for \x03%0.1f \x04second(s)!",
//                    Текст при отключении защиты
                    sProtectOff[]    = "[\x0EAnti-Telekill\x01] \x04You are no longer \x03protected \x04from any damage!";

bool InGodMode[MAXPLAYERS+1];

public Plugin myinfo =
{
    name        = "Telekill Protection",
    author        = "Hallucinogenic Troll",
    description    = "A Simple Teleport Protection, to prevent kills right after going through a teleport",
    version        = "1.4.1_redux",
    url            = "http://ptfun.net/newsite/"
};

public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundBounds, EventHookMode_PostNoCopy);
    HookEvent("round_end", Event_RoundBounds, EventHookMode_PostNoCopy);
}

public void OnClientConnected(int client)
{
    InGodMode[client] = false;
}

public void Event_RoundBounds(Handle event, const char[] name, bool dontBroadcast)
{
    if(name[6] == 'e')
    {
        UnhookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
        for(int i = 1; i <= MaxClients; i++) if(InGodMode[i] && IsClientInGame(i)) ToggleGodMode(i);
    }
    else HookEntityOutput("trigger_teleport", "OnStartTouch", Output_TeleStartTouch);
}

public void Output_TeleStartTouch(const char[] output, int caller, int activator, float delay)
{
    if(activator < 1 || MaxClients < activator || InGodMode[activator]) return;

    ToggleGodMode(activator);
    CreateTimer(fTime, Timer_GodMode, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_GodMode(Handle timer, any client)
{
    if((client = GetClientOfUserId(client)) && InGodMode[client]) ToggleGodMode(client);
}

stock void ToggleGodMode(client)
{
    InGodMode[client] = !InGodMode[client]
    if(InGodMode[client])
    {
        SetEntProp(client, Prop_Data, "m_takedamage", 0, 1);
        PrintToChat(client, sProtectOn, fTime);
        return;
    }
    SetEntProp(client, Prop_Data, "m_takedamage", 2, 1);
    PrintToChat(client, sProtectOff);
}
--- Добавлено позже ---
Какой код нужно добавить или от куда посмотреть можно?
найти где обрабатывается список игроков, попавших в зону заморозки и добавить туда проверку на команду (вообще нужно знать что за мод используется, там можно натив задействовать для отфильтовывания зомбей)
 

Вложения

  • telekill_protection.sp
    2.2 КБ · Просмотры: 4
  • telekill_protection.smx
    5 КБ · Просмотры: 3
Последнее редактирование:

AlexPa1

Участник
Сообщения
292
Реакции
54
найти где обрабатывается список игроков, попавших в зону заморозки и добавить туда проверку на команду
Ты код скинул Защиту после телепорта, он чем лучше? может его выберу
Тут есть такое?
C-подобный:
int g_iEntity[MAXPLAYERS +1];

//Неважный код

public void PlayerDeath(Event event, const char[] name, bool dbc)
{
    int iEntity = EntRefToEntIndex(g_iEntity[GetClientOfUserId(event.GetInt("userid"))]);
    if(iEntity > 0) UnFreeze(iEntity);
}

public void DecoyDetonate(Event event, const char[] name, bool dbc)
{
   
    iEntity = event.GetInt("entityid");
   
    //Неважный код
   
    if ((iEntity = event.GetInt("entityid")) > 0)
        AcceptEntityInput(iEntity, "Kill");
}

public Action TimerUnFreeze(Handle timer, any iRef)
{
    int iEntity = EntRefToEntIndex(iRef);
    if(iEntity > 0) UnFreeze(iEntity);
   
    return Plugin_Stop;
}

void UnFreeze(int iEntity)
{
    float fPos[3];
    GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fPos);
   
    //Неважный код
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@alex123pavlov, если заморозка с помощью декоя то нужен "Неважный код" вот отсюда:
PHP:
    iEntity = event.GetInt("entityid");
 
    //Неважный код
 
    if ((iEntity = event.GetInt("entityid")) > 0)
        AcceptEntityInput(iEntity, "Kill");
--- Добавлено позже ---
Ты код скинул Защиту после телепорта, он чем лучше? может его выберу
чуток оптимизировал, добавил проверок пару и при входе игрока на сервер обнуляю ему флаг режима
Заодно перенёс всё, что ты просил, в начало файла (комментарии ты видишь, думаю)
 

AlexPa1

Участник
Сообщения
292
Реакции
54
@alex123pavlov, если заморозка с помощью декоя то нужен "Неважный код" вот отсюда:
PHP:
    iEntity = event.GetInt("entityid");
 
    //Неважный код
 
    if ((iEntity = event.GetInt("entityid")) > 0)
        AcceptEntityInput(iEntity, "Kill");
--- Добавлено позже ---
чуток оптимизировал, добавил проверок пару и при входе игрока на сервер обнуляю ему флаг режима
Заодно перенёс всё, что ты просил, в начало файла (комментарии ты видишь, думаю)
C-подобный:
public void DecoyDetonate(Event event, const char[] name, bool dbc)
{
    int iEntity, i;
    float fPos[2][3], fDis;
    
    fPos[0][0] = event.GetFloat("x");
    fPos[0][1] = event.GetFloat("y");
    fPos[0][2] = event.GetFloat("z");

    for(i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && IsPlayerAlive(i))
        {
            GetClientAbsOrigin(i, fPos[1]);
            fDis = GetVectorDistance(fPos[0], fPos[1]);
            if(fDis <= RADIUS)
            {
                if((iEntity = CreateEntityByName("prop_dynamic")) != -1)
                {
                    DispatchKeyValue(iEntity, "model", "");
                    DispatchKeyValue(iEntity, "solid", "6");
                    DispatchKeyValueVector(iEntity, "origin", fPos[1]);
                    DispatchSpawn(iEntity);
                    
                    EmitAmbientSound("", fPos[1]);
                    g_iEntity[i] = EntIndexToEntRef(iEntity);
                    
                    CreateTimer(TIMER, TimerUnFreeze, g_iEntity[i], TIMER_FLAG_NO_MAPCHANGE);
                }
            }
        }
    }
    
    iEntity = event.GetInt("entityid");
    
    if ((iEntity = event.GetInt("entityid")) > 0)
        AcceptEntityInput(iEntity, "Kill");
}
Может лучше полный код в ЛС скину?
 
Сверху Снизу