В теме 6 сообщений

Привет всем "обитателям" форума pawno-rus.ru

В этом уроке я покажу как создать желаемую фракцию в pawno

В этом уроке будет:

[1] Создание самой фракции;

[2] Создание фракционных машин(с проверкой, состоит ли игрок в данной организации или нет);

[3] Создание пикапов входа и выхода в интерьер;

[4] Создание команды /makeleader и /warehouse;

[5] Сохранение всего в базе данных MySQL (R41);

Все нужные инклуды и плагины:

(текст кликабелен)

Pawn.CMD

sscanf

#include <a_samp>
#include <a_mysql>
#include <Pawn.CMD>
#include <sscanf2>

Начнем на примере будет организация LSPD! Если вы найдете какие-то баги, недоработки и т.д. и т.п. то пишите сюда или мне в личку ВК: vk.com/martun_mkrt

 

Для начала вставьте это в начало вашего мода(где хранятся все дефайны)

#define GN(%0)      	player_name[%0]
#define SCM         	SendClientMessage
#define SPD         	ShowPlayerDialog
#define DSI				DIALOG_STYLE_INPUT
#define DSL				DIALOG_STYLE_LIST
#define DSM             DIALOG_STYLE_MSGBOX
#define DSTH            DIALOG_STYLE_TABLIST_HEADERS
#define DSP             DIALOG_STYLE_PASSWORD
#define SCMTA           SendClientMessageToAll
//
#if !defined isnull
#define isnull(%0)      ((!(%0[0])) || (((%0[0]) == '\1') && (!(%0[1]))))
#endif
//
new
  	connect_mysql, // подключение к базе данных
	lspd_pick[7], //Кол-во пикапов
	lspd_car[27], //Кол-во машин

	Float: pos_pick[3][MAX_PLAYERS],
	bool: anti_flood_pick[MAX_PLAYERS char],
	leaders_info[1][4+1] = {	//При создании нововй фракции то учитывайте название (не более 4 символов)
	"LSPD"
};

Затем рядом со всеми енумами создаем новый:

enum mInfo
{
	mLSPD,
}

Затем в enum dInfo и pInfo -  вставляем следущий код(если нету enum dInfo то создаем):

enum pInfo // если у вас уже есть этот енум и все эти значения то заменяйте их на свои
{
	pID,
	pName[MAX_PLAYER_NAME],
	pPass[65],
	pSkin,
	pLeader,
	pModel,
	pMember,
	pRank,
}
new PlayerInfo[MAX_PLAYERS][pInfo];

enum dInfo
{
	DLG_LSPD,
}

Создаем паблик с телом:

public OnPlayerStateChange(playerid, newstate, oldstate)
{
	new
	    carid = GetPlayerVehicleID(playerid);

	if(newstate == PLAYER_STATE_DRIVER)
	{
	    if(carid >= lspd_car[0] && carid <= lspd_car[26])
	    {
	        if(PlayerInfo[playerid][pMember] == 1) { }// PlayerInfo - меняем на свое
	        else
	        {
	            RemovePlayerFromVehicle(playerid);
	            SCM(playerid, COLOR_GREY, !"Транспорт принадлежит Депортаменту г. Лос-Сантос!");
	        }
	    }
	}
	return true;
}

Потом находим паблик OnDialogOnDialogResponse, и в тело кидаем этот код:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
		case 19:
		{
		    if(response)
		    {
				switch(listitem)
				{
				    case 0:
				    {
				        static const
						    fmt_str[] = "%s взял Deagle со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
						GivePlayerWeapon(playerid, 24, 35);
				    }
				    case 1:
				    {
				        static const
						    fmt_str[] = "%s взял ShotGun со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
				        GivePlayerWeapon(playerid, 25, 20);
				    }
				    case 2:
				    {
				        static const
						    fmt_str[] = "%s взял MP5 со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
				        GivePlayerWeapon(playerid, 29, 60);
				    }
				    case 3:
				    {
				        static const
						    fmt_str[] = "%s взял дубинку со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
				        GivePlayerWeapon(playerid, 3, 1);
				    }
				    case 4:
				    {
				        static const
						    fmt_str[] = "%s взял сухпаёк со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
				        SetPlayerHealth(playerid, 100.0);
				    }
				    case 5:
				    {
				        static const
						    fmt_str[] = "%s взял бронежилет со склада";
						new
						    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

						format(string, sizeof(string), fmt_str, GN(playerid));
						ProxDetector(5.0, playerid, string, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE, COLOR_PURPLE);
				        SetPlayerArmour(playerid, 100.0);
				    }
				}
				DialogGunLSPD(playerid);
		    }
		}
	}
	return true;
}

Потом в конце мода создаем сток:

stock DialogGunLSPD(playerid)
{
	SPD(playerid, 19, DSTH, "Оружейный склад",
	!"\
		{FFFFFF}Имя:\t\tПатроны:\
		\n1) Deagle\t\t35\
		\n2) ShotGun\t\t20\
		\n3) MP5\t\t60\
		\n4) Дубинка\
		\n5) Сухпаёк\
		\n6) Бронежилет", "Выбрать", "Отмена\
	");
}
stock 

Потом в паблик OnPlayerPickUp кидаем это:

public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
	if(anti_flood_pick{playerid} == true)
	    return true;
	else
	{
	    anti_flood_pick{playerid} = true;
	    GetPlayerPos(playerid, pos_pick[0][playerid], pos_pick[1][playerid], pos_pick[2][playerid]);
	}
	if(pickupid == lspd_pick[0])
	{
	    SetPlayerPos(playerid, 246.5715,65.2846,1003.6406); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 2.3383);
		SetPlayerVirtualWorld(playerid, 1);
		SetPlayerInterior(playerid, 6);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[1])
	{
	    SetPlayerPos(playerid, 246.7730,84.8201,1003.6406); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 179.3500);
		SetPlayerVirtualWorld(playerid, 1);
		SetPlayerInterior(playerid, 6);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[2])
	{
	    SetPlayerPos(playerid, 1552.6343,-1675.7346,16.1953); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 86.4747);
		SetPlayerVirtualWorld(playerid, 0);
		SetPlayerInterior(playerid, 0);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[3])
	{
	    SetPlayerPos(playerid, 1568.7280,-1693.8474,5.8906); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 180.4991);
		SetPlayerVirtualWorld(playerid, 0);
		SetPlayerInterior(playerid, 0);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[4])
	{
	    SetPlayerPos(playerid, 316.5714,-167.7457,999.5938); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 359.0539);
		SetPlayerVirtualWorld(playerid, 1);
		SetPlayerInterior(playerid, 6);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[5])
	{
	    SetPlayerPos(playerid, 1527.6619,-1677.7692,5.8906); // Значения меняем на свои!
		SetPlayerFacingAngle(playerid, 269.1499);
		SetPlayerVirtualWorld(playerid, 0);
		SetPlayerInterior(playerid, 0);
		SetCameraBehindPlayer(playerid);
	}
	if(pickupid == lspd_pick[6])
	{
		if(PlayerInfo[playerid][pMember] != 1)
			return SCM(playerid, COLOR_GREY, !"Вы не состоите в LSPD");
			
		DialogGunLSPD(playerid);
	}
	return true;
}

Потом перед ранее созданым стоком "stock DialogGunLspd" создаем еще два стока:

stock Pickups()
{
	// LSPD
	lspd_pick[0] = CreateDynamicPickup(1318, 23, 1555.5059,-1675.7415,16.1953); // дверь улица 
	lspd_pick[1] = CreateDynamicPickup(1318, 23, 1568.6741,-1689.9702,6.2188); // дверь гаража улицы
	lspd_pick[2] = CreateDynamicPickup(1318, 23, 246.8043,62.3237,1003.6406, 1, 6); // дверь в участке
	lspd_pick[3] = CreateDynamicPickup(1318, 23, 246.4056,88.0078,1003.6406, 1, 6); // дверь в гараж
	lspd_pick[4] = CreateDynamicPickup(1318, 23, 1524.4835,-1677.8490,6.2188); // дверь в оружейную
	lspd_pick[5] = CreateDynamicPickup(1318, 23, 316.3202,-170.2966,999.5938); // дверь из оружейной
	lspd_pick[6] = CreateDynamicPickup(2061, 23, 312.1859,-168.7103,999.5938); // Боеприпасы
}
stock Cars()
{
	// LSPD
    lspd_car[0] = AddStaticVehicleEx(596, 1602.4960, -1683.9705, 5.6106, 89.9966, 0, 1, 600); // координаты изменяем по своему усмотрению
	lspd_car[1] = AddStaticVehicleEx(596, 1602.4961, -1688.1863, 5.6106, 89.9944, 0, 1, 600);
	lspd_car[2] = AddStaticVehicleEx(596, 1602.4960, -1692.1858, 5.6106, 89.9963, 0, 1, 600);
	lspd_car[3] = AddStaticVehicleEx(596, 1602.4961, -1696.4399, 5.6106, 89.9965, 0, 1, 600);
	lspd_car[4] = AddStaticVehicleEx(596, 1602.4961, -1700.4475, 5.6105, 89.9928, 0, 1, 600);
	lspd_car[5] = AddStaticVehicleEx(596, 1602.4973, -1704.7720, 5.6111, 89.9599, 0, 1, 600);
	lspd_car[6] = AddStaticVehicleEx(596, 1591.1188, -1710.8458, 5.6106, 359.9953, 0, 1, 600);
	lspd_car[7] = AddStaticVehicleEx(596, 1587.0615, -1710.8457, 5.6106, 359.9914, 0, 1, 600);
	lspd_car[8] = AddStaticVehicleEx(596, 1582.9340, -1710.8418, 5.6106, 359.9973, 0, 1, 600);
	lspd_car[9] = AddStaticVehicleEx(596, 1578.0387, -1710.8459, 5.6106, 359.9960, 0, 1, 600);
	lspd_car[10] = AddStaticVehicleEx(596, 1574.0431, -1710.8464, 5.6115, 359.9565, 0, 1, 600);
	lspd_car[11] = AddStaticVehicleEx(596, 1569.6342, -1710.8481, 5.5788, 359.9579, 0, 1, 600);
	lspd_car[12] = AddStaticVehicleEx(596, 1558.3914, -1710.8352, 5.6231, 359.9962, 0, 1, 600);
	lspd_car[13] = AddStaticVehicleEx(596, 1584.5720, -1672.3798, 5.6135, 269.9952, 0, 1, 600);
	lspd_car[14] = AddStaticVehicleEx(596, 1584.5693, -1668.1559, 5.6123, 269.9404, 0, 1, 600);
	lspd_car[15] = AddStaticVehicleEx(523, 1545.6881, -1684.3760, 5.4628, 89.8548, 0, 1, 600);
	lspd_car[16] = AddStaticVehicleEx(523, 1545.6832, -1680.3370, 5.4628, 90.0000, 0, 1, 600);
	lspd_car[17] = AddStaticVehicleEx(523, 1545.6796, -1676.2489, 5.4715, 90.0000, 0, 1, 600);
	lspd_car[18] = AddStaticVehicleEx(523, 1545.6934, -1672.1342, 5.4719, 90.0000, 0, 1, 600);
	lspd_car[19] = AddStaticVehicleEx(523, 1545.7043, -1667.6414, 5.4657, 89.5909, 0, 1, 600);
	lspd_car[20] = AddStaticVehicleEx(523, 1545.6930, -1663.1404, 5.4719, 90.0000, 0, 1, 600);
	lspd_car[21] = AddStaticVehicleEx(601, 1545.4475, -1659.0334, 5.6477, 89.9272, 0, 1, 600);
	lspd_car[22] = AddStaticVehicleEx(601, 1545.4456, -1655.0054, 5.6652, 89.9993, 0, 1, 600);
	lspd_car[23] = AddStaticVehicleEx(427, 1538.1487, -1644.9996, 6.0336, 180.0003, 0, 1, 600);
	lspd_car[24] = AddStaticVehicleEx(427, 1534.1730, -1644.9996, 6.0335, 180.0002, 0, 1, 600);
	lspd_car[25] = AddStaticVehicleEx(427, 1529.9532, -1644.9991, 6.0335, 180.0003, 0, 1, 600);
	lspd_car[26] = AddStaticVehicleEx(497, 1559.2762,-1644.1458,28.5774,90.9602, 0, 1, 600);
}

Потом после стока  "DialogGunLSPD" создаем еще два стока:

stock LoadMaterials()
{
	mysql_query(connect_mysql, "SELECT * FROM `materials`");
	materials[mlspd] = cache_get_field_content_int(0, "LSPD");
}
stock SaveMaterials()
{
    static const
	    fmt_str[] = "UPDATE `materials` SET `LSPD` = '%d'";
	new
	    string[sizeof(fmt_str)+5];

	format(string, sizeof(string), fmt_str, materials[mLSPD]);
	mysql_tquery(connect_mysql, string, false, "", "");
}

ВНИМАНИЕ: НЕ ЗАБУДТЕ СОЗДАТЬ В БАЗЕ ДАННЫХ НОВУЮ ТАБЛИЦУ "materials" и внести туда столбец LSPD со значением INT 

 

В конце мода создаем команду для проверки материалов:

CMD:warehouse(playerid)
{
	if(PlayerInfo[playerid][pMember] == 0)
	    return SCM(playerid, COLOR_GREY, !"Вы не уполномочены использовать данную команду!");
	    
	switch(PlayerInfo[playerid][pMember])
	{
	    case 1:
	    {
	        static const
			    fmt_str[] = "Склад LSPD: %d/100000";
			new
			    string[sizeof(fmt_str)+5];

			format(string, sizeof(string), fmt_str, materials[mLSPD]);
			SCM(playerid, COLOR_BLUE, string);
	    }
	}
	return true;
}

И в начало мода создаем дефайны цветов чтобы не было ошибок:

#define COLOR_WHITE 	0xFFFFFFFF
#define COLOR_LIGHTRED 	0xFF463CFF
#define COLOR_GREY      0xA6A69FFF
#define COLOR_GREY_2 	0xC8C8C8C8
#define COLOR_GREY_3 	0xAAAAAAAA
#define COLOR_GREY_4 	0x8C8C8C8C
#define COLOR_RED       0xFF0000FF
#define COLOR_ORANGE    0xDF8600FF
#define COLOR_GREEN     0x2CB816FF
#define COLOR_YELLOW    0xFFFF00FF
#define COLOR_BLUE      0x00BFFFFF
#define COLOR_PURPLE 	0xC2A2DAAA

И последнее! 

В  паблик OnPlayerConnect добавляем:

GetPlayerName(playerid, player_name[playerid], MAX_PLAYER_NAME);
 	static
	    fmt_str[] = "SELECT `ID` FROM `accounts` WHERE `Name` = '%s' LIMIT 1";
	new
	    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

А в паблик OnPlayerDisconnect добавляем:

	static
	    fmt_str[] = "UPDATE `ID` FROM `accounts` WHERE `Name` = '%s' LIMIT 1";
	new
	    string[sizeof(fmt_str)+MAX_PLAYER_NAME-1];

НЕ ЗАБУДЬТЕ СОЗДАТЬ В БАЗЕ ДАННЫХ ТАБЛИЦУ "accounts" и добавить туда столбцы из enum pInfo, только без первой буквы "p".

 

Если будут ошибки/проблемы обращайтесь!

 

VK: wk.com/martun.mkrt

Отредактировано пользователем daltwb

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


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

Можно было тогда и название фракции хранить в базе и ранги.

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


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

@SCRIPTMANЗачем? Если это уже все прописано в моде

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


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

@daltwb ну раз система фракций на MySQL, тогда бы и фракции стали динамическими(названия рангов и т. д. в игре можно было бы менять)

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


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

@SCRIPTMAN Хорошо, вот сток с рангами:

stock RankName(playerid)
{
	new atext[64];
	switch(PlayerInfo[playerid][pMember])
	{
	case 0:
		{
			switch(PlayerInfo[playerid][pRank])
			{
			case 0: atext = "Áåçðàáîòíûé";
			}
		}
	case 1:
		{
			switch(PlayerInfo[playerid][pRank])
			{
			case 10: atext = "Шериф";
			case 9: atext = ".....";
			case 8: atext = ".....";
			case 7: atext = ".....";
			case 6: atext = ".....";
			case 5: atext = ".....";
			case 4: atext = ".....";
			case 3: atext = ".....";
			case 2: atext = "Сержант";
			case 1: atext = "Рядовой";
			}
		}
	}
	return atext;
}

А вот сохранение фракций:

stock SaveFrac(playerid, const field_name[], const set[], const type[])
{
	new
	    string[128+1];

	if(!strcmp(type, "d", true))
	{
	    mysql_format(connect_mysql, string, sizeof(string), "UPDATE `fractions` SET `%s` = '%d' WHERE `id` = '%d' LIMIT 1",
		field_name, set, PlayerInfo[playerid][pID]);
	}
    mysql_tquery(connect_mysql, string, "", "");
}

Нужно создать таблицу "fractions" добавить туда: id фракции

 

Изменение названий рангов в игре это уже должен быть другой урок, если кто-то захочет - сделаю.

Отредактировано пользователем daltwb

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


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

Советую доработать урок и сделать со всеми рангами динамично из базы данных.

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


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

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

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

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

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


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

Войти

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


Войти

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

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

  • Похожий контент

    • Chopick
      От Chopick
      Всем здравствуйте! Делаю систему домов/бизнесов по туториалу knox know с плагином GoodArea. Есть проблема, если заходишь в интерьер бизнеса, то когда выходишь спавнит почему-то на пикап дома.

      Вот енумы:
       
      #define MAX_HOUSES 1000 #define MAX_BIZS 1000 enum house {         hID,         STREAMER_TAG_PICKUP:hPICKUP,         STREAMER_TAG_AREA:hAREA,         hOWNER[MAX_PLAYER_NAME],         STREAMER_TAG_3D_TEXT_LABEL:hTEXT[256],         STREAMER_TAG_MAP_ICON:hICON,         hPRICE,         hCLASS,         hINTERIOR,         Float:hX,         Float:hY,         Float:hZ,         Float:hA,         hCONDITION // Закрыт/Открыт } new House[MAX_HOUSES][house]; new Houses; new HouseGroup; enum biz {         bID,         STREAMER_TAG_PICKUP:bPICKUP,         STREAMER_TAG_AREA:bAREA,         bOWNER[MAX_PLAYER_NAME],         STREAMER_TAG_3D_TEXT_LABEL:bTEXT[256],         STREAMER_TAG_MAP_ICON:bICON,         bNAME[25],         bPRICE,         bTYPE,         bINTERIOR,         Float:bX,         Float:bY,         Float:bZ,         Float:bA } new Biz[MAX_BIZS][biz]; new Bizs; new BizGroup; enum interior_info {         intID,         intNAME[41],         intINTERIOR,         Float:intX,         Float:intY,         Float:intZ,         Float:intA,         STREAMER_TAG_AREA:intAREA } new Interior[MAX_INTERIORS][interior_info]; new Interiors; new InteriorGroup; Вот что у меня в OnGameModeInit:
      HouseGroup = CreateGroupGoodAreas(GoodArea:HouseEnter); InteriorGroup = CreateGroupGoodAreas(GoodArea:InteriorExit); BizGroup = CreateGroupGoodAreas(GoodArea:BizArea);  
      Вот стоки:
      GAResponse:HouseEnter(playerid, response, key, index) {         switch(response)         {             case GA_RESPONSE_PRESS_KEY:             {                 if(key & KEY_WALK)                 {                 if(House[index][hCONDITION] > 0 && House[index][hOWNER] == player_info[playerid][NAME] || House[index][hCONDITION] == 0)                 {                                         GoToInterior(playerid, House[index][hINTERIOR]);                                         SetPlayerVirtualWorld(playerid, index);                                 }                                 else if(House[index][hCONDITION] > 0 && House[index][hOWNER] != player_info[playerid][NAME]) return SCM(playerid, COLOR_RED, "[Ошибка]{ffffff}Этот дом закрыт на ключ!");                         }                 }                 case GA_RESPONSE_ENTER:                 {                     if(House[index][hOWNER] == 0)                     {                         CreateNoOwnerHouseTD(playerid);                         for(new i = 0; i < sizeof NoOwnerTextDraw_PTD[]; i++)                         {                             PlayerTextDrawShow(playerid, NoOwnerTextDraw_PTD[playerid][i]);                                 }                                 new price[8];                                 format(price, sizeof(price), "%d$", House[index][hPRICE]);                                 PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][2], price);                                 new id[9];                                 format(id, sizeof(id), "%d", House[index][hID]);                                 PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][0], id);                                 switch(House[index][hCLASS])                                 {                                     case 1: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "A");                                     case 2: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "B");                                     case 3: PlayerTextDrawSetString(playerid, NoOwnerTextDraw_PTD[playerid][1], "C");                                 }                                 for(new i = 0; i < sizeof NoOwnerTextDraw_TD; i++)                         {                             TextDrawShowForPlayer(playerid, NoOwnerTextDraw_TD[i]);                                 }                         }                 }                 case GA_RESPONSE_LEAVE:                 {                 for(new i = 0; i < sizeof NoOwnerTextDraw_PTD[]; i++)                 {                     PlayerTextDrawHide(playerid, NoOwnerTextDraw_PTD[playerid][i]);                         }                         for(new i = 0; i < sizeof NoOwnerTextDraw_TD; i++)                 {                     TextDrawHideForPlayer(playerid, NoOwnerTextDraw_TD[i]);                         }                 }         }         return 1; } GAResponse:BizArea(playerid, response, key, index) {         switch(response)         {             case GA_RESPONSE_PRESS_KEY:             {                 if(key & KEY_WALK)                 {                     GoToInteriorBiz(playerid, Biz[index][bINTERIOR]);                                 SetPlayerVirtualWorld(playerid, index);                 }                 }         }         return 1; } GAResponse:InteriorExit(playerid, response, key, index) {         switch(response)         {             case GA_RESPONSE_PRESS_KEY:             {                 new world = GetPlayerVirtualWorld(playerid);                 if(key & KEY_WALK)                 {                     if(world < MAX_HOUSES)                     {                         SetPlayerInterior(playerid, 0);                             SetPlayerVirtualWorld(playerid, 0);                             SetPlayerPos(playerid, House[world][hX], House[world][hY], House[world][hZ]);                             SetPlayerFacingAngle(playerid, House[world][hA]);                                 }                                 else if(world < MAX_HOUSES + MAX_BIZS)                     {                         world -= MAX_HOUSES;                                         printf("%d index world", world);                         SetPlayerInterior(playerid, 0);                             SetPlayerVirtualWorld(playerid, 0);                             SetPlayerPos(playerid, Biz[world][bX], Biz[world][bY], Biz[world][bZ]);                             SetPlayerFacingAngle(playerid, Biz[world][bA]);                                 }                         }                         if(key & KEY_CTRL_BACK)                         {                             if(player_info[playerid][HOUSE] != House[world][hID]) return SCM(playerid, COLOR_RED, "[Ошибка]{ffffff}Вы не владелец данного дома!");                             new dialog[256];                                 format(dialog, sizeof(dialog),                                         "{ffd900}[1]{ffffff}Информация о доме\n\                                         {ffd900}[2]{ffffff}%s дом",                                 (House[world][hCONDITION] == 1) ? ("{00ff00}Открыть") : ("{ff0000}Закрыть"));                             SPD(playerid, DLG_HMENU, DIALOG_STYLE_LIST, "{ffd900}Меню дома", dialog, "Выбрать", "Закрыть");                             return 1;                         }                 }         }         return 1; } stock GoToInterior(playerid, interior) {     for(new i = 0; i < Interiors; i++)         {             if(Interior[i][intID] != interior) continue;             SetPlayerInterior(playerid, Interior[i][intINTERIOR]);             SetPlayerPos(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ]);             SetPlayerFacingAngle(playerid, Interior[i][intA]);             SetPlayerCheckpoint(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 1.0);             new str[128];             format(str, sizeof(str),                         "Нажмите \"ALT\" для выхода\n\                         Нажмите \"H\", чтобы открыть меню дома");             Create3DTextLabel(str, -1, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 15.0, 0, 1);             return 1;         }         return 0; } stock GoToInteriorBiz(playerid, interior) {     for(new i = 0; i < Interiors; i++)         {             if(Interior[i][intID] != interior) continue;             SetPlayerInterior(playerid, Interior[i][intINTERIOR]);             SetPlayerPos(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ]);             SetPlayerFacingAngle(playerid, Interior[i][intA]);             SetPlayerCheckpoint(playerid, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 1.0);             new str[128];             format(str, sizeof(str),                         "Нажмите \"ALT\" для выхода");             Create3DTextLabel(str, -1, Interior[i][intX], Interior[i][intY], Interior[i][intZ], 15.0, 0, 1);             return 1;         }         return 0; }  
       
      Что мне делать, подскажите пожалуйста?
    • Jdjdjd
      От Jdjdjd
      Как сделать открытие закрытие ворот в Радмир рп на копии,и куд а нужно вставлять код?
       
    • Мемен Томорли
      От Мемен Томорли
      Как создать команду /warns чтобы игрок смог просматривать активные варны у персонажа ??
      Типо как на Малиновка ЛП