Posts: 5
Threads: 2
Joined: May 2018
Reputation:
0
Witajcie, mam problem w języku LUA. Ogólnie to chciałem napisać skrypt po którym po kliknięciu klawisza "F9" Otwierałaby mi się textura i tym samym klawiszem mógłbym ją zamknąć.
Po kliknięciu "F9" Texturka pojawia się normalnie, ale niestety gdy chce ją już zamknąć to nic się nie dzieje. Pomożecie? :b
Code: function OnGamemodeInit()
Enable_OnPlayerKey(1)
end
function OnPlayerKey(playerid, key_wl, key_wyl)
if key_wl == KEY_F9 then
local gui = CreateTexture(500,300,8000,7500,"Frame_GMPA.TGA");
ShowTexture(playerid,gui);
elseif key_wyl == KEY_F9 then
Enable_OnPlayerKey(0);
local key_wyl = HideTexture(playerid,gui);
HideTexture(playerid, key_wyl);
end
end
Załączam również zdjęcie jak to wygląda:
https://zapodaj.net/images/83a3d07ac6d81.png
Posts: 18
Threads: 0
Joined: Dec 2017
Reputation:
2
21.10.2018, 19:23
(This post was last modified: 21.10.2018, 19:27 by Hades.)
Code: function OnGamemodeInit()
Enable_OnPlayerKey(1)
end
local gui = CreateTexture(500,300,8000,7500,"Frame_GMPA.TGA");
local bool = false;
function OnPlayerKey(playerid, key)
if key == KEY_F9 then
if not bool then
ShowTexture(playerid, gui);
else
HideTexture(playerid, gui);
end
bool = bool not bool
end
end
Tak chyba działało to LUA
Tak w ogóle, to każdy gracz będzie miał taką samą wartość bool.
Na początek sugerowałbym uświadomić sobie, że to nie ta platforma, i tutaj jest język Squirrel.
Posts: 194
Threads: 22
Joined: Feb 2016
Reputation:
225
21.10.2018, 19:26
(This post was last modified: 21.10.2018, 19:28 by Patrix.)
Nie Hades, nie podziała xD.
1.To nie G2O, zmienna powinna być dla kilku graczy wyznaczona a nie dla każdego jedna
2.callback OnPlayerKey ma 3 argumenty, nie dwa, (pid, keyPressed, keyReleased)
Posts: 18
Threads: 0
Joined: Dec 2017
Reputation:
2
Jak nie podziała, jak podziała. to nie Squirrel, gdzie każdy argument musisz mieć. Wystarczy mu pressed.
Posts: 601
Threads: 29
Joined: Oct 2015
Reputation:
341
21.10.2018, 19:32
(This post was last modified: 21.10.2018, 19:51 by Profesores.)
Jakim cudem Ci się w ogóle wyświetla ta tekstura, przecież G2O ma zbindowanego squirrela, a nie lua XD
Taki żarcik
To co robisz nie ma sensu, przy wciśnięciu klawisza F9 tworzysz i wyświetlasz teksture, a ponieważ deklarujesz zmienną lokalną 'gui' w bloku funkcji OnPlayerKey ona przepada po wciśnięciu tego klawisza i nie możesz już potem na niej operować  Potem przy 'puszczeniu' F9 tj. zdjęciu palca z tego klawisza wyłączasz w ogóle event OnPlayerKey i od tego momentu on już nie reaguje na żadne klawisze XD W dodatku przypisujesz do zmiennej zawierającej id klawisza to co zwraca funkcja HideTexture (czyli nic) i ponownie wywołujesz funkcje HideTexture tym razem już nawet nie wiem z czym w drugim argumencie, prawdopodobnie z id klawisza, a powinno tam być id tekstury
Musisz się jeszcze trochę poduczyć ;-)
Trzymaj gotowca, ale zapoznaj się z tym co napisałem wyżej, to Ci może jedynie pomóc:
Lua local Player = {}; local gui = CreateTexture(500,300,8000,7500,"Frame_GMPA.TGA"); function OnGamemodeInit() Enable_OnPlayerKey(1); createPlayerStructure(); end function createPlayerStructure() for i = 0, GetMaxPlayers() - 1 do Player[i] = {}; Player[i].gui_state = 0; end end function resetPlayerStructure(playerid) Player[playerid].gui_state = 0; end function OnPlayerDisconnect(playerid, reason) resetPlayerStructure(playerid); end function OnPlayerKey(playerid, keyDown, keyUp) if keyDown == KEY_F9 then if Player[playerid].gui_state == 0 then ShowTexture(playerid,gui); Player[playerid].gui_state = 1; else HideTexture(playerid, gui); Player[playerid].gui_state = 0; end end end
Posts: 5
Threads: 2
Joined: May 2018
Reputation:
0
(21.10.2018, 19:32)Profesores Wrote: Jakim cudem Ci się w ogóle wyświetla ta tekstura, przecież G2O ma zbindowanego squirrela, a nie lua XD
Taki żarcik 
To co robisz nie ma sensu, przy wciśnięciu klawisza F9 tworzysz i wyświetlasz teksture, a ponieważ deklarujesz zmienną lokalną 'gui' w bloku funkcji OnPlayerKey ona przepada po wciśnięciu tego klawisza i nie możesz już potem na niej operować Potem przy 'puszczeniu' F9 tj. zdjęciu palca z tego klawisza wyłączasz w ogóle event OnPlayerKey i od tego momentu on już nie reaguje na żadne klawisze XD W dodatku przypisujesz do zmiennej zawierającej id klawisza to co zwraca funkcja HideTexture (czyli nic) i ponownie wywołujesz funkcje HideTexture tym razem już nawet nie wiem z czym w drugim argumencie, prawdopodobnie z id klawisza, a powinno tam być id tekstury 
Musisz się jeszcze trochę poduczyć ;-)
Trzymaj gotowca, ale zapoznaj się z tym co napisałem wyżej, to Ci może jedynie pomóc:
Code: local Player = {};
local gui = CreateTexture(500,300,8000,7500,"Frame_GMPA.TGA");
function OnGamemodeInit()
Enable_OnPlayerKey(1);
createPlayerStructure();
end
function createPlayerStructure()
for i = 0, GetMaxPlayers() - 1 do
Player[i] = {};
Player[i].gui_state = 0;
end
end
function resetPlayerStructure(playerid)
Player[playerid].gui_state = 0;
end
function OnPlayerDisconnect(playerid, reason)
resetPlayerStructure(playerid);
end
function OnPlayerKey(playerid, keyDown, keyUp)
if keyDown == KEY_F9 then
if Player[playerid].gui_state == 0 then
ShowTexture(playerid,gui);
Player[playerid].gui_state = 1;
else
HideTexture(playerid, gui);
Player[playerid].gui_state = 0;
end
end
end
Dziękuje, działa. Postaram się wyciągnąć z tego wnioski i się dostosować pod wszystko co napisałeś. Nauka na błędach zawsze pomaga, przynajmniej w moim wypadku
|