• Уважаемый Гость.
    - Прежде чем создать свою тему, пожалуйста, попробуй воспользоваться этим -> ПОИСКОМ !!!
    - После решения Вашего вопроса (проблемы) - нажмите "Лучший ответ", на сообщении, которое его решило. За игнорирование этого действия - Вы получите соответствующее предупреждение. Мы - стараемся Вам помочь. Уделите 10 секунд - чтобы нажать кнопку. (Если у Вас нет такой возможности - укажите в последнем своем сообщении какой ответ Вы считаете лучшим. Наши модераторы сделают это за Вас)
    ЗАПРЕЩЕНО:
    - Cоздавать темы с названиями "Помогите", "Плиз", "Ошибка", "Не могу найти", "Хелп" и тому подобное;
    - Cоздавать темы без детального описания того, что нужно исправить.
    - Cоздавать темы из одного скриншота.
    За игнор правил форума - Ваша тема будет удалена, а Вы получите системное предупреждение.

Ошибка с домами [MySQL]

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

SH_Suplly

Изучающий
Пользователь
Регистрация
26 Ноя 2013
Сообщения
126
Лучшие ответы
0
Репутация
7
Проблема такова:


1 - Долго мучился с переводом системы домов с файлов на базу, всё получилось, но была проблема что при создании дома в базу они записывались, но stock сохранения дома не срабатывал. - проблему решил (Что то мудрил там с id самого дома, кое как получилось)
2 - Появилось следующее, скорее всего тоже связано с id дома - при покупке дома не идет обновление самих домов, да и при загрузке сами MapIcon домов не появляются, в аккаунта игрока не сохраняются новые данные - хотя сохраняю их сразу же при изменении.


В общем сам код всей системы:

PHP:
enum hInfo
{
	hID,
	Float: hEnter[3],
	Float: hExit[3],
	Float: hCar[4],
	hOwner[MAX_PLAYER_NAME+1],
	hValue,
	hHel,
	hInt,
	hLock,
	hOwned,
	hTakings,
	hKlass,
	hPickup,
	hMIcon
};
new House[600][hInfo], TOTALHOUSE;
PHP:
connect = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_BASE); // Подключение к базе данных
mysql_set_charset("cp1251");
mysql_tquery(connect, "SELECT * FROM `house`", "LoadHouses", ""); // Загрузка домов
for(new h = 0; h < TOTALHOUSE; h++)
{
    House[h][hPickup] = -1;
    House[h][hMIcon] = -1;
	if(House[h][hOwned] == 0)
	{
		House[h][hPickup] = CreateDynamicPickup(1273, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2], -1);
		House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 31, COLOR_WHITE, 0, -1, -1);
	}
	else
	{
		House[h][hPickup] = CreateDynamicPickup(19522, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2], -1);
		House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 32, COLOR_WHITE, 0, -1, -1);
	}
}
PHP:
case 10026://покупаем ДОМ
{
	if(response)
	{
		if(IsPlayerConnected(playerid))
		{
			for(new h = 0; h < TOTALHOUSE; h++)
			{
				if(IsPlayerInRangeOfPoint(playerid, 2.0, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]) && House[h][hOwned] == 0)
				{
					if(Player[playerid][pHouse] != 9999 && strcmp(GN(playerid), House[Player[playerid][pHouse]][hOwner], true) == 0) return SCM(playerid, COLOR_GREY, !"[!] У вас уже есть дом.");
					if(Player[playerid][pMoney] < House[h][hValue]) return SCM(playerid, COLOR_GREY,! "[!] У вас нет столько денег!");
					Player[playerid][pHouse] = h;
					House[h][hOwned] = 1;
					House[h][hHel] = 0;
					House[h][hTakings] = 400;
					strmid(House[h][hOwner], GN(playerid), 0, strlen(GN(playerid)), 255);
					Player[playerid][pMoney] -= House[h][hValue];
					new kvartira;
					switch(House[h][hKlass])
					{
						case 0: kvartira = 400;
						case 1: kvartira = 650;
						case 2: kvartira = 1200;
						case 3: kvartira = 2800;
						case 4: kvartira = 4500;
						case 5: kvartira = 6500;
						case 6: kvartira = 200;
					}
					SCM(playerid, COLOR_WHITE, !"Поздравляем с покупкой!");
					f("Теперь каждый день со счёта вашего дома будут снимать квартплату в размере: {FFFFFF}%d{24C92F}$.", kvartira);
					SCM(playerid, COLOR_YELLOW, string);
					SCM(playerid, COLOR_YELLOW, !"Если на счету недостаточно денег, вас выселят. Сейчас на счету: {FFFFFF}400{24C92F}$");
					SCM(playerid, COLOR_WHITE, !"Пополнить квартплату или узнать баланс можно в банке.");
					SCM(playerid, COLOR_BLUE, !"Чтобы выйти из дома нажмите \"Alt\".");
					Player[playerid][pSpawn] = 2;
					if(Player[playerid][pCar] == 0) return SPD(playerid, 29900, DSM, !"Транспорт", !"{FFFFFF}У вас нет транспорта. \nВозможно вы захотите приобрести поддержанный велосипед?? \n\t\t\tЦена: 550$", "Купить", "Отказаться");
                    SavePlayer(playerid, "House", Player[playerid][pHouse], "d");
                    SavePlayer(playerid, "Spawn", Player[playerid][pSpawn], "d");
					SaveHouse(h);
                    UpdateHouse(h);
					return true;
				}
			}
		}
	}
}
case 29900:
{
	if(response)
	{
		if(Player[playerid][pMoney] < 550) return SCM(playerid, COLOR_GREY, !"[!] У вас нет столько денег!");
		Player[playerid][pMoney] -= 550;
		new cvetT = random(255);
		SCM(playerid, COLOR_GREEN, !"Вы приобрели транспорт!");
		Player[playerid][pCar] = 605;
		Player[playerid][pFuel] = 90.0;
		Player[playerid][pColor][0] = cvetT;
		Player[playerid][pColor][1] = cvetT;
        SavePlayer(playerid, "Car", Player[playerid][pCar], "d");
		if(caridhouse[playerid] != INVALID_VEHICLE_ID) Fuell[caridhouse[playerid]] = 200;
	}
}
case 10075:
{
	if(response)
	{
		for(new h = 0; h < TOTALHOUSE; h++)
		{
			if(Player[playerid][pHouse] == h || House[h][hLock] == 0)
			{
				SetPlayerInterior(playerid, House[h][hInt]);
				SetPlayerVirtualWorld(playerid, h+50);
				SetPlayerPos(playerid, House[h][hExit][0], House[h][hExit][1], House[h][hExit][2]);
			}
			else GameTextForPlayer(playerid, !"~r~Locked", 4000, 4);
		}
	}
}
PHP:
fpublic LoadHouses()
{
	new rows, time = GetTickCount();
	cache_get_row_count(rows);
	if(!rows) print(!"Дома не были загружены!");
	else
	{
	    for(new i; i < rows; i++)
		{
			cache_get_value_name_int(i, "ID", House[i][hID]);
			cache_get_value_name_float(i, "EnterX", House[i][hEnter][0]);
			cache_get_value_name_float(i, "EnterY", House[i][hEnter][1]);
			cache_get_value_name_float(i, "EnterZ", House[i][hEnter][2]);
			cache_get_value_name_float(i, "ExitX", House[i][hExit][0]);
			cache_get_value_name_float(i, "ExitY", House[i][hExit][1]);
			cache_get_value_name_float(i, "ExitZ", House[i][hExit][2]);
			cache_get_value_name(i, "Owner", House[i][hOwner], 24);
			cache_get_value_name_int(i, "Value", House[i][hValue]);
			cache_get_value_name_int(i, "Hel", House[i][hHel]);
			cache_get_value_name_int(i, "Int", House[i][hInt]);
			cache_get_value_name_int(i, "Lock", House[i][hLock]);
			cache_get_value_name_int(i, "Owned", House[i][hOwned]);
			cache_get_value_name_int(i, "Takings", House[i][hTakings]);
			cache_get_value_name_int(i, "Klass", House[i][hKlass]);
			cache_get_value_name_float(i, "CarX", House[i][hCar][0]);
			cache_get_value_name_float(i, "CarY", House[i][hCar][1]);
			cache_get_value_name_float(i, "CarZ", House[i][hCar][2]);
			cache_get_value_name_float(i, "CarA", House[i][hCar][3]);
			UpdateHouse(i);
			TOTALHOUSE++;
		}

	}
	printf("[%i штук/%d m.s] >> загружено Дома", TOTALHOUSE, GetTickCount() - time);
	return true;
}
PHP:
CMD:setpos(playerid, params[])
{
	if(strcmp(GN(playerid), "Kevin_Elevin", true)) return true;
	if(sscanf(params, "ii", params[0], params[1])) return SCM(playerid, -1, !"Ââåäèòå: /setpos [Class] [Price]");
	if(params[0] < 0 || params[0] > 6) return SCM(playerid, -1, !"Class: 0 - 6");
	if(params[1] < 1000 || params[1] > 900000000) return SCM(playerid, -1, !"Price: 1000 - 900000000");
	new Float: Pos[3], Float: iPos[3], inter;
	GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
	switch(params[0])
	{
		case 0:
		{
			inter = 2;
			iPos[0] = 2454.717041;
			iPos[1] = -1700.871582;
			iPos[2] = 1013.515197;
		}
		case 1:
		{
			inter = 1;
			iPos[0] = 2527.654052;
			iPos[1] = -1679.388305;
			iPos[2] = 1015.498596;
		}
		case 2:
		{
			inter = 8;
			iPos[0] = 2807.619873;
			iPos[1] = -1171.899902;
			iPos[2] = 1025.570312;
		}
		case 3:
		{
			inter = 3;
			iPos[0] = 235.508994;
			iPos[1] = 1189.169897;
			iPos[2] = 1080.339966;
		}
		case 4:
		{
			inter = 6;
			iPos[0] = 234.045990;
			iPos[1] = 1064.879883;
			iPos[2] = 1084.309937;
		}
		case 5:
		{
			inter = 12;
			iPos[0] = 2324.419921;
			iPos[1] = -1145.568359;
			iPos[2] = 1050.710083;
		}
		case 6:
		{
			inter = 1;
			iPos[0] = 244.411987;
			iPos[1] = 305.032989;
			iPos[2] = 999.148437;
		}
	}
	mysql_format(connect, string, sizeof(string), "INSERT INTO `house` (`ID`, `EnterX`, `EnterY`, `EnterZ`, `Value`, `Int`, `Klass`) VALUES ('%d', '%f', '%f', '%f', '%d', '%d', '%d')", TOTALHOUSE, Pos[0], Pos[1], Pos[2], params[1], inter, params[0]);
	mysql_tquery(connect, string, "", "");
	House[TOTALHOUSE][hID] = TOTALHOUSE;
	House[TOTALHOUSE][hEnter][0] = Pos[0]; 
	House[TOTALHOUSE][hEnter][1] = Pos[1];
	House[TOTALHOUSE][hEnter][2] = Pos[2];
	House[TOTALHOUSE][hExit][0] = iPos[0];
	House[TOTALHOUSE][hExit][1] = iPos[1];
	House[TOTALHOUSE][hExit][2] = iPos[2];
	House[TOTALHOUSE][hValue] = params[1];
	House[TOTALHOUSE][hInt] = inter;
	House[TOTALHOUSE][hKlass] = params[0];
	strmid(House[TOTALHOUSE][hOwner], "The State", 0, strlen("The State"), 9999);
	SCM(playerid, COLOR_WHITE, !"Êîðäèíàòû äîìà óñòàíîâëåíû");
	SaveHouse(TOTALHOUSE);
	UpdateHouse(TOTALHOUSE);
	TOTALHOUSE++;
	return true;
}
PHP:
stock SaveHouse(i)
{
	mysql_format(connect, string, sizeof(string), "UPDATE `house` SET `EnterX` = '%f', `EnterY` = '%f', `EnterZ` = '%f', `ExitX` = '%f', `ExitY` = '%f', `ExitZ` = '%f'",
	House[i][hEnter][0], House[i][hEnter][1], House[i][hEnter][2], House[i][hExit][0], House[i][hExit][1], House[i][hExit][2]);

	mysql_format(connect, string, sizeof(string), "%s, `Value` = '%d', `Hel` = '%d', `Int` = '%d', `Lock` = '%d', `Owned` = '%d', `Takings` = '%d', `Klass` = '%d'",
	string, House[i][hValue], House[i][hHel], House[i][hInt], House[i][hLock], House[i][hOwned], House[i][hTakings], House[i][hKlass]);

	mysql_format(connect, string, sizeof(string), "%s, `CarX` = '%f', `CarY` = '%f', `CarZ` = '%f', `CarA` = '%f'",
	string, House[i][hCar][0], House[i][hCar][1], House[i][hCar][2], House[i][hCar][3]);

	mysql_format(connect, string, sizeof(string), "%s, `Owner` = '%e' WHERE `ID` = '%d'", string, House[i][hOwner], House[i][hID]);
	mysql_tquery(connect, string, "", "");
}
stock UpdateHouse(h)
{
    if(House[h][hPickup] != -1) DestroyDynamicPickup(House[h][hPickup]), House[h][hPickup] = -1;
    if(House[h][hMIcon] != -1) DestroyDynamicMapIcon(House[h][hMIcon]), House[h][hMIcon] = -1;
	if(House[h][hOwned] == 0)
	{
		House[h][hPickup] = CreateDynamicPickup(1273, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]);
		House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 31, COLOR_WHITE, 0, -1, -1);
	}
	else
	{
		House[h][hPickup] = CreateDynamicPickup(19522, 23, House[h][hEnter][0], House[h][hEnter][1], House[h][hEnter][2]);
		House[h][hMIcon] = CreateDynamicMapIcon(House[h][hExit][0], House[h][hExit][1], House[h][hExit][2], 32, COLOR_WHITE, 0, -1, -1);
	}
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу