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

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Столкнулся со следующей ошибкой:
[SM] Exception reported: Plugin owning this native is currently paused.
Данная ошибка возникает во всех модулях ядра при рестарте сервера (проверял на командах quit и exit)
В интернете искал, ничего не нашёл, спрашивал у многих, никто с таким не сталкивался, может кто-то что-то и подскажет. Прикрепляю библиотеку ядра, может пригодится. Если выгружать какой-либо модуль через sm plugins unload module.smx, то всё успешно срабатывает и выгружается. Буду благодарен советам и за любую помощь в решении проблемы.
 

Вложения

  • premium.inc
    6.6 КБ · Просмотры: 5

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Столкнулся со следующей ошибкой:
[SM] Exception reported: Plugin owning this native is currently paused.
Данная ошибка возникает во всех модулях ядра при рестарте сервера (проверял на командах quit и exit)
В интернете искал, ничего не нашёл, спрашивал у многих, никто с таким не сталкивался, может кто-то что-то и подскажет. Прикрепляю библиотеку ядра, может пригодится. Если выгружать какой-либо модуль через sm plugins unload module.smx, то всё успешно срабатывает и выгружается. Буду благодарен советам и за любую помощь в решении проблемы.
Решение проблемы вроде как, всё работает, ошибок более таких нет.
C-подобный:
public void OnPluginEnd() {
    if(LibraryExists("premium"))
        Premium_UnRegisterFeature(FEATURE_NAME);
}

Ранее проверка была немного другой:
C-подобный:
public void OnPluginEnd() {
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "Premium_UnRegisterFeature") == FeatureStatus_Available)
        Premium_UnRegisterFeature(FEATURE_NAME);
}
 

Seton

Участник
Сообщения
44
Реакции
41
Проблема с VIP-модулем UnlimitedAmmo, выдает ошибку: строка 52, Property "m_iPrimaryAmmoType" not found (entity 377/item_assaultsuit)
UnlimitedAmmo:
#include <sdktools>
#include <sdkhooks>
#include <vip_core>

static const char g_sFeature[] = "UnlimitedAmmo";

public void OnPluginStart()
{   
    if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();
}

public void VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_sFeature, BOOL);
}

public void OnEntityCreated(int iEntity, const char[] sClassname)
{
    if(strncmp(sClassname, "weapon_", 7) == 0) SDKHook(iEntity, SDKHook_ReloadPost, ReloadPost);
}

public void ReloadPost(int iWeapon, bool bSuccess)
{
    if(bSuccess && IsValidEntity(iWeapon))
    {
        int iClient = GetEntPropEnt(iWeapon, Prop_Data, "m_hOwner");
    
        if(IsClientInGame(iClient) && IsPlayerAlive(iClient) && VIP_IsClientFeatureUse(iClient, g_sFeature))
        {
            DataPack hPack = new DataPack();
            hPack.WriteCell(iClient);
            hPack.WriteCell(iWeapon);
            CreateTimer(3.0, TimerFastReload, hPack);
        }
    }
}

public Action TimerFastReload(Handle hTimer, any hDataPack)
{
    DataPack hPack = view_as<DataPack>(hDataPack);
    hPack.Reset();
 
    int iClient = hPack.ReadCell();
 
    if(IsClientInGame(iClient) && IsPlayerAlive(iClient))
    {
        int iWeapon = hPack.ReadCell();

        if(IsValidEntity(iWeapon))
        {
            int m_iPrimaryAmmoType = -1;
            if ((m_iPrimaryAmmoType = GetEntProp(iWeapon, Prop_Send, "m_iPrimaryAmmoType")) != -1)
            {
                SetEntProp(iClient, Prop_Send, "m_iAmmo", 777, _, m_iPrimaryAmmoType);
            }
        }
    }
 
    delete hPack;
    return Plugin_Stop;
}

public void OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
 

DarkerZ

Участник
Сообщения
394
Реакции
175
Проблема с VIP-модулем UnlimitedAmmo, выдает ошибку: строка 52, Property "m_iPrimaryAmmoType" not found (entity 377/item_assaultsuit)
UnlimitedAmmo:
#include <sdktools>
#include <sdkhooks>
#include <vip_core>

static const char g_sFeature[] = "UnlimitedAmmo";

public void OnPluginStart()
{  
    if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();
}

public void VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_sFeature, BOOL);
}

public void OnEntityCreated(int iEntity, const char[] sClassname)
{
    if(strncmp(sClassname, "weapon_", 7) == 0) SDKHook(iEntity, SDKHook_ReloadPost, ReloadPost);
}

public void ReloadPost(int iWeapon, bool bSuccess)
{
    if(bSuccess && IsValidEntity(iWeapon))
    {
        int iClient = GetEntPropEnt(iWeapon, Prop_Data, "m_hOwner");
   
        if(IsClientInGame(iClient) && IsPlayerAlive(iClient) && VIP_IsClientFeatureUse(iClient, g_sFeature))
        {
            DataPack hPack = new DataPack();
            hPack.WriteCell(iClient);
            hPack.WriteCell(iWeapon);
            CreateTimer(3.0, TimerFastReload, hPack);
        }
    }
}

public Action TimerFastReload(Handle hTimer, any hDataPack)
{
    DataPack hPack = view_as<DataPack>(hDataPack);
    hPack.Reset();
 
    int iClient = hPack.ReadCell();
 
    if(IsClientInGame(iClient) && IsPlayerAlive(iClient))
    {
        int iWeapon = hPack.ReadCell();

        if(IsValidEntity(iWeapon))
        {
            int m_iPrimaryAmmoType = -1;
            if ((m_iPrimaryAmmoType = GetEntProp(iWeapon, Prop_Send, "m_iPrimaryAmmoType")) != -1)
            {
                SetEntProp(iClient, Prop_Send, "m_iAmmo", 777, _, m_iPrimaryAmmoType);
            }
        }
    }
 
    delete hPack;
    return Plugin_Stop;
}

public void OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
попробуй так
SP:
#include <sdktools>
#include <sdkhooks>
#include <vip_core>

static const char g_sFeature[] = "UnlimitedAmmo";

public void OnPluginStart()
{   
    if(VIP_IsVIPLoaded()) VIP_OnVIPLoaded();
}

public void VIP_OnVIPLoaded()
{
    VIP_RegisterFeature(g_sFeature, BOOL);
}

public void OnEntityCreated(int iEntity, const char[] sClassname)
{
    if(strncmp(sClassname, "weapon_", 7) == 0) SDKHook(iEntity, SDKHook_ReloadPost, ReloadPost);
}

public void ReloadPost(int iWeapon, bool bSuccess)
{
    if(bSuccess && IsValidEntity(iWeapon))
    {
        int iClient = GetEntPropEnt(iWeapon, Prop_Data, "m_hOwner");
    
        if(IsClientInGame(iClient) && IsPlayerAlive(iClient) && VIP_IsClientFeatureUse(iClient, g_sFeature))
        {
            DataPack hPack = new DataPack();
            hPack.WriteCell(iClient);
            hPack.WriteCell(EntIndexToEntRef(iWeapon));
            CreateTimer(3.0, TimerFastReload, hPack);
        }
    }
}

public Action TimerFastReload(Handle hTimer, any hDataPack)
{
    DataPack hPack = view_as<DataPack>(hDataPack);
    hPack.Reset();
 
    int iClient = hPack.ReadCell();
 
    if(IsClientInGame(iClient) && IsPlayerAlive(iClient))
    {
        int iWeapon = EntRefToEntIndex(hPack.ReadCell());

        if(iWeapon != INVALID_ENT_REFERENCE)
        {
            int m_iPrimaryAmmoType = -1;
            if ((m_iPrimaryAmmoType = GetEntProp(iWeapon, Prop_Send, "m_iPrimaryAmmoType")) != -1)
            {
                SetEntProp(iClient, Prop_Send, "m_iAmmo", 777, _, m_iPrimaryAmmoType);
            }
        }
    }
 
    delete hPack;
    return Plugin_Stop;
}

public void OnPluginEnd()
{
    if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "VIP_UnregisterFeature") == FeatureStatus_Available)
    {
        VIP_UnregisterFeature(g_sFeature);
    }
}
 

samec051

Участник
Сообщения
26
Реакции
3
Привет! Есть функция, в ней такое условие, что примерно в конце карты игрока кикает с сервера. Но как сделать так, чтобы каждый игрок мог отключить этот кик? Например, чтобы при написании какой-нить команды в чат, игрока больше не кикало? Спасибо.
C-подобный:
int timeleft;
GetMapTimeLeft(timeleft);
if(timeleft < 3)
{
    KickClient(client, "Конец игры :c");
}
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Привет! Есть функция, в ней такое условие, что примерно в конце карты игрока кикает с сервера. Но как сделать так, чтобы каждый игрок мог отключить этот кик? Например, чтобы при написании какой-нить команды в чат, игрока больше не кикало? Спасибо.
C-подобный:
int timeleft;
GetMapTimeLeft(timeleft);
if(timeleft < 3)
{
    KickClient(client, "Конец игры :c");
}
Сделать можно через clientprefs, там и в меню можно подключить `!settings`. Пример кода можно глянуть, к примеру, тут.
 

Paranoiiik

хачю клиентмод
Сообщения
2,047
Реакции
1,490
Привет! Есть функция, в ней такое условие, что примерно в конце карты игрока кикает с сервера. Но как сделать так, чтобы каждый игрок мог отключить этот кик? Например, чтобы при написании какой-нить команды в чат, игрока больше не кикало? Спасибо.
C-подобный:
int timeleft;
GetMapTimeLeft(timeleft);
if(timeleft < 3)
{
    KickClient(client, "Конец игры :c");
}
Если очень просто, и нужен автоматический сброс при коннекте
C-подобный:
bool bNET[MAXPLAYERS + 1];

public void OnPluginStart()
{
    RegConsoleCmd("sm_nokick", commandImmunity);
}

Action commandImmunity(int client, int args)
{
    if(client) bNET[client] = true;
    return Plugin_Handled;
}

public void OnClientConnected(int client)
{
    if(!IsFakeClient(client)) bNET[client] = false;
}

void yourFunction()
{
    int timeleft;
    GetMapTimeLeft(timeleft);
  
    if(timeleft < 3 && !bNET[client])
        KickClient(client, "Конец игры :c");
}
 

Seton

Участник
Сообщения
44
Реакции
41
Проблема с эффектом в конце раунда, выдает ошибку:
[SM] Exception reported: Handle 791b07be is invalid (error 1)
[SM] Blaming: Effect.smx
[SM] Call stack trace:
[SM] [0] CloseHandle
[SM] [1] Line 28, D:\Compiled_sm\v1.11\Effect.sp::round_start

effect:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma tabsize 0

int Renk_Sirasi;
Handle h_timer = null;

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

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
    Renk_Sirasi = 1;

    h_timer = CreateTimer(0.3, Renk_Degistir, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
    Ekrani_Salla();   
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    } 
}

public Action:Renk_Degistir(Handle:Timer)
{   
    for (new i = 1; i <= MaxClients; i++)
    {
        if(IsClientConnected(i) && !IsFakeClient(i) && IsValidClient(i))
        {
            if(Renk_Sirasi == 1)
            {
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);               
            }
            else
            if(Renk_Sirasi == 2)
            {
                Ekran_Renk_Olustur(i, 0, 255, 0, 160);               
            }
            else
            if(Renk_Sirasi == 3)
            {
                Ekran_Renk_Olustur(i, 0, 0, 255, 160);               
            }
            else
            if(Renk_Sirasi == 4)
            {
                Ekran_Renk_Olustur(i, 102, 0, 255, 160);               
            }
            else
            if(Renk_Sirasi == 5)
            {
                Ekran_Renk_Olustur(i, 204, 204, 0, 160);               
            }
            else
            if(Renk_Sirasi == 6)
            {
                Ekran_Renk_Olustur(i, 255, 0, 102, 160);               
            }
            else
            if(Renk_Sirasi == 7)
            {
                Ekran_Renk_Olustur(i, 255, 102, 0, 160);               
            }
            else
            if(Renk_Sirasi == 8)
            {
                Renk_Sirasi = 1;
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);               
            }
        }
    }
    
    Renk_Sirasi++;       
}

Ekran_Renk_Olustur(client, Renk1, Renk2, Renk3, Renk4)
{   
    int clients[2];
    clients[0] = client;
    
    int Renk[4];
    Renk[0] = Renk1;
    Renk[1] = Renk2;
    Renk[2] = Renk3;
    Renk[3] = Renk4;
        
    Handle message = StartMessageEx(GetUserMessageId("Fade"), clients, 1);
      
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf pb = UserMessageToProtobuf(message);
        pb.SetInt("duration", 200);
        pb.SetInt("hold_time", 200);
        pb.SetInt("flags", (0x0001 | 0x0010));
        pb.SetColor("clr", Renk);
    }
    else
    {
        BfWriteShort(message, 200);
        BfWriteShort(message, 200);
        BfWriteShort(message, (0x0001 | 0x0010));
        BfWriteByte(message, Renk[0]);
        BfWriteByte(message, Renk[1]);
        BfWriteByte(message, Renk[2]);
        BfWriteByte(message, Renk[3]);
    }

    EndMessage();   
}

Ekrani_Salla()
{   
    Handle message = StartMessageAll("Shake");   
    if (GetUserMessageType() == UM_Protobuf)
    {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "local_amplitude", 30.0);
        PbSetFloat(message, "frequency", 15.0);
        PbSetFloat(message, "duration", 6.0);
    }
    else
    {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 30.0);
        BfWriteFloat(message, 15.0);
        BfWriteFloat(message, 6.0);
    }

    EndMessage();           
}

bool:IsValidClient( client )
{
    if ( !( 1 <= client <= MaxClients ) || !IsClientInGame(client) )
        return false;
    
    return true;
}
 

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Проблема с эффектом в конце раунда, выдает ошибку:
[SM] Exception reported: Handle 791b07be is invalid (error 1)
[SM] Blaming: Effect.smx
[SM] Call stack trace:
[SM] [0] CloseHandle
[SM] [1] Line 28, D:\Compiled_sm\v1.11\Effect.sp::round_start

effect:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma tabsize 0

int Renk_Sirasi;
Handle h_timer = null;

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

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
    Renk_Sirasi = 1;

    h_timer = CreateTimer(0.3, Renk_Degistir, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
    Ekrani_Salla();  
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    }
}

public Action:Renk_Degistir(Handle:Timer)
{  
    for (new i = 1; i <= MaxClients; i++)
    {
        if(IsClientConnected(i) && !IsFakeClient(i) && IsValidClient(i))
        {
            if(Renk_Sirasi == 1)
            {
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);              
            }
            else
            if(Renk_Sirasi == 2)
            {
                Ekran_Renk_Olustur(i, 0, 255, 0, 160);              
            }
            else
            if(Renk_Sirasi == 3)
            {
                Ekran_Renk_Olustur(i, 0, 0, 255, 160);              
            }
            else
            if(Renk_Sirasi == 4)
            {
                Ekran_Renk_Olustur(i, 102, 0, 255, 160);              
            }
            else
            if(Renk_Sirasi == 5)
            {
                Ekran_Renk_Olustur(i, 204, 204, 0, 160);              
            }
            else
            if(Renk_Sirasi == 6)
            {
                Ekran_Renk_Olustur(i, 255, 0, 102, 160);              
            }
            else
            if(Renk_Sirasi == 7)
            {
                Ekran_Renk_Olustur(i, 255, 102, 0, 160);              
            }
            else
            if(Renk_Sirasi == 8)
            {
                Renk_Sirasi = 1;
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);              
            }
        }
    }
   
    Renk_Sirasi++;      
}

Ekran_Renk_Olustur(client, Renk1, Renk2, Renk3, Renk4)
{  
    int clients[2];
    clients[0] = client;
   
    int Renk[4];
    Renk[0] = Renk1;
    Renk[1] = Renk2;
    Renk[2] = Renk3;
    Renk[3] = Renk4;
       
    Handle message = StartMessageEx(GetUserMessageId("Fade"), clients, 1);
     
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf pb = UserMessageToProtobuf(message);
        pb.SetInt("duration", 200);
        pb.SetInt("hold_time", 200);
        pb.SetInt("flags", (0x0001 | 0x0010));
        pb.SetColor("clr", Renk);
    }
    else
    {
        BfWriteShort(message, 200);
        BfWriteShort(message, 200);
        BfWriteShort(message, (0x0001 | 0x0010));
        BfWriteByte(message, Renk[0]);
        BfWriteByte(message, Renk[1]);
        BfWriteByte(message, Renk[2]);
        BfWriteByte(message, Renk[3]);
    }

    EndMessage();  
}

Ekrani_Salla()
{  
    Handle message = StartMessageAll("Shake");  
    if (GetUserMessageType() == UM_Protobuf)
    {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "local_amplitude", 30.0);
        PbSetFloat(message, "frequency", 15.0);
        PbSetFloat(message, "duration", 6.0);
    }
    else
    {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 30.0);
        BfWriteFloat(message, 15.0);
        BfWriteFloat(message, 6.0);
    }

    EndMessage();          
}

bool:IsValidClient( client )
{
    if ( !( 1 <= client <= MaxClients ) || !IsClientInGame(client) )
        return false;
   
    return true;
}
Нужно больше проверок

еа:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma tabsize 0

int Renk_Sirasi;
Handle h_timer = null;

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

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    }

    Renk_Sirasi = 1;

    h_timer = CreateTimer(0.3, Renk_Degistir, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
    Ekrani_Salla();   
}

public OnMapEnd()
{
    h_timer = null;
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    }
}

public Action:Renk_Degistir(Handle:Timer)
{   
    for (new i = 1; i <= MaxClients; i++)
    {
        if(IsClientConnected(i) && !IsFakeClient(i) && IsValidClient(i))
        {
            if(Renk_Sirasi == 1)
            {
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);               
            }
            else
            if(Renk_Sirasi == 2)
            {
                Ekran_Renk_Olustur(i, 0, 255, 0, 160);               
            }
            else
            if(Renk_Sirasi == 3)
            {
                Ekran_Renk_Olustur(i, 0, 0, 255, 160);               
            }
            else
            if(Renk_Sirasi == 4)
            {
                Ekran_Renk_Olustur(i, 102, 0, 255, 160);               
            }
            else
            if(Renk_Sirasi == 5)
            {
                Ekran_Renk_Olustur(i, 204, 204, 0, 160);               
            }
            else
            if(Renk_Sirasi == 6)
            {
                Ekran_Renk_Olustur(i, 255, 0, 102, 160);               
            }
            else
            if(Renk_Sirasi == 7)
            {
                Ekran_Renk_Olustur(i, 255, 102, 0, 160);               
            }
            else
            if(Renk_Sirasi == 8)
            {
                Renk_Sirasi = 1;
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);               
            }
        }
    }
    
    Renk_Sirasi++;       
}

Ekran_Renk_Olustur(client, Renk1, Renk2, Renk3, Renk4)
{   
    int clients[2];
    clients[0] = client;
    
    int Renk[4];
    Renk[0] = Renk1;
    Renk[1] = Renk2;
    Renk[2] = Renk3;
    Renk[3] = Renk4;
        
    Handle message = StartMessageEx(GetUserMessageId("Fade"), clients, 1);
      
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf pb = UserMessageToProtobuf(message);
        pb.SetInt("duration", 200);
        pb.SetInt("hold_time", 200);
        pb.SetInt("flags", (0x0001 | 0x0010));
        pb.SetColor("clr", Renk);
    }
    else
    {
        BfWriteShort(message, 200);
        BfWriteShort(message, 200);
        BfWriteShort(message, (0x0001 | 0x0010));
        BfWriteByte(message, Renk[0]);
        BfWriteByte(message, Renk[1]);
        BfWriteByte(message, Renk[2]);
        BfWriteByte(message, Renk[3]);
    }

    EndMessage();   
}

Ekrani_Salla()
{   
    Handle message = StartMessageAll("Shake");   
    if (GetUserMessageType() == UM_Protobuf)
    {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "local_amplitude", 30.0);
        PbSetFloat(message, "frequency", 15.0);
        PbSetFloat(message, "duration", 6.0);
    }
    else
    {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 30.0);
        BfWriteFloat(message, 15.0);
        BfWriteFloat(message, 6.0);
    }

    EndMessage();           
}

bool:IsValidClient( client )
{
    if ( !( 1 <= client <= MaxClients ) || !IsClientInGame(client) )
        return false;
    
    return true;
}
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Нужно больше проверок

еа:
#include <sourcemod>
#include <sdktools>
#include <cstrike>

#pragma tabsize 0

int Renk_Sirasi;
Handle h_timer = null;

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

public round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    }

    Renk_Sirasi = 1;

    h_timer = CreateTimer(0.3, Renk_Degistir, _, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT);
    Ekrani_Salla();  
}

public OnMapEnd()
{
    h_timer = null;
}

public round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (h_timer != null)
    {
        CloseHandle(h_timer);
          h_timer = null;
    }
}

public Action:Renk_Degistir(Handle:Timer)
{  
    for (new i = 1; i <= MaxClients; i++)
    {
        if(IsClientConnected(i) && !IsFakeClient(i) && IsValidClient(i))
        {
            if(Renk_Sirasi == 1)
            {
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);              
            }
            else
            if(Renk_Sirasi == 2)
            {
                Ekran_Renk_Olustur(i, 0, 255, 0, 160);              
            }
            else
            if(Renk_Sirasi == 3)
            {
                Ekran_Renk_Olustur(i, 0, 0, 255, 160);              
            }
            else
            if(Renk_Sirasi == 4)
            {
                Ekran_Renk_Olustur(i, 102, 0, 255, 160);              
            }
            else
            if(Renk_Sirasi == 5)
            {
                Ekran_Renk_Olustur(i, 204, 204, 0, 160);              
            }
            else
            if(Renk_Sirasi == 6)
            {
                Ekran_Renk_Olustur(i, 255, 0, 102, 160);              
            }
            else
            if(Renk_Sirasi == 7)
            {
                Ekran_Renk_Olustur(i, 255, 102, 0, 160);              
            }
            else
            if(Renk_Sirasi == 8)
            {
                Renk_Sirasi = 1;
                Ekran_Renk_Olustur(i, 255, 0, 0, 160);              
            }
        }
    }
   
    Renk_Sirasi++;      
}

Ekran_Renk_Olustur(client, Renk1, Renk2, Renk3, Renk4)
{  
    int clients[2];
    clients[0] = client;
   
    int Renk[4];
    Renk[0] = Renk1;
    Renk[1] = Renk2;
    Renk[2] = Renk3;
    Renk[3] = Renk4;
       
    Handle message = StartMessageEx(GetUserMessageId("Fade"), clients, 1);
     
    if (GetUserMessageType() == UM_Protobuf)
    {
        Protobuf pb = UserMessageToProtobuf(message);
        pb.SetInt("duration", 200);
        pb.SetInt("hold_time", 200);
        pb.SetInt("flags", (0x0001 | 0x0010));
        pb.SetColor("clr", Renk);
    }
    else
    {
        BfWriteShort(message, 200);
        BfWriteShort(message, 200);
        BfWriteShort(message, (0x0001 | 0x0010));
        BfWriteByte(message, Renk[0]);
        BfWriteByte(message, Renk[1]);
        BfWriteByte(message, Renk[2]);
        BfWriteByte(message, Renk[3]);
    }

    EndMessage();  
}

Ekrani_Salla()
{  
    Handle message = StartMessageAll("Shake");  
    if (GetUserMessageType() == UM_Protobuf)
    {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "local_amplitude", 30.0);
        PbSetFloat(message, "frequency", 15.0);
        PbSetFloat(message, "duration", 6.0);
    }
    else
    {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 30.0);
        BfWriteFloat(message, 15.0);
        BfWriteFloat(message, 6.0);
    }

    EndMessage();          
}

bool:IsValidClient( client )
{
    if ( !( 1 <= client <= MaxClients ) || !IsClientInGame(client) )
        return false;
   
    return true;
}
 

Вложения

  • d2c923d925bd37654b530f13ab85a1e3.jpg
    d2c923d925bd37654b530f13ab85a1e3.jpg
    24.8 КБ · Просмотры: 27

xstage

🏹
Сообщения
726
Реакции
754

Вложения

  • VIP_Equipments_1.0.1.sp
    18.7 КБ · Просмотры: 31

alexey_gamov

Участник
Сообщения
22
Реакции
6
Кому-нибудь попадался плагин для скрытия дрожи экрана у клиента при получении урона по каске? Еще интересует как можно убрать искры при такой же ситуации но уже на модельке противника?
 

Seton

Участник
Сообщения
44
Реакции
41
Проблема с проверкой последнего игрока в команде, срабатывает на предпоследним

lastman:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools_stringtables>

public OnPluginStart() HookEvent("player_death", player_death);

public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
    new lastManID;
    for (new i = 1, killedTeam = GetClientTeam(GetClientOfUserId(GetEventInt(event, "userid"))); i < MaxClients; i++)
    {
        if(!IsClientInGame(i) || killedTeam != GetClientTeam(i) || !IsPlayerAlive(i)) continue;
        
        if(!lastManID) lastManID = i;
        else
        {
            lastManID = -1;
            break;
        }
    }
    if(lastManID < 1) return;
    
    decl String:weaponName[100];
    GetEventString(event,"weapon",weaponName,100);
    new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
    if(killer && StrEqual(weaponName, "knife"))
    {
        decl iClients[1];
        iClients[0] = killer;
        new Handle:message = StartMessage("Shake", iClients, 1);   
        if (GetUserMessageType() == UM_Protobuf)
        {
            PbSetInt(message, "command", 0);
            PbSetFloat(message, "duration", 3.0);
        }
        else
        {
            BfWriteByte(message, 0);
            BfWriteFloat(message, 3.0);
        }
        EndMessage();
    }
}
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Проблема с проверкой последнего игрока в команде, срабатывает на предпоследним

lastman:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools_stringtables>

public OnPluginStart() HookEvent("player_death", player_death);

public player_death(Handle:event, const String:name[], bool:dontBroadcast)
{
    new lastManID;
    for (new i = 1, killedTeam = GetClientTeam(GetClientOfUserId(GetEventInt(event, "userid"))); i < MaxClients; i++)
    {
        if(!IsClientInGame(i) || killedTeam != GetClientTeam(i) || !IsPlayerAlive(i)) continue;
       
        if(!lastManID) lastManID = i;
        else
        {
            lastManID = -1;
            break;
        }
    }
    if(lastManID < 1) return;
   
    decl String:weaponName[100];
    GetEventString(event,"weapon",weaponName,100);
    new killer = GetClientOfUserId(GetEventInt(event, "attacker"));
    if(killer && StrEqual(weaponName, "knife"))
    {
        decl iClients[1];
        iClients[0] = killer;
        new Handle:message = StartMessage("Shake", iClients, 1);  
        if (GetUserMessageType() == UM_Protobuf)
        {
            PbSetInt(message, "command", 0);
            PbSetFloat(message, "duration", 3.0);
        }
        else
        {
            BfWriteByte(message, 0);
            BfWriteFloat(message, 3.0);
        }
        EndMessage();
    }
}
C-подобный:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools_stringtables>

public OnPluginStart()
{
    HookEvent("player_death", player_death);
}

public Action player_death(Event event, const char[] name, bool dontBroadcast)
{
    int killer = GetClientOfUserId(event.GetInt("attacker"));
    if(killer <= 0 || killer >= MaxClients) {
        return;
    }

    int killedTeam = GetClientTeam(GetClientOfUserId(event.GetInt("userid")));
    for (int i = 1, count; i < MaxClients; i++)    if(IsClientInGame(i) && killedTeam == GetClientTeam(i) && !IsPlayerAlive(i)) {
        if(count++ > 1) {
            return;
        }
    }
    
    char weaponName[100];
    event.GetString("weapon", weaponName, 100);

    if(strcmp("knife", weaponName, false) != 1) {
        return;
    }

    Handle message = StartMessageOne("Shake", killer);   
    if (GetUserMessageType() == UM_Protobuf) {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "duration", 3.0);
    } else {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 3.0);
    }
    EndMessage();
}
 

Seton

Участник
Сообщения
44
Реакции
41
C-подобный:
#pragma semicolon 1
#include <sourcemod>
#include <sdktools_stringtables>

public OnPluginStart()
{
    HookEvent("player_death", player_death);
}

public Action player_death(Event event, const char[] name, bool dontBroadcast)
{
    int killer = GetClientOfUserId(event.GetInt("attacker"));
    if(killer <= 0 || killer >= MaxClients) {
        return;
    }

    int killedTeam = GetClientTeam(GetClientOfUserId(event.GetInt("userid")));
    for (int i = 1, count; i < MaxClients; i++)    if(IsClientInGame(i) && killedTeam == GetClientTeam(i) && !IsPlayerAlive(i)) {
        if(count++ > 1) {
            return;
        }
    }
   
    char weaponName[100];
    event.GetString("weapon", weaponName, 100);

    if(strcmp("knife", weaponName, false) != 1) {
        return;
    }

    Handle message = StartMessageOne("Shake", killer);  
    if (GetUserMessageType() == UM_Protobuf) {
        PbSetInt(message, "command", 0);
        PbSetFloat(message, "duration", 3.0);
    } else {
        BfWriteByte(message, 0);
        BfWriteFloat(message, 3.0);
    }
    EndMessage();
}
не срабатывает, такая же проблема
 

HenryTownshand

Чел ты
Сообщения
255
Реакции
140
А можно как то убрать эффект серого экрана в ксго когда заходишь в дым?
 

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

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Всем вечер добрый!
Если кому не сложно,будьте добры,подправьте пожалуйста плагин.
Плагин крашит сервер.
Ошибка была только такая.
L 05/03/2022 - 23:36:07: [SM] [1] Line 45, E:\Users\Desktop\source.sp::OnConfigsExecuted
Заранее благодарю.
 

Вложения

  • source.sp
    5.7 КБ · Просмотры: 11

Ganter1234

Участник
Сообщения
1,149
Реакции
667
Всем вечер добрый!
Если кому не сложно,будьте добры,подправьте пожалуйста плагин.
Плагин крашит сервер.
Ошибка была только такая.
L 05/03/2022 - 23:36:07: [SM] [1] Line 45, E:\Users\Desktop\source.sp::OnConfigsExecuted
Заранее благодарю.
Ну попробуй
 

Вложения

  • source.sp
    5.7 КБ · Просмотры: 9
Сверху Снизу