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

NarutoUA

NarutoUA
BH Team
692
1,538
Разобрался как создать диалог типа list, вот код:


Код:
void SAMP_Dialog(int send, int dialogID, int typedialog, char *caption, char *text, char *button1, char *button2)
{
uint32_t func = g_Samp_base+SAMP_DIALOG_SHOW;
uint32_t data = g_Samp_base+SAMP_DIALOG_INFO_OFFSET;
 
 
__asm mov eax, dword ptr [data]
__asm mov ecx, dword ptr [eax] //mov to offset
__asm push send //0 - No send response, 1 - Send response
__asm push button2
__asm push button1
__asm push text
__asm push caption
__asm push typedialog
__asm push dialogID
__asm call func
return;
}

В PAWNO показ диалога реализован вот так:

Код:
 ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Что из этого вы хотите выпить?", "Sprunk ($1)\nПиво ($2)\nВино ($3)", "Купить", "Отмена");

Теперь проблема состоит в том, как выполнить определенную функцию, при выборе итема из списка, в PAWNO это реализовано так:


Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    // Для более простого управления диалоговыми окнами, можно использовать switch(dialogid), но в
    //этом уроке использовано лишь одно диалоговое окно.
    if(dialogid == 1 && response) // Если ID диалогового окна 1 (как мы указали в ShowPlayerDialog), и игрок нажал 'Купить'
    {
        // Теперь используем switch(listitem), чтобы выполнять действия для разных элементов
        //диалогового окна. ID первого элемента в диалоговом окне - 0.
        switch(listitem)
        {
            case 0:
            {
                if(GetPlayerMoney(playerid) < 1)
                return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
                GivePlayerMoney(playerid, -1);
                SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
            }
            case 1:
            {
                if(GetPlayerMoney(playerid) < 2)
                return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
                GivePlayerMoney(playerid, -2);
                SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
            }
            case 2:
            {
                if(GetPlayerMoney(playerid) < 3)
                return SendClientMessage(playerid, 0xFFFFFF, "У вас недостаточно денег.");
                GivePlayerMoney(playerid, -3);
                SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
            }
        }
    }
    return 1;
}
 

fondamentolok

Новичок
101
0
Как сделать Auto Reconnect ?
Как сделать Check point master?
Как сделать что бы машина ближайшего игрока кидалась в загрузку?
Как сделать что бы все машины тпшились ближайшему игроку на голову?
 

NarutoUA

NarutoUA
BH Team
692
1,538
Допустим, есть адрес 0х3810000, по эту адресу лежит текстовое значение, допустим test, как присвоить переменной a это значение по этому адресу?
 

fondamentolok

Новичок
101
0
void cheat_handle_supergun()
{
if(KEY_PRESSED(set.key_supergun))
{
cheat_state->_generic.supergun ^= 1;
}
if(cheat_state->_generic.supergun == 1)
{
pPedSelf->SetCurrentWeaponSlot( eWeaponSlot (set.slot_sg1) );
}
static DWORD time = 0;
if (GetTickCount() - 250 > time)
{
pPedSelf->SetCurrentWeaponSlot( eWeaponSlot (set.slot_sg2) );
{
time = GetTickCount();
}
}
return;
}

Когда беру в руки оружие оно меняется на кулак даже без выстрела
Как сделать что бы слот менялся именно при выстреле а не постоянно?
 

im0rg

Известный
Автор темы
Друг
587
215
void cheat_handle_supergun()
{
if(KEY_PRESSED(set.key_supergun))
{
cheat_state->_generic.supergun ^= 1;
}
if(cheat_state->_generic.supergun == 1)
{
pPedSelf->SetCurrentWeaponSlot( eWeaponSlot (set.slot_sg1) );
}
static DWORD time = 0;
if (GetTickCount() - 250 > time)
{
pPedSelf->SetCurrentWeaponSlot( eWeaponSlot (set.slot_sg2) );
{
time = GetTickCount();
}
}
return;
}

Когда беру в руки оружие оно меняется на кулак даже без выстрела
Как сделать что бы слот менялся именно при выстреле а не постоянно?
if(cheat_state->_generic.supergun == 1 && KEY_PRESSED(set.key_supergun))