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

Tray228

Новичок
218
27
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.
А wait можно?

Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.
Все равно
PHP:
#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 kek = false;


void CALLBACK cmd_show_info_player(std::string param)
{
    kek ^= true;
    if (kek)
    {
        if (SF->getCLEO()->callOpcode("02E0: actor $PLAYER_ACTOR firing_weapon") && SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon == 25)
        {
            SF->getCLEO()->callOpcode("0001: wait 50");
            PEDSELF->GiveWeapon((eWeaponType)25, 0, WEAPONSKILL_PRO);

        }
    }
}

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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "macro" );
       
        SF->getSAMP()->registerChatCommand("cyka", cmd_show_info_player);
        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;
}
 
Последнее редактирование модератором:

FordeD

Участник
98
11
C++:
int square = 1;
CVector fPos = { FxPos, FyPos , 0.0 };
        GAME->Get3DMarkers()->CreateMarker(square, MARKER3D_TUBE, &fPos, 40.0, 1.0, 3, 52, 227, 255);

Беда, не могу нарисовать маркер, где косяк может быть?
FxPos и FyPos в зависимости от введенных данных по свичу выбираются
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Этот класс вообще странный.
Для начала - после создания необходимо получить указатель на C3DMarker(который возвращается при создании). Функции CreateMarker по барабану какую позицию ты указал, тебе придется снова установить её: C3DMarker::SetPosition(CVector*);
Потом в цикле C3DMarker::SetActive();

Насчет Z координаты - её тоже нужно указать. 0.0 не покатит в многих случаях.
 

FordeD

Участник
98
11
Этот класс вообще странный.
Для начала - после создания необходимо получить указатель на C3DMarker(который возвращается при создании). Функции CreateMarker по барабану какую позицию ты указал, тебе придется снова установить её: C3DMarker::SetPosition(CVector*);
Потом в цикле C3DMarker::SetActive();

Насчет Z координаты - её тоже нужно указать. 0.0 не покатит в многих случаях.
Я нуб, как указатель пишется? ))
 

FordeD

Участник
98
11
Последнее редактирование модератором:

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
В итоге все равно не реагирует на результат
В цикле, который mainloop, нужно фигачить ->SetActive();
C++:
C3DMarker* marker = nullptr;

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (!SF->getSAMP()->IsInitialized())
            return;

       C3DMarker* freeMarker = GAME->Get3DMarkers()->FindFreeMarker();
       if (freeMarker)
       {
            CVector pos = CVector(0.0f, 0.0f, 0.0f);
            marker = GAME->Get3DMarkers()->CreateMarker(freeMarker->GetIdentifier(), MARKER3D_TUBE, &pos, 40.0f, 1.0f, 3, 52, 227, 255);
            marker->SetPosition(&pos);
        }

        init = true;
    }
    else
    {
        if (marker != nullptr)
        {
            marker->SetActive();
        }
    }
}

Всё в какашечку укатилось. Этот код уже не рабочий. Прошло 1,5 месяца.
 
Последнее редактирование:

Tray228

Новичок
218
27
PHP:
#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();
stFontInfo *pFont;
bool alfonso = false;
char adm[11][60];
bool admint;
char pl[125];
char adonl[125][125];
int coutadmin; 


void del_adm_onl(int nac)
{
    for (int i = nac; i<coutadmin - 1; i++)
        strcpy(adonl[i], adonl[i + 1]);
}

void get_list_admin()
{
    FILE *f1;
    if ((f1 = fopen(".\\SAMPFUNCS\\admins.txt", "r")) == NULL)
    {
        SF->getSAMP()->getChat()->AddChatMessage(-1, "Error reading list admins");
        f1 = fopen(".\\SAMPFUNCS\\admins.txt", "w");
        fputs("Nick_Name", f1);
        fclose(f1);
        return;
    }
    char *fs, *fp, gna[25];
    for (int i = 0; i<154; i++)
    {
        fgets(gna, 25, f1);
        fs = gna;
        fp = strstr(fs, " \n");
        if (fp == NULL)
            fp = strchr(fs, '\n');
        if (fp != NULL)
            strncat(adm[i], fs, strlen(fs) - strlen(fp));
        else
            strcat(adm[i], fs);
    }
    fclose(f1);
    delete f1, fs, fp;
}

bool CALLBACK incomingRPC(stRakNetHookParams *params) // определение callback-функции которая будет вызвана если от сервера был получен новый RPC.
{
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin && alfonso) // если это RPC_ScrServerJoin
    {
        short int sPlayerID;
        D3DCOLOR D3DPlayerColor;
        byte isNPC, nameLen;
        char szPlayerName[25];

        params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
        params->bitStream->Read(sPlayerID); // читаем ID игрока.
        params->bitStream->Read(D3DPlayerColor); // цвет ника игрока.
        params->bitStream->Read(isNPC); // флаг говорящий о том, NPC это или нет.
        params->bitStream->Read(nameLen); // длина ника.
        params->bitStream->Read(szPlayerName, nameLen); // ник.
        szPlayerName[nameLen] = '\0'; // обрезаем чтоб не было мусора
        params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
        sprintf(pl, "%s[%d] Подключился к серверу.", szPlayerName, sPlayerID); // добавляем сообшение в чат. 
        for (int i = 0; i<154; i++)
        { 
            if (strcmp(szPlayerName, adm[i]) == 0 && strcmp(adm[i], "") != 0 && strcmp(adm[i], " ") != 0 && strcmp(adm[i], "\n") != 0)
            {
                sprintf(adonl[coutadmin], "{CD853F}[Family]: %s[%d]", szPlayerName, sPlayerID);
                coutadmin++;
                admint = true;
                memset(szPlayerName, 0, sizeof(szPlayerName));
            }
            else
                admint = false;
    };
        if (params->packetId == ScriptRPCEnumeration::RPC_ScrServerQuit && alfonso) // если player quit
        {
            short int PlayerID;
            byte ReasonID;

            params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
            params->bitStream->Read(PlayerID); // читаем ID игрока.
            params->bitStream->Read(ReasonID);
            for (int i = 0; i < coutadmin; i++)
            {
                if (strcmp(SF->getSAMP()->getPlayers()->GetPlayerName(PlayerID), adonl[i]) == 0)
                {
                    del_adm_onl(i);
                    coutadmin--;
                }
                //SF->getSAMP()->getChat()->AddChatMessage(-1,"OFF: %s",SF->getSAMP()->getPlayers()->GetPlayerName(PlayerID));
            }
            }

    };
    return true; // успешно завершаем обработку RPC.
};



bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
    CONST RGNDATA *pDirtyRegion)
{
    if (SUCCEEDED(SF->getRender()->BeginRender() && alfonso))
    {
        for (int i = 0; i < coutadmin; i++)
        {
            pFont->Print(adonl[i], D3DCOLOR_ARGB(255, 255, 255, 0), 10, 260, false);

        }
        SF->getRender()->EndRender(); // завершаем рисование
    };
    return true;
}


void CALLBACK famc(std::string param)
{
    alfonso ^= 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()->getChat()->AddChatMessage( D3DCOLOR_XRGB( 0, 0xAA, 0 ), "1" );
        SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
        pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);
        SF->getSAMP()->registerChatCommand("fam", famc);
        get_list_admin();  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;
}
Почему крашит?