Доступ к готовым решениям

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

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

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

Мануал Сис-ма вход/выход Mysql R39-2

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

grod

Умник
Система входов/выходов из БД MySql R39-2 или R39-4 нету разницы
Простенькая такая система добавляется через таблицу(не динамическая т.е нет команды для создания)все делается в ручную но там очень быстро(Все подробно рассказано в низу)
+ системы то что за место ранешных тп в интерьеры нужно было строчек 5 создать на вход и столько же на выход а тут все в 1 строчке и вход и выход интерьер и вирт.мир,название
Хотя уже большинство подобные системы используют
Ну ладно начнем

Нам понадобятся такие инклуды
Код:
#include <a_samp>
#include <a_mysql>//R39-2
#include <streamer>
К define добавим
Код:
#define COLOR_GREY			0xAFAFAFAA
#define COLOR_ORANGE		0xFF9900AA
#define MAX_ENTERS 20//при достижение созданных входов/выходов увеличить
Ко всем NEW добавим
Код:
new NameBaseMysql;//Меняем на название своей базы
например у нас
Код:
connects = mysql_connect("localhost", "root", "блабла", "");
В этой строчке connects = это и будет наша NameBaseMysql
за место NameBaseMysql ставим что у вас там за место connects



new ENTERS;//ну как бы сказать прибавлять будет нам +1 при загрузки
[/CODE]

Ко всем enum`om добавляем
Код:
enum EnterInfo
{
	eID,//Номер указывается при добавление в таблицу
	Float:Enter_X,//координата входа Х
	Float:Enter_Y,//координата входа Y
	Float:Enter_Z,//координата входа Z
	Float:Exit_X,//координата выхода X
	Float:Exit_Y,//координата выхода Y
	Float:Exit_Z,//координата выхода Z
	eWorld,//ID виртуального мира
	eInt,//ID интерьера
	eName[30]//название добавлено го входа
}
new ENTER[MAX_ENTERS][EnterInfo];
Ко всем пабликам добавляем
Код:
forward LoadEnters();
public LoadEnters()
{
    new string[156];
    new rows, fields;
    cache_get_data(rows, fields);
    if(rows)
    {
        for(new idx = 0; idx < rows; idx++)
        {
            ENTER[idx][eID] = cache_get_field_content_int(idx,"eID", NameBaseMysql);
            ENTER[idx][Enter_X] = cache_get_field_content_float(idx,"Enter_X", NameBaseMysql);
            ENTER[idx][Enter_Y] = cache_get_field_content_float(idx,"Enter_Y", NameBaseMysql);
            ENTER[idx][Enter_Z] = cache_get_field_content_float(idx,"Enter_Z", NameBaseMysql);
            ENTER[idx][Exit_X] = cache_get_field_content_float(idx,"Exit_X", NameBaseMysql);
            ENTER[idx][Exit_Y] = cache_get_field_content_float(idx,"Exit_Y", NameBaseMysql);
            ENTER[idx][Exit_Z] = cache_get_field_content_float(idx,"Exit_Z", NameBaseMysql);
            ENTER[idx][eWorld] = cache_get_field_content_int(idx,"eWorld", NameBaseMysql);
            ENTER[idx][eInt] = cache_get_field_content_int(idx,"eInt",NameBaseMysql);
            cache_get_field_content(idx,"eName", ENTER[idx][eName], NameBaseMysql,32);//(32 маx.длина названия)
            format(string,sizeof(string),"{AA3333}[ {ffffff}%s {AA3333}]\n{FFFFFF}ALT",ENTER[idx][eName]);//название куда входит (32 маx.длина названия)
            CreateDynamic3DTextLabel(string,COLOR_ORANGE,ENTER[idx][Enter_X],ENTER[idx][Enter_Y],ENTER[idx][Enter_Z]+0.1, 7.0);//3d текст входа//0.1 - высота, 7.0 - видимость
            CreateDynamicPickup(19132,23,ENTER[idx][Enter_X],ENTER[idx][Enter_Y],ENTER[idx][Enter_Z],-1);//пикап входа
            CreateDynamic3DTextLabel("{AA3333}[ {ffffff}Выход {AA3333}]\n{FFFFFF}ALT",COLOR_ORANGE,ENTER[idx][Exit_X],ENTER[idx][Exit_Y],ENTER[idx][Exit_Z],10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,-1,-1);//3d текст выхода (где -1 это видимость во всех мирах:D )
            CreateDynamicPickup(19132,23,ENTER[idx][Exit_X],ENTER[idx][Exit_Y],ENTER[idx][Exit_Z],-1);//пикап выхода
            ENTERS ++;//загружает созданые вами тп (+1 вообщем)как то так)
        }
        printf("Таблица `TABL_Enters` успешно загружена!");
    }
    else printf("Таблица `TABL_Enters` не загружена!");
    return true;
}
В public OnGameModeInit() добавим
Код:
mysql_function_query(NameBaseMysql, "SELECT * FROM `TABL_Enters`", true, "LoadEnters", "");//TABL_Enters -название таблицы //LoadEnters - названия паблика загрузки
В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) добавим
Код:
    if(newkeys == KEY_WALK)
	{
	    for(new i; i != ENTERS; i ++)
	    {
			if(IsPlayerInRangeOfPoint(playerid,1.0,ENTER[i][Enter_X],ENTER[i][Enter_Y],ENTER[i][Enter_Z]))//1.0 - это от куда действует наш вход
			{
				SetPlayerPos(playerid,ENTER[i][Exit_X],ENTER[i][Exit_Y],ENTER[i][Exit_Z]);//позиция куда нас перенесет
				SetPlayerInterior(playerid,ENTER[i][eInt]);//интерьер
				SetPlayerVirtualWorld(playerid,ENTER[i][eWorld]);//виртуальный мир
				TogglePlayerControllable(playerid, false);//заморозка
				SetTimerEx("UnfreezePlayerterr", 3000, false, "i", playerid);//разморозка
				SendClientMessage(playerid, COLOR_GREY, "{ffa500}•{FFFFFF} Прогрузка текстур, ожидайте {ffa500}3 {FFFFFF}секунды.");//текст выводиться игроку
				if(ENTER[i][eInt] != 0)
				break;
			}
			else if(IsPlayerInRangeOfPoint(playerid,1.0,ENTER[i][Exit_X],ENTER[i][Exit_Y],ENTER[i][Exit_Z]) && GetPlayerVirtualWorld(playerid) == ENTER[i][eWorld]) {//1.0 - это от куда действует наш выход
				SetPlayerPos(playerid,ENTER[i][Enter_X],ENTER[i][Enter_Y],ENTER[i][Enter_Z]);//позиция куда нас перенесет
				SetPlayerInterior(playerid,0);//Интерьер при выходи будет равен 0
				SetPlayerVirtualWorld(playerid,0);// Виртуальный мир будет равен 0 при выходи
				break;
			}
		}
		return 1;
	}
Функция разморозки
Код:
forward UnfreezePlayerterr(playerid);
public UnfreezePlayerterr(playerid)
return TogglePlayerControllable(playerid, true);
Если не хотите чтобы вас замораживало при спавне входе или выходе
тогда Удалити

Код:
TogglePlayerControllable(playerid, false);//заморозкаTogglePlayerControllable(playerid, false);//заморозка
SetTimerEx("UnfreezePlayerterr", 3000, false, "i", playerid);//разморозка
SendClientMessage(playerid, COLOR_GREY, "{ffa500}•{FFFFFF} Прогрузка текстур, ожидайте {ffa500}3 {FFFFFF}секунды.");//текст выводиться игроку

и вот это

forward UnfreezePlayerterr(playerid);
public UnfreezePlayerterr(playerid)
return TogglePlayerControllable(playerid, true);
Но если вы это удалите то есть вероятность что без заморозки вы будете проваливаться при входе в интерьер


Добавляем в нашу таблицу BD
Код:
--
-- Структура таблицы `TABL_Enters`
--

CREATE TABLE IF NOT EXISTS `TABL_Enters` (
  `eID` int(11) NOT NULL AUTO_INCREMENT,
  `Enter_X` float NOT NULL,
  `Enter_Y` float NOT NULL,
  `Enter_Z` float NOT NULL,
  `Exit_X` float NOT NULL,
  `Exit_Y` float NOT NULL,
  `Exit_Z` float NOT NULL,
  `eWorld` int(11) NOT NULL,
  `eInt` int(11) NOT NULL,
  `eName` varchar(32) NOT NULL,
  PRIMARY KEY (`eID`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;

--
-- Дамп данных таблицы `TABL_Enters`
--

INSERT INTO `TABL_Enters` (`eID`, `Enter_X`, `Enter_Y`, `Enter_Z`, `Exit_X`, `Exit_Y`, `Exit_Z`, `eWorld`, `eInt`, `eName`) VALUES
(1, 1832.9752,-1846.0677,13.5781, 316.5025,-167.6272,999.5938, 1, 6, 'Оружейный магазин');
Разберем не много код

В строке

Код:
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=2 ;
При добавлении нового входа/выхода прибавляем + 1 в AUTO_INCREMENT было 2 мы добавили 1 то за место 2 ставим 3
Так же за место ; ставим просто ,
Например

Код:
([COLOR="#B22222"]1[/COLOR], 1832.9752,-1846.0677,13.5781, 316.5025,-167.6272,999.5938, 1, 6, 'Оружейный магазин')[COLOR="#B22222"],[/COLOR]
([COLOR="#B22222"]2[/COLOR], 1832.9752,-1846.0677,13.5781, 316.5025,-167.6272,999.5938, 1, 6, 'Оружейный магазин')[COLOR="#B22222"];[/COLOR]

Код:
(1, 1832.9752,-1846.0677,13.5781, 316.5025,-167.6272,999.5938, 1, 6, 'Оружейный магазин');
1 - это порядковый номер с каждым новым добавлением ставим номер по порядку(было 1 мы добавили новый стало 2 и т.д)

Код:
1832.9752,-1846.0677,13.5781
Это наш вход от куда будем входить и куда выходить X,Y,Z

Код:
316.5025,-167.6272,999.5938
Это наш выход от куда будем выходить и куда входить X,Y,Z

Код:
1, 6
1 - это виртуальный мир куда входим
6 - интерьер куда входим
Как выглядит в FS`e но без в писания в мод работать не будеттТТТТ или будет работать не корректно


Ошибок быть не должно проверил все на скаченом моде все работает
В системе окло 100 строк не сильно уж и много
​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу