Нужно подправить плагин на изменение FOV

Vanooo123

Участник
Сообщения
213
Реакции
69
Существует интересный плагин:

Хоть и указано что ANY но он криво работает на CSS OB
Можете помочь подправит его..?
 

Вложения

  • 2024-04-14 12-01-05.mp4
    16.4 МБ

XDSTYLE

Участник
Сообщения
486
Реакции
327

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@Vanooo123, попробуй такой вариант.
 

Вложения

  • sm_client_fov 1.0.0_14.04.2024.sp
    4.4 КБ · Просмотры: 13

Vanooo123

Участник
Сообщения
213
Реакции
69
@Vanooo123, попробуй такой вариант.
а мы сидим, учим впервые sourcepawn срём в код))

1713102881128.png

сейчас чекну и дам feedback!!!
Сообщения автоматически склеены:

@Vanooo123, попробуй такой вариант.
при смене пушек сбрасывается фов
 

Вложения

  • 2024-04-14 16-58-25.mp4
    5.8 МБ

Vanooo123

Участник
Сообщения
213
Реакции
69
@Vanooo123, если нужно чтобы сервер сообщал инфу о всех (или отдельных нужных тебе) событиях, то для этого плагин давно есть.
хмм, нужно почитать что это такое, да и как событие на смену оружия подцепить или ответ ты уже скинул а я тупой хаха...
ковыряю я этот кусок, можете бить, может заслужил

C-подобный:
#include <clientprefs>
#include <sdkhooks>

#define Tag "{grey}[Fov Manager]{default}"
#define MaxPlayers 33

public Plugin myinfo = {
    name = "[ANY] FOV Manager",
    author = "Tk /id/Teamkiller324",
    description = "Manage the viewmodel fov.",
    version = "1.2.4",
    url = "https://steamcommunity.com/id/Teamkiller324"
}

//Standalone module from Random Commands Plugin, originally called "Tk Unrestricted FOV"

int g_FOV[MaxPlayers+1] = {-1, ...};
char Prefix[128];
ConVar fovEnable, fovMinimum, fovMaximum, fovPrefix;
Cookie fovCookie;

Handle g_PlayerSpawnTimer;

public void OnPluginStart() {
    LoadTranslations("fov_manager.phrases");
    LoadTranslations("common.phrases");
   
    RegConsoleCmd("sm_fov", FovCmd, "FOV Manager - Set a custom fov on yourself");
   
    fovEnable = CreateConVar("sm_fovmanager_enable", "1", "FOV Manager - Enable / Disable Unrestricted FOV", _, true, _, true, 1.0);
    fovMinimum = CreateConVar("sm_fovmanager_minimum", "10", "FOV Manager - Minimum Unrestricted FOV", _, true, 10.0, true, 360.0);
    fovMaximum = CreateConVar("sm_fovmanager_maximum", "180", "FOV Manager - Maximum Unrestricted FOV", _, true, 10.0, true, 360.0);
    fovPrefix = CreateConVar("sm_fovmanager_prefix", "{lightgreen}[Fov Manager]", "FOV Manager - Chat prefix");
    fovPrefix.AddChangeHook(PrefixCallback);
    fovPrefix.GetString(Prefix, sizeof(Prefix));
    Format(Prefix, sizeof(Prefix), "%s{default}", Prefix);
   
    fovCookie = new Cookie("sm_fovmanager_cookie", "Fov Manager", CookieAccess_Private);
   
    HookEvent("player_spawn", Player_Spawn);
    HookEvent("weapon_reload", Player_Spawn);
    HookEvent("weapon_zoom", Player_Spawn);
    HookEvent("weapon_fire_on_empty", Player_Spawn);
    HookEvent("weapon_fire", Player_Spawn);
    HookEvent("player_jump", Player_Spawn);

}


void PrefixCallback(ConVar cvar, const char[] oldvalue, const char[] newvalue) {
    cvar.GetString(Prefix, sizeof(Prefix));
    Format(Prefix, sizeof(Prefix), "%s{default}", Prefix);
}

public void OnClientPostAdminCheck(int client) {
    if(!IsValidClient(client)) return;
    char cookie[8];
    fovCookie.Get(client, cookie, sizeof(cookie));
    if(strlen(cookie) > 0) g_FOV[client] = StringToInt(cookie);
}

public void OnClientDisconnect(int client) {
    if(IsValidClient(client)) {
        if(g_FOV[client] > -1) {
            char cookie[8];
            IntToString(g_FOV[client], cookie, sizeof(cookie));
            fovCookie.Set(client, cookie);
        }
    }
   
    g_FOV[client] = -1;
}

Action FovCmd(int client, int args) {  
    if(!fovEnable.BoolValue) return Plugin_Handled;
   
    if(client == 0) {
        return Plugin_Handled;
    }
   
    int    fov    = GetCmdInt(1);
   
    if(args < 1 && g_FOV[client] > fovMinimum.IntValue) {
        SetFOV(client, 90);
        g_FOV[client] = -1;
        char buffer[16];
        IntToString(0, buffer, sizeof(buffer));
        fovCookie.Set(client, buffer);
        return Plugin_Handled;
    }
    else if(args < 1) {
        return Plugin_Handled;
    }
   
    if(fov < fovMinimum.IntValue) {
        return Plugin_Handled;
    }
    else if(fov > fovMaximum.IntValue) {
        return Plugin_Handled;
    }
   
    SetFOV(client, fov);
    g_FOV[client] = fov;
   
    char val[16];
    IntToString(fov, val, sizeof(val));
    fovCookie.Set(client, val);
   
    return Plugin_Handled;
}

void Player_Spawn(Event event, const char[] event_name, bool dontBroadcast) {
    int    userid = event.GetInt("userid");
    if(userid < 1) return;
    CreateTimer(0.0, Timer_Spawn, userid);
}

Action Timer_Spawn(Handle timer, int userid) {
    int client = GetClientOfUserId(userid);
    if(IsValidClient(client)) if(g_FOV[client] > -1) SetFOV(client, g_FOV[client]);
    return Plugin_Handled;
}

bool IsValidClient(int client) {
    if(client < 1 || client > MaxPlayers) return false;
    if(!IsClientConnected(client)) return false;
    if(IsClientReplay(client)) return false;
    if(IsClientSourceTV(client)) return false;
    if(IsFakeClient(client)) return false;
    return true;
}

int GetCmdInt(int argnum) {
    char dummy[16];
    GetCmdArg(argnum, dummy, sizeof(dummy));
    return StringToInt(dummy);
}

void SetFOV(int client, int value) {
    SetEntProp(client, Prop_Send, "m_iFOV", value);
    SetEntProp(client, Prop_Send, "m_iDefaultFOV", value);
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267
@Vanooo123, ну так ты каллбэк события прикрутить пытаешься вместо каллбэка хука.

Нуно вот так:
C-подобный:
public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponSwitchPost, Hook_Switch);
}

public void Hook_Switch(int client, int weapon)
{
    SetFOV(client);
}
 

Vanooo123

Участник
Сообщения
213
Реакции
69
@Vanooo123, ну так ты каллбэк события прикрутить пытаешься вместо каллбэка хука.

Нуно вот так:
C-подобный:
public void OnClientPutInServer(int client)
{
    if(!IsFakeClient(client)) SDKHook(client, SDKHook_WeaponSwitchPost, Hook_Switch);
}

public void Hook_Switch(int client, int weapon)
{
    SetFOV(client);
}
честно, я 0 в сорспавне, на словах могу построить цепочку ведь недофронтендер и в другом дерьме есть опыт, а с этим надо познакомится и не только
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,828
Реакции
5,267

Vanooo123

Участник
Сообщения
213
Реакции
69
@Vanooo123, ну так вики SM почитай. Там даже часть статей переведена на русский.

Ну или переводы от R1KO:
Вот это ещё можешь почитать:
спасибо
 
Сверху Снизу