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

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

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

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

Создание системы комнат в отеле.

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

Гарольд

Умник
Привет всем форумчанинам ;)

Вот и мой 2-ой урок :)
Ну что-ж, начнём.

К инклудам:
PHP:
#include <file>
Ко всем forward:

PHP:
forward UpdateRooms();
forward LoadRooms();
forward CheckRoomPick(playerid);
В enum pInfo:

PHP:
pFlatKey
Ко всем define:

PHP:
#define MAX_ROOMS 500 // Значение можно менять.
#define DSM DIALOG_STYLE_MSGBOX
Ко всем new:

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;
}
В public OnPlayerCommandText:

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}: Ты не у своей комнаты!");
			}
		}
	}
В public OnGameModeInit():
PHP:
LoadRooms();
StreamRooms();
В public OnDialogResponse:
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); // Это мой инт отеля.
					}
				}
			}
		}
	}
В public OnPlayerKeyStateChange:
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, "Выход", "Хотите выйти из комнаты?", "Да", "Нет");
				}
			}
		}
	}
В паблик OnPlayerSpawn:
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);
   	}
В public OnPlayerRegister:
PHP:
ini_setInteger(File, "Комната в отеле", PlayerInfo[playerid][pFlatKey]);
В public OnPlayerLogin:
PHP:
ini_getInteger(File, "Комната в отеле", PlayerInfo[playerid][pFlatKey);
В public OnPlayerConnect:
PHP:
PlayerInfo[playerid][pFlatKey] = 255;
В папке с сервером, зайдите в папку scriptfiles и создайте там файл с именем properties и расширением .cfg.
Вот, собственно, и всё.
С Вас плюс.:df:
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу