Перейти к содержанию
#Rips

Система гаражей [Brilliant]

Рекомендуемые сообщения

#Rips

Доброе время суток, пользователи CR-MP.RU

Автор данной копии: #Salev(#Rips)

 

Копирование на другие строго запрещено!

 

Что отсутствует в данной системе:

- Оплата за гараж - P.S Вы должны ее написать сами так как у всех код разный

- Респавн автомобиля - P.S Вы тоже должны написать сами  так как у всех код разный

 

[spoiler=SCREENSHOT]PqD62zq.png

 

 

Дефайны использующийся в коде:

#define     SPD         ShowPlayerDialog
#define  PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))

 

Создаем ENUM

#define MAX_GARAGE      200
enum gInfo
{
	gID, // Индивидуальный ID
	gOwner[MAX_PLAYER_NAME], // Хозяин гаража
	Float:gCar[4],Float:gPEnter[3], // Координаты респавна автомобиля | Координаты для пикапа
	gCost, // Цена гаража
	gPrice, // Последняя цена с покупки 
	gPickupC // Сам пикап
}
new GarageInfo[MAX_GARAGE][gInfo], total_garage = 0;
new Text3D:LabelGarage[60]; // 3DText пикапа

В OnPlayerKeyStateChange

    if(PRESSED(KEY_WALK))
    {
		for(new idx = 1; idx <= total_garage; idx++)
		{
		    if(IsPlayerInRangeOfPoint(playerid, 4,GarageInfo[idx][gPEnter][0], GarageInfo[idx][gPEnter][1], GarageInfo[idx][gPEnter][2]))
		    {
			    new strings[350];
	            if(!strcmp(GarageInfo[idx][gOwner],"None",true))
	            {
                	format(strings,sizeof(strings), "{FF9900}\n\nЭтот гараж свободен.{FFFFFF}\nВы хотите купить этот гараж за {FF9900}%i рублей{FFFFFF}\
					\n\n{FF9900}Информация{FFFFFF}: Гаражи предназначены только для тех, кто арендует комнаты в частных домах или не имеет дома",GarageInfo[idx][gCost]);
	                SPD(playerid, 63, DIALOG_STYLE_MSGBOX, "{FF9900}Гараж", strings, "Купить", "Закрыть");
				}
				else
				{
	                format(strings,sizeof(strings), "{FF9900}\n\nЭтот гараж занят.{FFFFFF}\nВладелец: {FF9900}%s{FFFFFF}\nДней оплачено: {FF9900}30{FFFFFF}\n\
					Нажмите {FF9900}'Респавн'{FFFFFF} чтобы возратить автомобиль к гаражу. Стоимость: {FF9900}600 рублей.\n\n\
					Информация{FFFFFF}: Гаражи предназначены только для тех, кто арендует комнаты в частных домах или не имеет дома",GarageInfo[idx][gOwner]);
	                SPD(playerid, 64, DIALOG_STYLE_MSGBOX, "{FF9900}Гараж", strings, "Респавн", "Закрыть");
				}
			}
		}
	}

Диалог покупки:

		case 63:
		{
		    if(response)
		    {
		    	if(!response) return true;
		    	if(strcmp(GarageInfo[total_garage][gOwner],"None",true) != 0) return SendClientMessage(playerid,-1,"У гаража уже есть владелец!");
		    	PlayerInfo[playerid][pCash] -= GarageInfo[total_garage][gPrice];
				GarageInfo[total_garage][gPrice] = GarageInfo[total_garage][gPrice];
				SendClientMessage(playerid, 0xFF9900FF, "Поздравляем с покупкой гаража!");
				strmid(GarageInfo[total_garage][gOwner],PlayerInfo[playerid][pName], 0, strlen(PlayerInfo[playerid][pName]), MAX_PLAYER_NAME);
				new string[128];
				format(string,sizeof(string), "UPDATE `garage` SET `gOwner` = '%s', `gPrice` = '%d' WHERE `gID` = '%d'",PlayerInfo[playerid][pName],GarageInfo[total_garage][gPrice]);
				mysql_function_query(connects, string, false, "", "");
				UpDataGarageInfo(total_garage);
			}
		}

Делаем загрузку гаражей

forward LoadGaragePlayer();
public LoadGaragePlayer()
{
	new rows, fields, stringers[84];
	cache_get_data(rows, fields);
	if(!rows) return printf("[SYSTEM-GARAGE]: Гаражи не загружены!");
	new idx;
    for(idx = 1; idx <= rows; idx++)
    {
        GarageInfo[idx][gID] = cache_get_field_content_int(idx-1, "gID");
        cache_get_field_content(idx-1, "gOwner", GarageInfo[idx][gOwner], connects, 26);
        GarageInfo[idx][gCar][0] = cache_get_field_content_float(idx-1, "gCarX", connects);
        GarageInfo[idx][gCar][1] = cache_get_field_content_float(idx-1, "gCarY", connects);
        GarageInfo[idx][gCar][2] = cache_get_field_content_float(idx-1, "gCarZ", connects);
        GarageInfo[idx][gCar][3] = cache_get_field_content_float(idx-1, "gCarA", connects);
        GarageInfo[idx][gPEnter][0] = cache_get_field_content_float(idx-1, "gPEnterX", connects);
        GarageInfo[idx][gPEnter][1] = cache_get_field_content_float(idx-1, "gPEnterY", connects);
        GarageInfo[idx][gPEnter][2] = cache_get_field_content_float(idx-1, "gPEnterZ", connects);
        GarageInfo[idx][gCost] = cache_get_field_content_int(idx-1, "gCost");
        GarageInfo[idx][gPrice] = cache_get_field_content_int(idx-1, "gPrice");
        
        GarageInfo[idx][gPickupC] = CreateDynamicPickup(1080,23, GarageInfo[idx][gPEnter][0],GarageInfo[idx][gPEnter][1],GarageInfo[idx][gPEnter][2]);
        if(!strcmp(GarageInfo[idx][gOwner],"None",true))
		{
		    format(stringers,sizeof(stringers), "Номер гаража: {FF9900}%i{FFFFFF}\nВладелец: {FF9900}Отсутствует", GarageInfo[idx][gID]);
		    LabelGarage[idx] =  CreateDynamic3DTextLabel(stringers,0xFFFFFFFF,GarageInfo[idx][gPEnter][0],GarageInfo[idx][gPEnter][1],GarageInfo[idx][gPEnter][2],15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0);
		}
		else
		{
		    format(stringers,sizeof(stringers), "Номер гаража: {FF9900}%i{FFFFFF}\nВладелец: {FF9900}%s", GarageInfo[idx][gID], GarageInfo[idx][gOwner]);
		    LabelGarage[idx] = CreateDynamic3DTextLabel(stringers,0xFFFFFFFF,GarageInfo[idx][gPEnter][0],GarageInfo[idx][gPEnter][1],GarageInfo[idx][gPEnter][2],15.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,0);
		}
        total_garage++;
	}
	printf("[SYSTEM-GARAGE]: Гаражи успешно загружены! Количество гаражей: %i", total_garage);
	return 1;
}

Делаем сток:

stock UpDataGarageInfo(idx)
{
	new stringers[84];
	if(!strcmp(GarageInfo[idx][gOwner],"None",true)) { format(stringers,sizeof(stringers), "Номер гаража: {FF9900}%i{FFFFFF}\nВладелец: {FF9900}Отсутствует", GarageInfo[idx][gID]); }
	else { format(stringers,sizeof(stringers), "Номер гаража: {FF9900}%i{FFFFFF}\nВладелец: {FF9900}%s", GarageInfo[idx][gID], GarageInfo[idx][gOwner]); }
	UpdateDynamic3DTextLabelText(LabelGarage[idx], -1, stringers);
	return 1;
}

Команды на создание и выставление координат кара:

CMD:addg(playerid, params[])
{
    new Float:GaragePos[4];
    if(sscanf(params, "d", params[0])) return SCM(playerid, -1, "{FF9900}• [Подсказка]{FFFFFF}: Используйте /addg [цена]");
    GetPlayerPos(playerid, GaragePos[0], GaragePos[1], GaragePos[2]);
	GetPlayerFacingAngle(playerid, GaragePos[3]);
	
	GarageInfo[total_garage][gPEnter][0] = GaragePos[0];
	GarageInfo[total_garage][gPEnter][1] = GaragePos[1];
	GarageInfo[total_garage][gPEnter][2] = GaragePos[2];

	GarageInfo[total_garage][gCost] = params[0];
	GarageInfo[total_garage][gPickupC] = CreateDynamicPickup(1080,23, GarageInfo[total_garage][gPEnter][0],GarageInfo[total_garage][gPEnter][1],GarageInfo[total_garage][gPEnter][2]);
	new string[128];
	format(string,sizeof(string), "INSERT INTO `garage` (`gPEnterX`,`gPEnterY`,`gPEnterZ`,`gCost`) VALUES ('%f','%f','%f','%i')",GarageInfo[total_garage][gPEnter][0],GarageInfo[total_garage][gPEnter][1],GarageInfo[total_garage][gPEnter][2],
	params[0]);
	mysql_function_query(connects, string, true, "", "d", playerid);
	SCM(playerid, -1, "Создайте кар и встаньте как будет респавниться авто в гараже и пропишите /poscar [id гаража]!");

	return 1;
}
CMD:poscar(playerid, params[])
{
	if(sscanf(params, "d", params[0])) return SendClientMessage(playerid, -1, "{FF9900}• [Подсказка]{FFFFFF}: Используйте /setposcar [id гаража]");
	if(params[0] < 0 || params[0] > 200) return 1;
	new Float:X,Float:Y,Float:Z,Float:Angle; GetPlayerPos(playerid,X,Y,Z); GetPlayerFacingAngle(playerid,Angle);
	GarageInfo[params[0]][gCar][0] = X;
	GarageInfo[params[0]][gCar][1]= Y;
	GarageInfo[params[0]][gCar][2] = Z;
	GarageInfo[params[0]][gCar][3] = Angle;
	SendClientMessage(playerid, -1, "Координаты машины установлены");
	new string[258];
	format(string, sizeof(string), "UPDATE `garage` SET `gCarX` = '%f', `gCarY` = '%f', `gCarZ` = '%f', `gCarA` = '%f' WHERE gID = '%i'",X,Y,Z,Angle,params[0]);
	mysql_function_query(connects, string, false, "", "");
	return true;
}

Где происходит подключение к базе данных:

mysql_function_query(connects,"SELECT * FROM `garage`", true, "LoadGaragePlayer", "");

Информация о данной системе:

 

MYSQL - R39-2

SSCANF2 - 2.8.1

  • Like 4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Marvellous

,  Я не вижу мапинга, т.е  игрок внутрь не сможет попасть? Только поставить и все? Или там стандартный ящик идет? Просто ты это не написал,а по поводу этого будет много вопросов!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Rips
@Marvellous,на брилианте кары респавнятся рядом с гаражом а не внутри его

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Marvellous

, Ну я там просто не играл и не в курсе! Могу если надо,то могу сделать интерьер к гаражу,ну тут уже нужно дописывать код будет!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Rips

UPDATA: добавил таблицу гаражей:

-- phpMyAdmin SQL Dump
-- version 3.5.1
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1
-- Время создания: Ноя 09 2017 г., 08:31
-- Версия сервера: 5.5.25
-- Версия PHP: 5.3.13

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- База данных: `gta_rp`
--

-- --------------------------------------------------------

--
-- Структура таблицы `garage`
--

CREATE TABLE IF NOT EXISTS `garage` (
  `gID` int(11) NOT NULL AUTO_INCREMENT,
  `gOwner` varchar(26) NOT NULL,
  `gCarX` float NOT NULL,
  `gCarY` float NOT NULL,
  `gCarZ` float NOT NULL,
  `gCarA` float NOT NULL,
  `gCost` int(11) NOT NULL,
  `gPrice` int(11) NOT NULL,
  `gPEnterX` float NOT NULL,
  `gPEnterY` float NOT NULL,
  `gPEnterZ` float NOT NULL,
  PRIMARY KEY (`gID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
hteppl

Система пропадания машины при выходе из сервера присутствует?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
#Rips

, это только система гаражей , люди которые будут брать данную систему они будут должны сами писать удаление машины при выходе

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SCRIPTMAN

,при коннекте делай проверку, если у игрока есть тачка, то удаляй ее по ID авто, при коннекте, тоже проверка, но уже если есть, то респавнь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вова12345678

Почему у меня нету диолога когда нажимаю ALT?

Как на скрине

Изменено пользователем Вова12345678

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
failed
6 часов назад, Вова12345678 сказал:

Почему у меня нету диолога когда нажимаю ALT?

Как на скрине

Значит, не правильно вставили, или не поменяли параметры под свой мод

Изменено пользователем failed

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вова12345678
23 часа назад, failed сказал:

Значит, не правильно вставили, или не поменяли параметры под свой мод

Уже работает

  • Sad 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.