[BUG] /fare job Taxistas.
#1

Hola, ante todo gracias por leer mi post y vuestro interes... Queria preguntaros como solucionar cierto bug en taxistas, el bug es conocido pero no he podido encontrar ningun post que lo solucione, en el caso de que exista cierren este y pongan el link de dicho post si puede ser. Gracias.

El bug es el de que cuando una persona va en el taxi y se le pone el dinero en negativo y el taxista sigue ganando dinero, luego el deudor va a jail y se le va la deuda y luego intercambian el puesto y se hacen de oro...

Mi Codigo es este:

Код:
if(strcmp(cmd,"/fare",true)==0)
    {
        if(IsPlayerConnected(playerid))
	    {
	        if(PlayerInfo[playerid][pMember] == 11 || PlayerInfo[playerid][pLeader] == 11 || PlayerInfo[playerid][pJob] == 1)
			{
				if(TransportDuty[playerid] > 0)
				{
				    if(TransportDuty[playerid] == 1)
				    {
				        TaxiDrivers -= 1;
				    }
				    else if(TransportDuty[playerid] == 2)
				    {
				        BusDrivers -= 1;
				    }
				    TransportDuty[playerid] = 0;
					format(string, sizeof(string), "* Estas fuera de trabajo y hasta hoy has ganado $%d.", TransportMoney[playerid]);
					SendClientMessage(playerid, COLOR_WHITE, string);
					SafeGivePlayerMoney(playerid, TransportMoney[playerid]);
				    TransportValue[playerid] = 0; TransportMoney[playerid] = 0;
					return 1;
				}
				new Veh = GetPlayerVehicleID(playerid);
				if(Veh == 61 || Veh == 62 || Veh == 63 || Veh == 64|| Veh == 65 || Veh == 66 || Veh == 67 || Veh == 68 || Veh == 69 || Veh == 70)
				{
				    if(GetPlayerState(playerid) == 2)
				    {
					    tmp = strtok(cmdtext, idx);
						if(!strlen(tmp))
						{
							SendClientMessage(playerid, COLOR_WHITE, "USAGE: /fare [price]");
							return 1;
						}
						moneys = strval(tmp);
						if(moneys < 1 || moneys > 20) { SendClientMessage(playerid, COLOR_GREY, "   Fare price must be between $1 and $20 !"); return 1; }
					    TaxiDrivers += 1; TransportDuty[playerid] = 1; TransportValue[playerid] = moneys;
					    GetPlayerName(playerid,sendername,sizeof(sendername));
	    				format(string, sizeof(string), "[Anuncio] Conductor de Taxis %s se encuentra en servicio /llamar 444", sendername);
	    				OOCNews(0x00CA00FF,string);
					}
					else
					{
					    SendClientMessage(playerid, COLOR_GREY, "   You are not the Driver !");
					    return 1;
					}
				}
				else if(Veh == 59 || Veh == 60)
				{
				    if(GetPlayerState(playerid) == 2)
				    {
					    tmp = strtok(cmdtext, idx);
						if(!strlen(tmp))
						{
							SendClientMessage(playerid, COLOR_WHITE, "USAGE: /fare [price]");
							return 1;
						}
						moneys = strval(tmp);
						if(moneys < 1 || moneys > 99999) { SendClientMessage(playerid, COLOR_GREY, "   Fare price must be between $1 and $99999 !"); return 1; }
					    BusDrivers += 1; TransportDuty[playerid] = 2; TransportValue[playerid]= moneys;
					    GetPlayerName(playerid,sendername,sizeof(sendername));
	    				format(string, sizeof(string), "[Anuncio] Chofer de Bus %s Esta en Servicio, Tarifa: $%d.", sendername, TransportValue[playerid]);
	    				OOCNews(TEAM_GROVE_COLOR,string);
					}
					else
					{
					    SendClientMessage(playerid, COLOR_GREY, "   You are not the Driver !");
					    return 1;
					}
				}
				else
				{
				    SendClientMessage(playerid, COLOR_GREY, " / You are not in a TaxiBus !");
				}
			}
			else
			{
			    SendClientMessage(playerid,COLOR_GREY,"   You are not a Taxi / Bus Driver !");
			    return 1;
			}
	    }
	    return 1;
http://pastebin.com/fSL6R8zA

Me gustaria conocer la forma de arreglarlo a ser posible ya que por ahora, voy tirando quitando que la deuda no se valla con el jail...

Muchas gracias y buen dia.
Reply
#2

Buscб:

pawn Код:
if(TransportCost[playerid] > 0 && TransportDriver[playerid] < 999)
Y remplazб:

pawn Код:
SafeGivePlayerMoney(playerid, -TransportCost[playerid]);
por:

pawn Код:
new guita = GetPlayerMoney(playerid);
if(guita > TansportCost[playerid]) SafeGivePlayerMoney(playerid, -TransportCost[playerid]);
else if(guita < TransportCost[playerid]) SendClientMessage(playerid, COLOR_RED, "* No has podido pagar el servicio de taxis.");
Te quedarб algo asн ( digo 'algo asн' porque yo bajй un GM cualquiera para mirar nomбs el cуdigo que no pusiste. ):

pawn Код:
if(TransportCost[playerid] > 0 && TransportDriver[playerid] < 999)
{
    if(IsPlayerConnected(TransportDriver[playerid]))
    {
        TransportMoney[TransportDriver[playerid]] += TransportCost[playerid];
        TransportTime[TransportDriver[playerid]] = 0;
        TransportCost[TransportDriver[playerid]] = 0;
        format(string, sizeof(string), "~w~The ride cost~n~~r~$%d",TransportCost[playerid]);
        GameTextForPlayer(playerid, string, 5000, 1);
        format(string, sizeof(string), "~w~Passenger left the taxi~n~~g~Earned $%d",TransportCost[playerid]);
        GameTextForPlayer(TransportDriver[playerid], string, 5000, 1);
        PlayerInfo[playerid][pCash] = PlayerInfo[playerid][pCash]-TransportCost[playerid];
        new guita = GetPlayerMoney(playerid);
        if(guita > TransportCost[playerid]) SafeGivePlayerMoney(playerid, -TransportCost[playerid]);
        else if(guita < TransportCost[playerid]) SendClientMessage(playerid, COLOR_RED, "* No has podido pagar el servicio de taxis.");
        TransportCost[playerid] = 0;
        TransportTime[playerid] = 0;
        TransportDriver[playerid] = 999;
        PlayerPlaySound(playerid,1083,0.0,0.0,0.0);
    }
}
Y fijate. No entendн bien el problema, pero creo que es ese xD


EDITO: Igual esta no es la manera correcta de solucionarlo, pero no encuentro el lugar donde se suma el dinero a la variable. Voy a mirar un poco el GM y luego te vuelvo a contestar si encuentro lo que busco...
Reply
#3

Fijate en "OtherTimer":

pawn Код:
if(TransportTime[i] > 0)
            {//Taxi driver and passenger only
                if(TransportTime[i] >= 16)
                {
                    TransportTime[i] = 1;
                    if(TransportDriver[i] < 999)
                    {
                        if(IsPlayerConnected(TransportDriver[i]))
                        {
                            TransportCost[i] += TransportValue[TransportDriver[i]];
                            TransportCost[TransportDriver[i]] = TransportCost[i];
                        }
                    }
                }
                TransportTime[i] += 1;
                format(string, sizeof(string), "~r~%d ~w~: ~g~$%d",TransportTime[i],TransportCost[i]);
                GameTextForPlayer(i, string, 15000, 6);
            }
Y ponй para que ahн te quede asн:

pawn Код:
if(IsPlayerConnected(TransportDriver[i]))
{
    new guita = GetPlayerMoney(i);
    if(guita > TransportCost[i] + TransportValue[TransportDriver[i]])
    {
        TransportCost[i] += TransportValue[TransportDriver[i]];
        TransportCost[TransportDriver[i]] = TransportCost[i];
    }
    else if(guita < TransportCost[i] + TransportValue[TransportDriver[i]])
    {
        SendClientMessage(i, COLOR_RED, "* No tienes mбs dinero para pagarte.");
        SendClientMessage(TransportDriver[i], COLOR_RED, "* El cliente no tiene mбs dinero para pagarte.");
    }
}
Algo asн te quedarб:

pawn Код:
if(TransportTime[i] > 0)
            {
                if(TransportTime[i] >= 16)
                {
                    TransportTime[i] = 1;
                    if(TransportDriver[i] < 999)
                    {
                        if(IsPlayerConnected(TransportDriver[i]))
                        {
                            new guita = GetPlayerMoney(i);
                            if(guita > TransportCost[i] + TransportValue[TransportDriver[i]])
                            {
                                TransportCost[i] += TransportValue[TransportDriver[i]];
                                TransportCost[TransportDriver[i]] = TransportCost[i];
                            }
                            else if(guita < TransportCost[i] + TransportValue[TransportDriver[i]])
                            {
                                SendClientMessage(i, COLOR_RED, "* No tienes mбs dinero para pagarte el taxi.");
                                SendClientMessage(TransportDriver[i], COLOR_RED, "* El cliente no tiene mбs dinero para pagarte.");
                            }
                        }
                    }
                }
                TransportTime[i] += 1;
                format(string, sizeof(string), "~r~%d ~w~: ~g~$%d",TransportTime[i],TransportCost[i]);
                GameTextForPlayer(i, string, 15000, 6);
            }
Perdуn por el doble-post.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)