Модуль не видит Native [Решено]

Planes

Потерявшиеся точка с запятой
Сообщения
356
Реакции
97
Не могу понять, почему модуль не видит Native. Ориентировался на урок от Рико, но и перекопал исходники других плагинов. Что-то пытался там позаимствовать, но тоже не работало и откатился до версии, которая указана в теме.

Сама ошибка: (возникает во время загрузки модуля): Native "HSUM_GetAccountId" was not found

P.S: Ядро компилировал каждый раз, когда менял что-то в исходнике и перезаписывал его, как и сам модуль. Рестарт сервера / плагина не решал проблему. Ядро работает нормально, без ошибок.
Версия компилятора: 1.11.0.6932

C-подобный:
#if defined _hsum_included_
 #endinput
#endif
#define _hsum_included_


/**
 * Send text messages.
 *
 * @param    iClient            Client ID
 *
 * @return  Client account id in HSUM
 */
native int HSUM_GetAccountId(int iClient);


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

...

public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int iErr_max)
{
    CreateNative("HSUM_GetAccountID", Native_GetAccountID);
    RegPluginLibrary("hsum");
 
    return APLRes_Success;
}

...

public int Native_GetAccountID(Handle hPlugin, int iNumParams)
{
    int iClient = GetNativeCell(1);
    if(hsumValidClient(iClient) && clientAccountID[iClient]) {
        return clientAccountID[iClient];
    }
    return 0;
}


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

#include <hsum>

#pragma newdecls required
#pragma semicolon 1


public Plugin myinfo =
{
    name = "Name",
    author = "Author",
    description = "",
    version = "1.0.0",
    url = "site"
};


public void OnPluginStart()
{
    RegServerCmd("sm_getidall", CMD_GetIDAll);
}

public Action CMD_GetIDAll(int args)
{
    for(int i = 1; i < MaxClients; i++) {
        if(IsClientInGame(i) && !IsFakeClient(i)) {
            PrintToServer("Ник: %N , ID аккаунта: %i", i, HSUM_GetAccountId(i));
        }
    }

    return Plugin_Handled;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@Planes, ты бы сначала проверял загрузилось ли ядро
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Вот так, например:
C-подобный:
#pragma newdecls required
#pragma semicolon 1

#include <hsum>

bool
    bReady;

public Plugin myinfo =
{
    name = "Name",
    author = "Author",
    version = "1.0.0",
    url = "site"
}

public void OnPluginStart()
{
    RegServerCmd("sm_getidall", CMD_GetIDAll);
}

public void OnAllPluginsLoaded()
{
    bReady = LibraryExists("hsum");
}

public void OnLibraryRemoved(const char[] name)
{
    if(!strcmp(name, "hsum")) bReady = false;
}

public Action CMD_GetIDAll(int args)
{
    if(!bReady)
    {
        PrintToServer("Ядро HSUM  не загружено!");
        return Plugin_Handled;
    }

    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
        PrintToServer("Ник: %N , ID аккаунта: %i", i, HSUM_GetAccountId(i));

    return Plugin_Handled;
}
 

Planes

Потерявшиеся точка с запятой
Сообщения
356
Реакции
97
@Grey83, ошибка та-же, но если убрать код, ищущий натив, ошибка пропадает. Слегка поменял код для проверки загрузки либы, в итоге, говорит, что ядро загружено)

C-подобный:
#pragma newdecls required
#pragma semicolon 1

#include <hsum>

bool
    bReady;

public Plugin myinfo =
{
    name = "Name",
    author = "Author",
    version = "1.0.0",
    url = "site"
}

public void OnPluginStart()
{
    RegServerCmd("sm_getidall", CMD_GetIDAll);
}

public void OnAllPluginsLoaded()
{
    bReady = LibraryExists("hsum");
}

public void OnLibraryRemoved(const char[] name)
{
    if(!strcmp(name, "hsum")) bReady = false;
}

public Action CMD_GetIDAll(int args)
{
    if(!bReady)
    {
        PrintToServer("Ядро HSUM  не загружено!");
        return Plugin_Handled;
    } else {
        PrintToServer("Ядро HSUM загружено!");
        return Plugin_Handled;
    }

    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i) && !IsFakeClient(i))
        //PrintToServer("Ник: %N , ID аккаунта: %i", i, HSUM_GetAccountId(i));

    return Plugin_Handled;
}
Сообщения автоматически склеены:

Нашел причину ошибки. Разный регистр в функции "HSUM_GetAccountId()". В одном месте писал HSUM_GetAccountId, а в другом HSUM_GetAccountID

Видимо пока тему не создать, ошибка не найдется :/
 
Последнее редактирование:
Сверху Снизу