Skocz do zawartości
.:PaPaSmerf:.

[Rozwiązane] Bugowanie się multijumpa w Vipie

Rekomendowane odpowiedzi

Posiadam plugin na vIp na serwerze i chce wylaczyc podwójny skok, problem polga na tym że kiedy w cfg zmienie wartosc z domyslej "1" na "0" buguje sie resp i jestem jakby zamrozony

kod ponizej

 

 

 

/*================ Aktualizacje ================

 


~ Wersja "0.1" >> Pierwsze wydanie pluginu.
~ Wersja "0.2" >> Przepisanie pluginy na nowy syntax.
~ Wersja "0.3" >> Poprawiono większość kodu, pieniądze za rozbrojenie oraz podłożenie bomby już działają.
~ Wersja "0.4" >> Dodano cvary.
~ Wersja "0.5" >> Dodano więcej cvarów oraz poprawiono kilka błędów.
~ Wersja "0.6" >> Naprawiono błąd który powodował że menu broni dla vip'a wyświetlało się przy starcie rundy jak się zmieniały drużyny, dodano więcej cvarów.
~ Wersja "0.7" >> Dodano pieniądze za wygranie rundy, poprawiono kod na zakończenie rundy.
~ Wersja "0.8" >> Dodano przywitanie/pożegnanie dla vip'a na czacie oraz w HINT BOX, dodano więcej cvarów oraz poprawiono kod. // USUNIĘTE
~ Wersja "0.9" >> Dodano tag [VIP] w cvarach.
~ Wersja "1.0" >> Zmieniono kolor wiadomości na czacie, dodano cvar dotyczący działaniu podwójnego skoku.
~ Wersja "1.1" >> Dodano nowy cvar oraz poprawiono kod na podwójny skok.
~ Wersja "1.2" >> Teraz granaty nie spadają na ziemie przy nowej rundzie.
~ Wersja "1.3" >> Dodano darmowego vip'a od do danej godziny.

TODO

~ Nothing now.

==============================================*/

/* << Includy >> */
#include <cstrike>
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <multicolors>

/* << Define >> */
#define PL_VERSION "1.3"

/* << Pragma >> */
#pragma newdecls required
#pragma semicolon 1

/* << ConVary >> */
ConVar g_cvVipHP;
ConVar g_cvVipHeadShotHP;
ConVar g_cvVipKillHP;
ConVar g_cvPredkoscGracza;
ConVar g_cvGrawitacja;
ConVar g_cvVipArmor;
ConVar g_cvVipHelm;
ConVar g_cvHEGranat;
ConVar g_cvFlashGranat;
ConVar g_cvSmokeGranat;
ConVar g_cvDecoyGranat;
ConVar g_cvHealGranat;
ConVar g_cvIncGranat;
ConVar g_cvMolotovGranat;
ConVar g_cvTaGranat;
ConVar g_cvVipPieniadzeNaStart;
ConVar g_cvVipPieniadzePodlozenie;
ConVar g_cvVipPieniadzeRozbrojenie;
ConVar g_cvVipHeadShotPieniadze;
ConVar g_cvVipKillPieniadze;
ConVar g_cvVipWygranaPieniadze;
ConVar g_cvTag_Tabela;
ConVar g_cvVipTag_Tabela;
ConVar g_cvDoubleJump;
ConVar g_cvMenu_Broni;
ConVar g_cvRunda_MenuBroni;
ConVar g_cvDarmowy_Vip;
ConVar g_cvVipOdGodziny;
ConVar g_cvVipDoGodziny;

/* << Inty >> */
int RoundCount = 0;
int FreeVip = 0;
int g_iaGrenadeOffsets[] =  { 15, 17, 16, 14, 18, 17 };



public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundStart);
    HookEvent("player_spawn", Event_TagTable);
    HookEvent("player_spawn", Event_PlayerSpawn);
    HookEvent("player_death", Event_PlayerDeath);
    HookEvent("bomb_planted", Event_BombPlanted);
    HookEvent("bomb_defused", Event_BombDefused);
    HookEvent("round_end", Event_RoundEnd);
    HookEvent("announce_phase_end", ResetPoZmianie);
    HookEvent("cs_intermission", ResetPoZmianie);

    /* << ConVary >> */
    g_cvVipHP = CreateConVar("zycie_vip", "100", "Ile zdrowia ma posiadać vip na start rundy?");
    g_cvVipKillHP = CreateConVar("kill_hp_vip", "0", "Ile zdrowia ma dostawać vip za zabicie gracza?");
    g_cvVipHeadShotHP = CreateConVar("hs_hp_vip", "0", "Ile zdrowia ma dostawać vip za zabójstwo z HeadShot'a");
    g_cvPredkoscGracza = CreateConVar("vip_predkosc_ruchu", "1.0", "Prędkość ruchu vip'a (1.0 - standardowo)");
    g_cvGrawitacja = CreateConVar("vip_grawitacja", "1.0", "Grawitacja dla vip'a (1.0 - standardowo)");
    g_cvVipArmor = CreateConVar("armor_vip", "1", "Punkty kamizelki dla vipa? (od 1 - 100)");
    g_cvVipHelm = CreateConVar("helm_vip", "1", "Czy vip ma posiadać darmowy hełm? (0/1)");
    g_cvVipPieniadzeNaStart = CreateConVar("vip_dodatkowy_Pieniadze", "100", "Ilość dodatkowego Pieniadzeu na start rundy jaki ma vip dostawać.");
    g_cvVipKillPieniadze = CreateConVar("Pieniadze_kill_vip", "100", "Ile vip ma dostawać pieniędzy za zabójstwo ?");
    g_cvVipHeadShotPieniadze = CreateConVar("Pieniadze_hs_vip", "200", "Ile vip ma dostawać pieniędzy za zabójstwo w głowę?");
    g_cvVipPieniadzePodlozenie = CreateConVar("Pieniadze_podlozenie_vip", "300", "Ile pieniędzy ma dostawać vip za podłożenie bomby?");
    g_cvVipPieniadzeRozbrojenie = CreateConVar("Pieniadze_rozbrojenie_vip", "300", "Ile pieniędzy ma dostawać vip za rozbrojenie bomby?");
    g_cvVipWygranaPieniadze = CreateConVar("Pieniadze_wygranie_rundy", "100", "Ile pieniędzy ma dostawać vip za wygranie rundy?");
    g_cvHEGranat = CreateConVar("vip_he", "1", "Czy vip ma dostawać granat HE na start rundy?");
    g_cvFlashGranat = CreateConVar("vip_flash", "1", "Czy vip ma dostawać granat Flash na start rundy?");
    g_cvSmokeGranat = CreateConVar("vip_smoke", "0", "Czy vip ma dostawać granat Smoke na start rundy?");
    g_cvDecoyGranat = CreateConVar("vip_decoy", "0", "Czy vip ma dostawać granat Decoy na start rundy?");
    g_cvHealGranat = CreateConVar("vip_heal", "0", "Czy vip ma dostawać granat Leczący na start rundy?");
    g_cvIncGranat = CreateConVar("vip_inc", "1", "Czy vip ma dostawać granat Podpalający (CT) na start rundy?");
    g_cvMolotovGranat = CreateConVar("vip_molotov", "1", "Czy vip ma dostawać granat Podpalający (TT) na start rundy?");
    g_cvTaGranat = CreateConVar("vip_tactic", "0", "Czy vip ma dostawać granat Taktyczny na start rundy?");
    g_cvTag_Tabela = CreateConVar("vip_tag", "1", "Czy w tabeli ma widniec tag dla vip'a?");
    g_cvVipTag_Tabela = CreateConVar("sm_clantag", "[INFE VIP]", "Jaki tag w tabeli ma posiadać VIP?");
    g_cvDoubleJump = CreateConVar("double_jump", "0", "Czy vip ma posiadać podwójny skok?");
    g_cvMenu_Broni = CreateConVar("vip_menu_broni", "0", "Czy ma być menu broni dla vip'a?");
    g_cvRunda_MenuBroni = CreateConVar("vip_runda_menubroni", "3", "Od ktorej rundy ma pokazywac menu broni dla vip'a?");
    g_cvDarmowy_Vip = CreateConVar("vip_od_danej_godzint", "1", "Czy ma być włączony VIP dla graczy w nocy od x do x godziny?");
    g_cvVipOdGodziny = CreateConVar("vip_od_godziny", "22", "Od ktorej godziny ma byc darmowy vip?");
    g_cvVipDoGodziny = CreateConVar("vip_do_godziny", "9", "Do ktorej godziny ma byc darmowy vip?");


}

public void OnMapStart()
{
    AutoExecConfig(true, "Konfiguracja_Vipa");
    RoundCount = 0;
}

public Action MenuGlowne(int client)
{
    if (IsValidClient(client)) {
        if (IsPlayerVIP(client)) {
            Menu menu = new Menu(MenuHandler1);
            menu.SetTitle("VIP : Wybierz Broń");
            menu.AddItem("weapon_ak47", "AK-47");
            menu.AddItem("weapon_m4a1", "M4A4");
            menu.AddItem("weapon_m4a1_silencer", "M4A1-S");
            menu.AddItem("weapon_awp", "AWP");
            menu.AddItem("weapon_ssg08", "SCOUT");
            menu.AddItem("weapon_xm1014", "XM1014");
            menu.AddItem("weapon_famas", "FAMAS");
            menu.ExitButton = true;
            menu.Display(client, 15);
        }
    }
}

public int MenuHandler1(Menu menu, MenuAction action, int client, int itemNum)
{
    if (action == MenuAction_Select)
    {
        char info[32];
        GetMenuItem(menu, itemNum, info, sizeof(info));

        if (IsPlayerAlive(client))
        {
            StripAllWeapons(client);
            GivePlayerItem(client, "weapon_knife");
            GivePlayerItem(client, info);
            MenuBroni(client);
        }
    }

    else if (action == MenuAction_End) {
        CloseHandle(menu);
    }
}

public Action MenuBroni(int client)
{
    if (IsValidClient(client)) {
        if (IsPlayerVIP(client)) {
            Menu menusec = new Menu(MenuHandler2);
            menusec.SetTitle("VIP : Wybierz Pistolet");
            menusec.AddItem("weapon_deagle", "Deagle");
            menusec.AddItem("weapon_revolver", "R8 Revolver");
            menusec.AddItem("weapon_fiveseven", "Five-Seven");
            menusec.AddItem("weapon_tec9", "Tec-9");
            menusec.AddItem("weapon_cz75a", "CZ7a");
            menusec.AddItem("weapon_elite", "Dual Elites");
            menusec.AddItem("weapon_p250", "p250");
            menusec.ExitButton = true;
            menusec.Display(client, 15);
        }
    }
}

public int MenuHandler2(Menu menusec, MenuAction action, int client, int itemNum)
{

    if (action == MenuAction_Select)
    {
        char info[32];
        GetMenuItem(menusec, itemNum, info, sizeof(info));

        if (IsPlayerAlive(client)) {
            GivePlayerItem(client, info);
        }
    }

    else if (action == MenuAction_End) {
        CloseHandle(menusec);
    }
}

public Action Event_RoundStart(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    if (GetConVarBool(g_cvDarmowy_Vip))
    {
        int od_godziny = GetConVarInt(g_cvVipOdGodziny);
        int do_godziny = GetConVarInt(g_cvVipDoGodziny);
        if(od_godziny || do_godziny)
        {
            char godzina_str[8];
            FormatTime(godzina_str, sizeof(godzina_str), "%H", GetTime());
            int godzina = StringToInt(godzina_str);
            if(od_godziny > do_godziny)
                FreeVip = (godzina >= od_godziny || godzina < do_godziny)? 1: 0;
            else
                FreeVip = (godzina >= od_godziny && godzina < do_godziny)? 1: 0;
        }
        else
            FreeVip = 0;
    }

    if (GameRules_GetProp("m_bWarmupPeriod") != 1)
        RoundCount = RoundCount + 1;
}

public Action ResetPoZmianie(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    RoundCount = 0;
}

public Action Event_PlayerSpawn(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(hEvent, "userid"));

    if (GameRules_GetProp("m_bWarmupPeriod") == 1)
        return;

    if (IsPlayerVIP(client))
    {
        SetEntityHealth(client, GetConVarInt(g_cvVipHP));
        SetEntProp(client, Prop_Send, "m_ArmorValue", GetConVarInt(g_cvVipArmor));
        SetEntProp(client, Prop_Send, "m_bHasHelmet", GetConVarInt(g_cvVipHelm));
        SetEntProp(client, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") + GetConVarInt(g_cvVipPieniadzeNaStart));
        SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", GetConVarFloat(g_cvPredkoscGracza));
        SetEntityGravity(client, GetConVarFloat(g_cvGrawitacja));
        if (GetClientTeam(client) == CS_TEAM_CT && GetEntProp(client, Prop_Send, "m_bHasDefuser") == 0)GivePlayerItem(client, "item_defuser");
        if (GetConVarBool(g_cvHEGranat))GivePlayerItem(client, "weapon_hegrenade");
        if (GetConVarBool(g_cvFlashGranat))GivePlayerItem(client, "weapon_flashbang");
        if (GetConVarBool(g_cvSmokeGranat))GivePlayerItem(client, "weapon_smokegrenade");
        if (GetConVarBool(g_cvDecoyGranat))GivePlayerItem(client, "weapon_decoy");
        if (GetConVarBool(g_cvHealGranat))GivePlayerItem(client, "weapon_healthshot");
        if (GetConVarBool(g_cvIncGranat))GivePlayerItem(client, "weapon_incgrenade");
        if (GetConVarBool(g_cvMolotovGranat))GivePlayerItem(client, "weapon_molotov");
        if (GetConVarBool(g_cvTaGranat))GivePlayerItem(client, "weapon_tagrenade");
    }

    { if (RoundCount >= GetConVarInt(g_cvRunda_MenuBroni))
        {
            if (GetConVarBool(g_cvMenu_Broni))MenuGlowne(client);
        }
    }
}

public Action Event_PlayerDeath(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    int attacker = GetClientOfUserId(GetEventInt(hEvent, "attacker"));
    int victim = GetClientOfUserId(GetEventInt(hEvent, "userid"));

    if (IsPlayerVIP(attacker))
    {
        if (!IsValidClient(attacker)) {
            return;
        }

        if (GetClientTeam(attacker) != GetClientTeam(victim))
        {
            bool headshot = GetEventBool(hEvent, "headshot");
            int PieniadzeGracza = GetEntProp(attacker, Prop_Send, "m_iAccount");
            int HP = GetClientHealth(attacker);

            if (headshot) {
                SetEntProp(attacker, Prop_Send, "m_iAccount", GetConVarInt(g_cvVipHeadShotPieniadze) + PieniadzeGracza);
                if (HP + GetConVarInt(g_cvVipHeadShotHP) > 150)SetEntityHealth(attacker, 150);
                if (HP + GetConVarInt(g_cvVipHeadShotHP) <= 150)SetEntityHealth(attacker, HP + GetConVarInt(g_cvVipHeadShotHP));
            }
            else {
                SetEntProp(attacker, Prop_Send, "m_iAccount", GetConVarInt(g_cvVipKillPieniadze) + PieniadzeGracza);
                if (HP + GetConVarInt(g_cvVipKillHP) > 150)SetEntityHealth(attacker, 150);
                if (HP + GetConVarInt(g_cvVipKillHP) <= 150)SetEntityHealth(attacker, HP + GetConVarInt(g_cvVipKillHP));
            }
        }
    }
}

public Action Event_BombPlanted(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
    int PieniadzeGracza = GetEntProp(client, Prop_Send, "m_iAccount");

    if (IsPlayerVIP(client)) {

        SetEntProp(client, Prop_Send, "m_iAccount", GetConVarInt(g_cvVipPieniadzePodlozenie) + PieniadzeGracza);
    }
}

public Action Event_BombDefused(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    int client = GetClientOfUserId(GetEventInt(hEvent, "userid"));
    int PieniadzeGracza = GetEntProp(client, Prop_Send, "m_iAccount");

    if (IsPlayerVIP(client)) {
        SetEntProp(client, Prop_Send, "m_iAccount", GetConVarInt(g_cvVipPieniadzeRozbrojenie) + PieniadzeGracza);
    }
}

public Action Event_RoundEnd(Handle hEvent, const char[] chName, bool bDontBroadcast)
{
    int winnerTeam = GetEventInt(hEvent, "winner");

    for (int client = 1; client < MAXPLAYERS + 1; client++)
    {
        if (IsPlayerVIP(client) && IsValidClient(client))
        {
            RemoveNades(client);

            if (GetClientTeam(client) == winnerTeam)
            {
                SetEntProp(client, Prop_Send, "m_iAccount", GetConVarInt(g_cvVipWygranaPieniadze) + GetEntProp(client, Prop_Send, "m_iAccount"));
            }
        }
    }
}

public Action Event_TagTable(Event event, const char[] chName, bool bDontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));

    char TagTabela[128];
    g_cvVipTag_Tabela.GetString(TagTabela, sizeof(TagTabela));

    if (IsPlayerVIP(client))
    {
        if (GetConVarBool(g_cvTag_Tabela))CS_SetClientClanTag(client, TagTabela);
    }
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if (!g_cvDoubleJump.BoolValue)
        return Plugin_Handled;

    if (IsPlayerVIP(client) && IsPlayerAlive(client))
    {
        static int g_fLastButtons[MAXPLAYERS + 1], g_fLastFlags[MAXPLAYERS + 1], g_iJumps[MAXPLAYERS + 1], fCurFlags, fCurButtons;
        fCurFlags = GetEntityFlags(client);
        fCurButtons = GetClientButtons(client);
        if (g_fLastFlags[client] & FL_ONGROUND && !(fCurFlags & FL_ONGROUND) && !(g_fLastButtons[client] & IN_JUMP) && fCurButtons & IN_JUMP)g_iJumps[client]++;
        else if (fCurFlags & FL_ONGROUND)g_iJumps[client] = 0;
        else if (!(g_fLastButtons[client] & IN_JUMP) && fCurButtons & IN_JUMP && g_iJumps[client] == 1)
        {
            g_iJumps[client]++;
            float vVel[3];
            GetEntPropVector(client, Prop_Data, "m_vecVelocity", vVel);
            vVel[2] = 250.0;
            TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vVel);
        }

        g_fLastFlags[client] = fCurFlags;
        g_fLastButtons[client] = fCurButtons;
    }
    return Plugin_Continue;
}

stock void StripAllWeapons(int client)
{
    int iEnt;
    for (int i = 0; i <= 2; i++)
    {
        while ((iEnt = GetPlayerWeaponSlot(client, i)) != -1)
        {
            RemovePlayerItem(client, iEnt);
            AcceptEntityInput(iEnt, "Kill");
        }
    }
}

stock void RemoveNades(int client)
{
    while (RemoveWeaponBySlot(client, 3)) {  }
    for (int i = 0; i < 6; i++)
    SetEntProp(client, Prop_Send, "m_iAmmo", 0, _, g_iaGrenadeOffsets);
}

stock bool RemoveWeaponBySlot(int client, int iSlot)
{
    int iEntity = GetPlayerWeaponSlot(client, iSlot);
    if (IsValidEdict(iEntity)) {
        RemovePlayerItem(client, iEntity);
        AcceptEntityInput(iEntity, "Kill");
        return true;
    }
    return false;
}

bool IsPlayerVIP(int client)
{
    if (CheckCommandAccess(client, "sm_Vip", 0, true) || FreeVip)
        return true;

    return false;
}

bool IsValidClient(int client)
{
    if (client <= 0 || client > MaxClients) {
        return false;
    }

    if (!IsClientInGame(client)) {
        return false;
    }

    if (IsFakeClient(client)) {
        return false;
    }

    return true;
}

 

 

Przez MAGNET,

"Tym razem poważny problem" to nie jest dobra nazwa tematu. Musi ona obrazować problem z którym się mierzysz i nakierowywać osoby, które chciałyby z porad tu zawartych skorzystać. Poprawiłem nazwę

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak potrzeba wysle rowniez cfg

Edytowane przez .:PaPaSmerf:.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Hej! Akurat ten konkretny VIP jest wspierany przez swojego autora i możesz po prostu napisać o jakimkolwiek błędzie w temacie który podał Shadow. 

 

Temat zamykam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...