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

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

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

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

Урок Динамическая Система Бизнесов

Статус
В этой теме нельзя размещать новые ответы.

Mathian

Мастер
Пользователь
Регистрация
3 Фев 2013
Сообщения
3,002
Лучшие ответы
6
Репутация
813
Награды
2
Всем Хай!
Решил выложить Урок по написанию Системы Бизнесов. Система подойдёт для любого мода.
В системе всё есть, кроме продуктов, баров и т.д. - я решил, что будет 100500 вопросов по ним и лучше напишите сами.


И так... Для начала нам потребуются 2 include'а:
PHP:
#include mxINI
#include sscanf2
Теперь создадим информацию о Бизнесах:
PHP:
#define MAX_BUSINESS 500//Макс. кол-во Бизнесов

enum bInfo
{
    bBusName[64], //Название
    bOwner[MAX_PLAYER_NAME], //Владелец
    bPrice, //Цена
    bLock, //Двери(Открыты, закрыты)
    bInterior, //Интерьер
    bVirtWorld, //Виртуальный мир
    bPick, // Пикап
    Text3D:bText, //3DText
    Float:bX, //X Координата
    Float:bY, //Y Координата
    Float:bZ //Z Координата
};
new BusinessInfo[MAX_BUSINESS][bInfo];

new BusAmount; //Количество Бизнесов
new LString[128];

enum biInfo //Значения берутся из Массива ниже
{
    biInt, //Интерьер
    Float:biX, //X Координата
    Float:biY, //Y Координата
    Float:biZ, //Z Координата
    biName[15], //Имя
}
new bInts[][biInfo]=
{
    {4,457.304748,-88.428497,999.554687,"Закусочная №1"},
    {5,454.973937,-110.104995,1000.077209,"Закусочная №2"},
    {15,207.737991,-109.019996,1005.132812,"Binco"},
    {5,226.293991,-7.431529,1002.210937,"Vicitim"},
    {4,286.800994,-82.547599,1001.515625,"Ammo"},
    {5,772.111999,-3.898649,1000.728820,"Спортзал"},
    {15,2215.454833,-1147.475585,1025.796875,"Гостиница"},
    {2,1204.809936,-11.586799,1000.921875,"Стриптиз Клуб"},
    {17,493.390991,-22.722799,1000.679687,"Альхамбра"}
};
PHP:
{
4, //Интерьер
457.304748, //X координата входа
-88.428497, //Y координата входа
999.554687, //Z координата входа
"Закусочная №1" //Имя
}

Теперь пишем Загрузку, Обновление и Сохранение Бизнесов:

В public OnGameModeInit():

PHP:
LoadBusiness();//Загружаем Бизнесы
Желательно в конце, Загрузка:
PHP:
LoadBusiness()
{
    if(!fexist("Business/MBusiness.ini")) return print("[Бизнесы]Ошибка: Файл 'MBusiness.ini' не найден!");//Если нет файла MBusiness.ini
    new f = ini_openFile("Business/MBusiness.ini");
    ini_getInteger(f, "Amount", BusAmount);//Получаем значение
    ini_closeFile(f);//Закрываем файл
    if(!fexist("Business/Business.ini")) return print("[Бизнесы]Ошибка: Файл 'Business.ini' не найден!");//Если нет файла Business.ini
    f = ini_openFile("Business/Business.ini");//Открываем файл
    new str[8];
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        format(str, sizeof(str), "ID %d", b);//Форматируем
        ini_getString(f, str, LString);//Получаем Значение
        sscanf(LString, "p<|>s[32]s[24]fffiiii", BusinessInfo[b][bBusName], BusinessInfo[b][bOwner], BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], BusinessInfo[b][bInterior], BusinessInfo[b][bVirtWorld], BusinessInfo[b][bPrice], BusinessInfo[b][bLock]);
        if(!strcmp(BusinessInfo[b][bOwner],"None",true))//Если нет владельца
        {
            BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], 0);//Создаём Пикап
            format(LString,128,"Бизнес\n%s\nЦена: $%d", BusinessInfo[b][bBusName], BusinessInfo[b][bPrice]);//Форматируем
            BusinessInfo[b][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ] + 0.5, 10.0, 0, 0);//Создаём 3DText
        }
        else//Иначе
        {
            BusinessInfo[b][bPick] = CreatePickup(1272, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ],0);//Создаём Пикап
            format(LString, 128, "Бизнес\n%s\nВладелец: %s", BusinessInfo[b][bBusName],BusinessInfo[b][bOwner]);//Форматируем
            BusinessInfo[b][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ] +0.5, 10.0, 0, 0);//Создаём 3DText
        }
    }
    ini_closeFile(f);//Закрываем файл
    return printf("Бизнесы Загружены | Кол-во: %d",BusAmount);//Записываем в Логи
}
Обновление:
PHP:
UpdateBusiness(b)
{
    DestroyPickup(BusinessInfo[b][bPick]);//Удаляем Пикап
    if(!strcmp(BusinessInfo[b][bOwner],"None",true))//Если нет владельца
    {
        BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ],0);//Создаём Пикап
        format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[b][bBusName], BusinessInfo[b][bPrice]);//Форматируем
        Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);//Обновляем 3DText
    }
    else//Иначе
    {
        BusinessInfo[b][bPick] = CreatePickup(1272, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], 0);//Создаём Пикап
        format(LString,128,"Бизнес\n%s\nВладелец: %s",BusinessInfo[b][bBusName],BusinessInfo[b][bOwner]);//Форматируем
        Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);//Обновляем 3DText
    }
}
Сохраняем Бизнесы:
PHP:
SaveBusiness(b)
{
    new f = ini_openFile("Business/Business.ini");//Открываем файл
    new str[8];
    format(str, 8, "ID %d", b);//Форматируем
    format(LString,sizeof(LString),"%s|%s|%f|%f|%f|%d|%d|%d|%d", BusinessInfo[b][bBusName], BusinessInfo[b][bOwner], BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], BusinessInfo[b][bInterior], BusinessInfo[b][bVirtWorld], BusinessInfo[b][bPrice], BusinessInfo[b][bLock]);//Форматируем
    ini_setString(f,str,LString);//Присваиваем значение
    ini_closeFile(f);//Закрываем файл
    return true;
}
Сохраняем кол-во бизнесов в отдельный файл:
PHP:
SaveBusinessAmount()
{
    new f=ini_openFile("Business/MBusiness.ini");//Открываем файл 
    ini_setInteger(f,"Amount",BusAmount);//Присваиваем значение 
    return ini_closeFile(f);//Закрываем файл
}
Команды:

Покупка и продажа:

PHP:
if(strcmp("/buybus", cmdtext, true, 9) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
        if(GetPlayerMoney(playerid) < BusinessInfo[b][bPrice]) return SendClientMessage(playerid,-1,"У вас не достаточно наличных средств, для покупки."); //Если не достаточно денег
        if(strcmp(BusinessInfo[b][bOwner], "None",true) != 0) return SendClientMessage(playerid,-1,"Бизнес не продаётся."); //Если есть Владелец
        strmid(BusinessInfo[b][bOwner], PlayerName(playerid), 0, 24, 24);//Устанавливаем Владельца
        UpdateBusiness(b);//Обновляем
        SaveBusiness(b); //Сохраняем
        GivePlayerMoney(playerid,-BusinessInfo[b][bPrice]); //Отнимаем сумму
        SendClientMessage(playerid,-1,"Поздравляем с покупкой");
        return true;
    }
    SendClientMessage(playerid,-1,"Подойдите к Бизнесу который желаете купить.");
    return true;
}
if(strcmp("/sellbus", cmdtext, true, 10) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
        if(!strcmp(BusinessInfo[b][bOwner], PlayerName(playerid), true))
        {
            strmid(BusinessInfo[b][bOwner], "None", 0, 5, 5);//Убираем владельца с Бизнеса
            UpdateBusiness(b);//Обновляем
            SaveBusiness(b);//Сохраняем
            GivePlayerMoney(playerid,BusinessInfo[b][bPrice]/2);//Даём игроку 1/2 стоимости Бизнеса
            SendClientMessage(playerid,-1,"Вы продали свой Бизнес государству. За 1/2 его стоимости.");
            return true;
        }
    }
    return true;
}
Вход и выход я сначала сделал по пикапам и подумал - перенести код на пикап не так уж и сложно будет, так что сделаю по команде и пару проверок ещё добавлю. Вдруг кому интересно будет. Вход и выход:
PHP:
if(strcmp("/enter", cmdtext, true, 6) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
        if(strcmp(BusinessInfo[b][bOwner],PlayerName(playerid), true) !=0 && BusinessInfo[b][bLock] == 1) return SendClientMessage(playerid,-1,"Бизнес закрыт.");//Если закрыт
        SetPlayerPos(playerid, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]);//Устанавливаем позицию игроку
        SetPlayerInterior(playerid, bInts[BusinessInfo[b][bInterior]][biInt]);//Устанавливаем интерьер игроку
        SetPlayerVirtualWorld(playerid, BusinessInfo[b][bVirtWorld]);//Устанавливаем виртуальный мир игроку
    }
    return true;
}
if(strcmp("/exit", cmdtext, true, 5) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(IsPlayerInRangeOfPoint(playerid, 5.0, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]) && GetPlayerVirtualWorld(playerid) == BusinessInfo[b][bVirtWorld])//Если в радиусе 5 метров от выхода((Координат входа))
        {
            SetPlayerPos(playerid, BusinessInfo[b][bX],BusinessInfo[b][bY],BusinessInfo[b][bZ]);//Устанавливаем позицию игроку
            SetPlayerVirtualWorld(playerid,0);//Устанавливаем виртуальный мир игроку
            SetPlayerInterior(playerid,0);//Устанавливаем интерьер игроку
        }
    }
    return true;
}
Двери. Открытие и закрытие сделал в 2ух командах.
PHP:
if(strcmp("/bopen", cmdtext, true, 6) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;//Если на пикапе входа
        if(strcmp(BusinessInfo[b][bOwner],PlayerName(playerid) ,true) !=0 ) return SendClientMessage(playerid,-1,"У вас нет ключей от данной собственности.");//Если вы не владелец этого Бизнеса
        if(BusinessInfo[b][bLock] == 1)//Если закрыт
        {
            BusinessInfo[b][bLock] = 0;//Открываем
            SaveBusiness(b);//Сохраняем
            GameTextForPlayer(playerid,"~w~Business ~g~Un~r~Locked",100,1);
        }
        else if(BusinessInfo[b][bLock] == 0) return SendClientMessage(playerid,-1,"Бизнес уже открыт.");
        return true;
    }
    return true;
}
if(strcmp("/bclose", cmdtext, true, 6) == 0)
{
    for(new b = 1; b <= BusAmount; b++)//Для всех Бизнесов
    {
        if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;//Если на пикапе входа
        if(strcmp(BusinessInfo[b][bOwner], PlayerName(playerid), true) != 0) return SendClientMessage(playerid,-1,"У вас нет ключей от данной собственности.");//Если вы не владелец этого Бизнеса
        if(BusinessInfo[b][bLock] == 0)//Если открыт
        {
            BusinessInfo[b][bLock]=1;//Закрываем
            SaveBusiness(b);//Сохраняем
            GameTextForPlayer(playerid,"~w~Business ~r~Locked",100,1);
        }
        else if(BusinessInfo[b][bLock] == 1) return SendClientMessage(playerid,-1,"Бизнес уже закрыт.");
        return true;
    }
    return true;
}
Ну и команда создания:
PHP:
if(strcmp("/addbus", cmdtext, true, 13) == 0)
{
    if(IsPlayerAdmin(playerid))//Если Ркон Админ
    {
        return ShowPlayerDialog(playerid,2000,DIALOG_STYLE_INPUT,"Название","Введите название:","Далее","Отмена");//Выводим Диалог
    }
}
Теперь действия с диалогами:
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):
PHP:
switch(dialogid)
{
    case 2000:
    {
        if(response)//Если продолжаем
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название", "Введите название:", "Далее","Отмена");//Если не введено - повторяем
            SetPVarString(playerid, "b_name", inputtext);//Записываем
            ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Отмена");//Показываем Диалог с Ценой
        }
    }
    case 2001:
    {
        if(response)//Если продолжаем
        {
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость бизнеса:","Далее","Назад");//Если не введено - повторяем
            SetPVarInt(playerid, "b_price", strval(inputtext));
            LString = "";
            for(new i; i < sizeof(bInts); i++)
            {
                strcat(LString, bInts[i][biName]);
                strcat(LString, "\n");
            }
            ShowPlayerDialog(playerid, 2002, DIALOG_STYLE_LIST, "Интерьер", LString, "Далее", "Назад");//Показываем Диалог с выбором Интерьера
        }
        else DeletePVar(playerid, "b_name"), ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название","Введите название:", "Далее", "Отмена");//Иначе
    }
    case 2002:
    {
        if(response)//Если продолжаем
        {
            SetPVarInt(playerid, "b_int", listitem);
            ShowPlayerDialog(playerid, 2003, DIALOG_STYLE_MSGBOX, "Подтверждение", "Вы действительно желаете создать Бизнес?", "V", "X");//Подтверждаем
        }
        else DeletePVar(playerid, "b_price"), ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Назад");//Иначе
    }
    case 2003:
    {
        if(response)//Если продолжаем
        {
            BusAmount++;//КОл-во Бизнесов плюсуем 
            SaveBusinessAmount();//Сохраняем
            new Float:x[3], str[32];
            GetPlayerPos(playerid, x[0], x[1], x[2]);//Получаем позицию
            GetPVarString(playerid, "b_name", str, 32);
            BusinessInfo[BusAmount][bX] = x[0];//Присваиваем Координату X
            BusinessInfo[BusAmount][bY] = x[1];//Присваиваем Координату Y
            BusinessInfo[BusAmount][bZ] = x[2];//Присваиваем Координату Z
            BusinessInfo[BusAmount][bPrice] = GetPVarInt(playerid, "b_price");//Присваиваем Цену
            BusinessInfo[BusAmount][bInterior] = GetPVarInt(playerid, "b_int");//Присваиваем Интерьер
            BusinessInfo[BusAmount][bVirtWorld] = BusAmount;//Присваиваем Виртуальный Мир
            strmid(BusinessInfo[BusAmount][bBusName], str, 0, 32, 32);//Присваиваем Имя
            strmid(BusinessInfo[BusAmount][bOwner], "None", 0, 5, 5);//Присваиваем Владельца "None"
            SaveBusiness(BusAmount);//Сохраняем
            BusinessInfo[BusAmount][bPick] = CreatePickup(1274,23,x[0],x[1],x[2],0);//Создаём Пикап
            format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[BusAmount][bBusName], BusinessInfo[BusAmount][bPrice]);//Форматируем
            BusinessInfo[BusAmount][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, x[0], x[1], x[2] + 0.5, 10.0, 0, 0);//Создаём 3DText
            GameTextForPlayer(playerid, "~w~Business ~g~Created",100,1);
            DeletePVar(playerid, "b_price"); 
            DeletePVar(playerid, "b_name");
            DeletePVar(playerid, "b_int");
        }
        else DeletePVar(playerid,"b_price"), DeletePVar(playerid, "b_name"), DeletePVar(playerid, "b_int");//Иначе
    }
}
И да, в скрипте Юзал PlayerName(playerid) для удобства, вот он:
PHP:
PlayerName(playerid)
{
    new Name[24];
    GetPlayerName(playerid,Name,24);
    return Name;
}
Вот и всё! По-моему ничего не забыл. На всякий случай - вот весь код:
PHP:
#include a_samp
#include mxINI
#include <sscanf2>

#define MAX_BUSINESS 500

enum bInfo
{
    bBusName[64], 
    bOwner[MAX_PLAYER_NAME],
    bPrice,
    bLock, 
    bInterior, 
    bVirtWorld, 
    bPick, 
    Text3D:bText, 
    Float:bX, 
    Float:bY, 
    Float:bZ 
};
new BusinessInfo[MAX_BUSINESS][bInfo];

new BusAmount; 
new LString[128];

enum biInfo 
{
    biInt, 
    Float:biX, 
    Float:biY, 
    Float:biZ, 
    biName[15], 
}
new bInts[][biInfo]=
{
    {4,457.304748,-88.428497,999.554687,"Закусочная №1"},
    {5,454.973937,-110.104995,1000.077209,"Закусочная №2"},
    {15,207.737991,-109.019996,1005.132812,"Binco"},
    {5,226.293991,-7.431529,1002.210937,"Vicitim"},
    {4,286.800994,-82.547599,1001.515625,"Ammo"},
    {5,772.111999,-3.898649,1000.728820,"Спортзал"},
    {15,2215.454833,-1147.475585,1025.796875,"Гостиница"},
    {2,1204.809936,-11.586799,1000.921875,"Стриптиз Клуб"},
    {17,493.390991,-22.722799,1000.679687,"Альхамбра"}
};

public OnGameModeInit()
{
    LoadBusiness();
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp("/addbus", cmdtext, true, 13) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            return ShowPlayerDialog(playerid,2000,DIALOG_STYLE_INPUT,"Название","Введите название:","Далее","Отмена");
        }
    }
    if(strcmp("/buybus", cmdtext, true, 9) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
            if(GetPlayerMoney(playerid) < BusinessInfo[b][bPrice]) return SendClientMessage(playerid,-1,"У вас не достаточно наличных средств, для покупки."); //Если не достаточно денег
            if(strcmp(BusinessInfo[b][bOwner], "None",true) != 0) return SendClientMessage(playerid,-1,"Бизнес не продаётся."); //Если есть Владелец
            strmid(BusinessInfo[b][bOwner], PlayerName(playerid), 0, 24, 24);
            UpdateBusiness(b);//Обновляем
            SaveBusiness(b); //Сохраняем
            GivePlayerMoney(playerid,-BusinessInfo[b][bPrice]); //Отнимаем сумму
            SendClientMessage(playerid,-1,"Поздравляем с покупкой");
            return true;
        }
        SendClientMessage(playerid,-1,"Подойдите к Бизнесу который желаете купить.");
        return true;
    }
    if(strcmp("/sellbus", cmdtext, true, 10) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
            if(!strcmp(BusinessInfo[b][bOwner], PlayerName(playerid), true))
            {
                strmid(BusinessInfo[b][bOwner], "None", 0, 5, 5);
                UpdateBusiness(b);
                SaveBusiness(b);
                GivePlayerMoney(playerid,BusinessInfo[b][bPrice]/2);
                SendClientMessage(playerid,-1,"Вы продали свой Бизнес государству. За 1/2 его стоимости.");
                return true;
            }
        }
        return true;
   }
    if(strcmp("/enter", cmdtext, true, 6) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
            if(strcmp(BusinessInfo[b][bOwner],PlayerName(playerid), true) !=0 && BusinessInfo[b][bLock] == 1) return SendClientMessage(playerid,-1,"Бизнес закрыт.");
            SetPlayerPos(playerid, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]);
            SetPlayerInterior(playerid, bInts[BusinessInfo[b][bInterior]][biInt]);
            SetPlayerVirtualWorld(playerid, BusinessInfo[b][bVirtWorld]);
        }
        return true;
    }
    if(strcmp("/exit", cmdtext, true, 5) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(IsPlayerInRangeOfPoint(playerid, 5.0, bInts[BusinessInfo[b][bInterior]][biX], bInts[BusinessInfo[b][bInterior]][biY], bInts[BusinessInfo[b][bInterior]][biZ]) && GetPlayerVirtualWorld(playerid) == BusinessInfo[b][bVirtWorld])
            {
                SetPlayerPos(playerid, BusinessInfo[b][bX],BusinessInfo[b][bY],BusinessInfo[b][bZ]);
                SetPlayerVirtualWorld(playerid,0);
                SetPlayerInterior(playerid,0);
            }
        }
        return true;
    }
    if(strcmp("/bclose", cmdtext, true, 6) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
            if(strcmp(BusinessInfo[b][bOwner], PlayerName(playerid), true) != 0) return SendClientMessage(playerid,-1,"У вас нет ключей от данной собственности.");
            if(BusinessInfo[b][bLock] == 0)
            {
                BusinessInfo[b][bLock]=1;
                SaveBusiness(b);
                GameTextForPlayer(playerid,"~w~Business ~r~Locked",100,1);
            }
            else if(BusinessInfo[b][bLock] == 1) return SendClientMessage(playerid,-1,"Бизнес уже закрыт.");
            return true;
        }
        return true;
    }
    if(strcmp("/bopen", cmdtext, true, 6) == 0)
    {
        for(new b = 1; b <= BusAmount; b++)
        {
            if(!IsPlayerInRangeOfPoint(playerid, 1.5, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ])) continue;
            if(strcmp(BusinessInfo[b][bOwner],PlayerName(playerid) ,true) !=0 ) return SendClientMessage(playerid,-1,"У вас нет ключей от данной собственности.");
            if(BusinessInfo[b][bLock] == 1)
            {
                BusinessInfo[b][bLock] = 0;
                SaveBusiness(b);
                GameTextForPlayer(playerid,"~w~Business ~g~Un~r~Locked",100,1);
            }
            else if(BusinessInfo[b][bLock] == 0) return SendClientMessage(playerid,-1,"Бизнес уже открыт.");
            return true;
        }
        return true;
    }
    return false;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 2000:
        {
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название", "Введите название:", "Далее","Отмена");
                SetPVarString(playerid, "b_name", inputtext);
                ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Отмена");
            }
        }
        case 2001:
        {
            if(response)
            {
                if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость бизнеса:","Далее","Назад");
                SetPVarInt(playerid, "b_price", strval(inputtext));
                LString = "";
                for(new i; i < sizeof(bInts); i++)
                {
                    strcat(LString, bInts[i][biName]);
                    strcat(LString, "\n");
                }
                ShowPlayerDialog(playerid, 2002, DIALOG_STYLE_LIST, "Интерьер", LString, "Далее", "Назад");
            }
            else DeletePVar(playerid, "b_name"), ShowPlayerDialog(playerid, 2000, DIALOG_STYLE_INPUT, "Название","Введите название:", "Далее", "Отмена");
        }
          case 2002:
        {
            if(response)
            {
                SetPVarInt(playerid, "b_int", listitem);
                ShowPlayerDialog(playerid, 2003, DIALOG_STYLE_MSGBOX, "Подтверждение", "Вы действительно желаете создать Бизнес?", "V", "X");
            }
            else DeletePVar(playerid, "b_price"), ShowPlayerDialog(playerid, 2001, DIALOG_STYLE_INPUT, "Стоимость", "Введите стоимость Бизнеса:", "Далее", "Назад");
        }
          case 2003:
        {
            if(response)
            {
                BusAmount++, SaveBusinessAmount();
                new Float:x[3], str[32];
                GetPlayerPos(playerid, x[0], x[1], x[2]);
                GetPVarString(playerid, "b_name", str, 32);
                BusinessInfo[BusAmount][bX] = x[0];
                BusinessInfo[BusAmount][bY] = x[1];
                BusinessInfo[BusAmount][bZ] = x[2];
                BusinessInfo[BusAmount][bPrice] = GetPVarInt(playerid, "b_price");
                BusinessInfo[BusAmount][bInterior] = GetPVarInt(playerid, "b_int");
                BusinessInfo[BusAmount][bVirtWorld] = BusAmount;
                strmid(BusinessInfo[BusAmount][bBusName], str, 0, 32, 32);
                strmid(BusinessInfo[BusAmount][bOwner], "None", 0, 5, 5);
                SaveBusiness(BusAmount);
                BusinessInfo[BusAmount][bPick]=CreatePickup(1274,23,x[0],x[1],x[2],0);
                format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[BusAmount][bBusName], BusinessInfo[BusAmount][bPrice]);
                BusinessInfo[BusAmount][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, x[0], x[1], x[2] + 0.5, 10.0, 0, 0);
                GameTextForPlayer(playerid, "~w~Business ~g~Created",100,1);
                DeletePVar(playerid, "b_price"), DeletePVar(playerid, "b_name"), DeletePVar(playerid, "b_int");
            }
            else DeletePVar(playerid,"b_price"), DeletePVar(playerid, "b_name"), DeletePVar(playerid, "b_int");
        }
    }
    return 1;
}
PlayerName(playerid)
{
    new Name[24];
    GetPlayerName(playerid,Name,24);
    return Name;
}
SaveBusinessAmount()
{
    new f=ini_openFile("Business/MBusiness.ini");
    ini_setInteger(f,"Amount",BusAmount);
    return ini_closeFile(f);
}
LoadBusiness()
{
    if(!fexist("Business/MBusiness.ini")) return print("[Бизнесы]Ошибка: Файл 'MBusiness.ini' не найден!");
    new f = ini_openFile("Business/MBusiness.ini");
    ini_getInteger(f, "Amount", BusAmount);
    ini_closeFile(f);
    if(!fexist("Business/Business.ini")) return print("[Бизнесы]Ошибка: Файл 'Business.ini' не найден!");
    f = ini_openFile("Business/Business.ini");
    new str[8];
    for(new b = 1; b <= BusAmount; b++)
    {
        format(str, sizeof(str), "ID %d", b);
        ini_getString(f, str, LString);
        sscanf(LString, "p<|>s[32]s[24]fffiiii", BusinessInfo[b][bBusName], BusinessInfo[b][bOwner], BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], BusinessInfo[b][bInterior], BusinessInfo[b][bVirtWorld], BusinessInfo[b][bPrice], BusinessInfo[b][bLock]);
        if(!strcmp(BusinessInfo[b][bOwner],"None",true))
        {
            BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], 0);
            format(LString,128,"Бизнес\n%s\nЦена: $%d", BusinessInfo[b][bBusName], BusinessInfo[b][bPrice]);
            BusinessInfo[b][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ] + 0.5, 10.0, 0, 0);
        }
        else
        {
            BusinessInfo[b][bPick] = CreatePickup(1272, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ],0);
            format(LString, 128, "Бизнес\n%s\nВладелец: %s", BusinessInfo[b][bBusName],BusinessInfo[b][bOwner]);
            BusinessInfo[b][bText] = Create3DTextLabel(LString, 0xFFFFFFFF, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ] +0.5, 10.0, 0, 0);
        }
    }
    ini_closeFile(f);
    return printf("Бизнесы Загружены | Кол-во: %d",BusAmount);
}
SaveBusiness(b)
{
    new f = ini_openFile("Business/Business.ini");
    new str[8];
    format(str, 8, "ID %d", b);
    format(LString,sizeof(LString),"%s|%s|%f|%f|%f|%d|%d|%d|%d", BusinessInfo[b][bBusName], BusinessInfo[b][bOwner], BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], BusinessInfo[b][bInterior], BusinessInfo[b][bVirtWorld], BusinessInfo[b][bPrice], BusinessInfo[b][bLock]);
    ini_setString(f,str,LString);
    ini_closeFile(f);
    return true;
}
UpdateBusiness(b)
{
    DestroyPickup(BusinessInfo[b][bPick]);
    if(!strcmp(BusinessInfo[b][bOwner],"None",true))
    {
        BusinessInfo[b][bPick] = CreatePickup(1274, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ],0);
        format(LString, 128, "Бизнес\n%s\nЦена: $%d", BusinessInfo[b][bBusName], BusinessInfo[b][bPrice]);
        Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);
    }
    else
    {
        BusinessInfo[b][bPick] = CreatePickup(1272, 23, BusinessInfo[b][bX], BusinessInfo[b][bY], BusinessInfo[b][bZ], 0);
        format(LString,128,"Бизнес\n%s\nВладелец: %s",BusinessInfo[b][bBusName],BusinessInfo[b][bOwner]);
        Update3DTextLabelText(BusinessInfo[b][bText],0xFFFFFFFF,LString);
    }
}

Не забудьте добавить в Scriptfiles папку Business, а в ней создать "Business.ini" и "MBusiness.ini"

Всё Готово! Спасибо За Внимание!
Автор: Я ((Lev_Popov))


 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу