Jeff_Hardy
Компетентный
Добрый день, юзеры Pawno-Info.
Представляю вам Динамическую систему домов, Для ДМ или ТДМ, думаю пойдёт!
Описание:
Вход/Выход из дома на /enter /exit.(Alt)!
При создании дома, Выберается Интерьер(Random), и ID.
Начинаем, ко Дефайн
Ко все форвард
new
enum pinfo
OnPlayerConnect
OnPlayerSave
Паблик
Enum
GameModeInit()
Теперь комманды,
В OnPlayerLogin
OnPLayerSpawn
Теперь в конец мода:
-------------------------------------------------------------------------------------------------------------
Аа, кстати незабываем создать property.cfg в папке scriptfiles
Ну вот и всё, Написали за 2-дня!
Авторы: Jeff_Hardy | DeN_Bellik
P.S. Указал 2-рого автора, Потомучто помог исправить баг, После рестарта слетали мода не сохранялись!
Кому понадобилось ставим +
Представляю вам Динамическую систему домов, Для ДМ или ТДМ, думаю пойдёт!
Описание:
PHP:
/sellhouse - Продать дом.
/addhouse - Добавить дом прям из игры.
При создании дома, Выберается Интерьер(Random), и ID.
Начинаем, ко Дефайн
PHP:
#define publics:%0(%1) forward %0(%1); \
public %0(%1)
PHP:
forward SaveStuff();
PHP:
new Property = 160;// Кол-во домов
new Float:Propexit[10][3] = {
{140.25939941406,1366.2185058594,1083.859375},
{2317.7861328125,-1026.9718017578,1050.2177734375},
{2365.2104492188,-1135.6337890625,1050.8825683594},
{2282.9489746094,-1140.1695556641,1050.8984375},
{2196.8657226563,-1204.4061279297,1049.0234375},
{2270.3344726563,-1210.5197753906,1047.5625},
{2308.7983398438,-1212.7666015625,1049.0234375},
{2237.5236816406,-1081.6125488281,1049.0234375},
{2333.10546875,-1077.15625,1049.0234375},
{2.0533,-3.1624,999.4284}
};
new Propinterior[10] = {
5,9,8,11,6,10,6,2,6,2
};
PHP:
pPhousekey,
PHP:
PlayerInfo[playerid][pPhousekey] = 0;
PHP:
format(var, 32, "PropertyHouse=%d\n",PlayerInfo[playerid][pPhousekey]);fwrite(hFile, var);
PHP:
public SaveStuff()
{
new iniFile = ini_openFile ("stuff.ini");
ini_setInteger(iniFile, "Property", Property);
ini_closeFile(iniFile);
return 1;
}
PHP:
enum hInfo
{
Float:hEntarcex,// Вход x
Float:hEntarcey,// Вход y
Float:hEntarcez,// Вход z
Float:hExistx,// Выход x
Float:hExisty,// Выход y
Float:hExistz,// Выход z
hId,// ID дома
hOwner[MAX_PLAYER_NAME],// %s Владелец
hValue, // Цена
hInterior, // Интерьер
hLock,// Закрыта/Открыта
hOwned,// Владелец
Text3D: hLabel,// 3D-Text
hPickup,// Пикап
hMIcon// Иконка
};
new HouseInfo[160][hInfo];// Кол-во домов.
PHP:
LoadProperty();
SaveProperty();
SaveStuff();
for(new h = 0; h < sizeof(HouseInfo); h++)
{
new text[600];
if(HouseInfo[h][hOwned] == 0)//
{
format(text,sizeof(text),"{FF6600}Дом доступен для покупки\nНомер дома: [%d]\nСтоимость дома: [$%d]\nДля покупки, [/buyhouse]",h,HouseInfo[h][hValue]);
HouseInfo[h][hMIcon] = CreateMapIcon(31, COLOR_WHITE,HouseInfo[h][hEntarcex], HouseInfo[h][hEntarcey], HouseInfo[h][hEntarcez]);
HouseInfo[h][hPickup] = CreatePickup(1272, 23, HouseInfo[h][hEntarcex], HouseInfo[h][hEntarcey], HouseInfo[h][hEntarcez],-1);
}
else if(HouseInfo[h][hOwned] == 1) // Куплен
{
format(text,sizeof(text),"{0066B3}Номер дома: [%d]\nВладелец дома: [%s]\nСтоимость дома: [$%d]\nАренда дома: [Недоступна]",h,HouseInfo[h][hOwner],HouseInfo[h][hValue]);
Update3DTextLabelText(HouseInfo[h][hLabel], 0xFFFFFFFF, text);
HouseInfo[h][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[h][hEntarcex], HouseInfo[h][hEntarcey], HouseInfo[h][hEntarcez]);
HouseInfo[h][hPickup] = CreatePickup(1239, 23, HouseInfo[h][hEntarcex], HouseInfo[h][hEntarcey], HouseInfo[h][hEntarcez],-1);
}
HouseInfo[h][hLabel] = Create3DTextLabel(text,0xFFFFFFFF,HouseInfo[h][hEntarcex],HouseInfo[h][hEntarcey],HouseInfo[h][hEntarcez]+1,20.0,0,1);
}
PHP:
//=====================================[/Open/Exit]=============================
if(strcmp(cmd, "/enter", true) == 0)
{
if(IsPlayerConnected(playerid))
{
for(new i = 0; i < Property; i++)
{
if (IsPlayerInRangeOfPoint(playerid,1,HouseInfo[i][hEntarcex], HouseInfo[i][hEntarcey], HouseInfo[i][hEntarcez]))
{
if(PlayerInfo[playerid][pPhousekey] == i+1 || HouseInfo[i][hLock] == 0)
{
SetPlayerInterior(playerid,HouseInfo[i][hInterior]);
ServerSetPlayerPos(playerid,HouseInfo[i][hExistx],HouseInfo[i][hExisty],HouseInfo[i][hExistz]);
GameTextForPlayer(playerid, "~b~Welcome to Home", 5000, 1);
SetPlayerVirtualWorld(playerid,HouseInfo[i][hId]);
}
else
{
GameTextForPlayer(playerid, "~r~Lock House", 5000, 1);
}
}
}
}
return 1;
}
if(strcmp(cmd, "/exit", true) == 0)
{
if(IsPlayerConnected(playerid))
{
for(new i = 0; i < Property; i++)
{
if (IsPlayerInRangeOfPoint(playerid,1,HouseInfo[i][hExistx], HouseInfo[i][hExisty], HouseInfo[i][hExistz]) && GetPlayerVirtualWorld(playerid) == HouseInfo[i][hId])
{
SetPlayerInterior(playerid,0);
ServerSetPlayerPos(playerid,HouseInfo[HouseInfo[i][hId]-1][hEntarcex],HouseInfo[HouseInfo[i][hId]-1][hEntarcey],HouseInfo[HouseInfo[i][hId]-1][hEntarcez]);
SetPlayerVirtualWorld(playerid,0);
if(PlayerInfo[playerid][pPhousekey] == HouseInfo[i][hId])
{
new Float:tempheal;
GetPlayerHealth(playerid,tempheal);
if(tempheal < 100.0)
{
ServerGivePlayerHealth(playerid,100.0);
}
}
}
}
}
return 1;
}
if(strcmp(cmd, "/buyhouse", 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 < Property; h++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, HouseInfo[h][hEntarcex], HouseInfo[h][hEntarcey], HouseInfo[h][hEntarcez]) && HouseInfo[h][hOwned] == 0)
{
if(PlayerInfo[playerid][pPhousekey] != 0 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hOwner], true) == 0) return SendClientMessage(playerid, COLOR_WHITE, "У вас уже есть дом, используйте /sellhouse чтобы продать его!");
if(GetPlayerMoney(playerid) < HouseInfo[h][hValue]) return SendClientMessage(playerid, COLOR_WHITE, "[House] У вас нет такой суммы.");
PlayerInfo[playerid][pPhousekey] = HouseInfo[h][hId];
HouseInfo[h][hOwned] = 1;
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[h][hOwner], sendername, 0, strlen(sendername), 255);
GivePlayerMoney(playerid,-HouseInfo[h][hValue]);
SetPlayerInterior(playerid,HouseInfo[h][hInterior]);
ServerSetPlayerPos(playerid,HouseInfo[h][hExistx],HouseInfo[h][hExisty],HouseInfo[h][hExistz]);
SetPlayerVirtualWorld(playerid,HouseInfo[h][hId]);
UpdateHouse(h);
SendClientMessage(playerid, COLOR_BLUE, "[House] Поздравляю, Вы купили себе новый дом.");
SaveProperty();
OnPlayerSave(playerid);
return 1;
}
}
}
return 1;
}
if(strcmp(cmd, "/sellhouse", true) == 0)
{
if(IsPlayerConnected(playerid))
{
GetPlayerName(playerid, playername, sizeof(playername));
if(PlayerInfo[playerid][pPhousekey] == 0) return SendClientMessage(playerid, COLOR_BLUE, "[House] У вас нет дома.");
if(PlayerInfo[playerid][pPhousekey] != 0 && strcmp(playername, HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hOwner], true) == 0)
{
new house = PlayerInfo[playerid][pPhousekey]-1;
HouseInfo[house][hLock] = 0;
HouseInfo[house][hOwned] = 0;
GetPlayerName(playerid, sendername, sizeof(sendername));
strmid(HouseInfo[house][hOwner], "The State", 0, strlen("The State"), 255);
GivePlayerMoney(playerid,HouseInfo[house][hValue]*4/5);
PlayerInfo[playerid][pPhousekey] = 0;
if(GetPlayerInterior(playerid) == HouseInfo[house][hInterior])
{
SetPlayerInterior(playerid,0);
ServerSetPlayerPos(playerid,HouseInfo[house][hEntarcex],HouseInfo[house][hEntarcey],HouseInfo[house][hEntarcez]);
SetPlayerVirtualWorld(playerid,0);
}
UpdateHouse(house);
SaveProperty();
OnPlayerSave(playerid);
SendClientMessage(playerid, COLOR_BLUE, "[House] Вы успешно продали свой мод.");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_BLUE, "[House] У вас нет дома.");
}
}
return 1;
}
if(strcmp(cmd, "/addhouse", true) == 0)
{
if ((PlayerInfo[playerid][pAdmin] >= 6)) return SendClientMessage(playerid,COLOR_GREY,"Нет доступа!");
cmd = strtok(cmdtext, idx);
if(!strlen(cmd))
return SendClientMessage(playerid, COLOR_WHITE, "[House] /addhouse 0,1,2,3[Выберите интерьер], [ID дома].");
new level = strval(cmd);
new cost;
cmd = strtok(cmdtext, idx);
if(!strlen(cmd))
return SendClientMessage(playerid, COLOR_WHITE, "[House] /addhouse 0,1,2,3[Выберите интерьер], [ID дома].");
new id = strval(cmd) -1;
new inter;
if(level == 0)
{
inter = 9;
cost = 250000;
}
else if(level == 1)
{
inter = 2+random(6);
if(inter == 2) cost = (10+random(3))*50000;
if(inter == 3) cost = (5+random(2))*50000;
if(inter == 4) cost = (7+random(3))*50000;
if(inter == 5) cost = (6+random(2))*50000;
if(inter == 6) cost = (5+random(2))*50000;
if(inter == 7) cost = (6+random(2))*50000;
if(inter == 8) cost = (6+random(2))*50000;
}
else if(level == 2)
{
inter = 0;
cost = (12+random(3))*50000;
if(inter == 1) cost = (13+random(4))*50000;
}
else if(level == 3)
{
inter = 1;
cost = (13+random(4))*50000;
}
else return SendClientMessage(playerid, COLOR_GREY, "[Random] Interiors: 0,1,2,3[Выберите интерьер].");
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
if(id+1 > Property) Property += 1;
HouseInfo[id][hEntarcex] = X;
HouseInfo[id][hEntarcey] = Y;
HouseInfo[id][hEntarcez] = Z;
HouseInfo[id][hValue] = cost;
HouseInfo[id][hOwned] = 0;
HouseInfo[id][hId] = id+1;
HouseInfo[id][hOwner][0] = 0;
HouseInfo[id][hExistx] = Propexit[inter][0];
HouseInfo[id][hExisty] = Propexit[inter][1];
HouseInfo[id][hExistz] = Propexit[inter][2];
HouseInfo[id][hInterior] = Propinterior[inter];
HouseInfo[id][hLock] = 0;
strmid(HouseInfo[id][hOwner], "The State", 0, strlen("The State"), 255);
new text[600];
format(text,sizeof(text),"{FF6600}Дом доступен для покупки\nНомер дома: [%d]\nСтоимость дома: [$%d]\nДля покупки, [/buyhouse]",id,HouseInfo[id][hValue]);
HouseInfo[id][hLabel] = Create3DTextLabel(string,COLOR_GREEN,HouseInfo[id][hEntarcex], HouseInfo[id][hEntarcey], HouseInfo[id][hEntarcez]+1.2,15.0,0);
HouseInfo[idx][hMIcon] = CreateDynamicMapIcon(HouseInfo[id][hEntarcex], HouseInfo[id][hEntarcey], HouseInfo[id][hEntarcez], 31, COLOR_WHITE, 0, -1, -1, 400.0);
HouseInfo[id][hPickup] = CreatePickup(1272, 23, HouseInfo[id][hEntarcex], HouseInfo[id][hEntarcey], HouseInfo[id][hEntarcez],-1);
SaveProperty();
SaveStuff();
UpdateHouse(id);
format(string,sizeof(string),"Дом создан, ID дома: [%d] | Цена дома: [%d]",HouseInfo[id][hId],HouseInfo[id][hValue]);
return SendClientMessage(playerid, COLOR_BLUE, string);
}
PHP:
for(new home =0 ; home < Property; home++)
{
if(!strcmp(HouseInfo[home][hOwner],PlayerName,true) && HouseInfo[home][hOwned] == 1) PlayerInfo[playerid][pPhousekey] = home+1;
}
PHP:
if(PlayerInfo[playerid][pPhousekey] != 0)
{
if(SpawnChange[playerid]) //If 1, then you get to your house, else spawn somewhere else
{
SetCameraBehindPlayer(playerid);
SetPlayerPos(playerid,HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hExistx],HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hExisty],HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hExistz]);
SetPlayerInterior(playerid,HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hInterior]);
SetPlayerVirtualWorld(playerid,HouseInfo[PlayerInfo[playerid][pPhousekey]-1][hId]);
return 1;
}
}
PHP:
stock UpdateHouse(idx)
{
new text[600];
DestroyMapIcon(HouseInfo[idx][hMIcon]);
DestroyPickup(HouseInfo[idx][hPickup]);
if(HouseInfo[idx][hOwned] == 0)
{
format(text,sizeof(text),"{FF6600}Дом доступен для покупки\nНомер дома: [%d]\nСтоимость дома: [$%d]\nДля покупки, [/buyhouse]",idx,HouseInfo[idx][hValue]);
HouseInfo[idx][hMIcon] = CreateMapIcon(31, COLOR_WHITE,HouseInfo[idx][hEntarcex], HouseInfo[idx][hEntarcey], HouseInfo[idx][hEntarcez]);
HouseInfo[idx][hPickup] = CreatePickup(1272, 23, HouseInfo[idx][hEntarcex], HouseInfo[idx][hEntarcey], HouseInfo[idx][hEntarcez],-1);
}
else if(HouseInfo[idx][hOwned] == 1)
{
format(text,sizeof(text),"{0066B3}Номер дома: [%d]\nВладелец дома: [%s]\nСтоимость дома: [$%d]\nАренда дома: [Недоступна]",idx,HouseInfo[idx][hOwner],HouseInfo[idx][hValue]);
Update3DTextLabelText(HouseInfo[idx][hLabel], 0xFFFFFFFF, text);
HouseInfo[idx][hMIcon] = CreateMapIcon(32, COLOR_WHITE,HouseInfo[idx][hEntarcex], HouseInfo[idx][hEntarcey], HouseInfo[idx][hEntarcez]);
HouseInfo[idx][hPickup] = CreatePickup(1239, 23, HouseInfo[idx][hEntarcex], HouseInfo[idx][hEntarcey], HouseInfo[idx][hEntarcez],-1);
}
Update3DTextLabelText(HouseInfo[idx][hLabel], 0xFFFFFFFF, text);
}
publics:SaveProperty()
{
new i;
new File:houses;
while(i < Property)
{
new string[288];
format(string, sizeof(string), "%d,%f,%f,%f,%f,%f,%f,%d,%d,%s,%d,%d,%d\r\n",
HouseInfo[i][hId],
HouseInfo[i][hEntarcex],
HouseInfo[i][hEntarcey],
HouseInfo[i][hEntarcez],
HouseInfo[i][hExistx],
HouseInfo[i][hExisty],
HouseInfo[i][hExistz],
HouseInfo[i][hInterior],
HouseInfo[i][hOwned],
HouseInfo[i][hOwner],
HouseInfo[i][hValue],
HouseInfo[i][hLock]);
if(i == 0)
{
houses = fopen("property.cfg", io_write);
}
else
{
houses = fopen("property.cfg", io_append);
}
fwrite(houses, string);
i++;
fclose(houses);
}
i = 0;
return 1;
}
publics:LoadProperty()
{
new string[288];
new arrCoords[12][46];
new File:houses = fopen("property.cfg", io_read);
new i;
if(houses)
{
while(i < Property)
{
fread(houses, string);
split(string, arrCoords, ',');
HouseInfo[i][hId] = strval(arrCoords[0]);
HouseInfo[i][hEntarcex] = floatstr(arrCoords[1]);
HouseInfo[i][hEntarcey] = floatstr(arrCoords[2]);
HouseInfo[i][hEntarcez] = floatstr(arrCoords[3]);
HouseInfo[i][hExistx] = floatstr(arrCoords[4]);
HouseInfo[i][hExisty] = floatstr(arrCoords[5]);
HouseInfo[i][hExistz] = floatstr(arrCoords[6]);
HouseInfo[i][hInterior] = strval(arrCoords[7]);
HouseInfo[i][hOwned] = strval(arrCoords[8]);
strmid(HouseInfo[i][hOwner], arrCoords[9], false, strlen(arrCoords[9]), MAX_PLAYER_NAME+1);
HouseInfo[i][hValue] = strval(arrCoords[10]);
HouseInfo[i][hLock] = strval(arrCoords[11]);
printf("PropertyInfo: [%d] | Владелец: [%s] | Цена: [%d]",i,HouseInfo[i][hOwner],HouseInfo[i][hValue]);
i++;
}
}
fclose(houses);
return 1;
}
Аа, кстати незабываем создать property.cfg в папке scriptfiles
Ну вот и всё, Написали за 2-дня!
Авторы: Jeff_Hardy | DeN_Bellik
P.S. Указал 2-рого автора, Потомучто помог исправить баг, После рестарта слетали мода не сохранялись!
Кому понадобилось ставим +
Последнее редактирование:
