Пользователь
- Регистрация
- 11 Май 2025
- Сообщения
- 10
- Автор темы
- #1
Основной код (gamemodes/crmp_welder.pwn)
```pawn#include <a_samp>
#include <streamer> // Для создания объектов и зон
#include <sscanf2> // Для обработки команд
#include <zcmd> // Для удобных команд
#define WELDER_JOB_PAYMENT 100 // Зарплата за 1 цикл работы
#define WELDER_JOB_COOLDOWN 60 // КД между заданиями (секунды)
// Переменные игрока
new bool:IsPlayerWelding[MAX_PLAYERS];
new WelderTimer[MAX_PLAYERS];
new PlayerWeldingProgress[MAX_PLAYERS];
// Координаты рабочей зоны сварщика
new Float:WelderJobPos[][] = {
{2165.5417, -1733.1182, 13.5634}, // Место работы (стройплощадка LS)
{2167.8530, -1732.4761, 13.5634} // Место для инструментов
};
public OnGameModeInit() {
// Создаем объекты для работы
CreateDynamicObject(1484, WelderJobPos[1][0], WelderJobPos[1][1], WelderJobPos[1][2], 0.0, 0.0, 0.0); // Ящик с инструментами
CreateDynamicCP(WelderJobPos[0][0], WelderJobPos[0][1], WelderJobPos[0][2], 2.0, -1, -1, -1, 5.0); // Чекпоинт работы
return 1;
}
// Команда для начала работы
CMD:startwelding(playerid) {
if (!IsPlayerInRangeOfPoint(playerid, 5.0, WelderJobPos[0][0], WelderJobPos[0][1], WelderJobPos[0][2])) {
SendClientMessage(playerid, 0xFF0000AA, "Вы не на стройплощадке!");
return 1;
}
if (IsPlayerWelding[playerid]) {
SendClientMessage(playerid, 0xFF0000AA, "Вы уже работаете!");
return 1;
}
SendClientMessage(playerid, 0x33AA33AA, "Начните сварку: используйте /weldnear или подойдите к металлоконструкции.");
IsPlayerWelding[playerid] = true;
return 1;
}
// Анимация сварки
StartWeldingAnimation(playerid) {
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.1, 1, 0, 0, 0, 0);
PlayerWeldingProgress[playerid] = 0;
WelderTimer[playerid] = SetTimerEx("UpdateWelding", 1000, true, "i", playerid);
}
forward UpdateWelding(playerid);
public UpdateWelding(playerid) {
if (!IsPlayerWelding[playerid]) {
KillTimer(WelderTimer[playerid]);
return 0;
}
PlayerWeldingProgress[playerid] += 10;
// Прогресс бар (условный)
new str[32];
format(str, sizeof(str), "Прогресс: %d%%", PlayerWeldingProgress[playerid]);
SendClientMessage(playerid, 0xFFFF00AA, str);
if (PlayerWeldingProgress[playerid] >= 100) {
GivePlayerMoney(playerid, WELDER_JOB_PAYMENT);
SendClientMessage(playerid, 0x00FF00AA, "Работа завершена! Заработано $100.");
KillTimer(WelderTimer[playerid]);
IsPlayerWelding[playerid] = false;
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0);
}
return 1;
}
// Команда для сварки ближайших объектов
CMD:weldnear(playerid) {
if (!IsPlayerWelding[playerid]) {
SendClientMessage(playerid, 0xFF0000AA, "Сначала начните работу: /startwelding");
return 1;
}
new Float:dist = GetPlayerDistanceFromPoint(playerid, WelderJobPos[0][0], WelderJobPos[0][1], WelderJobPos[0][2]);
if (dist > 5.0) {
SendClientMessage(playerid, 0xFF0000AA, "Подойдите к рабочей зоне!");
return 1;
}
StartWeldingAnimation(playerid);
return 1;
}
// При входе в чекпоинт
public OnPlayerEnterDynamicCP(playerid, checkpointid) {
if (checkpointid == 0) { // ID чекпоинта работы
SendClientMessage(playerid, 0x33AA33AA, "Нажмите /startwelding чтобы начать сварку.");
}
return 1;
}
Как это работает? Ответ ниже!!
1. **Рабочая зона**: Игрок приходит на стройплощадку (координаты в `WelderJobPos`).
2. *Начало работы**: Команда `/startwelding` активирует профессию.
3. **Сварка**:
- Используйте `/weldnear` для начала анимации.
- Прогресс заполняется каждую секунду.
- По завершении игрок получает $100.
4. **Анимации**: Реалистичная анимация сварки из GTA SA.
База данных : Для сохранения данных добавьте MySQL, пример :
// При выходеpublic OnPlayerDisconnect(playerid, reason) {
new query[128];
format(query, sizeof(query), "UPDATE players SET welding_jobs = welding_jobs + %d WHERE id = %d",
PlayerWeldingJobs[playerid],
GetPlayerAccountID(playerid));
mysql_tquery(g_DB, query);
return 1;
}
Проверка инструментов :
CMD:weldnear(playerid) {if (!IsPlayerHaveWelderTools(playerid)) {
SendClientMessage(playerid, 0xFF0000AA, "Купите инструменты в магазине!");
return 1;
}
// ...
}
Совет для новичков -
1. Для работы требуется плагин Streamer ( для чекпойнтов и т.п)
2. Настройте координаты под ВАШ сервер
3.Добавьте звуки сварки через PlaySound