#Dobro
Новичок
1)Подключим инклуды:
2)Ко всем define's добавим:
3)Добавим массив:
4)ко всем new добавим
5) Теперь создадим еще один массив:
6) Добавим в конец мода
7)Добавим в OnPlayerCommandText
8) Добавим в OnDialogResponse:
9)Добавим OnGameModeInit:
10)Добавим в папку scriptfiles:
Вырезал из мода,не помню из какого.Автор вырезки я.Повторюсь сама система не моя.
По поводу ошибок пишите в этой теме.Помогу исправить.
PHP:
#include <mxINI>
#include <sscanf2>
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
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];
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"}
};
PHP:
enum hiInfo
{
Float:hiX,Float:hiY,Float:hiZ,hiInt,
hiName[15],
}
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);
}
}
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;
}
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");
}
PHP:
LoadHouses();
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Вырезал из мода,не помню из какого.Автор вырезки я.Повторюсь сама система не моя.
По поводу ошибок пишите в этой теме.Помогу исправить.
Последнее редактирование:
