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

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

  1. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Условие не срабатывает при дохождении таймера до 2500 мс. Каким образом это исправить?
    
    static DWORD rp_counter = 0;
    
    SF->getSAMP()->getPlayers()->pLocalPlayer->Say("Action-1");
    rp_counter = GetTickCount();
    
    if (GetTickCount() - rp_counter > 2050)
    {
       SF->getSAMP()->getPlayers()->pLocalPlayer->Say("Action-2");
       rp_counter = 0; rp_counter = GetTickCount();
    }
     
  2. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    155
    Симпатии:
    50
    static DWORD rp_counter = 0;
    
    SF->getSAMP()->getPlayers()->pLocalPlayer->Say("Action-1");
    
    if (GetTickCount() - rp_counter > 2050)
    {
       SF->getSAMP()->getPlayers()->pLocalPlayer->Say("Action-2");
       rp_counter = GetTickCount();
    }
     
  3. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    К сожалению, не помогло. Таймер то не запущен, оба сообщения сразу отправляются.
    Пробовал его там поставить - вернулся к старому, второе сообщение не выводится, условие не проходит.
     
  4. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    155
    Симпатии:
    50
    Что нужно чтобы код делал?
     
  5. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Банальная задержка между RP отыгровками.
    Задержка - отправка сообщения, задержка - отправка сообщения. Буду благодарен за помощь.
     
  6. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    155
    Симпатии:
    50
    У тебя не выйдет как ты хочешь, прямую задержку нельзя юзать в mainloop, ща попробую написать по другому
     
  7. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Дак да, Sleep же в mainloop'е усыпляет плагин целиком, поэтому я и хотел сделать это через таймер. И я это вынес в отдельную функцию, она вне mainloop'а, хотя это не столь важно.
     
  8. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    155
    Симпатии:
    50
    тебе только два сообщения или много?
     
  9. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Около 5-ти сообщений. Если способ там не очень мудреный, то мне б только показать вариант, а там я думаю сам смогу разобраться.
     
  10. cakebou

    cakebou Интересующийся

    Регистрация:
    4 апр 2017
    Сообщения:
    154
    Симпатии:
    7
    Щас бы cpp юзать для рп отыгровок facepalm
     
  11. Stiopko

    Stiopko Интересующийся

    Регистрация:
    28 фев 2018
    Сообщения:
    155
    Симпатии:
    50
    struct RPLine {
        char * line;
        unsigned int timeout;
    
        RPLine(const char * line, const unsigned int &timeout) {
            this->line = new char[strlen(line) + 1];
            strcpy(this->line, line);
            this->timeout = timeout;
        }
    
        ~RPLine() {
            delete[] line;
        }
    };
    
    struct RP {
    private:
        bool state;
        unsigned long long timer;
    public:
        std::vector<RPLine> lines;
        unsigned int line;
        RP() {
            state = false;
            line = 0;
        }
    
        void SetState(const bool &state) {
            if (this->state != state) {
                this->state = state;
                if (!state) line = 0;
                else timer = GetTickCount();
            }
        }
    
        bool Do() {
            if (state) {
                if (lines.size > line) {
                    if (timer + lines[line].timeout < GetTickCount()) {
                        line++;
                        timer = GetTickCount();
                        return true;
                    }
                }
                else SetState(false);
            }
            return false;
        }
    static RP rpOtg;
    
        // 1 раз гдето
            // всякие проверки
    
            // инициализаци строк 1 раз
    
            rpOtg.lines.push_back(RPLine("Action 1", 300));
            rpOtg.lines.push_back(RPLine("Action 2", 5000));
            rpOtg.lines.push_back(RPLine("Action 3", 3000));
            rpOtg.lines.push_back(RPLine("Action 4", 1000));
    
            // очистка строк
    
            rpOtg.lines.clear();
    
            // стартуем
            rpOtg.SetState(true);
    
            // не стартуем
            rpOtg.SetState(false);
    
        // Пихуй в маин луп
    
        if (rpOtg.Do()) SF->getSAMP()->getPlayers()->pLocalPlayer->Say(rpOtg.lines[rpOtg.line - 1].line);
    я не проверял но вроде должно работать
     
    Harryss нравится это.
  12. Harryss

    Harryss Знающий

    Регистрация:
    7 мар 2015
    Сообщения:
    216
    Симпатии:
    17
    Не стоит делать поспешных выводов. RP отыгровки являются самой малой частью, здесь C++ совсем по другим причинам.
     
  13. petuch228

    petuch228 Постоянный участник

    Регистрация:
    7 окт 2017
    Сообщения:
    82
    Симпатии:
    2
    Как получить самповский id водителя машины по ее айди/хендлу?
     
  14. cakebou

    cakebou Интересующийся

    Регистрация:
    4 апр 2017
    Сообщения:
    154
    Симпатии:
    7
    Создай структура кара, там есть cPed
     
  15. laz3r228

    laz3r228 Свой человек

    Регистрация:
    24 ноя 2016
    Сообщения:
    357
    Симпатии:
    36
    Как сделать кмд с двумя параметрами?
     
    #3095 laz3r228, 15 мар 2019 в 19:28
    Последнее редактирование: 15 мар 2019 в 20:44
  16. ALF

    ALF Интересующийся

    Регистрация:
    14 ноя 2017
    Сообщения:
    114
    Симпатии:
    127
    sscanf
     
  17. cakebou

    cakebou Интересующийся

    Регистрация:
    4 апр 2017
    Сообщения:
    154
    Симпатии:
    7
    как сделать проверку на локальное сообщение?
     
  18. Roger571

    Roger571 Активный участник

    Регистрация:
    22 июл 2015
    Сообщения:
    31
    Симпатии:
    8
    Хукать RPC, составлять список сообщений от сервера и сравнивать пул на наличие сообщений которые не приходили через RPC.
    Может есть способ и проще, но это первое, что пришло в голову.