Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Посадка на диван/кресло v2 (MySQL)

AndreY.eXe

Специалист
Привет!

Когда-то давным-давно (12.12.2017 :)) я делал "уникальную" систему посадки на диван/кресло. Тогда, это была моя первая работа на Pawno Info.
И вот, вспомнив про неё, я решил её переделать на MySQL, так сказатт, полностью ДИНАМИЧНА! Погнали:

З.Ы: Тут я использовал MySQl R39-5 (кто захочет - изменит, И НЕ ПИШИТЕ МНЕ ПО ПОВОДУ ЭТОГО - Я НЕ СТАНУ ПОДСТРАИВАТЬ СИСТЕМУ ПОД ВАШ MYSQL)

В начало мода:
PHP:
#define MAX_DOWNS	100 // Максимальное кол-во кресел/диванов, на которые можно будет сесть
new
	Float: SeatDownX[MAX_DOWNS],
	Float: SeatDownY[MAX_DOWNS],
	Float: SeatDownZ[MAX_DOWNS],
	Float: SeatDownA[MAX_DOWNS],
	TOTALDOWNS;
В OnGameModeInit:
PHP:
LoadSeatDowns();
В конец мода:
PHP:
LoadSeatDowns()
{
	// переменную mysql меняете на свою

	mysql_query(mysql, "select * from `seatdowns`");
	TOTALDOWNS = cache_get_row_count(mysql);

	if(!TOTALDOWNS)return print("Посадки на загружены!");

	for(new i; i < TOTALDOWNS; i ++)
	{
		SeatDownX[i] = cache_get_row_float(i, 0, mysql);
		SeatDownY[i] = cache_get_row_float(i, 1, mysql);
		SeatDownZ[i] = cache_get_row_float(i, 2, mysql);
		SeatDownA[i] = cache_get_row_float(i, 3, mysql);

		Create3DTextLabel("Нажмите: ALT", -1, SeatDownX[i], SeatDownY[i], SeatDownZ[i], 2, -1);
	}

	printf("Всего посадок загружено: %d", TOTALDOWNS);
	return true;
}
PHP:
CMD:addseatdown(playerid)
{
	// переменную mysql меняете на свою
	/* Ваши проверки на adm и пр. */

	GetPlayerPos(playerid, SeatDownX[TOTALDOWNS], SeatDownY[TOTALDOWNS], SeatDownZ[TOTALDOWNS]);
	GetPlayerFacingAngle(playerid, SeatDownA[TOTALDOWNS]);

	static const mysql_str[] = "insert into `seatdowns` (`PosX`, `PosY`, `PosZ`, `PosA`) values ('%f', '%f', '%f', '%f')";
	new str[sizeof(mysql_str) + (10*4)];

	format(str, sizeof(str), mysql_str, SeatDownX[TOTALDOWNS], SeatDownY[TOTALDOWNS], SeatDownZ[TOTALDOWNS], SeatDownA[TOTALDOWNS]);
	mysql_query(mysql, str, false);

	SendClientMessage(playerid, -1, "Вы успешно создали новую посадку!");

	Create3DTextLabel("Нажмите: ALT", -1, SeatDownX[TOTALDOWNS], SeatDownY[TOTALDOWNS], SeatDownZ[TOTALDOWNS], 2, -1);

	TOTALDOWNS++;
	return true;
}
В OnPlayerKeyStateChange:
PHP:
	if(newkeys == KEY_WALK)
	{
		for(new i; i < TOTALDOWNS; i ++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 2.0, SeatDownX[i], SeatDownY[i], SeatDownZ[i]))
            {
                SetPlayerPos(playerid, SeatDownX[i], SeatDownY[i], SeatDownZ[i]);
                SetPlayerFacingAngle(playerid, SeatDownA[i]);
                
                ApplyAnimation(playerid, "PED", "SEAT_down", 4.1, 0, 0, 0, 1, 0, 1);
                break;
            }
		}
	}
	if(newkeys == 16) // Если нажмешь - встанешь!
	{
		// Проверку сами добавите
		ApplyAnimation(playerid, "PED", "IDLE_STANCE", 4.1, 0, 0, 0, 0, 0);
	}
MySQL запрос, чтобы создать таблицу seatdowns:
PHP:
CREATE TABLE `seatdowns` (`PosX` FLOAT NOT NULL, `PosY` FLOAT NOT NULL, `PosZ` FLOAT NOT NULL, `PosA` FLOAT NOT NULL);

Вот и все! Надеюсь, Вы возьмете эту систему себе :)

З.Ы: Если нашли ошибку - напишите, исправлю!
 
Последнее редактирование:
Сверху Снизу