Алексей Мещеряков
Специалист
Доброго времени суток всем гостям и пользователям pawno-info.
Сегодня я покажу как сделать простую, но интересную работы развозчика цемента. Постараюсь объяснить все очень подробно. Этот урок не только по добавлению работы, но и так же разбор стандартных функций.
Сегодня я покажу как сделать простую, но интересную работы развозчика цемента. Постараюсь объяснить все очень подробно. Этот урок не только по добавлению работы, но и так же разбор стандартных функций.
Объявим переменные, которые мы будем использовать в нашем коде:
PHP:
new CEM_Veh[2];
CEMENT_Object[MAX_PLAYERS char];
Cement_Check[MAX_PLAYERS char];
new bool: CEMMisson[MAX_PLAYERS char];
PHP:
CEM_Veh[0] = AddStaticVehicle(524,1264.9974,-1265.0490,14.2524,359.9430,65,31);
AddStaticVehicle(524,1259.9846,-1265.0490,14.3545,359.7379,61,27);
AddStaticVehicle(524,1255.0193,-1265.0490,14.3430,359.0296,62,61);
AddStaticVehicle(524,1250.1464,-1265.0490,14.2768,0.4196,61,27);
CEM_Veh[1] = AddStaticVehicle(524,1244.9406,-1265.0490,14.2671,1.6362,61,61);
PHP:
CEMMisson{playerid} = false;
Идем в public OnPlayerStateChange(playerid, newstate, oldstate) и добавляем следующий код.
PHP:
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid >= CEM_Veh[0] && vehicleid <= CEM_Veh[1])
{
ShowPlayerDialog(playerid,1,
DIALOG_STYLE_MSGBOX,
!"{FFFFFF}Задание",
!"{ECCA63}Необходимо отвезти раствор на стройку. Возьмешься?!",
"Да",
!"Нет"
);
}
if(vehicleid >= CEM_Veh[0] || vehicleid <= CEM_Veh[1]) - Проверка на нахождение в нашем транспорте.
playerid - ID игрока которому будет показан диалог.
1 - ID диалогового окна.
DIALOG_STYLE_MSGBOX - Стиль диалогового окна.
playerid - ID игрока которому будет показан диалог.
1 - ID диалогового окна.
DIALOG_STYLE_MSGBOX - Стиль диалогового окна.
Создадим действие нашего диалога. В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
PHP:
case 1:
{
if(response)
{
switch(random(2))
{
case 0:
{
CEMMisson{playerid} = true;
Cement_Check{playerid} = 1;
SetPlayerRaceCheckpoint(playerid, 2,2463.8667,1962.6731,10.8061,0,0,0,3.0);
}
case 1:
{
CEMMisson{playerid} = true;
Cement_Check{playerid} = 3;
SetPlayerRaceCheckpoint(playerid, 2,2718.5154,853.3401,10.8984,0,0,0,3.0);
}
}
}
else
{
RemovePlayerFromVehicle(playerid);
SetVehicleToRespawn(GetPlayerVehicleID(playerid));
}
}
if(response) - Если игрок нажал кнопку "Да"
switch(random(2)) - Оператор рандомного выбора. Т.к. у нас две точки, то добавляем (2).
CEMMisson - Переменная о начале нашей "миссии". Значение = 1.
Cement_Check{playerid} - Номер следующего чекпоинта, который будет показан игроку.
SetPlayerRaceCheckpoint - Отображение чекпоинта. Подробнее об этой функции найдете здесь.
else - Если игрок нажимает "Нет".
RemovePlayerFromVehicle - Высаживаем игрока из транспорта.
SetVehicleToRespawn - Устанавливаем машину на места его спавна.
switch(random(2)) - Оператор рандомного выбора. Т.к. у нас две точки, то добавляем (2).
CEMMisson - Переменная о начале нашей "миссии". Значение = 1.
Cement_Check{playerid} - Номер следующего чекпоинта, который будет показан игроку.
SetPlayerRaceCheckpoint - Отображение чекпоинта. Подробнее об этой функции найдете здесь.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
else - Если игрок нажимает "Нет".
RemovePlayerFromVehicle - Высаживаем игрока из транспорта.
SetVehicleToRespawn - Устанавливаем машину на места его спавна.
PHP:
if(vehicleid >= CEM_Veh[0] || vehicleid <= CEM_Veh[1])
{
CEMMisson{playerid} = false;
DisablePlayerRaceCheckpoint(playerid);
RemovePlayerFromVehicle(playerid);
SetVehicleToRespawn(GetPlayerVehicleID(playerid));
Cement_Check{playerid} = 0;
}
if(vehicleid >= CEM_Veh[0] && vehicleid <= CEM_Veh[1]) - Проверка на нахождение в нашем транспорте.
CEMMisson{playerid} - Обнуляем наше задание (false).
DisablePlayerRaceCheckpoint - Удаляем наш чекпоинт.
RemovePlayerFromVehicle - Это стандартная функция, которая выбрасывает/высаживает игрока из транспорта.
SetVehicleToRespawn - Это стандартная функция, которая устанавливает машину на его место спавна.
Cement_Check{playerid} - Переменная которая отвечает за показ порядка чекпоинта. Приравниваем к 0, чтобы его убрать.
CEMMisson{playerid} - Обнуляем наше задание (false).
DisablePlayerRaceCheckpoint - Удаляем наш чекпоинт.
Почему удаляем именно DisablePlayerRaceCheckpoint а не DisablePlayerCheckpoint?
На этот вопрос вы найдете ответ чуть позже. Дело в том, что при отправлении к месту где вы будете выгружать раствор, будет отмечен DisablePlayerRaceCheckpoint, а при DisablePlayerCheckpoint наш игрок будет заморожен, в связи с этим, выйти из транспорта игрок не сможет.
На этот вопрос вы найдете ответ чуть позже. Дело в том, что при отправлении к месту где вы будете выгружать раствор, будет отмечен DisablePlayerRaceCheckpoint, а при DisablePlayerCheckpoint наш игрок будет заморожен, в связи с этим, выйти из транспорта игрок не сможет.
SetVehicleToRespawn - Это стандартная функция, которая устанавливает машину на его место спавна.
Cement_Check{playerid} - Переменная которая отвечает за показ порядка чекпоинта. Приравниваем к 0, чтобы его убрать.
Теперь нужно добавить чекпоинты. Мы используем два вида SetPlayerCheckpoint и SetPlayerRaceCheckpoint:
Для начала идем в public OnPlayerEnterRaceCheckpoint(playerid):
PHP:
if(Cement_Check{playerid} == 1)
{
Cement_Check{playerid} = 2;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2413.4463,1919.9695,6.0156, 3.0);
SendClientMessage(playerid,0x33AA33AA,!"Место выгрузки раствора отмечено на карте.");
}
else if(Cement_Check{playerid} == 3)
{
Cement_Check{playerid} = 4;
DisablePlayerRaceCheckpoint(playerid);
SetPlayerCheckpoint(playerid, 2614.2490,834.4865,5.3158, 3.0);
SendClientMessage(playerid,0x33AA33AA,!"Место выгрузки раствора отмечено на карте.");
}
if(Cement_Check{playerid} == 1 | 3) - Номер чекпоинта, на который наехал игрок.
Cement_Check{playerid} - Показываем следующий номер чекпоинта.
DisablePlayerRaceCheckpoint - Удаляем предыдущий чекпоинт.
SetPlayerCheckpoint - Показываем следующий чекпоинт. Об этой функции подробнее можно узнать здесь -
SendClientMessage - Отправляем сообщение игроку.
Cement_Check{playerid} - Показываем следующий номер чекпоинта.
DisablePlayerRaceCheckpoint - Удаляем предыдущий чекпоинт.
SetPlayerCheckpoint - Показываем следующий чекпоинт. Об этой функции подробнее можно узнать здесь -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
SendClientMessage - Отправляем сообщение игроку.
После этого, у вас появится обыкновенный чекпоинт, идем в public OnPlayerEnterCheckpoint(playerid):
PHP:
if(Cement_Check{playerid} == 2)
{
SendClientMessage(playerid,0x33AA33AA,!"Дождись окончания выгрузки(1 минута).");
SetTimerEx("Cementok", 60000, false, "i", playerid);
CEMENT_Object{playerid} = CreateObject(18672, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
AttachObjectToVehicle(CEMENT_Object{playerid}, GetPlayerVehicleID(playerid),2.6, -3.95, -0.5, -90.0, -90.0, 0.0);
TogglePlayerControllable(playerid, 0);
}
else if(Cement_Check{playerid} == 4)
{
SendClientMessage(playerid,0x33AA33AA,!"Дождись окончания выгрузки(1 минута).");
SetTimerEx("Cementok", 60000, false, "i", playerid);
CEMENT_Object{playerid} = CreateObject(18672, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
AttachObjectToVehicle(CEMENT_Object{playerid}, GetPlayerVehicleID(playerid), 2.6, -3.95, -0.5, -90.0, -90.0, 0.0);
TogglePlayerControllable(playerid, 0);
}
if(Cement_Check{playerid} == 2 | 4) - Номер чекпоинта, на который наехал игрок.
SendClientMessage - Отправляем сообщение игроку.
SetTimerEx - Запускаем таймер, для выполнения функции. Подробнее об этой функции можно узнать здесь -
CreateDynamicObject - Создаем объект с названием CEMENT_Object.
AttachDynamicObjectToVehicle - Прикрепляем объект к машине.
TogglePlayerControllable - Замораживаем камеру и действия игрока.
SendClientMessage - Отправляем сообщение игроку.
SetTimerEx - Запускаем таймер, для выполнения функции. Подробнее об этой функции можно узнать здесь -
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
CreateDynamicObject - Создаем объект с названием CEMENT_Object.
AttachDynamicObjectToVehicle - Прикрепляем объект к машине.
CEMENT_Object - Объект, который прикрепляем к транспорту.
GetPlayerVehicleID - ID транспорта, к которому прикрепляем объект.
2.6, -3.95, -0.5 - Смещение от транспорта X | Y | Z
-90.0, -90.0, 0.0 - Вращение по осям X | Y | Z
GetPlayerVehicleID - ID транспорта, к которому прикрепляем объект.
2.6, -3.95, -0.5 - Смещение от транспорта X | Y | Z
-90.0, -90.0, 0.0 - Вращение по осям X | Y | Z
Осталось дело за последним, создать действие, при срабатывании таймера. Создаем public Cementok(playerid):
PHP:
@_Cementok(playerid);
@_Cementok(playerid)
{
CEMMisson{playerid} = false;
PlayerInfo[playerid][pMoney] += 3000;
GameTextForPlayer(playerid,"+3000",5000,1);
DisablePlayerCheckpoint(playerid);
RemovePlayerFromVehicle(playerid);
DestroyObject(CEMENT_Object[playerid]);
TogglePlayerControllable(playerid, 1);
SetVehicleToRespawn(GetPlayerVehicleID(playerid));
Cement_Check{playerid} = 0;
return 0;
}
CEMMisson - Обнуляем значение нашего задания.
PlayerInfo[playerid][pMoney] - Хранение ваших денег, прибавляем +3000$ (Меняйте на свое.)
GameTextForPlayer - Показываем игроку текст в течении 5 секунд.
DisablePlayerCheckpoint - Удаляем чекпоинт.
RemovePlayerFromVehicle - Высаживаем игрока из транспорта.
DestroyObject - Удаляем объект, который мы прикрепляли к транспорту.
TogglePlayerControllable - Размораживаем камеру и действие игрока.
SetVehicleToRespawn - Устанавливаем машину на место спавна.
Cement_Check - Задаем номер чекпоинта (удаляем) = 0.
PlayerInfo[playerid][pMoney] - Хранение ваших денег, прибавляем +3000$ (Меняйте на свое.)
GameTextForPlayer - Показываем игроку текст в течении 5 секунд.
DisablePlayerCheckpoint - Удаляем чекпоинт.
RemovePlayerFromVehicle - Высаживаем игрока из транспорта.
DestroyObject - Удаляем объект, который мы прикрепляли к транспорту.
TogglePlayerControllable - Размораживаем камеру и действие игрока.
SetVehicleToRespawn - Устанавливаем машину на место спавна.
Cement_Check - Задаем номер чекпоинта (удаляем) = 0.
Ну вот вроде бы и все. Скриншоты можно посмотреть здесь -
Урок окончен, спасибо всем за внимание!
Автор урока - Алексей.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Урок окончен, спасибо всем за внимание!
Автор урока - Алексей.
Последнее редактирование:
