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

Тема в разделе "C, C++", создана пользователем urShadow, 5 дек 2014.

  1. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    [Список доступных классов:
    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
     
    Последние данные очков репутации:
    ryd65: 1 Очко 28 июл 2016
    BUCILOVE: 1 Очко 23 дек 2016
    Arkember: 2 Очки 2 янв 2017
    #1
    Последнее редактирование: 10 сен 2015
    Снежок, Arkember, kiceargy и 17 другим нравится это.
  2. ScripterAHK

    ScripterAHK Новичок

    Регистрация:
    25.08.14
    Сообщения:
    1
    Лайки:
    0
    Репутация:
    0
    Может кто скинуть скомпилированный .dll?
     
    #2
  3. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Вы могли бы сделать пример для registercommand?
     
    #3
  4. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    На днях начну писать статьи посвященные работе с API. Всё подробно будет разъяснено с нуля.
     
    #4
  5. NarutoUA

    NarutoUA Хокаге
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    528
    Лайки:
    570
    Репутация:
    269
    Если просто подключить проэкт и компилировать под asi будет работать?
     
    #5
  6. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    Нет, специально сделано, чтоб работало только с .sf плагинами.
     
    #6
  7. AxweII

    AxweII Пользователь

    Регистрация:
    07.12.14
    Сообщения:
    5
    Лайки:
    0
    Репутация:
    0
    Про класс CCLEO можно поподробнее? Хотя бы пару слов про него
     
    #7
  8. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    В будущих уроках покажу.
     
    #8
  9. NarutoUA

    NarutoUA Хокаге
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    528
    Лайки:
    570
    Репутация:
    269
    Добавь возможность отсылать уроки на вики с предмодерацией.
     
    #9
  10. iAmerican

    iAmerican Известный пользователь

    Регистрация:
    17.02.14
    Сообщения:
    258
    Лайки:
    50
    Репутация:
    10
    Как фиксануть?
    [​IMG]
     
    #10
  11. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    Эта возможность есть.
    http://blasthack.net/wiki/tutorials:add

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

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Установи DirectX SDK.
     
    #12
    iAmerican нравится это.
  13. Frixen

    Frixen Известный пользователь

    Регистрация:
    21.06.13
    Сообщения:
    80
    Лайки:
    4
    Репутация:
    0
    0B6D: render 30@ = create_font "Verdana" height 13 flags 0x9
    0B6F: render font 30@ draw_text 2@ pos 23@ 24@ color 0xffff7700

    Как это будет выглядеть в API
     
    #13
  14. legend2360

    legend2360 Ух как люблю скобочки

    Регистрация:
    23.03.13
    Сообщения:
    1.989
    Лайки:
    644
    Репутация:
    412
    Дабы вопрос не висел, в вики сегодня будет урок по этому.
    А я прост кину свой код с которым мне помог urS:
    http://dumpz.org/1270415/

    Рисует квадрат и в левой части квадрата текст
     
    #14
    mendoza17 нравится это.
  15. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Как использовать это с 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);
     
    #15
  16. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    Использовать также как и в собе, просто функция отправки другая.
     
    #16
  17. kemperrr

    kemperrr Известный пользователь

    Регистрация:
    04.02.14
    Сообщения:
    107
    Лайки:
    2
    Репутация:
    1
    Сделай урок как сделать интерфейс на подобии uChat
     
    #17
  18. NarutoUA

    NarutoUA Хокаге
    BH Team

    Регистрация:
    26.05.13
    Сообщения:
    528
    Лайки:
    570
    Репутация:
    269
    Можно ли хуки ставить? хотелось бы перехватить отправку сообщения
     
    #18
  19. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    Можно, на выходных напишу подробный урок по работе с RakNet.
     
    #19
  20. AxweII

    AxweII Пользователь

    Регистрация:
    07.12.14
    Сообщения:
    5
    Лайки:
    0
    Репутация:
    0
    Такая тема:
    Код (Text):
    fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or directory
    DirectX SDK стоит!
     
    #20
  21. Frixen

    Frixen Известный пользователь

    Регистрация:
    21.06.13
    Сообщения:
    80
    Лайки:
    4
    Репутация:
    0
    Попробуй указать путь до него, мне помогло
     
    #21
    AxweII нравится это.
  22. PoccoJI

    PoccoJI Известный пользователь

    Регистрация:
    02.02.14
    Сообщения:
    136
    Лайки:
    12
    Репутация:
    22
    ФИП, ЕВГЕН, когда структуру actor_info добавите?
     
    #22
    Последнее редактирование: 14 сен 2015
  23. urShadow

    urShadow C++/C#

    Регистрация:
    09.03.13
    Сообщения:
    21
    Лайки:
    22
    Репутация:
    148
    С каких пор ты ко мне на вы? :D
    Добавлю на выходных мб.
     
    Последние данные очков репутации:
    includelow: 4 Очки (пили) 11 дек 2014
    #23
  24. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Как можно создать bitstream для SendRPC?
     
    #24
  25. PoccoJI

    PoccoJI Известный пользователь

    Регистрация:
    02.02.14
    Сообщения:
    136
    Лайки:
    12
    Репутация:
    22
    Код (Text):
    BitStream bit;
    bit.Write(<param>);
    SF->getRakNet()->SendRPC(id RPC,&bit,HIGH_PRIORITY,RELIABLE_ORDERED,0,0);
     
    #25
  26. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Почему повторное соединение не работает?
    Код (Text):
    SF->getSAMP()->disconnect(0);
    SF->getSAMP()->getInfo()->RestartGame();
     
    #26
  27. PoccoJI

    PoccoJI Известный пользователь

    Регистрация:
    02.02.14
    Сообщения:
    136
    Лайки:
    12
    Репутация:
    22
    use
    SF->getSAMP()->disconnect(0);
    SF->getSAMP()->getInfo()->RestartGame();
    + SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT;
     
    #27
  28. Dark_Knight

    Dark_Knight Фипа не обижать. Я його "кохаю".
    Друг

    Регистрация:
    18.03.13
    Сообщения:
    1.989
    Лайки:
    518
    Репутация:
    176
    Как это обносится к апи? -_-
     
    Последние данные очков репутации:
    PoccoJI: 1 Очко (да я тупанул))) 13 дек 2014
    #28
  29. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    [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
     
    #29
  30. FYP

    FYP админ какой-то

    Регистрация:
    09.03.13
    Сообщения:
    684
    Лайки:
    1.460
    Репутация:
    628
    SF->getSAMP()->disconnect(0);
    SF->getSAMP()->disconnect(100);
     
    #30
  31. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    SF->getSAMP()->disconnect(100);
    хорошо работает
     
    #31
  32. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Что не так?
    Код (Text):
    //NAMETAGS
    for (int i = 0; i < 1000; i++)
    {
        stRemotePlayer *pPlayer = SF->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);
        }
    }
     
    #32
  33. AxweII

    AxweII Пользователь

    Регистрация:
    07.12.14
    Сообщения:
    5
    Лайки:
    0
    Репутация:
    0
    Код (Text):
    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;
        }
    }
    При в ходе крашит игру. Если убрать регистрацию команды то все норм. Где ошибка?
     
    #33
  34. PoccoJI

    PoccoJI Известный пользователь

    Регистрация:
    02.02.14
    Сообщения:
    136
    Лайки:
    12
    Репутация:
    22

    void cmd_show_info_player(char *param);
    pPlayer->pPlayerData->iAFKState == 2
    == 2 убери
     
    #34
  35. AxweII

    AxweII Пользователь

    Регистрация:
    07.12.14
    Сообщения:
    5
    Лайки:
    0
    Репутация:
    0
    Даже если так сделать:
    Код (Text):
    #include <Windows.h>
    #include <string>
    #include <assert.h>
    #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;
    Все равно краш. Проблема именно в регистрации команды, если в место нее засунуть вывод сообщения в чат то все пашет.
     
    #35
  36. PoccoJI

    PoccoJI Известный пользователь

    Регистрация:
    02.02.14
    Сообщения:
    136
    Лайки:
    12
    Репутация:
    22
    Код (Text):
    #include <windows.h>
    #include <string>
    #include <assert.h>
    #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);
     
    #36
    Последнее редактирование: 16 дек 2014
    XyJluraH_J нравится это.
  37. AxweII

    AxweII Пользователь

    Регистрация:
    07.12.14
    Сообщения:
    5
    Лайки:
    0
    Репутация:
    0
    Однако все равно крашит. Что то тут не так.. Ведь без этой гребаной регистрации команды все работает!
     
    #37
  38. CarLCas

    CarLCas Известный пользователь

    Регистрация:
    12.07.13
    Сообщения:
    136
    Лайки:
    26
    Репутация:
    14
    Подскажите, пожалуйста, как отправить команду/текст в чат?
     
    #38
  39. Uztor

    Uztor Активный пользователь

    Регистрация:
    09.07.14
    Сообщения:
    44
    Лайки:
    3
    Репутация:
    1
    Hello, what is wrong?
    Код (Text):
    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);
    }
     
    #39
  40. legend2360

    legend2360 Ух как люблю скобочки

    Регистрация:
    23.03.13
    Сообщения:
    1.989
    Лайки:
    644
    Репутация:
    412
    Maybe log(buf);?
    Change to SF->log(buf); or... it's(log(buf)) your function?
     
    #40