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

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

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

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

Дом на колёсах

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

MrJunior

Компетентный
Здравствуйте. Этот мануал содержит систему дома на колёсах. Сейчас на её опишу:

1. Возможность выдачи/удаление дома на колёсах администратором.
2. Возможность оставить дом на колёсах в месте(он появится там).
3. Возможность войти/выйти из дома на колёсах.
4. Возможность закрыть дом на колёсах.

Ко всему этому говорю что переменные как всегда нужно менять под свои. Всё переменные опишу.


Начнём с создания нужных переменных. Так как при сохранении дома и его координат простые переменные не пойдут то мы будет использовать enum pInfo.
Сперва обычные переменные:
PHP:
new Intropic[MAX_PLAYERS], Watching[MAX_PLAYERS], Goto[MAX_PLAYERS], spdomk[MAX_PLAYERS];
Теперь enum pInfo:
PHP:
	pPosX,
	pPosY,
	pPosZ,
    pDomK,
В OnPlayerConnect, OnPlayerDeath, OnPlayerDisconnect:
PHP:
	Intropic[playerid] = 0;
	Watching[playerid] = 0;
	Goto[playerid] = 0;
Идём дальше. Данная система держится на командах. Вот код всех команд. Также присутствует команда /domhelp. Там же и описание всех команд:
OnPlayerCommandText:
PHP:
	if(strcmp(cmd, "/park", true) == 0)
	{
	    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetVehicleModel(GetPlayerVehicleID(playerid)) == 508)
	    {
	        if(PlayerInfo[playerid][pDomK] != 1) return SCM(playerid, COLOR_RED, "У игрока есть дом на колёсах");
     		new Float:x, Float:y, Float:z, string[156], playerveh = GetPlayerVehicleID(playerid);
			GetVehiclePos(playerveh, x, y, z);
			format(string, sizeof(string), "Вы оставили дом на колёсах на координатах: x:%d, y:%d, z:%d", x, y, z);
			PlayerInfo[playerid][pPosX] += x;
			PlayerInfo[playerid][pPosY] += y;
			PlayerInfo[playerid][pPosZ] += z;
			SCM(playerid, COLOR_GREEN, string);
		}
		else
		{
			SCM(playerid, COLOR_RED, "Вы не пассажир или водитель дома на колёсах.");
		}
		return 1;
	}
	if(strcmp(cmd, "/dom", true) == 0)
	{
	    if(PlayerInfo[playerid][pAdmin] >= 5)
	    {
  			new giveplayer[MAX_PLAYER_NAME],giveplayerid,sendername[MAX_PLAYER_NAME],string[256], Float:x, Float:y, Float:z;
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp)) return  SendClientMessage(playerid, COLOR_WHITE, "Введите: /dom [id]");
			giveplayerid = ReturnUser(tmp);
			if(IsPlayerConnected(giveplayerid))
			{
				if(PlayerInfo[giveplayerid][pDomK] == 1) return SCM(playerid, COLOR_LIGHTRED, "У человека уже есть дом на колёсах");
				if(giveplayerid == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_GREY, "Человек не найден!");
				GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
				GetPlayerName(playerid, sendername, sizeof(sendername));
				GetPlayerPos(giveplayerid, x, y, z);
				format(string, sizeof(string), "Вы выдали %s дом на колесах.", giveplayer);
				SendClientMessage(playerid, COLOR_YELLOW, string);
				format(string, sizeof(string), "Администратор %s выдал вам дом на колёсах.", sendername);
				SendClientMessage(giveplayerid, COLOR_YELLOW, string);
				SendClientMessage(giveplayerid, COLOR_GREEN, "Введите: /domhelp. Данная команда покажет вам все возможные команды с домом на колёсах");
				PlayerInfo[giveplayerid][pDomK] += 1;
				CreateVehicle(508, x+5, y+1, z+1, 0, 1, 1, -1, 0);
			}
		}
		return 1;
	}
	if(strcmp(cmd, "/domenter", true) == 0)
	{
		if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER && GetVehicleModel(GetPlayerVehicleID(playerid)) == 508 || GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetVehicleModel(GetPlayerVehicleID(playerid)) == 508)
		{
     		SetPlayerPos(playerid, 2531.9512, -1031.5807, 54.0299);
    	 	SetPlayerFacingAngle(playerid, 0);
   		    SetCameraBehindPlayer(playerid);
   	 	    SetPlayerInterior(playerid, 1);
			Intropic[playerid] = GetPlayerVehicleID(playerid);
			SendClientMessage(playerid, COLOR_BLUE, "Вы вошли в дом на колёсах. Для выхода введите: /domexit");
		}
		return 1;
	}
	if(strcmp(cmd, "/domexit", true) == 0)
	{
		if(Intropic[playerid] > 0)
		{
			new Float:x, Float:y, Float:z;
			GetVehiclePos(Intropic[playerid],x,y,z);
			SetPlayerPos(playerid, x+4, y, z);
			SetPlayerInterior(playerid, 0);
			Intropic[playerid] = 0;
		}
		return 1;
	}
	if(strcmp(cmd, "/domlock", true) == 0)
	{
		new carid = GetPlayerVehicleID(playerid);
	    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetVehicleModel(GetPlayerVehicleID(playerid)) == 508)
	    {
	        if(IsLocked[carid] == 1)
	        {
	            SendClientMessage(playerid, COLOR_GREEN, "Вы открыли дом на колёсах");
	            IsLocked[carid] = 0;
	            OnPlayerCommandText(playerid, "/me открыл дом на колёсах.");
			}
			if(IsLocked[carid] == 0)
			{
	            SendClientMessage(playerid, COLOR_GREEN, "Вы закрыли дом на колёсах");
	            IsLocked[carid] = 1;
	            OnPlayerCommandText(playerid, "/me закрыл дом на колёсах.");
			}
		}
		return 1;
	}
		if(strcmp(cmd, "/domdel", true) == 0)
	{
	    if(PlayerInfo[playerid][pAdmin] < 5) return SCM(playerid, COLOR_LIGHTRED, "Вы не администратор 5+ уровня");
		tmp = strtok(cmdtext, idx), new giveplayerid, giveplayername[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME], string[256];
		if(!strlen(tmp)) return  SendClientMessage(playerid, COLOR_WHITE, "Введите: /domdel [id]");
		giveplayerid = ReturnUser(tmp), GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayername, sizeof(giveplayername));
		if(PlayerInfo[giveplayerid][pDomK] == 0) return SCM(playerid, COLOR_LIGHTRED, "У игрока нету дома на колёсах. Что-бы выдать ему введите: /dom [id]");
		PlayerInfo[giveplayerid][pDomK] = 0;
		PlayerInfo[giveplayerid][pPosX] = 0;
  		PlayerInfo[giveplayerid][pPosY] = 0;
  		PlayerInfo[giveplayerid][pPosZ] = 0;
		format(string, sizeof(string), "Вы удалили у %s дом на колёсах", giveplayername);
		SCM(playerid, COLOR_LIGHTGREEN, string);
		format(string, sizeof(string), "%s удалил у вас дом на колёсах", sendername);
		SCM(giveplayerid, COLOR_LIGHTRED, string);
		return 1;
	}
	if(strcmp(cmd, "/domhelp", true) == 0)
	{
		SendClientMessage(playerid, COLOR_BLUE, "/domhelp - Помощь по командам.");
		SendClientMessage(playerid, COLOR_BLUE, "/dom [Для администратора] - Выдать дом игроку, /domdel - Удалить дом у игрока.");
		SendClientMessage(playerid, COLOR_BLUE, "/park - Припарковать дом на колёсах.");
		SendClientMessage(playerid, COLOR_BLUE, "/domenter - ввойти в дом(Нужно быть пассажиром или водителём дома).");
		SendClientMessage(playerid, COLOR_BLUE, "/domexit - выйти из дома(Нужно быть в нём).");
		SendClientMessage(playerid, COLOR_BLUE, "/domlock - закрыть дом(Нужно быть в доме за рулём).");
		return 1;
	}
