Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Мой Ограничитель скорости!

Статус
В этой теме нельзя размещать новые ответы.

Dezmont_Mailz

Умник
Всем здрасте вот решил дать всем свой ограничитель скорости оч.хороший 1) убран баг со сбрасыванием 2) убран баг когда при большой скорости включаешь огран машина взлетает 3) Скорость ровная не больше не меньше почти не считая что может превышать 1-2 км/ч что не чего не меняет!

для начала мы идём в pInfo и добавим туда

PHP:
pCarSkill
потом в паблик регистрации OnPlayerRegister(playerid, password[]) и в паблик сохранения аккаунта OnPlayerUpdate_RA(playerid)
Вот это

PHP:
iniSetInt(File,"Ogran",PlayerInfo[playerid][pCarSkill]);
Идём в паблик OnPlayerLogin(playerid,password[]) и добовляем

PHP:
iniGetInt(File,"Ogran",PlayerInfo[playerid][pCarSkill]);
дальше находим if(newstate == PLAYER_STATE_DRIVER) и добовляем туда

PHP:
SetPVarInt(playerid,"Arrester", PlayerInfo[playerid][pCarSkill]);
if(PlayerInfo[playerid][pCarSkill] == 0) SetPVarInt(playerid,"Arrester", 1);
дальше ищем паблик OnVehicleDamageStatusUpdate(vehicleid, playerid) и добовляем туда

в начало
PHP:
SetPVarInt(playerid,"vrezalsya",GetPVarInt(playerid,"vrezalsya") + 1);
в конец
PHP:
if(vehicleid && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
		{
			if(GetPVarInt(playerid,"vrezalsya") >= 6)
			{
			    if(!IsAPlane(vehicleid) && !IsABoat(vehicleid) && !IsANoSpeed(vehicleid))
			    {
					if(PlayerInfo[playerid][pCarSkill] < 4)
					{
						PlayerInfo[playerid][pCarSkill] += 1;
                        DeletePVar(playerid,"vrezalsya");
                        SetPVarInt(playerid,"Arrester", PlayerInfo[i][pCarSkill]);
						SendClientMessage(playerid,COLOR_RED,"Ваш навык вождения понижен! Соблюдайте /pdd для его повышения!");
					}
				}
			}
		}

Дальше идём в 5-ти минутный таймер не секундный не минутный а таймер который обновляется каждые 5 мин. и добовляем

PHP:
if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER)//
		{
		    if(!IsAPlane(carid) && !IsABoat(carid) && !IsANoSpeed(carid))
		    {
			    if(GetPlayerVehicleID(i))
				{
			        if(PlayerInfo[i][pCarSkill] >= 1)
				    {
		            	SendClientMessage(i, COLOR_GREEN, "Навык вашего вождения повышен вы можете ехать быстрее");
						PlayerInfo[i][pCarSkill] -=1;
						SetPVarInt(i,"Arrester", PlayerInfo[i][pCarSkill]);
						DeletePVar(i,"vrezalsya");
						if(PlayerInfo[i][pCarSkill] == 0) SetPVarInt(i,"Arrester", 1),SendClientMessage(i, COLOR_GREEN, "Нажмите CTRL для отключения ограничителя");
					}
				}
			}
		}
Теперь мы добовляем в конец два паблика

PHP:
stock GetVehicleSpeed(vehicleid)
{
    new Float:ST[3];
    GetVehicleVelocity(vehicleid, ST[0], ST[1], ST[2]);
    return floatround(floatsqroot(ST[0]*ST[0] + ST[1]*ST[1] + ST[2]*ST[2])*100.3);
}
stock setVehicleSpeed(vehicleid, speed_mph)
{
	if (speed_mph < 1) speed_mph = 1;
	new Float: v[3], cur_speed_mph;
	GetVehicleVelocity(vehicleid, v[0], v[1], v[2]);
	cur_speed_mph = floatround(100.3 *floatsqroot(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]),floatround_floor);
	if (cur_speed_mph <= 0)
	{
		new Float: zAngle;
		GetVehicleZAngle(vehicleid, zAngle);
		new Float:newVelX = floatcos((zAngle -= 270.0), degrees) *speed_mph / 100.3;
		SetVehicleVelocity(vehicleid, newVelX, floattan(zAngle,degrees) *newVelX, 0.0);
		return;
  	}
  	new Float: vMultiplier = float(speed_mph) / float(cur_speed_mph);
  	SetVehicleVelocity(vehicleid, v[0] *vMultiplier, v[1] *vMultiplier, v[2] *vMultiplier);
}

Ну и под конец находим колбек OnPlayerUpdate(playerid) если нету то создаём и добовляем туда
не забываем про переменую new car = GetPlayerVehicleID(playerid); в начало колбека
PHP:
if(!IsAPlane(car) && !IsABoat(car) && !IsANoSpeed(car))
	{
	    switch(GetPVarInt(playerid,"Arrester"))
	    {
			case 1:
			{
			    if(GetVehicleSpeed(car) > 50) setVehicleSpeed(car, 49);
		    }
			case 2:
			{
			 	if(GetVehicleSpeed(car) > 45) setVehicleSpeed(car, 44);
			}
			case 3:
			{
				if(GetVehicleSpeed(car) > 40) setVehicleSpeed(car, 39);
			}
			case 4:
			{
				if(GetVehicleSpeed(car) > 35) setVehicleSpeed(car, 34);
			}
		}
	}
Для тех кто не знает что вот это такое
PHP:
if(!IsAPlane(car) && !IsABoat(car) && !IsANoSpeed(car))
То просто добавьте в конец 3 паблика

PHP:
stock IsABoat(carid)
{
	switch(GetVehicleModel(carid))
	{
		case 472,473,493,595,484,430,452..454,446: return true;
	}
	return false;
}
stock IsAPlane(carid)
{
	switch(GetVehicleModel(carid))
	{
		case 592,577,511,512,593,520,553,476,519,460,513,548,417,487,488,497,563,447,469: return true;
	}
	return false;
}
stock IsANoSpeed(carid)
{
	switch(GetVehicleModel(carid))
	{
		case 441,448,449,450,462,464,465,481,501,509,510,537,538,564,569,570,590,591,594,606,607,608,610,611: return true;
	}
	return false;
}

И ещё в колбек OnPlayerConnect(playerid) добовляем

PHP:
PlayerInfo[playerid][pCarSkill] = 0;
В колбек OnPlayerCommandText(playerid, cmdtext[])

PHP:
if(strcmp(cmd,"/slimit",true) == 0)
	{
		if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && !IsAPlane(carid) && !IsABoat(carid) && !IsANoSpeed(carid))
		{
		    if(PlayerInfo[playerid][pCarSkill] >= 1) return SendClientMessage(playerid, COLOR_GREY, "У вас низкий навык вождения соблюдайте /pdd для его повышения");
	        if(GetPVarInt(playerid,"Arrester") == 0) SetPVarInt(playerid,"Arrester", 1);
			else DeletePVar(playerid,"Arrester");
	        return true;
	    }
	    else return SendClientMessage(playerid, COLOR_GREY, "Надо быть за рулём");
	}
В колбек OnPlayerKeyStateChange(playerid, newkeys, oldkeys) для того что бы работало на CTRL

PHP:
if(newkeys == KEY_ACTION && IsPlayerInAnyVehicle(playerid)) OnPlayerCommandText(playerid, "/slimit");
На этом всё вырезаем вставляем тестируем и остовляем отзовы об ограничителе!

Скрины для хорошо понимающих!





 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу