ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   SAMPFUNCS | API C++ (https://forum.antichat.xyz/showthread.php?t=1306498)

urShadow 06.12.2014 00:59

[Список доступных классов:

CSAMP, CRakNet, CRender, CCLEO, CGame.


Описание:

SF API это удобный инструмент позволяющий использовать возможности плагина SAMPFUNCS на максимум.

Предоставлены удобные классы для максимально простого и эффективного написания своих плагинов на языке программирования c++.

Более подробная информация вскоре будет выложена в Wiki

Установка:

Папку SFAPI положить в каталог своего проекта, в настройках выставить тип конфигурации .dll и конечное расширение .sf.

Затем, объявить объект класса CSAMPFUNCS и в точке входа в приложение при выполнении операции DLL_PROCESS_ATTACH вызвать функцию obj_api->initPlugin( mainloop, hModule ), где mainloop - это указатель на функцию которая будет выполняться в основном цикле игры, а hModule это дескриптор.

Либо извлечь готовый настроенный проект SFPlugin.zip из архива с SF.

Список уроков:

1. Основы API

2. Dialog hider

3. Render

4. RakNet

Разработчик SF API: urShadow

ScripterAHK 06.12.2014 20:52

Может кто скинуть скомпилированный .dll?

Uztor 06.12.2014 22:05

Вы могли бы сделать пример для registercommand?

urShadow 06.12.2014 22:30

На днях начну писать статьи посвященные работе с API. Всё подробно будет разъяснено с нуля.

NarutoUA 07.12.2014 16:23

Если просто подключить проэкт и компилировать под asi будет работать?

urShadow 07.12.2014 16:42

Нет, специально сделано, чтоб работало только с .sf плагинами.

AxweII 07.12.2014 16:58

Про класс CCLEO можно поподробнее? Хотя бы пару слов про него

urShadow 07.12.2014 17:58

В будущих уроках покажу.

NarutoUA 08.12.2014 00:19

Добавь возможность отсылать уроки на вики с предмодерацией.

iAmerican 08.12.2014 00:34

Как фиксануть?

http://i9.pixs.ru/storage/3/7/0/2014...6_15068370.png

urShadow 08.12.2014 00:37

Цитата:

Сообщение от NarutoUA

Добавь возможность отсылать уроки на вики с предмодерацией.

Эта возможность есть.

http://blasthack.net/wiki/tutorials:add

Только учти, что основной цикл уроков веду только я, если ты решишь свои уроки писать, то пусть они не пересекаются с моими.

Dark_Knight 08.12.2014 01:20

Цитата:

Сообщение от Ink


Установи DirectX SDK.

Frixen 08.12.2014 14:01

0B6D: render 30@ = create_font "Verdana" height 13 flags 0x9

0B6F: render font 30@ draw_text 2@ pos 23@ 24@ color 0xffff7700

Как это будет выглядеть в API

itsLegend 08.12.2014 16:07

Цитата:

Сообщение от Frixen

0B6D: render 30@ = create_font "Verdana" height 13 flags 0x9
0B6F: render font 30@ draw_text 2@ pos 23@ 24@ color 0xffff7700

Как это будет выглядеть в API


Дабы вопрос не висел, в вики сегодня будет урок по этому.

А я прост кину свой код с которым мне помог urS:

http://dumpz.org/1270415/

Рисует квадрат и в левой части квадрата текст

Uztor 08.12.2014 23:19

Как использовать это с api?

PACKET_BULLET_SYNC = 224

struct stBulletSync ( size =39)

BYTE bHitType;+0

short iHitID;+1

float fBullFrom[3];+3

float fBullTo[3];+15

float fBodyOfsset[3];+27

SF->getRakNet()->SendRPC(224, ?, HIGH_PRIORITY, RELIABLE_ORDERED, '\000', false);

urShadow 09.12.2014 01:12

Использовать также как и в собе, просто функция отправки другая.

kemperrr 09.12.2014 16:51

Сделай урок как сделать интерфейс на подобии uChat

NarutoUA 10.12.2014 22:56

Можно ли хуки ставить? хотелось бы перехватить отправку сообщения

urShadow 10.12.2014 23:05

Можно, на выходных напишу подробный урок по работе с RakNet.

AxweII 11.12.2014 02:20

Такая тема:

Код:





Код:

fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory




DirectX SDK стоит!

Frixen 11.12.2014 14:28

Цитата:

Сообщение от AxweII

Такая тема:

Код:





Код:

fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory



DirectX SDK стоит!


Попробуй указать путь до него, мне помогло

PoccoJI 11.12.2014 19:37

ФИП, ЕВГЕН, когда структуру actor_info добавите?

urShadow 11.12.2014 19:54

С каких пор ты ко мне на вы? :D

Добавлю на выходных мб.

Uztor 12.12.2014 06:26

Как можно создать bitstream для SendRPC?

PoccoJI 12.12.2014 10:16

Цитата:

Сообщение от Uztor

КакможносоздатьbitstreamдляSendRPC?


Код:





Код:

BitStream bit;
bit.Write();
SF->getRakNet()->SendRPC(id RPC,&bit,HIGH_PRIORITY,RELIABLE_ORDERED,0,0);


Uztor 13.12.2014 02:56

Почему повторное соединение не работает?

Код:





Код:

SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();


PoccoJI 13.12.2014 16:12

Цитата:

Сообщение от Uztor

Почему повторное соединение не работает?

Код:





Код:

SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();



use

SF->getSAMP()->disconnect(0);

SF->getSAMP()->getInfo()->RestartGame();

+ SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;

Dark_Knight 13.12.2014 16:18

Цитата:

Сообщение от PoccoJI

use

Код:





Код:

#define FUNC_RESTARTGAME 0x9280
#define SAMP_INFO_OFFSET  0x212A80
void restartGame ()
{
DWORD g_dw_SAMP_Addr = (DWORD)GetModuleHandle("samp.dll");
uint32_t samp_info = g_dw_SAMP_Addr + SAMP_INFO_OFFSET;
uint32_t func = g_dw_SAMP_Addr + FUNC_RESTARTGAME;
__asm mov eax, dword ptr[samp_info]
__asm mov ecx, dword ptr[eax]
__asm call func
__asm pop eax
__asm pop ecx
}




Как это обносится к апи? -_-

Uztor 13.12.2014 18:36

Цитата:

Сообщение от PoccoJI

use
SF->getSAMP()->disconnect(0);
SF->getSAMP()->getInfo()->RestartGame();
+ SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;


[15:36:12] Connecting to **.***.***.***:7777...

[15:36:12] Connected. Joining the game...

[15:36:12] CONNECTION REJECTED: Unacceptable NickName

[15:36:12] Please choose another nick between and 3-20 characters

[15:36:12] Please use only a-z, A-Z, 0-9

[15:36:12] Use /quit to exit or press ESC and select Quit Game

FYP 13.12.2014 18:44

[S]SF->getSAMP()->disconnect(0);[/S]

SF->getSAMP()->disconnect(100);

Uztor 13.12.2014 19:08

SF->getSAMP()->disconnect(100);

хорошо работает

Uztor 13.12.2014 19:59

Что не так?

Код:





Код:

//NAMETAGS
for (int i = 0; i getSAMP()->getPlayers()->pRemotePlayer[i];
    if (SF->getSAMP()->getPlayers()->IsPlayerDefined(i))
    {
        char buffer[24];
        sprintf(buffer, "%s", pPlayer->szPlayerName);
        SF->getSAMP()->getInfo()->pPools->pPool_Text3D->Create3DText(i, buffer,0.00,5000.0,true,i);
    }
}


AxweII 16.12.2014 00:18

Код:





Код:

void _cdecl cmd_show_info_player( char *param )
{
    int    i = atoi( param );

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

    sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2 );

    SF->getSAMP()->getChat()->AddChatMessage( -1, buf ); 
};

void CALLBACK mainloop(void)
{
    static bool init = false;
    if(!init)
    {
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
        init = true;
    }
}



При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?

PoccoJI 16.12.2014 11:44

Цитата:

Сообщение от AxweII

Код:





Код:

void _cdecl cmd_show_info_player( char *param )
{
    int    i = atoi( param );

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

    sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState == 2 );

    SF->getSAMP()->getChat()->AddChatMessage( -1, buf ); 
};

