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

-=HellFire=-

Kernel panic - not syncing: Fatal exception
Сообщения
1,394
Реакции
585
Как вариант
C-подобный:
#include <cstrike>

#define TIME 10.0

Handle g_Timer;

public void OnPluginStart()
{
    HookEvent("player_death", PlayerDeath_Event);
    HookEvent("round_start", RoundStart_Event);
}

public void PlayerDeath_Event(Event event, const char[] sEvName, bool bDontBroadcast)
{
    if(g_Timer)
    {
        RequestFrame(RespawnPlayer, event.GetInt("userid"));
        delete g_Timer;
    }

}

public void RoundStart_Event(Event event, const char[] sEvName, bool bDontBroadcast)
{
    g_Timer = CreateTimer(TIME, Timer_Handler, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Handler(Handle timer)
{
    g_Timer= null;
  
    return Plugin_Stop;
}

public void RespawnPlayer(any userId)
{
    int iClient = GetClientOfUserId(userId);
    CS_RespawnPlayer(iClient);
    PrintToChatAll("%N автоматически возродился", iClient);
}
А остальное где потерялось?
UPD: Разве RequestFrame сработает в данном случае 1 раз?
 
  • Фэйспалм
Реакции: JDW

gtixon

Участник
Сообщения
1,078
Реакции
401
Помогите написать плагин, что бы написании команды !t если игрок находится в наблюдателях - его переводило за команду Террористов, если он за КТ, то высветиться меню:
Перейти за Т?
1. Да
2. Нет
 
  • Печально
Реакции: JDW

RudikS

Участник
Сообщения
130
Реакции
61
Помогите написать плагин, что бы написании команды !t если игрок находится в наблюдателях - его переводило за команду Террористов, если он за КТ, то высветиться меню:
Перейти за Т?
1. Да
2. Нет
C-подобный:
#define TEAM_NONE   0
#define TEAM_SPECTATOR   1
#define TEAM_T           2
#define TEAM_CT          3

#define CMD "sm_t"

public void OnPluginStart()
{
    RegConsoleCmd(CMD, SwitchTeam_CMDHandler);
}

public Action SwitchTeam_CMDHandler(int iClient, int argc)
{
    switch(GetClientTeam(iClient))
    {
        case TEAM_SPECTATOR, TEAM_NONE:
        {
            ChangeClientTeam(iClient, TEAM_T);
        }

        case TEAM_CT:
        {
            Menu menu = new Menu(SwitchTeam_MenuHandler);
            menu.SetTitle("Перейти за T?");
            menu.AddItem("", "Да");
            menu.AddItem("", "Нет");

            menu.Display(iClient, 0);
        }
    }

    return Plugin_Handled;
}

public int SwitchTeam_MenuHandler(Menu menu, MenuAction action, int iClient, int item)
{
    switch(action)
    {
        case MenuAction_Select:
        {
            if(item == 0)
            {
                ChangeClientTeam(iClient, TEAM_T);
            }
        }
        case MenuAction_End:
        {
            delete menu;
        }
    }
}
 

gtixon

Участник
Сообщения
1,078
Реакции
401
C-подобный:
#define TEAM_NONE   0
#define TEAM_SPECTATOR   1
#define TEAM_T           2
#define TEAM_CT          3

#define CMD "sm_t"

public void OnPluginStart()
{
    RegConsoleCmd(CMD, SwitchTeam_CMDHandler);
}

public Action SwitchTeam_CMDHandler(int iClient, int argc)
{
    switch(GetClientTeam(iClient))
    {
        case TEAM_SPECTATOR, TEAM_NONE:
        {
            ChangeClientTeam(iClient, TEAM_T);
        }

        case TEAM_CT:
        {
            Menu menu = new Menu(SwitchTeam_MenuHandler);
            menu.SetTitle("Перейти за T?");
            menu.AddItem("", "Да");
            menu.AddItem("", "Нет");

            menu.Display(iClient, 0);
        }
    }

    return Plugin_Handled;
}

public int SwitchTeam_MenuHandler(Menu menu, MenuAction action, int iClient, int item)
{
    switch(action)
    {
        case MenuAction_Select:
        {
            if(item == 0)
            {
                ChangeClientTeam(iClient, TEAM_T);
            }
        }
        case MenuAction_End:
        {
            delete menu;
        }
    }
}
Спасибо огромное
 

s777

Участник
Сообщения
449
Реакции
74
Помогите пожалуйста. Нужно сделать иммунитет випам. Сейчас он только для админов
 

Вложения

  • SpecialTeamBalancer_v0.6.0.sp
    4.4 КБ · Просмотры: 11

will_rock

Участник
Сообщения
1,074
Реакции
363
Как вариант
C-подобный:
#include <cstrike>

#define TIME 10.0

Handle g_Timer;

public void OnPluginStart()
{
    HookEvent("player_death", PlayerDeath_Event);
    HookEvent("round_start", RoundStart_Event);
}

public void PlayerDeath_Event(Event event, const char[] sEvName, bool bDontBroadcast)
{
    if(g_Timer)
    {
        RequestFrame(RespawnPlayer, event.GetInt("userid"));
        delete g_Timer;
    }

}

public void RoundStart_Event(Event event, const char[] sEvName, bool bDontBroadcast)
{
    g_Timer = CreateTimer(TIME, Timer_Handler, _, TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Handler(Handle timer)
{
    g_Timer= null;
  
    return Plugin_Stop;
}

public void RespawnPlayer(any userId)
{
    int iClient = GetClientOfUserId(userId);
    CS_RespawnPlayer(iClient);
    PrintToChatAll("%N автоматически возродился", iClient);
}
Спасибо
 

RudikS

Участник
Сообщения
130
Реакции
61
Помогите пожалуйста. Нужно сделать иммунитет випам. Сейчас он только для админов
Можешь попробовать, но тут без кваров и для любой вип группы.
C-подобный:
#define STYLE        true

#include <cstrike>
#include <vip_core>

#if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6)
#pragma newdecls required
public Plugin myinfo =
#else
#undef STYLE
public Plugin:myinfo =
#endif
{
    name = "Special Team Balancer",
    author = "AlmazON",
    description = "Специальный Балансировщик Команд",
    version = "0.6.0",
    url = "http://www.hlmod.ru"
}

#define CSRoundEnd_GameStart 15
#if defined STYLE
bool bP[MAXPLAYERS+1];
float fRD;
int iAF;
public void OnPluginStart()
{
    ConVar c;
#else
new bool:bP[MAXPLAYERS+1], Float:fRD, iAF;
public OnPluginStart()
{
    decl String:f[AdminFlags_TOTAL], Handle:c;
#endif
    if(GetEngineVersion() !=Engine_CSGO)
    {
        HookEvent("round_end",            RE);
        if((c=FindConVar("mp_round_restart_delay")))
        {
            HookConVarChange(c, RD);
            #if defined STYLE
            fRD = c.FloatValue-0.1;
            #else
            fRD = GetConVarFloat(c)-0.1;
            #endif
        }else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found).");
    }
    else HookEvent("round_prestart",    RP, EventHookMode_PostNoCopy);

    HookConVarChange(c=CreateConVar("stb_admin_flag",    "",        "Flags of administrators, excluding balancing.\n\"\" - all."),    AF);

    #if defined STYLE
    char f[AdminFlags_TOTAL];
    c.GetString(f,AdminFlags_TOTAL);
    #else
    GetConVarString(c,f,AdminFlags_TOTAL);
    #endif
    AF(c,f,f);
    AutoExecConfig(_, "SpecialTeamBalancer");
}

#if defined STYLE
public void AF(ConVar C, const char[] O, const char[] N)
#else
public AF(Handle:C, String:O[], const String:N[])
#endif
{
    iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz");
    OnRebuildAdminCache(AdminCache_Admins);
}
#if defined STYLE
public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;}

public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);}
#if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7
public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#else
public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#endif
public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);}
public void RP(Event E, const char[] N, bool B){PTB();}

public Action TB(Handle T)
#else
public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1;

public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF);
public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);
public RP(Handle:E, String:N[], bool:B) PTB();

public Action:TB(Handle:T)
#endif
{
    PTB();
    return Plugin_Stop;
}
#if defined STYLE
void PTB()
{
    int i=MaxClients, a, b;
#else
PTB()
{
    new i=MaxClients, a, b;
#endif
    do if(IsClientInGame(i)) switch(GetClientTeam(i))
    {
        case CS_TEAM_T:++a;
        case CS_TEAM_CT:++b;
    }while(--i);
    if((a=(a-b)/2))
    {
        b = MaxClients;
        if(0 <a)
        {
            #if defined STYLE
            int[] c=new int[a];
            #else
            decl c[a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_CT);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_CT);
            }
        }else
        {
            #if defined STYLE
            int[] c=new int[a=-a];
            #else
            decl c[a=-a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_T);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_T);
            }
        }
    }
}
 
  • Мне нравится
Реакции: s777

s777

Участник
Сообщения
449
Реакции
74
Можешь попробовать, но тут без кваров и для любой вип группы.
C-подобный:
#define STYLE        true

#include <cstrike>
#include <vip_core>

#if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6)
#pragma newdecls required
public Plugin myinfo =
#else
#undef STYLE
public Plugin:myinfo =
#endif
{
    name = "Special Team Balancer",
    author = "AlmazON",
    description = "Специальный Балансировщик Команд",
    version = "0.6.0",
    url = "http://www.hlmod.ru"
}

#define CSRoundEnd_GameStart 15
#if defined STYLE
bool bP[MAXPLAYERS+1];
float fRD;
int iAF;
public void OnPluginStart()
{
    ConVar c;
#else
new bool:bP[MAXPLAYERS+1], Float:fRD, iAF;
public OnPluginStart()
{
    decl String:f[AdminFlags_TOTAL], Handle:c;
#endif
    if(GetEngineVersion() !=Engine_CSGO)
    {
        HookEvent("round_end",            RE);
        if((c=FindConVar("mp_round_restart_delay")))
        {
            HookConVarChange(c, RD);
            #if defined STYLE
            fRD = c.FloatValue-0.1;
            #else
            fRD = GetConVarFloat(c)-0.1;
            #endif
        }else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found).");
    }
    else HookEvent("round_prestart",    RP, EventHookMode_PostNoCopy);

    HookConVarChange(c=CreateConVar("stb_admin_flag",    "",        "Flags of administrators, excluding balancing.\n\"\" - all."),    AF);

    #if defined STYLE
    char f[AdminFlags_TOTAL];
    c.GetString(f,AdminFlags_TOTAL);
    #else
    GetConVarString(c,f,AdminFlags_TOTAL);
    #endif
    AF(c,f,f);
    AutoExecConfig(_, "SpecialTeamBalancer");
}

#if defined STYLE
public void AF(ConVar C, const char[] O, const char[] N)
#else
public AF(Handle:C, String:O[], const String:N[])
#endif
{
    iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz");
    OnRebuildAdminCache(AdminCache_Admins);
}
#if defined STYLE
public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;}

public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);}
#if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7
public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#else
public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#endif
public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);}
public void RP(Event E, const char[] N, bool B){PTB();}

public Action TB(Handle T)
#else
public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1;

public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF);
public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);
public RP(Handle:E, String:N[], bool:B) PTB();

public Action:TB(Handle:T)
#endif
{
    PTB();
    return Plugin_Stop;
}
#if defined STYLE
void PTB()
{
    int i=MaxClients, a, b;
#else
PTB()
{
    new i=MaxClients, a, b;
#endif
    do if(IsClientInGame(i)) switch(GetClientTeam(i))
    {
        case CS_TEAM_T:++a;
        case CS_TEAM_CT:++b;
    }while(--i);
    if((a=(a-b)/2))
    {
        b = MaxClients;
        if(0 <a)
        {
            #if defined STYLE
            int[] c=new int[a];
            #else
            decl c[a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_CT);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_CT);
            }
        }else
        {
            #if defined STYLE
            int[] c=new int[a=-a];
            #else
            decl c[a=-a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_T);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_T);
            }
        }
    }
}
Спасибо! Как будет возможность все протестировать тщательно, обязательно отпишусь о результатах
 

Pianyy

Участник
Сообщения
62
Реакции
12
Сейчас такое попрошу...😅
CSS v34
Может кто-то сделать так, чтоб все "плюшки" (то есть, дополнительные пункты в админ меню), которые добавляет этот плагин в админ меню, были доступны только флагу "z", но при этом, чтоб всем было доступно то, что я пропишу в "adminmenu_custom.txt" и работало у всех флагов?😇
заранее спасибо!😉
Оффтоп

В admin_customs ведь можно прописать какие команды и для какого флага можно использовать, зачем плагин переписывать?
 

s777

Участник
Сообщения
449
Реакции
74
Можешь попробовать, но тут без кваров и для любой вип группы.
C-подобный:
#define STYLE        true

#include <cstrike>
#include <vip_core>

#if STYLE &&(SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>6)
#pragma newdecls required
public Plugin myinfo =
#else
#undef STYLE
public Plugin:myinfo =
#endif
{
    name = "Special Team Balancer",
    author = "AlmazON",
    description = "Специальный Балансировщик Команд",
    version = "0.6.0",
    url = "http://www.hlmod.ru"
}

#define CSRoundEnd_GameStart 15
#if defined STYLE
bool bP[MAXPLAYERS+1];
float fRD;
int iAF;
public void OnPluginStart()
{
    ConVar c;
#else
new bool:bP[MAXPLAYERS+1], Float:fRD, iAF;
public OnPluginStart()
{
    decl String:f[AdminFlags_TOTAL], Handle:c;
#endif
    if(GetEngineVersion() !=Engine_CSGO)
    {
        HookEvent("round_end",            RE);
        if((c=FindConVar("mp_round_restart_delay")))
        {
            HookConVarChange(c, RD);
            #if defined STYLE
            fRD = c.FloatValue-0.1;
            #else
            fRD = GetConVarFloat(c)-0.1;
            #endif
        }else if(FileExists("cfg/sourcemod/SpecialTeamBalancer.cfg")==false) LogError("Mode simplified balancing (ConVar \"mp_round_restart_delay\" not found).");
    }
    else HookEvent("round_prestart",    RP, EventHookMode_PostNoCopy);

    HookConVarChange(c=CreateConVar("stb_admin_flag",    "",        "Flags of administrators, excluding balancing.\n\"\" - all."),    AF);

    #if defined STYLE
    char f[AdminFlags_TOTAL];
    c.GetString(f,AdminFlags_TOTAL);
    #else
    GetConVarString(c,f,AdminFlags_TOTAL);
    #endif
    AF(c,f,f);
    AutoExecConfig(_, "SpecialTeamBalancer");
}

#if defined STYLE
public void AF(ConVar C, const char[] O, const char[] N)
#else
public AF(Handle:C, String:O[], const String:N[])
#endif
{
    iAF = ReadFlagString(N[0] ? N:"abcdefghijklmnopqrstz");
    OnRebuildAdminCache(AdminCache_Admins);
}
#if defined STYLE
public void RD(ConVar C, const char[] O, const char[] N){fRD = C.FloatValue-0.1;}

public void OnClientPostAdminCheck(int C){bP[C] = !(GetUserFlagBits(C) &iAF);}
#if SOURCEMOD_V_MAJOR>1 || SOURCEMOD_V_MINOR>7
public void OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#else
public int OnRebuildAdminCache(AdminCachePart P){if(P==AdminCache_Admins) for(int i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);}
#endif
public void RE(Event E, const char[] N, bool B){CreateTimer(E.GetInt("reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);}
public void RP(Event E, const char[] N, bool B){PTB();}

public Action TB(Handle T)
#else
public RD(Handle:C, String:O[], String:N[]) fRD = GetConVarFloat(C)-0.1;

public OnClientPostAdminCheck(C) bP[C] = !(GetUserFlagBits(C) &iAF);
public OnRebuildAdminCache(AdminCachePart:P) if(P==AdminCache_Admins) for(new i=1; i<=MaxClients; ++i) if(IsClientInGame(i)) OnClientPostAdminCheck(i);
public RE(Handle:E, String:N[], bool:B) CreateTimer(GetEventInt(E,"reason")!=CSRoundEnd_GameStart ? fRD:2.9, TB, _, TIMER_FLAG_NO_MAPCHANGE);
public RP(Handle:E, String:N[], bool:B) PTB();

public Action:TB(Handle:T)
#endif
{
    PTB();
    return Plugin_Stop;
}
#if defined STYLE
void PTB()
{
    int i=MaxClients, a, b;
#else
PTB()
{
    new i=MaxClients, a, b;
#endif
    do if(IsClientInGame(i)) switch(GetClientTeam(i))
    {
        case CS_TEAM_T:++a;
        case CS_TEAM_CT:++b;
    }while(--i);
    if((a=(a-b)/2))
    {
        b = MaxClients;
        if(0 <a)
        {
            #if defined STYLE
            int[] c=new int[a];
            #else
            decl c[a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_T) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_CT);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_CT);
            }
        }else
        {
            #if defined STYLE
            int[] c=new int[a=-a];
            #else
            decl c[a=-a];
            #endif
            do if(IsClientInGame(b))
            {
                if(a) if(GetClientTeam(b)==CS_TEAM_CT) if(bP[b]) if(VIP_IsClientVIP(i)) if(IsPlayerAlive(b))
                {
                    if(a>i) c[i++] = b;
                }else
                {
                    CS_SwitchTeam(b, CS_TEAM_T);
                    --a;
                }PrintToChat(b, "\x01 \x04[Автобаланс] \x01Лишние игроки команды \x03Контр-террористов \x05перемещены\x01.");
            }while(--b);
            if(a <i) i = a;
            while(i)
            {
                --i;
                CS_SwitchTeam(c[i], CS_TEAM_T);
            }
        }
    }
}
Вобщем, беда. Автобаланс не работает теперь совсем))
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Есть ли способ засунуть Function в KeyValues без DataPack? Строку пробовал с последующим вызовом через GetFunctionByName, но это уже не то что нужно
 

Doker0909

Участник
Сообщения
105
Реакции
3
В admin_customs ведь можно прописать какие команды и для какого флага можно использовать, зачем плагин переписывать?
Оффтоп
 

babka68

Участник
Сообщения
2,124
Реакции
956
Всем привет,кто сможет подправить ошибку?

C-подобный:
L 04/28/2020 - 18:27:05: SourceMod error session started
L 04/28/2020 - 18:27:05: Info (map "l4d_garage01_alleys") (file "/game/left4dead/addons/sourcemod/logs/errors_20200428.log")
L 04/28/2020 - 18:27:05: [SM] Exception reported: Invalid convar handle 0 (error 4)
L 04/28/2020 - 18:27:05: [SM] Blaming: l4d_cannounce.smx
L 04/28/2020 - 18:27:05: [SM] Call stack trace:
L 04/28/2020 - 18:27:05: [SM]   [0] GetConVarInt
L 04/28/2020 - 18:27:05: [SM]   [1] Line 178, C:\Compiler And Decompiler\SM 1.9.1\Windows Server Files\left4dead\addons\sourcemod\scripting\l4d_cannounce.sp::OnMapStart
Игра Left 4 Dead
 

Вложения

  • l4d_cannounce.sp
    17.3 КБ · Просмотры: 6

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Всем привет,кто сможет подправить ошибку?

C-подобный:
L 04/28/2020 - 18:27:05: SourceMod error session started
L 04/28/2020 - 18:27:05: Info (map "l4d_garage01_alleys") (file "/game/left4dead/addons/sourcemod/logs/errors_20200428.log")
L 04/28/2020 - 18:27:05: [SM] Exception reported: Invalid convar handle 0 (error 4)
L 04/28/2020 - 18:27:05: [SM] Blaming: l4d_cannounce.smx
L 04/28/2020 - 18:27:05: [SM] Call stack trace:
L 04/28/2020 - 18:27:05: [SM]   [0] GetConVarInt
L 04/28/2020 - 18:27:05: [SM]   [1] Line 178, C:\Compiler And Decompiler\SM 1.9.1\Windows Server Files\left4dead\addons\sourcemod\scripting\l4d_cannounce.sp::OnMapStart
Игра Left 4 Dead
sv_maxplayers пытается найти. В строчке 178 попробуй заменить hSlots = GetConVarInt(FindConVar("sv_maxplayers")); на это:
hSlots = MaxClients;
 

babka68

Участник
Сообщения
2,124
Реакции
956
sv_maxplayers пытается найти. В строчке 178 попробуй заменить hSlots = GetConVarInt(FindConVar("sv_maxplayers")); на это:
hSlots = MaxClients;
Изменил:
C-подобный:
hSlots = GetConVarInt(FindConVar("sv_maxplayers"));
на
C-подобный:
hSlots = MaxClients;
итог на фото)
 

Вложения

  • 1.png
    1.png
    11 КБ · Просмотры: 14

RusJJ

Доброе утро девачьки
Сообщения
2,582
Реакции
1,075
Изменил:
C-подобный:
hSlots = GetConVarInt(FindConVar("sv_maxplayers"));
на
C-подобный:
hSlots = MaxClients;
итог на фото)
Не зависит от того, что ты изменил. Этому плагину наверное лет 10, написанный на древний сурсмод. Надо в инклюде geoip смотреть новые функции.

А теперь мне мини-хелп нужен. Кто знает форварды, которыми можно чекнуть именно ВХОД на сервер? Надо сохранить данные игрока после смены карты, а они слетают... Короче мда просто.
Найдено.
 
Последнее редактирование:

Troyanskaya

Участник
Сообщения
442
Реакции
30
Здравствуйте.Помогите покрасить плагин
пробовал добавить morecolors, с ошибкой скомпилился.
//SourceMod Batch Compiler
// by the SourceMod Dev Team

//// weapon_limit.sp
//
// weapon_limit/vars.sp(20) : warning 241: Array-based enum structs will be removed in 1.11. See SourcePawn Transitional Syntax - AlliedModders Wiki
// weapon_limit/natives_forwards.sp(36) : warning 237: coercing functions to and from primitives is unsupported and will be removed in the future
// weapon_limit/natives_forwards.sp(43) : warning 237: coercing functions to and from primitives is unsupported and will be removed in the future
// Code size: 32624 bytes
// Data size: 8324 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 57332 bytes
//
// 3 Warnings.
//
// Compilation Time: 0,23 sec
// ----------------------------------------

Press enter to exit ...
 

Вложения

  • weapon_limit.zip
    39.6 КБ · Просмотры: 4

gtixon

Участник
Сообщения
1,078
Реакции
401
Привет всем! Помогите, как отследить урон по курице?
 
Сверху Снизу