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

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Добрый вечер всем!
Возможно сюда добавить команду на включения,отключения?
Чтоб можно было выключить эффект если не нужен.
Заранее благодарю!
 

Вложения

  • HeadShotExplode.sp
    1.3 КБ · Просмотры: 11

KiKiEEKi

🏆 🥇
Сообщения
653
Реакции
513

Вложения

  • HeadShotExplode.sp
    1.8 КБ · Просмотры: 11

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Работает,ну только когда тебя в хед попадают) а не когда ты)
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Таки он и работает только когда в хед попадают
когда попадаешь именно ты,то срабатывает эффект,а тут наоборот,когда попадают в тебя работает эффект,ну когда включен конечно.
 

Туник

Участник
Сообщения
1,281
Реакции
263
Народ помогите сделать чтобы автобаланс работал в режиме реального времени, то-есть сделать проверку без рестарта раунда перекидывал игроков и балансировал команды.
 

Вложения

  • Autobalance.sp
    2.7 КБ · Просмотры: 8

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Добрый день всем!
Народ может кто подправит декомпил?
Если конечно не много заморочек там.
Делал плагин Tonki_Ton.
Думаю даже полезен будет кому то такой.
Заранее благодарю
 

Вложения

  • restrict_deagle_new.smx.txt
    2.5 КБ · Просмотры: 13

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@-=|УЧЕНИК|=-, если это удаление дигла на картах awp_*, то таких в темах о поиске/написании плагинов было предостаточно.
Возможно поиском найдутся исходники даже.
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, если это удаление дигла на картах awp_*, то таких в темах о поиске/написании плагинов было предостаточно.
Возможно поиском найдутся исходники даже.
Да это то я знаю,ты даже как то делал один,когда я писал как-то.
Тут по другому малость,именно от количество игроков.
Диглы включались когда было,10 игроков,они включались у всех.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@-=|УЧЕНИК|=-, проверяй
Теперь считает всех, кроме спектаторов (старый код зачем-то и их почему-то учитывал при продсчёте).
А для чего нам 8 наблюдателей и включенные диглы при 2 играющих? 🤔
 

Вложения

  • restrict_deagle 1.1.0.sp
    1.9 КБ · Просмотры: 9

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, проверяй
Теперь считает всех, кроме спектаторов (старый код зачем-то и их почему-то учитывал при продсчёте).
А для чего нам 8 наблюдателей и включенные диглы при 2 играющих? 🤔
Ну как сделали изначально)
Тебе то виднее.
Вот поэтому я его и убрал,потому что работал как то не так)
Сообщения автоматически склеены:

@-=|УЧЕНИК|=-, проверяй
Теперь считает всех, кроме спектаторов (старый код зачем-то и их почему-то учитывал при продсчёте).
А для чего нам 8 наблюдателей и включенные диглы при 2 играющих? 🤔
Да все огонь,работает.
 
Последнее редактирование:

Pr[E]fix

Code
Сообщения
171
Реакции
29
ку, можно как-то сделать так чтобы игрок написал в консоль bar
и у него прогресс пошел сам, а то пишешь bar 0% еще раз +- 5%

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


#define CVAR_RE_INC    3.0
#define CVAR_RE_MAX    100.0

new Float:g_fMedicProgresBarPos[66];

public void OnMapStart()
{
    RegConsoleCmd("bar", progress)  
}

public Action progress(int client, int args)
{
    new Float:fNum = FloatMul(100.0, FloatDiv(g_fMedicProgresBarPos[client], CVAR_RE_MAX));
    decl String:sBuffer[32];
    if(fNum > 100.0) fNum = 100.0;
    if(fNum < 0.0) fNum = 0.0;
    new i, iBuffer;
    iBuffer = RoundFloat(FloatMul(0.25, fNum));
    for (; i < iBuffer; i++) sBuffer[i] = 35;    // символ #
    for (; i < 25; i++) sBuffer[i] = 61;          // символ =
    iBuffer = RoundFloat(fNum);
   
    g_fMedicProgresBarPos[client] += CVAR_RE_INC;
   
    PrintHintText(client, "Заряд медика: %i%%\n[%s]", iBuffer, sBuffer);
}
 

Туник

Участник
Сообщения
1,281
Реакции
263
Подскажите как правильно сделать, надо чтобы игроки не нажимали shift+e для включения быстрой скорости, а чтобы при заходе скорость ставилась сама вместо 1го на 1.5, также убрать все лишнее из плагина по типу время на вкл/выкл и ожидания до следующего раза использования команды, и убрать подсказки чата. Или может есть плагин аналог для скорости передвижения с 1го до 1.5?

PHP:
#include <sourcemod>
#include <sdktools>

public Plugin:myinfo =
{
    name = "Run!",
    author = "hzz",
    description = "This plugin allows you to run for determinated time pressing both SHIF+E",
    version = "1.1",
    url = "http://www.sourcemod.net/"
}
    
#define CHECK buttons & IN_SPEED && buttons & IN_USE && IsPlayerAlive(client)
#define CHECKNOT buttons & IN_DUCK && buttons & IN_SPEED && buttons & IN_USE && IsPlayerAlive(client)

new Handle:TimerSlow[MAXPLAYERS+1] = INVALID_HANDLE;
new Handle:TimerRecover[MAXPLAYERS+1] = INVALID_HANDLE;
new Handle:TimerCheckTime[MAXPLAYERS+1] = INVALID_HANDLE;
new Handle:cvar_speed = INVALID_HANDLE;
new Handle:cvar_slow = INVALID_HANDLE;
new Handle:cvar_time = INVALID_HANDLE;
new Handle:cvar_recover = INVALID_HANDLE;

new bool:running[MAXPLAYERS+1];
new bool:canrun[MAXPLAYERS+1];

new Float:TimeLeft[MAXPLAYERS+1];

public OnPluginStart()
{
    cvar_speed = CreateConVar("run_speed", "1.5", "Sets the speed of run (normal is 1.0)", 0, true, 1.0);
    cvar_slow = CreateConVar("run_slowdown", "0.2", "Sets the slowdown rate (for smoothest stop), can't be higher than 'run_speed'", 0, true, 0.1);
    cvar_time = CreateConVar("run_time", "10.0", "Sets how many time a player can run. 0 - For disable", 0, true, 0.0);
    cvar_recover = CreateConVar("run_recover", "5.0", "Sets how many time the player will have to wait after using all of his 'run_time'", 0, true, 0.0);
    
    SetVars();
}

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
    if(canrun[client])
    {
        //This if can be a little cnfuse, but everything it checks is if the player is holding both SHIFT(speed) and E(use) and NOT holding CTRL(duck) and check if is pressing one of the buttons W A S D or just one, or two... If is pressing CTRL won't speed up
        if((CHECKNOT && buttons & IN_FORWARD) || (CHECKNOT &&  buttons & IN_BACK) || (CHECKNOT && buttons & IN_MOVELEFT) || (CHECKNOT && buttons & IN_MOVERIGHT))
        {
            if(rpm_GetClientSpeed(client) != 1.0)
                TimerSlow[client] = CreateTimer(0.1, Slowdown, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
            return Plugin_Continue;
        }
        // This is almost the same as first but only work if not holding CTRL(because we don't want it to work while ducking
        if((CHECK && buttons & IN_FORWARD) || (CHECK &&  buttons & IN_BACK) || (CHECK && buttons & IN_MOVELEFT) || (CHECK && buttons & IN_MOVERIGHT))
        {
            // Another check for ducking, for if you press SHIFT + E and at least CTRL
            if(buttons & IN_DUCK)
                return Plugin_Continue;
            
            if(!running[client])
            {
                running[client] = true;
                if(GetConVarFloat(cvar_time) != 0.0 && TimerCheckTime[client] == INVALID_HANDLE)
                    TimerCheckTime[client] = CreateTimer(1.0, CheckTime, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
            }
                
            rpm_SetClientSpeed(client, GetConVarFloat(cvar_speed));
            
            //i deleted the IN_SPEED bit button for not slow down before speed sets (It just like 'ignoring' you're pressing SHIFT). This make the slowdown smoother.
            buttons &= ~IN_SPEED;
        }
        else
        {
            if(running[client])
                running[client] = false;
                
            if(rpm_GetClientSpeed(client) != 1.0)
            {
                TimerSlow[client] = CreateTimer(0.1, Slowdown, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
            }
        }
    }
    return Plugin_Continue;
}

public Action:Slowdown(Handle:timer, any:client)
{
    if(client && IsClientConnected(client) && IsClientInGame(client))
    {
        new Float:cspeed = rpm_GetClientSpeed(client);
        
        if(cspeed > 1.0)
        {
            rpm_SetClientSpeed(client, cspeed-GetConVarFloat(cvar_slow));
        }
        else if(cspeed <= 1.0)
        {
            rpm_SetClientSpeed(client, 1.0);
            KillTimer(timer);
            TimerSlow[client] = INVALID_HANDLE;
            return;
        }
    }
}

public Action:CheckTime(Handle:timer, any:client)
{
    if(running[client])
    {
        if(TimeLeft[client] > 0.0)
        {
            TimeLeft[client] -= 1.0;
            new iTimeLeft = RoundFloat(TimeLeft[client]);
            PrintHintText(client, "Run Time Left: %i", iTimeLeft);
        }
        else if(TimeLeft[client] == 0.0)
        {
            canrun[client] = false;
            running[client] = false;
            KillTimer(timer);
            TimerCheckTime[client] = INVALID_HANDLE;
            TimerRecover[client] = CreateTimer(GetConVarFloat(cvar_recover), Recover, client);
            TimerSlow[client] = CreateTimer(0.1, Slowdown, client, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
            PrintToChat(client, "\x04[Run!\x03 By.:RpM\x04]\x03 Your run time is over!");
        }
    }
    else
    {
        KillTimer(timer);
        TimerCheckTime[client] = INVALID_HANDLE;       
    }
}

public Action:Recover(Handle:timer, any:client)
{
    TimeLeft[client] = GetConVarFloat(cvar_time);
    canrun[client] = true;
    running[client] = false;
    PrintToChat(client, "\x04[Run!\x03 By.:RpM\x04]\x03 You can run again!");
}

stock SetVars()
{
    for(new i = 1; i <= MaxClients; i++)
    {
        if(IsClientConnected(i) && IsClientInGame(i))
        {
            running[i] = false;
            canrun[i] = true;
            
            if(GetConVarFloat(cvar_time) != 0.0)
                TimeLeft[i] = GetConVarFloat(cvar_time);
                
            TimerCheckTime[i] = INVALID_HANDLE;
            TimerSlow[i] = INVALID_HANDLE;
            TimerRecover[i] = INVALID_HANDLE;
        }
    }
}

// From RpMlib :D
stock rpm_SetClientSpeed(client, Float:ammount)
{
    SetEntPropFloat(client, Prop_Data, "m_flLaggedMovementValue", ammount);
}

stock Float:rpm_GetClientSpeed(client)
{
    new SpeedOffGet = FindSendPropInfo("CBasePlayer","m_flLaggedMovementValue")
    return GetEntDataFloat(client, SpeedOffGet);
}
 

alexnet

Участник
Сообщения
82
Реакции
3
delete
 

Вложения

  • fakeclients.sp
    2.9 КБ · Просмотры: 26
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
сверху имен ников прописано тоже 31
Значит максимальный индекс равен 30.
Или добавь ещё один ник или в строке 85 while(CheckName(RandomName)) RandomName = GetRandomInt(0, 31); 31 замени на 30
вообще у тебя должно быть 32 ника в списке, иначе нужно изменять верхнюю границу квара sm_fakeclients_players с 32 на 30
 

Anrolep

Участник
Сообщения
34
Реакции
4
Ребята, кто пишет плагины, отпишитесь мне в ЛС, у меня есть ТЗ на плагин за отдельную плату. Благодарю
 
Сверху Снизу