19:19
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Alcoholik  
[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. Дорого.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua