_viTo_ 8 Odesláno: 26. Červen, 2021 Share Odesláno: 26. Červen, 2021 Zdravím, Právě pracuji na lokaci ve které se hráč právě nachází. Mám vytvořený TextDraw ale netuším jaké funkce tam patří. Mohu poprosit o Vaší pomoc ? Děkuji. #include <a_samp> new Text:LokaceTD; public OnFilterScriptInit() { LokaceTD = TextDrawCreate(47.000000, 333.000000, "Las Venturas AirPort"); TextDrawBackgroundColor(LokaceTD, 255); TextDrawFont(LokaceTD, 2); TextDrawLetterSize(LokaceTD, 0.160000, 0.699999); TextDrawColor(LokaceTD, -1); TextDrawSetOutline(LokaceTD, 1); TextDrawSetProportional(LokaceTD, 1); TextDrawSetSelectable(LokaceTD, 0); for(new i; i < MAX_PLAYERS; i ++) { if(IsPlayerConnected(i)) { TextDrawShowForPlayer(i, LokaceTD); } } return 1; } public OnFilterScriptExit() { TextDrawHideForAll(LokaceTD); TextDrawDestroy(LokaceTD); return 1; } public OnPlayerConnect(playerid) { TextDrawShowForPlayer(playerid, LokaceTD); return 1; } Link to comment Share on other sites More sharing options...
Scydo 397 Odesláno: 26. Červen, 2021 Share Odesláno: 26. Červen, 2021 (upraveno) Problém ale je, že OnFilterScriptInit() se ti vyvolá pouze jakmile se spustí FS(jestliže je to během restartu serveru, tak to ani nebude nikdo během toho na serveru )... To znamená, že nikomu dalšímu se ten textdraw nezobrazí. Takže, buď použí nějakou fci, která se často opakuje nebo se často stává, například OnPlayerUpdate... a nebo zkus použít můj nápad a vyvolat si jednosekundovou funkci, která se bude opakovat do skončení serveru: new OSecTimer; public OnFilterScriptInit() { OSecTimer = SetTimer("OnOneSecTimer", 1000, false); return 1; } public OnFilterScriptExit() { KillTimer(OSecTimer); // <--- !!!! return 1; } forward OnOneSecTimer(); public OnOneSecTimer() { OSecTimer = SetTimer("OnOneSecTimer", 1000, false); return 1; } Pak je to už snadné. Protože probíhá každou vteřinu tak můžeš i všechno zjistit každou vteřinou: forward OnOneSecTimer(); public OnOneSecTimer() { for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) { if (IsPlayerInRangeOfPoint(i, 5.0, x_pozice, y_pozice, z_pozice) { // Jestliže je někde v okolí: // (Rádius 5 je docela dost, i když se to nezdá) TextDrawShowForPlayer(i, LokaceTD); } } OSecTimer = SetTimer("OnOneSecTimer", 1000, false); return 1; } Edited 26. Červen, 2021 by Scydo 1 Link to comment Share on other sites More sharing options...
_viTo_ 8 Odesláno: 26. Červen, 2021 Author Share Odesláno: 26. Červen, 2021 No budu to házet do GM takže místo OnFilterScript Init (Exit) bude OnGameModeInit(Exit) Link to comment Share on other sites More sharing options...
DuFF 85 Odesláno: 27. Červen, 2021 Share Odesláno: 27. Červen, 2021 (upraveno) Ďalšia možnosť je použiť Streamer plugin, pomocou CreateDynamicRectangle vytvoriť zóny a používať callbacky OnPlayerEnterDynamicArea a OnPlayerLeaveDynamicArea. Ak to urobíš takto, môžeš si do zóny uložiť aj nejaké dáta - napríklad index do poľa s názvami zón. Potom by si nemusel vždy prechádzať zoznam všetkých zón na to, aby si zistil, do ktorej zóny hráč vošiel a aký text mu máš zobraziť. Toto by si docielil pomocou Streamer_SetArrayData a Streamer_GetArrayData (array kvôli tomu, že okrem indexu názvu zóny budeš ukladať aj iné informácie - napríklad unikátne ID scriptu, aby sa ti to nebilo s inými scriptami). Edited 28. Červen, 2021 by DuFF 2 Link to comment Share on other sites More sharing options...
DaNn 4 Odesláno: 30. Červen, 2021 Share Odesláno: 30. Červen, 2021 (upraveno) Nejsem si teď momentálně jistý, ale myslím si že stačilo udělat do OnPlayerSpawn " TextDrawShowForPlayer(playerid, LokaceTD); " A myslím si že vyřešené, než aby se tady je*at s tímto. :D Nějak takhle: Citace #include <a_samp> new Text:LokaceTD; public OnFilterScriptInit() { LokaceTD = TextDrawCreate(47.000000, 333.000000, "Las Venturas AirPort"); TextDrawBackgroundColor(LokaceTD, 255); TextDrawFont(LokaceTD, 2); TextDrawLetterSize(LokaceTD, 0.160000, 0.699999); TextDrawColor(LokaceTD, -1); TextDrawSetOutline(LokaceTD, 1); TextDrawSetProportional(LokaceTD, 1); TextDrawSetSelectable(LokaceTD, 0); for(new i; i < MAX_PLAYERS; i ++) { if(IsPlayerConnected(i)) { TextDrawShowForPlayer(i, LokaceTD); } } return 1; } public OnPlayerSpawn(playerid) { TextDrawShowForPlayer(playerid, LokaceTD); return 1; } public OnPlayerDisconnect(playerid) { TextDrawHideForPlayer(playerid, LokaceTD); return 1; } A vyřešeno Edited 30. Červen, 2021 by shiftnity 3 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now