- Регистрация
- 4 Апр 2013
- Сообщения
- 4,354
- Лучшие ответы
- 0
- Репутация
- 821
Вчера затронули тему бензина Т/С, где проскочила фраза, что на просторах портала таковой нет, и меня это даже слегка удивило.
Поскольку это было в теме вопросов по программированию, где человек искал подобную, я решил описать все в деталях и показать, что сложного в этом ничего нет.
Так же, так сказать, в качестве дополнения, вплетём сюда систему запуска двигателя, потому что с этими вопросами я тоже неоднократно сталкивался.
Система будет для new.pwn, поэтому встанет в любой мод. Я сейчас буду составлять эту систему прямо из головы, так что могу что-нибудь упустить, вы тогда меня поправьте, ладно?
Поскольку это было в теме вопросов по программированию, где человек искал подобную, я решил описать все в деталях и показать, что сложного в этом ничего нет.
Так же, так сказать, в качестве дополнения, вплетём сюда систему запуска двигателя, потому что с этими вопросами я тоже неоднократно сталкивался.
Система будет для new.pwn, поэтому встанет в любой мод. Я сейчас буду составлять эту систему прямо из головы, так что могу что-нибудь упустить, вы тогда меня поправьте, ладно?
Итак, начнём с главного. Первым делом нам нужно обозначить данные.
Ко всем new добавляем переменную, для хранения ID таймера, который будет отсчитывать количество бензина:
PHP:
new FuelUpdateTimer;
PHP:
FuelUpdateTimer = SetTimer("FuelUpdate", 120000, false); // Скажем, каждые 2 минуты
в OnGameModeExit
PHP:
KillTimer(FuelUpdateTimer);
HTML:
vFuel,
PHP:
enum vInfo
{
vID,
vModel,
Float:vCar_x,
Float:vCar_y,
Float:vCar_z,
Float:vCar_a,
vColor1,
vColor2,
vWorld,
vInt,
vOwned,
vLock,
vFuel // Это наш бензин. Не забываем, что после последнего перечислителя запятая не ставится
};
new VehicleInfo[MAX_VEHICLES][vInfo];
PHP:
else if(strcmp(cmd, "/engine", true) == 0)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1; // Заблокируем вкл/выкл двигателя игроку, не сидящему за рулём
new veh = GetPlayerVehicleID(playerid);
if(IsAVelo(veh)) return 1; // Сделаем проверку на велосипед (если понадобится, выложу потом проверку)
if(!VehicleInfo[veh][vFuel]) return SendClientMessage(playerid, COLOR_GREY, "Бензобак пуст.");
new engine, lights, alarm, doors, bonnet, boot, objective; // Обозначим параметры транспорта (если не обозначены)
GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
if(!engine) SetTimerEx("EngineStart", 3000, false, "ii", playerid, veh); // Поставим таймер на запуск двигателя на 3 секунды
else SetVehicleParamsEx(carid, VEHICLE_PARAMS_OFF, lights, alarm, doors, bonnet, boot, objective), SendClientMessage(playerid, -1, "Вы заглушили мотор"); // Или если двигатель уже запущен, выключаем его
return 1;
}
PHP:
forward EngineStart(playerid, carid);
public EngineStart(playerid, carid)
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 1; // Сделаем откат таймера, если игрок уже вышел из машины
GetVehicleParamsEx(carid, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(carid, VEHICLE_PARAMS_ON, lights, alarm, doors, bonnet, boot, objective);
SendClientMessage(playerid, -1, "Двигатель завёлся");
return 1;
}
Для этого мы создавали выше таймер FuelUpdate. Сейчас идём к EngineStart и ставим после него функцию таймера:
PHP:
forward FuelUpdate();
public FuelUpdate()
{
new engine, lights, alarm, doors, bonnet, boot, objective;
for(new car = 1; car < GetVehiclePoolSize(); car++) // Для версий SA:MP ниже 0.3.7 используйте MAX_VEHICLES
{
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
if(!engine) continue;
if(VehicleInfo[car][vFuel]) --VehicleInfo[car][aFuel]; // Отнимаем литр бензина, если он есть
else SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective); // В противном случае - глушим двигатель
}
return 1;
}
при вводе команды игрок начинает заводить двигатель, и через три секунды он запускается, если в баке имеется хотя бы литр топлива. Каждые две минуты у всех машин с запущенным двигателем отнимается по литру, и когда бензин станет "нулём", у игрока ещё останется две минуты на то, что бы доехать до бензозаправки, что бы подлить бензинчику (если он, конечно, не заглушит двигатель).
Опять же, повторюсь, что это только урок (мануал) по системе зажигания и бензину, как его использовать, в какое русло пустить - дело ваше, я нарисовал вам скелет. Пользуйтесь на здоровье
Последнее редактирование: