grod
Умник
Система входов/выходов из БД MySql R39-2 или R39-4 нету разницы
Простенькая такая система добавляется через таблицу(не динамическая т.е нет команды для создания)все делается в ручную но там очень быстро(Все подробно рассказано в низу)
+ системы то что за место ранешных тп в интерьеры нужно было строчек 5 создать на вход и столько же на выход а тут все в 1 строчке и вход и выход интерьер и вирт.мир,название
Хотя уже большинство подобные системы используют
Ну ладно начнем
Нам понадобятся такие инклуды
К define добавим
Ко всем NEW добавим
например у нас
В этой строчке connects = это и будет наша NameBaseMysql
за место NameBaseMysql ставим что у вас там за место connects
new ENTERS;//ну как бы сказать прибавлять будет нам +1 при загрузки
[/CODE]
Ко всем enum`om добавляем
Ко всем пабликам добавляем
В public OnGameModeInit() добавим
В public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) добавим
Функция разморозки
Если не хотите чтобы вас замораживало при спавне входе или выходе
тогда Удалити
Но если вы это удалите то есть вероятность что без заморозки вы будете проваливаться при входе в интерьер
Добавляем в нашу таблицу BD
Разберем не много код
В строке
При добавлении нового входа/выхода прибавляем + 1 в AUTO_INCREMENT было 2 мы добавили 1 то за место 2 ставим 3
Как выглядит в FS`e но без в писания в мод работать не будеттТТТТ или будет работать не корректно
Ошибок быть не должно проверил все на скаченом моде все работает
В системе окло 100 строк не сильно уж и много
Простенькая такая система добавляется через таблицу(не динамическая т.е нет команды для создания)все делается в ручную но там очень быстро(Все подробно рассказано в низу)
+ системы то что за место ранешных тп в интерьеры нужно было строчек 5 создать на вход и столько же на выход а тут все в 1 строчке и вход и выход интерьер и вирт.мир,название
Хотя уже большинство подобные системы используют
Ну ладно начнем
Нам понадобятся такие инклуды
Код:
#include <a_samp>
#include <a_mysql>//R39-2
#include <streamer>
Код:
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_ORANGE 0xFF9900AA
#define MAX_ENTERS 20//при достижение созданных входов/выходов увеличить
Код:
new NameBaseMysql;//Меняем на название своей базы
Код:
connects = mysql_connect("localhost", "root", "блабла", "");
за место 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;
}
Код:
mysql_function_query(NameBaseMysql, "SELECT * FROM `TABL_Enters`", true, "LoadEnters", "");//TABL_Enters -название таблицы //LoadEnters - названия паблика загрузки
Код:
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 - это порядковый номер с каждым новым добавлением ставим номер по порядку(было 1 мы добавили новый стало 2 и т.д)
Это наш вход от куда будем входить и куда выходить X,Y,Z
Это наш выход от куда будем выходить и куда входить X,Y,Z
1 - это виртуальный мир куда входим
6 - интерьер куда входим
Например
Код:
([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, 'Оружейный магазин');
Код:
1832.9752,-1846.0677,13.5781
Код:
316.5025,-167.6272,999.5938
Код:
1, 6
6 - интерьер куда входим
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Ошибок быть не должно проверил все на скаченом моде все работает
В системе окло 100 строк не сильно уж и много
Последнее редактирование:
