Другое С/С++ Вопрос - Ответ

Harryss

Участник
233
26
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
void gun_func(void)
{
    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
    }
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        init = true;   
    }
    gun_func();
}
 
Последнее редактирование:

iAmerican

Известный
Друг
611
261
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
int iTempCurrentWeapon = -1;[/FONT]
void gun_func(void)
{

    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;

    if (current_weapon == 31)
    {
        if (iTempCurrentWeapon != 31) 
        {
            SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
            iTempCurrentWeapon = 31;
        }
    }
    else 
    {
        iTempCurrentWeapon = -1;
    }
}
[FONT=Tahoma]
void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        init = true;   
    }
    gun_func();
}

Как то так вроде. Не проверял
 
  • Нравится
Реакции: Harryss

Stiopko

Известный
Проверенный
307
218
Функция бесконечно вызывается mainloop'ом, флудит сообщением в чат, как беру оружие в руку. Как решить, если помимо mainloop'а нет подходящих мест для ее вызова?
C++:
void gun_func(void)
{
    int current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
    if (current_weapon == 31)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
    }
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        init = true;   
    }
    gun_func();
}
Попробуй вот так, не самый лудший вариант, можеш еще задержку(GetTickCount) поставить на gun_func().
C++:
void gun_func(void)
    {
        static unsigned char current_weapon = -1;
        if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon != current_weapon){
            if (current_weapon == 31) SF->getSAMP()->getChat()->AddChatMessage(-1, "{FFFFFF}• {FFDA44}[SAMPFUNCS]: {FFFFFF}M4A1.");
            current_weapon = SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon;
        }
    }

    void CALLBACK mainloop()
    {
        static bool init = false;
        if (!init)
        {
            if (GAME == nullptr)
                return;
            if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
                return;
            if (!SF->getSAMP()->IsInitialized())
                return;
            init = true;
        }
        gun_func();
    }

Подскажите, для чего нужен #pragma region, и что он делает?
 
  • Нравится
Реакции: Harryss

jenekbueno

Известный
156
71
@FYP
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
 
Последнее редактирование:

#Rin

Известный
Всефорумный модератор
1,213
1,046
@FYP
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
В смысле не верные? Эти адреса подходят для SAMP 0.3.7 R1, только что проверил.
 

jenekbueno

Известный
156
71
поставил на них хук и вывожу там сообщение в чат, итог такой что они постоянно флудят, как будто это Present а не деструктор )
 

woksonal

Известный
Проверенный
268
154
@FYP
в собе не срабатывает деструктор, в связи с этим появляются краши при /q
знающий человек или кто нибудь ещё, скажите пожалуйста адрес на начало функции деструктора игры или сампа

то что ниже, это не то
#define SAMP_HOOKENTER_CNETGAME_DESTR 0xB2893
#define SAMP_HOOKENTER_CNETGAME_DESTR2 0xB3A32
00823bdb 212 _doexit
 

LUCHARE

Известный
Друг
545
716
как будто это Present а не деструктор
это действительно так, если не продолжить выполнение оригинального кода после хука (деструктор будет вызваться до тех пор, пока значение глобального объекта CNetGame не станет равно нулю)
 

Harryss

Участник
233
26
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?
 

#Rin

Известный
Всефорумный модератор
1,213
1,046
Шрифты подгружаются в скомпилированный плагин? Если у человека отсутствует шрифт в директории Win, ему не придется дополнительно скачивать его?
Смотря как сделаешь, можно как и с директории windows грузить, так и в сам плагин запихать шрифт.
 

Harryss

Участник
233
26
Есть вариации работы с JSON? Создание, запись, чтение. Иль же на худой конец INI. Находил на форуме FileMan от SR_Team, но ссылка устарела, больше ничего не накопал.
 

ALF

Известный
Проверенный
320
545
  • Нравится
Реакции: Harryss