 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[ADD] Выборка машин из MySQL
| |
| FiLE | Дата: Суббота, 02.07.2011, 22:13 | Сообщение # 1 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| [ADD] Выборка машин из MySQL
Руководство рассчитано для серверов на базе MySQL Plugin R5.
// внимание, перед установкой, нужно убедится, что Ваш сервер подключен к БД
1. Нужно создать таблицу в БД Code -- phpMyAdmin SQL Dump -- version 3.3.9 -- http://www.phpmyadmin.net -- -- Хост: localhost -- Время создания: Июл 02 2011 г., 20:05 -- Версия сервера: 5.5.8 -- Версия PHP: 5.3.5
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!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 */;
-- -- База данных: `sampbase` --
-- --------------------------------------------------------
-- -- Структура таблицы `vehicles` --
CREATE TABLE IF NOT EXISTS `vehicles` ( `id` int(15) NOT NULL AUTO_INCREMENT, `model` int(11) NOT NULL, `color1` int(11) NOT NULL DEFAULT '1', `color2` int(11) NOT NULL DEFAULT '1', `x` float NOT NULL, `y` float NOT NULL, `z` float NOT NULL, `r` float NOT NULL, `number` int(11) NOT NULL, `lock` int(11) NOT NULL DEFAULT '0', `insurance` int(11) NOT NULL DEFAULT '0', `fuel` int(11) NOT NULL DEFAULT '100', `life` int(11) NOT NULL DEFAULT '1000', `signaling` int(11) NOT NULL DEFAULT '0', `owner` varchar(255) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
-- -- Дамп данных таблицы `vehicles` --
INSERT INTO `vehicles` (`id`, `model`, `color1`, `color2`, `x`, `y`, `z`, `r`, `number`, `lock`, `insurance`, `fuel`, `life`, `signaling`, `owner`) VALUES (1, 411, 1, 1, -2094.06, -55.2239, 35.0244, 358.245, 0, 0, 0, 100, 1000, 0, '0'), (2, 444, 1, 1, -2094.05, -38.0988, 35.0001, 1.0772, 0, 0, 0, 100, 1000, 0, '0'), (3, 455, 1, 1, -2094.52, -13.7371, 35.0474, 1.2653, 0, 0, 0, 100, 1000, 0, '0');
В этом запросе уже есть 3 машины (стоят около АШ, белого цвета) Не обращайте внимания на столбцы (`number`, `lock`, `insurance`, `fuel`, `life`, `signaling`, `owner`). Теоретически могут пригодится в создании системы автомобилей или авторынка...
2. Паблик, с загрузкой машин... Code public LoadVehicles() { mysql_query("SELECT NULL FROM `vehicles`"); mysql_store_result(); new rows = mysql_num_rows(); mysql_free_result();
for (new id=0; id<=rows; id++) {
new query[128]; new Data[1024]; new buffer[64]; format(query, sizeof(query), "SELECT * FROM `vehicles` LIMIT %d,1",id); mysql_query(query); mysql_store_result(); mysql_fetch_row(Data);
mysql_get_field("id", buffer); transport[id][vsid] = strval(buffer); //by FiLE 402149086 www.samp-rus.com mysql_get_field("model", buffer); transport[id][vsmodel] = strval(buffer);
mysql_get_field("color1", buffer); transport[id][vscolor1] = strval(buffer);
mysql_get_field("color2", buffer); transport[id][vscolor2] = strval(buffer);
mysql_get_field("x", buffer); transport[id][vsx] = strval(buffer);
mysql_get_field("y", buffer); transport[id][vsy] = strval(buffer);
mysql_get_field("z", buffer); transport[id][vsz] = strval(buffer);
mysql_get_field("r", buffer); transport[id][vsr] = strval(buffer);
mysql_get_field("number", buffer); transport[id][vsnumber] = strval(buffer);
mysql_get_field("lock", buffer); transport[id][vslock] = strval(buffer);
mysql_get_field("insurance", buffer); transport[id][vsinsurance] = strval(buffer);
mysql_get_field("fuel", buffer); transport[id][vsfuel] = strval(buffer);
mysql_get_field("life", buffer); transport[id][vslife] = strval(buffer);
mysql_get_field("signaling", buffer); transport[id][vssignaling] = strval(buffer);
mysql_get_field("owner", buffer); transport[id][vsowner] = strval(buffer);
AddStaticVehicleEx(transport[id][vsmodel],transport[id][vsx],transport[id][vsy],transport[id][vsz],transport[id][vsr],transport[id][vscolor1],transport[id][vscolor2], 600000); printf("%d",transport[id][vsmodel]); }//by FiLE 402149086 www.samp-rus.com mysql_free_result(); return 1; }
3. Добавим в начало мода... Code enum tInfo { vsid, vsmodel, vscolor1, vscolor2, vsx, vsy, vsz, vsr, vsnumber, vslock, vsinsurance, vsfuel, v slife, vssignaling, vsowner, }; new transport[3][tInfo]; forward LoadVehicles();
4. Добавим LoadVehicles(); в самый конец паблика OnGameModeInit
Вот и все. Аналогичную выборку можно сделать для бизнесов, домов и прочего...
p.s. что забыл, потом допишу...
Сообщение отредактировал FiLE - Суббота, 02.07.2011, 22:15 |
| |
|
|
| Zombie | Дата: Суббота, 02.07.2011, 22:16 | Сообщение # 2 |
|
Группа:
I'm V.I.P.
Сообщений: 767
Награды: 40
Город: Rikku
Замечания: 40%
Статус: 
| Полезная инфушка, +сую
|
| |
|
|
| Satellite | Дата: Воскресенье, 03.07.2011, 05:06 | Сообщение # 3 |
|
Местный
Группа:
Продвинутые
Сообщений: 622
Награды: 10
Город: Хмельницкий
Замечания: 20%
Статус: 
| А мне sscanf удобней использовать.
|
| |
|
|
| Vorobyov | Дата: Среда, 20.07.2011, 13:31 | Сообщение # 4 |
|
Постоялец
Группа:
Продвинутые
Сообщений: 310
Награды: 6
Город: Кохтла-Ярве
Репутация: 137
Замечания: 60%
Статус: 
| Все сделал, но:
как применить параметр Quote mysql_get_field("fuel", buffer); transport[id][vsfuel] = strval(buffer); к автомобилю, который был только что создан?
Спасибо.
|
| |
|
|
| FiLE | Дата: Среда, 20.07.2011, 14:43 | Сообщение # 5 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| iTerry, у меня переписана система бензина!
После создания автомобиля, ему присваиваем кол-во бензина, т.е. например transport[id][vsfuel] = 100;...
И всем известный паблик: Code public CheckGas() {
for(new h = 0; h < rowsveh; h++) { if(!IsAVelik(vscar[h]) && CheckEngine(vscar[h])) { if(SpeedVehicle2(vscar[h]) < 1) { transport[h][vsfuel] -= 1; } else if(SpeedVehicle2(vscar[h]) > 1) { transport[h][vsfuel] -= 2; } if(transport[h][vsfuel] < 0) { transport[h][vsfuel] = 0; SetVehicleParamsEx(vscar[h],false,lights,alarm,doors,bonnet,boot,objective); return 1; }
} } return 1; } Прикручиваешь текстдрав типа Fuel: или benzin: как любят делать и все. В текстдраве уже указываешь переменную с бензином, а именно transport[id][vsfuel]
Я так сделал, потому что у меня сохранятеся кол-во бензина в машине, даже после рестарта.
Сообщение отредактировал FiLE - Среда, 20.07.2011, 14:46 |
| |
|
|
| Vorobyov | Дата: Среда, 20.07.2011, 15:52 | Сообщение # 6 |
|
Постоялец
Группа:
Продвинутые
Сообщений: 310
Награды: 6
Город: Кохтла-Ярве
Репутация: 137
Замечания: 60%
Статус: 
| Использую дальше эту переменную, допустим с бензином. Написал простую команду, что бы узнавать, сколько бензина в автомобиле, узнаю - 0. Этот автомобиль ранее был создан пабликом LoadVehicles();
Code if(strcmp(cmd, "/getvehinfo", true) == 0) { if(IsPlayerConnected(playerid)) { if(IsPlayerInAnyVehicle(playerid)) { new string[256]; new vehID = GetPlayerVehicleID(playerid); format(string, sizeof(string), "GPS: %d, MEMBER: %d, FUEL: %d, HEALTH: %d", transport[vehID][vsgps], transport[vehID][vsmember], transport[vehID][vsfuel], transport[vehID][vslife]); SendClientMessage(playerid, COLOR_GRAD1, string); return 1; } } return 1; }
Я уверен, что дело в присвоении значения при выгрузке автомобиля из базы к автомобилю.
|
| |
|
|
| FiLE | Дата: Среда, 20.07.2011, 16:29 | Сообщение # 7 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| iTerry, ну а в базе значени бензина не 0?
|
| |
|
|
| RоACh | Дата: Среда, 20.07.2011, 17:20 | Сообщение # 8 |
|
Местный
Группа:
Следователи
Сообщений: 737
Награды: 14
Город: Санкт-Петербург
Репутация: 3682
Замечания: 20%
Статус: 
| разве strval будет нормально текстом работать?
Не бывает невыносимых людей,бывают узкие двери. ЛС не принимаю! Все ЛС сюда http://www.samp-rus.com/index/8-10438
|
| |
|
|
| FiLE | Дата: Среда, 20.07.2011, 18:22 | Сообщение # 9 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| RоACh, не будет. Если нужен текст в номере, то заменить на: Code mysql_get_field("number", buffer); strmid(transport[id][vsnumber], buffer, 0, strlen(buffer), 255);
|
| |
|
|
| RоACh | Дата: Среда, 20.07.2011, 18:59 | Сообщение # 10 |
|
Местный
Группа:
Следователи
Сообщений: 737
Награды: 14
Город: Санкт-Петербург
Репутация: 3682
Замечания: 20%
Статус: 
| я про ник владельца.
Не бывает невыносимых людей,бывают узкие двери. ЛС не принимаю! Все ЛС сюда http://www.samp-rus.com/index/8-10438
|
| |
|
|
| FiLE | Дата: Среда, 20.07.2011, 19:31 | Сообщение # 11 |
|
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус: 
| RоACh, смотря что туда записывать. Я записываю id'ы игроков, поскольку все игроки у меня записаны в базе. Кто хочет записывать туда имя владельца - флаг в руки. Код можно изменить, по аналогии с номером.
|
| |
|
|
| toneysix | Дата: Среда, 20.07.2011, 21:01 | Сообщение # 12 |
|
Джэдай
Группа:
I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус: 
| omfg + wtf Если я правильно понимаю пробежавшись крайнем глазом по коду, это обычная загрузка тачек из базы данных? Если да, то это мега жесть, откуда вы такой способ выкопали? Code new result[512], field[32], id; mysql_query("SELECT * FROM `vehicles`"); mysql_store_result(); while(mysql_fetch_row_format(result, "|")) { mysql_fetch_field_row(field, "id"); transport[++id][vsid] = strval(field); // ДЛЯ ЦЕЛОГО ЧИСЛА mysql_fetch_field_row(transport[id][ownername], "owner"); // ДЛЯ ТЕКСТА mysql_fetch_field_row(field, "pos_x"); transport[id][pos_x] = floatstr(field); // ДЛЯ ВЕЩЕСТВЕННОГО ЧИСЛА } mysql_free_result(); sscanf не целесообразно использовать в единичных загрузках, хотя он и будет намного быстрее стандартных mySQL функций плагина, по ряду причин, во-первых, при большом объеме таблицы легко запутаться, во-вторых, если у вас слишком много данных, придется разделять на две. а то и три части, в-третьих, в некоторых случаях некоторые поля не нуждаются в восстановлении.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
|
| |
|
|
| Alcoholik | Дата: Среда, 20.07.2011, 23:54 | Сообщение # 13 |
|
Мастер джэдай
Группа:
Администратор
Сообщений: 8299
Награды: 111
Город: Санкт-Петербург
Репутация: 6085
Статус: 
| FiLE, да мне код не нужен, я знаю, я просто с телефона сидел, увидел strval с владельцем, вот и спросил.
if(isset($beer)&&isset($girl)) { drink($beer);fuck($girl); }else die(); Мониторинг sa:mp серверов Приватно никого не консультирую, моды также не пишу, ни так, ни за деньги. Моя ICQ 675715, пишу только с неё. Все остальные Роачи фейки, ничего я не продаю и продавать не буду, вас разводят.
|
| |
|
|
| Vorobyov | Дата: Пятница, 22.07.2011, 19:31 | Сообщение # 14 |
|
Постоялец
Группа:
Продвинутые
Сообщений: 310
Награды: 6
Город: Кохтла-Ярве
Репутация: 137
Замечания: 60%
Статус: 
| как в переменную вбить координату?
Code Name[id][rX] = strval(buffer); - только целое
способ ToneySix: Code Name[id][rX] = floatstr(buffer);
Выдает варн: Code warning 213: tag mismatch
Сообщение отредактировал iTerry - Пятница, 22.07.2011, 19:31 |
| |
|
|
| Eakwarp | Дата: Пятница, 22.07.2011, 19:34 | Сообщение # 15 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус: 
| Quote (iTerry) Name[id][rX] в enum, относящемуся к Name, rX должно иметь тег Float:
More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.
Valakas Roleplay on Twitter
Платные консультации, разработка, в ICQ. Дорого.
|
| |
|
|
|
 |
|
 | |
| |
|