Перейти к содержанию
Авторизация  
ByMeR_OK

Система Квартир

Рекомендуемые сообщения

ByMeR_OK

Сегодня я расскажу как зделать систему квартир на сервере

ищем в моде

enum pInfo
и выше вставляем

enum fInfo                                                                      
{
    fOwned,                                                                     
    fOwner[MAX_PLAYER_NAME],                                                    
    Float:fEntrancex,                                                           
    Float:fEntrancey,                                                           
    Float:fEntrancez,                                                           
    Float:fExitx,                                                               
    Float:fExity,                                                               
    Float:fExitz,                                                               
    fInt,                                                                       
    fVirtWorld,                                                                 
    fValue,                                                                     
    fLock,                                                                      
    fRent,
    fRentabil,
    fTakings,
    fDate,                                                                      
    fLevel                                                                      
};
new FlatsInfo[27][fInfo];                                                      
new FlatPickup[sizeof(FlatsInfo)];                                              
new Text3D: Flat3D[sizeof(FlatsInfo)];                                         
new flathouse1[2];                                                                 
new flathouse2[2];                                                                 
new flathouse3[2];
Потом идём в public SetPlayerSpawn и ищем там

new house = PlayerInfo[playerid][pPhousekey];
после этого вставляем

new flat = PlayerInfo[playerid][pFlatKey];
в этомже паблике немного ниже вставляем

if(flat != 255)
        {
            if(SpawnChange[playerid]) //If 1, then you get to your house, else spawn somewhere else
            {
                SetPlayerToTeamColor(playerid);
                SetPlayerInterior(playerid,FlatsInfo[flat][fInt]);
                SetPlayerPos(playerid, FlatsInfo[flat][fExitx], FlatsInfo[flat][fExity],FlatsInfo[flat][fExitz]); // Warp the player
                SetPlayerVirtualWorld(playerid,flat+9999);
                return 1;
            }
        }
теперь создадим stock

stock UpdateFlat(idx)
{
    new text[600];
    if(FlatsInfo[idx][fOwned] == 0)
    {
        format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nЦена: {7CFC00}%d{FFFFFF}\nУровень: {7CFC00}%d{FFFFFF}\n\nЧтобы купить квартиру, введите {7CFC00}/buyflat{FFFFFF}",idx,FlatsInfo[idx][fValue],FlatsInfo[idx][fLevel]);
        Update3DTextLabelText(Flat3D[idx], 0xFFFFFFFF, text);
        DestroyPickup(FlatPickup[idx]);
        FlatPickup[idx] = CreatePickup(1273, 23, FlatsInfo[idx][fEntrancex], FlatsInfo[idx][fEntrancey], FlatsInfo[idx][fEntrancez], FlatsInfo[idx][fVirtWorld]);
    }
    else if(FlatsInfo[idx][fOwned] == 1)
    {
        format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s",idx,FlatsInfo[idx][fOwner]);
        Update3DTextLabelText(Flat3D[idx], 0xFFFFFFFF, text);
        DestroyPickup(FlatPickup[idx]);
        FlatPickup[idx] = CreatePickup(1272, 23, FlatsInfo[idx][fEntrancex], FlatsInfo[idx][fEntrancey], FlatsInfo[idx][fEntrancez], FlatsInfo[idx][fVirtWorld]);
    }
}
теперь ищем public LoadProperty

и после встовляем

public LoadFlats()
{
    new arrCoords[17][64];
    new strFromFile2[256];
    new File: file = fopen("flats.cfg", io_read);
    if (file)
    {
        new idx;
        while (idx < sizeof(FlatsInfo))
        {
            fread(file, strFromFile2);
            split(strFromFile2, arrCoords, ',');
            FlatsInfo[idx][fOwned] = strval(arrCoords[0]);
            strmid(FlatsInfo[idx][fOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
            FlatsInfo[idx][fEntrancex] = floatstr(arrCoords[2]);
            FlatsInfo[idx][fEntrancey] = floatstr(arrCoords[3]);
            FlatsInfo[idx][fEntrancez] = floatstr(arrCoords[4]);
            FlatsInfo[idx][fExitx] = floatstr(arrCoords[5]);
            FlatsInfo[idx][fExity] = floatstr(arrCoords[6]);
            FlatsInfo[idx][fExitz] = floatstr(arrCoords[7]);
            FlatsInfo[idx][fInt] = strval(arrCoords[8]);
            FlatsInfo[idx][fVirtWorld] = strval(arrCoords[9]);
            FlatsInfo[idx][fValue] = strval(arrCoords[10]);
            FlatsInfo[idx][fLock] = strval(arrCoords[11]);
            FlatsInfo[idx][fRent] = strval(arrCoords[12]);
            FlatsInfo[idx][fRentabil] = strval(arrCoords[13]);
            FlatsInfo[idx][fTakings] = strval(arrCoords[14]);
            FlatsInfo[idx][fDate] = strval(arrCoords[15]);
            FlatsInfo[idx][fLevel] = strval(arrCoords[16]);
            printf("Квартира: [%d] | Владелец: [%s]",idx,FlatsInfo[idx][fOwner]);
            idx++;
        }
        fclose(file);
    }
    return 1;
}
После,в public OnGameModeInit после всех машин и т.д вы увидите вот такую надпись

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

for(new f = 0; f < sizeof(FlatsInfo); f++)
    {
        new text[600];
        if(FlatsInfo[f][fOwned] == 0)
        {
            format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nЦена: {7CFC00}%d{FFFFFF}\nУровень: {7CFC00}%d{FFFFFF}\n\nЧтобы купить квартиру, введите {7CFC00}/buyflat{FFFFFF}",f,FlatsInfo[f][fValue],FlatsInfo[f][fLevel]);
            Flat3D[f] = Create3DTextLabel(text,0xFFFFFFFF,FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez]+1,10,FlatsInfo[f][fVirtWorld],1);
            FlatPickup[f] = CreatePickup(1272, 23, FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez], FlatsInfo[f][fVirtWorld]); pickups++;
        }
        else if(FlatsInfo[f][fOwned] == 1)
        {
            format(text,sizeof(text),"{FF6347} * Квартира * {FFFFFF}\nНомер: {7CFC00}%d{FFFFFF}\nВладелец: {7CFC00}%s",f,FlatsInfo[f][fOwner]);
            Flat3D[f] = Create3DTextLabel(text,0xFFFFFFFF,FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez]+1,10,FlatsInfo[f][fVirtWorld],1);
            FlatPickup[f] = CreatePickup(1272, 23, FlatsInfo[f][fEntrancex], FlatsInfo[f][fEntrancey], FlatsInfo[f][fEntrancez], FlatsInfo[f][fVirtWorld]); pickups++;
        }
    }
в public DateProp добавить сразу после }

for(new h = 0; h < sizeof(FlatsInfo); h++)
    {
        if (strcmp(playername, FlatsInfo[h][fOwner], true) == 0)
        {
            FlatsInfo[h][fDate] = curdate;
            OnPropUpdate();
        }
    }
потом идём в public OnPropUpdate()

и в конце будет Sbizz.cfg или Bizz.cfg

у всех по разному,после этого встовляем

idx = 0;
    while (idx < sizeof(FlatsInfo))
    {
        new coordsstring[256];
        format(coordsstring, sizeof(coordsstring), "%d,%s,%f,%f,%f,%f,%f,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
        FlatsInfo[idx][fOwned],
        FlatsInfo[idx][fOwner],
        FlatsInfo[idx][fEntrancex],
        FlatsInfo[idx][fEntrancey],
        FlatsInfo[idx][fEntrancez],
        FlatsInfo[idx][fExitx],
        FlatsInfo[idx][fExity],
        FlatsInfo[idx][fExitz],
        FlatsInfo[idx][fInt],
        FlatsInfo[idx][fVirtWorld],
        FlatsInfo[idx][fValue],
        FlatsInfo[idx][fLock],
        FlatsInfo[idx][fRent],
        FlatsInfo[idx][fRentabil],
        FlatsInfo[idx][fTakings],
        FlatsInfo[idx][fDate],
        FlatsInfo[idx][fLevel]);
        if(idx == 0)
        {
            file2 = fopen("flats.cfg", io_write);
        }
        else
        {
            file2 = fopen("flats.cfg", io_append);
        }
        fwrite(file2, coordsstring);
        idx++;
        fclose(file2);
    }
Далее добавим команды в public OnPlayerCommandText:

if(strcmp(cmd, "/flat", true) == 0)
    {
        GetPlayerName(playerid, playername, sizeof(playername));
        if(PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0)
        {
            ShowPlayerDialog(playerid,50,DIALOG_STYLE_LIST,"Квартира"," - Открыть/Закрыть\n - Продать","Далее","Выход");
        }
        else
        {
            SendClientMessage(playerid,COLOR_GREY, "Ошибка: У вас нет квартиры.");
            return 1;
        }
    }
    if(strcmp(cmd, "/sellflat", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            GetPlayerName(playerid, playername, sizeof(playername));
            if(PlayerInfo[playerid][pFlatKey] == 255)
            {
                SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас нет квартиры.");
                return 1;
            }
            if(PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0)
            {
                new flat = PlayerInfo[playerid][pFlatKey];
                FlatsInfo[flat][fLock] = 1;
                FlatsInfo[flat][fOwned] = 0;
                GetPlayerName(playerid, sendername, sizeof(sendername));
                strmid(FlatsInfo[flat][fOwner], "-", 0, strlen("-"), 255);
                GivePlayerMoney(playerid,FlatsInfo[flat][fValue]);
                PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
                format(string, sizeof(string), "~w~Congratulations~n~ You have sold your property for ~n~~g~$%d", FlatsInfo[flat][fValue]);
                GameTextForPlayer(playerid, string, 10000, 3);
                PlayerInfo[playerid][pFlatKey] = 255;
                //OnPlayerSave(playerid);
                UpdateFlat(flat);
                return 1;
            }
            else
            {
                SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас нет квартиры.");
                return 1;
            }
        }
        return 1;
    }

    if(strcmp(cmd, "/buyflat", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            new Float:oldposx, Float:oldposy, Float:oldposz;
            GetPlayerName(playerid, playername, sizeof(playername));
            GetPlayerPos(playerid, oldposx, oldposy, oldposz);
            for(new h = 0; h < sizeof(FlatsInfo); h++)
            {
                if(PlayerToPoint(2.0, playerid, FlatsInfo[h][fEntrancex], FlatsInfo[h][fEntrancey], FlatsInfo[h][fEntrancez]) && FlatsInfo[h][fOwned] == 0 && GetPlayerVirtualWorld(playerid) == FlatsInfo[h][fVirtWorld])
                {
                    if(PlayerInfo[playerid][pLevel] < FlatsInfo[h][fLevel])
                    {
                        format(string, sizeof(string), "Ошибка: Вам нужен %d уровень, чтобы купить эту квартиру.", FlatsInfo[h][fLevel]);
                        SendClientMessage(playerid, COLOR_GRAD5, string);
                        return 1;
                    }
                    if((PlayerInfo[playerid][pPhousekey] != 255 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]][hOwner], true) == 0) || (PlayerInfo[playerid][pFlatKey] != 255 && strcmp(playername, FlatsInfo[PlayerInfo[playerid][pFlatKey]][fOwner], true) == 0))
                    {
                        SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас уже есть дом / квартира.");
                        return 1;
                    }
                    if(GetPlayerMoney(playerid) > FlatsInfo[h][fValue])
                    {
                        PlayerInfo[playerid][pFlatKey] = h;
                        FlatsInfo[h][fOwned] = 1;
                        GetPlayerName(playerid, sendername, sizeof(sendername));
                        strmid(FlatsInfo[h][fOwner], sendername, 0, strlen(sendername), 255);
                        GivePlayerMoney(playerid,-FlatsInfo[h][fValue]);
                        PlayerPlayMusic(playerid);
                        SetPlayerInterior(playerid,FlatsInfo[h][fInt]);
                        SetPlayerVirtualWorld(playerid,h+9999);
                        SetPlayerPos(playerid,FlatsInfo[h][fExitx],FlatsInfo[h][fExity],FlatsInfo[h][fExitz]);
                        GameTextForPlayer(playerid, "~w~Welcome Flat~n~You can exit at any time by moving to this door and typing /exit", 5000, 3);
                        PlayerInfo[playerid][pInt] = FlatsInfo[h][fInt];
                        SendClientMessage(playerid, COLOR_WHITE, "Вы купили квартиру!");
                        SendClientMessage(playerid, COLOR_WHITE, "Используйте /flat для управления ею!");
                        DateProp(playerid);
                        //OnPlayerSave(playerid);
                        UpdateFlat(h);
                        return 1;
                    }
                    else
                    {
                        SendClientMessage(playerid, COLOR_WHITE, "Ошибка: У вас не хватает денег!");
                        return 1;
                    }
                }
            }
        }
        return 1;
    }
После ищем команду /enter и встовляем в неё

for(new i = 0; i < sizeof(FlatsInfo); i++)
            {
                if (PlayerToPoint(3, playerid,FlatsInfo[i][fEntrancex], FlatsInfo[i][fEntrancey], FlatsInfo[i][fEntrancez]) && GetPlayerVirtualWorld(playerid) == FlatsInfo[i][fVirtWorld])
                {
                    //printf("Found House :%d",i);
                    if(PlayerInfo[playerid][pFlatKey] == i || FlatsInfo[i][fLock] == 0)
                    {
                        SetPlayerVirtualWorld(playerid,i+9999);
                        SetPlayerInterior(playerid,FlatsInfo[i][fInt]);
                        SetPlayerPos(playerid,FlatsInfo[i][fExitx],FlatsInfo[i][fExity],FlatsInfo[i][fExitz]);
                        GameTextForPlayer(playerid, "~w~Welcome Kvartira", 5000, 1);
                        PlayerInfo[playerid][pInt] = FlatsInfo[i][fInt];
                    }
                    else
                    {
                        GameTextForPlayer(playerid, "~r~Locked", 5000, 1);
                    }
                }
            }
После ищем команду /exit и встовляем туда

for(new i = 0; i <  sizeof(FlatsInfo); i++)
            {
                if(GetPlayerVirtualWorld(playerid) == i+9999)
                {
                    if (PlayerToPoint(3, playerid,FlatsInfo[i][fExitx], FlatsInfo[i][fExity], FlatsInfo[i][fExitz]))
                    {
                        SetPlayerInterior(playerid,3);
                        SetPlayerVirtualWorld(playerid,FlatsInfo[i][fVirtWorld]);
                        SetPlayerPos(playerid,FlatsInfo[i][fEntrancex],FlatsInfo[i][fEntrancey],FlatsInfo[i][fEntrancez]);
                    }
                }
            }
Потом в public OnDialogResponse добавим

if(dialogid == 50)
    {
        if(response)
        {
            if(listitem == 0)
            {
                for(new i = 0; i < sizeof(FlatsInfo); i++)
                {
                    if ((PlayerToPoint(3, playerid,FlatsInfo[i][fEntrancex], FlatsInfo[i][fEntrancey], FlatsInfo[i][fEntrancez]) && GetPlayerVirtualWorld(playerid) == FlatsInfo[i][fVirtWorld]) || (PlayerToPoint(3, playerid,FlatsInfo[i][fExitx], FlatsInfo[i][fExity], FlatsInfo[i][fExitz]) && GetPlayerVirtualWorld(playerid) == i+9999))
                    {
                        if(PlayerInfo[playerid][pFlatKey] == i)
                        {
                            if(FlatsInfo[i][fLock] == 1)
                            {
                                FlatsInfo[i][fLock] = 0;
                                SendClientMessage(playerid, COLOR_WHITE, "Квартира открыта");
                                PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
                                return 1;
                            }
                            if(FlatsInfo[i][fLock] == 0)
                            {
                                FlatsInfo[i][fLock] = 1;
                                SendClientMessage(playerid, COLOR_WHITE, "Квартира закрыта");
                                PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
                                return 1;
                            }
                        }
                        else
                        {
                            SendClientMessage(playerid, COLOR_GREY, "Это не ваша квартира.");
                            return 1;
                        }
                    }
                }
            }
            else if(listitem == 1)
            {
                OnPlayerCommandText(playerid, "/sellflat");
            }
        }
        else { return 1; }
    }
Потом в public OnPlayerPickUpPickup(playerid, pickupid) добавить

if(pickupid == flathouse1[0]) // Квартирный Дом напротив Репортеров (Вход)
    {
         SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484);
         SetPlayerInterior(playerid, 3);
         PlayerInfo[playerid][pInt] = 3;
         SetPlayerVirtualWorld(playerid,1);
    }
    else if(pickupid == flathouse1[1]) // Квартирный Дом напротив Репортеров (Выход)
    {
         SetPlayerPos(playerid, -1966.0192,434.3174,35.1719);
         SetPlayerInterior(playerid, 0);
         PlayerInfo[playerid][pInt] = 0;
         SetPlayerVirtualWorld(playerid,0);
    }
    else if(pickupid == flathouse2[0]) // Квартирный Дом напротив Небоскрёпа ЛС (Вход)
    {
         SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484);
         SetPlayerInterior(playerid, 3);
         PlayerInfo[playerid][pInt] = 3;
         SetPlayerVirtualWorld(playerid,2);
    }
    else if(pickupid == flathouse2[1]) // Квартирный Дом напротив Небоскрёпа ЛС (Выход)
    {
         SetPlayerPos(playerid, 329.7834,-1513.7047,36.0391);
         SetPlayerInterior(playerid, 0);
         PlayerInfo[playerid][pInt] = 0;
         SetPlayerVirtualWorld(playerid,0);
    }
    else if(pickupid == flathouse3[0]) // Квартирный Дом у Банка ЛС (Вход)
    {
         SetPlayerPos(playerid, 972.3107,-8.6146,1001.1484);
         SetPlayerInterior(playerid, 3);
         PlayerInfo[playerid][pInt] = 3;
         SetPlayerVirtualWorld(playerid,3);
    }
    else if(pickupid == flathouse3[1]) // Квартирный Дом у Банка ЛС (Выход)
    {
         SetPlayerPos(playerid, 1378.8137,-1088.7667,27.0466);
         SetPlayerInterior(playerid, 0);
         PlayerInfo[playerid][pInt] = 0;
         SetPlayerVirtualWorld(playerid,0);
    }
Потом добавим пикапы:

flathouse1[0] = CreatePickup(1318, 2, -1962.0586,434.1953,35.1719, 0); pickups++; // Квартирный Дом напротив Репортеров (Вход)
    flathouse1[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 1); pickups++; // Квартирный Дом напротив Репортеров (Выход)
    flathouse2[0] = CreatePickup(1318, 2, 328.1443,-1512.3280,36.0325, 0); pickups++; // Квартирный Дом напротив Небоскрёпа ЛС (Вход)
    flathouse2[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 2); pickups++; // Квартирный Дом напротив Небоскрёпа ЛС (Выход)
    flathouse3[0] = CreatePickup(1318, 2, 1382.1489,-1088.8043,28.2124, 0); pickups++; // Квартирный Дом у Банка ЛС (Вход)
    flathouse3[1] = CreatePickup(1318, 2, 975.1188,-8.6426,1001.1484, 3); pickups++; // Квартирный Дом у Банка ЛС (Выход)
Чуть не забыл ко всем форвардам добавить

forward LoadFlats();
и в Public OnGameModeInit добавить

LoadFlats();
После в enum pInfo добавить

pFlatKey,
Потом в public OnPlayerRegister(playerid, password[])

dini_IntSet(string, "Flatkey", PlayerInfo[playerid][pFlatKey]);
После в public OnPlayerLogin

PlayerInfo[playerid][pFlatKey] = dini_Int(string2,"Flatkey");
немного ниже в этомже паблике добавить

PlayerInfo[playerid][pFlatKey] = 255;
и под конец в public OnPlayerConnect добавить

PlayerInfo[playerid][pFlatKey] = 255;
вот и всё ))

Автор Вырезки: Mr_Dave

Вырезано из мода Diamond_City

Может кому пригодится

И вот сам файл с квартирками =)

flats.cfg

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Guido

а это как в cr-mp?

 

если да о помгите я не могу это сделать вот мой скап

 

daniyar3235

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
vadim32

А это реально сделать в КРМП???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
K1ng

А это реально сделать в КРМП???

 

Если Чуть подделать и на КРМП пойдет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.