[Ayuda] Con Vehiculos Old School v2
#1

Hola buenas, necesito ayuda con los coches del gamemode Old School v.2, veran mi problema esque el ultimo coche que se compra en el catalogo no se guarda la posicion al reiniciar servidor.
Los demas coches si, quisiera saber si alguien tiene alguna solucion o conoce alguna manera de areglarlo



Gracias.
Reply
#2

el ultimo vehiculo te refieres al ultimo coche comprado o al ultimo en la lista de coches comprables?
Reply
#3

al ultimo coche comprado
Reply
#4

pon el comando de /comprarveh asi veo como lo tienes puesto

edito: que gm usas? el de OSRP u otro?
Reply
#5

Yo tenнa el mismo problema con el GM, no se guardaban bien las posiciones de los vehнculos (Me acuerdo muy poco). Lo solucionй modificando la funciуn que hace la consulta a la base de datos, que estaba mal. Creo que la funciуn es SaveCar
Reply
#6

prueba a poner esto en el comando de compra, definiendo el vehiculo como cocheid

pawn Код:
CarInfo[cocheid][cId] = cocheid;
CarInfo[cocheid][cModel] = datacar[tmpcar][dcIDModel];
CarInfo[cocheid][cLocationx] = Concesionarios[Conce][ctX];
CarInfo[cocheid][cLocationy] = Concesionarios[Conce][ctY];
CarInfo[cocheid][cLocationz] = Concesionarios[Conce][ctZ];
CarInfo[cocheid][cAngle] = 90.0;
CarInfo[cocheid][cColorOne] = color1;
CarInfo[cocheid][cColorTwo] = color2;
CarInfo[cocheid][cOwner] = sendername;
CarInfo[cocheid][cDescription] = cochenombre;
CarInfo[cocheid][cValue] = datacar[tmpcar][dcPrecio];
CarInfo[cocheid][cLicense] = 1;
CarInfo[cocheid][cOwned] = 1;
CarInfo[cocheid][cLock] = 0;
PD: algunos valores como description aparecen bug porque no se como arreglarlos
Reply
#7

Quote:
Originally Posted by PolloMC
Посмотреть сообщение
pon el comando de /comprarveh asi veo como lo tienes puesto

edito: que gm usas? el de OSRP u otro?
Utilizo Old School v.2

Comando: Comprarveh

Код:
if (strcmp("/comprarveh", cmd, true) == 0)
	{
	    cmd = strtokex(cmdtext,idx);
	    if (!strlen(cmd))
	    {
	        SendClientMessage(playerid, Blanco, "USO: /comprarveh [VehiculoID] [Color1] [Color2]");
	        return 1;
		}
		
		if(TimerConce == 1) { SendClientMessage(playerid, Rojo, "* Acaban de comprar un coche, espera mientras se guardan los datos..."); return 1; }
				
		if (EnCatalogoVeh[playerid] != NOEXISTE) { SendClientMessage(playerid, Rojo, "* Sal del catбlogo para comprar el vehiculo. (ENTER)"); return 1; }
		
		GetPlayerPos(playerid, PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z]);
		SetPlayerFacingAngle(playerid, 212.2497);
		SetCameraBehindPlayer(playerid);

		new tmpcar;
		tmpcar = strval(cmd);

		if ((PlayerInfo[playerid][pMember] == datacar[tmpcar][dcComprador])
				|| (datacar[tmpcar][dcMember] == 0))
		{
			if(datacar[tmpcar][dcIDModel] == 525)
			{
				if(PlayerInfo[playerid][pHabilidadMecanico] < 20)
				{
					SendClientMessage(playerid, Rojo, "* No tienes suficiente experiencia para conducir este tipo de vehiculos.");
					return 1;
				}
			}
			
			if(datacar[tmpcar][dcNivel] > GetPlayerLevel(playerid))
			{
				SendClientMessage(playerid, Rojo, "* Nivel insuficiente!");
                return 1;
			}
			
			if(PlayerInfo[playerid][pPCarKey][0] != NOEXISTE && PlayerInfo[playerid][pPCarKey][1] != NOEXISTE && PlayerInfo[playerid][pPCarKey][2] != NOEXISTE 
				&& PlayerInfo[playerid][pPCarKey][3] != NOEXISTE && PlayerInfo[playerid][pPCarKey][4] != NOEXISTE)
			{
				SendClientMessage(playerid, Naranja, "* Ya tienes todos los slots de llaves propias ocupados!");	
				return 1;
			}
				
			if(datacar[tmpcar][dcConcesionario] == GetPlayerConcesionario(playerid))
			{
				new Conce = GetPlayerConcesionarioEx(playerid);
				for(new i=0; i < TotalVeh; i++)
				{
					if(VehicleToPoint(10.0, i, Concesionarios[Conce][ctX], Concesionarios[Conce][ctY], Concesionarios[Conce][ctZ]))
					{
						SendClientMessage(playerid, Rojo, "* Hay un vehнculo en el punto de entrega, imposible entregar.");
	        			return 1;
					}
				}
			}
			else
			{
				SendClientMessage(playerid, Rojo, "* No disponemos de ese modelo, deberбs buscar en otro concesionario.");
	        	return 1;
			}
				
			if (SafeGetPlayerMoney(playerid) < datacar[tmpcar][dcPrecio])
			{
				SendClientMessage(playerid, Rojo, "* No llevas dinero suficiente. Vuelve en otro momento");
				return 1;
			}
			tmp = strtokex(cmdtext, idx);
			if(!strlen(tmp))
			{
			    SendClientMessage(playerid, Blanco, "USO: /comprarveh [VehiculoID] [Color1] [Color2]");
			    return 1;
			}
			new color1;
			color1 = strval(tmp);
			tmp = strtokex(cmdtext, idx);
			if(!strlen(tmp))
			{
			    SendClientMessage(playerid, Blanco, "USO: /comprarveh [VehiculoID] [Color1] [Color2]");
			    return 1;
			}

			new color2;
			color2 = strval(tmp);
			for(new i; i < MAX_PROPIOS; i++)
			{
				if(PlayerInfo[playerid][pPCarKey][i] == NOEXISTE)
				{
					PlayerInfo[playerid][pPCarKey][i] = CodigoLlave;
					break;
				}
			}

			SendClientMessage(playerid, Verde, "* Has comprado un nuevo vehнculo.");
			SendClientMessage(playerid, Amarillo, "* El vendedor te ha entregado las llaves (mira en /stats)");
			new Conce = datacar[tmpcar][dcConcesionario]-1;
			CreateLLLCar (playerid, tmpcar, Concesionarios[Conce][ctX], Concesionarios[Conce][ctY], Concesionarios[Conce][ctZ], 90.0, color1,color2); //autos
			SafeGivePlayerMoney(playerid, - datacar[tmpcar][dcPrecio]);
			TimerConce = 1;

			SetTimerEx("ResetearTimerConce",10000,0,"");
			SaveValues(playerid, "Coches");
			SaveValues(playerid, "CochesPrestados");
		}
		else
		{
		    SendClientMessage(playerid, Rojo, "* No puedes comprar este tipo de vehiculo");
		}
		return 1;
	}
Reply
#8

pues la verdad que ni idea, yo pensaba que habias pasado el catalogo de OSRP a un GM mas sencillo, pero de OSRP no entiendo casi nada, lo siento
Reply
#9

Hola, mira yo tambiйn pase por eso en OSRP v2 y lo que hice fue lo siguiente , no sй si sera lo mбs optimizado pero bueno me funciona.. debes ir a coches.inc y reemplazar las siguientes funciones

pawn Код:
Vehicle_OnPlayerExitVehicle(playerid, vehicleid)
{
    #pragma unused vehicleid
    new tmpcar;
    tmpcar = GetPlayerVehicle(playerid);
    CarInfo[tmpcar][cFixPos] = 1;
   
    TogglePlayerControllable (playerid, 1);
   
    if (CarInfo[tmpcar][cGPS] > -1  && GetPlayerVehicleSeat(playerid)==0)
    {
        new Float:X,Float:Y,Float:Z;
        GetVehiclePos(CarInfo[tmpcar][cId],X,Y,Z);
        SetPlayerMarkerForPlayer(CarInfo[tmpcar][cGPS], playerid, 0xFFFFFF00);
        SetPlayerCheckpoint(CarInfo[tmpcar][cGPS],X,Y,Z,8.0);
        PlayerInfo[CarInfo[tmpcar][cGPS]][pCheckpoint]=31;
    }
    FixVPos(tmpcar);
    return 1;
}

y luego

pawn Код:
forward FixVPos(tmpcar);
public FixVPos(tmpcar)
{
    if(CarInfo[tmpcar][cUsos] == 0 && !(strcmp(CarInfo[tmpcar][cOwner], "autoescuela", true) == 0))
    {
        print("Es un coche de civil, saquemos las coordenadas");
        GetVehiclePos(CarInfo[tmpcar][cId], CarInfo[tmpcar][cLocationx], CarInfo[tmpcar][cLocationy], CarInfo[tmpcar][cLocationz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cAngle]);
        SaveCar(tmpcar);
        new sql[256];
        GetVehiclePos(CarInfo[tmpcar][cId],CarInfo[tmpcar][cLocationx],CarInfo[tmpcar][cLocationy],CarInfo[tmpcar][cLocationz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cAngle]);
        format(sql, sizeof(sql), "UPDATE cars SET X=%f,Y=%f,Z=%f,A=%f,Vw=%d,Interior=%d WHERE id = %d",
        CarInfo[tmpcar][cLocationx],
        CarInfo[tmpcar][cLocationy],
        CarInfo[tmpcar][cLocationz],
        CarInfo[tmpcar][cAngle],
        CarInfo[tmpcar][cVw],
        CarInfo[tmpcar][cInt],
        CarInfo[tmpcar][cSQLID]);
        mysql_query(sql);
    }
    else
    {
        //print("No es un coche de civil, saquemos las coordenadas temporales");
        GetVehiclePos(CarInfo[tmpcar][cId], CarInfo[tmpcar][cTmpx], CarInfo[tmpcar][cTmpy], CarInfo[tmpcar][cTmpz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cTmpa]);
    }
    CarInfo[tmpcar][cFixPos] = 0;
    return 1;
}
Bueno asi lo tengo actualmente en mi servidor online y 0 drama, un saludo y espero que te haya servido
Reply
#10

Quote:
Originally Posted by MemoX
Посмотреть сообщение
Hola, mira yo tambiйn pase por eso en OSRP v2 y lo que hice fue lo siguiente , no sй si sera lo mбs optimizado pero bueno me funciona.. debes ir a coches.inc y reemplazar las siguientes funciones

pawn Код:
Vehicle_OnPlayerExitVehicle(playerid, vehicleid)
{
    #pragma unused vehicleid
    new tmpcar;
    tmpcar = GetPlayerVehicle(playerid);
    CarInfo[tmpcar][cFixPos] = 1;
   
    TogglePlayerControllable (playerid, 1);
   
    if (CarInfo[tmpcar][cGPS] > -1  && GetPlayerVehicleSeat(playerid)==0)
    {
        new Float:X,Float:Y,Float:Z;
        GetVehiclePos(CarInfo[tmpcar][cId],X,Y,Z);
        SetPlayerMarkerForPlayer(CarInfo[tmpcar][cGPS], playerid, 0xFFFFFF00);
        SetPlayerCheckpoint(CarInfo[tmpcar][cGPS],X,Y,Z,8.0);
        PlayerInfo[CarInfo[tmpcar][cGPS]][pCheckpoint]=31;
    }
    FixVPos(tmpcar);
    return 1;
}

y luego

pawn Код:
forward FixVPos(tmpcar);
public FixVPos(tmpcar)
{
    if(CarInfo[tmpcar][cUsos] == 0 && !(strcmp(CarInfo[tmpcar][cOwner], "autoescuela", true) == 0))
    {
        print("Es un coche de civil, saquemos las coordenadas");
        GetVehiclePos(CarInfo[tmpcar][cId], CarInfo[tmpcar][cLocationx], CarInfo[tmpcar][cLocationy], CarInfo[tmpcar][cLocationz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cAngle]);
        SaveCar(tmpcar);
        new sql[256];
        GetVehiclePos(CarInfo[tmpcar][cId],CarInfo[tmpcar][cLocationx],CarInfo[tmpcar][cLocationy],CarInfo[tmpcar][cLocationz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cAngle]);
        format(sql, sizeof(sql), "UPDATE cars SET X=%f,Y=%f,Z=%f,A=%f,Vw=%d,Interior=%d WHERE id = %d",
        CarInfo[tmpcar][cLocationx],
        CarInfo[tmpcar][cLocationy],
        CarInfo[tmpcar][cLocationz],
        CarInfo[tmpcar][cAngle],
        CarInfo[tmpcar][cVw],
        CarInfo[tmpcar][cInt],
        CarInfo[tmpcar][cSQLID]);
        mysql_query(sql);
    }
    else
    {
        //print("No es un coche de civil, saquemos las coordenadas temporales");
        GetVehiclePos(CarInfo[tmpcar][cId], CarInfo[tmpcar][cTmpx], CarInfo[tmpcar][cTmpy], CarInfo[tmpcar][cTmpz]);
        GetVehicleZAngle(CarInfo[tmpcar][cId], CarInfo[tmpcar][cTmpa]);
    }
    CarInfo[tmpcar][cFixPos] = 0;
    return 1;
}
Bueno asi lo tengo actualmente en mi servidor online y 0 drama, un saludo y espero que te haya servido
Muchas gracias Memox, me ha funcionado tu mйtodo, eres un crack, cuando tenga 50 mensajes te doy rep+, te la has ganado socio.

Solucionado.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)