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

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем доброе утро, подскажите пожалуйста как исправить ошибку при компиляции: error 106: cannot call methods on an array

Код:
char    g_sTexture
[PLATFORM_MAX_PATH];
int g_iTexture;

public void OnPluginStart()
{
    ConVar hCvar;
    hCvar = CreateConVar("sm_vsb_linetexture",         "sprites/xbeam2.vmt",     "Текстура обводки блокировки");
    hCvar.AddChangeHook(VSB_Texture);
    hCvar.GetString(g_sTexture, sizeof(g_sTexture));
    AutoExecConfig(true, "Visual_Block");
}

public void OnMapStart()
{
    char sBuffer[64];
    g_sTexture.GetString(sBuffer, sizeof(sBuffer));
    if (!sBuffer[0]) sBuffer = "sprites/xbeam2.vmt";
    g_iTexture = PrecacheModel(sBuffer);
}

public void VSB_Texture(ConVar hCvar, const char[] OldValue, const char[] sNewValue)
{
    hCvar.GetString(g_sTexture, sizeof(g_sTexture));
    if (g_sTexture[0]) g_iTexture = PrecacheModel(g_sTexture, true);
}
 
Последнее редактирование:

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
Всем доброе утро, подскажите пожалуйста как исправить ошибку при компиляции: error 106: cannot call methods on an array

Код:
char     g_sSize[PLATFORM_MAX_PATH];
int g_iTexture;

public void OnPluginStart()
{
    ConVar hCvar;
    hCvar = CreateConVar("sm_vsb_linetexture",         "sprites/xbeam2.vmt",     "Текстура обводки блокировки");
    hCvar.AddChangeHook(VSB_Texture);
    hCvar.GetString(g_sTexture, sizeof(g_sTexture));
    AutoExecConfig(true, "Visual_Block");
}

public void OnMapStart()
{
    char sBuffer[64];
    g_sTexture.GetString(sBuffer, sizeof(sBuffer));
    if (!sBuffer[0]) sBuffer = "sprites/xbeam2.vmt";
    g_iTexture = PrecacheModel(sBuffer);
}

public void VSB_Texture(ConVar hCvar, const char[] OldValue, const char[] sNewValue)
{
    hCvar.GetString(g_sTexture, sizeof(g_sTexture));
    if (g_sTexture[0]) g_iTexture = PrecacheModel(g_sTexture, true);
}
Мне кажется это не полный код. Так как не пойму откуда тут g_sTexture как глобальная но не объявлена
 

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
Обновил, перепутал переменные
Ну думаю вы будете где-то использовать g_iTexture ибо щас ругает что никогда не будет использована. (warning 204: symbol is assigned a value that is never used: "g_iTexture")
 

Вложения

  • aaaa.sp
    852 байт · Просмотры: 3

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Ну думаю вы будете где-то использовать g_iTexture ибо щас ругает что никогда не будет использована. (warning 204: symbol is assigned a value that is never used: "g_iTexture")
Помогло, спасибо)
Сообщения автоматически склеены:

Ну думаю вы будете где-то использовать g_iTexture ибо щас ругает что никогда не будет использована. (warning 204: symbol is assigned a value that is never used: "g_iTexture")
Ошибка при компиляции пропала, но теперь текстура не выводится, выдает пустую строку
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
error 106: cannot call methods on an array
На строке 17 замени g_sTexture.GetString(sBuffer, sizeof(sBuffer)); на FormatEx(sBuffer, sizeof(sBuffer), g_sTexture); (у char, коим является g_sTexture, нет такого метода).

И кстати, почему у тебя размер sBuffer равен 64, когда для g_sTexture задан 256 (PLATFORM_MAX_PATH равен именно этому числу, смотри инклюд files.inc)?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
На строке 17 замени g_sTexture.GetString(sBuffer, sizeof(sBuffer)); на FormatEx(sBuffer, sizeof(sBuffer), g_sTexture); (кстати, у char, коим является g_sTexture нет такого метода).
И кстати, почему у тебя размер sBuffer равен 64, когда для g_sTexture задан 256 (PLATFORM_MAX_PATH равен именно этому числу, смотри инклюд files.inc)?
Понял, спасибо большое
Сообщения автоматически склеены:

На строке 17 замени g_sTexture.GetString(sBuffer, sizeof(sBuffer)); на FormatEx(sBuffer, sizeof(sBuffer), g_sTexture); (у char, коим является g_sTexture, нет такого метода).

И кстати, почему у тебя размер sBuffer равен 64, когда для g_sTexture задан 256 (PLATFORM_MAX_PATH равен именно этому числу, смотри инклюд files.inc)?
Все равно пустая строка (Линий нет)
 
Последнее редактирование:

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
Помогло, спасибо)
Сообщения автоматически склеены:


Ошибка при компиляции пропала, но теперь текстура не выводится, выдает пустую строку


C++:
char g_sTexture[PLATFORM_MAX_PATH];
int g_iTexture;

public void OnPluginStart()
{
    ConVar hCvar;
    hCvar = CreateConVar("sm_vsb_linetexture", "sprites/xbeam2.vmt", "Текстура обводки блокировки");
    hCvar.GetString(g_sTexture, sizeof g_sTexture);
    hCvar.AddChangeHook(VSB_Texture);
    AutoExecConfig(true, "Visual_Block");
}

public void OnMapStart()
{
    if(!IsModelPrecached(g_sTexture))
        g_iTexture = PrecacheModel(g_sTexture);
}

public void VSB_Texture(ConVar hCvar, const char[] OldValue, const char[] sNewValue)
{
    hCvar.GetString(sNewValue, sizeof sNewValue);
    if(sNewValue[0])
    {
        FormatEx(g_sTexture, sizeof g_sTexture, sNewValue);
        g_iTexture = PrecacheModel(g_sTexture);
    }
    else
    {
        FormatEx(g_sTexture, sizeof g_sTexture, "sprites/xbeam2.vmt");
        g_iTexture = PrecacheModel(g_sTexture);
    }
    return;
}

А если так ?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Все равно пустая строка (Линий нет)
а если так?
C-подобный:
#include <sdktools_stringtables>

char
    g_sTexture[PLATFORM_MAX_PATH];
int
    g_iTexture;

public void OnPluginStart()
{
    ConVar cvar;
    cvar = CreateConVar("sm_vsb_linetexture", "sprites/xbeam2.vmt", "Текстура обводки блокировки", FCVAR_PRINTABLEONLY);
    cvar.AddChangeHook(CVarChange_Texture);
    CVarChange_Texture(cvar, NULL_STRING, NULL_STRING);

    AutoExecConfig(true, "Visual_Block");
}

public void CVarChange_Texture(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    cvar.GetString(g_sTexture, sizeof(g_sTexture));
    int len = strlen(g_sTexture) - 4;
    if(len > 0 && !strcmp(g_sTexture[len], ".vmt", false))    // проверяем длину пути и расширение файла
        return;

    LogError("Invalid texture path: \"%s\"", g_sTexture);
    g_sTexture = "sprites/xbeam2.vmt";
}

public void OnMapStart()
{
    if(!(g_iTexture = PrecacheModel(g_sTexture)))
    {
        LogError("Can't precache texture \"%s\"", g_sTexture);
        return;
    }

    char path[PLATFORM_MAX_PATH];
    FormatEx(path, sizeof(path), "materials/%s", g_sTexture);
    AddFileToDownloadsTable(path);

    int pos = strlen(path) - 2;
    path[pos] = 't', path[pos+1] = 'f';    // меняем расширение vmt на vtf
    AddFileToDownloadsTable(path);
}
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
а если так?
C-подобный:
#include <sdktools_stringtables>

char
    g_sTexture[PLATFORM_MAX_PATH];
int
    g_iTexture;

public void OnPluginStart()
{
    ConVar cvar;
    cvar = CreateConVar("sm_vsb_linetexture", "sprites/xbeam2.vmt", "Текстура обводки блокировки", FCVAR_PRINTABLEONLY);
    cvar.AddChangeHook(CVarChange_Texture);
    CVarChange_Texture(cvar, NULL_STRING, NULL_STRING);

    AutoExecConfig(true, "Visual_Block");
}

public void CVarChange_Texture(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    cvar.GetString(g_sTexture, sizeof(g_sTexture));
    int len = strlen(g_sTexture) - 4;
    if(len > 0 && !strcmp(g_sTexture[len], ".vmt", false))    // проверяем длину пути и расширение файла
        return;

    LogError("Invalid texture path: \"%s\"", g_sTexture);
    g_sTexture = "sprites/xbeam2.vmt";
}

public void OnMapStart()
{
    if(!(g_iTexture = PrecacheModel(g_sTexture)))
    {
        LogError("Can't precache texture \"%s\"", g_sTexture);
        return;
    }

    char path[PLATFORM_MAX_PATH];
    FormatEx(path, sizeof(path), "materials/%s", g_sTexture);
    AddFileToDownloadsTable(path);

    int pos = strlen(path) - 2;
    path[pos] = 't', path[pos+1] = 'f';    // меняем расширение vmt на vtf
    AddFileToDownloadsTable(path);
}
В консоль это выводит: [Visual_Block.smx] Invalid texture path: "", хотя пути прописаны
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@7pElllHuK, а что в кваре прописано?
проверяй запросом sm_vsb_linetexture в консоль сервера.
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
@7pElllHuK, а что в кваре прописано?
проверяй запросом sm_vsb_linetexture в консоль сервера.
L 01/07/2024 - 23:57:40: [Visual_Block.smx] Invalid texture path: "#empty"
[SM] Plugin Visual Block reloaded successfully.
sm_vsb_linetexture
"sm_vsb_linetexture" = "#empty" ( def. "sprites/xbeam2.vmt" )
- Текстура обводки блокировки
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
L 01/07/2024 - 23:57:40: [Visual_Block.smx] Invalid texture path: "#empty"
[SM] Plugin Visual Block reloaded successfully.
sm_vsb_linetexture
"sm_vsb_linetexture" = "#empty" ( def. "sprites/xbeam2.vmt" )
- Текстура обводки блокировки
ну так у тебя не прописано ничего
а что в конфиге?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
ну так у тебя не прописано ничего
а что в конфиге?
Да, действительно в конфиге было пусто, теперь выводится путь к текстуре при вводе команде, но не выводится линия через функцию
TE_SetupBeamPoints
До этого все было так и все работало, просто решил сделать все более красиво:
Так было:
int g_iTexture;
ConVar g_hTexture;

public void OnPluginStart()
{
  g_hTexture = CreateConVar("sm_vsb_linetexture",     "sprites/xbeam2.vmt",     "Текстура обводки блокировки");
    g_hTexture.AddChangeHook(OnConvarChanged);
}

public void OnMapStart()
{
    char sBufer[64];
  
    g_hTexture.GetString(sBufer, 64);
    if (!sBufer[0]) sBufer = "sprites/xbeam2.vmt";

    g_iTexture = PrecacheModel(sBufer);
}

public void OnConfigsExecuted()
{
    g_hTexture.GetString(sBufer, 64)
    OnConvarChanged(g_hTexture,"", sBufer);
}

public void OnConvarChanged(ConVar hCvar, const char[] OldValue, const char[] sNewValue)
{
    if (hCvar == g_hTexture) if (sNewValue[0]) g_iTexture = PrecacheModel(sNewValue, true);
}
В старом коде если в конфиге было пусто то выводилась стандартная текстура. Если в конфиге меняли путь на свой то выводилась та на которую меняли
 
Последнее редактирование:

Туник

Участник
Сообщения
1,281
Реакции
263
Вопрос)
Ксго id 730 - А у Кс соурс стим версия какой id?
 

XDSTYLE

Участник
Сообщения
400
Реакции
279
Вопрос)
Ксго id 730 - А у Кс соурс стим версия какой id?
240 вроде
Сообщения автоматически склеены:

Вопрос)
Ксго id 730 - А у Кс соурс стим версия какой id?
1704668004485.png
1704668015555.png

это или нет...
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
У тебя два варианта:
1) у m_hActiveWeapon поменять Prop_Data на Prop_Send
2) Заместо GetEdictClassname использовать GetEntityClassname

Попробуй, может в этом дело
ну или IsValidEdict(weapon) вместо IsValidEntity(weapon)
Спасибо большое, помогло
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
@7pElllHuK, ну а какой сейчас код?
Тот что вы писали, я его вставил и теперь линии не выводится вообще. Пробовал ставить старый плагин и перезапускать его через консоль сервера, линии появляются
 
Сверху Снизу