Другое С/С++ Вопрос - Ответ

-raymond-

Известный
110
9
в конце последнего биза в списке выдает один раз такие иероглифы
VMuoHLa.png

C++:
void CALLBACK biz_check(std::string param)
{
    char str[45][30] =
    {
        "Alhambra",
        "PigPen",
        "Misty Club",
        "Casino Bellagio",
        "Grove Street Bar",
        "Sobrino de Botin",
        "Vinewood Burger",
        "Marina Burger",
        "Idlewood Pizza",
        "Downtown Cluc",
        "Marina Cluc",
        "Idelwood 24/7",
        "Flint 24/7",
        "Easter 24/7",
        "Mullholand 24/7",
        "Jizzy",
        "Redsands West 24/7",
        "Julius 24/7",
        "Lil\"Probe\"inn",
        "Idelwood Gas",
        "Mullholang Gas",
        "Whetstone 24/7",
        "East Cluc",
        "WillowField Cluc",
        "Flats Cluc",
        "Financial Pizza",
        "Come-A-Lot Gas",
        "FortCarson Gas",
        "BoneCountry Gas",
        "Julius Gas",
        "PricklePine Gas",
        "Flint Gas",
        "Easter Gas",
        "Doherty Gas",
        "Juniper 24/7",
        "Juniper Gas",
        "Emerald Isle 24/7",
        "Emerald Isle Gas",
        "Redsands-West Gas",
        "ElGuebrabos Gas",
        "TierraRobada Gas",
        "AngelPine Gas",
        "WhetStone Gas",
        "Dilimore Gas",
        "Montgomery Gas"
    };
    for (int i = 0; i <= 45; i++)
    {
        SF->getSAMP()->getChat()->AddChatMessage(COLOR_GREY, "%s", str[i]);
    }
}
 

Dark_Knight

Me, me and me.
Друг
4,062
2,078
Ты проверяешь 46 елементов. Юзай вектора, они удобнее. Инклуды только подключи.
C++:
vector<string> Strings =
    {
        "Alhambra",
        "PigPen",
        "Misty Club",
        "Casino Bellagio",
        "Grove Street Bar",
        "Sobrino de Botin",
        "Vinewood Burger",
        "Marina Burger",
        "Idlewood Pizza",
        "Downtown Cluc",
        "Marina Cluc",
        "Idelwood 24/7",
        "Flint 24/7",
        "Easter 24/7",
        "Mullholand 24/7",
        "Jizzy",
        "Redsands West 24/7",
        "Julius 24/7",
        "Lil\"Probe\"inn",
        "Idelwood Gas",
        "Mullholang Gas",
        "Whetstone 24/7",
        "East Cluc",
        "WillowField Cluc",
        "Flats Cluc",
        "Financial Pizza",
        "Come-A-Lot Gas",
        "FortCarson Gas",
        "BoneCountry Gas",
        "Julius Gas",
        "PricklePine Gas",
        "Flint Gas",
        "Easter Gas",
        "Doherty Gas",
        "Juniper 24/7",
        "Juniper Gas",
        "Emerald Isle 24/7",
        "Emerald Isle Gas",
        "Redsands-West Gas",
        "ElGuebrabos Gas",
        "TierraRobada Gas",
        "AngelPine Gas",
        "WhetStone Gas",
        "Dilimore Gas",
        "Montgomery Gas"
    };
    for(auto it : Strings){
        chat->AddChatMessage(-1, it.c_str());
    }
 

san0

Известный
Друг
411
267
Юзай вектора, они удобнее.
Ему же явно нужен неизменяемый C массив строк, он не использовал new, а значит все возможности аллокатора попросту не нужны. Более того, при каждом вызове функции будет вызываться конструктор на кучу элементов и забирать много рантайма
P.S а вообще это все должно быть в GXT игры
Код:
#if __cplusplus > 201402L
    #include <iterator>
#else
    #include <cstdio>
    namespace std {
        template <class Type, std::size_t Num>
        constexpr std::size_t size(const Type (&input_array)[Num]) noexcept {
            return Num;
        }
    }
#endif

void CALLBACK biz_check(std::string param) {
    static const char str[][50] {
        "Alhambra",
        "PigPen",
        "Misty Club",
        "Casino Bellagio",
        "Grove Street Bar",
        "Sobrino de Botin",
        "Vinewood Burger",
        "Marina Burger",
        "Idlewood Pizza",
        "Downtown Cluc",
        "Marina Cluc",
        "Idelwood 24/7",
        "Flint 24/7",
        "Easter 24/7",
        "Mullholand 24/7",
        "Jizzy",
        "Redsands West 24/7",
        "Julius 24/7",
        "Lil\"Probe\"inn",
        "Idelwood Gas",
        "Mullholang Gas",
        "Whetstone 24/7",
        "East Cluc",
        "WillowField Cluc",
        "Flats Cluc",
        "Financial Pizza",
        "Come-A-Lot Gas",
        "FortCarson Gas",
        "BoneCountry Gas",
        "Julius Gas",
        "PricklePine Gas",
        "Flint Gas",
        "Easter Gas",
        "Doherty Gas",
        "Juniper 24/7",
        "Juniper Gas",
        "Emerald Isle 24/7",
        "Emerald Isle Gas",
        "Redsands-West Gas",
        "ElGuebrabos Gas",
        "TierraRobada Gas",
        "AngelPine Gas",
        "WhetStone Gas",
        "Dilimore Gas",
        "Montgomery Gas"
    };
    for (auto i = 0; i < std::size(str); i ++)
        SF->getSAMP()->getChat()->AddChatMessage(COLOR_GREY, "-> %s", str[i]);
}
 

