SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 25/02/2013, 01:15 PM   #1
riddik123
Little Clucker
 
riddik123's Avatar
 
Join Date: Apr 2012
Posts: 14
Reputation: 0
Default Неработает механик

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

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

1.
Code:
		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.
Code:
		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
Code:
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
Code:
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;
}
riddik123 is offline   Reply With Quote
Old 25/02/2013, 11:17 PM   #2
jhonyxakep
Gangsta
 
jhonyxakep's Avatar
 
Join Date: May 2011
Location: Russia, Moscow
Posts: 789
Reputation: 43
Default Re: Неработает механик

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.
jhonyxakep is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off



All times are GMT. The time now is 05:40 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.