Доступ к архиву

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

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

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

Система домов на mxINI

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

#Dobro

Новичок
1)Подключим инклуды:

PHP:
#include <mxINI>
#include <sscanf2>
2)Ко всем define's добавим:

HTML:
#define MAX_HOUSES 50 // Этот будет отвечать за максимально кол-во домов(увеличим до нужно количества)
#define D_H_CREATE_DESC 1 
#define D_H_CREATE_PRICE 2
#define D_H_CREATE_INT 3 
#define D_H_CREATE_CONF 4
3)Добавим массив:

HTML:
enum hInfo
{
        hDesc[32], 
        hOwner[MAX_PLAYER_NAME], 
        Float:hX,Float:hY,Float:hZ, 
        hInterior, 
        hVirtWorld,
        hPrice, 
        hLock,
        hPick, 
        Text3D:hText 
};
new House[MAX_HOUSES][hInfo];
4)ко всем new добавим

HTML:
new m_h; 
new STR[158];

new HInts[][hiInfo]={ 
        {318.564971,1118.209960,1083.882812,5,"Crack den"},
        {2269.4453,-1210.2952,1047.5625,10,"Hashbury House"},
        {2496.2676,-1693.8955,1014.7422,3,"Johnsons House"},
        {1299.14,-794.77,1084.00,5,"Madd Doggs M."},
        {2260.3711,-1135.7345,1050.6328,10,"R.B.M. Room"},
        {2365.6023,-1133.6688,1050.8750,8,"V. B. House"},
        {1302.519897,-1.787510,1001.028259,18,"Warehouse 2"},
        {2324.419921,-1145.568359,1050.710083,12,"Un. safe house"},
        {76.632553,-301.156829,1.578125,0,"Blueberry"}
};
5) Теперь создадим еще один массив:

PHP:
enum hiInfo
{
        Float:hiX,Float:hiY,Float:hiZ,hiInt, 
        hiName[15], 
}
6) Добавим в конец мода

HTML:
Name(playerid) 
{
        new Nm[MAX_PLAYER_NAME];
        GetPlayerName(playerid,Nm,24);
        return Nm;
}

SaveHouseAmount() 
{
    new f=ini_openFile("houses/m_h.ini"); 
    ini_setInteger(f,"Amount",m_h); 
        return ini_closeFile(f); 
}

LoadHouses()
{
        if(!fexist("houses/m_h.ini"))return print("[Ошибка] Файл houses/m_h.ini не найден");
        new f=ini_openFile("houses/m_h.ini"); 
        ini_getInteger(f,"Amount",m_h); 
        ini_closeFile(f);
        if(!fexist("houses/houses.ini"))return print("[Ошибка] Файл houses/houses.ini не найден"); 
        f=ini_openFile("houses/houses.ini"); 
        new str[8]; 
        for(new h=1;h<=m_h;h++) 
        {
                format(str,sizeof(str),"ID %d",h); 
                ini_getString(f,str,STR); 
        sscanf(STR,"p<|>s[32]s[24]fffiiii",House[h][hDesc],House[h][hOwner],House[h][hX],House[h][hY],House[h][hZ],House[h][hInterior],
        House[h][hVirtWorld],House[h][hPrice],House[h][hLock]); 
        if(!strcmp(House[h][hOwner],"None",true)) 
                {
                        House[h][hPick]=CreatePickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0); 
                        format(STR,128,"[Дом продается]\nОписание: %s\nЦена: $%d",House[h][hDesc],House[h][hPrice]); 
                        House[h][hText]=Create3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,0,0); 
                }
                else 
                {
                        House[h][hPick]=CreatePickup(1239,23,House[h][hX],House[h][hY],House[h][hZ],0); 
                        format(STR,128,"[Дом]\nОписание: %s\nВладелец: %s",House[h][hDesc],House[h][hOwner]); 
                        House[h][hText]=Create3DTextLabel(STR,0xFFFFFFFF,House[h][hX],House[h][hY],House[h][hZ]+0.5,10.0,0,0); 
                }
        }
        ini_closeFile(f); 
        return printf("Loaded %d houses",m_h); 
}


SaveHouse(h) 
{
        new f=ini_openFile("houses/houses.ini"); 
        new str[8]; 
        format(str,8,"ID %d",h); 
        format(STR,sizeof(STR),"%s|%s|%f|%f|%f|%d|%d|%d|%d",House[h][hDesc],House[h][hOwner],House[h][hX],House[h][hY],House[h][hZ],House[h][hInterior],
        House[h][hVirtWorld],House[h][hPrice],House[h][hLock]); 
        ini_setString(f,str,STR); 
        ini_closeFile(f); 
        return 1;
}

UpdateHouse(h) 
{
        DestroyPickup(House[h][hPick]);
    if(!strcmp(House[h][hOwner],"None",true)) 
    {
        House[h][hPick]=CreatePickup(1273,23,House[h][hX],House[h][hY],House[h][hZ],0); // пикап
                format(STR,128,"[Дом продается]\nОписание: %s\nЦена: $%d",House[h][hDesc],House[h][hPrice]); 
                Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR); 
    }
    else
    {
        House[h][hPick]=CreatePickup(1239,23,House[h][hX],House[h][hY],House[h][hZ],0); 
                format(STR,128,"[Дом]\nОписание: %s\nВладелец: %s",House[h][hDesc],House[h][hOwner]); 
                Update3DTextLabelText(House[h][hText],0xFFFFFFFF,STR); 
    }
}
7)Добавим в OnPlayerCommandText

PHP:
if(strcmp("/addhouse", cmdtext, true, 13) == 0) 
        {
               ShowPlayerDialog(playerid,D_H_CREATE_DESC,DIALOG_STYLE_INPUT,"Создание дома - описание","Введите описание для дома.","Далее","Закрыть");
                return 1;
        }

else if(strcmp("/ahlock", cmdtext, true, 7) == 0) 
        {
            for(new h=1;h<=m_h;h++) 
                {
                    if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue; 
                    if(House[h][hLock]==1)House[h][hLock]=0,GameTextForPlayer(playerid,"~g~House unlocked",100,1); 
                    else House[h][hLock]=1,GameTextForPlayer(playerid,"~r~House locked",100,1); 
                        SaveHouse(h); 
                        return 1;
                }
            return 1;
        }

else if(strcmp("/buyhouse", cmdtext, true, 9) == 0) 
        {
                for(new h=1;h<=m_h;h++)
                {
                    if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue;
                        if(GetPlayerMoney(playerid)<House[h][hPrice])return SendClientMessage(playerid,-1,"У вас не хватает средств!"); 
                        if(strcmp(House[h][hOwner],"None",true)!=0)return SendClientMessage(playerid,-1,"Дом уже куплен!"); 
                        strmid(House[h][hOwner],Name(playerid),0,24,24),UpdateHouse(h); 
                        SaveHouse(h);
                        GivePlayerMoney(playerid,-House[h][hPrice]); 
                        SendClientMessage(playerid,-1,"Вы успешно купили дом!"); 
                        return 1;
                }
                SendClientMessage(playerid,-1,"Рядом с вами нет дома!");
                return 1;
        }
        else if(strcmp("/sellhouse", cmdtext, true, 10) == 0) 
        {
            for(new h=1;h<=m_h;h++)
            {
                if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue;
                if(!strcmp(House[h][hOwner],Name(playerid),true)) 
                {
                    strmid(House[h][hOwner],"None",0,5,5),UpdateHouse(h);
                    SaveHouse(h);
                    GivePlayerMoney(playerid,House[h][hPrice]/2); 
                    SendClientMessage(playerid,-1,"Вы продали свой дом!");
                                return 1;
                }
            }
            //SendClientMessage(playerid,-1,"Рядом с вами нет дома!");
            return 1;
        }

else if(strcmp("/enter", cmdtext, true, 6) == 0) 
        {
            for(new h=1;h<=m_h;h++)
            {
                if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue;
                if(strcmp(House[h][hOwner],Name(playerid),true)!=0 && House[h][hLock]==1)return SendClientMessage(playerid,-1,"Дом закрыт!"); 
                SetPlayerPos(playerid,HInts[House[h][hInterior]][hiX],HInts[House[h][hInterior]][hiY],HInts[House[h][hInterior]][hiZ]); 
                SetPlayerInterior(playerid,HInts[House[h][hInterior]][hiInt]); 
                SetPlayerVirtualWorld(playerid,House[h][hVirtWorld]); 
                }
            return 1;
        }
        else if(strcmp("/exit", cmdtext, true, 5) == 0) 
        {
            for(new h=1;h<=m_h;h++)
            {
                if(IsPlayerInRangeOfPoint(playerid,1.5,HInts[House[h][hInterior]][hiX],HInts[House[h][hInterior]][hiY],HInts[House[h][hInterior]][hiZ]) && GetPlayerVirtualWorld(playerid)==House[h][hVirtWorld])
                {
                    SetPlayerPos(playerid,House[h][hX],House[h][hY],House[h][hZ]);
                    SetPlayerVirtualWorld(playerid,0),SetPlayerInterior(playerid,0);
                        }
                }
            return 1;
        }
        else if(strcmp("/hlock", cmdtext, true, 6) == 0) 
        {
            for(new h=1;h<=m_h;h++)
            {
                if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue;
                if(strcmp(House[h][hOwner],Name(playerid),true)!=0)return SendClientMessage(playerid,-1,"У вас нет ключей от этого дома!");
                if(House[h][hLock]==0)House[h][hLock]=1,SaveHouse(h),GameTextForPlayer(playerid,"~r~House locked",100,1);
                else if(House[h][hLock]==1)return SendClientMessage(playerid,-1,"Дом уже закрыт!"); 
                        return 1;
                }
            return 1;
        }
        else if(strcmp("/hopen", cmdtext, true, 6) == 0) 
        {
            for(new h=1;h<=m_h;h++)
            {
                if(!IsPlayerInRangeOfPoint(playerid,1.5,House[h][hX],House[h][hY],House[h][hZ]))continue;
                if(strcmp(House[h][hOwner],Name(playerid),true)!=0)return SendClientMessage(playerid,-1,"У вас нет ключей от этого дома!");
                if(House[h][hLock]==1)House[h][hLock]=0,SaveHouse(h),GameTextForPlayer(playerid,"~g~House unlocked",100,1);
                else if(House[h][hLock]==0)return SendClientMessage(playerid,-1,"Дом уже открыт!");
                        return 1;
                }
            return 1;
        }
