Ayuda con esta Funciуn
#1

Muy Buenas tardes

Eh tratado de crear una pequeсa funciуn que detecte automбticamente cuando un jugador este cerca de un Auto, muestre un TextDraw, y si no esta cerca de un auto, lo esconda, lo tengo de esta manera:

pawn Код:
stock DetectarAuto(playerid)
{
new Float:v_PosX,
    Float:v_PosY,
    Float:v_PosZ,
    Modelo;
   
Modelo = GetPlayerVehicleID(playerid);

GetVehiclePos(Modelo, v_PosX, v_PosY, v_PosZ);
GetPlayerPos(playerid, Mostrar[playerid][CercaPos_X], Mostrar[playerid][CercaPos_Y], Mostrar[playerid][CercaPos_Z]);

Mostrar[playerid][CercaPos_X] = v_PosX;
Mostrar[playerid][CercaPos_Y] = v_PosY;
Mostrar[playerid][CercaPos_Z] = v_PosZ;

if(!IsPlayerInRangeOfPoint(playerid, 5.0, Mostrar[playerid][CercaPos_X], Mostrar[playerid][CercaPos_X], Mostrar[playerid][CercaPos_X])) return TextDrawHideForPlayer(playerid, AutoCerca[playerid]);
if(IsPlayerInRangeOfPoint(playerid, 5.0, Mostrar[playerid][CercaPos_X], Mostrar[playerid][CercaPos_X], Mostrar[playerid][CercaPos_X]))
{
    TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
}
    return true;
}
Esto lo tengo en OnPlayerUpdate, para que lo actualice automбticamente.
pawn Код:
DetectarAuto(playerid);
Pero no funciona, solo se muestra el TextDraw cuando entro en un Vehнculo, y se esconde cuando salgo.
Si alguien me puede ayudar, muchas gracias de Antemano.
Reply
#2

Intentб aumentando el radio en el que toma el auto... Igual ese cуdigo te darб un lag tremendo, OnPlayerUpdate es llamado hasta 15 veces por jugador en un segundo... No es recomendable hacer ese tipo de cosas, si lo quieres hacer de ъltima hazlo en un timer y no de un segundo, saludos!
Reply
#3

Quote:
Originally Posted by Goncho28
Посмотреть сообщение
Intentб aumentando el radio en el que toma el auto... Igual ese cуdigo te darб un lag tremendo, OnPlayerUpdate es llamado hasta 15 veces por jugador en un segundo... No es recomendable hacer ese tipo de cosas, si lo quieres hacer de ъltima hazlo en un timer y no de un segundo, saludos!
Ya eh intentado hacerlo le eh aumentado y nada...
Reply
#4

pawn Код:
for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
                result = i;counter++;
            }
        }
        switch(counter)
        {
            case 0:     {   SendClientMessage(playerid, -1, "No hay vehiculo cerca de ti.");    }
            case 1:
            {
                //Tu cуdigo
            }
            default:    SendClientMessage(playerid, -1, " Se ha detectado mas de un vehнculo cerca, acerquese mas a su vehнculo.");
        }
       
stock CheckPlayerDistanceToVehicle(Float:radi, playerid, vehicleid)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:PX,Float:PY,Float:PZ,Float:CX,Float:CY,Float:CZ;
        GetPlayerPos(playerid,PX,PY,PZ);
        GetVehiclePos(vehicleid, CX,CY,CZ);
        new Float:CDistance = (CX-PX)*(CX-PX)+(CY-PY)*(CY-PY)+(CZ-PZ)*(CZ-PZ);
        if(CDistance <= radi*radi)
        {
            return 1;
        }
    }
    return 0;
}
Reply
#5

Quote:
Originally Posted by Tirael
Посмотреть сообщение
pawn Код:
for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
                result = i;counter++;
            }
        }
        switch(counter)
        {
            case 0:     {   SendClientMessage(playerid, -1, "No hay vehiculo cerca de ti.");    }
            case 1:
            {
                //Tu cуdigo
            }
            default:    SendClientMessage(playerid, -1, " Se ha detectado mas de un vehнculo cerca, acerquese mas a su vehнculo.");
        }
       
