Problema en los textdraw clikleables
#1

Buenas estoy haciendo un textdraw clikleable, el problema es que una vez que abri el textdraw toco la tecla "ESC" y no se puede marcar mas pero el textdraw sigue alli, que tengo que hacer para que se borre?
algo asi tengo los textdraw:
pawn Код:
new Text:teleportBox; // Definimos la caja como un textdraw
new Text:teleportLS; // Definimos la primera opcion como un textdraw
new Text:teleportSF; // Definimos la segunda opcion como un textdraw
new Text:teleportLV; // Definimos la tercera opcion como un textdraw

public OnGameModeInit()
{
    SetGameModeText("SP:RP");
   teleportBox = TextDrawCreate(320.000000, 143.000000, "~n~Destinaciones~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~_"); // Creamos el textdraw
   TextDrawAlignment(teleportBox, 2);
   TextDrawBackgroundColor(teleportBox, 255);
   TextDrawFont(teleportBox, 2);
   TextDrawLetterSize(teleportBox, 0.500000, 1.000000);
   TextDrawColor(teleportBox, -1);
   TextDrawSetOutline(teleportBox, 0);
   TextDrawSetProportional(teleportBox, 1);
   TextDrawSetShadow(teleportBox, 1);
   TextDrawUseBox(teleportBox, 1);
   TextDrawBoxColor(teleportBox, 255);
   TextDrawTextSize(teleportBox, 45.000000, 115.000000);

   teleportLS = TextDrawCreate(320.000000, 180.000000, "Aeropuerto~n~Los Santos"); // Creamos primera opcion
   TextDrawAlignment(teleportLS, 2);
   TextDrawBackgroundColor(teleportLS, 255);
   TextDrawFont(teleportLS, 2);
   TextDrawLetterSize(teleportLS, 0.260000, 0.799999);
   TextDrawColor(teleportLS, -1);
   TextDrawSetOutline(teleportLS, 0);
   TextDrawSetProportional(teleportLS, 1);
   TextDrawSetShadow(teleportLS, 1);

   teleportSF = TextDrawCreate(320.000000, 205.000000, "Aeropuerto~n~San Fierro"); // Creamos segunda opcion
   TextDrawAlignment(teleportSF, 2);
   TextDrawBackgroundColor(teleportSF, 255);
   TextDrawFont(teleportSF, 2);
   TextDrawLetterSize(teleportSF, 0.260000, 0.799999);
   TextDrawColor(teleportSF, -1);
   TextDrawSetOutline(teleportSF, 0);
   TextDrawSetProportional(teleportSF, 1);
   TextDrawSetShadow(teleportSF, 1);

   teleportLV = TextDrawCreate(320.000000, 230.000000, "Aeropuerto~n~Las Venturas"); // Creamos tercera opcion
   TextDrawAlignment(teleportLV, 2);
   TextDrawBackgroundColor(teleportLV, 255);
   TextDrawFont(teleportLV, 2);
   TextDrawLetterSize(teleportLV, 0.260000, 0.799999);
   TextDrawColor(teleportLV, -1);
   TextDrawSetOutline(teleportLV, 0);
   TextDrawSetProportional(teleportLV, 1);
   TextDrawSetShadow(teleportLV, 1);
    TextDrawSetSelectable(teleportBox, false); // No se puede clickear el textdraw
    TextDrawSetSelectable(teleportLS, true); // Se puede clickear
    TextDrawSetSelectable(teleportSF, true); // Se puede clickear
    TextDrawSetSelectable(teleportLV, true); // Se puede clickear
    return 1;
}
public OnPlayerConnect(playerid)
{
    TextDrawShowForPlayer(playerid, teleportBox); // Muestra la caja
    TextDrawShowForPlayer(playerid, teleportLS);  // Muestra la primera opciуn (LS)
    TextDrawShowForPlayer(playerid, teleportSF);  // Muestra la segunda opciуn (SF)
    TextDrawShowForPlayer(playerid, teleportLV);  // Muestra la tercera opciуn (LV)
    SelectTextDraw(playerid, 0xA3B4C5FF); // Le da permiso para clickear al jugador
    return 1;
}
public OnPlayerClickTextDraw(playerid,Text:clickedid)
{
    if(clickedid == teleportLS) return Texto(playerid, COLOR_BLANCO, "1");
    if(clickedid == teleportSF) return Texto(playerid, COLOR_BLANCO, "2");
    if(clickedid == teleportLV) return Texto(playerid, COLOR_BLANCO, "3");
    return 1;
}
Esto es de un tutorial, no pongo mi textdraw para evitar el plageo. Necesito q al tocar "ESC" se borre el textdraw en vez de no poder marcarlo
Reply
#2

Mira si esto te sirve: https://sampwiki.blast.hk/wiki/OnPlayerClickTextDraw

clickedid The ID of the clicked textdraw. INVALID_TEXT_DRAW if selection was cancelled.
Reply
#3

No lo logre tampoco, igual gracias. Alguna otra idea?
Reply
#4

pawn Код:
public OnPlayerClickTextDraw(playerid, Text:clickedid){
    if(Text:INVALID_TEXT_DRAW==clickedid) {SelectTextDraw(playerid, color);}
    //TU CODE
    return 1;
}
//recuerda que este metodo solo funciona para los textdraw globales.
Reply
#5

Quote:
Originally Posted by OTACON
Посмотреть сообщение
pawn Код:
public OnPlayerClickTextDraw(playerid, Text:clickedid){
    if(Text:INVALID_TEXT_DRAW==clickedid) {SelectTextDraw(playerid, color);}
    //TU CODE
    return 1;
}
//recuerda que este metodo solo funciona para los textdraw globales.
Eso harнa que una vez que se muestre no se pueda sacar, este cуdigo supongo que es mejor:
pawn Код:
//Arriba de todo, abajo de los includes
new bool:IsPlayerSelectingTextDraw[MAX_PLAYERS char], TextDrawSelectColor[MAX_PLAYERS];
stock SelectTextDrawEx(playerid, color)
{
    IsPlayerSelectingTextDraw{playerid} = true;
    TextDrawSelectColor[playerid] = color;
    SelectTextDraw(playerid, color);
}
stock OriginalSelectTextDraw(playerid, color) return SelectTextDraw(playerid, color);
#define SelectTextDraw SelectTextDrawEx
stock CancelSelectTextDrawEx(playerid)
{
    IsPlayerSelectingTextDraw{playerid} = false;
    TextDrawSelectColor[playerid] = 0;
    CancelSelectTextDraw(playerid);
}
#define CancelSelectTextDraw CancelSelectTextDrawEx

//Callback
public OnPlayerClickTextDraw(playerid, Text:clickedid){
    if(_:clickedid == INVALID_TEXT_DRAW && IsPlayerSelectingTextDraw{playerid}) {
        OriginalSelectTextDraw(playerid, TextDrawSelectColor[playerid]);
        return 1;
    }
    //Todo el resto de la callback
    return 1;
}
Esto harнa que si usas CancelSelectTextDraw se saliera, pero si el jugador presiona ESC para sacarlo, no lo deje y lo ponga nuevamente en la selecciуn de TextDraws.
Reply
#6

Quote:
Originally Posted by MugiwaraNoLuffy
Посмотреть сообщение
Eso harнa que una vez que se muestre no se pueda sacar, este cуdigo supongo que es mejor:
pawn Код:
//Arriba de todo, abajo de los includes
new bool:IsPlayerSelectingTextDraw[MAX_PLAYERS char], TextDrawSelectColor[MAX_PLAYERS];
stock SelectTextDrawEx(playerid, color)
{
    IsPlayerSelectingTextDraw{playerid} = true;
    TextDrawSelectColor[playerid] = color;
    SelectTextDraw(playerid, color);
}
stock OriginalSelectTextDraw(playerid, color) return SelectTextDraw(playerid, color);
#define SelectTextDraw SelectTextDrawEx
stock CancelSelectTextDrawEx(playerid)
{
    IsPlayerSelectingTextDraw{playerid} = false;
    TextDrawSelectColor[playerid] = 0;
    CancelSelectTextDraw(playerid);
}
#define CancelSelectTextDraw CancelSelectTextDrawEx

//Callback
public OnPlayerClickTextDraw(playerid, Text:clickedid){
    if(_:clickedid == INVALID_TEXT_DRAW && IsPlayerSelectingTextDraw{playerid}) {
        OriginalSelectTextDraw(playerid, TextDrawSelectColor[playerid]);
        return 1;
    }
    //Todo el resto de la callback
    return 1;
}
Esto harнa que si usas CancelSelectTextDraw se saliera, pero si el jugador presiona ESC para sacarlo, no lo deje y lo ponga nuevamente en la selecciуn de TextDraws.
de hecho si, yo lo utilizo con una variable por obvias razones,( me falto eso ).
saludos.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)