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

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

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

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

Мануал Аренда автомобиля

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

Kirill_Stepanov

Дебютант
Все доброго времени суток!Гуляя сегодня по форумам искав сис-ку аренды автомобилей ни чего не нашёл вот и решил выложит:bq:

В самый верх добавляем:

Код:
#define R_F                                                                  943//Ид диалога
#define R_G_V                                                                944
#define COLOR_WHITE                                                   0xFFFFFFA
#define MAX_RENT_VEH                                                          40

enum RInfo
{
    Rcarid,
    Rprice,
    ROwned
};
new RentCar[MAX_RENT_VEH][RInfo];
new IsRentableVehicle[MAX_VEHICLES];
new OwnedName[MAX_PLAYER_NAME];
new RentedTime[MAX_PLAYERS];
new PlayerUseRentCar[MAX_PLAYERS];
new RentTimer;[LIST=1]
[/LIST]
В public OnFilterScriptInit добавляем:

Код:
SetTimer("CountRentedVehicles", 1000, 0);
AddRentVehicle(ид, модель, X, Y, Z, Rot, Цвет1, Цвет2, цена аренды за 1 минуту);*[/QUOTE]

[COLOR="#FF0000"]В public OnPlayerConnect добавляем:[/COLOR]

[QUOTE]    RentedTime[playerid] = -1;
    PlayerUseRentCar[playerid] = 0;
	return 1;
}
В public OnPlayerDisconnect Добавляем:

Код:
    new count;
    for(new R=1; R<TotalVehicles(); R++)
    {
        if(IsRentableVehicle[R] == 1)
        {
             count++;
             if(RentCar[count][ROwned] == GetPlayerName(playerid, OwnedName, sizeof(OwnedName)))
             {
                 SetVehicleToRespawn(count);
                 RentCar[count][ROwned] = 0;
			 }
        }
    }
    return 1;
}
В public OnPlayerStateChange добавляем:

Код:
    new rcs[265];
	if(newstate == 2)
    {
		if(RentCar[GetPlayerVehicleID(playerid)][ROwned] == 0 && IsRentableVehicle[GetPlayerVehicleID(playerid)])
		{
			if(PlayerUseRentCar[playerid] == 1) {
			SendClientMessage(playerid,-1,"Вы уже арендовали транспортное средство в этой компании.");
            RemovePlayerFromVehicle(playerid);
            TogglePlayerControllable(playerid,1); return 1; }
            format(rcs, sizeof(rcs), "{ffffff}Здравствуйте! Этот автомобиль сдаётся в аренду!\n Порядковый номер - [{00ceff}%d{ffffff}]\n Цена аренды за 1 минуту: [{5da130}$%d{ffffff}]\n\nВведите кол-во минут,на которое хотите арендовать транспорт в окошко:",RentCar[GetPlayerVehicleID(playerid)][Rcarid],RentCar[GetPlayerVehicleID(playerid)][Rprice]);
			ShowPlayerDialog(playerid,R_F,DIALOG_STYLE_INPUT,"Аренда",rcs,"Аренда","Отмена");
		}
		if(RentCar[GetPlayerVehicleID(playerid)][ROwned] != 0 && IsRentableVehicle[GetPlayerVehicleID(playerid)])
		{
		    if(RentCar[GetPlayerVehicleID(playerid)][ROwned] == GetPlayerName(playerid, OwnedName, sizeof(OwnedName)))
		    {
                 GetPlayerName(playerid, OwnedName, sizeof(OwnedName));
                 format(rcs, sizeof(rcs), "Это транспортное средство арендовано на Вас, {ff8700}%s{ffffff}.",OwnedName);
                 SendClientMessage(playerid,-1,rcs);
                 format(rcs, sizeof(rcs), "Срок дейсвтия аренды истекает через: {ff8700}%d минут(у|ы){ffffff}.",RentedTime[playerid]);
                 SendClientMessage(playerid,-1,rcs);
			}
			if(RentCar[GetPlayerVehicleID(playerid)][ROwned] != GetPlayerName(playerid, OwnedName, sizeof(OwnedName)))
			{
                 SendClientMessage(playerid,-1,"Это транспортное средство уже арендовано другим игроком.");
                 RemovePlayerFromVehicle(playerid);
		         TogglePlayerControllable(playerid,1);
			}
	    }
	}
    return 1;
}
В OnDialogResponse добавляем:

Код:
if(dialogid == R_F)
     {
         if(response)
         {
	         new carprice = RentCar[GetPlayerVehicleID(playerid)][Rprice] * strval(inputtext),string[120];
	         if(GetPlayerMoney(playerid) < carprice)
	         {
                 RemovePlayerFromVehicle(playerid);
                 TogglePlayerControllable(playerid,1);
                 SendClientMessage(playerid,COLOR_WHITE,"У вас недостаточно средств для аренды транспорта.");
                 return 1;
	         }
	         RentedTime[playerid] = strval(inputtext);
             format(string, sizeof(string), "Вы арендовали это транспортное средство на {ff8700}%d минут(ы|у){ffffff} за {5da130}$%d{ffffff}.", RentedTime[playerid],carprice);
             SendClientMessage(playerid,COLOR_WHITE,string);
			 RentTimer = SetTimerEx("CheckRentedTime",60000,1,"i",playerid);
             TogglePlayerControllable(playerid,1);
             GivePlayerMoney(playerid,-carprice);
             PlayerUseRentCar[playerid] = 1;
		     RentCar[GetPlayerVehicleID(playerid)][ROwned] = GetPlayerName(playerid, OwnedName, sizeof(OwnedName));
		     SetVehicleNumberPlate(GetPlayerVehicleID(playerid),"RENTED");
        }
            else
        {
            RemovePlayerFromVehicle(playerid);
		    TogglePlayerControllable(playerid,1);
		    RentedTime[playerid] = -1;
		    PlayerUseRentCar[playerid] = 0;
		    KillTimer(RentTimer);
        }
   }
    if(dialogid == R_G_V)
    {
       if(response)
       {
           new count;
           for(new R=1; R<TotalVehicles(); R++)
           {
              if(IsRentableVehicle[R] == 1)
              {
			      count++; new rcs[225];
                  format(rcs, sizeof(rcs), "{ffffff}Здравствуйте! Этот автомобиль сдаётся в аренду!\n Порядковый номер - [ {00ceff}%d{ffffff} ]\n Цена аренды за 1 минуту: [{5da130}$%d{ffffff}]\n\nВведите кол-во минут,на которое хотите арендовать транспорт в окошко:",RentCar[GetPlayerVehicleID(playerid)][Rcarid],RentCar[GetPlayerVehicleID(playerid)][Rprice]);
			      ShowPlayerDialog(playerid,R_F,DIALOG_STYLE_INPUT,"Аренда",rcs,"Аренда","Отмена");
			  }
		  }
	   }
	   else
	   {
	       RentCar[GetPlayerVehicleID(playerid)][ROwned] = 0;
		   RemovePlayerFromVehicle(playerid);
		   TogglePlayerControllable(playerid,1);
		   RentedTime[playerid] = -1;
		   PlayerUseRentCar[playerid] = 0;
		   KillTimer(RentTimer);
	   }
   }
    return 1;
}
В самый низ:

Код:
stock AddRentVehicle(id ,model, Float:X, Float:Y, Float:Z, Float:Angle, color1, color2, price)
{
    new newvid;
    newvid = AddStaticVehicle(model, X, Y, Z, Angle, color1, color2);
    RentCar[newvid][Rprice] = price;
    RentCar[newvid][Rcarid] = id;
    RentCar[newvid][ROwned] = 0;
    IsRentableVehicle[newvid] = 1;
    SetVehicleNumberPlate(newvid,"RENT");
}

TotalVehicles()
{
	new vid;
	vid = CreateVehicle(411, 0, 0, 0, 0, -1, -1, 10);
	DestroyVehicle(vid);
	vid--;
	return vid;
}
forward CountRentedVehicles();
В public CountRentedVehicles добавляем:

Код:
new count;
	for(new R=1; R<TotalVehicles(); R++)
	{
	    if(IsRentableVehicle[R] == 1)
	    {
	        count++;
		}
	}
}
forward CheckRentedTime(playerid);
В public CheckRentedTime добавляем:

Код:
      if(RentedTime[playerid] == -1)
      {
	       //none
	  }
	  if(RentedTime[playerid] > 0)
      {
		   RentedTime[playerid]--;
	  }
	  if(RentedTime[playerid] == 0 && !IsPlayerInVehicle(playerid, IsRentableVehicle[GetPlayerVehicleID(playerid)]))
	  {
          new count;
          for(new R=1; R<TotalVehicles(); R++)
          {
              if(IsRentableVehicle[R] == 1)
              {
			      count++;
                  if(RentCar[count][ROwned] == GetPlayerName(playerid, OwnedName, sizeof(OwnedName)))
                  {
                       SendClientMessage(playerid,-1,"Срок аренды вашего ТС истек. Транспорт был возвращен на место.");
                       PlayerUseRentCar[playerid] = 0;
                       SetVehicleToRespawn(count);
                       RentCar[count][ROwned] = 0;
                       KillTimer(RentTimer);
				  }
	          }
          }
	  }
	  else if(RentedTime[playerid] == 0 && IsPlayerInVehicle(playerid, IsRentableVehicle[GetPlayerVehicleID(playerid)]))
	  {
          ShowPlayerDialog(playerid,R_G_V,DIALOG_STYLE_MSGBOX,"{ff8800}В{ffffff}нимание!","{ff8800}С{ffffff}рок действия аренды транспортного средства истек.\nВы можете повторно арендовать транспорт,или завершить контракт на аренду.\n{ff8800}Что Вы хотите сделать?","Аренда","Завершить");
      }
}
Автор: Spirit
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу