Неработает механик
#1

gamemode samp-pro mysql
Не могу понять алгоритм исправления 2 багов!
1.Когда механик предлагает подчинить любую часть транспорта игроку пишет в чат Ошибка ...
2.Механик предлагает заправить транспорт в ответ игроку пишет
Механик Pavel_Mante заправляет ваш транспорт на 0 за $
не цену не литры не показывает...
После всей процедуры игрок заводит транспорт кнопкой N ему пишет в чат вы заправляетесь...

Функции в моде не правильные...

1.
Код:
		case 76:
	    {
	        if(response)
	        {
				new offer = RefillOffer[playerid];
				if(offer != INVALID_PLAYER_ID && RefillOffer[offer] == playerid)
				{
				    if(ProxDetectorS(5.0,playerid,offer, 1))
				    {
				        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetPlayerState(offer) == PLAYER_STATE_ONFOOT)
				        {
				            if(GetMoney(playerid) >= RefillPrice[playerid])
				            {
				                new carid = GetPlayerVehicleID(playerid);
				                if(!Filled[carid])
				                {
						    		ApplyAnimation(offer, "ROB_BANK", "CAT_Safe_Rob", 4.1, 0, 1, 1, 1, 0, 1);
						    		format(string,sizeof(string),"Механик %s заправляет ваш транспорт на %.0f за $%d",cPN(offer),RepairPrice[playerid]);
						    		SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
						    		format(string,sizeof(string),"Вы заправляете транспорт игроку %s на %.0f за $%d",cPN(playerid),RepairPrice[playerid]);
						    		SendClientMessage(offer,COLOR_LIGHTBLUE,string);
						    		GiveMoney(playerid,-RepairPrice[playerid],"Repair-");
						    		GiveMoney(offer,RepairPrice[playerid],"Repair+");
						    		SetEngineStatus( carid, false );
						    		SaveAccount(playerid);
						    		SaveAccount(offer);
						    		InJob[offer] = 1;
						    		Filled[carid] = 1;
						    		RefillCount[playerid] += Fuel[carid];
						    		if(RefillCount[playerid] > 100.0)
						    		{
						    		    RefillCount[playerid] = 100.0;
						    		}
					    		}
					    		else
					    		{
					    		    CheckRefill(offer, 0);
					    		    SendClientMessage(offer, COLOR_GREY, "Транспорт уже заправляется");
					    		    SendClientMessage(playerid, COLOR_GREY, "Транспорт уже заправляется");
					    		}
				    		}
				    		else
					    	{
					    	    CheckRefill(offer, 0);
					    	    SendClientMessage(offer, COLOR_GREY, "Этот игрок отказался заправляться");
					    	    SendClientMessage(offer, COLOR_GREY, "У вас нехватает денег");
					    	}
				    	}
				    	else
					    {
					    	CheckRefill(offer, 0);
					    	SendClientMessage(offer, COLOR_GREY, "Вы должны находиться вне транспорта, а игрок в транспорте");
                            SendClientMessage(playerid, COLOR_GREY, "Вы должны находиться в транспорте, а механик вне транспорта");
						}
				    }
				    else
					{
						CheckRefill(offer, 0);
						SendClientMessage(offer, COLOR_GREY, "Вы далеко от игрока");
						SendClientMessage(playerid, COLOR_GREY, "Вы далеко от механика");
					}
			    }
		    }
		    return true;
2.
Код:
		case 75:
	    {
	        new rname[30];
	        new offer = RepairOffer[playerid];
	        if(response)
	        {
				if(offer != INVALID_PLAYER_ID && RepairOffer[offer] == playerid)
				{
					new carid = GetPlayerVehicleID(playerid), Float:X, Float:Y, Float:Z;
					GetVehicleShiftPos( carid, 0, X, Y, Z, 3.0 );
				    if(IsPlayerInRangeOfPoint( offer, 2.0, X, Y, Z) )
				    {
				        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && GetPlayerState(offer) == PLAYER_STATE_ONFOOT)
				        {
				            if(GetMoney(playerid) >= RepairPrice[playerid])
				            {
				                switch(RepairPart[playerid])
				                {
				                    case 1:
									{
										rname = "починка двигателя";
										SetBonnetStatus( carid, true );
										SetPlayerFaceToPoint(offer, X, Y);
									}
				                    case 2:
									{
										rname = "ремонт панели";
										RepairReset[offer] = 15 * 20;
									}
				                    case 3:
									{
										rname = "ремонт дверей";
										RepairReset[offer] = 15 * 20;
									}
				                    case 4:
									{
										rname = "ремонт фар";
										RepairReset[offer] = 10 * 20;
									}
				                    case 5:
									{
										rname = "замена колес";
										RepairReset[offer] = 20 * 20;
									}
				                    default: return false;
				                }
				                ApplyAnimation(offer, "ROB_BANK", "CAT_Safe_Rob", 4.1, 0, 1, 1, 1, 0, 1);
					    		format(string,sizeof(string),"Вы воспользовались услугами механика %s ( %s ) за $%d",cPN(offer), rname, RepairPrice[playerid]);
					    		SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
					    		format(string,sizeof(string),"Вы оказываете услугу игроку %s ( %s ) за $%d",cPN(playerid), rname, RepairPrice[playerid]);
					    		SendClientMessage(offer,COLOR_LIGHTBLUE,string);
					    		GiveMoney(playerid,-RepairPrice[playerid],"Repair-");
					    		GiveMoney(offer,RepairPrice[playerid],"Repair+");
					    		SetEngineStatus( carid, false );
					    		SaveAccount(playerid);
					    		SaveAccount(offer);
					    		InJob[offer] = 1;
				    		}
				    		else
							{
							    SendClientMessage(playerid,COLOR_GREY,"У вас нехватает денег");
							    CheckRepair( offer );
							}
				    	}
				    	else
						{
						    SendClientMessage(playerid,COLOR_GREY,"Либо вы вне транспорта, либо механик в транспорте");
							CheckRepair( offer );
						}
				    }
				    else
					{
					    SendClientMessage(playerid,COLOR_GREY,"Механик далеко от транспорта");
						CheckRepair( offer );
					}
			    }
				else
				{
				    SendClientMessage(playerid,COLOR_GREY,"Ошибка ...");
					CheckRepair( offer );
				}
		    }
		    else
			{
			    SendClientMessage(playerid,COLOR_GREY,"Вы отказались ...");
				CheckRepair( offer );
			}
		    return true;
include - repair
Код:
COMMAND:repair(playerid, params[])
{
	if(PlayerInfo[playerid][pJob] == JOB_MECHANIC)
	{
		if(RefillOffer[playerid] == INVALID_PLAYER_ID && RepairOffer[playerid] == INVALID_PLAYER_ID)
		{
		    if(PlayerInfo[playerid][pPasatizhi])
		    {
			    if(!RepairReset[playerid])
			    {
				    new id, part, price, string[150], Float:X, Float:Y[2], Float:Z, rname[30];
				    if(sscanf(params,"uii", id, part, price) || part < 1 || part > 5)
					{
						SendClientMessage(playerid,COLOR_ISPOLZUY,"Используйте: /repair [ID/Имя] [ID части транспорта] [Цена]");
						SendClientMessage(playerid,COLOR_WHITE,"__________ Список доступных ID's __________");
						SendClientMessage(playerid,COLOR_WHITE,"1. Двигатель");
						SendClientMessage(playerid,COLOR_WHITE,"2. Панель");
						SendClientMessage(playerid,COLOR_WHITE,"3. Двери");
						SendClientMessage(playerid,COLOR_WHITE,"4. Фары");
						SendClientMessage(playerid,COLOR_WHITE,"5. Колеса");
						SendClientMessage(playerid,COLOR_WHITE,"____________________________________________");
						return true;
					}
					switch(part)
					{
					    case 1: rname = "починить двигатель";
					    case 2: rname = "отремонтировать панель";
					    case 3: rname = "отремонтировать двери";
                        case 4: rname = "отремонтировать фары";
                        case 5: rname = "заменить колеса";
					}
					if(RepairOffer[id] == INVALID_PLAYER_ID)
					{
						if(GetPlayerState(id) == PLAYER_STATE_DRIVER)
						{
							if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
						    {
							    if(price > 0)
			        			{
			        				new carid = GetPlayerVehicleID(id);
			        				GetVehicleModelInfo(GetVehicleModel(carid), VEHICLE_MODEL_INFO_SIZE, X, Y[1], Z);
									GetVehicleShiftPos( carid, 0, X, Y[0], Z, Y[1] / 2 );
									if(IsPlayerInRangeOfPoint( playerid, 1.0, X, Y[0], Z ) )
									{
										if(price > 200) return SendClientMessage(playerid,COLOR_GREY,"За свои услуги вы можете брать не более $200");
								    	format(string,sizeof(string),"{FFFFFF}Механик {10F441}%s {FFFFFF}предлагает вам %s.\nСтоимость: {10F441}$%d",cPN(playerid), rname, price);
								    	if(!ShowPlayerDialogEx(id,75,0,"Починка",string,"Починить","Отмена"))
								    	{
								    	    SendClientMessage(playerid, COLOR_GREY, "Недоступно в данный момент.");
								    	}
								    	else
								    	{
									    	format(string,sizeof(string),"Вы хотите %s транспорта игроку %s за $%d",cPN(id), rname, price);
									    	SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
									    	RepairOffer[playerid] = id;
									    	RepairOffer[id] = playerid;
									    	RepairPrice[id] = price;
									    	RepairPart[id] = part;
								    	}
							        }
							        else SendClientMessage(playerid,COLOR_GREY,"Вы далеко от транспорта");
								}
						        else SendClientMessage(playerid,COLOR_GREY,"Цена должна быть от $1 до $200");
						    }
						    else SendClientMessage(playerid,COLOR_GREY,"Вы должны быть вне транспорта.");
						}
						else SendClientMessage(playerid,COLOR_GREY,"Игрок должен сидеть в транспорте.");
					}
					else SendClientMessage(playerid,COLOR_GREY,"Этому игроку уже поступило предложение о починке.");
				}
				else SendClientMessage(playerid,COLOR_GREY,"Вы можете чинить,заправлять,устанавливать неон/сигнализцию только 1 раз в 30 секунд");
			}
			else SendClientMessage(playerid,COLOR_GREY,"У вас нет гаечного ключа, чтобы чинить транспорт");
		}
		else SendClientMessage(playerid,COLOR_GREY,"Вы уже кого-то чините/заправляете");
	}
	return true;
}
include - refill
Код:
COMMAND:refill(playerid, params[])
{
	if(PlayerInfo[playerid][pJob] == JOB_MECHANIC)
	{
	    if(PlayerInfo[playerid][pFuel])
	    {
	        if(RefillOffer[playerid] == INVALID_PLAYER_ID && RepairOffer[playerid] == INVALID_PLAYER_ID)
	        {
				if(!RepairReset[playerid])
			    {
				    new id, price, count, string[150];
				    if(sscanf(params,"udd",id,price,count)) return SendClientMessage(playerid,COLOR_ISPOLZUY,"Используйте: /refill [id] [цена] [литры]");
					if(ProxDetectorS(4.0,playerid,id))
					{
					    if(RepairOffer[id] == INVALID_PLAYER_ID)
					    {
						    if(GetPlayerState(id) == PLAYER_STATE_DRIVER)
						    {
						        new carid = GetPlayerVehicleID(id);
						        if(!Filled[carid])
						        {
							        if(!IsAVelik(carid))
							        {
								        if(Fuel[carid] < 100.0)
								        {
								            if(Fuel[carid] + float(count) <= 100.0)
								            {
										        if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
										        {
										            if(price > 0)
										            {
														if(price > 200) return SendClientMessage(playerid,COLOR_GREY,"За свои услуги вы можете брать не более $200");
										            	format(string,sizeof(string),"{FFFFFF}Механик {10F441}%s {FFFFFF}предлагает вам заправить ваш транспорт.\nЛитры: %dл\nСтоимость: {10F441}$%d",cPN(playerid), count, price);
								                        if(!ShowPlayerDialogEx(id,76,0,"Заправка",string,"Заправить","Отмена"))
								                        {
								                            SendClientMessage(playerid, COLOR_GREY, "Недоступно в данный момент.");
								                        }
								                        else
								                        {
															format(string,sizeof(string),"Вы хотите заправить транспорт игроку %s на %dл за $%d",cPN(id), count, price);
															SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
											            	RefillOffer[playerid] = id;
											            	RefillOffer[id] = playerid;
											            	RefillPrice[id] = price;
											            	RefillCount[id] = float(count);
										            	}
													}
													else SendClientMessage(playerid,COLOR_GREY,"Не меньше $1");
										        }
										        else SendClientMessage(playerid,COLOR_GREY,"Вы должны находиться вне транспорта");
											}
											else
											{
											    format(string,sizeof(string),"В бак столько не вместится! Максимум %.0fл", 100.0 - Fuel[carid]);
												SendClientMessage(playerid,COLOR_GREY,string);
											}
										}
								        else SendClientMessage(playerid,COLOR_GREY,"В этом транспорте достаточно топлива");
							        }
						        	else SendClientMessage(playerid,COLOR_GREY,"Нельзя заправлять данный вид транспорта");
								}
								else SendClientMessage(playerid,COLOR_GREY,"Транспортное средство уже заправляется");
							}
						    else SendClientMessage(playerid,COLOR_GREY,"Игрок должен сидеть в транспорте");
						}
						else SendClientMessage(playerid,COLOR_GREY,"Этого игрока уже заправляют");
					}
					else SendClientMessage(playerid,COLOR_GREY,"Вы далеко от игрока");
				}
				else SendClientMessage(playerid,COLOR_GREY,"Вы можете чинить,заправлять,устанавливать неон/сигнализцию только 1 раз в 30 секунд");
			}
			else SendClientMessage(playerid,COLOR_GREY,"Вы уже кого-то заправляете/чините");
		}
		else SendClientMessage(playerid,COLOR_GREY,"У вас нет канистры чтобы заправить транспорт");
	}
	return true;
}
Алгоритм рабочей заправки
Quote:

COMMAND:fill(playerid, params[])
{
if(GetPlayerState(playerid) == 2)
{
new carid = GetPlayerVehicleID(playerid);
if(GetVehicleKindFuel(carid) != -1)
{
if(IsAtGasStation(playerid))
{
new fuelid = GetGasStation(playerid);
new bizid = FuelInfo[fuelid][fBizzID];
if(BizInfo[bizid][bProducts] >= 100)
{
if(!Filled[carid])
{
if(Fuel[carid] < 100.0)
{
if(KindFuel[playerid] == -1)
{
if(GetVehicleKindFuel(carid) != 0)
{
GameTextForPlayer(playerid,"~w~љAм쑆 Џ…Њ ЏOЊ‡…BA –O„EЏ ~r~мABPEѓ…Џ’~w~~n~BAЋE–Y ЏPAмCЊOPЏмO–Y CPEѓCЏBY!",10000,4);
}
PlayerFuel[playerid] = fuelid;
CountFuel[playerid] = 0.0;
KindFuel[playerid] = 0;
ShowFuelKeys[playerid] = false;
new Float:fuel = 100.0 - Fuel[carid];
new string[15];
format(string, sizeof(string), "0/%.1f~g~L", fuel);
SendClientMessage(playerid, COLOR_WHITE, "Используйте курсор чтобы выбрать тип топлива и его кол-во");
SendClientMessage(playerid, COLOR_WHITE, "Так же вы можете нажать на \"кол-во топлива\" для вызова доп. окна ввода");
PlayerTextDrawSetString(playerid,FuelCountDraw[playerid], string);
PlayerTextDrawSetString(playerid,FuelCostDraw[playerid], "$0");
PlayerTextDrawSetString(playerid,KindFuelDraw[playerid], FuelName[0]);
PlayerTextDrawTextSize(playerid,PlayerFuelBar[playerid], 233.0, 0.0);

TextDrawShowForPlayer(playerid, FuelDrawBG[0]);
TextDrawShowForPlayer(playerid, FuelDrawBG[1]);
TextDrawShowForPlayer(playerid, FuelNextKey[0]);
TextDrawShowForPlayer(playerid, FuelNextKey[1]);
TextDrawShowForPlayer(playerid, FuelBackKey[0]);
TextDrawShowForPlayer(playerid, FuelBackKey[1]);
TextDrawShowForPlayer(playerid, FuelNextBG[0]);
TextDrawShowForPlayer(playerid, FuelNextBG[1]);

TextDrawShowForPlayer(playerid, FuelBarDraw);
TextDrawShowForPlayer(playerid, FuelSelectDraw);
TextDrawShowForPlayer(playerid, FuelCancelDraw);

PlayerTextDrawShow(playerid, PlayerFuelBar[playerid]);
PlayerTextDrawShow(playerid, FuelCostDraw[playerid]);
PlayerTextDrawShow(playerid, FuelCountDraw[playerid]);
PlayerTextDrawShow(playerid, KindFuelDraw[playerid]);

SelectTextDraw(playerid, 0xAFAFAFFF);
}
}
else SendClientMessage(playerid,COLOR_GREY,"Ваш транспорт полностью заправлен");
}
else SendClientMessage(playerid,COLOR_GREY,"Ваш транспорт уже заправляется");
}
else SendClientMessage(playerid,COLOR_GREY,"На этой заправке не осталось топлива");
}
else SendClientMessage(playerid,COLOR_GREY,"Вы ни на 1-й из заправок...");
}
else SendClientMessage(playerid,COLOR_GREY,"Топлива для вашего вида транспорта у нас нет");
}
return true;
}

Reply
#2

Quote:

format(string,sizeof(string),"Механик %s заправляет ваш транспорт на %.0f за $%d",cPN(offer),RepairPrice[playerid]);

Давайте считать.

1. %s
2. %f
3. %d

Считаем аргументы формата:

1. cPN(offer)
2. RepairPrice[playerid]
3.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)