Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±

    Команда по символам.

    Доброго времени суток, спасибо DeimoS за предыдущий ответ и помощь в команде, но возник другой вопрос, а именно, как определить в подтверждении команды какой символ был введен?

    По коду будет думаю суть ясна...
    PHP код:
            switch(currency)
            {
                case 
    '$':
                {
                    if(!(
    <= price <= 100000000000000))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от $1.");

                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за $%s. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за $%s.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);
                    
    house_price{playerid} = true;
                    
                }
                case 
    'м''М''m''M':
                {
                    if(!(
    100 <= price <= 100000000000000))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 100 материалов.");
                        
                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s материалов. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s материалов.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);
                    
    house_materials{playerid} = true;
                }
                case 
    'd''D':
                {
                    if(!(
    <= price <= 100000000000000))
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 1 грамма наркотиков");
                        
                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s грамм нарко. Для покупки введите /accept house";
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25];
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money);
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s грамм нарко.",pInfo[giveplayerid][pName], money);
                    
    SendClientMessage(playerid,COLOR_YELLOW,string);
                    
    house_drugs{playerid} = true;
                } 
    И команда /accept house
    PHP код:
        if(strcmp(accept"house"true) == 0)
        {
            if(
    GetPVarInt(playerid,"BUYHOME") == 999)
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Вам не кто не предлогал купить дом.");

            if(
    pInfo[playerid][pMoney] < GetPVarInt(playerid,"BUYCENA"))
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно средств.");
                
            new 
    sellpl GetPVarInt(playerid,"BUYHOME");
            
    pInfo[playerid][pHouse] = pInfo[sellpl][pHouse];
            
    pInfo[sellpl][pHouse] = 0;
            
    strmid(HouseInfo[pInfo[playerid][pHouse]][hOwner], pInfo[playerid][pName], 0strlen(pInfo[playerid][pName]), 255);
            
    UpdateHouse(pInfo[playerid][pHouse]);
            
            if(
    house_price{playerid} == true && house_materials{playerid} == false && house_drugs{playerid} == false)
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d$.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(playeridCOLOR_LBLUEstring);
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d$.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(sellplCOLOR_LBLUEstring);

                
    pInfo[playerid][pMoney] -= GetPVarInt(playerid"BUYCENA");
                
    pInfo[sellpl][pMoney] += GetPVarInt(playerid"BUYCENA");
                
    house_price{playerid} = false;
            }
            if(
    house_price{playerid} == false && house_materials{playerid} == true && house_drugs{playerid} == false)
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d материалов.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(playeridCOLOR_LBLUEstring);
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d материалов.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(sellplCOLOR_LBLUEstring);

                
    pInfo[playerid][pMats] -= GetPVarInt(playerid"BUYCENA");
                
    pInfo[sellpl][pMats] += GetPVarInt(playerid"BUYCENA");
                
    house_materials{playerid} = false;
            }
            if(
    house_price{playerid} == false && house_materials{playerid} == false && house_drugs{playerid} == true)
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d грамм нарко.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(playeridCOLOR_LBLUEstring);
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d грамм нарко.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA"));
                
    SendClientMessage(sellplCOLOR_LBLUEstring);

                
    pInfo[playerid][pDrugs] -= GetPVarInt(playerid"BUYCENA");
                
    pInfo[sellpl][pDrugs] += GetPVarInt(playerid"BUYCENA");
                
    house_drugs{playerid} = false;
            }
            
    SetPVarInt(playerid,"BUYHOME",999);
            
    SetPVarInt(playerid,"BUYCENA",0);
        } 
    Я не знаю как сделать проверку на введеный символ, т.е. за какой материальный предмет продает игрок дом.
    Подскажите пожалуйста, может есть проще и лучше вариант.

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Это же уже реализовано с помощью массивов house_price, house_materials и house_drugs.
    Правда, лучше это реализовать так:
    PHP код:
    enum {
        
    SELL_HOUSE_CURRENCY_DOLLAR,
        
    SELL_HOUSE_CURRENCY_MATERIAL,
        
    SELL_HOUSE_CURRENCY_DRUGS,
    }

    new 
    gSellHouseCurrency[MAX_PLAYERS char]; 
    (ещё можно использовать теги, по желанию)

    PHP код:
            switch(currency
            { 
                case 
    '$'
                { 
                    if(!(
    <= price <= cellmax)) 
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от $1."); 

                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за $%s. Для покупки введите /accept house"
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring); 

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за $%s.",pInfo[giveplayerid][pName], money); 
                    
    SendClientMessage(playerid,COLOR_YELLOW,string); 
                    
    gSellHouseCurrency{playerid} = SELL_HOUSE_CURRENCY_DOLLAR;
                } 
                case 
    'м''М''m''M'
                { 
                    if(!(
    100 <= price <= cellmax)) 
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 100 материалов."); 
                         
                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s материалов. Для покупки введите /accept house"
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring); 

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s материалов.",pInfo[giveplayerid][pName], money); 
                    
    SendClientMessage(playerid,COLOR_YELLOW,string); 
                    
    gSellHouseCurrency{playerid} = SELL_HOUSE_CURRENCY_MATERIAL;
                } 
                case 
    'd''D'
                { 
                    if(!(
    <= price <= cellmax)) 
                        return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 1 грамма наркотиков"); 
                         
                    static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s грамм нарко. Для покупки введите /accept house"
                    new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
                    
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
                    
    SendClientMessage(giveplayeridCOLOR_YELLOWstring); 

                    
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s грамм нарко.",pInfo[giveplayerid][pName], money); 
                    
    SendClientMessage(playerid,COLOR_YELLOW,string); 
                    
    gSellHouseCurrency{playerid} = SELL_HOUSE_CURRENCY_DRUGS;
                } 
    P.S. Я заменил 100000000000000 на cellmax.

    PHP код:
        if(strcmp(accept"house"true) == 0
        { 
            if(
    GetPVarInt(playerid,"BUYHOME") == 999
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Вам не кто не предлогал купить дом."); 

            if(
    pInfo[playerid][pMoney] < GetPVarInt(playerid,"BUYCENA")) 
                return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно средств."); 
                 
            new 
    sellpl GetPVarInt(playerid,"BUYHOME"); 
            
    pInfo[playerid][pHouse] = pInfo[sellpl][pHouse]; 
            
    pInfo[sellpl][pHouse] = 0
            
    strmid(HouseInfo[pInfo[playerid][pHouse]][hOwner], pInfo[playerid][pName], 0strlen(pInfo[playerid][pName]), 255); 
            
    UpdateHouse(pInfo[playerid][pHouse]); 
            
            if(
    gSellHouseCurrency{playerid} == SELL_HOUSE_CURRENCY_DOLLAR
            { 
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d$.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d$.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pMoney] -= GetPVarInt(playerid"BUYCENA"); 
                
    pInfo[sellpl][pMoney] += GetPVarInt(playerid"BUYCENA"); 
            }
            else if(
    gSellHouseCurrency{playerid} == SELL_HOUSE_CURRENCY_MATERIAL
            { 
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d материалов.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d материалов.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pMats] -= GetPVarInt(playerid"BUYCENA"); 
                
    pInfo[sellpl][pMats] += GetPVarInt(playerid"BUYCENA"); 
            } 
            else if(
    gSellHouseCurrency{playerid} == SELL_HOUSE_CURRENCY_DRUGS
            { 
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d грамм нарко.",pInfo[sellpl][pName], GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d грамм нарко.",pInfo[playerid][pName],GetPVarInt(playerid,"BUYCENA")); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pDrugs] -= GetPVarInt(playerid"BUYCENA"); 
                
    pInfo[sellpl][pDrugs] += GetPVarInt(playerid"BUYCENA"); 
            } 
            
    SetPVarInt(playerid,"BUYHOME",999); 
            
    SetPVarInt(playerid,"BUYCENA",0); 
        } 

  3. Пользователь сказал cпасибо:
    Skyline (05.05.2017)
  4. #3
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Ну, во-первых, такого числа чисто физически в Pawn не может быть :)
    PHP код:
    100000000000000 
    Вот-вторых, я бы сделал как-то так:

      Открыть/закрыть
    PHP код:
    if(GetPVarType(giveplayerid"SellHouse_Currency") != PLAYER_VARTYPE_NONE)
        return 
    SendClientMessage(playeridCOLOR_GREY, !"Данному игроку уже сделали предложение по продаже дома."); 
    switch(
    currency

        case 
    '$'
        { 
            if(!(
    <= price <= cellmax)) 
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от $1."); 

            static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за $%s. Для покупки введите /accept house"
            new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
            
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
            
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);
            
    SetPVarInt(giveplayerid"SellHouse_Currency"'$');// Можно, конечно, обычные "1, 2, 3" использовать, но так, как по мне, нагляднее 

            
    format(stringsizeof string,"Ты предложил купить дом игроку %s за $%s.",pInfo[giveplayerid][pName], money); 
            
    SendClientMessage(playerid,COLOR_YELLOW,string); 
            
    house_price{playerid} = true
             
        } 
        case 
    'м''М''m''M'
        { 
            if(!(
    100 <= price <= cellmax)) 
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 100 материалов."); 
                 
            static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s материалов. Для покупки введите /accept house";
            new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
            
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
            
    SendClientMessage(giveplayeridCOLOR_YELLOWstring); 
            
    SetPVarInt(giveplayerid"SellHouse_Currency"'M');

            
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s материалов.",pInfo[giveplayerid][pName], money); 
            
    SendClientMessage(playerid,COLOR_YELLOW,string); 
            
    house_materials{playerid} = true
        } 
        case 
    'd''D'
        { 
            if(!(
    <= price <= cellmax)) 
                return 
    SendClientMessage(playeridCOLOR_GREY, !"Цена от 1 грамма наркотиков"); 
                 
            static const 
    fmt_str[] = "Игрок %s предложил вам купить дом за %s грамм нарко. Для покупки введите /accept house"
            new 
    string[sizeof(fmt_str) - MAX_PLAYER_NAME 25]; 
            
    format(stringsizeof stringfmt_strpInfo[playerid][pName], money); 
            
    SendClientMessage(giveplayeridCOLOR_YELLOWstring);
            
    SetPVarInt(giveplayerid"SellHouse_Currency"'D'); 

            
    format(stringsizeof string,"Ты предложил купить дом игроку %s за %s грамм нарко.",pInfo[giveplayerid][pName], money); 
            
    SendClientMessage(playerid,COLOR_YELLOW,string); 
        } 



    PHP код:
    if(strcmp(accept"house"true) == 0

        if(
    GetPVarType(playerid"BUYHOME") == PLAYER_VARTYPE_NONE
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вам не кто не предлогал купить дом."); 

        new 
    price GetPVarInt(playerid"BUYCENA"),
            
    sellpl GetPVarInt(playerid,"BUYHOME");
        
    DeletePVar(playerid,"BUYHOME"); 
        
    DeletePVar(playerid,"BUYCENA"); 

        if(
    pInfo[playerid][pMoney] < price
            return 
    SendClientMessage(playeridCOLOR_GREY, !"У вас недостаточно средств.");  
        

        switch(
    GetPVarInt(playerid"SellHouse_Currency"))
        {
            case 
    '$':
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d$.",pInfo[sellpl][pName], price); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d$.",pInfo[playerid][pName],price); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pMoney] -= price
                
    pInfo[sellpl][pMoney] += price
            }
            case 
    'M':
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d материалов.",pInfo[sellpl][pName], price); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d материалов.",pInfo[playerid][pName],price); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pMats] -= price
                
    pInfo[sellpl][pMats] += price
            }
            case 
    'D':
            {
                
    format(string,sizeof string"Вы купили дом у игрока %s за %d грамм нарко.",pInfo[sellpl][pName], price); 
                
    SendClientMessage(playeridCOLOR_LBLUEstring); 
                
    format(string,sizeof string ,"Вы продали дом игроку %s за %d грамм нарко.",pInfo[playerid][pName],price); 
                
    SendClientMessage(sellplCOLOR_LBLUEstring); 

                
    pInfo[playerid][pDrugs] -= price
                
    pInfo[sellpl][pDrugs] += price
            }
        }
        new 
    houseid pInfo[playerid][pHouse] = pInfo[sellpl][pHouse]; 
        
    pInfo[sellpl][pHouse] = HouseInfo[houseid][hOwner][0] = 0;
        
    strcat(HouseInfo[houseid][hOwner], pInfo[playerid][pName], MAX_PLAYER_NAME);
        
    UpdateHouse(houseid); 

        
    DeletePVar(playerid"SellHouse_Currency");
        return 
    1;



    И забудь вообще о том, что у pVar могут быть какие-то значения по умолчанию. Если pVar больше не будет использоваться, значит его следует удалить и если твоя система не позволяет этого (хотя для проверки существования pVar есть прекрасная функция GetPVarType), то стоит либо отказаться от использования pVar в ней, либо переписать систему. В противном случае ты лишь проигрываешь с подобным использованием pVar
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. Пользователь сказал cпасибо:
    Skyline (05.05.2017)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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