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

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

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

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

Новый авторынок

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

PaHaNjkee

Специалист
Итак, я услышал, что кому-то нужна не багнутая система машин xD. Вот решил написать. Вот впрочем краткое описание, писал около 2-х дней:
Код:
1) Система номеров - как покупаешь машину дается номер.
2) Пробег авто - при продаже учитывается пробег авто, и тем самым снижается цена
3) Авто можно продать государству или игроку (/sellmycar)
4) Состояние авто - при продаже тоже учитывается + чем меньше состояние, тем
больше требуется бензина
5) Посторонний человек в авто не сядет, только владелец
6) Если машина взорвалась, она остается там где взорвал
7) Система тюннинга - тюннинг сохраняется, при продаже машины, тюннинг исчезает
8) Команды: /sellmycar или /sellmycar id сумма(продать авто),
/carpass или /carpass id(документы на транспорт), /park(вернуть авто на место парковки),
/fixcar(возвратить авто к бизнессу FixCar), /editmodelcar(изменить модель авто),
/editlevelcar(изменить лвл машины), /editpricecar(изменить цену авто),
/asellcar(продать авто админам)
По просьбе пользователя Lombada выкладываю.

Итак сначало создадим переменную в аккаунте игрока. Для этого в конец pInfo ставим:
PHP:
pNomerCar,
В public OnPlayerConnect:
PHP:
ClearCarInfo(playerid);
Теперь сделаем чтобы когда другой пользователь регистрировался, номер у него был "None". Для этого делаем stock:
PHP:
stock ClearCarInfo(playerid)
{
	if(IsPlayerConnected(playerid))
	{
	    new string[MAX_PLAYER_NAME];
		format(string, sizeof(string), "None");
		strmid(PlayerInfo[playerid][pNomerCar], string, 0, strlen(string), 255);
	}
	return 1;
}
Теперь сохранение и загрузка номера игрока. Для этого в public OnPlayerRegister:
PHP:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile, var);
В public OnPlayerRename:
PHP:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile, var);
Потом в public SavePlayer:
PHP:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile, var);
Ну и в public OnPlayerLogin добавляем это:
PHP:
if( strcmp( key , "NomerCar" , true ) == 0 ) { val = ini_GetValue( Data ); strmid(PlayerInfo[playerid][pNomerCar], val, 0, strlen(val)-1, 255); }
Так, теперь сам авторынок. Вообщем перед или после pInfo, вообщем все равно, добавляем это:
PHP:
#define MAX_BUYABLE_CARS 1 // максимально машин на сервере
#define SELLCARDIALOG 9541
#define CHECKPOINT_CAR 11
new prodmoney[MAX_PLAYERS];
new prodcarid[MAX_PLAYERS];
new prodcar[MAX_PLAYERS];
new prodcarinfo[MAX_PLAYERS];
new prodcarmoney[MAX_PLAYERS];
#define MAX_COMPONENTS 16 // максимально компонентов тюннинга
enum vInfo
{
	vOwned,
	vOwner[MAX_PLAYER_NAME],
	vModel,
	Float:vPos[4],
	vColor[2],
	vPrice,
	vLevel,
	vNomer[40],
	Float:vProbeg,
	vPercent,
	vDate,
	Components[MAX_COMPONENTS],
};
new CarsInfo[MAX_BUYABLE_CARS][vInfo];
new BuyableCar[MAX_BUYABLE_CARS];
forward CreateVehicles();
forward SaveVehicleData(vehicleid,playerid);

stock IsOwnableCar(carid)
{
if(carid <= MAX_BUYABLE_CARS) {return 1;}
else {return 0;}
}
Теперь сделаем создание авто, загрузку, сохранение, ну и сохранение позиции авто. Делаем Stock'и:
PHP:
stock LoadBuyableCars()
{
	new arrCoords[31][64];
	new strFromFile2[256];
	new File: file = fopen("cars.cfg", io_read);
	new idx;
	if (file)
	{
		while (idx < sizeof(CarsInfo))
		{
			fread(file, strFromFile2);
			split(strFromFile2, arrCoords, ',');
			CarsInfo[idx][vOwned] = strval(arrCoords[0]);
			strmid(CarsInfo[idx][vOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
			CarsInfo[idx][vModel] = strval(arrCoords[2]);
			CarsInfo[idx][vPos][0] = floatstr(arrCoords[3]);
			CarsInfo[idx][vPos][1] = floatstr(arrCoords[4]);
			CarsInfo[idx][vPos][2] = floatstr(arrCoords[5]);
			CarsInfo[idx][vPos][3] = floatstr(arrCoords[6]);
			CarsInfo[idx][vColor][0] = strval(arrCoords[7]);
			CarsInfo[idx][vColor][1] = strval(arrCoords[8]);
			CarsInfo[idx][vPrice] = strval(arrCoords[9]);
			CarsInfo[idx][vLevel] = strval(arrCoords[10]);
			strmid(CarsInfo[idx][vNomer], arrCoords[11], 0, strlen(arrCoords[11]), 255);
			CarsInfo[idx][vProbeg] = floatstr(arrCoords[12]);
			CarsInfo[idx][vPercent] = strval(arrCoords[13]);
			CarsInfo[idx][vDate] = strval(arrCoords[14]);
		    CarsInfo[idx][Components][0] = strval(arrCoords[15]);
		    for(new i = 1; i < 14; i++)
		    {
			CarsInfo[idx][Components][i] = strval(arrCoords[16+i]);
		    }

			idx++;
		}
		fclose(file);
	}
	print("Система машин успешно загружена!");
	printf("Загружено машин: %d",idx);
	return 1;
}

stock CreateVehicles()
{
	for(new c = 0; c < sizeof(CarsInfo); c++)
	{
        new stringi[24];
        BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], CarsInfo[c][vPos][0], CarsInfo[c][vPos][1], CarsInfo[c][vPos][2], CarsInfo[c][vPos][3], CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
		if(CarsInfo[c][vOwned] == 0)
		{
		format(stringi,sizeof(stringi),"       ");
		}
		else
		{
		format(stringi,sizeof(stringi),"%s",CarsInfo[c][vNomer]);
		}
		ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
		ChangeVehicleColor(BuyableCar[c], CarsInfo[c][vColor][0],CarsInfo[c][vColor][1]);
 	    for(new i = 1; i < 14; i++)
        {
        AddVehicleComponent(BuyableCar[c], CarsInfo[c][Components][i]);
        }
		SetVehicleNumberPlate(BuyableCar[c],stringi);
	}
	return 1;
}

stock SaveVehicleData(vehicleid,playerid)
{
new Float:x,Float:y,Float:z,Float:a;
if(!IsPlayerInAnyVehicle(playerid)) return 1;
if(!IsOwnableCar(vehicleid)) return 1;
GetVehiclePos(vehicleid,x,y,z);
GetVehicleZAngle(vehicleid,a);
CarsInfo[vehicleid-1][vPos][0] = x;
CarsInfo[vehicleid-1][vPos][1] = y;
CarsInfo[vehicleid-1][vPos][2] = z;
CarsInfo[vehicleid-1][vPos][3] = a;
CarsInfo[vehicleid-1][Components][0] = getVehiclePaintJob(vehicleid);
for(new i = 1; i <= 14; i++)
{
CarsInfo[vehicleid-1][Components][i] = GetVehicleComponentInSlot(vehicleid, i - 1);
}
new color[2];
getVehicleColor(vehicleid, color[0], color[1]);
CarsInfo[vehicleid-1][vColor][0] = color[0];
CarsInfo[vehicleid-1][vColor][1] = color[1];
OnPropUpdate();
return 1;
}

forward Float:GetVehicleSpeed(vehid);
public Float:GetVehicleSpeed(vehid)
{
	new
	Float:X,
	Float:Y,
	Float:Z,
	Float:PlayerToPoints;
	GetVehicleVelocity(vehid, X, Y, Z);
	PlayerToPoints = floatsqroot(floatpower(X, 2) + floatpower(Y, 2) + floatpower(Z, 2))*100;
	return PlayerToPoints;
}

forward Probeg();
public Probeg()
{
	for(new i=0;i<MAX_PLAYERS;i++)
	{
	    if(IsPlayerConnected(i))
	    {
	        if(IsPlayerInAnyVehicle(i))
	        {
				if(IsOwnableCar(GetPlayerVehicleID(i)))
				{
					new Float:sp = GetPlayerSpeed(i);
					new string[256];
				    new Float:ms;
					ms = (sp/1.4)/1000;
					CarsInfo[GetPlayerVehicleID(i)-1][vProbeg] += ms;
					format(string,256,"%f km",CarsInfo[GetPlayerVehicleID(i)-1][vProbeg]);
				    TextDrawSetString(probeg[i],string);
				}
	        }
		}
	}
	return 1;
}
В public OnPropUpdate суем:
PHP:
idx = 0;
	while (idx < sizeof(CarsInfo))
	{
		new coordsstring[256];
		format(coordsstring, sizeof(coordsstring), "%d,%s,%d,%f,%f,%f,%f,%d,%d,%d,%d,%s,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
		CarsInfo[idx][vOwned],
		CarsInfo[idx][vOwner],
		CarsInfo[idx][vModel],
		CarsInfo[idx][vPos][0],
		CarsInfo[idx][vPos][1],
		CarsInfo[idx][vPos][2],
		CarsInfo[idx][vPos][3],
		CarsInfo[idx][vColor][0],
		CarsInfo[idx][vColor][1],
		CarsInfo[idx][vPrice],
		CarsInfo[idx][vLevel],
		CarsInfo[idx][vNomer],
		CarsInfo[idx][vProbeg],
		CarsInfo[idx][vPercent],
		CarsInfo[idx][vDate],
		CarsInfo[idx][Components][0],
		CarsInfo[idx][Components][1],
		CarsInfo[idx][Components][2],
		CarsInfo[idx][Components][3],
		CarsInfo[idx][Components][4],
		CarsInfo[idx][Components][5],
		CarsInfo[idx][Components][6],
		CarsInfo[idx][Components][7],
		CarsInfo[idx][Components][8],
		CarsInfo[idx][Components][9],
		CarsInfo[idx][Components][10],
		CarsInfo[idx][Components][11],
		CarsInfo[idx][Components][12],
		CarsInfo[idx][Components][13],
		CarsInfo[idx][Components][14]);
		if(idx == 0)
		{
			file2 = fopen("cars.cfg", io_write);
		}
		else
		{
			file2 = fopen("cars.cfg", io_append);
		}
		fwrite(file2, coordsstring);
		idx++;
		fclose(file2);
	}
Потом суем в OnPlayerDisconnect:
PHP:
SaveVehicleData(GetPlayerVehicleID(playerid),playerid);
И в OnPlayerExitVehicle:
PHP:
SaveVehicleData(vehicleid,playerid);
Теперь в OnGameModeInit:
PHP:
LoadBuyableCars();
CreateVehicles();
SetTimer("Probeg",500,1);
Теперь займемся пробегом, добавим ко всем new:
PHP:
new Text:probeg[MAX_PLAYERS];
В public OnPlayerConnect(playerid):
PHP:
probeg[playerid] = TextDrawCreate(610.0000, 135.0000, "loading");
	TextDrawAlignment(probeg[playerid], 3);
	TextDrawFont(probeg[playerid], 1);
	TextDrawLetterSize(probeg[playerid], 0.4, 2.0);
	TextDrawColor(probeg[playerid], 0xFFFFFFFF);
	TextDrawBackgroundColor(probeg[playerid],0x8B00FDAA);
	TextDrawSetShadow(probeg[playerid], 1);
	TextDrawAlignment(probeg[playerid], 3);
В OnPlayerDisconnect:
PHP:
TextDrawHideForPlayer(playerid,probeg[playerid]);
TextDrawDestroy(probeg[playerid]);
В public OnPlayerStateChange(playerid, newstate, oldstate) после if(newstate == PLAYER_STATE_ONFOOT) вставляем:
PHP:
TextDrawHideForPlayer(playerid,probeg[playerid]);
В тот же паблик но уже после
Код:
[b][color=blue]if[/color](newstate == PLAYER_STATE_DRIVER)[/b] вставляем:
PHP:
if(IsOwnableCar(newcar))
		{
			format(string,256,"%f km",CarsInfo[newcar-1][vProbeg]);
		    TextDrawSetString(probeg[playerid],string);
			TextDrawShowForPlayer(playerid,probeg[playerid]);
		}
Найдите switch (gPlayerCheckpointStatus[playerid]) и после вставьте:
PHP:
case CHECKPOINT_CAR:
			{
                PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
				DisablePlayerCheckpoint(playerid);
				gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
			}

Следующее, мы впишем что осталось. Диалог на покупку авто:
PHP:
else if(dialogid == 558)
	{
	    new vid = GetPlayerVehicleID(playerid);
		new buycar = vid-1;
	    if(response)
	    {
	        if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) == 0 )
	        {
	            if(CarsInfo[buycar][vOwned] == 0)
	            {
					if(GetPlayerMoney(playerid) >= CarsInfo[buycar][vPrice])
					{
					  if(PlayerInfo[playerid][pLevel] >= CarsInfo[buycar][vLevel])
					  {
						if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
						{
						    CarsInfo[buycar][vOwned] = 1;
				            strmid(PlayerInfo[playerid][pNomerCar],CarsInfo[buycar][vNomer],0,40,255);
						    new sendername[MAX_PLAYER_NAME];
						    GetPlayerName(playerid, sendername, sizeof(sendername));
						    strmid(CarsInfo[buycar][vOwner], sendername, 0, strlen(sendername), 255);
						    GivePlayerMoney(playerid,-CarsInfo[buycar][vPrice]);
						    TogglePlayerControllable(playerid, 1);
						    SendClientMessage(playerid, COLOR_GREY, "Поздравляем! Вы купили это авто!");
						    DateProp(playerid);
						    OnPropUpdate();
						    SavePlayer(playerid);
						}
					  }
					  else
					  {
		                SendClientMessage(playerid, COLOR_RED, "Слишком маленький лвл для покупки машины!");
	        			TogglePlayerControllable(playerid, 1);
						RemovePlayerFromVehicle(playerid);
						return 1;
					  }
					}
					else
					{
						SendClientMessage(playerid, COLOR_RED, "У вас нет столько денег!");
	        			TogglePlayerControllable(playerid, 1);
						RemovePlayerFromVehicle(playerid);
						return 1;
					}
	            }
	        }
	        else
			{
				SendClientMessage(playerid, COLOR_RED, "У вас уже есть транспорт!");
	        	TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid);
	        	return 1;
			}
		}
	    else
	    {
	        TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid);
	        return 1;
	    }
	}

else if(dialogid == SELLCARDIALOG)
{
if(response)
{
new Float:x,Float:y,Float:z,Float:a;
new car = GetPlayerVehicleID(playerid);
CarsInfo[car-1][vProbeg] = 0.000000;
CarsInfo[car-1][vPercent] = 100;
CarsInfo[car-1][vOwned] = 0;
Engine(car,false);
Lights(car,false);
GetVehiclePos(car,x,y,z);
GetVehicleZAngle(car,a);
CarsInfo[car-1][vPos][0] = x;
CarsInfo[car-1][vPos][1] = y;
CarsInfo[car-1][vPos][2] = z;
CarsInfo[car-1][vPos][3] = a;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(car);
for(new c;c < sizeof(CarsInfo); c++)
{
BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
SetVehicleNumberPlate(BuyableCar[c],"       ");
}
new babki;
babki=CarsInfo[car-1][vPrice]/100*CarsInfo[car-1][vPercent] - floatround(CarsInfo[car-1][vProbeg],floatround_round)*100;
GivePlayerMoney(playerid,babki);
strmid(PlayerInfo[playerid][pNomerCar], "None", 0, strlen("None"), 255);
strmid(CarsInfo[car-1][vOwner], "The State", 0, strlen("The State"), 255);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
OnPropUpdate();
SavePlayer(playerid);
}
return 1;
}
Команда где у вас заводиться двигатель вставляем:
PHP:
if(IsOwnableCar(GetPlayerVehicleID(playerid)) && CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent] < 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Ваша машина разбита, придется ее продать!");
    return 1;
    }
В паблик OnPlayerStateChange после if(newstate == PLAYER_STATE_DRIVER) вставляем:
PHP:
if(newcar <= MAX_BUYABLE_CARS)
		{
		    if(CarsInfo[newcar-1][vOwned] == 0)
		    {
		        format(string, sizeof string, "{ffffff}<< Этот транспорт продаётся >>\n\nМодель: {34c924}%s {ffffff}(%d)\nСтоимость: {34c924}$%d {ffffff}| Левел: {34c924}%d\n\n{ffffff}Номер: {34c924}%s", PlayerVehicle[GetVehicleModel(newcar)-400],GetVehicleModel(newcar), CarsInfo[newcar-1][vPrice], CarsInfo[newcar-1][vLevel], CarsInfo[newcar-1][vNomer]);
		        ShowPlayerDialog(playerid,558,DIALOG_STYLE_MSGBOX,"Транспорт продаётся", string,"Купить","Отмена");
		    }
		}
		if(IsOwnableCar(newcar) && CarsInfo[newcar-1][vOwned] != 0)
		{
		if(strcmp(PlayerInfo[playerid][pNomerCar],CarsInfo[newcar-1][vNomer], true ) != 0 )
		{
		SendClientMessage(playerid,COLOR_RED, "Это не ваша машина!");
		RemovePlayerFromVehicle(playerid);
		return 1;
		}
		}
Команды:
PHP:
if(strcmp(cmd, "/carpass", true) == 0)
  {
    if(IsPlayerConnected(playerid))
    {
       if(!IsPlayerInAnyVehicle(playerid))
       {
           SendClientMessage(playerid, COLOR_GREY, "Вы не в машине!");
           return 1;
       }
       new textcar[64];
       tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
	   {
       if(!IsOwnableCar(GetPlayerVehicleID(playerid))) return SendClientMessage(giveplayerid,COLOR_GREY,"В этой машине нет документов!");
         format(string, sizeof(string), "%s достал(а) из бардачка документы.", Name(playerid));
         ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         SendClientMessage(playerid,0x0AA8DAFF,"-------========[ VEHICLE PASSPORT ]========-------");
         format(textcar,sizeof(textcar),"Модель: %s",PlayerVehicle[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Владелец: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vOwner]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Состояние: %d",CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Номер: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vNomer]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Пробег: %f км",CarsInfo[GetPlayerVehicleID(playerid)-1][vProbeg]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         SendClientMessage(playerid,0x0AA8DAFF,"==============================================");
         return 1;
         }
         giveplayerid = ReturnUser(tmp);
          if(IsPlayerConnected(giveplayerid))
          {
            if(giveplayerid != INVALID_PLAYER_ID)
            {
              for(new i = 0; i < GetMaxPlayers(); i++)
              {
              if(giveplayerid == playerid) return SendClientMessage(giveplayerid,COLOR_GREY,"Самому себе документы нельзя показать!");
              if(!ProxDetectorS(3.0, playerid, giveplayerid)) return SendClientMessage(giveplayerid,COLOR_GREY,"Вы слишком далеко!");
            if(!IsOwnableCar(GetPlayerVehicleID(playerid))) return SendClientMessage(giveplayerid,COLOR_GREY,"В этой машине нет документов!");
         format(string, sizeof(string), "%s достал(а) из бардачка документы и показал их %s.", Name(playerid),Name(giveplayerid));
         ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         SendClientMessage(giveplayerid,0x0AA8DAFF,"-------========[ VEHICLE PASSPORT ]========-------");
         format(textcar,sizeof(textcar),"Модель: %s",PlayerVehicle[GetVehicleModel(GetPlayerVehicleID(playerid))-400]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Владелец: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vOwner]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Состояние: %d",CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Номер: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vNomer]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Пробег: %f км",CarsInfo[GetPlayerVehicleID(playerid)-1][vProbeg]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         SendClientMessage(giveplayerid,0x0AA8DAFF,"==============================================");
         return 1;
              }
          return 1;
            }
          }
      }
  return 1;
  }
  
  
    if(strcmp(cmd, "/sellmycar", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
		{
			GetPlayerName(playerid, playername, sizeof(playername));
			if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) == 0 )
			{
				SendClientMessage(playerid, COLOR_WHITE, "У вас нет машины!");
				return 1;
			}
			new car = GetPlayerVehicleID(playerid);
			if(PlayerInfo[playerid][pMarried] > 0)
		    {
		        SendClientMessage(playerid, COLOR_GREY, "Вы женаты и поэтому не можете продать свою машину!");
		        return 1;
		    }
   			if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) != 0 && strcmp(playername, CarsInfo[car-1][vOwner], true) == 0)
			{
			    tmp = strtok(cmdtext,idx);
			    if(!strlen(tmp))
			    {
					format(string,sizeof(string),"{ffffff}Продать машину государству за {34c924}$%d{ffffff}?",((CarsInfo[car-1][vPrice]/100)*CarsInfo[car-1][vPercent]) - (floatround(CarsInfo[car-1][vProbeg],floatround_round)*100));
					ShowPlayerDialog(playerid,SELLCARDIALOG,DIALOG_STYLE_MSGBOX,"Продажа автомобиля",string,"Да","Отменить");
			        SendClientMessage(playerid,COLOR_ISPOLZUY,"* Используйте: /sellmycar [id] [сумма]");
			        return 1;
			    }
			    giveplayerid = strval(tmp);
			    tmp = strtok(cmdtext,idx);
			    if(!strlen(tmp))
			    {
			        SendClientMessage(playerid,COLOR_ISPOLZUY,"* Используйте: /sellmycar [id] [сумма]");
			        return 1;
			    }
			    new money = strval(tmp);
			    if(!IsPlayerConnected(giveplayerid))
			    {
			        SendClientMessage(playerid,COLOR_GREY,"Нет такого игрока");
			        return 1;
			    }
			    if(money < 1)
				{
				    SendClientMessage(playerid,COLOR_GREY,"Стоимость должна быть от 1$!");
				    return 1;
				}
			    if(GetPlayerMoney(giveplayerid) < money)
			    {
			        SendClientMessage(playerid,COLOR_GREY,"У него нет столько денег!");
			        return 1;
			    }
			    if(playerid == giveplayerid)
		        {
                    SendClientMessage(playerid, COLOR_GREY, "Вы не можете продать машину самому себе!");
		            return 1;
		        }
			    if(strcmp(PlayerInfo[giveplayerid][pNomerCar],"None", true ) != 0 )
			    {
			        SendClientMessage(playerid,COLOR_GREY,"У этого игрока уже есть машина!");
			        return 1;
			    }
			    if(PlayerInfo[giveplayerid][pLevel] < CarsInfo[car-1][vLevel])
					{
						SendClientMessage(playerid, COLOR_GREY, "У этого игрока малый лвл!");
						return 1;
					}
                if(ProxDetectorS(8.0, playerid, giveplayerid))
			    {
			    GetPlayerName(playerid,sendername,sizeof(sendername));
			    GetPlayerName(giveplayerid,giveplayer,sizeof(giveplayer));
			    prodcarid[giveplayerid] = playerid;
			    prodcarinfo[giveplayerid] = car;
				strmid(prodcar[giveplayerid], CarsInfo[car-1][vNomer], 0, strlen(CarsInfo[car-1][vNomer]), 255);
				prodcarmoney[giveplayerid] = money;
				format(string,sizeof(string),"Вы предложили %s купить машину %s, с пробегом %f км, состоянием %d за $%d",giveplayer,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[car-1][vProbeg],CarsInfo[car-1][vPercent],money);
				SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
				format(string,sizeof(string),"%s предложил вам купить его машину %s, с пробегом %f км, состоянием %d за $%d (введите /accept sellcar чтобы купить)",sendername,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[car-1][vProbeg],CarsInfo[car-1][vPercent],money);
				SendClientMessage(giveplayerid,COLOR_LIGHTBLUE,string);
				return 1;
				}
				else
				{
				SendClientMessage(playerid, COLOR_GREY, "Игрок которому вы хотите продать машину не рядом с вами!");
				}
			}
			else
			{
				SendClientMessage(playerid, COLOR_GREY, "У вас нет машины!");
			}
		}
		return 1;
	}
	
	if(strcmp(cmd, "/park", true) == 0)
    {
	for(new car = 0; car < sizeof(CarsInfo); car++)
	{
    if(strcmp(Name(playerid),CarsInfo[car][vOwner],true) == 0)
    {
    SetVehiclePos(BuyableCar[car],CarsInfo[car][vPos][0],CarsInfo[car][vPos][1], CarsInfo[car][vPos][2]);
    SetVehicleZAngle(BuyableCar[car],CarsInfo[car][vPos][3]);
    SetPlayerCheckpoint(playerid, CarsInfo[car][vPos][0], CarsInfo[car][vPos][1], CarsInfo[car][vPos][2], 10.0);
    SendClientMessage(playerid,COLOR_GREY,"* Автомобиль был возвращен к месту парковки!");
    gPlayerCheckpointStatus[playerid] = CHECKPOINT_CAR;
    }
    else
	{
    SendClientMessage(playerid,COLOR_GREY,"У вас нет машины!");
    return 1;
    }
    }
    return 1;
    }
    
    if(strcmp(cmd, "/fixcar", true) == 0)
    {
	if(PlayerToPoint(2.0, playerid, SBizzInfo[4][sbEntranceX], SBizzInfo[4][sbEntranceY], SBizzInfo[4][sbEntranceZ]))
	{
	if(SBizzInfo[4][sbProducts] == 0)
    {
	GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1);
    return 1;
    }
	for(new car = 0; car < sizeof(CarsInfo); car++)
	{
    if(strcmp(Name(playerid),CarsInfo[car][vOwner],true) == 0)
    {
    SetVehiclePos(BuyableCar[car],2524.4014,-1466.1853,23.6246);
    SetVehicleZAngle(BuyableCar[car],272.6978);
    PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
    format(string,sizeof(string),"~g~FixCar service~n~~r~-$%d",SBizzInfo[4][sbEntranceCost]);
    GameTextForPlayer(playerid, string, 5000, 1);
    GivePlayerMoney(playerid,-SBizzInfo[4][sbEntranceCost]);
    SBizzInfo[4][sbTill] += SBizzInfo[4][sbEntranceCost];
    SBizzInfo[4][sbProducts]--;
    OnPropUpdate();
    }
    else
	{
    SendClientMessage(playerid,COLOR_GREY,"У вас нет машины!");
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Вы не у бизнеса Fix Car!");
    return 1;
    }
    return 1;
    }
    
    
    
    if(strcmp(cmd, "/editmodelcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editmodelcar [Модель]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_GREY, "Модель авто должна быть не менее 400 и не более 611!");
    
	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
	new car = GetPlayerVehicleID(playerid);
	if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить модель данной машине!");
    
    new str[512];
	format(str,512,"Вы успешно изменили модель данного авто на %d модель!",model);
	SendClientMessage(playerid, COLOR_GREY, str);
	new Float:x,Float:y,Float:z,Float:a;

    GetVehiclePos(car,x,y,z);
    GetVehicleZAngle(car,a);
    CarsInfo[car-1][vPos][0] = x;
    CarsInfo[car-1][vPos][1] = y;
    CarsInfo[car-1][vPos][2] = z;
    CarsInfo[car-1][vPos][3] = a;
    CarsInfo[car-1][vModel] = model;
    RemovePlayerFromVehicle(playerid);
    DestroyVehicle(car);
    for(new c;c < sizeof(CarsInfo); c++)
    {
    BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
    SetVehicleNumberPlate(BuyableCar[c],CarsInfo[c][vNomer]);
    ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
    PutPlayerInVehicle(playerid,BuyableCar[c],0);
    }
	OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/asellcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
	new car = GetPlayerVehicleID(playerid);
	if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Эту машину нельзя продать!");

	SendClientMessage(playerid, COLOR_GREY, "Вы успешно продали эту машину!");
	new Float:x,Float:y,Float:z,Float:a;

    GetVehiclePos(car,x,y,z);
    GetVehicleZAngle(car,a);
    CarsInfo[car-1][vPos][0] = x;
    CarsInfo[car-1][vPos][1] = y;
    CarsInfo[car-1][vPos][2] = z;
    CarsInfo[car-1][vPos][3] = a;
    CarsInfo[car-1][vOwned] = 0;
    CarsInfo[car-1][vProbeg] = 0.000000;
    CarsInfo[car-1][vPercent] = 100;
    new vladelec[256];
	strmid(vladelec, CarsInfo[car-1][vOwner], 0, strlen(CarsInfo[car-1][vOwner]), 255);
    new str[64];
    format(str, sizeof(str), "%s.ini",vladelec);
    new File = iniOpen(str);
    iniSet(File,"NomerCar","None");
    iniClose(File);
    strmid(CarsInfo[car-1][vOwner], "The State", 0, strlen("The State"), 255);
    RemovePlayerFromVehicle(playerid);
    DestroyVehicle(car);
    for(new c;c < sizeof(CarsInfo); c++)
    {
    BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
    SetVehicleNumberPlate(BuyableCar[c],"         ");
    }
	OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/editlevelcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editlevelcar [Левел]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 1) return SendClientMessage(playerid, COLOR_GREY, "Лвл авто должен быть не менее 1!");

	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
	new car = GetPlayerVehicleID(playerid);
	if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить левел данной машине!");

    new str[512];
	format(str,512,"Вы успешно изменили лвл данного авто на %d лвл!",model);
	SendClientMessage(playerid, COLOR_GREY, str);
    CarsInfo[car-1][vLevel] = model;
    OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/editpricecar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editpricecar [Цена]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 1) return SendClientMessage(playerid, COLOR_GREY, "Цена авто должна быть не менее $1!");

	if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
	new car = GetPlayerVehicleID(playerid);
	if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить цену данной машине!");

    new str[512];
	format(str,512,"Вы успешно изменили цену данного авто на $%d!",model);
	SendClientMessage(playerid, COLOR_GREY, str);
    CarsInfo[car-1][vPrice] = model;
    OnPropUpdate();
    return 1;
    }
Найдите команду /accept и добавьте:
PHP:
else if(strcmp(x_job,"sellcar",true) == 0)
			{
			    new ididpl = prodcarid[playerid];
			    new moneyy = prodcarmoney[playerid];
			    new car = prodcarinfo[playerid];
				if(ididpl == -1)
				{
				    SendClientMessage(playerid,COLOR_GREY,"Вам никто не предлагал купить машину!");
				    return 1;
				}
				if(!IsPlayerConnected(ididpl))
			    {
			        SendClientMessage(playerid,COLOR_GREY,"Вам никто не предлогал купить машину, или этот человек вышел!");
			        return 1;
			    }
			    if(GetPlayerMoney(playerid) < moneyy)
			    {
			        SendClientMessage(playerid,COLOR_GREY,"У вас нехватает денег!");
			        return 1;
			    }
				GetPlayerName(playerid, sendername, sizeof(sendername));
				GetPlayerName(ididpl, giveplayer, sizeof(giveplayer));
				strmid(CarsInfo[car-1][vOwner], sendername, 0, strlen(sendername), 255);
				ConsumingMoney[ididpl] = 1;
				GivePlayerMoney(ididpl,moneyy);
				RemovePlayerFromVehicle(ididpl);
				ConsumingMoney[playerid] = 1;
				GivePlayerMoney(playerid,-moneyy);
				PlayerPlaySound(ididpl, 1052, 0.0, 0.0, 0.0);
				PlayerPlayMusic(playerid);
				strmid(PlayerInfo[playerid][pNomerCar], prodcar[playerid], 0, strlen(prodcar[playerid]), 255);
				format(string,sizeof(string),"None");
				strmid(PlayerInfo[ididpl][pNomerCar], string, 0, strlen(string), 255);
				OnPropUpdate();
				SavePlayer(playerid);
				SavePlayer(ididpl);
				format(string,sizeof(string),"Вы продали свою машину %s %s, с пробегом %f км, состоянием %d за $%d",sendername,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[car-1][vProbeg],CarsInfo[car-1][vPercent],moneyy);
				SendClientMessage(ididpl,COLOR_LIGHTBLUE,string);
				format(string,sizeof(string),"Вы купили машину %s у %s, с пробегом %f км, состоянием %d за $%d",PlayerVehicle[GetVehicleModel(car)-400],giveplayer,CarsInfo[car-1][vProbeg],CarsInfo[car-1][vPercent],moneyy);
				SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
				prodcar[playerid] = -1;
				prodcarid[playerid] = -1;
				prodcarmoney[playerid] = -1;
				prodcarinfo[playerid] = -1;
		}
Потом в public OnVehicleSpawn(vehicleid):
PHP:
if(vehicleid <= MAX_BUYABLE_CARS)
    {
        if(CarsInfo[vehicleid-1][vOwned] == 1)
        {
        	ChangeVehiclePaintjob(vehicleid, CarsInfo[vehicleid-1][Components][0]);
        	ChangeVehicleColor(vehicleid, CarsInfo[vehicleid-1][vColor][0], CarsInfo[vehicleid-1][vColor][1]);
        	for(new i = 1; i < 14; i++)
	        {
            AddVehicleComponent(vehicleid, CarsInfo[vehicleid-1][Components][i]);
	        }
		}
	}
Вот 3 паблика если есть хотябы 1 из них, то просто замените, а так просто добавте:
PHP:
public OnVehicleDeath(vehicleid, killerid)
{
new Float:pos[4];
GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
GetVehicleZAngle(vehicleid, pos[3]);
CarsInfo[vehicleid-1][vPos][0] = pos[0];
CarsInfo[vehicleid-1][vPos][1] = pos[1];
CarsInfo[vehicleid-1][vPos][2] = pos[2];
CarsInfo[vehicleid-1][vPos][3] = pos[3];
new componn[14];
for(new i; i < 14; i++)
{
componn[i] = GetVehicleComponentInSlot(vehicleid, i);
}
DestroyVehicle(vehicleid);
new string[64];
for(new c; c< sizeof(CarsInfo); c++)
{
BuyableCar[c] = CreateVehicle(CarsInfo[vehicleid-1][vModel],pos[0],pos[1],pos[2],pos[3],CarsInfo[vehicleid-1][vColor][0],CarsInfo[vehicleid-1][vColor][1],-1);
if(CarsInfo[c][vOwned] == 0)
{
format(string,sizeof(string),"       ");
}
else
{
format(string,sizeof(string),"%s",CarsInfo[c][vNomer]);
}
ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
ChangeVehicleColor(BuyableCar[c], CarsInfo[c][vColor][0], CarsInfo[c][vColor][1]);

for(new i = 0; i < 14; i++)
{
AddVehicleComponent(BuyableCar[c], componn[i]);
}
SetVehicleNumberPlate(BuyableCar[c],string);
SetVehicleHealthAC(BuyableCar[c],1000.0);
}
return 1;
}

public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
    if(CarsInfo[vehicleid-1][vPercent] < 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Ваша машина разбита, придется ее продать!");
    Engine(vehicleid,false);
    Lights(vehicleid,false);
    RemovePlayerFromVehicle(playerid);
    }
    if(CarsInfo[vehicleid-1][vPercent] < 0)
    {
    CarsInfo[vehicleid-1][vPercent] = 0;
    }
    new Float: carhp;
    GetVehicleHealth(vehicleid, carhp);
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
        if(IsOwnableCar(vehicleid))
        {
            if(carhp > 700 && carhp < 850)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
            else if(carhp > 500 && carhp < 700)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
            else if(carhp > 350 && carhp < 500)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
			OnPropUpdate();
        }
    }
    return 1;
}

new carsColors[MAX_VEHICLES];

stock getVehicleColor(vid, &c1, &c2)
{
	c1 = (carsColors[vid] >> 8) & 0xFF;
	c2 = carsColors[vid] & 0xFF;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
	carsColors[vehicleid] = (color1 << 8) | (color2);
}

new car_paintjob[MAX_VEHICLES] = {-1, ...};

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
	car_paintjob[vehicleid] = paintjobid;

	return 1;
}

stock getVehiclePaintJob(vehicleid)
{
	return car_paintjob[vehicleid];
}

Вот и все! С вами был я - PaHaNjkee. Если вы выкладываете на других ресурсов автора указывать! Автор - я.

P.S. SetVehicleHealthAC заменить на SetVehicleHealth (просто у меня стоит античит)

Если у вас есть ошибки - пишите возможно я чтото не написал. И еще: этот урок как раз для этого авторныка)
Если не жалко + в репу)

И еще раз говорю - система рабочая, кто не верит в ЛС скину ип, проверите, команды чтобы добавть машину нету, так что все делаете вручную. Покачто там 1 машина (для теста), вот сам файлик . Вот вроде и все
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу