[AJUDA] Mesmos interiores por locais diferentes?
#1

Galera, sei que todo mundo ja deve ter perecbido isso...

Vamos dar o exemplo da loja "Binco" que tem em todo San Andreas. Caso um player entre em uma loja Binco de LS e outro em uma loja Binco de LV, os dois vao ser ver no mesmo interior...

Eu nao quero fazer com que os players nunca se vejam dentro dos interiores atй pq isso seria facil...

Bom ai eu perguntei ao @Gustavo Araujo o que poderia ser feito... Bom ele falou que eu poderia fazer algo desse tipo:

pawn Код:
//OnPlayerInteriorChange


if(IsPlayerInRangeOfPoint(playerid,2.0,X,Y,Z) return SetPlayerVirtualWorld(playerid,1);
Minhas perguntas: Isso vai funcionar realmente? Sabendo que eu teria um trabalho do cгo pra pegar as entradas de toda San Andreas, Jб tem algum FS que ajeita isso pra toda San Andreas? Algum include?
Reply
#2

SetPlayerInterior
#EDIT FALTOU // ID de interiores
Posiзхes de Interiores

Boa sorte!
Reply
#3

Cara tu nao entendeu... Eu nao estou usando novos PickUps e sim os que ja tao no SA... Os amarelinhos... E ali em cima foi sу um exemplo... Eu nao preciso setar a posiзгo do interior... O player virtualWorld ja faz o que vc falou de setar o Interior...

Mais alguem?
Reply
#4

Entгo vocк quer retirar a entrada do interior amarelo pra colocar um pickup й?
Reply
#5

nгo eu quero tornar o amarelo correto e sem bugs... Ou seja quando o cara tiver entrando para um mesmo interior que outro cara, sendo que os dois partiram de coordenadas primarias diferentes, eles nao devem se ver no interior, ou seja VirtualWolrd diferente... Eu to testando uma coisa, mais acho eu vou precisar de ajuda pra fazer... ai eu ja ja posto aqui...
Reply
#6

Bom como eu disse eu precisaria de ajuda...

Eu bolei isso aqui:

pawn Код:
public OnPlayerInteriorChange(playerid,newinteriorid,oldinteriorid)
{      
    if (oldinteriorid == 0) // Ou seja se ele estiver indo do interior 0 que й o do cйu aberto para um interno  
    {
        new Float:x, Float:y, Float:z;
        GetPlayerPos(playerid, x, y, z);
   
        if(IsPlayerInRangeOfPoint(playerid,2.0, x, y, z)) // Com o o range de 2 eu posso evitar qualquer minuscula diferenзa na hora do player entrar.
        {
            // A ideia aqui й fazer alguma funзгo do tipo: Quando o cara entrar e se ele tiver dentro do range o virtual world dele deve ser setado para "m" sendo m um numero que й o resultado de x + a proximidade dele.      
        }
    }    
    if (newinteriorid == 0)    
    {    
        SetPlayerVirtualWorld(playerid,0);
    }
   
    return 1;
}
Ow eu nao to conseguindo expor direito minha idйia para a funзгo acima... Eu consigo mentalizar ela mais nao explicar direito... A idйia basica й acabar com aquilo de mesmo se o cara entrar em lojas da mesma marca porem em localidades diferentes do mapa, os caras nao se verem la dentro. O maior problema disso tudo, й que mesmas lojas tem o mesmo interiorid (pq o jogo foi pensado para SinglePlayer)... Ai dessa forma, pegando o range do cara na hora da entrada dele e setando o proprio mundo virtual o seu range ou o numero mais proximo do range, ele vai pra tal mundo virtual. Se outro carinha entao entrar numa mesma marca da loja em outra parte do mapa, eles vai deixar de se ver, pois as coordenadas de entrada sгo diferentes...
Reply
#7

Use VirtualWorlds e quando sair sete para -1.
Reply
#8

na cmd de entrar coloque um SetPlayerVirtualWorld(playerid, IDVirtual); assim eles nao se veram dentro do interior e nao cmd de sair coloque SetPlayerVirtualWorld(playerid, 0);

OBS: IDVirtual pode ser qualquer numero desde que ja nao exista um VirtualWorld com o msm numero.
Reply
#9

Gabriel nao rola, pq como eu disse eu quero que eles se vejam quando entrarem pelo mesmo local no interior. E Los sim isso й уbvio... Sу que ae eu teria de ir em todas entradas do Mapa inteiro... Por isso eu tava pensando em alguma funзгo que generalizasse tudo. Quando o player entrar, o virtualworld dele vai ser o X da corordenada... Sу que como esse X pode ser Negativo e decimal, sу fazer assim: Soma 4000 e depois multiplica por %65999 (uma forma em PWN e PHP de arredondar o numero...) Eu sу nao sei como utilizar o X do GetPlayerPos
Reply
#10

Por exemplo se eu fizer isso aqui:

pawn Код:
public OnPlayerInteriorChange(playerid,newinteriorid,oldinteriorid)
{      
    if (oldinteriorid == 0)    
    {
        new Float:x, Float:y, Float:z;        
        GetPlayerPos(playerid, x, y, z);
               
        SetPlayerVirtualWorld(playerid, (x+4000)%65999 );
        return 1;    
       
    }    
    if (newinteriorid == 0)    
    {    
        SetPlayerVirtualWorld(playerid,0);
    }
   
    return 1;
}
Ele da o seguinte erro: "error: 004: function "operator%(Float:,_:)" is not implemented"
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)