SA-MP Forums Archive
Problema de casas - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Problema de casas (/showthread.php?tid=606223)



Problema de casas - wharlos - 01.05.2016

Hola que tal. tengo un problemita con las casas que estoy creando, resuelta que cuando creo por ejemplo 3 casas y entro a cualquiera siempre salgo en la ultima casa que he creado. este es el cуdigo para entrar y salir

PHP код:
public OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    
#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    
if(PRESSED(KEY_SECONDARY_ATTACK))
    {
        for(new 
0MAX_CASAS; ++i)
        {
            if(
IsPlayerInRangeOfPoint(playerid1.0CasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]))
            {
                if(
CasaInfo[i][cPuerta]) return SendClientMessage(playeridCOLOR_BLANCO"No se puede entrar en una casa cerrada con llave.");
                
SetPlayerInterior(playeridCasaInfo[i][cInterior]);
                
SetPlayerVirtualWorld(playeridCasaInfo[i][cID] + 1;
                
SetPlayerPos(playeridCasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]);
                
SetPlayerFacingAngle(playeridCasaInfo[i][cIntA]);
            }
            else if(
IsPlayerInRangeOfPoint(playerid2.0CasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]))
            {
                
SetPlayerInterior(playerid0);
                
SetPlayerVirtualWorld(playerid0);
                
SetPlayerPos(playeridCasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]);
            }
        }
    }
    return 
1;




Respuesta: Problema de casas - Swedky - 02.05.2016

No serнa asн:

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    //#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
        for(new i = 0; i < MAX_CASAS; i++) // Tenнas un error en el bucle (tal vez)
        {
            if(IsPlayerInRangeOfPoint(playerid, 1.0, CasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]))
            {
                if(CasaInfo[i][cPuerta]) return SendClientMessage(playerid, COLOR_BLANCO, "No se puede entrar en una casa cerrada con llave.");

                SetPlayerInterior(playerid, CasaInfo[i][cInterior]);
                SetPlayerVirtualWorld(playerid, CasaInfo[i][cID] + 1;
                SetPlayerPos(playerid, CasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]);
                SetPlayerFacingAngle(playerid, CasaInfo[i][cIntA]);
                break; // Detener la bъsqueda de casas.
            }
            else if(IsPlayerInRangeOfPoint(playerid, 2.0, CasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]))
            {
                SetPlayerInterior(playerid, 0);
                SetPlayerVirtualWorld(playerid, 0);
                SetPlayerPos(playerid, CasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]);
            }
        }
    }
    return 1;
}



Respuesta: Problema de casas - wharlos - 02.05.2016

Sigue en lo mismo no entiendo que podrб ser, como estoy creando todo nuevo siempre me sale algo mal jaja


Respuesta: Problema de casas - Parka - 02.05.2016


1.- Si las casas tienen el mismo interior sucederб.

1.1)Ahн le estas diciendo que si estб en cierta posiciуn, lo teleporte.

Soluciуn: Asignarle un ID de mundo virtual a cada interior a si lo identificas de otra manera y no solamente por posiciones.

2.- Si las casas tienen el mismo Interior pero diferente mundo virtual sucederб.
2.1) Porque no estas declarando en la sentencia que "si esta en tal interior pase" entonces como
el interior es el mismo, las 3 casas tendran la misma salida, la ultima, sucede porque no rompes el bucle,
al no hacerlo el bucle seguirб buscando asн halla encontrado.

Soluciуn: Agregar a la sentencia el verificar en que mundo virtual se encuentra, y romper el bucle al encontrarlo.



Respuesta: Problema de casas - wharlos - 02.05.2016

Sobre el virtualworld no creo que sea ya que modifique que en el comando al crear una casa le asigne diferentes ID del vw, hice que al terminar de crear la casa mas el ID de la casa creada le asigne un + 25

Quote:

CasaInfo[houseid][cInteriorVW] = CasaInfo[houseid][cID] + 25;

Pero sobre tu soluciуn 2. no la entiendo bien


Respuesta: Problema de casas - Parka - 02.05.2016

Pues la soluciуn 2 mas o menos es esto:

pawn Код:
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
        for(new i=0; i < MAX_CASAS; i++)
        {
            if(IsPlayerInRangeOfPoint(playerid, 2.0, CasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]))
            {
                if(CasaInfo[i][cPuerta])
                    return SendClientMessage(playerid, COLOR_BLANCO, "No se puede entrar en una casa cerrada con llave.");

                SetPlayerInterior(playerid, CasaInfo[i][cInterior]);
                SetPlayerVirtualWorld(playerid, CasaInfo[i][cInteriorVW]);
                SetPlayerPos(playerid, CasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]);
                SetPlayerFacingAngle(playerid, CasaInfo[i][cIntA]);
                return 1;
            }
            else if(IsPlayerInRangeOfPoint(playerid, 2.0, CasaInfo[i][cIntX], CasaInfo[i][cIntY], CasaInfo[i][cIntZ]))
            {
                if(GetPlayerVirtualWorld(playerid) == CasaInfo[i][cInteriorVW])
                {
                    SetPlayerInterior(playerid, 0);
                    SetPlayerVirtualWorld(playerid, 0);
                    SetPlayerPos(playerid, CasaInfo[i][cPosX], CasaInfo[i][cPosY], CasaInfo[i][cPosZ]);
                    return 1;
                }
            }
        }
    }
}



Respuesta: Problema de casas - wharlos - 02.05.2016

Muchas gracias Parka, funciono! +1