02.07.2012, 06:01
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:
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.
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.