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

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

  1. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.454
    Симпатии:
    724
    Репутация:
    206
    Считай с samp.cfg, но там размер по другому рассчитывается.
     
  2. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    645
    Симпатии:
    118
    Репутация:
    57
    В desc будут все настройки шрифта, высота, качество, название и т.д.
    D3DXFONT_DESC desc;
    ...->D3DXFont->GetDesc(&desc);
     
    Woofing Giraffe нравится это.
  3. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    if (std::regex_match(s, matched, std::regex("SMS:\\s*(\\d*).*\\sОтправитель:\\s([\\w]*)\\s\\[т\\.\\d*]")))
    Крашит как доходит до сюда, что можно сделать?
     
  4. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.454
    Симпатии:
    724
    Репутация:
    206
    try{
    if (std::regex_match(s, matched, std::regex("SMS:\\s*(\\d*).*\\sОтправитель:\\s([\\w]*)\\s\\[т\\.\\d*]")))
    }
    catch (const std::exception& e){
    SF->Log(e.what());
    }
     
    QGate нравится это.
  5. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Такой вопрос, а как лучше сканить параметры при вводе команды, если я не знаю столько их? Мне нужно разделить игроков на команды с разными именами, к примеру ввожу /squad 100(радиус) 4(кол-во команд) name name name name, name - имя команды.
     
    #1805 QGate, 13 авг 2016
    Последнее редактирование: 13 авг 2016
  6. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.454
    Симпатии:
    724
    Репутация:
    206
    Через 2 регулярки можно попробовать. Сначала сканиуре на радиус и количество. Что после количество записываешь в новую переменную, а потом уже это переменную сканируешь на количество команд.
     
  7. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Как можно получить всех игроков в радиусе?
     
  8. Dark_Knight

    Dark_Knight Мое лицо, когда человек верующий.
    Друг

    Регистрация:
    18.03.2013
    Сообщения:
    2.454
    Симпатии:
    724
    Репутация:
    206
    Перебором через пул игроков в стриме, а потом уже и на радиус проверять.
     
  9. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Никак не могу найти этот пул.
     
  10. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    
    double GetDistantion(double x1, double y1, double z1, double x2, double y2, double z2)
    {
        return sqrt((pow(x1 - x2), 2) + pow(y1 - y2, 2) + pow(z1 - z2, 2));
    }
    
    
    for (int i = 0; i < 1001; i++)
    {
        if (SF->getSAMP()->getPlayers()->IsPlayerDefined(i, false) && GetDistantion(PEDSELF->GetPosition()->fX,
                PEDSELF->GetPosition()->fY,
                PEDSELF->GetPosition()->fZ,
                SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[0],
                SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[1],
                SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData->fOnFootPos[2]) <= 94.5)
        {
            // Если игрок находится в радиусе 94.5
        }
    }
    
    Вот тебе пример кода
     
    #1810 Woofing Giraffe, 15 авг 2016
    Последнее редактирование: 15 авг 2016
  11. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Ну у меня примерно также.
    int plid = SF->getSAMP()->getPlayers()->sLocalPlayerID;
        float px = SF->getSAMP()->getPlayers()->pRemotePlayer[plid]->pPlayerData->fOnFootPos[0];
        float py = SF->getSAMP()->getPlayers()->pRemotePlayer[plid]->pPlayerData->fOnFootPos[1];
        float pz = SF->getSAMP()->getPlayers()->pRemotePlayer[plid]->pPlayerData->fOnFootPos[2];
        radius = radius*radius;
        for (int i = 0; i < 1000; i++)
        {
            if (i == plid) continue;
            stRemotePlayerData *pPlayerData = SF->getSAMP()->getPlayers()->pRemotePlayer[i]->pPlayerData;
            float rx = pPlayerData->fOnFootPos[0];
            float ry = pPlayerData->fOnFootPos[1];
            float rz = pPlayerData->fOnFootPos[2];
            float dist = pow((rx - px), 2) + pow((ry - py), 2) + pow((rz - pz), 2);
            if (radius >= dist)
            {
                ids.push_back(i);
            }
        }
    Про PEDSELF не знал)
     
  12. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.668
    Симпатии:
    1.660
    Репутация:
    438
    Проверь, что она возвращает. Возможно там уже есть на конце \
     
  13. Tray228

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

    Регистрация:
    09.03.2015
    Сообщения:
    223
    Симпатии:
    29
    Репутация:
    11
    0, уже все исправил

    аналог можно? 009A: 2@ = create_actor_pedtype 4 model #MALE01 at 0.0 0.0 0.0
     
    #1813 Tray228, 16 авг 2016
    Последнее редактирование модератором: 17 авг 2016
    Gabriel__ нравится это.
  14. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Как повернуть персонажа?
     
  15. san0

    san0 (っ◔◡◔)っ ♥ #San0 ♥
    Проверенный

    Регистрация:
    15.12.2013
    Сообщения:
    310
    Симпатии:
    134
    Репутация:
    56
    PEDSELF->SetCurrentRotation
    в радианах
     
    Последние данные очков репутации:
    QGate: 1 Очко 18 авг 2016
    QGate нравится это.
  16. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    Вай спасибо большое
     
  17. AxewCool

    AxewCool Новичок

    Регистрация:
    19.08.2016
    Сообщения:
    4
    Симпатии:
    0
    Репутация:
    0
    А это единственный гайд по написанию SF плагинов?
     
  18. Nintendo

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

    Регистрация:
    19.08.2016
    Сообщения:
    9
    Симпатии:
    0
    Репутация:
    0
    мб знает кто адрес анти-стана и килл листа.
     
  19. Gabriel__

    Проверенный

    Регистрация:
    23.06.2015
    Сообщения:
    425
    Симпатии:
    153
    Репутация:
    48
    Вот антистан
    
    uint8_t* flags = &ainfo->pedFlags[12]; // ainfo - actor_info
    *flags |= 0x4; // включить
    *flags &= ~0x4; // выключить
    
     
  20. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    А возможно ли скрыть серверный textdraw?
     
  21. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    Хукаешь показ текстдрава и возвращаешь false
     
  22. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    а случаем нету примера хука?
     
  23. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    У меня есть пример, но он хукает только ID и текст.
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
    {
        WORD TID, TLen;
        char Text[128];
        params->bitStream->Read(TID);
        params->bitStream->IgnoreBits(504); // struct
        params->bitStream->Read(TLen);
        params->bitStream->Read(Text, TLen);
        params->bitStream->ResetReadPointer();
        Text[TLen] = '\0';
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%i || %s", TID, Text);
    }
     
    #1823 Woofing Giraffe, 20 авг 2016
    Последнее редактирование: 20 авг 2016
  24. QGate

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

    Регистрация:
    27.03.2016
    Сообщения:
    78
    Симпатии:
    0
    Репутация:
    0
    А еще вопросик, он срабатывает только тогда, когда появляется текстдрав или постоянно?
     
  25. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    Только когда появляется тексдрав. Есть еще RPC изменения текстдрава и скрытия, которые тоже можно хукнуть. Структура здесь: https://docs.google.com/spreadsheets/d/1iIxEk7yR8r7ZLGiSAL4ndtz_N1k0p3Wt7TE5bei6ztU/edit#gid=1
     
  26. Ghost29

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

    Регистрация:
    08.09.2013
    Сообщения:
    13
    Симпатии:
    0
    Репутация:
    0
    Можно же сделать так

    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
    {
        WORD TID, TLen;
        char Text[128];
        params->bitStream->Read(TID);
        params->bitStream->IgnoreBits(504); // struct
        params->bitStream->Read(TLen);
        params->bitStream->Read(Text, TLen);
        params->bitStream->ResetReadPointer();
        Text[TLen] = '\0';
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%i || %s", TID, Text);
        return false;
    }
     
  27. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    Тогда ты показ всех текстдравов запретишь
     
  28. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    350
    Симпатии:
    70
    Репутация:
    15
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
    {
       WORD TID, TLen;
       char Text[128];
        params->bitStream->Read(TID);
        params->bitStream->IgnoreBits(504); // struct
        params->bitStream->Read(TLen);
        params->bitStream->Read(Text, TLen);
        params->bitStream->ResetReadPointer();
        Text[TLen] = '\0';
        SF->getSAMP()->getChat()->AddChatMessage(-1, "%i || %s", TID, Text);
    
         if (TID == 1) { // Если знаешь ид текстдрава
         return false;
         }
    }
     
    #1828 iAmerican, 21 авг 2016
    Последнее редактирование: 21 авг 2016
  29. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    350
    Симпатии:
    70
    Репутация:
    15
    Это я неправильно что - то делаю? или в СФ проблема?
    SF->Log("%d %d", SF->getSAMP()->getInfo()->pServerInfo->ulIP, SF->getSAMP()->getInfo()->pServerInfo->usPort);
    получаю:
    552 1
     
  30. AWRage

    Проверенный

    Регистрация:
    10.07.2015
    Сообщения:
    645
    Симпатии:
    118
    Репутация:
    57
    IP это char *, вроде.
     
  31. NarutoUA

    NarutoUA C++ Hokage developer
    BH Team

    Регистрация:
    26.05.2013
    Сообщения:
    599
    Симпатии:
    684
    Репутация:
    311
    Насчёт порта не знаю, но айпи надо преобразовать в строку (ulIP - число типа 0xAABBCCDD (AA,BB,CC,DD числа из диапазона [0..255] ну типа айпи 255.255.255.255)
     
  32. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.668
    Симпатии:
    1.660
    Репутация:
    438
    Хочешь сказать, что 552 это IP 0.0.2.40 ?
     
  33. hnnssy

    hnnssy Creator of mgmoldova's mother
    Друг

    Регистрация:
    23.03.2013
    Сообщения:
    1.817
    Симпатии:
    1.110
    Репутация:
    187
    0x00000228
    da
     
  34. iAmerican

    Проверенный

    Регистрация:
    17.02.2014
    Сообщения:
    350
    Симпатии:
    70
    Репутация:
    15
    Нет
    Сложна че то. Добыл сам из памяти.
     
  35. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.668
    Симпатии:
    1.660
    Репутация:
    438
    В сф ващет есть указатель на строковый ip
     
    AWRage нравится это.
  36. Nintendo

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

    Регистрация:
    19.08.2016
    Сообщения:
    9
    Симпатии:
    0
    Репутация:
    0
    как убрать звук крови
     
  37. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    Как сделать горизонтальную табуляцию? Например у меня в диалоге есть 2 строки
    Какой-то текст |
    Еще один текст |
    Как мне сделать чтобы обе | были наравне?
     
  38. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.2013
    Сообщения:
    2.668
    Симпатии:
    1.660
    Репутация:
    438
    выравнивай по пикселям при рендере
     
  39. Woofing Giraffe

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

    Регистрация:
    14.06.2015
    Сообщения:
    379
    Симпатии:
    45
    Репутация:
    14
    У меня это в тексте диалога... Пытался пробелами, но получается криво, через \t тоже хрень

    --- Сообщение обновлено ---
    Не у кого идей нету?
     
  40. MISTER_GONWIK

    Регистрация:
    09.03.2013
    Сообщения:
    1.005
    Симпатии:
    1.062
    Репутация:
    643
    только через \t