Система домов от Дим (черновик)

Устаревшие, не актуальные темы
Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1151
Репутация: 74
С нами: 5 лет 4 месяца

Система домов от Дим (черновик)

Сообщение #1 Дим » 10 апреля 2013, 14:26

Система домов от Дим (черновик)

Как и обещал, начинаю урок - как сделать систему домов с нуля. Так как давно не занимался Pawno, то это мероприятие может затянуться на долго. Но я ни куда не спешу. Что бы лучше всё вспомнить, систему буду писать на New.pwp.
Если что то не так, пишите в этой теме.

И так начнём. Сначала сделаем простую регистрацию на mxini
Регистрация
Для начала подключаем инкуд mxini, для этого ко всем #include добавляем:

Код: Выделить всё

#include <mxini>                             


Далее создаём переменные для игрока, для этого после всех инклудов вставляем;

Код: Выделить всё

enum pInfo {
pMoney, // Сохраняет кол-во денег.
pHouse,// ID первого дома
pHouse1,// ID второго дома
pHouse2,// ID третьего дома
pNHouse // кол-во домов у игрока (Последняя строка без запятой)
};
new PlayerInfo[MAX_PLAYERS][pInfo];


Для вывода меню, в паблик - public OnPlayerConnect(playerid)

Код: Выделить всё

public OnPlayerConnect(playerid)
{
    new PlayerName[500];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник 
    new account[128];
    format(account,sizeof(account),"Users/%s.ini",PlayerName); // ищем аккаунт
    // Если нашли, то выводим окно "Авторизация"
    if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", "");
        else  // Если игрок найден, то авторизация
    {
        ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Введите пароль:", "Войти", "");
    }
    PlayerInfo[playerid][pMoney] = 0; // При регистрации 0 денег
    PlayerInfo[playerid][pHouse] = 0; // 0 домов...
    PlayerInfo[playerid][pHouse1] = 0;
    PlayerInfo[playerid][pHouse2] = 0;
    PlayerInfo[playerid][pNHouse] = 0;
    return true;


А теперь создаём действия для этих меню.
В паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])

Код: Выделить всё

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
    new account[128];
    format(account,sizeof(account),"Users/%s.ini",PlayerName);// Создаем аккаунт
    if(dialogid == 1) // Регистрация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", ""); 
        if
(response)
        {
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //узнаем ник
            format(account,sizeof(account),"Users/%s.ini",PlayerName);//ищем акк
            if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль", "Войти", ""); 
            new iniFile 
= ini_createFile(account); // Создаем аккаунт
            if(iniFile < 0) ini_openFile (account); // Если файл пустой, то откроем и ...
            {
                ini_setString(iniFile,"Password",inputtext); // Запишем пароль для игрока
                ini_setInteger(iniFile, "Money", 0); // Запишем кол-во денег для игрока
                ini_setInteger(iniFile, "House", 0); //дома
                ini_setInteger(iniFile, "House1", 0);
                ini_setInteger(iniFile, "House2", 0);
                ini_setInteger(iniFile, "NHouse", 0);
                ini_closeFile(iniFile); // Закроем файл
            }
        }
        else //проверка Esc'ейпа
        {
            ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Придумайте себе пароль", "Войти", "");
        }
    }
    if(dialogid == 2)
    {
        if(!strlen(inputtext))return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", ""); 
        if
(response)// Проверка на кнопку "ОК" и Enter
        { 
            new password
[64];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            format(account,sizeof(account),"Users/%s.ini",PlayerName);
            new iniFile = ini_openFile(account);
            {
                ini_getString(iniFile, "Password",password); // Узнаём пароль аккаунта.
                if(!strcmp(inputtext, password, true))
                {
                    ini_getInteger(iniFile,"Money", PlayerInfo[playerid][pMoney]); // Запишем кол-во денег игроку
                    ini_getInteger(iniFile,"House",PlayerInfo[playerid][pHouse]); // дома
                    ini_getInteger(iniFile,"House1",PlayerInfo[playerid][pHouse1]);
                    ini_getInteger(iniFile,"House2",PlayerInfo[playerid][pHouse2]);
                    ini_getInteger(iniFile,"NHouse",PlayerInfo[playerid][pNHouse]);
                    GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]); // Количество денег у игрока
                    format(account, sizeof(account), "Вы вошли в свой аккаунт: "%s".",PlayerName);
                    SendClientMessage(playerid, 0xFFFF00FF,account);// Напишет в чат
                    ini_closeFile(iniFile);// закроем файл
                }
                else//проверка Esc'ейпа
                {
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
                SendClientMessage(playerid, 0xF60000AA, "Неверный пароль. Попробуйте ещё раз.");
                }
            }
        }
        else//проверка Esc'ейпа
        {
            ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Введите свой пароль:", "Войти", "");
        }
    }
    return true;


Создаём новый паблик - public SaveAccounts(), ко всем пабликам добавим

Код: Выделить всё

forward SaveAccounts();
public SaveAccounts()
{
    for(new f; f < GetMaxPlayers(); f++)
    {
        if(!IsPlayerConnected(f))continue;
        SaveAccount(f);
    }
}


В конце мода добавляем сток, который и будет выполнять все функции сохранения и записи данных

Код: Выделить всё

stock SaveAccount(playerid) // Сохраняет данные
{
    new PlayerName[MAX_PLAYER_NAME], account[128];
    GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
    format(account,sizeof(account), "Users/%s.ini", PlayerName);
    new iniFile = ini_openFile(account);// откр. файл
    ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));// записываем
    ini_setInteger(iniFile, "House", PlayerInfo[playerid][pHouse]);
    ini_setInteger(iniFile, "House1", PlayerInfo[playerid][pHouse1]);
    ini_setInteger(iniFile, "House2", PlayerInfo[playerid][pHouse2]);
    ini_setInteger(iniFile, "NHouse", PlayerInfo[playerid][pNHouse]);
    ini_closeFile(iniFile);// закрываем
    return 1;
}


Для сохранения при выходе из игры, в паблик public OnPlayerDisconnect(playerid, reason)

Код: Выделить всё

public OnPlayerDisconnect(playerid, reason)
{
    SaveAccount(playerid); // Сохранение аккаунтов
    return true;
}


С модом работу мы закончили, теперь открываем папку с сервером и в папке scriptfiles создаём новую папку users, в которой и будут сохраняться файлы игроков.

Всё! Заходим в игру регистрируемся, выходим из игры. Открываем папку scriptfiles --> users и видим там файлик ваш ник.ini.

Код: Выделить всё

Password = 123
Money 
= 0
House 
= 0
House1 
= 0
House2 
= 0
NHouse 
= 0


Можно сразу добавить денег в строку Money = 0 (Money = 1000000)

Ну вот, с регистрацией закончили. Теперь давайте создадим *Главное меню* на кнопку Alt
Главное меню
В паблик - public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)

Код: Выделить всё

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if ((newkeys==1024))
    {
        ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
    }
    return true;


Пока отложу

Теперь добавим в мод некоторые функции, которые нам понадобятся в дальнейшем.
Функции
Сначала в папке scriptfiles создадим папку House и вставим туда такой файлик - House.ini (на 10 домов)следующего содержания:

Код: Выделить всё

= Дом|0|1000|Нет|-2075.5388|-60.7090|35.3203|2365.419921|-1131.849975|1050.880004|1|0
= Дом|0|1000|Нет|-2072.8391|-60.6326|35.3203|2365.419921|-1131.849975|1050.880004|2|0
= Дом|0|1000|Нет|-2069.2888|-61.1034|35.3203|2365.419921|-1131.849975|1050.880004|3|0
= Дом|0|1000|Нет|-2064.4272|-60.6843|35.3203|2365.419921|-1131.849975|1050.880004|4|0
= Дом|0|1000|Нет|-2060.5737|-60.8517|35.3203|2365.419921|-1131.849975|1050.880004|5|0
= Дом|0|1000|Нет|-2056.6555|-60.8095|35.3203|2365.419921|-1131.849975|1050.880004|6|0
= Дом|0|1000|Нет|-2051.7888|-60.7943|35.3203|2365.419921|-1131.849975|1050.880004|7|0
= Дом|0|1000|Нет|-2048.2791|-60.8573|35.3203|2365.419921|-1131.849975|1050.880004|8|0
= Дом|0|1000|Нет|-2044.1116|-60.7381|35.3203|2365.419921|-1131.849975|1050.880004|9|0
10 
= Дом|0|1000|Нет|-2040.5066|-60.7776|35.3203|2365.419921|-1131.849975|1050.880004|10|0


Разберём его по частям:
1 - ID дома
1 = Дом - название дома
1 = Дом|0 - резервная строка (про запас :smile: )
1 = Дом|0|1000|Нет - владелец
1 = Дом|0|1000|Нет|-2075.5388|-60.7090|35.3203 - следующие 3 - координаты пикапа и текста
1 = Дом|0|1000|Нет|-2075.5388|-60.7090|35.3203|2365.419921|-1131.849975|1050.880004 - следующие 3 - координаты интерьера дома
1 = Дом|0|1000|Нет|-2075.5388|-60.7090|35.3203|2365.419921|-1131.849975|1050.880004|1 - виртуальный мир интерьера (что бы владельцы не пересекались)
1 = Дом|0|1000|Нет|-2075.5388|-60.7090|35.3203|2365.419921|-1131.849975|1050.880004|1|0 - продан или нет 0 - нет, 1 - продан.


Добавим инклуд #include <streamer>
В конец мода сток (что то связано с разбивкой строк):

Код: Выделить всё

stock split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;
    while(<= strlen(strsrc)){
        if(strsrc[i]==delimiter || i==strlen(strsrc)){
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return true;


и сток ConvertNumbers (добавляет точки в цифры - 1.000.000)

Код: Выделить всё

stock ConvertNumbers(num,delimeter[2],size = 3)
{
    new result[50];
    new x = -1;
    valstr(result,num);
    for(new i = strlen(result); i > 0; i--)
    {
        x++;
        if(== size){ strins(result,delimeter,i); x = 0; }
    }
    return result;
}


и ещё сток stock GetPlayerID(const Name[]) (узнать ID по нику)

Код: Выделить всё

stock GetPlayerID(const Name[])
{
    for(new 
ii<MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            new 
pName[MAX_PLAYER_NAME];
            
GetPlayerName(ipNamesizeof(pName));
            if(
strcmp(NamepNametrue)==0)
            {
                return 
i;
            }
        }
    }
    return -
1;

И сама система:
Начало
Создаём переменные для домов, после new PlayerInfo[MAX_PLAYERS][pInfo]; вставляем:

Код: Выделить всё

#define MAX_HOUSE 11//для 10 домов (если надо больше - увеличивайте на своё кол-во +1)
new hpid[64];//id пикапов
new HouseSale[MAX_HOUSE]; // иконка продающегося дома
new HouseOwn[MAX_HOUSE]; // иконка купленного дома
new HousePickupSale[MAX_HOUSE]; // Pickup продающегося дома
new HousePickupOwn[MAX_HOUSE]; // Pickup купленного дома
new Text3D:    House3DSale[MAX_HOUSE]; // 3D-текст продающегося дома
new Text3D:House3DOwn[MAX_HOUSE]; // 3D-текст купленного дома
enum hHouse
{
    hhouseName[128], //0 имя дома
    hhouseDohod,//уровень (уже и не помню для чего)
    hhousePrice,//цена
    hhouseOwner[MAX_PLAYER_NAME],//имя влад
Float:hhousePosX,// координаты чего то(вспомню - напишу)
Float:hhousePosY,
Float:hhousePosZ,
Float:hhouse1PosX,
Float:hhouse1PosY,
Float:hhouse1PosZ,
    hworld,// вроде вирт. мир интерьера дома
    hClok,//занят или нет
    Exit // 
};
new HouseSystem[MAX_HOUSE][hHouse];


Создаем паблики сохранения и загрузки домов из файла:

Код: Выделить всё

forward LoadHouse();
public LoadHouse()
{
    new house = ini_openFile("House/House.ini");
    new hinfo[12][128];//где 12 - число значений в файле после ключа, 128 - максимальный размер значения (?)
    new hid[64];// для строкового типа id дома
    new bstring[256];// для записи полной строки для ключа
    new string[256];
    for(new i = 1; i < MAX_HOUSE; i++)
    {
        if(HouseSystem[i][hClok]== 1)
        {
            Delete3DTextLabel(Text3D:House3DSale[i]);
            format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[i][hhouseName], HouseSystem[i][hhouseOwner], HouseSystem[i][hworld]);
            House3DSale[i] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[i][hhousePosX], HouseSystem[i][hhousePosY], HouseSystem[i][hhousePosZ], 40.0, 0, 1);
        }
        if(HouseSystem[i][hClok]== 0)
        {
            Delete3DTextLabel(Text3D:House3DOwn[i]);
            format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{0096ff}Продаётся\n{ff0000}Стоимость:  {FFFFFF}$%s\n{f984e5}id %d", HouseSystem[i][hhouseName], HouseSystem[i][hhouseOwner], ConvertNumbers(HouseSystem[i][hhousePrice],"."), HouseSystem[i][hworld]);
            House3DOwn[i] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[i][hhousePosX], HouseSystem[i][hhousePosY], HouseSystem[i][hhousePosZ], 40.0, 0, 1);
        }
        format(hid, 64, "%d", i);// запишем id дома в строку
        ini_getString(house, hid, bstring);// загрузим данные из id дома в строку bstring
        split(bstring, hinfo, '|');// разобьём строку bstring и запишем разбитые данные символом | в массив hinfo
        strmid(HouseSystem[i][hhouseName], hinfo[0], 0, strlen(hinfo[0]), 256);//название дома
        HouseSystem[i][hhouseDohod] = strval(hinfo[1]);// уровень дома
        HouseSystem[i][hhousePrice] = strval(hinfo[2]); // цена дома
        strmid(HouseSystem[i][hhouseOwner], hinfo[3], 0, strlen(hinfo[3]), 256); // владелец  дома
        HouseSystem[i][hhousePosX] = floatstr(hinfo[4]);
        HouseSystem[i][hhousePosY] = floatstr(hinfo[5]);
        HouseSystem[i][hhousePosZ] = floatstr(hinfo[6]);
        HouseSystem[i][hhouse1PosX] = floatstr(hinfo[7]);
        HouseSystem[i][hhouse1PosY] = floatstr(hinfo[8]);
        HouseSystem[i][hhouse1PosZ] = floatstr(hinfo[9]);
        HouseSystem[i][hworld] = strval(hinfo[10]);
        HouseSystem[i][hClok] = strval(hinfo[11]);
        //

    }
    ini_closeFile(house);
    return true;
}

forward SaveHouse();
public SaveHouse()
{
    new string[200];
    new house = ini_openFile("House/House.ini");
    new hid[64];
    for(new i = 1; i < MAX_HOUSE; i++)
    {

        format(string,sizeof(string),"%s|%d|%d|%s|%f|%f|%f|%f|%f|%f|%d|%d",
        HouseSystem[i][hhouseName],
        HouseSystem[i][hhouseDohod],
        HouseSystem[i][hhousePrice],
        HouseSystem[i][hhouseOwner],
        HouseSystem[i][hhousePosX],
        HouseSystem[i][hhousePosY],
        HouseSystem[i][hhousePosZ],
        HouseSystem[i][hhouse1PosX],
        HouseSystem[i][hhouse1PosY],
        HouseSystem[i][hhouse1PosZ],
        HouseSystem[i][hworld],
        HouseSystem[i][hClok]);
        format(hid,64,"%d",i);
        ini_setString(house,hid,string);
    }
    ini_closeFile(house);

i love you mxIni Mysql

! ! !


Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1151
Репутация: 74
С нами: 5 лет 4 месяца

Сообщение #2 Дим » 10 апреля 2013, 21:11

Продолжение
В паблик public OnGameModeInit() вставляем 3D текст, иконки...

Код: Выделить всё

public OnGameModeInit()
{
    new string[256];
    LoadHouse();
    for(new h = 1; h < MAX_HOUSE; h++)//MapIcon hworld
    {
        HouseSystem[h][Exit] = CreateDynamicPickup(1318, 23, 2365.098876,-1135.368774,1050.875000, -1);
        if(HouseSystem[h][hClok]== 1)
        {
            format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[h][hhouseName], HouseSystem[h][hhouseOwner], HouseSystem[h][hworld]);
            House3DSale[h] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ], 40.0, 0, 1);
            HouseSale[h] = CreateDynamicMapIcon(HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ],32,0,-1,-1,-1,150);
            HousePickupSale[h] = CreateDynamicPickup(1272, 23, HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ]+0.3, -1);
        }
        if(HouseSystem[h][hClok]== 0)
        {
            format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{0096ff}Продаётся\n{ff0000}Стоимость:  {FFFFFF}$%s\n{f984e5}id %d", HouseSystem[h][hhouseName], HouseSystem[h][hhouseOwner], ConvertNumbers(HouseSystem[h][hhousePrice],"."), HouseSystem[h][hworld]);
            House3DOwn[h] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ], 40.0, 0, 1);
            HouseOwn[h] = CreateDynamicMapIcon(HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ],31,0,-1,-1,-1,150);
            HousePickupOwn[h] = CreateDynamicPickup(1273, 23, HouseSystem[h][hhousePosX], HouseSystem[h][hhousePosY], HouseSystem[h][hhousePosZ]+0.3, -1);
        }
    }
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return true;
}


Для вывода меню на пикап. В public OnPlayerPickUpPickup(playerid, pickupid) :

Код: Выделить всё

public OnPlayerPickUpPickup(playerid, pickupid)
{
    for(new h = 1; h < MAX_HOUSE; h++)
    {
        if(pickupid == HousePickupOwn[h])
        {
            new PlayerName[MAX_PLAYER_NAME]; 
            GetPlayerName
(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
            new hid[64];// для строкового типа id дома
            hpid[playerid] = h;// id пикапа
            format(hid, sizeof(hid),"House/%iHouse.ini",h);
            if ((strcmp (HouseSystem[h][hhouseOwner], PlayerName)) && (HouseSystem[h][hClok]== 0)) ShowPlayerDialog(playerid,10,DIALOG_STYLE_MSGBOX,"Покупка дома.","Вы хотите купить этот дом?","Да", "Нет");
            if ((!strcmp (HouseSystem[h][hhouseOwner], PlayerName)) && (HouseSystem[h][hClok]== 0)) ShowPlayerDialog(playerid,20,DIALOG_STYLE_MSGBOX,"Войти в дом.","Вы хотите войти в дом?","Да", "Нет");
        }
    }
    for(new h = 1; h < MAX_HOUSE; h++)
    {
        if(pickupid == HousePickupSale[h])
        {
            new PlayerName[MAX_PLAYER_NAME]; 
            GetPlayerName
(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока
            new hid[64];// для строкового типа id дома
            hpid[playerid] = h;// id пикапа
            format(hid, sizeof(hid),"House/%iHouse.ini",h);
            if (!strcmp (HouseSystem[h][hhouseOwner], PlayerName)) ShowPlayerDialog(playerid,20,DIALOG_STYLE_MSGBOX,"Войти в дом.","Вы хотите войти в дом?","Да", "Нет");
        }
        if(pickupid == HouseSystem[h][Exit])//выход из дома
        {
            SetPlayerVirtualWorld(playerid,0);
            SetPlayerInterior(playerid,0);
            SetPlayerPos(playerid,HouseSystem[hpid[playerid]][hhousePosX],HouseSystem[hpid[playerid]][hhousePosY],HouseSystem[hpid[playerid]][hhousePosZ]);
        }
    }
    return true;

Теперь у нас есть 10 домов, которые расположены напротив АШ. При заходе на пикап вылезает окно покупки, но пока не рабочее.
Как видно на скриншоте, есть пикапы, текст и иконки на радаре.

Система домов.jpg
Система домов.jpg (88.87 КБ) 3182 просмотра



Ну что же, продолжаем...

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1151
Репутация: 74
С нами: 5 лет 4 месяца

Сообщение #3 Дим » 11 апреля 2013, 19:47

Пришло время сделать меню домов. Для этого в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) добавим следующий код:

Меню домов

Код: Выделить всё

    if(dialogid == 3)//главное меню
    {
        if(response)
        {
            if(listitem == 0)// меню домов
            {
                new text[128], text2[128], text3[128], string[128];
                if(PlayerInfo[playerid][pHouse] != 0)//1 дом
                {       //если дом есть будет написано название
                    format(string, sizeof(string), "%s", HouseSystem[PlayerInfo[playerid][pHouse]][hhouseName]);
                    text = string;
                }
                else
                
{
                    text = "Пусто";//если дома нет будет написано - Пусто
                }
                if(PlayerInfo[playerid][pHouse1] != 0)//2 дом
                {
                    format(string, sizeof(string), "%s", HouseSystem[PlayerInfo[playerid][pHouse1]][hhouseName]);
                    text2 = string;
                }
                else
                
{
                    text2 = "Пусто";
                }
                if(PlayerInfo[playerid][pHouse2] != 0)//3 дом
                {
                    format(string, sizeof(string), "%s", HouseSystem[PlayerInfo[playerid][pHouse2]][hhouseName]);
                    text3 = string;
                }
                else
                
{
                    text3 = "Пусто";
                }
                new str[128], sctring[256];
                format(str,sizeof(str),"1. %s\n",text);
                strcat(sctring,str);
                format(str,sizeof(str),"2. %s\n",text2);
                strcat(sctring,str);
                format(str,sizeof(str),"3. %s\n",text3);
                strcat(sctring,str);
                ShowPlayerDialog(playerid,30,DIALOG_STYLE_LIST,"Дом",sctring,"Выбрать", "Выход");
                return true;
                }
               }
        }

Если у игрока есть дом, то в меню будет написано его название. Если нет - Пусто

Система домов.jpg
Система домов.jpg (50.29 КБ) 3177 просмотров
i love you mxIni Mysql

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1151
Репутация: 74
С нами: 5 лет 4 месяца

Сообщение #4 Дим » 12 апреля 2013, 17:08

Далее делаем действия для меню покупки дома. В паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) добавим:

Покупка

Код: Выделить всё

    if(dialogid == 10 && response)
    {
        new string[128];
        new hid[64];
        format(hid, sizeof(hid),"House/%iHouse.ini",hpid[playerid]);
        if(PlayerInfo[playerid][pNHouse]>=3)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Вы не можете иметь более {ffffff}трёх {ff0000}домов.");
        if(HouseSystem[hpid[playerid]][hhousePrice] > GetPlayerMoney(playerid))return SendClientMessage(playerid,0xFF0000AA"{f984e5}У Вас недостаточно денег, чтобы купить дом.");
        if(IsPlayerConnected(GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])))//если продавец в игре
        {
            GivePlayerMoney(GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner]), HouseSystem[hpid[playerid]][hhousePrice]);//даём денег
            PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse]-=1;
//забираем 1 количество домов у продавца
            if(PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse]== hpid[playerid])PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse]=0;
//забираем id 1 у продавца
            if(PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse1]== hpid[playerid])PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse1]=0;
//забираем id 2 у продавца
            if(PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse2]== hpid[playerid])PlayerInfo[GetPlayerID(HouseSystem[hpid[playerid]][hhouseOwner])][pHouse2]=0;
//забираем id 3 у продавца
        }
        else{//если продавец не в игре
            format(account,sizeof(account),"Users/%s.ini",HouseSystem[hpid[playerid]][hhouseOwner]);//ищем акк продавца
            new iniFile = ini_openFile(account);//открываем файл продавца
            ini_getInteger(iniFile, "Money", PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pMoney]);//узнаём сколько денег у продавца
            ini_setInteger(iniFile, "Money" , HouseSystem[hpid[playerid]][hhousePrice]+ PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pMoney]); // Запишем денег продавцу
            ini_getInteger(iniFile, "NHouse" , PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pNHouse]);//узнаём количество домов у продавца
            ini_setInteger(iniFile, "NHouse" , PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pNHouse]-1);//забираем 1 количество домов у продавца
            ini_getInteger(iniFile, "House" , PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse]);//узнаём id 1 биза
            if(PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse]== hpid[playerid]) ini_setInteger(iniFile, "House" , 0);//забираем id 1 у продавца
            ini_getInteger(iniFile, "House1" , PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse1]);
            if(PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse1]== hpid[playerid]) ini_setInteger(iniFile, "House1" , 0);
            ini_getInteger(iniFile, "House2" , PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse2]);//узнаём id 3 биза
            if(PlayerInfo[HouseSystem[hpid[playerid]][hhouseOwner]][pHouse2]== hpid[playerid]) ini_setInteger(iniFile, "House2" , 0);//забираем id 3 у продавца
            ini_closeFile(iniFile);} // Закроем файл продавца
        GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник покупателя
        HouseSystem[hpid[playerid]][hClok] = 1;//закрываем дом от продажи
        HouseSystem[hpid[playerid]][hhouseOwner] = PlayerName;//записываем ник покупателя
        PlayerInfo[playerid][pNHouse] += 1;//прибавляем 1 кол во домов
        GivePlayerMoney(playerid, -HouseSystem[hpid[playerid]][hhousePrice]);//забираем деньги у покупателя
        DestroyDynamicPickup(HousePickupOwn[hpid[playerid]]);
        HousePickupSale[hpid[playerid]] = CreateDynamicPickup(1272, 23, HouseSystem[hpid[playerid]][hhousePosX], HouseSystem[hpid[playerid]][hhousePosY], HouseSystem[hpid[playerid]][hhousePosZ]+0.3, -1);
        DestroyDynamicMapIcon(HouseOwn[hpid[playerid]]);
        HouseSale[hpid[playerid]] = CreateDynamicMapIcon(HouseSystem[hpid[playerid]][hhousePosX], HouseSystem[hpid[playerid]][hhousePosY], HouseSystem[hpid[playerid]][hhousePosZ],32,0,-1,-1,-1,150);
        Delete3DTextLabel(Text3D:House3DOwn[hpid[playerid]]);
        format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[hpid[playerid]][hhouseName], PlayerName, HouseSystem[hpid[playerid]][hworld]);
        House3DSale[hpid[playerid]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[hpid[playerid]][hhousePosX], HouseSystem[hpid[playerid]][hhousePosY], HouseSystem[hpid[playerid]][hhousePosZ], 40.0, 0, 1);
        SaveHouse();
        LoadHouse();
        if(PlayerInfo[playerid][pHouse]==0&&PlayerInfo[playerid][pHouse1]==0&&PlayerInfo[playerid][pHouse2]==0) return PlayerInfo[playerid][pHouse] = hpid[playerid];//записывает id биз
        if(PlayerInfo[playerid][pHouse]!=0&&PlayerInfo[playerid][pHouse1]==0&&PlayerInfo[playerid][pHouse2]==0) return PlayerInfo[playerid][pHouse1] = hpid[playerid];
        if(PlayerInfo[playerid][pHouse]!=0&&PlayerInfo[playerid][pHouse1]!=0&&PlayerInfo[playerid][pHouse2]==0) return PlayerInfo[playerid][pHouse2] = hpid[playerid];
        if(PlayerInfo[playerid][pHouse]!=0&&PlayerInfo[playerid][pHouse1]==0&&PlayerInfo[playerid][pHouse2]!=0) return PlayerInfo[playerid][pHouse1] = hpid[playerid];
        if(PlayerInfo[playerid][pHouse]==0&&PlayerInfo[playerid][pHouse1]!=0&&PlayerInfo[playerid][pHouse2]!=0) return PlayerInfo[playerid][pHouse] = hpid[playerid];
        if(PlayerInfo[playerid][pHouse]==0&&PlayerInfo[playerid][pHouse1]==0&&PlayerInfo[playerid][pHouse2]!=0) return PlayerInfo[playerid][pHouse] = hpid[playerid];
        if(PlayerInfo[playerid][pHouse]==0&&PlayerInfo[playerid][pHouse1]!=0&&PlayerInfo[playerid][pHouse2]==0) return PlayerInfo[playerid][pHouse] = hpid[playerid];
    

... и для меню входа в дом, в этот же паблик:
Вход

Код: Выделить всё

//========================== вход в дом ========================================
    if(dialogid == 20 && response)// вход в дом
    {
        for(new h = 1; h < MAX_HOUSE; h++)
        {
            {
                SetPlayerVirtualWorld(playerid,HouseSystem[h][hworld]);
                SetPlayerInterior(playerid,8);
                SetPlayerPos(playerid,2365.42,-1131.85,1050.88);
            }
        }
    }
Всё в тот же паблик добавим код для меню ("Продать дом", "Снять с продажи", "Телепорт к дому")
Спойлер

Код: Выделить всё

    if(dialogid == 30)// меню домов
    {
        if(response)
        {
            if(listitem == 0)//дом 1
            {
                if(PlayerInfo[playerid][pHouse] == 0) return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Первый слот пока пустой."), ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
                new string[128];
                format(string,sizeof(string),"{00ff00}Дом: {ffff00}%s",HouseSystem[PlayerInfo[playerid][pHouse]][hhouseName]);
                new str[128],sctring[128];
                format(str,sizeof(str),"Продать дом\n");
                strcat(sctring,str);
                format(str,sizeof(str),"Снять с продажи\n");
                strcat(sctring,str);
                format(str,sizeof(str),"{42aaff}Телепорт к дому");
                strcat(sctring,str);
                ShowPlayerDialog(playerid, 40, DIALOG_STYLE_LIST, string, sctring, "Выбрать", "Выход");
            }
            if(listitem == 1)//дом 2
            {
                if(PlayerInfo[playerid][pHouse1] == 0) return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Второй слот пока пустой."), ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
                new string[128];
                format(string,sizeof(string),"{00ff00}Дом: {ffff00}%s",HouseSystem[PlayerInfo[playerid][pHouse1]][hhouseName]);
                new str[128],sctring[128];
                format(str,sizeof(str),"Продать дом\n");
                strcat(sctring,str);
                format(str,sizeof(str),"Снять с продажи\n");
                strcat(sctring,str);
                format(str,sizeof(str),"{42aaff}Телепорт к дому");
                strcat(sctring,str);
                ShowPlayerDialog(playerid, 41, DIALOG_STYLE_LIST, string, sctring, "Выбрать", "Выход");
            }
            if(listitem == 2)//дом 3
            {
                if(PlayerInfo[playerid][pHouse2] == 0) return SendClientMessage(playerid,0xFF0000AA,"Третий слот пока пустой."), ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
                new string[128];
                format(string,sizeof(string),"{00ff00}Дом: {ffff00}%s",HouseSystem[PlayerInfo[playerid][pHouse2]][hhouseName]);
                new str[128],sctring[128];
                format(str,sizeof(str),"Продать дом\n");
                strcat(sctring,str);
                format(str,sizeof(str),"Снять с продажи\n");
                strcat(sctring,str);
                format(str,sizeof(str),"{42aaff}Телепорт к дому");
                strcat(sctring,str);
                ShowPlayerDialog(playerid, 42, DIALOG_STYLE_LIST, string, sctring, "Выбрать", "Выход");
            }
        }
        else ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
    

... и действия для него:

Спойлер

Код: Выделить всё

    if(dialogid == 40)// меню дом 1
    {
        if(response)
        {
            if(listitem == 0)//Продать дом
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse]][hClok] == 0)return SendClientMessage(playerid,0xFF0000AA,"{00ff00}SempleR: {f984e5}Дом уже продаётся.");
                ShowPlayerDialog(playerid,50,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            }
            if(listitem == 1)//Снять с продажи
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse]][hClok] == 1)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Дом уже снят с продажи.");
                new string[128];
                HouseSystem[PlayerInfo[playerid][pHouse]][hClok] = 1;
                DestroyDynamicPickup(HousePickupOwn[PlayerInfo[playerid][pHouse]]);
                HousePickupSale[PlayerInfo[playerid][pHouse]] = CreateDynamicPickup(1272, 23, HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ]+0.3, -1);
                DestroyDynamicMapIcon(HouseOwn[PlayerInfo[playerid][pHouse]]);
                HouseSale[PlayerInfo[playerid][pHouse]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ],32,0,-1,-1,-1,150);
                Delete3DTextLabel(Text3D:House3DOwn[PlayerInfo[playerid][pHouse]]);
                format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse]][hhouseName],HouseSystem[PlayerInfo[playerid][pHouse]][hhouseOwner],HouseSystem[PlayerInfo[playerid][pHouse]][hworld]);
                House3DSale[PlayerInfo[playerid][pHouse]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ], 40.0, 0, 1);
                SaveHouse();
                LoadHouse();
            }
            if(listitem == 2)//Телепорт к дому
            {
                SetPlayerPos(playerid,HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ]);// функция изменяет текущую позицию онлайн игрока на карте
            }
        }
        else ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
    }
    if(dialogid == 41)// меню дом 2
    {
        if(response)
        {
            if(listitem == 0)//Продать дом
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse1]][hClok] == 0)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Дом уже продаётся.");
                ShowPlayerDialog(playerid,51,DIALOG_STYLE_INPUT,"Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            }
            if(listitem == 1)//Снять с продажи
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse1]][hClok] == 1)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Дом уже снят с продажи.");
                new string[128];
                HouseSystem[PlayerInfo[playerid][pHouse1]][hClok] = 1;
                DestroyDynamicPickup(HousePickupOwn[PlayerInfo[playerid][pHouse1]]);
                HousePickupSale[PlayerInfo[playerid][pHouse1]] = CreateDynamicPickup(1272, 23, HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ]+0.3, -1);
                DestroyDynamicMapIcon(HouseOwn[PlayerInfo[playerid][pHouse1]]);
                HouseSale[PlayerInfo[playerid][pHouse1]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ],32,0,-1,-1,-1,150);
                Delete3DTextLabel(Text3D:House3DOwn[PlayerInfo[playerid][pHouse1]]);
                format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse1]][hhouseName],HouseSystem[PlayerInfo[playerid][pHouse1]][hhouseOwner],HouseSystem[PlayerInfo[playerid][pHouse1]][hworld]);
                House3DSale[PlayerInfo[playerid][pHouse1]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ], 40.0, 0, 1);
                SaveHouse();
                LoadHouse();
            }
            if(listitem == 2)//Телепорт к дому
            {
                SetPlayerPos(playerid,HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ]);// функция изменяет текущую позицию онлайн игрока на карте
            }
        }
        else ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
    }
    if(dialogid == 42)// меню дом 3
    {
        if(response)
        {
            if(listitem == 0)//Продать дом
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse2]][hClok] == 0)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Дом уже продаётся.");
                ShowPlayerDialog(playerid,52,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            }
            if(listitem == 1)//Снять с продажи
            {
                if(HouseSystem[PlayerInfo[playerid][pHouse2]][hClok] == 1)return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Дом уже снят с продажи.");
                new string[128];
                HouseSystem[PlayerInfo[playerid][pHouse2]][hClok] = 1;
                DestroyDynamicPickup(HousePickupOwn[PlayerInfo[playerid][pHouse2]]);
                HousePickupSale[PlayerInfo[playerid][pHouse2]] = CreateDynamicPickup(1272, 23, HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ]+0.3, -1);
                DestroyDynamicMapIcon(HouseOwn[PlayerInfo[playerid][pHouse2]]);
                HouseSale[PlayerInfo[playerid][pHouse2]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ],32,0,-1,-1,-1,150);
                Delete3DTextLabel(Text3D:House3DOwn[PlayerInfo[playerid][pHouse2]]);
                format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse2]][hhouseName],HouseSystem[PlayerInfo[playerid][pHouse2]][hhouseOwner],HouseSystem[PlayerInfo[playerid][pHouse2]][hworld]);
                House3DSale[PlayerInfo[playerid][pHouse2]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ], 40.0, 0, 1);
                SaveHouse();
                LoadHouse();
            }
            if(listitem == 2)//Телепорт к дому
            {
                SetPlayerPos(playerid,HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ]);// функция изменяет текущую позицию онлайн игрока на карте
            }
        }
        else ShowPlayerDialog(playerid,3,DIALOG_STYLE_LIST,"Главное меню","Дома", "Выбрать", "Выход");
    }

Ну и последний штрих - действия для меню продажи дома:

Спойлер

Код: Выделить всё

//===================== продажа дома ===========================================
    if(dialogid == 50)// Продажа дом 1
    {
        if(response) //Если была нажата 1 кнопка
        {
            if(!strlen(inputtext))SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000"),ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            else{
                new string[128];
                new hid[64];
                new houseprod = strval(inputtext);
                if(houseprod < 1 || houseprod > 10000000){
                    SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000");
                    ShowPlayerDialog(playerid,41,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
                    return true;}
                format(hid, sizeof(hid),"House/%iHouse.ini",hpid[playerid]);
                GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока (можно и не делать)
                if (strcmp (HouseSystem[hpid[playerid]][hhouseOwner], PlayerName, true)) return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Это не Ваш дом.");
                {
                    HouseSystem[PlayerInfo[playerid][pHouse]][hhousePrice]= houseprod;
                    HouseSystem[PlayerInfo[playerid][pHouse]][hClok] = 0;
                    DestroyDynamicPickup(HousePickupSale[PlayerInfo[playerid][pHouse]]);
                    HousePickupOwn[PlayerInfo[playerid][pHouse]] = CreateDynamicPickup(1273, 23, HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ]+0.3, -1);
                    DestroyDynamicMapIcon(HouseSale[PlayerInfo[playerid][pHouse]]);
                    HouseOwn[PlayerInfo[playerid][pHouse]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ],31,0,-1,-1,-1,150);
                    Delete3DTextLabel(Text3D:House3DSale[PlayerInfo[playerid][pHouse]]);
                    format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{0096ff}Продаётся\n{ff0000}Стоимость:  {FFFFFF}$%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse]][hhouseName], PlayerName, ConvertNumbers(HouseSystem[PlayerInfo[playerid][pHouse]][hhousePrice],"."), HouseSystem[PlayerInfo[playerid][pHouse]][hworld]);
                    House3DOwn[PlayerInfo[playerid][pHouse]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse]][hhousePosZ], 40.0, 0, 1);
                    SaveHouse();
                    LoadHouse();
                }
            }
        }
    }
    if(dialogid == 51)// Продажа дом 2
    {
        if(response) //Если была нажата 1 кнопка
        {
            if(!strlen(inputtext))SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000"),ShowPlayerDialog(playerid,42,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            else{
                new string[128];
                new hid[64];
                new houseprod1 = strval(inputtext);
                if(houseprod1 < 1 || houseprod1 > 10000000){
                    SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000");
                    ShowPlayerDialog(playerid,42,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
                    return true;}
                format(hid, sizeof(hid),"House/%iHouse.ini",hpid[playerid]);
                GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока (можно и не делать)
                if (strcmp (HouseSystem[hpid[playerid]][hhouseOwner], PlayerName, true)) return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Это не Ваш дом.");
                {
                    HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePrice]= houseprod1;
                    HouseSystem[PlayerInfo[playerid][pHouse1]][hClok] = 0;
                    DestroyDynamicPickup(HousePickupSale[PlayerInfo[playerid][pHouse1]]);
                    HousePickupOwn[PlayerInfo[playerid][pHouse1]] = CreateDynamicPickup(1273, 23, HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ]+0.3, -1);
                    DestroyDynamicMapIcon(HouseSale[PlayerInfo[playerid][pHouse1]]);
                    HouseOwn[PlayerInfo[playerid][pHouse1]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ],31,0,-1,-1,-1,150);
                    Delete3DTextLabel(Text3D:House3DSale[PlayerInfo[playerid][pHouse1]]);
                    format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{0096ff}Продаётся\n{ff0000}Стоимость:  {FFFFFF}$%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse1]][hhouseName], PlayerName, ConvertNumbers(HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePrice],"."), HouseSystem[PlayerInfo[playerid][pHouse1]][hworld]);
                    House3DOwn[PlayerInfo[playerid][pHouse1]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse1]][hhousePosZ], 40.0, 0, 1);
                    SaveHouse();
                    LoadHouse();
                }
            }
        }
    }
    if(dialogid == 52)// Продажа дом 3
    {
        if(response) //Если была нажата 1 кнопка
        {
            if(!strlen(inputtext))SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000"),ShowPlayerDialog(playerid,43,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
            else{
                new string[128];
                new hid[64];
                new houseprod2 = strval(inputtext);
                if(houseprod2 < 1 || houseprod2 > 10000000){
                    SendClientMessage(playerid, 0xFF0000AA,"{f984e5}Введите сумму от {ffffff}1 {ff0000}до {ffffff}10.000.000");
                    ShowPlayerDialog(playerid,43,DIALOG_STYLE_INPUT,"{ffff00}Продать дом","{ffffff}Введите сумму от {ff0000}1 {ffffff}до {ff0000}10.000.000","Да","Нет");
                    return true;}
                format(hid, sizeof(hid),"House/%iHouse.ini",hpid[playerid]);
                GetPlayerName(playerid,PlayerName,sizeof(PlayerName));// Узнаем ник игрока (можно и не делать)
                if (strcmp (HouseSystem[hpid[playerid]][hhouseOwner], PlayerName, true)) return SendClientMessage(playerid,0xFF0000AA,"{f984e5}Это не Ваш дом.");
                {
                    HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePrice]= houseprod2;
                    HouseSystem[PlayerInfo[playerid][pHouse2]][hClok] = 0;
                    DestroyDynamicPickup(HousePickupSale[PlayerInfo[playerid][pHouse2]]);
                    HousePickupOwn[PlayerInfo[playerid][pHouse2]] = CreateDynamicPickup(1273, 23, HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ]+0.3, -1);
                    DestroyDynamicMapIcon(HouseSale[PlayerInfo[playerid][pHouse2]]);
                    HouseOwn[PlayerInfo[playerid][pHouse2]] = CreateDynamicMapIcon(HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ],31,0,-1,-1,-1,150);
                    Delete3DTextLabel(Text3D:House3DSale[PlayerInfo[playerid][pHouse2]]);
                    format(string, 256, "{FF9900}Дом: {FFFFFF}%s\n{00ff00}Владелец: {FFFFFF}%s\n{0096ff}Продаётся\n{ff0000}Стоимость:  {FFFFFF}$%s\n{f984e5}id %d", HouseSystem[PlayerInfo[playerid][pHouse2]][hhouseName], PlayerName, ConvertNumbers(HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePrice],"."), HouseSystem[PlayerInfo[playerid][pHouse2]][hworld]);
                    House3DOwn[PlayerInfo[playerid][pHouse2]] = Create3DTextLabel(string, 0xFEFEFEFE, HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosX], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosY], HouseSystem[PlayerInfo[playerid][pHouse2]][hhousePosZ], 40.0, 0, 1);
                    SaveHouse();
                    LoadHouse();
                }
            }
        }
    }

Всё! Теперь всё это буду приводить в божеский вид.

Добавлено спустя 2 дня 1 час:
Всё готово! Тык
i love you mxIni Mysql


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Архив»

Кто сейчас на форуме

Сейчас этот раздел просматривают: 1 гость