Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

PANDA_2zl - zdjęcie

PANDA_2zl

Rejestracja: 13.02.2019
Aktualnie: Nieaktywny
Poza forum Ostatnio: wczoraj, 00:52
***--

Moje posty

W temacie: Szukam pluginu który naprawia wyrzucanie broni powyżej 30

30.03.2026 19:37

jestem ślepy

/*
* Hook API function that are available into enum.
* Look at the enums for parameter lists.
*
* @param function   The function to hook
* @param callback   The forward to call
* @param post       Whether or not to forward this in post
*
* @return           Returns a hook handle. Use EnableHookChain/DisableHookChain to toggle the forward on or off
*/
native HookChain:RegisterHookChain(ReAPIFunc:function_id, const callback[], post = 0);
...

define ReAPIFunc 				{EngineFunc, GamedllFunc, GamedllFunc_CBaseAnimating, GamedllFunc_CBasePlayer, GamedllFunc_CSGameRules, GamedllFunc_CGrenade, GamedllFunc_CWeaponBox, ReCheckerFunc, GamedllFunc_CBasePlayerWeapon, GamedllFunc_CGib, GamedllFunc_CBaseEntity, GamedllFunc_CBotManager}
edict_t* CreateEntity();
edict_t* CreateNamedEntity();
Nawet fakemeta ma takie same cuda :)

a dasz radę mi skompilować ten kod? bo nie chce mi działać, za głupi jestem

W temacie: Szukam pluginu który naprawia wyrzucanie broni powyżej 30

30.03.2026 16:48

majster skąd te eventy wziąłeś? bo bym sam skorzystał

Z Piątnicy no bo skąd 🙈🤣

A tak serio: https://github.com/r...ripting/include

wskaż w którym pliku masz te eventy, a najlepiej zacytuj segmenty z nimi, bo chyba jestem ślepy

W temacie: Szukam pluginu który naprawia wyrzucanie broni powyżej 30

30.03.2026 13:31


Spróbujemy to ugryźć inaczej ;)

guard_max_weapons "20" - maksymalna ilość broni na mapie
// 20 - NS
// 25 - Maksymalne dla stabilności
// 30 - ryzyko crasha

guard_weapon_life "10.0" - czas "życia" broni na ziemi
// 10.0 - agresywne usuwanie
// 15.0 - optymalne / stabline
// 30.0 - długie, możliwy crash

guard_max_edicts "900" - maksymalna ilośc encji na serwerze
// 850 - bezpieczen / stabilne
// 900 - optymalne / stabilne
// 1000 - ryzykowne przy NS

guard_safe_margin "100" - buffor bezpieczeństwa, plugin nie czeka az osiągniesz wartość z guard_max_edicts tylko reaguje odpowiednio wcześniej 
// 50 - pozna reakcja, możliwe ryzyko crasha
// 100 - optymalne / stabilne
// 150 - bezpieczne / stabilne
//
// dokładnie działa to tak [ guard_max_edicts - guard_safe_margin ]

guard_debug "0" - debuger
// 0 - off
// 1 - on
// loguje do konsoli co robi plugin oraz dodatkowo co spamuje enitami z innych pluginów
#include <amxmodx>
#include <reapi>

#define PLUGIN  "Entity & Drop Fix"
#define VERSION "1.1"
#define AUTHOR  "Misiaczek ;c / Err0r"

new g_pMaxWeapons;
new g_pWeaponLife;
new g_pMaxEdicts;
new g_pSafeMargin;
new g_pDebug;
new g_iWeaponCount;
new g_iEdictCount;

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    g_pMaxWeapons = register_cvar("guard_max_weapons", "25");
    g_pWeaponLife = register_cvar("guard_weapon_life", "15.0");
    g_pMaxEdicts  = register_cvar("guard_max_edicts", "900");
    g_pSafeMargin = register_cvar("guard_safe_margin", "50");

    g_pDebug = register_cvar("guard_debug", "0");

    RegisterHookChain(RG_CBasePlayer_DropPlayerItem, "OnDrop", false);
    RegisterHookChain(RG_CreateEntity, "OnEntityCreate", false);
    RegisterHookChain(RG_RemoveEntity, "OnEntityRemove", true);
    RegisterHookChain(RG_RoundEnd, "OnRoundEnd", true);

    set_task(1.0, "CleanupWeapons", _, _, _, "b");
    set_task(3.0, "FullSync", _, _, _, "b");
}

public plugin_cfg()
{
    FullSync();
}

public OnDrop(const id, const char[] item)
{
    if (!is_user_alive(id))
        return HC_CONTINUE;

    new max = get_pcvar_num(g_pMaxWeapons);

    if (g_iWeaponCount >= max)
    {
        if (get_pcvar_num(g_pDebug))
            client_print(id, print_center, "[GUARD] Limit broni!");

        return HC_SUPERCEDE;
    }

    return HC_CONTINUE;
}

public OnEntityCreate(const ent, const char[] classname[])
{
    if (!ent)
        return HC_CONTINUE;

    new maxEdicts = get_pcvar_num(g_pMaxEdicts);
    new margin    = get_pcvar_num(g_pSafeMargin);

    if (g_iEdictCount >= (maxEdicts - margin))
    {
        if (IsRemovable(classname))
        {
            if (get_pcvar_num(g_pDebug))
                server_print("[GUARD] BLOCK ENTITY: %s", classname);

            return HC_SUPERCEDE;
        }
    }

    if (equal(classname, "weaponbox"))
    {
        new maxWeapons = get_pcvar_num(g_pMaxWeapons);

        if (g_iWeaponCount >= maxWeapons)
        {
            if (get_pcvar_num(g_pDebug))
                server_print("[GUARD] BLOCK WEAPONBOX");

            return HC_SUPERCEDE;
        }

        g_iWeaponCount++;
    }

    g_iEdictCount++;
    return HC_CONTINUE;
}

public OnEntityRemove(const ent)
{
    if (!is_entity(ent))
        return HC_CONTINUE;

    static classname[32];
    get_entvar(ent, var_classname, classname, charsmax(classname));

    if (equal(classname, "weaponbox"))
    {
        if (g_iWeaponCount > 0)
            g_iWeaponCount--;
    }

    if (g_iEdictCount > 0)
        g_iEdictCount--;

    return HC_CONTINUE;
}

public CleanupWeapons()
{
    new ent = -1;
    new Float:time = get_gametime();
    new Float:lifetime = get_pcvar_float(g_pWeaponLife);

    while ((ent = rg_find_ent_by_class(ent, "weaponbox")))
    {
        if (!is_entity(ent))
            continue;

        if (IsC4(ent))
            continue;

        new Float:spawn;
        get_entvar(ent, var_fuser1, spawn);

        if (spawn == 0.0)
        {
            set_entvar(ent, var_fuser1, time);
            continue;
        }

        if ((time - spawn) > lifetime)
        {
            rg_remove_entity(ent);
        }
    }
}

public FullSync()
{
    new ent = -1;

    g_iWeaponCount = 0;
    g_iEdictCount  = 0;

    while ((ent = rg_find_ent_by_class(ent, "*")))
    {
        if (!is_entity(ent))
            continue;

        g_iEdictCount++;

        static classname[32];
        get_entvar(ent, var_classname, classname, charsmax(classname));

        if (equal(classname, "weaponbox") && !IsC4(ent))
        {
            g_iWeaponCount++;
        }
    }

    if (get_pcvar_num(g_pDebug))
    {
        server_print("[GUARD] Edicts: %d | Weapons: %d", g_iEdictCount, g_iWeaponCount);
    }
}

public OnRoundEnd()
{
    g_iWeaponCount = 0;
}

stock bool:IsRemovable(const classname[])
{
    if (equal(classname, "weaponbox")) return true;
    if (equal(classname, "armoury_entity")) return true;
    if (equal(classname, "grenade")) return true;

    return false;
}

stock bool:IsC4(ent)
{
    static model[64];
    get_entvar(ent, var_model, model, charsmax(model));

    return containi(model, "c4") != -1;
}

majster skąd te eventy wziąłeś? bo bym sam skorzystał

W temacie: Informacja o rankingu gracza podczas pośmiertnej obserwacji

29.03.2026 15:53

Bez pośpiechu, odwdzięczyłem się zakupem jakiegoś pluginu ze stronki za bodaj 13 PLN 

to przepłaciłeś

W temacie: Nie działający plugin Roundsound oraz alt end round sound

09.02.2026 15:53

wystarczy wpisać pliki z formatem .mp3 do pliku konfiguracyjnego, obie wtyczki są dostosowane do używania obu formatów