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

Dark_Knight

Me, me and me.
Друг
4,062
2,078
Ребят сделал функцию которая делает задержку. И из-за нее игра жутко виснет.
Код:
void wait(unsigned int ms)
{
    unsigned int time = GetTickCount();
    time += ms;
    while (GetTickCount() < time)
    {

    }
}
Код:
static DWORD timer = 0;
void mainloop(){
if{!init}{
}
if(GetTickCount - timer > 5000){
SF->log("Таймер работает раз в 5 секунд");
timer = GetTickCount();
}

}
 

Gabriel__

Известный
Проверенный
411
182
А как сделать чтобы везде можно было использовать а не в mainloop.
 

Dark_Knight

Me, me and me.
Друг
4,062
2,078
А как сделать чтобы везде можно было использовать а не в mainloop.
Я тебе дал пример. Как в коллбеках юзать таймер. Дальше уже разбирайся сам. В СФ плагинах нельзя юзать таймеры через вайл в основном потоке.
 

FordeD

Участник
98
11
Я вроде как получил регулярку но, мне нужно получить 2 значения, это можно получить из одной строки?
if (std::regex_match(param, res, std::regex("/([A - Z] [1 - 24])/ig")))
соответственно A-Z одна переменная, 1-24 вторая. Или все же делать через 2 регулярки?


да и для сравнения через strcpy нужны чар значения, как их сравнивать теперь?
 
Последнее редактирование:

Dark_Knight

Me, me and me.
Друг
4,062
2,078
Я вроде как получил регулярку но, мне нужно получить 2 значения, это можно получить из одной строки?
if (std::regex_match(param, res, std::regex("/([A - Z] [1 - 24])/ig")))
соответственно A-Z одна переменная, 1-24 вторая. Или все же делать через 2 регулярки?
да и для сравнения через strcpy нужны чар значения, как их сравнивать теперь?
Зачем тебе чар, когда у тебя есть std::string? Регулярку ты не правильно записал. В моей все тоже самое. Индификатор /i нужен для регистронезависимости, /g для мультилайна(несколько строк) тебе оно не надо. std::smacth - это вектор полученных результатов.
if(std::regex_match(param, res, std::regex(R"(^\w \d$)")){
std::string bukva = res[1].str();
byte chiclo = std::stoi(res[1].str()); // ot 0 do 255;
if(bukva == "a" || bukva == "A"){
SF->Log("true bukva");
}
if(chiclo == 5 || chiclo == 25){
SF->Log("true chiclo");
}
}
else{
SF->Log("Формат [Буква] [Число]");
}
Учись работать с std::string. Они функциональнее.
 

FordeD

Участник
98
11
Зачем тебе чар, когда у тебя есть std::string? Регулярку ты не правильно записал. В моей все тоже самое. Индификатор /i нужен для регистронезависимости, /g для мультилайна(несколько строк) тебе оно не надо. std::smacth - это вектор полученных результатов.
if(std::regex_match(param, res, std::regex(R"(^\w \d$)")){
std::string bukva = res[1].str();
byte chiclo = std::stoi(res[1].str()); // ot 0 do 255;
if(bukva == "a" || bukva == "A"){
SF->Log("true bukva");
}
if(chiclo == 5 || chiclo == 25){
SF->Log("true chiclo");
}
}
else{
SF->Log("Формат [Буква] [Число]");
}
Учись работать с std::string. Они функциональнее.
Спасибо, сейчас буду пробовать
 

AWRage

Активный
642
141
Небольшая проблема с рендером текстуры.
Вообщем, есть текстура 128x128 px и её нужно рендерить на экране так, чтобы она на всех разрешениях экрана выглядела нормально (использовал игровые координаты с конвертацией в экранные). У меня разрешение 1680x1050 (рендерится размером 32x32 пикселей) и текстура выглядит хорошо, но если сменить разрешение на меньшее, то у текстуры появляются дефекты по краям в виде белой обводки, которая мне не нужна. Если эту текстуру заблюрить в фотошопе, то на всех разрешениях она рендерится без этих дефектов, но и качество текстуры желает лучшего. Вообщем, что мне делать то? Пробовал сохранять текстуру в 512x512 пикселей и в 32x32 пикселя. В первом случае дефекты присутствуют и качество картинки хорошее, во втором дефекты отсутствуют, но качество плохое. На моем то разрешении без дефектов все, но вот скриптом будут пользоваться и пользователи с другим разрешением.
P.S. Все изображения ниже были увеличены для наглядной демонстрации дефектов!

AbWuWuM.png
lTyGy94.png
W0kepPT.png
lD9UKii.png
 

Tray228

Новичок
218
27
Как можно ускорить перезарядку у шотгана, то есть его щелчок после каждого выстрела.
 

SR_team

like pancake
BH Team
4,720
6,369
Код:
while true
wait 0
    if and
    02E0:   actor $PLAYER_ACTOR firing_weapon
    02D8:   actor $PLAYER_ACTOR current_weapon == 25 // Проверка что держит в руках shotgun
    then
    wait 50 // Ждем пока выстрелит
    01B2: give_actor $PLAYER_ACTOR weapon 25 ammo 0
    end
end
P.S Сам не тестил.
Это тема по C++
как получить векторы камеры?
CVector GetCameraPosition()
{
return *(CVector *)(0x00B6F338);
};
 

SR_team

like pancake
BH Team
4,720
6,369
Небольшая проблема с рендером текстуры.
Вообщем, есть текстура 128x128 px и её нужно рендерить на экране так, чтобы она на всех разрешениях экрана выглядела нормально (использовал игровые координаты с конвертацией в экранные). У меня разрешение 1680x1050 (рендерится размером 32x32 пикселей) и текстура выглядит хорошо, но если сменить разрешение на меньшее, то у текстуры появляются дефекты по краям в виде белой обводки, которая мне не нужна. Если эту текстуру заблюрить в фотошопе, то на всех разрешениях она рендерится без этих дефектов, но и качество текстуры желает лучшего. Вообщем, что мне делать то? Пробовал сохранять текстуру в 512x512 пикселей и в 32x32 пикселя. В первом случае дефекты присутствуют и качество картинки хорошее, во втором дефекты отсутствуют, но качество плохое. На моем то разрешении без дефектов все, но вот скриптом будут пользоваться и пользователи с другим разрешением.
P.S. Все изображения ниже были увеличены для наглядной демонстрации дефектов!

AbWuWuM.png
lTyGy94.png
W0kepPT.png
lD9UKii.png
у директИкса есть всякие флаги для обработки текстур. Поигугли.
 

Tray228

Новичок
218
27
02E0: actor $PLAYER_ACTOR firing_weapon аналог в SF API есть?
 
Последнее редактирование:

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();
bool act = false;

DWORD timer;
DWORD tm = GetTickCount();


bool CALLBACK outcomingData(stRakNetHookParams *params)
{

if (params->packetId == PacketEnumeration::ID_BULLET_SYNC && act == true)
{
    if (SF->getSAMP()->getPlayers()->pLocalPlayer->byteCurrentWeapon == 25)
    {
        if (tm < timer)
        {
            timer = GetTickCount() + 50;

            PEDSELF->GiveWeapon((eWeaponType)25, 0, WEAPONSKILL_PRO);
        }
    }
}
return true;
}




void CALLBACK heh(std::string param)
{

    act ^= 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 ), "macro" );
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, outcomingData);
        SF->getSAMP()->registerChatCommand("macro", heh);
        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;
}
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Бли, хватит флудить здесь этим вопросом.
В крайнем случае можешь применить класс SFCleo.