Активный
- Тема Автор
- #1
Пикапы позволяют создавать интерактивные объекты на карте. Разберем работу с ними.
Создание пикапа
Типы пикапов:
- 1 - исчезает после подбора
- 2 - не исчезает, можно подобрать несколько раз
- 3 - исчезает через некоторое время
- 4 - не исчезает, но можно подобрать только один раз
Популярные модели:
- 1210 - деньги
- 1240 - здоровье
- 1241 - броня
- 1274 - оружие
- 1313 - информация
- 1559 - дом
Колбэки пикапов
Пример: система пикапов здоровья
Удаление пикапа
Пример: динамические пикапы
Пример: пикапы оружия
Пикапы в разных виртуальных мирах
Важные моменты:
- Максимум 4096 пикапов на сервере
- Используйте разные типы для разных целей
- Сохраняйте ID пикапов для управления
- Учитывайте виртуальные миры при создании
Пикапы делают игровой мир интерактивным!
Создание пикапа
Код:
CreatePickup(modelid, type, Float:x, Float:y, Float:z, worldid);
// Пример:
new pickupid = CreatePickup(1274, 1, 0.0, 0.0, 3.0, 0);
Типы пикапов:
- 1 - исчезает после подбора
- 2 - не исчезает, можно подобрать несколько раз
- 3 - исчезает через некоторое время
- 4 - не исчезает, но можно подобрать только один раз
Популярные модели:
- 1210 - деньги
- 1240 - здоровье
- 1241 - броня
- 1274 - оружие
- 1313 - информация
- 1559 - дом
Колбэки пикапов
Код:
public OnPlayerPickUpPickup(playerid, pickupid)
{
switch(pickupid)
{
case PICKUP_HEALTH:
{
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "Здоровье восстановлено");
}
case PICKUP_ARMOUR:
{
SetPlayerArmour(playerid, 100.0);
SendClientMessage(playerid, -1, "Броня восстановлена");
}
case PICKUP_MONEY:
{
GivePlayerMoney(playerid, 1000);
SendClientMessage(playerid, -1, "Вы получили $1000");
}
}
return 1;
}
Пример: система пикапов здоровья
Код:
new PICKUP_HEALTH;
new PICKUP_ARMOUR;
new PICKUP_MONEY;
public OnGameModeInit()
{
// Пикап здоровья
PICKUP_HEALTH = CreatePickup(1240, 2, 1958.3783, 1343.1572, 15.3746, 0);
// Пикап брони
PICKUP_ARMOUR = CreatePickup(1241, 2, 1960.0, 1343.1572, 15.3746, 0);
// Пикап денег
PICKUP_MONEY = CreatePickup(1210, 1, 1962.0, 1343.1572, 15.3746, 0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == PICKUP_HEALTH)
{
new Float:health;
GetPlayerHealth(playerid, health);
if(health < 100.0)
{
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "Здоровье восстановлено");
}
else
{
SendClientMessage(playerid, -1, "У вас полное здоровье");
}
}
else if(pickupid == PICKUP_ARMOUR)
{
new Float:armour;
GetPlayerArmour(playerid, armour);
if(armour < 100.0)
{
SetPlayerArmour(playerid, 100.0);
SendClientMessage(playerid, -1, "Броня восстановлена");
}
else
{
SendClientMessage(playerid, -1, "У вас полная броня");
}
}
else if(pickupid == PICKUP_MONEY)
{
GivePlayerMoney(playerid, 1000);
SendClientMessage(playerid, -1, "Вы получили $1000");
}
return 1;
}
Удаление пикапа
Код:
DestroyPickup(pickupid);
Пример: динамические пикапы
Код:
enum PickupInfo
{
pModel,
pType,
Float:pX,
Float:pY,
Float:pZ,
pWorld,
pPickupID
}
new PickupData[100][PickupInfo];
new TotalPickups = 0;
CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid)
{
if(TotalPickups >= sizeof(PickupData))
{
return -1;
}
new pickupid = CreatePickup(modelid, type, x, y, z, worldid);
PickupData[TotalPickups][pModel] = modelid;
PickupData[TotalPickups][pType] = type;
PickupData[TotalPickups][pX] = x;
PickupData[TotalPickups][pY] = y;
PickupData[TotalPickups][pZ] = z;
PickupData[TotalPickups][pWorld] = worldid;
PickupData[TotalPickups][pPickupID] = pickupid;
TotalPickups++;
return TotalPickups - 1;
}
RemoveDynamicPickup(pickupindex)
{
if(pickupindex >= TotalPickups)
{
return 0;
}
DestroyPickup(PickupData[pickupindex][pPickupID]);
// Сдвиг массива
for(new i = pickupindex; i < TotalPickups - 1; i++)
{
PickupData[i] = PickupData[i + 1];
}
TotalPickups--;
return 1;
}
Пример: пикапы оружия
Код:
new PICKUP_WEAPON_PISTOL;
new PICKUP_WEAPON_SHOTGUN;
new PICKUP_WEAPON_AK47;
public OnGameModeInit()
{
PICKUP_WEAPON_PISTOL = CreatePickup(1274, 1, 1958.3783, 1343.1572, 15.3746, 0);
PICKUP_WEAPON_SHOTGUN = CreatePickup(1274, 1, 1960.0, 1343.1572, 15.3746, 0);
PICKUP_WEAPON_AK47 = CreatePickup(1274, 1, 1962.0, 1343.1572, 15.3746, 0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == PICKUP_WEAPON_PISTOL)
{
GivePlayerWeapon(playerid, 22, 100);
SendClientMessage(playerid, -1, "Вы подобрали пистолет");
}
else if(pickupid == PICKUP_WEAPON_SHOTGUN)
{
GivePlayerWeapon(playerid, 25, 50);
SendClientMessage(playerid, -1, "Вы подобрали дробовик");
}
else if(pickupid == PICKUP_WEAPON_AK47)
{
GivePlayerWeapon(playerid, 30, 200);
SendClientMessage(playerid, -1, "Вы подобрали AK-47");
}
return 1;
}
Пикапы в разных виртуальных мирах
Код:
// Пикап только в виртуальном мире 1
new pickup1 = CreatePickup(1240, 2, 0.0, 0.0, 3.0, 1);
// Пикап только в виртуальном мире 2
new pickup2 = CreatePickup(1241, 2, 0.0, 0.0, 3.0, 2);
// Пикап во всех мирах
new pickup3 = CreatePickup(1210, 1, 0.0, 0.0, 3.0, -1);
Важные моменты:
- Максимум 4096 пикапов на сервере
- Используйте разные типы для разных целей
- Сохраняйте ID пикапов для управления
- Учитывайте виртуальные миры при создании
Пикапы делают игровой мир интерактивным!