PDA

View Full Version : Textdraw adatok


winczek1
18/07/2010, 07:28 PM
Üdv! Egy olyan problémám volna, hogy készítettem egy textdrawot és abba szeretném, hogy kiírja nekem hogy mennyi pénzem van, hányszor öltem, hányszor haltam és hogy épp milyen kocsiba ülök. Mindent jól beleraktam(legalábbis szerintem), de csak a %d -t írja ki. Hogy csináljam meg?



enum PlayerData
{
Kills,
Deaths,
pCar,
};
new PlayerInfo[MAX_PLAYERS][PlayerData];


public OnPlayerConnect(playerid)
{

textdraw = TextDrawCreate(1,430," /help /tele /colors ¨lžsek:%d Halalozasok:%d Pžnz:%d Kocsi:%s",PlayerInfo[playerid][Kills], PlayerInfo[playerid][Deaths],GetPlayerMoney(playerid),pCar);
// Float:PlayerInfo[playerid][Kills]/Float:pDeaths,
TextDrawUseBox(textdraw, 1);
TextDrawBoxColor(textdraw,0x00000066);
TextDrawFont(textdraw,1);
TextDrawShowForPlayer(playerid,textdraw);
TextDrawBackgroundColor(textdraw,0x00000066); //háttérszín
TextDrawColor(textdraw,0xFFFFFFAA); //szövegszín
TextDrawSetShadow(textdraw,2);;
TextDrawAlignment(textdraw,200);
return 1;
}

Valaki legyenszíves segítsen

Harry_Gaill
19/07/2010, 12:39 AM
new str[128];
format(str, sizeof str, " /help /tele /colors ¨lžsek:%d Halalozasok:%d Pžnz:%d Kocsi:%s",PlayerInfo[playerid][Kills], PlayerInfo[playerid][Deaths],GetPlayerMoney(playerid),pCar);

textdraw = TextDrawCreate(1, 430, str);

winczek1
19/07/2010, 04:52 AM
Beraktam, de a pénz: 0, a pCar-t, kicseréltem GetPlayerVehicleID(playerid)-re, és az is 0-t ír. Mit csináljak? (a textdrawba a kocsi:%s-t kicseréltem temrészetesen kocsi:%d-re)
És a többi adat se működik :S Írjon le valaki legyenszives egy konkrét ilyen textdrawot ami működik is :S Köszi

smeti
19/07/2010, 09:39 AM
Még szép hogy 0-t ír ki, alapból minden változónak 0 az értéke.
Ahhoz hogy ne 0-t írjon rendszeres időközönként (timer) fríssíteni kell a textdraw megjelenítendő információját.
TextDrawSetString (http://wiki.sa-mp.com/wiki/TextDrawSetString)
Mondjuk pont itt szereplő példa nem igazán mutatja hogy kellene használni!

A te példádban épp akkor jelenít meg egy textdraw kiírást mikor a játékos csatlakozik.
Azoknak a változóknak még semmi nem adott más értéket mit kellene mutatniuk?

Textdrawot általában nem szokás létrehozni játékos csatlakozáskor, gondolj bele, akárhányszor csatlakozik egy játékos mindig létre lesz hozva egy.
Az OnGameModeInit vagy OnFilterScriptInit alatt (attól függ FS vagy GM a script) szokás az ilyet létrehozni.
Majd elrejtés vagy megjelenítés függvényeket alkalmazunk.
TextDrawHideForPlayer (http://wiki.sa-mp.com/wiki/TextDrawHideForPlayer) elrejtés.
TextDrawShowForPlayer (http://wiki.sa-mp.com/wiki/TextDrawShowForPlayer) megjelenítés.

Nálam bevált módszer a 3 függvény együttes használata.
Ha épp egy változó textdrawot hozok létre ami természetesen rendszeres időközönként más adattal frissül.
A 3 függvényt egyszerre alkalmazom vagyis elrejtem a textdrawot megváltoztatom a megjelenítendő adatot majd megjelenítem.

TextDrawHideForPlayer(playerid, Textdraw[playerid]); // Elrejtés
format(bla, sizeof bla,"......",); // Az új adatok formázása
TextDrawSetString(Textdraw[playerid], bla); // Textdraw adatainak beállítása
TextDrawShowForPlayer(playerid, Textdraw[playerid]); // Megjelenítés

winczek1
19/07/2010, 05:29 PM
Fúúh nah ez nem lesz egyszerű xd

winczek1
19/07/2010, 05:38 PM
Király, hogy mindhármat alkalmaznom kell, de most hogy beraktam az OnGameModeInit alá, már meg se jeleníti a TD-t :S

Valaki írjon már egy konkrétot, mert így semmire se megyek :S

smeti
19/07/2010, 10:51 PM
Király, hogy mindhármat alkalmaznom kell, de most hogy beraktam az OnGameModeInit alá, már meg se jeleníti a TD-t :S

Valaki írjon már egy konkrétot, mert így semmire se megyek :S

Nem mondta senki hogy egyszerű, kísérletezgetni kell.

Írtam korábban egy példát itt a linkje:

http://forum.sa-mp.com/showpost.php?p=661989&postcount=11

Persze itt a textdraw elrejtés plusz funkció ami felesleges csak hát így indult az egész Thread.

És persze az igazi segítség a http://wiki.sa-mp.com/wiki/TextDrawCreate

winczek1
20/07/2010, 08:46 AM
sajnos ez a módszer se akar működni :( Próbáltam úgy, hogy ezt a textdrawot amit most linkeltél azt beraktam külön de az meg se jelenik...

smeti
20/07/2010, 09:54 AM
sajnos ez a módszer se akar működni :( Próbáltam úgy, hogy ezt a textdrawot amit most linkeltél azt beraktam külön de az meg se jelenik...

Másnak sikerült és nekem is.
Ha csak annyi a hozzá szólás hogy nem jó, ez se megy, az se megy, meg se jelenik, senki nem fog tudni segíteni.
Másold be ide úgy ahogy próbáltad alkalmazni (vagy küld el pmben és ha van egy kis időm megnézem).
És ott a SA-MP/wiki (http://wiki.sa-mp.com/wiki/Main_Page).

winczek1
20/07/2010, 10:28 AM
Úgy helyeztem be, ahogy a teáltalad írt script van. Ha berakom az OnGameModeInit vagy az OnFilterScriptInit alá, nem történik az ég világon semmi. Berakom az OnPlayerConnect alá teljesen ugyanazt a textdrawot, egyből meg is jeleníti. Már csak egy időzítő kellene, hogy frissüljön.

smeti
20/07/2010, 05:40 PM
Úgy helyeztem be, ahogy a teáltalad írt script van. Ha berakom az OnGameModeInit vagy az OnFilterScriptInit alá, nem történik az ég világon semmi. Berakom az OnPlayerConnect alá teljesen ugyanazt a textdrawot, egyből meg is jeleníti. Már csak egy időzítő kellene, hogy frissüljön.

Az OnGameModeInit alatt kell létrehozni a textdrawot.
Az OnPlayerConnect vagy OnPlayerSpawn vagy egy parancs által vagy épp egy timer segítségével ismétlődően (vagy nem ismétlődően) kell a TextDrawShowForPlayer-el játékosonként vagy TextDrawShowForAll függvénnyel az összes játékosnak megjeleníteni.

Megnéztem jobban azt a részt abból a részletből hiányzik egy dolog ami működteti az egészet, olvasd el az összes hozzá szólást a thread-ban.

Össze dobtam egyet hátha így könnyebben boldogulsz.

#include <a_samp>

new
Text:Text_Draw[MAX_PLAYERS],
TextDrawString[128]; // Ha több karaktert akarsz megjeleníteni a tetxdrawban nagyobb értéket írsz ide. Ha jól tudom 1024 karaktert tud megjeleníteni lehet többet lusta vagyok utána nézni.

forward
TextDraw_SetString_Timer(playerid);

public
// OnGameModeInit()
OnFilterScriptInit()
{
CreateTextDraw();
SetTimer("TextDraw_SetString_Timer", 1000, true);
return true;
}

stock
CreateTextDraw()
{
for(new i = 0, max_p = GetMaxPlayers(); i < max_p; i++)
{
Text_Draw[i] = TextDrawCreate(500.00, 310.00, " ");
TextDrawUseBox(Text_Draw[i], 1);
TextDrawFont(Text_Draw[i], 1);
TextDrawBoxColor(Text_Draw[i], 0xC0C0C0AA);
}
return true;
}

public
TextDraw_SetString_Timer()
{
for(new i = 0, max_p = GetMaxPlayers(); i < max_p; i++)
{
if(IsPlayerConnected(i))
{
TextDrawHideForPlayer(i, Text_Draw[i]);
format(TextDrawString, sizeof TextDrawString, "Teszt textdraw ~n~money: %d~n~score: %d", GetPlayerMoney(i), GetPlayerScore(i));
TextDrawSetString(Text_Draw[i], TextDrawString);
TextDrawShowForPlayer(i, Text_Draw[i]);
}
}
return true;
}