Skocz do zawartości
RevDev

[Brak rozwiązania] Nie dodaje HP, nie ma grawitacji i nie dziala double jump

Rekomendowane odpowiedzi

Tak jak w temacie nic nie działa w tym vipie, kompiluje się normalnie

#include <deathrun>
#include <sourcemod>
#include <cstrike>
#include <clientprefs>
#include <sdkhooks>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required
 
#define MOD_TAG "\x01\x0B★ \x07[ADEPT -> DR VIP]\x04 "
bool Used[MAXPLAYERS + 1];
ConVar g_cvVipFlag;
ConVar g_hpstart, g_djump, g_gravity;
int g_fLastButtons[MAXPLAYERS+1];
int g_fLastFlags[MAXPLAYERS+1];
int g_iJumps[MAXPLAYERS+1];
public Plugin myinfo =
{
    name = "ADEPT --> Deathrun VIP",
    description = "Autorski Plugin StudioADEPT.net",
    author = "Brum Brum",
    version = "1.0",
    url = "http://www.StudioADEPT.net/forum",
};
stock bool IsPlayerVIP(int client)
{  
    char flag[10];
    g_cvVipFlag.GetString(flag, sizeof(flag));
    if (GetUserFlagBits(client) & ReadFlagString(flag) || GetAdminFlag(GetUserAdmin(client), Admin_Root))
        return true;
    return false;
}
public void OnPluginStart()
{
    RegConsoleCmd("sm_respawn", CMD_Respawn);
    HookEvent("round_start", Event_RoundStart);
    HookEvent("player_spawn", Event_PlayerSpawn);
    g_cvVipFlag = CreateConVar("vipdr_flag", "a", "Flaga dla gracza VIP, pozostaw puste by każdy miał Vipa.");
    g_hpstart = CreateConVar("vipdr_hpstart", "20", "Ile VIP ma dostawac hp na start");
    g_djump = CreateConVar("vipdr_jump", "1", "Czy włączyć vipowi DoubleJump?");
    g_gravity = CreateConVar("vipdr_gravity", "0.9", "Ile ma miec mniejsza grawitacje? 1.0 NORMAL 0.5 POLOWA");
    AutoExecConfig(true, "vip_deathrun"); 
 
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for (int i = 1; i < MaxClients; i++)
    {
        if (IsValidClient(i))
        {
            Used[i] = false;
        }
    }
}
public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    int HP = GetEntProp(client, Prop_Send, "m_iHealth");
    if (IsPlayerVIP(client) && !dr_IsPlayerTerrorist(client))
    {
        if (HP == 100) SetEntityHealth(client, HP+g_hpstart);
        SetEntityGravity(client, g_gravity);
    }
}
 
public Action CMD_Respawn(int client, int args)
{
    if (IsPlayerVIP(client))
    {
        if (!IsPlayerAlive(client))
        {
            if (!Used[client])
            {
                CS_RespawnPlayer(client);
                Used[client] = true;
            }
            else PrintToChat(client, "%s Użyłeś już jednego respawnu na rudnę!", MOD_TAG);
        }
        else PrintToChat(client, "%s Musisz być martwy aby się zrespić!", MOD_TAG);
    }
    else PrintToChat(client, "%s Musisz mieć VIP`a aby się zrespić", MOD_TAG);
}  
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if(IsPlayerVIP(client) && g_djump == 1)
    {
        int fCurFlags    = GetEntityFlags(client);    
        int fCurButtons    = GetClientButtons(client);
                    
        if (g_fLastFlags[client] & FL_ONGROUND)
        {
            if (!(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)
        {
            if ( 1 <= g_iJumps[client] <= 2)
            {
                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;
    }
}
 
public void OnClientPostAdminCheck(int client)
{
    if (IsPlayerVIP(client))
    {
        SetHudTextParams(-1.0, 0.125, 5.0, 0, 255, 0, 255, 0, 0.25, 1.5, 0.5);
        for (int i = 1; i <= MaxClients; i++)
        {
            if (IsValidClient(i))
            {
                ShowHudText(i, -1, "Właśnie na serwer wchodzi\nVIP %N", client);
            }
        }
    }
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie przypominam sobie abym w taki sposób modyfikował tego vipa. Robiłeś to sam czy może ktoś Ci to robił?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
19 godzin temu, RevDev napisał:

if (HP == 100) SetEntityHealth(client, HP+g_hpstart);
SetEntityGravity(client, g_gravity);

Niepotrzebny warunek sprawdzający czy gracz ma 100 hp. każdy przy spawnie ma 100hp, dopiero później jest zmieniane przez plugin/y.

19 godzin temu, RevDev napisał:

g_djump == 1


Problem, który tu widzę to nigdzie nie pobierasz wartości tzn. Nie używasz .IntValue .FloatValue .BoolValue

 

SetEntityHealth(client, HP+ g_hpstart.IntValue); 
SetEntityGravity(client, g_gravity.FloatValue);
if(IsPlayerVIP(client) && g_djump.BoolValue)



 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Z tych 3 problemów rozwiązany został 1 hp na start.

Grawitacja i doublejump dalej nie działa

#include <deathrun>
#include <sourcemod>
#include <cstrike>
#include <clientprefs>
#include <sdkhooks>
#include <sdktools>
#pragma semicolon 1
#pragma newdecls required
 
#define MOD_TAG "\x01\x0B★ \x07[ADEPT -> DR VIP]\x04 "
bool Used[MAXPLAYERS + 1];
ConVar g_cvVipFlag;
ConVar g_hpstart, g_djump, g_gravity;
int g_fLastButtons[MAXPLAYERS+1];
int g_fLastFlags[MAXPLAYERS+1];
int g_iJumps[MAXPLAYERS+1];
public Plugin myinfo =
{
    name = "ADEPT --> Deathrun VIP",
    description = "Autorski Plugin StudioADEPT.net",
    author = "Brum Brum",
    version = "1.0",
    url = "http://www.StudioADEPT.net/forum",
};
stock bool IsPlayerVIP(int client)
{  
    char flag[10];
    g_cvVipFlag.GetString(flag, sizeof(flag));
    if (GetUserFlagBits(client) & ReadFlagString(flag) || GetAdminFlag(GetUserAdmin(client), Admin_Root))
        return true;
    return false;
}
public void OnPluginStart()
{
    RegConsoleCmd("sm_respawn", CMD_Respawn);
    HookEvent("round_start", Event_RoundStart);
    HookEvent("player_spawn", Event_PlayerSpawn);
    g_cvVipFlag = CreateConVar("vipdr_flag", "a", "Flaga dla gracza VIP, pozostaw puste by każdy miał Vipa.");
    g_hpstart = CreateConVar("vipdr_hpstart", "20", "Ile VIP ma dostawac hp na start");
    g_djump = CreateConVar("vipdr_jump", "1", "Czy włączyć vipowi DoubleJump?");
    g_gravity = CreateConVar("vipdr_gravity", "0.9", "Ile ma miec mniejsza grawitacje? 1.0 NORMAL 0.5 POLOWA");
    AutoExecConfig(true, "vip_deathrun"); 
 
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for (int i = 1; i < MaxClients; i++)
    {
        if (IsValidClient(i))
        {
            Used[i] = false;
        }
    }
}
public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    int HP = GetEntProp(client, Prop_Send, "m_iHealth");
    if (IsPlayerVIP(client) && !dr_IsPlayerTerrorist(client))
    {
        SetEntityHealth(client, HP+g_hpstart.IntValue);
        SetEntityGravity(client, g_gravity.FloatValue);
    }
}
 
public Action CMD_Respawn(int client, int args)
{
    if (IsPlayerVIP(client))
    {
        if (!IsPlayerAlive(client))
        {
            if (!Used[client])
            {
                CS_RespawnPlayer(client);
                Used[client] = true;
            }
            else PrintToChat(client, "%s Użyłeś już jednego respawnu na rudnę!", MOD_TAG);
        }
        else PrintToChat(client, "%s Musisz być martwy aby się zrespić!", MOD_TAG);
    }
    else PrintToChat(client, "%s Musisz mieć VIP`a aby się zrespić", MOD_TAG);
}  
public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if(IsPlayerVIP(client) && g_djump.BoolValue)
    {
        int fCurFlags    = GetEntityFlags(client);    
        int fCurButtons    = GetClientButtons(client);
                    
        if (g_fLastFlags[client] & FL_ONGROUND)
        {
            if (!(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)
        {
            if ( 1 <= g_iJumps[client] <= 2)
            {
                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;
    }
}
 
public void OnClientPostAdminCheck(int client)
{
    if (IsPlayerVIP(client))
    {
        SetHudTextParams(-1.0, 0.125, 5.0, 0, 255, 0, 255, 0, 0.25, 1.5, 0.5);
        for (int i = 1; i <= MaxClients; i++)
        {
            if (IsValidClient(i))
            {
                ShowHudText(i, -1, "Właśnie na serwer wchodzi\nVIP %N", client);
            }
        }
    }
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
10 minut temu, RevDev napisał:

Tak

Więc tak. do doublejumpa musisz ustawić shavit_core_autobhop 0 
Grawitacja się restartuję w zone nie jestem pewny czy jest na to cvar, ale możesz użyć forwarda gdzie po wyjściu z zone'a ustawia grawitacje na X

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gdzie szukać tego forwarda?

native bool dr_GetPlayerBuySomething(int client);

To będzie to ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
11 minut temu, RevDev napisał:

Gdzie szukać tego forwarda?


native bool dr_GetPlayerBuySomething(int client);

To będzie to ?

Nie.
https://github.com/shavitush/bhoptimer/blob/master/addons/sourcemod/scripting/include/shavit.inc
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

forward void Shavit_OnLeaveZone(int client, int type, int track, int id, int entity);

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Napisano (edytowane)

Nie wiem, nie potrafię kompletnie tego rozwiązać.

#include "include/shavit.inc"
GlobalForward g_gravityForward;
g_gravityForward = new GlobalForward("Shavit_OnLeaveZone", ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);
public Action OnPlayerExitZone(Event event, const char[] name, bool dontBroadcast) {
    int client = GetClientOfUserId(event.GetInt("userid"));
    Call_StartForward(g_gravityForward);
    return SetEntityGravity(client, g_gravity.FloatValue);
}

 

Edytowane przez RevDev

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Godzinę temu, RevDev napisał:

Nie wiem, nie potrafię kompletnie tego rozwiązać.


#include "include/shavit.inc"
GlobalForward g_gravityForward;
g_gravityForward = new GlobalForward("Shavit_OnLeaveZone", ET_Event, Param_Cell, Param_Cell, Param_String, Param_Cell);
public Action OnPlayerExitZone(Event event, const char[] name, bool dontBroadcast) {
    int client = GetClientOfUserId(event.GetInt("userid"));
    Call_StartForward(g_gravityForward);
    return SetEntityGravity(client, g_gravity.FloatValue);
}

 

co? Tak się tego nie robi.

Robisz po prostu

#include <shavit>
  
public void Shavit_OnLeaveZone(int client, int type, int track, int id, int entity)
{
	SetEntityGravity(client, g_gravity.FloatValue);
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie chce się skompilować, a pobrałem shativ.inc z tego githuba co mi dałeś

1.thumb.png.21bffe9b771f44d83dbccf48c7ed7903.png

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 minutę temu, RevDev napisał:

Nie chce się skompilować, a pobrałem shativ.inc z tego githuba co mi dałeś

1.thumb.png.21bffe9b771f44d83dbccf48c7ed7903.png

Funkcja IsValidClient jest już zadeklarowana w pliku inc od shavita tzn. Usuń ją z pluginu na vipa i będzie działać 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tylko nie mam w pluginie funkcji IsValidClient, wysłałem cały kod na samej górze

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Usuń tą funkcję z inc od shavita. Inc z deathruna ma tą funkcje to będzie dobrze

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Usunąłem INC od deathrunu i dodałem tylko 1 nativa do pluginu, a grawitacja dalej nie działa

#include <cstrike>
#include <clientprefs>
#include <sdkhooks>
#include <sdktools>
#include <shavit>
#pragma semicolon 1
#pragma newdecls required

#define MOD_TAG "\x01\x0B★ \x07[ADEPT -> DR VIP]\x04 "
bool Used[MAXPLAYERS + 1];
ConVar g_cvVipFlag;
ConVar g_hpstart, g_gravity;
public Plugin myinfo =
{
    name = "ADEPT --> Deathrun VIP",
    description = "Autorski Plugin StudioADEPT.net",
    author = "Brum Brum",
    version = "1.0",
    url = "http://www.StudioADEPT.net/forum",
};
native bool dr_IsPlayerTerrorist(int client);
stock bool IsPlayerVIP(int client)
{  
    char flag[10];
    g_cvVipFlag.GetString(flag, sizeof(flag));
    if (GetUserFlagBits(client) & ReadFlagString(flag) || GetAdminFlag(GetUserAdmin(client), Admin_Root))
        return true;
    return false;
}
public void OnPluginStart()
{
    RegConsoleCmd("sm_respawn", CMD_Respawn);
    HookEvent("round_start", Event_RoundStart);
    HookEvent("player_spawn", Event_PlayerSpawn);
    g_cvVipFlag = CreateConVar("vipdr_flag", "a", "Flaga dla gracza VIP, pozostaw puste by każdy miał Vipa.");
    g_hpstart = CreateConVar("vipdr_hpstart", "20", "Ile VIP ma dostawac hp na start");
    g_gravity = CreateConVar("vipdr_gravity", "0.9", "Ile ma miec mniejsza grawitacje? 1.0 NORMAL 0.5 POLOWA");
    AutoExecConfig(true, "vip_deathrun"); 
}

public void Shavit_OnLeaveZone(int client, int type, int track, int id, int entity)
{
	SetEntityGravity(client, g_gravity.FloatValue);
}

public Action Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    for (int i = 1; i < MaxClients; i++)
    {
        if (IsValidClient(i))
        {
            Used[i] = false;
        }
    }
}
public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    int HP = GetEntProp(client, Prop_Send, "m_iHealth");
    if (IsPlayerVIP(client) && !dr_IsPlayerTerrorist(client))
    {
        SetEntityHealth(client, HP+g_hpstart.IntValue);
        // SetEntityGravity(client, g_gravity.FloatValue);
    }
}
 
public Action CMD_Respawn(int client, int args)
{
    if (IsPlayerVIP(client))
    {
        if (!IsPlayerAlive(client))
        {
            if (!Used[client])
            {
                CS_RespawnPlayer(client);
                Used[client] = true;
            }
            else PrintToChat(client, "%s Użyłeś już jednego respawnu na rudnę!", MOD_TAG);
        }
        else PrintToChat(client, "%s Musisz być martwy aby się zrespić!", MOD_TAG);
    }
    else PrintToChat(client, "%s Musisz mieć VIP`a aby się zrespić", MOD_TAG);
}
public void OnClientPostAdminCheck(int client)
{
    if (IsPlayerVIP(client))
    {
        SetHudTextParams(-1.0, 0.125, 5.0, 0, 255, 0, 255, 0, 0.25, 1.5, 0.5);
        for (int i = 1; i <= MaxClients; i++)
        {
            if (IsValidClient(i))
            {
                ShowHudText(i, -1, "Właśnie na serwer wchodzi\nVIP %N", client);
            }
        }
    }
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Brak rozwiązania problemu

Jeżeli się z tym nie zgadzasz, raportuj ten post

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ę...