[Tutorial] [TUT] Checar Бrea Player
#1

Tutorial de Como Checar Бrea do player bom para proibir veiculos em tais lugares
Primeiramente Criamos a Funзгo que irб fazer para checar бrea do player

Ao Final GM:

pawn Код:
stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if (x > minx && x < maxx && y > miny && y < maxy) return 1;
return 0;
}
EXPLICAЗГO:
IsPlayerInArea -> Funзгo
playerid -> Player que sofre aзгo
Float:minx, Float:maxx, Float:miny, Float:maxy-> Argumento que podem ser usados
if (x > minx && x < maxx && y > miny && y < maxy) -> Compara Area do player

Agora Vamos Criar um Timer que Verifica Area do player
OnGameModeInit:
pawn Код:
SetTimer("CHECARAREA",true,1000);
EXPLICAЗГO:
SetTimer -> Iniciar Tempo
true -> Repete Timer
1000 ->Tempo
Agora a Public que o Timer Chamarб:
Final GM:
pawn Код:
forward CHECARAREA(playerid);
public CHECARAREA(playerid)
{
if(IsPlayerInArea(playerid, CORDENADAS) == true)
{
SendClientMessage(playerid,COR,"Kickado por estar em local de xister noob kkk");
Kick(playerid);
}
return 1;
}
EXPLICAЗГO:
if(IsPlayerInArea -> Checa бrea player
forward -> Declara Public adicionar
Kick -> Kick Player que estiver a area
SendClientMessage -> Envia Mensagem ao player

DICA:
Caso nгo sabes coodenada de cabeзa vai aqui:
http://forum.sa-mp.com/index.php?topic=82857.0
Ele faz o codigo para vocк
Tutorial Retirado do Blog Pawn SA:MP nгo permitido em outros blog sem autorizaзгo do autor
Reply
#2

No meu caso, como eu faria se eu quiser restringir digamos que toda a бrea do aeroporto de LS? como eu faria para fecha-la inteira..?
Atй aonde eu entendi o teu tutorial proнbe apenas um determinado local certo?

Abras
Reply
#3

ele sу vai Executar a aзгo somente na coordenada ?
Reply
#4

Muito bom mas tenho a mesma duvida que eles
Reply
#5

Quote:
Originally Posted by TheGarfield
ele sу vai Executar a aзгo somente na coordenada ?
sim, somente dentro daquela area, tipo

coordenada x maximo = 5000
coordenada x minimo = 4000
coordenada y maximo = 5000
coordenada y minimo = 4000

se tu estiver na coordenada
x = 4500
y = 4500
voзe й kickado
se estiver na
x = 3999
y = 3999
vocк nгo й kickado, resumindo, se a coordanada x onde vocк estб for superior a 4000 e inferior a 5000 e y for superior a 4000 e inferior a 5000 vocк й kickado caso contrario nгo aconteзe nada
tipo se estiver na
x = 4500
y = 3999
vocк nгo й kickado, porque a coordenada x й superior a 4000 e inferior a 5000 mas a coordenada y nao

espero ter ajudado


@TOPIC
Parabйns DraKoN tб muito bom
Reply
#6

valeu pelo apoio DJLoko
Reply
#7

ae drakon eu posso postar no meu blog ?
Reply
#8

E se no caso eu quisesse utilizar isso para proibir uma arma em um local/бrea, eu usaria assim?

Код:
forward CHECARAREA(playerid);
public CHECARAREA(playerid)
{
if(IsPlayerInArea(playerid, CORDENADAS) == true)
{
SendClientMessage(playerid,COR,"Vocк perdeu suas armas champz (Acho que perdeu)");
ResetPlayerWeapons(playerid); 
}
return 1;
}
Reply
#9

QueTal?
rs
pawn Код:
forward CHECARAREA(playerid);
public CHECARAREA(playerid)
{
if(IsPlayerInArea(playerid, CORDENADAS) == true)
{
SendClientMessage(playerid,COR,"Kickado por estar em local de xister noob kkk");
ResetPlayerWeapons(playerid);
}
return 1;
}
Provavelmente o SendClientMessage enviarб varias vezes
Reply
#10

Quote:
Originally Posted by DraKoNeoN
QueTal?
rs
pawn Код:
forward CHECARAREA(playerid);
public CHECARAREA(playerid)
{
if(IsPlayerInArea(playerid, CORDENADAS) == true)
{
SendClientMessage(playerid,COR,"Kickado por estar em local de xister noob kkk");
ResetPlayerWeapons(playerid);
}
return 1;
}
Provavelmente o SendClientMessage enviarб varias vezes
Mais para frente vou ver isso no meu GM й que o host ja estб pago e ainda falta algumas coisas, entгo vou deixar essas cosia para adicionar com o tempo. Aliбs, o que mudou do que eu coloquei para esse?
Reply
#11

a mensagem
Reply
#12

Quote:
Originally Posted by DJLoko™
a mensagem
LOL
Reply
#13

Quote:
Originally Posted by DJLoko™
a mensagem
Obvio que a mensagem (riariaira) digo no cуdigo.
Reply
#14

Quote:
Originally Posted by [NWD
Black_Alien ]
Quote:
Originally Posted by DJLoko™
a mensagem
Obvio que a mensagem (riariaira) digo no cуdigo.
mas eu disse "a mensagem", porque nao vi mais nenhuma diferenзa
Reply
#15

Vocкs Viram que eu dei 'rs,' risada para ironizar,ainda falei

QueTal?

Rs

A Mensagem pode estar enviado muita vezes tente criar outro coisa para enviar apenas 1x
Reply
#16

Quote:
Originally Posted by DraKoNeoN
QueTal?
rs
pawn Code:
forward CHECARAREA(playerid);
public CHECARAREA(playerid)
{
if(IsPlayerInArea(playerid, CORDENADAS) == true)
{
SendClientMessage(playerid,COR,"Kickado por estar em local de xister noob kkk");
ResetPlayerWeapons(playerid);
}
return 1;
}
Provavelmente o SendClientMessage enviarб varias vezes
deixa ver se eu entendi, se estiver aqui, irгo estar sempre a apareзer mensagens certo, enquanto la estiver vai estar sempre a aparecer a mensagem, isso significa que enche o ecra com mensagens em milesimos de segundos.
pode usar GameTextForPlayer (aco que й assim que escreve) e esse apareзe tal como o SendClientMessage, equanto vocк estiver la, mas pelo menos na enche o chat com a mesma mensagem milhentos de vezes
Reply
#17

cd creditos a quem criou a stock.....


Mt bom trabalho
Reply
#18

DraKoN kenga, me salva manolo, й o seguinte, eu atй criei um outro tуpico por que eu nгo achei esse. Mas aqui vai eu:

Quero que uma funзгo nгo funcione em uma determinada area, como eu faria? Para que sу na area definida essa funзгo nгo funcionasse? (A funзгo que me refiro й de prender o player se matar)

------------@EDIT

Esqueci jб consegui. Cara, a cada dia o SA:MP me surpreende mais. . .

-----------@EDITІ

Bom, testei agora, e o player morto, estб dando spawn em outro lugar ao invйs de dar spawn nos hospitais.

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(!IsPlayerInArea(killerid, 1076.198, 1210.226, 1154.294, 1372.684) == true)
{
    if(GetClosestHospital(playerid) == 0){
        SetSpawnInfo(playerid, 1, pap_CarregarInt(playerid, "Skin"), -2651.6501, 634.4510, 14.4531, 180.0000, 0, 0, 0, 0, 0, 0);
    }
    else if(GetClosestHospital(playerid) == 1){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),1173.5842,-1324.5615,15.1953,278.4624,0,0,0,0,0,0);
    }
    else if(GetClosestHospital(playerid) == 2){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),2031.9415,-1404.3578,17.2614,165.8180,0,0,0,0,0,0);
    }
    else if(GetClosestHospital(playerid) == 3){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),1582.5615,1768.7921,10.8203,93.7454,0,0,0,0,0,0);
    }
    SendClientMessage(playerid, COLOR_YELLOW, "[HOSPITAL]Os mйdicos do Hospital pъblico nгo lhe combraram nada!");
    pap_SalvarInt(playerid, "Dinheiro_banco", pap_CarregarInt(playerid, "Dinheiro_banco") - 0 );
    pap_SalvarInt(playerid, "Morreu", pap_CarregarInt(playerid, "Morreu") + 1 );


    if(Procurados[playerid] == 1){
    Procurados[playerid] = 0;
    Presos[playerid] = 1;
    pap_SalvarInt(playerid, "Preso", 1);
    LogarPlayer(playerid);
    }
 else{
        SendDeathMessage(killerid,playerid,reason);
        if (patd_PegarDinheiroJogador(playerid) > 0)  {
            SendClientMessage(playerid,COLOR_WHITE,"[HOSPITAL] Alйm disso, um assassino cara de pau robou toda sua grana,");
            SendClientMessage(playerid,COLOR_WHITE,"[HOSPITAL] enquanto vocк estava agonizando na beira da morte no chгo.");
            patd_ManipularDinheiro(killerid, patd_PegarDinheiroJogador(playerid));
            patd_ZerarDinheiroJogador(playerid);
        }

      }
    Preso[killerid] = 1;
    pap_SalvarInt(killerid, "Preso", 1);
    ResetPlayerWeapons(killerid);
    LogarPlayer(killerid);
    pap_SalvarInt(killerid, "Matou", pap_CarregarInt(killerid, "Matou") + 1 );
    }
    return 1;
}
Funciona perfeito, a nгo ser pelo fato do player morto na бrea dar spawn no mesmo lugar do comando /fianca, e nгo no spawn do hospital.

Alguйm sabe arrumar зabagaзa?
Reply
#19

ah, o chato eh q so tem X e Y mas nao tem a altura , pois a altura tambem definiria pois a pessoa pode estar de aviгo ai passa por cima da area sem fazer nada e eh kick ou ban, so isso mesmo.
IsPLayerInArea Eita comando util hein.
Reply
#20

Por que o Spawm de quem й morto dentro da area nгo estб sendo nуs hospitais, e sim, no spawm do comando /fianca

Code

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(!IsPlayerInArea(killerid, 1076.198, 1210.226, 1154.294, 1372.684) == true)
{
    if(GetClosestHospital(playerid) == 0){
        SetSpawnInfo(playerid, 1, pap_CarregarInt(playerid, "Skin"), -2651.6501, 634.4510, 14.4531, 180.0000, 0, 0, 0, 0, 0, 0);
    }
    else if(GetClosestHospital(playerid) == 1){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),1173.5842,-1324.5615,15.1953,278.4624,0,0,0,0,0,0);
    }
    else if(GetClosestHospital(playerid) == 2){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),2031.9415,-1404.3578,17.2614,165.8180,0,0,0,0,0,0);
    }
    else if(GetClosestHospital(playerid) == 3){
        SetSpawnInfo(playerid,1,pap_CarregarInt(playerid, "Skin"),1582.5615,1768.7921,10.8203,93.7454,0,0,0,0,0,0);
    }
    SendClientMessage(playerid, COLOR_YELLOW, "[HOSPITAL]Os mйdicos do Hospital pъblico nгo lhe combraram nada!");
    pap_SalvarInt(playerid, "Dinheiro_banco", pap_CarregarInt(playerid, "Dinheiro_banco") - 0 );
    pap_SalvarInt(playerid, "Morreu", pap_CarregarInt(playerid, "Morreu") + 1 );


    if(Procurados[playerid] == 1){
    Procurados[playerid] = 0;
    Presos[playerid] = 1;
    pap_SalvarInt(playerid, "Preso", 1);
    LogarPlayer(playerid);
    }
 else{
        SendDeathMessage(killerid,playerid,reason);
        if (patd_PegarDinheiroJogador(playerid) > 0)  {
            SendClientMessage(playerid,COLOR_WHITE,"[HOSPITAL] Alйm disso, um assassino cara de pau robou toda sua grana,");
            SendClientMessage(playerid,COLOR_WHITE,"[HOSPITAL] enquanto vocк estava agonizando na beira da morte no chгo.");
            patd_ManipularDinheiro(killerid, patd_PegarDinheiroJogador(playerid));
            patd_ZerarDinheiroJogador(playerid);
        }

      }
    Preso[killerid] = 1;
    pap_SalvarInt(killerid, "Preso", 1);
    ResetPlayerWeapons(killerid);
    LogarPlayer(killerid);
    pap_SalvarInt(killerid, "Matou", pap_CarregarInt(killerid, "Matou") + 1 );
    }
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)