- Спойлер
Вставляем это в начало мода. Здесь мы будем сохранять информацию об каждом созданном объекте.
Код: Выделить всё
#define o<%1:%0> \
db_objects[%0][%1]
const OBJECTS_LIMIT = 1000;
new IsLastObject;
enum DB_OBJECTS
{
object_id,
model_id,
Float:f_x,
Float:f_y,
Float:f_z,
Float:f_rx,
Float:f_ry,
Float:f_rz,
world_id,
interior_id
}
new db_objects[OBJECTS_LIMIT][DB_OBJECTS];
Это вставляем туда, где у вас все команды. Так как это ZCMD/DC_CMD, то в каллбэк OnPlayerCommandText это вставлять НЕ надо! Команда создает объект на сервере.
Код: Выделить всё
COMMAND:create(playerid, params[])
{
if(sscanf(params, "i", params[0]))
return SendClientMessage(playerid, -1, "Введите /create [model id]");
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
IsLastObject = CreateObject(params[0], x, y, z, 0, 0, 0);
printf("Объект id %i", IsLastObject);
EditObject(playerid, IsLastObject);
return 1;
}
Если у вас нет каллбэка OnPlayerEditObject, то добавьте весь код, который ниже, а если у вас есть этот паблик, то добавляем код, который внутри каллбэка приведенного ниже. Он отвечает управление объектом.
Код: Выделить всё
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
if(!playerobject)
{
if(!IsValidObject(objectid))
return 1;
MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
}
if(response == EDIT_RESPONSE_FINAL)
{
o<f_x:IsLastObject> = fX;
o<f_y:IsLastObject> = fY;
o<f_z:IsLastObject> = fZ;
o<f_rx:IsLastObject> = fRotX;
o<f_ry:IsLastObject> = fRotY;
o<f_rz:IsLastObject> = fRotZ;
o<world_id:IsLastObject> = GetPlayerVirtualWorld(playerid);
o<interior_id:IsLastObject> = GetPlayerInterior(playerid);
o<model_id:IsLastObject> = GetObjectModel(IsLastObject);
MySQL__CreateObjects(IsLastObject);
CancelEdit(playerid);
SendClientMessage(playerid, -1, "Объект установлен.");
return 1;
}
if(response == EDIT_RESPONSE_CANCEL)
{
SendClientMessage(playerid, -1, "Установка объекта отменена.");
DestroyObject(IsLastObject);
IsLastObject -= 1;
CancelEdit(playerid);
return 1;
}
return 1;
}
Это добавим в конец мода, ну как обычно. Функция создают в таблице с объектами столбец с конктертным объектом.
Код: Выделить всё
stock MySQL__CreateObjects(i)
{
new str[1054];
format(str, sizeof(str), "INSERT INTO `objects` (`ID`, `Model`, `fX`, `fY`, `fZ`, `fRX`, `fRY`, `fRZ`, `World`, `Interior`) VALUES ('%i', '%i', '%f', '%f', '%f', '%f', '%f', '%f', '%i', '%i')",
i, o<model_id:i>, o<f_x:i>, o<f_y:i>, o<f_z:i>, o<f_rx:i>, o<f_ry:i>, o<f_rz:i>, o<world_id:i>, o<interior_id:i>);
mysql_function_query(/* id подключения к бд */, str, false, "", "");
return 1;
}
Это функцию тоже в конец мода. Функция загружает все объекты из базы данных и устанавливает их на сервере.
Код: Выделить всё
forward MySQL__LoadObjects();
public MySQL__LoadObjects()
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
for(new i; i < rows; i++)
{
o<object_id:i> = cache_get_field_content_int(i, "ID", /* id подключения к бд */);
o<model_id:i> = cache_get_field_content_int(i, "Model", /* id подключения к бд */);
o<f_x:i> = cache_get_field_content_float(i, "fX", /* id подключения к бд */);
o<f_y:i> = cache_get_field_content_float(i, "fY", /* id подключения к бд */);
o<f_z:i> = cache_get_field_content_float(i, "fZ", /* id подключения к бд */);
o<f_rx:i> = cache_get_field_content_float(i, "fRX", /* id подключения к бд */);
o<f_ry:i> = cache_get_field_content_float(i, "fRY", /* id подключения к бд */);
o<f_rz:i> = cache_get_field_content_float(i, "fRZ", /* id подключения к бд */);
o<world_id:i> = cache_get_field_content_int(i, "World", /* id подключения к бд */);
o<interior_id:i> = cache_get_field_content_int(i, "Interior", /* id подключения к бд */);
o<object_id:i> = CreateDynamicObject(o<model_id:i>, o<f_x:i>, o<f_y:i>, o<f_z:i>, o<f_rx:i>, o<f_ry:i>, o<f_rz:i>, o<world_id:i>, o<interior_id:i>);
o<object_id:i> = IsLastObject;
}
}
return 1;
}
Ищем каллбэк OnGameModeInit и вставляем туда.
Код: Выделить всё
mysql_function_query(/* id подключения к бд */, "SELECT * FROM `objects`", true, "MySQL__LoadObjects", "");
Запрос на создание таблицы "objects" в базе данных.
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `objects` (
`ID` int(4) NOT NULL,
`Model` int(5) NOT NULL,
`fX` float NOT NULL,
`fY` float NOT NULL,
`fZ` float NOT NULL,
`fRX` float NOT NULL,
`fRY` float NOT NULL,
`fRZ` float NOT NULL,
`World` int(11) NOT NULL,
`Interior` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;