C&J

Известный
41
22
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Код:
#define SAMP_HOOKENTER_HANDLE_RPC                    0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2                    0x373C9

#define SAMP_HOOKEXIT_HANDLE_RPC                    0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2                    0x37451

void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
    if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
    {
        BitStream    bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
        switch (id)
        {
            case  RPC_DeathMessage:
            {
                pSAMP->addMessageToChat(-1, "plugin ONE");
                int16_t        plaerid, killerid;
                int8_t            resaon;
           
                bsData.ResetReadPointer();
                bsData.Read(killerid);
                bsData.Read(plaerid);
                bsData.Read(resaon);
                break;
            }

        }
    }
    callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, eax;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;

    __asm popad;
    __asm add esp, 4
    __asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, ecx;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;

    __asm popad;
    __asm jmp dwTmp;
}



void InstallAllHooks()
{
    static int    iSAMPHooksInstalled;
    if (!iSAMPHooksInstalled)
    {
        if (pSAMP->getInfo() == NULL)
            return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
        HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
        HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
        iSAMPHooksInstalled = 1;
    }


}
 

NarutoUA

NarutoUA
BH Team
692
1,538
Повторюсь с вопросом,так как уже заебался...
Происходит конфликт двух плагинов,а то есть перезапись хука HandleRPCPacketFunc,как исправить данную хурму?
Код:
#define SAMP_HOOKENTER_HANDLE_RPC                    0x3743D
#define SAMP_HOOKENTER_HANDLE_RPC2                    0x373C9

#define SAMP_HOOKEXIT_HANDLE_RPC                    0x37443
#define SAMP_HOOKEXIT_HANDLE_RPC2                    0x37451

void HandleRPCPacketFunc(unsigned char id, RPCParameters *rpcParams, void(*callback) (RPCParameters *))
{
    if (rpcParams != nullptr && rpcParams->numberOfBitsOfData >= 8)
    {
        BitStream    bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
        switch (id)
        {
            case  RPC_DeathMessage:
            {
                pSAMP->addMessageToChat(-1, "plugin ONE");
                int16_t        plaerid, killerid;
                int8_t            resaon;
          
                bsData.ResetReadPointer();
                bsData.Read(killerid);
                bsData.Read(plaerid);
                bsData.Read(resaon);
                break;
            }

        }
    }
    callback(rpcParams);
}
void _declspec (naked) hook_handle_rpc_packet(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, eax;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC;

    __asm popad;
    __asm add esp, 4
    __asm jmp dwTmp;
}
void _declspec (naked) hook_handle_rpc_packet2(void)
{
    static RPCParameters *pRPCParams = nullptr;
    static RPCNode *pRPCNode = nullptr;
    static DWORD dwTmp = 0;

    __asm pushad;
    __asm mov pRPCParams, ecx;
    __asm mov pRPCNode, edi;

    HandleRPCPacketFunc(pRPCNode->uniqueIdentifier, pRPCParams, pRPCNode->staticFunctionPointer);
    dwTmp = pSAMP->getSAMPAddr() + SAMP_HOOKEXIT_HANDLE_RPC2;

    __asm popad;
    __asm jmp dwTmp;
}



void InstallAllHooks()
{
    static int    iSAMPHooksInstalled;
    if (!iSAMPHooksInstalled)
    {
        if (pSAMP->getInfo() == NULL)
            return;
/*
https://github.com/sr-tream/UniLib/blob/master/UniLib/CHooks.hpp
*/
        HookRPC1 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC, hook_handle_rpc_packet, 6); //
        HookRPC2 = new CHookJmp(pSAMP->getSAMPAddr() + SAMP_HOOKENTER_HANDLE_RPC2, hook_handle_rpc_packet2, 8);
        iSAMPHooksInstalled = 1;
    }


}
Парсишь адрес функции которую вызывает хук и вызываешь в своём хуке (работает только если твой плагин грузится после первого), или ставишь хук в другом месте
 

LaRossa

Потрачен
429
117
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Подскажите как это будет в SF API
CLEO:
0ADB: 0@v = car_model #LANDSTAL name
 

Vandal™

Известный
55
4
Есть такой варик отправить машину на гибернизацию
Код:
system("shutdown /h");
Так же там можно указать через какое время это произвести.
Вопрос, как можно указать время, которое он должен будет провести в данном состоянии (сон/e.t.c)? Или каким еще вариантом можно реанимировать комп из такого состояния без действий человека (нажать на клаву, подергать мышкой, e.t.c)?

BIOS не катит.
Гибернизация/сон и подобные штуки подойдут, с учетом выключения питания или занижением его использования до минимума.
 

jmksm

Известный
3
0
Привет, Наруто. Хотел поинтересоваться чем и как ты ломанул РакБота) Нового кряка давненько не было, а посему хотелось бы попробвоать своими силами, тем более как-то даже интересно) Очень надеюсь, что подскажешь.
 

romanblinov2013

RB_PRO
Проверенный
212
196
Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
Что хочу сделать: Заход на сервер по отдельному .exe
Заранее спасибо за ответ *сердечко*
 

Dark_Knight

Me, me and me.
Друг
4,062
2,078
Товарищи, кодеры. Появился один интересный вопрос. Есть ли возможность зайти в игру, не открывая клиент.
Что хочу сделать: Заход на сервер по отдельному .exe
Заранее спасибо за ответ *сердечко*
Раксамп.
 
  • Нравится
Реакции: romanblinov2013

kawa operand

перерывпятьминут
602
333
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
  • Нравится
Реакции: romanblinov2013