Гарольд
Умник
Привет всем форумчанинам 
Вот и мой 2-ой урок
Ну что-ж, начнём.
К инклудам:
Ко всем forward:
В enum pInfo:
Ко всем define:
Ко всем new:
В конец мода:
В public OnPlayerCommandText:
В public OnGameModeInit():
В public OnDialogResponse:
В public OnPlayerKeyStateChange:
В паблик OnPlayerSpawn:
В public OnPlayerRegister:
В public OnPlayerLogin:
В public OnPlayerConnect:
В папке с сервером, зайдите в папку scriptfiles и создайте там файл с именем properties и расширением .cfg.
Вот, собственно, и всё.
С Вас плюс.:df:
Вот и мой 2-ой урок
Ну что-ж, начнём.
К инклудам:
PHP:
#include <file>
PHP:
forward UpdateRooms();
forward LoadRooms();
forward CheckRoomPick(playerid);
PHP:
pFlatKey
PHP:
#define MAX_ROOMS 500 // Значение можно менять.
#define DSM DIALOG_STYLE_MSGBOX
PHP:
enum rInfo
{
Float:rEnterX,
Float:rEnterY,
Float:rEnterZ,
Float:rExitX,
Float:rExitY,
Float:rExitZ,
rInt,
rPrice,
rOwned,
rOwner[32],
rClosed
}
new Room[MAX_ROOMS][rInfo]
PHP:
stock StreamRooms()
{
for(new r = 0;r < MAX_ROOMS;r++)
{
if(Room[r][rOwned] == 0)
{
AddStaticPickup(1273, 23, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]);
}
else
{
AddStaticPickup(1272, 23, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]);
}
}
}
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= 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 1;
}
public LoadRooms()
{
new arrCoords[25][64];
new strFromFile2[256];
new File:file = fopen("properties.cfg", io_read);
if(file)
{
new idx;
while(idx < MAX_ROOMS)
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, ',');
Room[idx][rEnterX] = floatstr(arrCoords[0]);
Room[idx][rEnterY] = floatstr(arrCoords[1]);
Room[idx][rEnterZ] = floatstr(arrCoords[2]);
Room[idx][rExitX] = floatstr(arrCoords[3]);
Room[idx][rExitY] = floatstr(arrCoords[4]);
Room[idx][rExitZ] = floatstr(arrCoords[5]);
strmid(Room[idx][rOwner], arrCoords[6], 0, strlen(arrCoords[6]), 255);
Room[idx][rPrice] = strval(arrCoords[7]);
Room[idx][rOwned] = strval(arrCoords[8]);
idx++;
}
fclose(file);
}
}
public UpdateRooms()
{
new idx;
new File:file;
while(idx < MAX_ROOMS)
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%f,%f,%f,%f,%f,%f,%s,%d,%d\n",
Room[idx][rEnterX],
Room[idx][rEnterY],
Room[idx][rEnterZ],
Room[idx][rExitX],
Room[idx][rExitY],
Room[idx][rExitZ],
Room[idx][rOwner],
Room[idx][rPrice],
Room[idx][rOwned]);
if(idx == 0)
{
file = fopen("properties.cfg", io_write);
}
else
{
file = fopen("properties.cfg", io_append);
}
fwrite(file, coordsstring);
idx++;
fclose(file);
}
}
public CheckRoomPick(playerid)
{
new string[150];
for(new r = 0;r < MAX_ROOMS;r++)
{
if(Room[r][rOwned] == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 0.5, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]))
{
format(string, 150, "Комната: %d\nСтоимость в час: $%d\nХочешь купить? Нажми 'Купить'.", r, Room[r][rPrice]);
ShowPlayerDialog(playerid, 10, DSM, "Информация", string, "Купить", "Отмена");
}
}
else
{
if(IsPlayerInRangeOfPoint(playerid, 0.5, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]))
{
format(string, 150, "Комната: %d\nСтоимость в час: $%d\nКомната занята.", r, Room[r][rPrice]);
ShowPlayerDialog(playerid, 11, DSM, "Занято!", string, "Войти", "Отмена");
}
}
}
}
stock PlName(playerid)
{
new plname[32];
GetPlayerName(playerid, plname, 32);
return plname;
}
PHP:
if(strcmp(cmd, "/create", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] == 0) // Сами ставим уровень админки
{
new result[50];
result = strtok(cmdtext, idx);
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_WHITE, "|__________________ {33aa33}Создать что-либо {ffffff}__________________|");
SendClientMessage(playerid, COLOR_WHITE, "Доступные названия: комната");
}
if(strcmp(result, "комната", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "{1e90ff}[Используй]{ffffff}: /create комната [ид комнаты]");
new roomid = strval(tmp);
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
Room[roomid][rEnterX] = X;
Room[roomid][rEnterY] = Y;
Room[roomid][rEnterZ] = Z;
Room[roomid][rExitX] = 271.884979;
Room[roomid][rExitY] = 306.631988;
Room[roomid][rExitZ] = 999.148437;
Room[roomid][rOwned] = 0;
Room[roomid][rInt] = GetPlayerInterior(playerid);
Room[roomid][rPrice] = 100;
StreamRooms();
UpdateRooms();
}
}
}
}
if(strcmp(cmd, "/lockflat", true) == 0)
{
if(IsPlayerConnected(playerid))
{
for(new r = 0;r < MAX_PLAYERS;r++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]))
{
if(Player[playerid][pFlatKey] == r)
{
if(Room[r][rClosed] == 0)
{
Room[r][rClosed] = 1;
GameTextForPlayer(playerid, "~r~3aKpblTo", 3000, 1);
}
else
{
Room[r][rClosed] = 0;
GameTextForPlayer(playerid, "~g~OTKPblTO", 3000, 1);
}
}
else return SendClientMessage(playerid, COLOR_WHITE, "{ff3300}[Ошибка]{ffffff}: Ты не владеешь этой комнатой!");
}
else return SendClientMessage(playerid, COLOR_WHITE, "{ff3300}[Ошибка]{ffffff}: Ты не у своей комнаты!");
}
}
}
PHP:
LoadRooms();
StreamRooms();
PHP:
if(dialogid == 10)
{
if(response)
{
for(new r = 0;r < MAX_ROOMS;r++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]) && Room[r][rOwned] == 0)
{
if(Player[playerid][pFlatKey] == 255)
{
Player[playerid][pFlatKey] = r;
Room[r][rOwned] = 1;
strmid(Room[r][rOwner], PlName(playerid), 0, strlen(PlName(playerid)), 255);
Player[playerid][pMoney] -= Room[r][rPrice];
SetPlayerInterior(playerid, 2);
SetPlayerPos(playerid, Room[r][rExitX], Room[r][rExitY], Room[r][rExitZ]);
SetPlayerVirtualWorld(playerid, r+20);
Room[r][rClosed] = 1;
SendClientMessage(playerid, COLOR_GREEN, "Сотрудник отеля: Поздравляю, ты приобрёл комнату!");
SendClientMessage(playerid, COLOR_GREEN, "Сотрудник отеля: Выплачивай каждый час по 100 вирт, а то выселим!");
StreamRooms();
UpdateRooms();
}
}
}
}
}
if(dialogid == 11)
{
if(response)
{
for(new r = 0;r < MAX_ROOMS;r++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]))
{
if(Player[playerid][pFlatKey] == r)
{
SetPlayerPos(playerid, Room[r][rExitX], Room[r][rExitY], Room[r][rExitZ]);
SetPlayerVirtualWorld(playerid, r+20);
SetPlayerInterior(playerid, 2);
GameTextForPlayer(playerid, "My Room", 3000, 1);
}
else if(Player[playerid][pFlatKey] != r && Room[r][rClosed] == 1)
{
GameTextForPlayer(playerid, "~r~3aKpblTo", 3000, 1);
}
else if(Player[playerid][pFlatKey] != r && Room[r][rClosed] == 0)
{
SetPlayerPos(playerid, Room[r][rExitX], Room[r][rExitY], Room[r][rExitZ]);
SetPlayerVirtualWorld(playerid, r+20);
GameTextForPlayer(playerid, "My Room", 3000, 1);
}
}
}
}
}
if(dialogid == 12)
{
if(response)
{
for(new r = 0;r < MAX_ROOMS;r++)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, Room[r][rExitX], Room[r][rExitY], Room[r][rExitZ]))
{
if(GetPlayerVirtualWorld(playerid) == r+20)
{
SetPlayerPos(playerid, Room[r][rEnterX], Room[r][rEnterY], Room[r][rEnterZ]);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 18); // Это мой инт отеля.
}
}
}
}
}
PHP:
if(newkeys == 1024)
{
for(new r = 0;r < MAX_ROOMS;r++)
{
if(IsPlayerInRangeOfPoint(playerid, 3.0, Room[r][rExitX], Room[r][rExitY], Room[r][rExitZ]))
{
if(GetPlayerVirtualWorld(playerid) == r+20)
{
ShowPlayerDialog(playerid, 12, DSM, "Выход", "Хотите выйти из комнаты?", "Да", "Нет");
}
}
}
}
PHP:
if(PlayerInfo[playerid][pFlatKey] != 255)
{
new roomid = Player[playerid][pFlatKey];
SetPlayerInterior(playerid, 2);
SetPlayerPos(playerid, Room[roomid][rExitX], Room[roomid][rExitY], Room[roomid][rExitZ]);
GivePlayerWeapon(playerid, 1, 1);
SetPlayerSkin(playerid, Player[playerid][pSkin]);
SavePlayer(playerid);
}
PHP:
ini_setInteger(File, "Комната в отеле", PlayerInfo[playerid][pFlatKey]);
PHP:
ini_getInteger(File, "Комната в отеле", PlayerInfo[playerid][pFlatKey);
PHP:
PlayerInfo[playerid][pFlatKey] = 255;
Вот, собственно, и всё.
С Вас плюс.:df:
Последнее редактирование:
