Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Jackal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Адрес
    Новокузнецк
    Сообщений
    54
    Репутация:
    2 ±

    Создание личного ТС (MySQL)

    Здравствуйте. Система приобретения личного транспортного средства.

    Создается личное ТС путём создания строки в отдельной таблице "cars".

    После создания ТС, массив pCarKey (таблица accounts) должен приравняться к массиву cID (таблица cars).

    Таким образом игрок получает уникальный ключ для личного ТС.

    Массив в таблице cars "cID" - AUTO_INCREMENT.

    Проблема: строка в таблице cars создаётся как надо, но не получается приравнять pCarKey к cID.

    Код:
    Код:
    CMD:buyc(playerid)//carsMSQL
    {
    	new string[500];
    	new c;
    	CarInfo[c][cModel] = 559;
    	CarInfo[c][cColor] = 3;
    	CarInfo[c][cColor2] = 3;
    	CarInfo[c][cFuel] = 200;
    	CarInfo[c][cMaxFuel] = 200;
    	CarInfo[c][cExpense] = 0.0001;
    	CarInfo[c][cCarparkX] = 2350.0410;
    	CarInfo[c][cCarparkY] = -1457.5046;
    	CarInfo[c][cCarparkZ] = 6.6009;
    	CarInfo[c][cCarparkC] = 319.2456;
    	CarInfo[c][cPaint] = -1;
    	CarInfo[c][cSlot][0] = 1065;//Exhaust -=Alien=-
    	CarInfo[c][cSlot][1] = 1067;//Roof
    	CarInfo[c][cSlot][2] = 1069;//Sideskirt
    	CarInfo[c][cSlot][3] = 1159;//Rear Bumper
    	CarInfo[c][cSlot][4] = 1160;//Front Bumper
    	CarInfo[c][cSlot][5] = 1162;//Spoiler
    	CarInfo[c][cSlot][6] = 1079;//Wheels
    	CarInfo[c][cSlot][7] = 1009;//Nitro
    	CarInfo[c][cSlot][8] = 1087;//Hydraulics
    	mysql_format(ConnectMySQL, string, sizeof(string), "INSERT INTO `cars` (`cOwner`, `cModel`, `cColor`, `cColor2`, `cFuel`, `cMaxFuel`, `cExpense`, `cCarparkX`, `cCarparkY`, `cCarparkZ`, `cCarparkC`, `cPaint`, `cSlot0`, `cSlot1`, `cSlot2`, `cSlot3`, `cSlot4`, `cSlot5`, `cSlot6`, `cSlot7`, `cSlot8`) VALUES ('%s', '%d', '%d', '%d', '%f', '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
    	PlayerInfo[playerid][pName], CarInfo[c][cModel], CarInfo[c][cColor], CarInfo[c][cColor2], CarInfo[c][cFuel], CarInfo[c][cMaxFuel], CarInfo[c][cExpense], CarInfo[c][cCarparkX], CarInfo[c][cCarparkY], CarInfo[c][cCarparkZ], CarInfo[c][cCarparkC], CarInfo[c][cPaint], CarInfo[c][cSlot][0], CarInfo[c][cSlot][1], CarInfo[c][cSlot][2], CarInfo[c][cSlot][3], CarInfo[c][cSlot][4], CarInfo[c][cSlot][5], CarInfo[c][cSlot][6], CarInfo[c][cSlot][7], CarInfo[c][cSlot][8]);
    	mysql_function_query(ConnectMySQL, string, false, "", "");
    	SCM(playerid,COLOR_GREEN,"Создание ТС");
    	PlayerInfo[playerid][pCarKey] = CarInfo[c][cID];//Почему не получается?
    	SavePlayer(playerid);
    	SaveCar(playerid);
    	return 1;
    }
    Код:
    stock SavePlayer(i)
    {
    	new scr[100];
    	new string[500];
    	f("UPDATE `accounts` SET");
    	format(scr, sizeof(scr), "`Level` = %d,", PlayerInfo[i][pLevel]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Money` = %d,", PlayerInfo[i][pMoney]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Sex` = %d,", PlayerInfo[i][pSex]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Skin` = %d,", PlayerInfo[i][pSkin]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Admin` = %d,", PlayerInfo[i][pAdmin]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Akey` = %d,", PlayerInfo[i][pAkey]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Warn` = %d,", PlayerInfo[i][pWarn]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`HouseKey` = %d,", PlayerInfo[i][pHouseKey]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`CarKey` = %d,", PlayerInfo[i][pCarKey]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`Pass` = '%s'", PlayerInfo[i][pPass]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "WHERE `Name` = '%s'", PlayerInfo[i][pName]);
    	strcat(string, scr, sizeof(string));
    	mysql_function_query(ConnectMySQL, string, false, "", "");
    	PlayerInfo[i][pMoney] = Money(i);
    }
    Код:
    stock SaveCar(i)
    {
    	new scr[200];
    	new string[500];
    	new c = PlayerInfo[i][pCarKey];
    	CarInfo[c][cFuel] = Fuel[car[i]];
    	f("UPDATE `cars` SET");
    	format(scr, sizeof(scr), "`cModel` = %d,", CarInfo[c][cModel]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cColor` = %d,", CarInfo[c][cColor]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cColor2` = %d,", CarInfo[c][cColor2]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cFuel` = %f,", CarInfo[c][cFuel]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cMaxFuel` = %d,", CarInfo[c][cMaxFuel]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cExpense` = %f,", CarInfo[c][cExpense]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cCarparkX` = %d,", CarInfo[c][cCarparkX]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cCarparkY` = %d,", CarInfo[c][cCarparkY]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cCarparkZ` = %d,", CarInfo[c][cCarparkZ]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cCarparkC` = %d,", CarInfo[c][cCarparkC]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cPaint` = %d,", CarInfo[c][cPaint]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot0` = %d,", CarInfo[c][cSlot][0]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot1` = %d,", CarInfo[c][cSlot][1]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot2` = %d,", CarInfo[c][cSlot][2]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot3` = %d,", CarInfo[c][cSlot][3]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot4` = %d,", CarInfo[c][cSlot][4]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot5` = %d,", CarInfo[c][cSlot][5]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot6` = %d,", CarInfo[c][cSlot][6]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot7` = %d,", CarInfo[c][cSlot][7]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cSlot8` = %d,", CarInfo[c][cSlot][8]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "`cOwner` = '%s'", CarInfo[c][cOwner]);
    	strcat(string, scr);
    	format(scr, sizeof(scr), "WHERE `cID` = '%s'", CarInfo[c][cID]);
    	strcat(string, scr, sizeof(string));
    	mysql_function_query(ConnectMySQL, string, false, "", "");
    }
    - - - Добавлено - - -

    Вероятно, после создания таблицы "cars", нужно выгрузить из ячейки cID информацию в массив CarInfo[c][cID].
    Если я ошибаюсь, поправьте, подскажите. Я ещё много чего не понимаю в скриптинге.

  2. #2
    Аватар для Роуди.
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.07.2015
    Сообщений
    154
    Репутация:
    17 ±
    За что отвечает переменая "C" в вашем коде?

  3. #3
    Аватар для Jackal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Адрес
    Новокузнецк
    Сообщений
    54
    Репутация:
    2 ±
    Цитата Сообщение от Роуди. Посмотреть сообщение
    За что отвечает переменая "C" в вашем коде?
    В стоке сохранения ТС - обновляет строку в таблице, определяемую по значению в "pCarKey".
    А в команде, тут не уверен, но, как я понял, служит для записи значений в массивы. Я понял, что ошибка где-то здесь, поэтому и прошу помочь решить эту задачу.
    Строка в "cars" у меня создается, мне нужно как-то достать из этой строки (после её создания) значение из "cID" и копировать его в PlayerInfo[playerid][pCarKey].

  4. #4
    Аватар для Jackal
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Адрес
    Новокузнецк
    Сообщений
    54
    Репутация:
    2 ±
    Целый день ломал себе голову, но всё-таки нашел решение. Допускаю, что мой вариант решения задачи не самый лучший, но раз уж никто не помог мне, я всё-равно решил выложить его. Может быть кому-то будет интересно.

    Загружаю в табличку "cars" новую строку с данными:
    Код:
    CMD:buyc(playerid)//carsMSQL
    {
    	new string[900];
    	new c;
    	CarInfo[c][cModel] = 559;
    	CarInfo[c][cColor] = 0;
    	CarInfo[c][cColor2] = 0;
    	CarInfo[c][cFuel] = 200;
    	CarInfo[c][cMaxFuel] = 200;
    	CarInfo[c][cExpense] = 0.0001;
    	CarInfo[c][cCarparkX] = 2509.96;
    	CarInfo[c][cCarparkY] = -1369.85;
    	CarInfo[c][cCarparkZ] = 5.00237;
    	CarInfo[c][cCarparkC] = 356.232;
    	CarInfo[c][cPaint] = -1;
    	CarInfo[c][cSlot][0] = 1065;//Exhaust -=Alien=-
    	CarInfo[c][cSlot][1] = 1067;//Roof
    	CarInfo[c][cSlot][2] = 1069;//Sideskirt
    	CarInfo[c][cSlot][3] = 1159;//Rear Bumper
    	CarInfo[c][cSlot][4] = 1160;//Front Bumper
    	CarInfo[c][cSlot][5] = 1162;//Spoiler
    	CarInfo[c][cSlot][6] = 1079;//Wheels
    	CarInfo[c][cSlot][7] = 1009;//Nitro
    	CarInfo[c][cSlot][8] = 1087;//Hydraulics
    	mysql_format(ConnectMySQL, string, sizeof(string), "INSERT INTO `cars` (`cOwner`, `cModel`, `cColor`, `cColor2`, `cFuel`, `cMaxFuel`, `cExpense`, `cCarparkX`, `cCarparkY`, `cCarparkZ`, `cCarparkC`, `cPaint`, `cSlot0`, `cSlot1`, `cSlot2`, `cSlot3`, `cSlot4`, `cSlot5`, `cSlot6`, `cSlot7`, `cSlot8`) VALUES ('%s', '%d', '%d', '%d', '%f', '%d', '%f', '%f', '%f', '%f', '%f', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d', '%d')",
    	PlayerInfo[playerid][pName], CarInfo[c][cModel], CarInfo[c][cColor], CarInfo[c][cColor2], CarInfo[c][cFuel], CarInfo[c][cMaxFuel], CarInfo[c][cExpense], CarInfo[c][cCarparkX], CarInfo[c][cCarparkY], CarInfo[c][cCarparkZ], CarInfo[c][cCarparkC], CarInfo[c][cPaint], CarInfo[c][cSlot][0], CarInfo[c][cSlot][1], CarInfo[c][cSlot][2], CarInfo[c][cSlot][3], CarInfo[c][cSlot][4], CarInfo[c][cSlot][5], CarInfo[c][cSlot][6], CarInfo[c][cSlot][7], CarInfo[c][cSlot][8]);
    	mysql_function_query(ConnectMySQL, string, false, "", "");
    //А вот тут я зацепился за cOwner, скопированный из ника игрока pName, чтобы найти нужную строку:
    	f("SELECT * FROM `cars` WHERE `cOwner` = '%s'", PlayerInfo[playerid][pName]);
    	mysql_function_query(ConnectMySQL, string, true, "MyBuyCarInfo", "d", playerid);
    	return 1;
    }
    Здесь я уже из нужной строки таблицы "cars" равняю массив pCarKey значению из таблицы cID, которое присвоилось автоматически (AUTO_INCREMENT) при создании строки:
    Код:
    publics MyBuyCarInfo(playerid)
    {
    	new rows;
    	new rows2;
    	cache_get_data(rows, rows2);
    	if(rows)
    	{
    	    PlayerInfo[playerid][pCarKey] = cache_get_field_content_int(0, "cID");
    	    new c = PlayerInfo[playerid][pCarKey];
    	    CarInfo[c][cID] = cache_get_field_content_int(0, "cID");
    	    cache_get_field_content(0, "cOwner", CarInfo[c][cOwner], ConnectMySQL, 24);
    		CarInfo[c][cModel] = cache_get_field_content_int(0, "cModel");
    		CarInfo[c][cColor] = cache_get_field_content_int(0, "cColor");
    		CarInfo[c][cColor2] = cache_get_field_content_int(0, "cColor2");
    		CarInfo[c][cFuel] = cache_get_field_content_float(0, "cFuel");
    		CarInfo[c][cMaxFuel] = cache_get_field_content_int(0, "cMaxFuel");
    		CarInfo[c][cExpense] = cache_get_field_content_float(0, "cExpense");
    		CarInfo[c][cCarparkX] = cache_get_field_content_float(0, "cCarparkX");
    		CarInfo[c][cCarparkY] = cache_get_field_content_float(0, "cCarparkY");
    		CarInfo[c][cCarparkZ] = cache_get_field_content_float(0, "cCarparkZ");
    		CarInfo[c][cCarparkC] = cache_get_field_content_float(0, "cCarparkC");
    		CarInfo[c][cPaint] = cache_get_field_content_int(0, "cPaint");
    		CarInfo[c][cSlot][0] = cache_get_field_content_int(0, "cSlot0");
    		CarInfo[c][cSlot][1] = cache_get_field_content_int(0, "cSlot1");
    		CarInfo[c][cSlot][2] = cache_get_field_content_int(0, "cSlot2");
    		CarInfo[c][cSlot][3] = cache_get_field_content_int(0, "cSlot3");
    		CarInfo[c][cSlot][4] = cache_get_field_content_int(0, "cSlot4");
    		CarInfo[c][cSlot][5] = cache_get_field_content_int(0, "cSlot5");
    		CarInfo[c][cSlot][6] = cache_get_field_content_int(0, "cSlot6");
    		CarInfo[c][cSlot][7] = cache_get_field_content_int(0, "cSlot7");
    		CarInfo[c][cSlot][8] = cache_get_field_content_int(0, "cSlot8");
    		LoadCar(playerid);
    	}
    	return true;
    }
    И спавню своё созданное авто со всеми загруженными данными:
    Код:
    stock LoadCar(playerid)
    {
        if(PlayerInfo[playerid][pCarKey] != 0)
        {
    		new c = PlayerInfo[playerid][pCarKey];
    		car[playerid] = CreateVehicle(CarInfo[c][cModel], CarInfo[c][cCarparkX], CarInfo[c][cCarparkY], CarInfo[c][cCarparkZ]+1, CarInfo[c][cCarparkC], CarInfo[c][cColor], CarInfo[c][cColor2], -1);
    		if(CarInfo[c][cSlot][0] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][0]);
    		if(CarInfo[c][cSlot][1] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][1]);
    		if(CarInfo[c][cSlot][2] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][2]);
    		if(CarInfo[c][cSlot][3] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][3]);
    		if(CarInfo[c][cSlot][4] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][4]);
    		if(CarInfo[c][cSlot][5] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][5]);
    		if(CarInfo[c][cSlot][6] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][6]);
    		if(CarInfo[c][cSlot][7] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][7]);
    		if(CarInfo[c][cSlot][8] != 0) AddVehicleComponent(car[playerid], CarInfo[c][cSlot][8]);
    		if(CarInfo[c][cPaint] != -1) ChangeVehiclePaintjob(car[playerid], CarInfo[c][cPaint]);
    		Fuel[car[playerid]] = CarInfo[c][cFuel];
    		LockCar(car[playerid]);
    		lock[car[playerid]] = true;
    	}
    	return 1;
    }
    После этих действий нужно обязательно сохранить аккаунт SavePlayer(playerid); чтобы в таблице accounts записало значение pCarKey.

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •