Активный
- Тема Автор
- #1
3D Text Labels позволяют отображать текст в игровом мире. Разберем работу с ними.
Создание 3D Text Label
Параметры:
- text - текст метки
- color - цвет в формате ARGB
- x, y, z - координаты
- drawDistance - дистанция прорисовки
- virtualworld - виртуальный мир (-1 для всех)
- testLOS - проверка видимости (0/1)
Управление метками
Пример: метки для домов
Пример: метки для транспорта
Пример: метки для игроков
Цвета меток
Важные моменты:
- Максимум 1024 метки на сервере
- Обновляйте метки при изменении данных
- Используйте прикрепление для динамических меток
- Оптимизируйте drawDistance для производительности
3D Text Labels делают информацию доступной в игровом мире!
Создание 3D Text Label
Код:
Create3DTextLabel(text[], color, Float:x, Float:y, Float:z, Float:drawDistance, virtualworld, testLOS);
// Пример:
new Text3D:label = Create3DTextLabel("Добро пожаловать!", 0xFFFFFFFF, 0.0, 0.0, 3.0, 20.0, 0, 0);
Параметры:
- text - текст метки
- color - цвет в формате ARGB
- x, y, z - координаты
- drawDistance - дистанция прорисовки
- virtualworld - виртуальный мир (-1 для всех)
- testLOS - проверка видимости (0/1)
Управление метками
Код:
// Обновить текст
Update3DTextLabelText(Text3D:id, color, text[]);
// Удалить метку
Delete3DTextLabel(Text3D:id);
// Прикрепить к игроку
Attach3DTextLabelToPlayer(Text3D:id, playerid, Float:offsetX, Float:offsetY, Float:offsetZ);
// Прикрепить к транспорту
Attach3DTextLabelToVehicle(Text3D:id, vehicleid, Float:offsetX, Float:offsetY, Float:offsetZ);
Пример: метки для домов
Код:
enum HouseInfo
{
Float:hX,
Float:hY,
Float:hZ,
hPrice,
hOwner[MAX_PLAYER_NAME],
Text3D:hLabel
}
new HouseData[100][HouseInfo];
new TotalHouses = 0;
CreateHouse(Float:x, Float:y, Float:z, price)
{
if(TotalHouses >= sizeof(HouseData))
{
return -1;
}
new string[128];
if(strlen(HouseData[TotalHouses][hOwner]) == 0)
{
format(string, sizeof(string), "Дом на продажу\nЦена: $%d\nНажмите F", price);
}
else
{
format(string, sizeof(string), "Дом\nВладелец: %s\nНажмите F", HouseData[TotalHouses][hOwner]);
}
HouseData[TotalHouses][hX] = x;
HouseData[TotalHouses][hY] = y;
HouseData[TotalHouses][hZ] = z;
HouseData[TotalHouses][hPrice] = price;
HouseData[TotalHouses][hLabel] = Create3DTextLabel(string, 0xFFFFFFFF, x, y, z + 1.0, 20.0, 0, 0);
TotalHouses++;
return TotalHouses - 1;
}
UpdateHouseLabel(houseid)
{
new string[128];
if(strlen(HouseData[houseid][hOwner]) == 0)
{
format(string, sizeof(string), "Дом на продажу\nЦена: $%d\nНажмите F", HouseData[houseid][hPrice]);
Update3DTextLabelText(HouseData[houseid][hLabel], 0xFFFFFFFF, string);
}
else
{
format(string, sizeof(string), "Дом\nВладелец: %s\nНажмите F", HouseData[houseid][hOwner]);
Update3DTextLabelText(HouseData[houseid][hLabel], 0x00FF00FF, string);
}
}
BuyHouse(playerid, houseid)
{
if(GetPlayerMoney(playerid) < HouseData[houseid][hPrice])
{
SendClientMessage(playerid, -1, "Недостаточно денег");
return 0;
}
GetPlayerName(playerid, HouseData[houseid][hOwner], MAX_PLAYER_NAME);
GivePlayerMoney(playerid, -HouseData[houseid][hPrice]);
UpdateHouseLabel(houseid);
SendClientMessage(playerid, -1, "Дом куплен!");
return 1;
}
Пример: метки для транспорта
Код:
enum VehicleInfo
{
vModel,
Text3D:vLabel,
vOwner[MAX_PLAYER_NAME]
}
new VehicleData[MAX_VEHICLES][VehicleInfo];
public OnGameModeInit()
{
new vehicleid = CreateVehicle(411, 0.0, 0.0, 3.0, 0.0, 0, 1, -1);
new string[128];
format(string, sizeof(string), "Транспорт\nМодель: %d\nНажмите F", 411);
VehicleData[vehicleid][vLabel] = Create3DTextLabel(string, 0xFFFFFFFF, 0.0, 0.0, 1.0, 15.0, 0, 0);
Attach3DTextLabelToVehicle(VehicleData[vehicleid][vLabel], vehicleid, 0.0, 0.0, 1.0);
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(ispassenger)
{
return 1;
}
new string[128];
if(strlen(VehicleData[vehicleid][vOwner]) == 0)
{
format(string, sizeof(string), "Транспорт\nМодель: %d\nВладелец: Нет", GetVehicleModel(vehicleid));
}
else
{
format(string, sizeof(string), "Транспорт\nМодель: %d\nВладелец: %s",
GetVehicleModel(vehicleid), VehicleData[vehicleid][vOwner]);
}
Update3DTextLabelText(VehicleData[vehicleid][vLabel], 0xFFFFFFFF, string);
return 1;
}
Пример: метки для игроков
Код:
new Text3D:PlayerLabel[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
new string[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "%s\nLevel: 1", name);
PlayerLabel[playerid] = Create3DTextLabel(string, 0xFFFFFFFF, 0.0, 0.0, 0.5, 20.0, 0, 0);
Attach3DTextLabelToPlayer(PlayerLabel[playerid], playerid, 0.0, 0.0, 0.5);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
Delete3DTextLabel(PlayerLabel[playerid]);
return 1;
}
UpdatePlayerLabel(playerid)
{
new string[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "%s\nLevel: %d | Money: $%d",
name, PlayerInfo[playerid][pLevel], GetPlayerMoney(playerid));
Update3DTextLabelText(PlayerLabel[playerid], 0xFFFFFFFF, string);
}
public OnPlayerUpdate(playerid)
{
static lastUpdate[MAX_PLAYERS];
if(GetTickCount() - lastUpdate[playerid] > 1000)
{
UpdatePlayerLabel(playerid);
lastUpdate[playerid] = GetTickCount();
}
return 1;
}
Цвета меток
Код:
// Белый
0xFFFFFFFF
// Красный
0xFF0000FF
// Зеленый
0x00FF00FF
// Синий
0x0000FFFF
// Желтый
0xFFFF00FF
// Прозрачный фон
0xFFFFFFAA
Важные моменты:
- Максимум 1024 метки на сервере
- Обновляйте метки при изменении данных
- Используйте прикрепление для динамических меток
- Оптимизируйте drawDistance для производительности
3D Text Labels делают информацию доступной в игровом мире!