[Ayuda] Problema con comando
#1

Hola,
tengo un comando para salir de un garaje que es /salirg, pero tiene varios bugs, el primero es: si no estas en la posiciуn correcta del garaje, o bien ni siquiera estas en un garaje y usas /salirg, te lleva al garaje con id 0.

Este es el comando:
Код:
	zcmd(salirg, playerid, params[])
	{
	    new tmpcar = GetPlayerVehicleID(playerid);
 		new key = PlayerInfo[playerid][pEntered];
 		if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
		{
		PlayerInfo[playerid][pEntered] = 0;
		SetPlayerVirtualWorld(playerid, 0);
		SetPlayerInterior(playerid, 0);
 		SetPlayerPos(playerid, HouseInfo[key][gEntrancex],HouseInfo[key][gEntrancey],HouseInfo[key][gEntrancez]);
		}else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
		{
		SetVehiclePos(tmpcar, HouseInfo[key][gEntrancex],HouseInfo[key][gEntrancey],HouseInfo[key][gEntrancez]);
		//SetVehiclePos(tmpcar, HouseInfo[key][gEntrancex],HouseInfo[key][gEntrancey],HouseInfo[key][gEntrancez]);
        SetVehicleVirtualWorld(tmpcar, 0);
		LinkVehicleToInterior(tmpcar, 0);
		PlayerInfo[playerid][pEntered] = 0;
		}
		return 1;
	}
Reply
#2

Asн prueba.

pawn Код:
zcmd(salirg, playerid, params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
    for(new id=1; id< MAXIMO_GARAJES; id++) // O como tengas tu la definiciуn de maximo de garajes.
        {
        if(IsPlayerInRangeOfPoint(playerid, 5, X, Y, Z)) //Las coordenadas del interior (Si estбs en estas coordenadas, te tepeara)
                {
            if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
            {
                PlayerInfo[playerid][pEntered] = 0;
                SetPlayerVirtualWorld(playerid, 0);
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
            }
            else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
            {
                SetVehiclePos(vehicleid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
                SetVehicleVirtualWorld(vehicleid, 0);
                LinkVehicleToInterior(vehicleid, 0);
                PlayerInfo[playerid][pEntered] = 0;
            }
        }
    }
    return 1;
}
Reply
#3

Para empezar, lo que tienes que plantearte es:
  • їEn quй garaje estas?
    Tienes que saber la ID del garaje en el que te encuentras, ha de haber alguna variable que almacena ese valor. Segъn yo lo veo, esa variable toma un valor en dos posibles ocasiones: cuando entras al garaje o bien cuando lo compras.

  • їPor quй te manda al garaje con la ID 0?
    Tal como yo veo esto: HouseInfo[key][gEntranceX/Y/Z], imagino que key = 0, entonces їpor quй? Tienes que averiguar ese fallo. їSeguro que la variable que va ahн es key?
Otra soluciуn no le veo, lo que dijo PandorumRoleplay tampoco estб mal del todo, pero conociendo los RPs dirнa que es muy pesado adaptar ese cуdigo. Lo mбs fбcil es averiguar lo que te dije.

Un saludo, y si encuentras algo, compбrtelo por aquн.
Reply
#4

Lo puse asн y me envнa a otra id que no es, se arreglo lo de si ponнa en cualquier parte me enviaba a la id 0, pero ahora si estoy en el lugar indicado me envнa a otra id, que no es la del garaje por donde entrй. O sea, entro en un garaje y salgo en otro.
Код:
zcmd(salirg, playerid, params[])
{
    new vehicleid = GetPlayerVehicleID(playerid);
	for(new id=1; id< MAX_HOUSES; id++) // O como tengas tu la definiciуn de maximo de garajes.
        {
		if(IsPlayerInRangeOfPoint(playerid, 5, -224.4683,1205.5029,-5.2358)) //Las coordenadas del interior (Si estбs en estas coordenadas, te tepeara)
    	        {
			if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
			{
				PlayerInfo[playerid][pEntered] = 0;
				SetPlayerVirtualWorld(playerid, 0);
				SetPlayerInterior(playerid, 0);
				SetPlayerPos(playerid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
			}
			else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
			{
				SetVehiclePos(vehicleid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
			    SetVehicleVirtualWorld(vehicleid, 0);
				LinkVehicleToInterior(vehicleid, 0);
				PlayerInfo[playerid][pEntered] = 0;
			}
		}
	}
	return 1;
}
Reply
#5

pawn Код:
zcmd(salirg, playerid, params[])
{
    for(new id = 0; id <  sizeof(HouseInfo); id++){
        if (IsPlayerInRangeOfPoint(playerid,3,HouseInfo[id][gInteriorX], HouseInfo[id][gInteriorY], HouseInfo[id][gInteriorZ]))
        {
            if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
            {
                PlayerInfo[i][pEntered] = 0;
                SetPlayerVirtualWorld(playerid, 0);
                SetPlayerInterior(playerid, 0);
                SetPlayerPos(playerid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
            }
            else if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
            {
                SetVehiclePos(vehicleid, HouseInfo[id][gEntrancex],HouseInfo[id][gEntrancey],HouseInfo[id][gEntrancez]);
                SetVehicleVirtualWorld(vehicleid, 0);
                LinkVehicleToInterior(vehicleid, 0);
                PlayerInfo[playerid][pEntered] = 0;
            }
        }
    }
    return 1;
}
їTienes la variable de Virtual World? Veo que usas ZC.
Reply
#6

Claro, porque la variable id del bucle for no coincide con la del garaje en el que te encuentras. Deberнas hacer lo que te dije, investigarlo, no buscar la soluciуn fбcil sin sentido.

EDIT: lo anterior es una posible soluciуn, aunque podrнa no cubrir todo el garaje debido a la distancia definida (ok, la aumentas). Aun asн, no estoy de acuerdo con ella, un bucle para este comando no lo recomiendo por cuestiones de optimizaciуn, tu verбs.
Reply
#7

Mi pregunta es.... їEstбs usando las variables de la casa con las del garaje?

Te recomendaria hacer un sistema de garajes aparte de el de la casa, diferente.
Reply
#8

Quote:
Originally Posted by [DOG]irinel1996
Посмотреть сообщение
Claro, porque la variable id del bucle for no coincide con la del garaje en el que te encuentras. Deberнas hacer lo que te dije, investigarlo, no buscar la soluciуn fбcil sin sentido.

EDIT: lo anterior es una posible soluciуn, aunque podrнa no cubrir todo el garaje debido a la distancia definida (ok, la aumentas). Aun asн, no estoy de acuerdo con ella, un bucle para este comando no lo recomiendo por cuestiones de optimizaciуn, tu verбs.
Creo que es este: new key = PlayerInfo[playerid][pEntered];
Reply
#9

Quote:
Originally Posted by Ivanlamega
Посмотреть сообщение
Creo que es este: new key = PlayerInfo[playerid][pEntered];
Muy bien, eso es un comienzo, ahora busca donde PlayerInfo[playerid][pEntered] toma el valor, imagino que al entrar. Me gustarнa ver el cуdigo que hace que el jugador entre al garaje.
Reply
#10

Quote:
Originally Posted by [DOG]irinel1996
Посмотреть сообщение
Muy bien, eso es un comienzo, ahora busca donde PlayerInfo[playerid][pEntered] toma el valor, imagino que al entrar. Me gustarнa ver el cуdigo que hace que el jugador entre al garaje.
Lo edite en el comentario de arriba
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)