Показано с 1 по 1 из 1

Тема: Основа для работы развозчика пиццы

  1. #1
    Проверенный Аватар для e.kosovskij
    Регистрация
    09.07.2010
    Адрес
    Украина, Харьков
    Сообщений
    3,180
    Репутация: 308

    Звание: как роза среди колючек

    Основа для работы развозчика пиццы

    Делал тестовое задание, вобщем оно так и не пригодилось, поступило предложение лучше, может кому-то все таки пригодится.

    Устроится/уволится - /injob
    Для заказа нужно позвонить в пиццерию - /pizzacall
    Работник может посмотреть заказы в ожидании - /pizzaorders, чтобы принять заказ, нужно просто его выбрать в диалоге.
    Работнику показывается маркер на карте, где находится клиент, по приезду работник должен ввести команду /pizzasell, нужно находится рядом с клиентом, клиент должен принять продажу, либо отклонить (кнопки: Y и N)

    На выполнение заказа дается 30 секунд (корректировать), если работник не вкладывается в эти 30 секунд, то пицца отдается клиенту бесплатно и работник платит неустойку за опоздание.
    Если клиент отклоняет продажу, то неустойку уже платит сам клиент.


    Подойдет для основы сей работы, на доработку.


    PHP код:
    #include <a_samp>
    #include <izcmd>

    #define SCM(%0,%1) SendClientMessage(%0,-1,%1)

    #define PIZZA_MAX_ORDER 5

    enum EnumPizza
    {
        
    op_clientID,
        
    op_status
    };

    new
        
    timer,
        
    pname[MAX_PLAYERS][24],

        
    pizza_orders,
        
    pizza_job[MAX_PLAYERS],
        
    pizza_data[MAX_PLAYERS][3], // status, workerID, slot
        
    pizza_timer[MAX_PLAYERS],
        
        
    opinfo[PIZZA_MAX_ORDER][EnumPizza]
    ;



    public 
    OnFilterScriptInit()
    {
        for(new 
    0PIZZA_MAX_ORDERi++)
        {
            
    opinfo[i][op_clientID] = INVALID_PLAYER_ID;
            
    opinfo[i][op_status] = 0;
        }
        
    pizza_orders 0;
        
    timer SetTimer("_timer"10001);
        return 
    1;
    }

    public 
    OnFilterScriptExit()
    {
        
    KillTimer(timer);
        return 
    1;
    }

    public 
    OnPlayerConnect(playerid)
    {
        
    GetPlayerName(playeridpname[playerid], 24);
        
        
    pizza_job[playerid] = 0;
        
    pizza_data[playerid][0] = 0;
        
    pizza_data[playerid][1] = INVALID_PLAYER_ID;
        
    pizza_data[playerid][2] = 0;
        
    pizza_timer[playerid] = 0;
        return 
    1;
    }

    public 
    OnPlayerDisconnect(playeridreason)
    {
        if(
    pizza_data[playerid][0] > 0)
        {
            new 
    str[100];
            
    format(strsizeof str"Ваш клиент %s покинул игру. Заказ №%d отменен."pname[playerid], pizza_data[playerid][2]);
            
    SCM(pizza_data[playerid][1], str);
            
            
    Pizza_ResetData(playerid);
        }
        return 
    1;
    }

    public 
    OnPlayerDeath(playeridkilleridreason)
    {
        return 
    1;
    }

    public 
    OnPlayerKeyStateChange(playeridnewkeysoldkeys)
    {
        if(
    GetPVarInt(playerid"pizza_client_YN") == 1)
        {
            
    DeletePVar(playerid"pizza_client_YN");
            if(
    newkeys 65536)
            {
                if(
    pizza_timer[pizza_data[playerid][1]] == 777)
                {
                    new 
    str[130];
                    
    SCM(playerid"Вы согласились. С вас не взяли деньги, потому что наш курьер опоздал. Приятного аппетита!");
                    
    SCM(playeridstr);
                    
    format(strsizeof str"Клиент %s согласился. Вы не успели доставить пиццу во время, вы оштрафованы на $10."pname[playerid]);
                    
    SCM(pizza_data[playerid][1], str);
                    
    GivePlayerMoney(pizza_data[playerid][1], -10);
                }
                else
                {
                    new 
    str[130];
                    
    SCM(playerid"Вы согласились. С вас взяли: $10. Приятного аппетита!");
                    
    GivePlayerMoney(playerid, -10);
                    
    format(strsizeof str"Клиент %s согласился. Вы получили $10."pname[playerid]);
                    
    SCM(pizza_data[playerid][1], str);
                    
    GivePlayerMoney(pizza_data[playerid][1], 10);
                }
                
    pizza_orders -= 1;
            }
            else if(
    newkeys 131072)
            {
                if(
    pizza_timer[pizza_data[playerid][1]] == 777)
                {
                    new 
    str[130];
                    
    format(strsizeof str"Клиент %s отказался и заплатил $10 за неустойку."pname[playerid]);
                    
    SCM(pizza_data[playerid][1], str);
                    
    SCM(pizza_data[playerid][1], "Вы не успели доставить пиццу во время, вы оштрафованы на $10.");
                }
                else
                {
                    new 
    str[130];
                    
    SCM(playerid"Вы отказались. С вас взяли $0 за неустойку. Приятного аппетита!");
                    
    GivePlayerMoney(playerid, -10);
                    
    format(strsizeof str"Клиент %s отказался. Вы получили за неустойку $10."pname[playerid]);
                    
    SCM(pizza_data[playerid][1], str);
                    
    GivePlayerMoney(pizza_data[playerid][1], 10);
                }
                
    pizza_orders -= 1;
            }
            return 
    Pizza_ResetData(playerid);
        }
        return 
    1;
    }

    public 
    OnPlayerClickTextDraw(playeridText:clickedid)
    {
        return 
    1;
    }

    forward _timer();
    public 
    _timer()
    {
        for(new 
    GetPlayerPoolSize(); >= 0i--)
        {
            if(
    pizza_timer[i] > && pizza_timer[i] < 32)
            {
                
    pizza_timer[i]--;
                new 
    str[20];
                
    format(strsizeof str"TIME LEFT: %d"pizza_timer[i]-1);
                
    GameTextForPlayer(istr10001);
            }
            else if(
    pizza_timer[i] == 1)
            {
                
    pizza_timer[i] = 777;
                
    SCM(i"Время вышло! Прийдется заплатить неустойку $10.");
            }
        }
        return 
    1;
    }

    stock Pizza_FindFreeOrder()
    {
        new 
    slot = -1;
        for(new 
    0PIZZA_MAX_ORDERi++)
        {
            if(
    opinfo[i][op_status] == 0)
            {
                
    slot i;
                break;
            }
        }
        return 
    slot;
    }

    Pizza_ResetData(playerid)
    {
        if(
    pizza_data[playerid][2] > 0)
        {
            
    opinfo[pizza_data[playerid][2]-1][op_clientID] = INVALID_PLAYER_ID;
            
    opinfo[pizza_data[playerid][2]-1][op_status] = 0;
        }
        if(
    pizza_data[playerid][1] != INVALID_PLAYER_ID)
        {
            
    pizza_data[pizza_data[playerid][1]][0] = 0;
            
    pizza_data[pizza_data[playerid][1]][1] = INVALID_PLAYER_ID;
            
    pizza_data[pizza_data[playerid][1]][2] = 0;
            
    pizza_timer[pizza_data[playerid][1]] = 0;
        }
        
    pizza_data[playerid][0] = 0;
        
    pizza_data[playerid][1] = INVALID_PLAYER_ID;
        
    pizza_data[playerid][2] = 0;
        
    pizza_timer[playerid] = 0;
        return 
    1;
    }

    COMMAND:pizzacall(playeridparams[])
    {
        if(
    pizza_job[playerid] == 1) return SCM(playerid"Работникам пиццерии нельзя заказывать пиццу.");
        if(
    pizza_data[playerid][0] == 1) return SCM(playerid"Вы уже заказали пиццу, ожидайте.");
        if(
    pizza_data[playerid][0] == 2) return SCM(playerid"Вы уже заказали пиццу, работник уже в пути.");
        new 
    slot Pizza_FindFreeOrder();
        if(
    slot == -1) return SCM(playerid"Извините, нет свободных работников.");

        
    pizza_data[playerid][0] = 1;
        
    pizza_data[playerid][1] = INVALID_PLAYER_ID;
        
    pizza_data[playerid][2] = slot+1;
        
    opinfo[slot][op_clientID] = playerid;
        
    opinfo[slot][op_status] = 1;
        
    pizza_orders += 1;

        new 
    str[70];
        
    format(strsizeof str"Ваш заказ принят. Номер заказа: №%d."slot+1);
        
    SCM(playeridstr);
        return 
    1;
    }

    COMMAND:pizzaorders(playeridparams[])
    {
        if(
    pizza_job[playerid] != 1) return SCM(playerid"Вы не работник пиццерии.");
        if(
    pizza_data[playerid][0] == 1) return SCM(playerid"Вы уже взяли пиццу, отвезите её клиенту.");
        if(
    pizza_orders == 0) return SCM(playerid"На данный момент нет заказов.");

        new 
    dialogInfo[33*PIZZA_MAX_ORDER];
        for(new 
    0pizza_ordersi++)
        {
            if(
    opinfo[i][op_status] == 1)
            {
                
    format(dialogInfosizeof dialogInfo"%s%i. %s\n"dialogInfoi+1pname[opinfo[i][op_clientID]]);
            }
        }
        
    ShowPlayerDialog(playerid5678DIALOG_STYLE_LIST"Заказы пиццерии"dialogInfo"Взять""Закрыть");
        print(
    "DEBUG: 00");
        return 
    1;
    }

    COMMAND:pizzasell(playeridparams[])
    {
        if(
    pizza_job[playerid] != 1) return SCM(playerid"Вы не работник пиццерии.");
        if(
    pizza_data[playerid][0] != 1) return SCM(playerid"Вы не брали заказ.");
        new 
    client pizza_data[playerid][1];
        if(!
    IsPlayerConnected(client)) return SCM(playerid"Клиент не в сети.");
        new 
    FloatxFloatyFloatz;
        
    GetPlayerPos(clientxyz);
        if(!
    IsPlayerInRangeOfPoint(playerid2.0xyz)) return SCM(playerid"Вы находитель далеко от клиента.");

        new 
    str[120], str2[120];
        if(
    pizza_timer[playerid] == 777)
        {
            
    format(strsizeof str"Курьер %s предлагает взять вам у него пиццу. (Y - согласится, N - отказаться)"pname[playerid]);
            
    format(str2sizeof str2"Вы предложили %s взять у вас пиццу. (ожидайте ответа)"pname[client]);
        }
        if(
    pizza_timer[playerid] != 777)
        {
            
    format(strsizeof str"Курьер %s предлагает купить вам у него пиццу за $10. (Y - согласится, N - отказаться)"pname[playerid]);
            
    format(str2sizeof str2"Вы предложили %s купить у вас пиццу за $10. (ожидайте ответа)"pname[client]);
        }
        
    SCM(clientstr);
        
    SCM(playeridstr2);
        
    SetPVarInt(client"pizza_client_YN"1);
        return 
    1;
    }

    COMMAND:injob(playeridparams[])
    {
        if(
    pizza_job[playerid] == 0)
        {
            
    pizza_job[playerid] = 1;
            
    SCM(playerid"Вы устроились работником пиццерии.");
        }
        else if(
    pizza_job[playerid] == 1)
        {
            
    pizza_job[playerid] = 0;
            
    SCM(playerid"Вы уволились с пиццерии.");
        }
        return 
    1;
    }

    public 
    OnDialogResponse(playeriddialogidresponselistiteminputtext[])
    {
        if(
    dialogid == 5678)
        {
            if(!
    response) return 1;
            new 
    slot strval(inputtext)-1;
            if(
    opinfo[slot][op_status] == 2) return SCM(playerid"Этот заказ уже взял другой работник.");
            new 
    client opinfo[slot][op_clientID];
            if(!
    IsPlayerConnected(client)) return SCM(playerid"Клиент не в сети.");
            
    pizza_data[playerid][0] = 1;
            
    pizza_data[playerid][1] = client;
            
    pizza_data[opinfo[slot][op_clientID]][0] = 2;
            
    pizza_data[opinfo[slot][op_clientID]][1] = playerid;
            
    pizza_data[playerid][2] = slot;
            
    opinfo[slot][op_status] = 2;

            
    pizza_timer[playerid] = 31;
            
    SCM(playerid"Вы взяли заказ. Отвезите пиццу клиенту. Время на доставку: 30 секунд.");
        }
        return 
    1;


  2. 4 пользователей сказали cпасибо e.kosovskij за это полезное сообщение:

    Games (11.01.2016), Быдлокодер (11.01.2016), Джонни Ди (11.01.2016), Меша (11.01.2016)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •