Semбforo Central LV -
ipsBruno - 02.07.2012
Como prometido aqui um filterscript bбsico de um semбforo
Em breve funзгo e include de adiciona-los
Include usada:
https://sampforum.blast.hk/showthread.php?tid=356010
Filterscript:
pawn Code:
new redGreen = 1;
new sinalVermelho = 0;
new Float:angleSinal;
public OnPlayerUpdate(playerid)
{
if(!IsPlayerConnected(playerid)) return false;
if(IsPlayerNPC(playerid)) return true;
/*
================
0 -> 89 (norte)
90 -> 179 (leste)
180 -> 269 (sul)
270 -> 359 (oeste)
===============
*/
GetPlayerFacingAngle(playerid, angleSinal);
static bool:enviada[MAX_PLAYERS];
// verificar se ele estб dentro da бrea da sinaleira
if(sinalVermelho) {
GameTextForPlayer(playerid, "Sinal ~r~Vermelho", 1000, 1);
}
else {
GameTextForPlayer(playerid, "Sinal ~g~Verde", 1000, 1);
}
if(!IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2) && sinalVermelho && gettime() - GetPVarInt(playerid, #sinaleiraPassada) < 10 && enviada[playerid] == true) {
SendClientMessage(playerid, -1, "Voce passou com a sinaleira vermelha (ou saio da pista). Caara");
enviada[playerid] = false;
}
if(IsPlayerInRangeOfLight(playerid, 2042.0878, 1283.0818, 2)) {
// verificar se o cara estб na posiзгo NORTE -> SUL (que й o sentido da nossa sinaleira)
if(300 > angleSinal > 160) {
// Verificar se estб logo abaixo da sinaleira. Nesta parte й aconselhбvel vocк checar se a velocidade do carro estб acima de 10 km/h
if(!enviada[playerid] && sinalVermelho) {
SetPVarInt(playerid, #sinaleiraPassada, gettime());
SendClientMessage(playerid, -1, "Sinal vermelho.");
enviada[playerid] = true;
}
}
}
return true;
}
public OnTrafficLightChange()
{
sinalVermelho = !!((redGreen++ - 1) % 3);
return true;
}
#define DEBUG_BRS
IsPlayerInRangeOfLight(playerid, Float:xmax, Float:ymax, sentido)
{
/*
Por Bruno da Silva
======================
sentido = 0 NORTE
sentido = 1 LESTE
sentido = 2 SUL
sentido = 3 OESTE
========================
y
y
xxxxyxxxxxx
y
y
ou
+
----+++++++
-
-
estar direзгo N = +y
estar direзгo S = -y
*/
static
Float:px, Float:py, Float:pz, Float:xmin, Float:ymin
;
GetPlayerPos(playerid, px, py, pz);
switch(sentido) {
// sul
case 2: ymin = ymax + 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;
// norte
case 0: ymin = ymax - 40.0, xmax = xmax + 5.0, xmin = xmax - 10.0;
/// leste e oeste nao testados, rachei a cuca pra fazer isto (burro '-')
/// nao testei para estes lados. funcao dificil, muito ABSTRATA
case 3: xmin = xmax + 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;
case 1: xmin = xmax - 40.0, ymax = ymax + 5.0, ymin = ymax - 10.0;
default: return false;
}
#if defined DEBUG_BRS
static executado;
// Criar GangZone da Sinaleira para dar DEBUG
// Sera criada uma gangzone BRANCA perto da sinaleira, na parte onde os jogadores vao esperar de carro
if(!executado) {
GangZoneShowForAll(GangZoneCreate(xmin, ymin, xmax, ymax),-1);
executado = 1;
}
#endif
return (px >= xmin && px <= xmax && py >= ymax && py <= ymin);
}
Semбforo fica no centro de LV. Jб coloco a print screen
Estou a quase 1 semana em dormir quase nada, estou meio cansado e nгo consegui pensar em alguma lуgica melhor para isto :/
As vezes pode bugar, mas isto й sу o cуdigo mesmo para checar se o jogador estб no semбforo. Nгo saia usando isto em seu servidor. Й PARA ESTUDOS.
A callback OnTrafficLightChange nгo й nada precisa, mas nгo achei jeito melhor. (sу adicionando objetos manualmente e deletando as sinaleiras atuais, mas como nгo mexo muito com jogo nгo vou fazer isto, quem quiser me passar as coordenadas para deletar todas sinaleiras e fazer eu prosseguir com o projeto, aн sim) ..
Portanto olhe o GameText para ver se o semбforo estб vermelho ou verde.
Re: Semбforo Central LV -
leonardo1434 - 02.07.2012
Serio mano, vocк tem uma cede de "codar" impressionante, bem queria ter isso. eu quando penso em inicia um projeto jб vem a preguiзa... penso no new.pwn.... penso no tempo que pode levar...
Por isso prefiro ficar sу no bбsic, ajudando os carinhas aqui do forum rsrsrsrsrs.
@esperando SS
@tou esperando um tutorial seu de como ter vontade de codar ! xD
Respuesta: Semбforo Central LV -
ipsBruno - 02.07.2012
Eu nгo testei isto de carro. Testei apй pois estou usando "GetPlayerFacingAngle"
Mas de qualquer forma. Isto й sу o ALGORITIMO. Nгo levem como um FILTERSCRIPT ao pй da letra !!
leonardo1434 testa ai se ele detecta quando passa na sinaleira vermelha. Mas olha se a sinaleira estб vermelha pelo game text nгo pela sinaleira pois parece que a include pode ser imprecisa algumas vezes. jб estou por arrumar isto.
foi a ss aн?
Re: Semбforo Central LV -
CidadeNovaRP - 02.07.2012
GetPlayerFacingAngle funciona em veнculo (acredito eu). Muito bom, mas pra que ver se o cara ta olhando pro sinal mano rs Sу ver se ele ta perto e se ta VERMELHO ou VERDE jб estб уtimo kk
Re: Semбforo Central LV -
paulor - 02.07.2012
Cara, eu uma vez tentei fazer isso, mas eu percebi que quando retirava os semбforos, as luzes ficavam lб, e entгo tentei ver se tinha algo para que eu podesse colocar como se fosse luz, mas nгo encontrei nenhum objeto que fizesse isso! Vou testar, e tbm verificar o CODE para ver a mбgica que vc fez!
Re: Semбforo Central LV -
ipsBruno - 02.07.2012
Quote:
Originally Posted by paulor
Cara, eu uma vez tentei fazer isso, mas eu percebi que quando retirava os semбforos, as luzes ficavam lб, e entгo tentei ver se tinha algo para que eu podesse colocar como se fosse luz, mas nгo encontrei nenhum objeto que fizesse isso! Vou testar, e tbm verificar o CODE para ver a mбgica que vc fez!
|
Estou terminando uma include com precisгo praticamente perfeita
.
Re: Semбforo Central LV -
DrTHE - 02.07.2012
Nunca vi algo parecido ^^
Re: Semбforo Central LV -
maikonk - 02.07.2012
Cara isso й muito doidera, daki uns dias vai ter muitos servidores RP usando esse sistema.
+ rep (;
Mas tipow, funciona o sinal amarelo nesse sistema ?
E tambem tive uma ideia, ainda mais para servidor de RP, depois que passar da meia noite o sinal fikar Piscando amarelo. '-'
Curti muito cara (y)
Re: Semбforo Central LV -
ipsBruno - 02.07.2012
http://forum.sa-mp.com/showthread.ph...03#post1959703
Olha aн :P
Acabo de atualizar com o novo cуdigo, mas atй a versгo final pode demorar dias, aquilo й apenas um esboзo para verem como estб ficando.
Re: Semбforo Central LV -
4LiSs0N - 04.07.2012
muito criativo parabens