Активный
- Тема Автор
- #1
Работа позволяет игрокам зарабатывать деньги. Разберем создание системы профессий.
Типы работ
- Водитель такси
- Водитель автобуса
- Водитель грузовика
- Курьер
- Охранник
- Продавец
Структура работы
Создание работы
Начало работы
Выполнение работы
Завершение работы
Команды
Важные моменты:
- Реализуйте различные типы работ
- Начисляйте справедливую оплату
- Добавляйте прогресс работы
- Сохраняйте статистику
Система работы добавляет геймплей на сервер!
Типы работ
- Водитель такси
- Водитель автобуса
- Водитель грузовика
- Курьер
- Охранник
- Продавец
Структура работы
Код:
enum JobInfo
{
jName[32],
jType,
jPayRate,
jRequiredLevel,
Float:jStartX,
Float:jStartY,
Float:jStartZ
}
new JobData[10][JobInfo];
new TotalJobs = 0;
new PlayerJob[MAX_PLAYERS] = {-1, ...};
new PlayerJobProgress[MAX_PLAYERS];
Создание работы
Код:
CreateJob(name[], type, payRate, requiredLevel, Float:x, Float:y, Float:z)
{
if(TotalJobs >= sizeof(JobData))
{
return -1;
}
strcpy(JobData[TotalJobs][jName], name, 32);
JobData[TotalJobs][jType] = type;
JobData[TotalJobs][jPayRate] = payRate;
JobData[TotalJobs][jRequiredLevel] = requiredLevel;
JobData[TotalJobs][jStartX] = x;
JobData[TotalJobs][jStartY] = y;
JobData[TotalJobs][jStartZ] = z;
TotalJobs++;
return TotalJobs - 1;
}
Начало работы
Код:
StartJob(playerid, jobid)
{
if(jobid >= TotalJobs)
{
return 0;
}
if(PlayerInfo[playerid][pLevel] < JobData[jobid][jRequiredLevel])
{
new string[128];
format(string, sizeof(string), "Требуется уровень %d", JobData[jobid][jRequiredLevel]);
SendClientMessage(playerid, -1, string);
return 0;
}
if(PlayerJob[playerid] != -1)
{
SendClientMessage(playerid, -1, "Вы уже работаете");
return 0;
}
PlayerJob[playerid] = jobid;
PlayerJobProgress[playerid] = 0;
// Телепортация на рабочее место
SetPlayerPos(playerid, JobData[jobid][jStartX], JobData[jobid][jStartY], JobData[jobid][jStartZ]);
SendClientMessage(playerid, -1, "Работа начата!");
return 1;
}
Выполнение работы
Код:
ProcessJob(playerid)
{
if(PlayerJob[playerid] == -1)
{
return 0;
}
new jobid = PlayerJob[playerid];
switch(JobData[jobid][jType])
{
case JOB_TYPE_TAXI:
{
ProcessTaxiJob(playerid);
}
case JOB_TYPE_BUS:
{
ProcessBusJob(playerid);
}
case JOB_TYPE_COURIER:
{
ProcessCourierJob(playerid);
}
}
return 1;
}
ProcessTaxiJob(playerid)
{
// Логика работы таксиста
if(IsPlayerInAnyVehicle(playerid))
{
new vehicleid = GetPlayerVehicleID(playerid);
if(GetVehicleModel(vehicleid) == 420) // такси
{
// Проверка пассажиров
// Начисление денег
}
}
}
Завершение работы
Код:
EndJob(playerid)
{
if(PlayerJob[playerid] == -1)
{
return 0;
}
new jobid = PlayerJob[playerid];
new earnings = PlayerJobProgress[playerid] * JobData[jobid][jPayRate];
GivePlayerMoney(playerid, earnings);
new string[128];
format(string, sizeof(string), "Работа завершена! Заработано: $%d", earnings);
SendClientMessage(playerid, -1, string);
PlayerJob[playerid] = -1;
PlayerJobProgress[playerid] = 0;
return 1;
}
Команды
Код:
CMD:job(playerid, params[])
{
new string[256] = "";
for(new i = 0; i < TotalJobs; i++)
{
format(string, sizeof(string), "%s%s (Уровень: %d)\n",
string, JobData[i][jName], JobData[i][jRequiredLevel]);
}
ShowPlayerDialog(playerid, DIALOG_JOBS, DIALOG_STYLE_LIST, "Доступные работы", string, "Начать", "Отмена");
return 1;
}
CMD:endjob(playerid, params[])
{
EndJob(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_JOBS)
{
if(response)
{
StartJob(playerid, listitem);
}
}
return 1;
}
Важные моменты:
- Реализуйте различные типы работ
- Начисляйте справедливую оплату
- Добавляйте прогресс работы
- Сохраняйте статистику
Система работы добавляет геймплей на сервер!