Теперь в OnPlayerSpawn:

PHP:
	if(PlayerInfo[playerid][pDomK] == 1)
	{
	    if(spdomk[playerid] == 1) return 1;
	    CreateVehicle(508, PlayerInfo[playerid][pPosX], PlayerInfo[playerid][pPosY], PlayerInfo[playerid][pPosZ], 0, 1, 1, -1, 0);
	    spdomk[playerid] = 1;
	}
Основную переменную которую нужно заменить [pAdmin]. Переменная отвечает за админку. Но как правило такая переменная в многих модах и используется.

За основу был взял filtescript Motorhome by Xe0n1X.
Я мог и сам написать но уже был установлен и решил уже взять его за основу.

Всё было написано давно я только решил выложить.

---------- Сообщение добавлено в 17:21 ---------- Предыдущее сообщение добавлено в 17:18 ----------

Совсем забыл:

Есть переменная
IsLocked[carid].
Отвечает за закрытие или открытие дома.
Заменить на свою(можно найти в команде /lock).
Используется в /domlock

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

Вот интерьер: [в OnGameModeInit]
PHP:
    CreateObject(14385,2530.67553711,-1027.89440918,54.60150909,0.00000000,0.00000000,0.00000000);
    CreateObject(2933,2531.25341797,-1020.92291260,54.74554825,0.00000000,0.00000000,0.00000000);
    CreateObject(2933,2531.28027344,-1034.87976074,54.74554825,0.00000000,0.00000000,0.00000000); 
    CreateObject(2933,2532.95117188,-1030.85021973,54.74554825,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2532.94091797,-1022.09344482,54.74554825,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2529.51000977,-1021.40264893,54.74554825,0.00000000,0.00000000,90.00000000);
    CreateObject(2933,2531.20898438,-1031.68420410,52.94545364,90.00000000,90.00000000,0.00000000);
    CreateObject(2933,2531.18847656,-1025.24841309,52.94545364,90.00000000,90.00000000,0.00000000);
    CreateObject(2933,2528.55102539,-1036.16259766,54.74554825,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2528.36547852,-1031.51403809,54.74554825,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2528.34106445,-1026.03588867,54.74554825,0.00000000,0.00000000,90.00000000);
    CreateObject(2933,2529.16967773,-1031.40917969,52.92055893,90.00000000,90.00000000,0.00000000);
    CreateObject(2933,2528.47314453,-1022.95819092,52.93734360,90.00000000,90.00000000,0.00000000); 
    CreateObject(2933,2525.23022461,-1025.71997070,54.74554825,0.00000000,0.00000000,0.00000000); 
    CreateObject(1794,2533.14135742,-1022.39886475,53.02993393,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2531.05029297,-1034.04296875,51.93857193,0.00000000,0.00000000,0.00000000);
    CreateObject(2933,2531.14550781,-1034.65258789,52.44554520,0.00000000,0.00000000,0.00000000);
    CreateObject(2933,2532.75366211,-1037.10717773,52.44557571,0.00000000,0.00000000,90.00000000);
    CreateObject(2933,2532.14990234,-1037.08435059,51.92054367,0.00000000,0.00000000,90.00000000);
    CreateObject(2933,2529.33129883,-1037.09753418,51.92054367,0.00000000,0.00000000,90.00000000);
    CreateObject(2933,2528.72656250,-1037.08666992,52.44556046,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2530.19360352,-1035.68481445,53.57050705,90.00000000,90.00000000,90.00000000); 
    CreateObject(2933,2533.78735352,-1037.08166504,53.57477188,90.00000000,90.00000000,180.00000000); 
    CreateObject(2933,2527.67504883,-1037.08349609,53.57047653,90.00000000,90.00000000,179.99450684); 
    CreateObject(2933,2532.14501953,-1028.75000000,49.27038193,0.00000000,90.00000000,90.00000000); 
    CreateObject(2933,2532.73632812,-1028.73999023,49.69539261,0.00000000,90.00000000,90.00000000); 
    CreateObject(2933,2532.53808594,-1028.44555664,49.82053757,0.00000000,90.00000000,180.00000000); 
    CreateObject(2933,2532.51074219,-1029.09643555,49.27051926,0.00000000,90.00000000,180.00000000);
    CreateObject(2933,2536.45483398,-1028.78076172,53.57050705,90.00000000,90.00000000,90.00000000);
    CreateObject(2236,2530.26464844,-1033.59094238,53.05493546,0.00000000,0.00000000,0.00000000); 
    CreateObject(1433,2531.26562500,-1029.86877441,53.40963364,0.00000000,0.00000000,0.00000000);
    CreateObject(1433,2531.29711914,-1029.86804199,53.05961227,0.00000000,180.00000000,0.00000000);
    CreateObject(3498,2531.28515625,-1029.88000488,49.36687469,0.00000000,0.00000000,0.00000000);
    CreateObject(2133,2532.04809570,-1024.60229492,53.02000046,0.00000000,0.00000000,270.00000000); 
    CreateObject(2134,2532.04809570,-1025.58801270,53.02000046,0.00000000,0.00000000,270.00000000);
    CreateObject(2134,2532.04809570,-1026.58447266,53.02000046,0.00000000,0.00000000,270.00000000); 
    CreateObject(2133,2531.28686523,-1027.33825684,53.02000046,0.00000000,0.00000000,180.00000000); 
    CreateObject(2134,2531.93554688,-1027.12622070,53.02000046,0.00000000,0.00000000,230.00000000); 
    CreateObject(2141,2529.39184570,-1028.29162598,53.02993393,0.00000000,0.00000000,90.00000000);
    CreateObject(2141,2528.39721680,-1028.27893066,53.02993393,0.00000000,0.00000000,270.00000000); 
    CreateObject(2141,2529.39184570,-1026.30310059,53.02993393,0.00000000,0.00000000,90.00000000); 
    CreateObject(2141,2528.38305664,-1026.26110840,53.01482010,0.00000000,0.00000000,270.00000000); 
    CreateObject(2141,2529.39184570,-1027.31066895,53.02993393,0.00000000,0.00000000,90.00000000); 
    CreateObject(989,2534.66259766,-1023.08361816,54.15093994,0.00000000,0.00000000,286.25000000); 
    CreateObject(989,2528.02099609,-1023.06951904,54.55073547,0.00000000,0.00000000,287.25000000); 
    CreateObject(1538,2529.08007812,-1031.16210938,51.65485001,0.00000000,0.00000000,270.00000000); 
    CreateObject(1538,2529.07836914,-1029.66748047,51.57998276,0.00000000,0.00000000,270.00000000); 
    CreateObject(1538,2529.09326172,-1029.16381836,51.65485001,0.00000000,0.00000000,270.00000000);
    CreateObject(1538,2529.84667969,-1029.22412109,51.65778732,0.00000000,0.00000000,180.00000000); 
    CreateObject(8661,2530.97265625,-1034.77844238,54.23719406,0.00000000,90.00000000,90.00000000); 
    CreateObject(8661,2532.87353516,-1038.42993164,53.44306183,0.00000000,90.00000000,180.00000000); 
    CreateObject(8661,2528.61865234,-1042.20947266,54.19131088,0.00000000,90.00000000,0.00000000);
    CreateObject(1649,2532.84252930,-1030.51269531,54.69567490,0.00000000,0.00000000,270.00000000);
    CreateObject(1649,2532.86010742,-1034.87939453,55.22616959,0.00000000,0.00000000,270.00000000); 
    CreateObject(1649,2530.75000000,-1034.77307129,55.31372452,0.00000000,0.00000000,180.00000000); 
    CreateObject(1649,2528.62451172,-1034.96411133,55.31372452,0.00000000,0.00000000,90.00000000); 
    CreateObject(1498,2532.86254883,-1030.83801270,53.02993393,0.00000000,0.00000000,270.00000000); 
    CreateObject(2911,2529.58544922,-1025.12622070,53.02993393,0.00000000,0.00000000,90.00000000); 
    CreateObject(2933,2531.09887695,-1027.45715332,56.27935028,90.00000000,90.00000000,0.00000000); 
    CreateObject(2933,2527.71777344,-1027.45788574,56.27909088,90.00000000,90.00000000,0.00000000); 
    CreateObject(2933,2530.38769531,-1033.46655273,56.27233124,90.00000000,90.00000000,90.00000000);
    CreateObject(2933,2532.91186523,-1021.36553955,55.75210571,90.00000000,90.00000000,90.00000000);
    CreateObject(2303,2529.00952148,-1031.19226074,53.02993393,0.00000000,0.00000000,90.00000000);
    CreateObject(8661,2529.58496094,-1015.38922119,56.46629715,0.00000000,90.00000000,0.00000000);
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу