Другое SAMPFUNCS | API C++

memir

🇷🇺
Всефорумный модератор
340
612
Не подскажешь где байты узнать можно?
Код:
[*]{ Размеры типов данных
[*]

[*]uint16_t  ---> 2 bytes.
[*]uint8_t ---> 1 bytes.
[*]char ---> 1 bytes.
[*]bool ---> 1 bytes.
[*]int ---> 4 bytes.
[*]short int ---> 2 bytes.
[*]unsigned int ---> 4 bytes.
[*]unsigned short int ---> 2 bytes.
[*]uint32_t ---> 4 bytes.
[*]float ---> 4 bytes.
[*]uint16_t somevariable[2] ---> 2*2 = 4 bytes.
[*]void ---> = 4 bytes.
[*]DWORD ---> = 4 bytes.
[*]float asomevariable[3] ---> 3*4 = 12 bytes.
[*]

[*]}
 
  • Нравится
Реакции: tropical5466 и Karbun

_Vine_

Активный
154
57
Подскажите, пожалуйста, где я накосячил?
Проблема вот в чем:
плагин должен писать текст над радаром, он пишет, все правильно, но есть один "побочный эффект", сильно падает фпс. Без этого плагина фпс около 50-60, с плагином - 10-15.
В чем проблемка?

P.S.: если сделать такой же код на клео, то все будет работать отлично и ФПС падать не будет

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

bool stage = true;

void CALLBACK ctime(std::string)
{
    if (stage)
    {
        stage = false;
    }
    else
    {
        stage = true;
    }
    return;
}

bool CALLBACK Present ()
{
    if (SUCCEEDED(SF->getRender()->BeginRender()))
    {
            stFontInfo *pFont;
            pFont = SF->getRender()->CreateNewFont("Arial", 9, 13);
            pFont->Print("qqqq", -1, 140, 727, false);
        SF->getRender()->EndRender();
    };
    return true;
};





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;
        SF->getSAMP()->registerChatCommand("ctime", ctime);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
            SF->initPlugin(mainloop, hModule);
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
 

_Vine_

Активный
154
57
Как взять пикап?
C++:
SF->getSAMP()->sendPickedUpPickup(id)
Чёт не работает
Смотря еще с какого расстояния ты берешь пикап и на каком сервере, на разных серверах расстояние для взятия пикапа разное.
Попробуй подойти почти вплотную..
 

Karbun

Участник
112
3
Смотря еще с какого расстояния ты берешь пикап и на каком сервере, на разных серверах расстояние для взятия пикапа разное.
Попробуй подойти почти вплотную..
Че тут подходить-то? С собейта берёт, с плагина - нет.
 

_Vine_

Активный
154
57
Собейт может отправлять синху к пикапу, если взять пикап через собейт, сервер будет думать что ты возле пикапа, и отдаст тебе его :D
Если в собейте нету функции синхры к пикапу, по идее, он тоже взять пикап не должен.
Знаю что в собе от слонобойки 100 проц есть синхра к пикапу
 
  • Нравится
Реакции: Karbun

Dark_Knight

Me, me and me.
Друг
4,085
2,114
Че тут подходить-то? С собейта берёт, с плагина - нет.
А ты не подумал, что сервер кроме проверки на поднятия пикапа при этом может использовать еще другие проверки? Если не подбирает - это еще не значит, что ты все правильно написал.
Собейт может отправлять синху к пикапу, если взять пикап через собейт, сервер будет думать что ты возле пикапа, и отдаст тебе его :D
Если в собейте нету функции синхры к пикапу, по идее, он тоже взять пикап не должен.
Знаю что в собе от слонобойки 100 проц есть синхра к пикапу
И что ты этим хотел сказать?
 

_Vine_

Активный
154
57
А ты не подумал, что сервер кроме проверки на поднятия пикапа при этом может использовать еще другие проверки? Если не подбирает - это еще не значит, что ты все правильно написал.

И что ты этим хотел сказать?
То, что на сервере стоит проверка на расстояние от пикапа, если оно больше указанного - пикап браться не будет.
 

iAmerican

Известный
Друг
614
260
Подскажите, пожалуйста, где я накосячил?
Проблема вот в чем:
плагин должен писать текст над радаром, он пишет, все правильно, но есть один "побочный эффект", сильно падает фпс. Без этого плагина фпс около 50-60, с плагином - 10-15.
В чем проблемка?

P.S.: если сделать такой же код на клео, то все будет работать отлично и ФПС падать не будет

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();

bool stage = true;

void CALLBACK ctime(std::string)
{
    if (stage)
    {
        stage = false;
    }
    else
    {
        stage = true;
    }
    return;
}

bool CALLBACK Present ()
{
    if (SUCCEEDED(SF->getRender()->BeginRender()))
    {
            stFontInfo *pFont;
            pFont = SF->getRender()->CreateNewFont("Arial", 9, 13);
            pFont->Print("qqqq", -1, 140, 727, false);
        SF->getRender()->EndRender();
    };
    return true;
};





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;
        SF->getSAMP()->registerChatCommand("ctime", ctime);
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        init = true;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
        case DLL_PROCESS_ATTACH:
            SF->initPlugin(mainloop, hModule);
            break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
            break;
    }
    return TRUE;
}
C++:
void CALLBACK ctime(std::string)
{
    if (stage)
    {
        stage = false;
    }
    else
    {
        stage = true;
    }
    return;
}
// Этого вполне хватит , если твоя команда больше не чего выполнять не будет
void CALLBACK ctime(std::string) { stage != true; }
 
Последнее редактирование:

Karbun

Участник
112
3
Можете помочь, почему не реагирует?
C++:
if (sscanf(msg, "%d тест",&int))
{
        SF->getSAMP()->getChat()->AddChatMessage(-1,"%d", int);
}
 

BlackKnigga

Известный
BH Team
922
446
Можете помочь, почему не реагирует?
C++:
if (sscanf(msg, "%d тест",&int))
{
        SF->getSAMP()->getChat()->AddChatMessage(-1,"%d", int);
}
Потому что int это тип данных, его нельзя использовать как название переменной.
К тому же неизвестно что у тебя в msg.
 
  • Нравится
Реакции: Karbun

Karbun

Участник
112
3
Потому что int это тип данных, его нельзя использовать как название переменной.
К тому же неизвестно что у тебя в msg.
В msg сообщение из хука ScrClientMessage. Если &int поменять на любую другую, проблема остаётся.
Пробовал еще так:
C++:
if (sscanf(msg, "%*s %d тест",&lol))
{
        SF->getSAMP()->getChat()->AddChatMessage(-1,"%d", lol);
}

Текст отправляю: 123 тест. В чат ничего не высвечивается. Переменная lol - integer.