Пользователь
- Регистрация
- 11 Май 2025
- Сообщения
- 15
- Автор темы
- #1
Основные дефайны и переменные -
// Настройки ивента#define EVENT_NAME "Тёмная_сделка"
#define MAX_TEAM_PLAYERS 8
#define PRICE_MINE 5000
// Команды
enum {
TEAM_NONE = -1,
TEAM_NAEMNIKI, // Наёмники
TEAM_OHRANA, // Охрана
TEAM_WILDCARD // Дикие карты
};
// Переменные
new bool:EventActive = false;
new PlayerTeam[MAX_PLAYERS];
new ConvoyVehicles[4]; // Массив для транспорта конвоя
new MineObject; // Объект мины
Тригер старта ивента ( /event_start)
CMD:event_start(playerid) {
if (!IsPlayerAdmin(playerid)) return SendErrorMessage(playerid, "Нет прав.");
if (EventActive) return SendErrorMessage(playerid, "Ивент уже идет.");
EventActive = true;
SendClientMessageToAll(COLOR_RED, "[ИВЕНТ] Тёмная сделка активирована! /event_join для участия.");
// Спавн NPC-торговца (x, y, z для вашей локации)
CreateNPC("Dealer", 123.45, -456.78, 789.01, 270.0);
return 1;
}
Присоединение к Ивенту -
CMD:event_join(playerid) {if (!EventActive) return SendErrorMessage(playerid, "Ивент не активен.");
if (GetPlayerReputation(playerid) < 50) return SendErrorMessage(playerid, "Нужна репутация бандита.");
ShowPlayerDialog(playerid, DIALOG_EVENT_TEAM, DIALOG_STYLE_LIST,
"Выбор команды",
"Наёмники (атака)\nОхрана (защита)\nДикие карты (предатели)",
"Выбрать", "Отмена"
);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if (dialogid == DIALOG_EVENT_TEAM) {
if (!response) return 1;
switch(listitem) {
case 0: PlayerTeam[playerid] = TEAM_NAEMNIKI;
case 1: PlayerTeam[playerid] = TEAM_OHRANA;
case 2: PlayerTeam[playerid] = TEAM_WILDCARD;
}
SetPlayerPos(playerid, GetEventSpawn(PlayerTeam[playerid])); // Кастомная функция для спавна
SendTeamMessage(PlayerTeam[playerid], "Вы присоединились к команде!");
}
return 1;
}
Механика , установка мины -
CMDif (PlayerTeam[playerid] != TEAM_NAEMNIKI) return 0;
if (GetPlayerMoney(playerid) < PRICE_MINE) return SendErrorMessage(playerid, "Нужно $5,000.");
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
MineObject = CreateDynamicObject(363, x, y, z-0.9, 0.0, 0.0, 0.0); // Модель мины
ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.1, 0, 0, 0, 0, 0);
SendClientMessage(playerid, COLOR_GREEN, "Мина установлена! Конвой будет подорван.");
return 1;
}
Спавн конвоя и NPC
StartConvoy() {
// Создание транспорта (ID моделей для грузовиков/джипов)
ConvoyVehicles[0] = CreateVehicle(403, 0.0, 0.0, 5.0, 0.0, -1, -1, 60000); // Бронированный грузовик
ConvoyVehicles[1] = CreateVehicle(468, 5.0, 0.0, 5.0, 0.0, -1, -1, 60000); // Внедорожник
// Спавн NPC-охранников
for(new i; i < 4; i++) {
CreateNPC("Guard", 0.0 + i*2, 0.0, 5.0, 0.0);
SetNPCWeapon(i, WEAPON_SHOTGUN); // Дробовики
}
}
Обработка взрыва мины -
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) {
if (hittype == BULLET_HIT_TYPE_OBJECT && IsValidDynamicObject(MineObject)) {
DestroyDynamicObject(MineObject);
CreateExplosion(fX, fY, fZ, 7, 5.0); // Взрыв
SendClientMessageToAll(COLOR_RED, "[ИВЕНТ] Конвой подорван! Началась перестрелка!");
StartFirefight(); // Запуск фазы перестрелки
}
return 1;
}
Финал ивента -
EndEvent(winner_team) {
EventActive = false;
foreach(new i : Player) {
if (PlayerTeam == winner_team) {
GiveMoney(i, 50000);
SendClientMessage(i, COLOR_GOLD, "Вы победили! +$50,000.");
} else {
SetPlayerWantedLevel(i, 6); // Арест за провал
}
PlayerTeam = TEAM_NONE;
}
DestroyConvoy(); // Удалить транспорт и NPC
}