void CALLBACK mainloop(void)
{
    static bool init = false;
    if(!init)
    {
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("ubot", cmd_show_info_player);
        init = true;
    }
}



При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?

void cmd_show_info_player(char *param);

pPlayer->pPlayerData->iAFKState == 2

== 2 убери

AxweII 16.12.2014 13:06

Даже если так сделать:

Код:





Код:

#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void _cdecl cmd_show_info_player( char *param ){};

void CALLBACK mainloop(void)
{
    static bool init = false;
    if(!init)
    {
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("ubot", 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 );
    }
    return true;



Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.

PoccoJI 16.12.2014 13:14

Цитата:

Сообщение от AxweII

Даже если так сделать:

Код:





Код:

#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void _cdecl cmd_show_info_player( char *param ){};

void CALLBACK mainloop(void)
{
    static bool init = false;
    if(!init)
    {
        if( !SF->getSAMP()->IsInitialized() )
            return;
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("ubot", 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 );
    }
    return true;



Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.

Код:





Код:

#include
#include
#include
#include "CSAMPFUNCS.h"

CSAMPFUNCS *SF = new CSAMPFUNCS();

void cmd_show_info_player( char *param )
{
    int    i = atoi( param );

    char buf[128];

    stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[ i ];

    sprintf_s( buf, "Nickname - %s, Ping - %d, Score - %d, isNPC - %d, AFKState - %d",
        pPlayer->szPlayerName,
        pPlayer->iPing,
        pPlayer->iScore,
        pPlayer->iIsNPC,
        pPlayer->pPlayerData->iAFKState );

    SF->getSAMP()->getChat()->AddChatMessage( -1, buf );
}

void CALLBACK mainloop(void)
{
    static bool init = false;
    if(!init)
    {
        if(!SF->getSAMP()->IsInitialized()) return;
        SF->getSAMP()->registerChatCommand("ubot",(CMDPROC) 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 );
    }
    return true;
}



вот абсалютли рабочий код

вот что сделал SF->getSAMP()->registerChatCommand("ubot",(CMDPROC) cmd_show_info_player);

AxweII 16.12.2014 19:51

Однако все равно крашит. Что то тут не так.. Ведь без этой гребаной регистрации команды все работает!

CarLCas 17.12.2014 20:42

Подскажите, пожалуйста, как отправить команду/текст в чат?

Uztor 28.12.2014 18:38

Hello, what is wrong?

Код:





Код:

if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerHealth)
{
    short int sPlayerID;
    float health;
    char buf[256];
    params->bitStream->Read(sPlayerID);
    params->bitStream->Read(health);
    params->bitStream->ResetReadPointer();
    sprintf(buf, "%s (%d) health set to %.1f gesetzt", SF->getSAMP()->getPlayers()->GetPlayerName(sPlayerID), sPlayerID, health);
    log(buf);
}


itsLegend 28.12.2014 18:53

Maybe log(buf);?

Change to SF->log(buf); or... it's(log(buf)) your function?


Время: 18:43