Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Arizona Roulette

AndreY.eXe

Эксперт
Пользователь
Регистрация
16 Сен 2017
Сообщения
1,327
Лучшие ответы
0
Репутация
241
Привет!

Ловите довольно годную рулетку (copy Arizona RP).
Сразу хочу сказать, что TD: по цвету и пр., делалось не как на Arizona RP, ибо, как по мне, там не самый лучший ТД :)...
Вообщем, приступим:

P/S: Командный процессор Pawn.CMD (кому надо изменят на свой).


В начало мода:
PHP:
new
	Text:roulette_TD[13],
	PlayerText:roulette_PTD[MAX_PLAYERS][21];

	Roll_Cell[MAX_PLAYERS][10], // Ячейки
	bool: Roll_Status[MAX_PLAYERS][2], // 0 - Рулетка открыта на экране, 1 - Рулетка запущена
	bool: Roll_Roulette[MAX_PLAYERS][3], // 0 - bronze, 1 - silver, 2 - gold
	Roll_Count[MAX_PLAYERS], // Выбирает приз (Зеленым цветом)
	Roll_Timer[MAX_PLAYERS],
	Roll_Time[MAX_PLAYERS], // Отсчет
	Roll_Random[MAX_PLAYERS];
#define CHANGE_CEIL_DIALOG	999


В OnPlayerConnect (OnPlayerDisconnect)
PHP:
    KillTimer(Roll_Timer[playerid]);
    for(new i; i < 10; i ++)
    {
    	if(i < 3)
    	{
    		if(i < 2) Roll_Status[playerid][i] = false;
    		if(i < 3)  Roll_Roulette[playerid][i] = false;
		}
    	Roll_Cell[playerid][i] = 0;
    }
В конец мода:
PHP:
    cmd:roulette(playerid)
	{
	    if(Roll_Status[playerid][1])return true;

	    if(!Roll_Status[playerid][0])
	    {
	        for(new i; i < 12; i ++)
	        {
	        	if(i < 10) PlayerTextDrawShow(playerid, roulette_PTD[playerid][i]);
	        	TextDrawShowForPlayer(playerid, roulette_TD[i]);
	        }

	        Roll_Status[playerid][0] = true;
	        SelectTextDraw(playerid, 0xFF00FFAA);

	        if(Roll_Cell[playerid][0] > 0)
	        {
	            for(new i; i < 10; i ++)
	            {
	                PlayerTextDrawSetPreviewModel(playerid, roulette_PTD[playerid][10+i], Roll_Cell[playerid][i]);
	                PlayerTextDrawShow(playerid, roulette_PTD[playerid][10+i]);
	            }
	        }
	    }
	    else
	    {
	        for(new i; i < 21; i ++)
	        {
	        	if(i < 13) TextDrawHideForPlayer(playerid, roulette_TD[i]);
	        	PlayerTextDrawHide(playerid, roulette_PTD[playerid][i]);
	        }

	        Roll_Status[playerid][0] = false;
	        CancelSelectTextDraw(playerid);
	    }
	    return true;
	}
В OnPlayerClickTextDraw:
PHP:
	if(_:clickedid == INVALID_TEXT_DRAW)
    {
        if(Roll_Status[playerid][0])
        {
            if(Roll_Status[playerid][1])return SelectTextDraw(playerid, 0xFF00FFAA);
            callcmd::roulette(playerid);
        }
    }

    if(clickedid == roulette_TD[2])
    {
        if(Roll_Status[playerid][1])return true;

        if(!Roll_Roulette[playerid][0])
        {
            for(new i; i < 10; i ++)
            {
                switch(random(3))
                {
                    case 0: Roll_Cell[playerid][i] = 1550;
                    case 1: Roll_Cell[playerid][i] = 1277;
                    case 2: Roll_Cell[playerid][i] = 1 + random(311);
                }
            }
            Roll_Roulette[playerid][0] = true;
        }

        for(new i; i < 10; i ++)
        {
            PlayerTextDrawSetPreviewModel(playerid, roulette_PTD[playerid][10+i], Roll_Cell[playerid][i]);
            PlayerTextDrawShow(playerid, roulette_PTD[playerid][10+i]);
        }
    }

    /*if(clickedid == roulette_TD[3])
    {
        // silver roll
    }
    if(clickedid == roulette_TD[4])
    {
        // gold roll
    }*/

    if(clickedid == roulette_TD[5])
    {
        if(Roll_Status[playerid][1])return SendClientMessage(playerid, -1, "Вы уже запустили рулетку!");
        if(!Roll_Cell[playerid][0])return SendClientMessage(playerid, -1, "Для начала выберите тип рулетки!");

        Roll_Random[playerid] = 10 + random(15);

        Roll_Count[playerid] =
        Roll_Time[playerid] = 0;

        Roll_Timer[playerid] = SetTimerEx("Update_Roulette", 500, true, "ii", playerid, 1);
        Roll_Status[playerid][1] = true;
    }
    if(clickedid == roulette_TD[6])
    {
        if(!Roll_Cell[playerid][0] || Roll_Status[playerid][1])return true;
        ShowPlayerDialog(playerid, CHANGE_CEIL_DIALOG, 0, "", "Вы действительно хотите изменить призы за {00ff00}0 {ffffff}рублей?", "Да", "Отмена");
    }
В конец мода:
PHP:
Update_Roulette(playerid, type);
Update_Roulette(playerid, type)
{
    if(Roll_Count[playerid] > 9) Roll_Count[playerid] = 0;

    PlayerTextDrawColor(playerid, roulette_PTD[playerid][Roll_Count[playerid]], 1974075647);
    PlayerTextDrawShow(playerid, roulette_PTD[playerid][Roll_Count[playerid]]);

    SetTimerEx("Change_Background", 500*type, false, "ii", playerid, Roll_Count[playerid]);
    Roll_Count[playerid]++;
    
    if(++ Roll_Time[playerid] > Roll_Random[playerid])
    {
        KillTimer(Roll_Timer[playerid]);
        if(type)
        {
            Roll_Random[playerid] = 5 + random(15);
            Roll_Timer[playerid] = SetTimerEx("Update_Roulette", 1000, true, "ii", playerid, 2);
            return true;
        }

        new
        	prize,
        	string[26 + 5];

        switch(Roll_Cell[playerid][Roll_Count[playerid]-1])
        {
            case 1550:
            {
                prize = 1+random(10000);
                GivePlayerMoney(playerid, prize); // GivePlayerMoney - измените на свою функцию выдачи денег
                format(string, sizeof(string), "Вы успешно получили %d$", prize);
            }
            case 1277:
            {
                prize = 1+random(8);
                Exp += prize; // Exp - измените на свою переменную EXP для игрока
                format(string, sizeof(string), "Вы успешно получили %d exp", prize);
            }
            default:
            {
                SetPlayerSkin(playerid, Roll_Cell[playerid][Roll_Count[playerid]-1]);
                string = "Вы успешно получили скин!";
            }
        }

        SendClientMessage(playerid, -1, string);
        Roll_Status[playerid][1] = false;

        TextDrawShowForPlayer(playerid, roulette_TD[12]);
        PlayerTextDrawSetPreviewModel(playerid, roulette_PTD[playerid][20], Roll_Cell[playerid][Roll_Count[playerid]-1]);
        PlayerTextDrawShow(playerid, roulette_PTD[playerid][20]);

        SetTimerEx("Hide_Win_Roulette", 5000, false, "i", playerid);
    }
    return true;
}
Hide_Win_Roulette(playerid);
Hide_Win_Roulette(playerid)
{
    PlayerTextDrawHide(playerid, roulette_PTD[playerid][20]);
    TextDrawHideForPlayer(playerid, roulette_TD[12]);
}
Change_Background(playerid, roll);
Change_Background(playerid, roll)
{
    PlayerTextDrawColor(playerid, roulette_PTD[playerid][roll], -1448476417);
    PlayerTextDrawShow(playerid, roulette_PTD[playerid][roll]);
}
В OnDialogResponse:
PHP:
       case CHANGE_CEIL_DIALOG:
        {
            if(!response)return true;

            /*if(/*переменная доната < 0)return SendClientMessage(playerid, -1, "У Вас не достаточно доната!"); Проверка на донат*/
            SendClientMessage(playerid, -1, "Вы успешно сменили призы!");

            if(Roll_Roulette[playerid][0])
            {
                for(new i; i < 10; i ++)
                {
                    switch(random(3))
                    {
                        case 0: Roll_Cell[playerid][i] = 1550;
                        case 1: Roll_Cell[playerid][i] = 1277;
                        case 2: Roll_Cell[playerid][i] = 1 + random(311);
                    }
                    PlayerTextDrawSetPreviewModel(playerid, roulette_PTD[playerid][10+i], Roll_Cell[playerid][i]);
                    PlayerTextDrawShow(playerid, roulette_PTD[playerid][10+i]);
                }
            }
            
            /*else if(Roll_Roulette[playerid][1])
            {
                // silver roll
            }
            else if(Roll_Roulette[playerid][2])
            {
                // gold roll
            }*/
        }
Вот и все!
Для тех кто не знает, объясню суть рулетки: Есть 3 типа рулетки (Bronze, Silver, Gold), я сделал только 1 (Bronze), Вы же можете добавить Silver и Gold, и изменить Bronze. Вы можете изменить призы нажав на 0, за 0 рублей (проверку на рубли поставите сами). После того, как Вы нажмете "Roll", то пойдет крутиться рулетка, и где остановиться рулетка - там и будет Ваш приз.




 
Последнее редактирование:
Сверху Снизу