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

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

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

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

Мануал Динамическое добавление машин фракциям + выдача ключей к ним

Mentos

Компетентный
Привет юзеры. Дело было вечером и делать было нечего и написал я вот такую шляпу.
Сразу говорю что система до ума не доведена, ее можно просто взять как за идею чего то интересного, ну или уже доделать.
Теперь ближе к сути. Админ создает машину для фракции, она создается в БД. А лидер потом может выдать ключи от машины игроку указав номер авто. (Не красочное описание :))
!!!Система написана при помощи ZCMD + SSCANF!!!
Теперь код, начнем сверху...Ко всем new:
PHP:
new zaprosCars[200];

enum carFracInfo
{
	id_car,
	num[32],
	Float:x, Float:y, Float:z, Float:angle,
	idFracCar, color_1, color_2, lockFCar
};
new cInfo[1000][carFracInfo];
new cout_fracCar=0;
Переменные я называл не в красках, т.к лень, продолжим.
в PlayerInfo или что там у вас, добавим это:
PHP:
pKey[32]
В OnGameModeInit, это загрузка машин если че:
PHP:
mysql_function_query(MYSQL_Con, "SELECT * FROM cars", true, "carsLoad","");
Теперь страшные и почти непонятные по структуре новичкам команды, ну и функция:
PHP:
CMD:addfraccar(playerid, params[])
{
	if(pInfo[playerid][pAdmin] < 4) return SendClientMessage(playerid, -1, "Недостаточно прав!");
	if(sscanf(params, "ddsdd", params[0], params[1], cInfo[cout_fracCar][num],params[2], params[3])) return SendClientMessage(playerid, -1, "Используйте: /addfraccar [id frac][id car][Num car][color1][color2]");
	GetPlayerPos(playerid, cInfo[cout_fracCar][x], cInfo[cout_fracCar][y], cInfo[cout_fracCar][z]);
	GetPlayerFacingAngle(playerid, cInfo[cout_fracCar][angle]);
 	mysql_format(MYSQL_Con, zaprosCars, sizeof(zaprosCars), "INSERT INTO cars (id_car ,num_car, carpos_x, carpos_y, carpos_z, carpos_angle, idfrac_car, color1, color2) VALUES ('%d','%s', '%f', '%f', '%f', '%f', '%d', '%d', '%d')", params[1],cInfo[cout_fracCar][num], cInfo[cout_fracCar][x], cInfo[cout_fracCar][y], cInfo[cout_fracCar][z], cInfo[cout_fracCar][angle], params[0], params[2], params[3]);
  	mysql_tquery(MYSQL_Con, zaprosCars, "", "");
  	printf(zaprosCars);
	CreateVehicle(params[1], cInfo[cout_fracCar][x], cInfo[cout_fracCar][y], cInfo[cout_fracCar][z], cInfo[cout_fracCar][angle], params[3], params[4], 99999);
    SetVehicleNumberPlate(cout_fracCar+1, cInfo[cout_fracCar][num]);
	++cout_fracCar;
	return 1;
}

CMD:givekeycar(playerid, params[])
{
	new st[32];
	if(pInfo[playerid][pRang] < 10)return 1;
	if(sscanf(params, "us[32]", params[0], st))return SendClientMessage(playerid, -1, "Используйте: /givekeycar [idplayer][numcar]");
	for(new i =0; i < cout_fracCar; ++i)
	{
	    if(strcmp(st, cInfo[i][num]) == 0)
	    {
	    	if(pInfo[playerid][pMember] != cInfo[i][idFracCar]) return SendClientMessage(playerid, -1, "Вы не имеете ключа от этого автомобиля");
	    	pInfo[params[0]][pKey] = st;
			SendClientMessage(playerid, -1, "Вам выдали ключ от авто");
	    }
	}
	return 1;
}


CMD:flock(playerid)
{
    new res = IfBasedCar(playerid);
	printf( "%d",res);
    if(res != -1)
    {
        if(strcmp(pInfo[playerid][pKey], cInfo[res][num]) != 0) return SendClientMessage(playerid, -1, "У вас нет ключа от этой машины.");
        if(!cInfo[res][lockFCar])
        {
	        cInfo[res][lockFCar] = true;
	        GameTextForPlayer(playerid, "~r~Lock", 5000, 1);
	        SetVehicleParamsEx(res+1, 0, 0, 0, 1, 0, 0, 0);
        }
        else
        {
	        cInfo[res][lockFCar] = false;
	        GameTextForPlayer(playerid, "~g~UnLock", 5000, 1);
	        SetVehicleParamsEx(res+1, 0, 0, 0, 0, 0, 0, 0);
        }
    }
	return 1;
}

stock IfBasedCar(playerid)//Проверка рядом ли машина
{
	new Float:pos[3];
	for(new i = 0; i < 1000; ++i)
	{
	    GetVehiclePos(i+1, pos[0], pos[1], pos[2]);
	    if(IsPlayerInRangeOfPoint(playerid, 3, pos[0], pos[1], pos[2]))
			return i;
	}
	return -1;
}
Ну и сам паблик загрузки, сохранение не делал я:
PHP:
forward carsLoad();
public carsLoad()
{
    new rows, fields;
    cache_get_data(rows, fields);
    for(new i = 0; i < rows; i++)
    {
        ++cout_fracCar;
        cInfo[i][id_car] = cache_get_field_content_int(i, "id_car", MYSQL_Con);
        cache_get_field_content(i, "num_car", cInfo[i][num], MYSQL_Con, 32);
        cInfo[i][idFracCar] = cache_get_field_content_int(i, "idfrac_car", MYSQL_Con);
        cInfo[i][x] = cache_get_field_content_float(i, "carpos_x", MYSQL_Con);
        cInfo[i][y] = cache_get_field_content_float(i, "carpos_y", MYSQL_Con);
        cInfo[i][z] = cache_get_field_content_float(i, "carpos_z", MYSQL_Con);
        cInfo[i][angle] = cache_get_field_content_float(i, "carpos_angle", MYSQL_Con);
        cInfo[i][color_1] = cache_get_field_content_int(i, "color1", MYSQL_Con);
        cInfo[i][color_2] = cache_get_field_content_int(i, "color2", MYSQL_Con);
        cInfo[i][lockFCar] = cache_get_field_content_int(i, "lockcar", MYSQL_Con);
        CreateVehicle(cInfo[i][id_car], cInfo[i][x], cInfo[i][y], cInfo[i][z], cInfo[i][angle], cInfo[i][color_1], cInfo[i][color_2], 99999);
        SetVehicleNumberPlate(cout_fracCar, cInfo[i][num]);
	}
	printf("Загружено %d",cout_fracCar);
}
Ну и вся система, если кто то собрался это вшивать в свой "не чистый" мод, то вам придется перестроить системку под свое творение(ну или не свое).
Автор сие системы: Mentos (I)
Вот вам для бд.
И как вы думаете, годная системка то вообще? Если до ума ее довести
 
Сверху Снизу