8) Добавим в OnDialogResponse:

PHP:
case D_H_CREATE_DESC:
            {
                if(response) 
                {
                    if(!strlen(inputtext))return ShowPlayerDialog(playerid,D_H_CREATE_DESC,DIALOG_STYLE_INPUT,"Создание дома - описание","Введите описание для дома.","Далее","Закрыть");
                    SetPVarString(playerid,"h_desc",inputtext); 
                    ShowPlayerDialog(playerid,D_H_CREATE_PRICE,DIALOG_STYLE_INPUT,"Создание дома - цена","Введите цену для дома.","Далее","Назад"); 
                }
                }

case D_H_CREATE_PRICE:
                {
                    if(response) 
                    {
                        if(!strlen(inputtext))return ShowPlayerDialog(playerid,D_H_CREATE_PRICE,DIALOG_STYLE_INPUT,"Создание дома - цена","Введите цену для дома.","Далее","Назад"); 
                        SetPVarInt(playerid,"h_price",strval(inputtext)); 
                                STR=""; 
                        for(new i;i<sizeof(HInts);i++) 
                        {
                            strcat(STR,HInts[i][hiName]); 
                            strcat(STR,"\n"); 
                        }
                        ShowPlayerDialog(playerid,D_H_CREATE_INT,DIALOG_STYLE_LIST,"Создание дома - интерьер",STR,"Далее","Назад"); 
                    }
                    else DeletePVar(playerid,"h_desc"),ShowPlayerDialog(playerid,D_H_CREATE_DESC,DIALOG_STYLE_INPUT,"Создание дома - описание","Введите описание для  дома.","Далее","Закрыть"); 
                }

case D_H_CREATE_INT:
                {
                    if(response) 
                    {
                                SetPVarInt(playerid,"h_int",listitem); 
                                ShowPlayerDialog(playerid,D_H_CREATE_CONF,DIALOG_STYLE_MSGBOX,"Создание дома - подтверждение","Вы действительно хотите создать дом в этом месте?","Создать","Отмена"); 
                    }
                    else DeletePVar(playerid,"h_price"),ShowPlayerDialog(playerid,D_H_CREATE_PRICE,DIALOG_STYLE_INPUT,"Создание дома - цена","Введите цену для дома.","Далее","Назад");
                }

case D_H_CREATE_CONF:
                {
                    if(response) 
                {
                                m_h++,SaveHouseAmount(); 
                                new Float:x[3],str[32]; 
                                GetPlayerPos(playerid,x[0],x[1],x[2]),GetPVarString(playerid,"h_desc",str,32); 
                                House[m_h][hX]=x[0],House[m_h][hY]=x[1],House[m_h][hZ]=x[2],House[m_h][hPrice]=GetPVarInt(playerid,"h_price"), 
                                House[m_h][hInterior]=GetPVarInt(playerid,"h_int"),House[m_h][hVirtWorld]=m_h,strmid(House[m_h][hDesc],str,0,32,32), 
                                strmid(House[m_h][hOwner],"None",0,5,5);  
                                SaveHouse(m_h); 
                                House[m_h][hPick]=CreatePickup(1273,23,x[0],x[1],x[2],0); // Создаем пикап
                                format(STR,128,"[Дом продается]\nОписание: %s\nЦена: $%d",House[m_h][hDesc],House[m_h][hPrice]); 
                                House[m_h][hText]=Create3DTextLabel(STR,0xFFFFFFFF,x[0],x[1],x[2]+0.5,10.0,0,0); 
                                GameTextForPlayer(playerid,"~g~House created",100,1); 
                DeletePVar(playerid,"h_price"),DeletePVar(playerid,"h_desc"),DeletePVar(playerid,"h_int"); 
                    }
                    else DeletePVar(playerid,"h_price"),DeletePVar(playerid,"h_desc"),DeletePVar(playerid,"h_int"); 
                }
9)Добавим OnGameModeInit:

PHP:
LoadHouses();
10)Добавим в папку scriptfiles:



Вырезал из мода,не помню из какого.Автор вырезки я.Повторюсь сама система не моя.
По поводу ошибок пишите в этой теме.Помогу исправить.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу