Доступ к архиву

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

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

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

Как исправить баг с бензином в моде rls

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

Advokat48

Умник
Всем доброго времени суток, похожих тем не видел. Итак, приступим.
1. Исправляем баг с бензином. т.е. когда счетчик бензина доходит до 0, машина глушится, и завести нельзя, при этом вы остаетесь сидеть в машине, вас не выкидывает. Для дальнейшего движения надо заправляться.
Сначала находим команду /en, и заменяем ее на

PHP:
else if (strcmp("/en", cmdtext, true) == 0)
    {
    new caridi = GetPlayerVehicleID(playerid);
         if(zavodis[playerid] == 0)
         {
         if (Fuell[caridi] <= 0) return SendClientMessage(playerid, COLOR_REDD, "Вызовите механика или заправьтесь с канистры!");
         if(GetPlayerVehicleID(playerid) != INVALID_VEHICLE_ID)
         {
         if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
         {
         GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
         SetVehicleParamsEx(GetPlayerVehicleID(playerid) ,VEHICLE_PARAMS_ON,VEHICLE_PARAMS_ON,alarm,doors,bonnet,boot,objective);
         zavodis[playerid] = 1;
         }
       }
    }
    else if(zavodis[playerid] == 1)
    {
		 if(GetPlayerVehicleID(playerid) != INVALID_VEHICLE_ID)
         {
         if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
         {
         GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
         SetVehicleParamsEx(GetPlayerVehicleID(playerid),VEHICLE_PARAMS_OFF,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
         zavodis[playerid] = 0;
         }
       }
    }
    return 1;
}
Теперь ищем вот это:
PHP:
 if(newstate == PLAYER_STATE_DRIVER)
    {
    if(Fuell[caridi] <= 0){ RemovePlayerFromVehicleRich(playerid);
		SendClientMessage(playerid, COLOR_REDD, "::: В автомобиле нет бензина ::: ");
		SendClientMessage(playerid, COLOR_GREEN, "{62AD50}Используйте телефон {FFFFFF}(( /call )) {62AD50}вызвать механика / таксиста");
		PlayerInfo[playerid][pFuelcar] = 0;
		}
    		if(GetVehicleModel(caridi) != 481 || GetVehicleModel(caridi) != 509 || GetVehicleModel(caridi) != 510)
            {
             if(zavodis[playerid] == 0)
			 {
                 SendClientMessage(playerid,COLOR_GREEN,"{26931c}Чтобы завести двигатель нажмите на клавишу {ffffff}'2'{26931c} или введите {ffffff}'/en'");
			 }
            }
        }
И заменяем на:
PHP:
if(newstate == PLAYER_STATE_DRIVER)
    {
    if(Fuell[caridi] <= 0){ SendClientMessage(playerid, COLOR_RED, "::: В автомобиле нет бензина ::: ");
		SendClientMessage(playerid, COLOR_GREEN, "{62AD50}Используйте телефон {FFFFFF}(( /call )) {62AD50}вызвать механика / таксиста");
		PlayerInfo[playerid][pFuelcar] = 0;
  }
    		if(GetVehicleModel(caridi) != 481 || GetVehicleModel(caridi) != 509 || GetVehicleModel(caridi) != 510)
            {
             if(zavodis[playerid] == 0)
			 {
                 SendClientMessage(playerid,COLOR_GREEN,"{26931c}Чтобы завести двигатель нажмите на клавишу {ffffff}'2'{26931c} или введите {ffffff}'/en'");
			 }
            }
             
  }
Ищем паблик(public OnPlayerUpdate(playerid)), и добавляем туда:
PHP:
if(Fuell[caridi] == 0)
		{
		SetVehicleParamsEx(GetPlayerVehicleID(playerid) ,VEHICLE_PARAMS_OFF,VEHICLE_PARAMS_OFF,alarm,doors,bonnet,boot,objective);
  		zavodis[playerid] = 0;
		return true;
		}
И в этом же паблике добавляем:
PHP:
new caridi = GetPlayerVehicleID(playerid);
2. Как исправить баг с заправками. Т.е. можно было на рабочей/нерабочей заправке брать бесконечное количество канистр.
Ищем команду /get, и заменяем ее на:
PHP:
if(strcmp(cmd,"/get",true)==0)
    {
   	for(new b = 0; b < sizeof(SBizzInfo); b++)
	{
	if(SBizzInfo[b][sbProducts] <=0)
				{
				SendClientMessage(playerid,COLOR_GRAD1,"Заправка не работает!");
				SBizzInfo[b][sbProducts] = 0;
				return 1;
				}
				}
        if(IsPlayerConnected(playerid))
	    {
			new x_job[256];
			x_job = strtok(cmdtext, idx);
			if(!strlen(x_job)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /get fuel");
			else if(strcmp(x_job,"fuel",true) == 0)
			{
 				for(new b = 0; b < sizeof(SBizzInfo); b++)
				{
					if(PlayerToPoint(10.0, playerid, SBizzInfo[b][sbEntranceX], SBizzInfo[b][sbEntranceY], SBizzInfo[b][sbEntranceZ]))
					{
					if(PlayerInfo[playerid][pCash] < SBizzInfo[b][sbPriceProd]) return	SendClientMessage(playerid, COLOR_GRAD1, "У вас не достаточно денег!");
    				SBizzInfo[b][sbTill] += SBizzInfo[b][sbPriceProd]/2;
					PlayerInfo[playerid][pCash] -=SBizzInfo[b][sbPriceProd]/2;
					SBizzInfo[b][sbProducts] -= 50;
				    format(string, sizeof(string), "Вы купили 20% литров бензина канистры за %d вирт",SBizzInfo[b][sbPriceProd]/2);
				    SendClientMessage(playerid, 0x6495EDFF, string);
				    PlayerInfo[playerid][pFuel] = 1;
		 	        PlayerInfo[playerid][pCash] -=SBizzInfo[b][sbPriceProd]/2;
					return 1;
					}
				else
				{
					SendClientMessage(playerid,COLOR_GREY,"Вы не на заправке!");
					return 1;
				}
				}
			}
			else { return 1; }
		}//not connected
		return 1;
	}
Далее находим команду /fillcar. Для чего спросите вы. В стандартной не стоит проверки на количество бензина в баке, поэтому можно было заправляться пока руки не устанут набирать команды.
Вот она в оригинале:
PHP:
else if(strcmp(cmd, "/fillcar", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
		    if(PlayerInfo[playerid][pFuel] != 1) return     SendClientMessage(playerid, COLOR_GREY, "У Вас нет канистры!");
     		if(!IsPlayerInAnyVehicle(playerid)) return        SendClientMessage(playerid,COLOR_GREY,"Вы не в машине");
	    			new vehicleid = GetPlayerVehicleID(playerid);
			        SendClientMessage(playerid, 0x6495EDFF, "Вы заправили Ваш автомобиль 20 литрами бензина");
					Fuell[vehicleid] += 20;
			        PlayerInfo[playerid][pFuel] = 0;
			        PlayerInfo[playerid][pFuelcar] += 20;
				}
		return 1;
	}
И меняем ее на:
PHP:
else if(strcmp(cmd, "/fillcar", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
            new vehicleid = GetPlayerVehicleID(playerid);
			if(PlayerInfo[playerid][pFuel] != 1) return     SendClientMessage(playerid, COLOR_GREY, "У Вас нет канистры!");
     		if(!IsPlayerInAnyVehicle(playerid)) return        SendClientMessage(playerid,COLOR_GREY,"Вы не в машине");
			if(Fuell[vehicleid] >= 100) return SendClientMessage(playerid, COLOR_GREY, "Ваш бак полон!");//если бенза в баке больше либо равно 100, посылаем злобного багоюзера далего
   			        SendClientMessage(playerid, 0x6495EDFF, "Вы заправили Ваш автомобиль 20 литрами бензина");
     				Fuell[vehicleid] += 20;
			        PlayerInfo[playerid][pFuel] = 0;
			        PlayerInfo[playerid][pFuelcar] += 20;
				}
		return 1;
	}
3. Как сделать так, что бы при заведенном двигателе тратился бензин, и во время движения с заглушенным двигателем бензин не тратился.
Находим
PHP:
public UpdateSpeedometr(playerid)
Ищем там:
PHP:
if(SpeedVehicle(playerid) !=0)
	    {
	    Fuell[vehicleid] -= 0.003;
	    if(GetPlayerVehicleID(playerid) == caridhouse[playerid])
	    {
	    PlayerInfo[playerid][pFuelcar] -= 0.003;
	    }
	    }
	    new carid = GetPlayerVehicleID(playerid);
		if(SuperGt(carid))
		{
		if(SpeedVehicle(playerid) !=0)
	    {
	    Fuell[vehicleid] -= 0.005;
	    if(GetPlayerVehicleID(playerid) == caridhouse[playerid])
	    {
	    PlayerInfo[playerid][pFuelcar] -=0.005;
	    }
	    }
		}
И заменяем на:
PHP:
new carid = GetPlayerVehicleID(playerid);
GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
  		if(zavodis[playerid] == 1 && SpeedVehicle(playerid) !=0)
	    {
	    Fuell[vehicleid] -= 0.02;
	    if(GetPlayerVehicleID(playerid) == caridhouse[playerid])
	    {
	    PlayerInfo[playerid][pFuelcar] -= 0.02;
	    }
	    }
	    if(zavodis[playerid] == 1)
	    {
	    Fuell[vehicleid] -= 0.02;
	    if(GetPlayerVehicleID(playerid) == caridhouse[playerid])
	    {
	    PlayerInfo[playerid][pFuelcar] -= 0.02;
	    }
	    }
		if(SuperGt(carid))
		{
		if(SpeedVehicle(playerid) !=0)
	    {
	    Fuell[vehicleid] -= 0.02;
	    if(GetPlayerVehicleID(playerid) == caridhouse[playerid])
	    {
	    PlayerInfo[playerid][pFuelcar] -= 0.02;
	    }
	    }
		}
Числа 0.02 можете заменить на свои. Это количество бензина, которое будет тратиться за 1 единицу времени, в моем случае 1 секунда.
4. Как сделать так, что бы каждый час снималась 1 звезда.
Идем в
PHP:
public PayDay()
В паблике ищем строки:
PHP:
for(new i = 0; i < MAX_PLAYERS; i++)
					{
					new house = PlayerInfo[i][pPhousekey];
					if(IsPlayerConnected(i))
					{
				    if(PlayerInfo[i][pLevel] > 0)
				    {
					new playername2[MAX_PLAYER_NAME];
					GetPlayerName(i, playername2, sizeof(playername2));
				    new exp = PlayerInfo[i][pExp];
                    new nxtlevel = PlayerInfo[i][pLevel]+1;
                    new expamount = nxtlevel*levelexp;
					if(exp == expamount)
	                {
	                    PlayerInfo[i][pLevel] += 1;
	                    PlayerInfo[i][pExp] = 0;
	                }
     					if(armmatbi < 0)
	                {
	                armmatbi = 0;
	                }
					else if(armmatsf < 0)
					{
					armmatsf = 0;
					}
И прямо после них вставляем:
PHP:
if(PlayerInfo[i][pZvezdi] >= 1)
					{
					WantedLevel[i] -= 1;
					PlayerInfo[i][pZvezdi] -=1;
					}
Вот и все.
P.S. это не проверял, но по идее должно работать.

5. Небольшая команда.
Итак все когда-либо играли на самп рп, и вот, там есть такая команда, для удаления себя из списка розыска. Вот написал данную команду. У меня 30 процентов, что команда сработает и ваш уровень розыска очистится, и 70 процентов, что вас засекут и припишут вам максимальный уровень розыска.
Начнем. Для начала ко всем new добавляем:
PHP:
new wtimer[MAX_PLAYERS]; //объявляем наш будущий таймер
Далее ищем:
PHP:
public SetPlayerUnjail()
И вставляем туда:
PHP:
for(new i = 0; i < MAX_PLAYERS; i++) //функция таймера
	{
 	if(wtimer[i] >0) wtimer[i] --;     //функция таймера
 	}
Теперь в
PHP:
public OnPlayerCommandText
Вставляем команду:
PHP:
if(strcmp(cmd,"/wclear",true) == 0)
	{
	if(wtimer[playerid]>0) return SendClientMessage(playerid, COLOR_GREY,"Повторное использование команды возможно только через час!"); // проверка на то, что таймер не запущен
	if(!ISAMAFIA(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вам недоступна эта команда!");
	if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 596 && GetVehicleModel(GetPlayerVehicleID(playerid)) != 427 && GetVehicleModel(GetPlayerVehicleID(playerid)) != 599) return SendClientMessage(playerid, COLOR_GREY, "Вы не в полицейской машине!");
 	new clearzvezd=random(101);
  	for(new i = 0; i < MAX_PLAYERS; i++)
 	{
	if(clearzvezd <= 30)
	{
	if(WantedLevel[i] >= 1 && WantedLevel[i] <= 6)
	{
 	WantedLevel[i] = 0;
 	PlayerInfo[i][pZvezdi] = 0;
 	SendClientMessage(playerid, COLOR_GREEN, "Вы удалили себя из списка розыскиваемых");
	}
	}
	else
	{
	WantedLevel[i] = 6;
	PlayerInfo[i][pZvezdi] = 6;
	SendClientMessage(playerid, COLOR_REDD, "Вас засекли, вам присвоен максимальный уровень розыска!");
	}
	wtimer[playerid] = 3600; // после выполнения команды ставим значение таймера на 3600 секунд, т.е. 1 час.
	return 1;
 	}
	return 0;
	}
Вот и все, команда проверена. Можете поставить значение таймера на 5 секунд, и протестировать. Команда еще сырая(буду доделывать), но вполне уже готова к использованию.
Вот и все.
Все протестировано и работает.
Автор: Ryuu_Azuma(advokat48), т.е. Я.
Не отказываюсь от +

В случае ошибок пишите в эту тему, чем смогу, помогу. Сам только второй месяц в павно работаю.
P.S. Все 5 пунктов подойдут только для мода rls, для других модов, каждый пункт надо переделывать.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу