Problema de casas
#1

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;

Reply
#2

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;
}
Reply
#3

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


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.
Reply
#5

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
Reply
#6

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;
                }
            }
        }
    }
}
Reply
#7

Muchas gracias Parka, funciono! +1
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)