stock CheckPlayerDistanceToVehicle(Float:radi, playerid, vehicleid)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:PX,Float:PY,Float:PZ,Float:CX,Float:CY,Float:CZ;
        GetPlayerPos(playerid,PX,PY,PZ);
        GetVehiclePos(vehicleid, CX,CY,CZ);
        new Float:CDistance = (CX-PX)*(CX-PX)+(CY-PY)*(CY-PY)+(CZ-PZ)*(CZ-PZ);
        if(CDistance <= radi*radi)
        {
            return 1;
        }
    }
    return 0;
}
Gracias, lo coloquй y funciona, pero, corregн unas cuantas variables que no estaban definidas, las puse, pero me lanza un warning:
pawn Код:
warning 204: symbol is assigned a value that is never used: "result"
Cуdigo:
pawn Код:
new result, counter;
for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
                result = i;counter++;
            }
        }
        switch(counter)
        {
            case 0:     {   TextDrawHideForPlayer(playerid, AutoCerca[playerid]);   }
            case 1:
            {
               TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
            }
            default:    SendClientMessage(playerid, -1, " Se ha detectado mas de un vehнculo cerca, acerquese mas a su vehнculo.");
        }
Lнnea del Warning:
pawn Код:
result = i;counter++;
PD: Cuando spawneo cerco de un vehнculo, me lanza como 5 mensajes seguidos diciendo: Se ha detectado mas de un vehнculo cerca, acerquese mas a su vehнculo.
Reply
#6

1- cambia switch(counter) por switch(result).
2- cambia result = i;counter++; por result = i,counter++, break;


saludos.
.
Reply
#7

Lo segundo no creo que vaya a funcionar, OTACON.
Reply
#8

pawn Код:
for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
AutoCerca[playerid] = i;
                TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
            }
        }
Reply
#9

Quote:
Originally Posted by Tirael
Посмотреть сообщение
pawn Код:
for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
AutoCerca[playerid] = i;
                TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
            }
        }
REVIVO TEMA

pawn Код:
new counter;
    for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
                counter++;
            }
        }
        switch(counter)
        {
            case 0:
            {
                TextDrawHideForPlayer(playerid, AutoCerca[playerid]);
                TextDrawShowForPlayer(playerid, Barra[0]);
                TextDrawShowForPlayer(playerid, Barra[1]);
            }
            case 1:
            {
                TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
                TextDrawHideForPlayer(playerid, Barra[0]);
                TextDrawHideForPlayer(playerid, Barra[1]);
            }
        }
Problema: Lo puse en OnPlayerUpdate, en un Timer de cada segundo, pero lo que sucede es que cuando ingresa al auto, sigue apareciendo el TextDraw que esta cerca de un auto, cuando deberнa desaparecer cuando ingresa al auto... Ya que tengo puesto otro textdraw cuando ingresa al Vehнculo, pero este, sigue apareciendo
Reply
#10

pawn Код:
new counter;
    for(new i; i != MAX_VEHICLES; i++)//En OnPlayerUpdate
        {
if(IsPlayerInAnyVehicle(playerid))                         
{
//cуdigo para retirar el textdraws
}
            new dist = CheckPlayerDistanceToVehicle(5.0, playerid, i);
            if(dist)
            {
                counter++;
            }
        }
        switch(counter)
        {
            case 0:
            {
                TextDrawHideForPlayer(playerid, AutoCerca[playerid]);
                TextDrawShowForPlayer(playerid, Barra[0]);
                TextDrawShowForPlayer(playerid, Barra[1]);
            }
            case 1:
            {
                TextDrawShowForPlayer(playerid, AutoCerca[playerid]);
                TextDrawHideForPlayer(playerid, Barra[0]);
                TextDrawHideForPlayer(playerid, Barra[1]);
            }
        }
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)