Tworzenie skryptów wykorzystujących polecenie +vstr

Twórcy gry oddali w ręce graczy składnię pozwalającą przypisywać klawiszom więcej niż jedną funkcję. Dzięki takiemu rozwiązaniu możemy tworzyć skrypty, w których klawisze same bindują inne przyciski, co pozwoli nam dodatkowo zaoszczędzić miejsce na klawiaturze.

Polecenia z plusem

Jak wiemy, przy pomocy konsoli i plików konfiguracyjnych możemy przypisywać klawiszom funkcje, które wywołujemy jednorazowo (tak jak w przypadku bindów radiowych), możemy też tworzyć toggle, czyli przełączniki (np. ukrywanie i pokazywanie minimapy, domyślnie klawiszem M). Oprócz nich istnieje jeszcze możliwość wywołania pożądanej akcji nie przez pojedyncze wciśnięcie klawisza, ale przez przetrzymanie go wciśniętego. Jako przykłady takich poleceń można wymienić akcje +attack (strzelanie), +scores (pokazywanie tabeli wyników), +speed (chodzenie zamiast biegania). Oprócz funkcji domyślnie wbudowanych w silnik gry, możemy przypisywać klawiszom własne, wyrażone funkcją set. Składnia, którą się posłużymy, wygląda następująco: 

bind X "+vstr WCISNIECIE PUSZCZENIE"

gdzie WCISNIECIE i PUSZCZENIE to nazwy akcji wywoływanych odpowiednio przez wciśnięcie i puszczenie klawisza X

Takie rozwiązanie stanowi dobrą propozycję, jeśli zostało nam mało wolnych klawiszy na klawiaturze, lub gdy obecna konfiguracja nie jest zbyt wygodna, a mamy jeden wolny klawisz w dobrym położeniu.

Przykłady skryptów z +vstr

Zoomin i zoomout pod jednym klawiszem

Nie każdy ma mysz z dodatkowymi przyciskami, nie dla każdego też korzystanie z osobnych przycisków do włączania i wyłączania zoomu jest wygodne. Stwórzmy bind, który po wciśnięciu wybranego klawisza włączy celownik optyczny, a puszczenie go powróci do normalnego widoku.

Interesujące nas akcje to ut_zoomin i ut_zoomreset. Polecenie +vstr wykonuje akcje sprowadzone wcześniej do wyrażenia set, nadajmy im zatem aliasy:

set ZOOM_ON "ut_zoomin"
set ZOOM_OFF "ut_zoomreset"

Niech klawiszem wywołującym zoom będzie prawy przycisk myszy, czyli MOUSE2:

bind MOUSE2 "+vstr ZOOM_ON ZOOM_OFF"

Gotowy skrypt wygląda zatem tak:

set ZOOM_ON "ut_zoomin"
set ZOOM_OFF "ut_zoomreset"
bind MOUSE2 "+vstr ZOOM_ON ZOOM_OFF"

Aby z niego skorzystać, musimy umieścić go w pliku konfiguracyjnym – możemy użyć do tego konsoli, pliku autoexec.cfg, nowego pliku konfiguracyjnego, lub po prostu dopisać w q3config.cfg.

Powyższy skrypt możemy dowolnie edytować – jeżeli często używamy G36, warto zmniejszyć nieco czułość myszy na czas korzystania z celownika optycznego:

set ZOOM_ON "ut_zoomin ; sensitivity 1"
set ZOOM_OFF "ut_zoomreset ; sensitivity 2"
bind MOUSE2 "+vstr ZOOM_ON ZOOM_OFF"

Wpisane tutaj wartości parametru sensitivity służą oczywiście jako przykład – 2 oznacza tu czułość, z jakiej korzystamy na co dzień, a 1 – czułość podczas trzymania wciśniętego MOUSE2. Możemy dodać jeszcze zmianę pola widzenia (cg_fov), co dodatkowo ułatwi nam celowanie z włączonym zoomem:

set ZOOM_ON "ut_zoomin ; sensitivity 1 ; cg_fov 90"
set ZOOM_OFF "ut_zoomreset ; sensitivity 2 ; cg_fov 100"
bind MOUSE2 "+vstr ZOOM_ON ZOOM_OFF"

Podobnie jak wyżej, wartości cg_fov musisz dobrać sam. Tu 90 oznacza pole widzenia z włączonym zoomem, a 100 – kiedy powrócimy do normalnego widoku.

Wybór ekwipunku przyciskami myszy

Stwórzmy skrypt, który ułatwi nam wybieranie, włączanie/wyłączanie i wyrzucanie przedmiotów z naszego ekwipunku. Wykorzystamy możliwość sprowadzania wielu akcji do jednego wyrażenia set i wywoływanie go z użyciem komendy +vstr.

Domyślne przypisanie akcji wymienionych powyżej nie jest zbyt wygodne – aby przewijać posiadane przedmioty trzeba przesunąć jedną rękę w okolice nawiasów kwadratowych, popatrzeć na klawiaturę i trafić w P lub - (znak minus). Załóżmy, że chcemy wykorzystać przyciski dostępne bez odrywania wzroku z ekranu, jednak szkoda nam najlepszych klawiszy na akcje, z których rzadko korzystamy. W moim przypadku będą to przyciski myszy (lewy, prawy oraz ruch rolki w górę i dół), które na czas wciśnięcia X będą kolejno wyrzucać przedmiot, włączać/wyłączać go i przewijać listę dostępnych (odpowiednio do tyłu i do przodu).

Standardowo używam ich w takiej konfiguracji (po dwóch ukośnikach możemy zapisać własne komentarze, które silnik gry zignoruje podczas wczytywania skryptu):

bind MOUSE1 "+attack” //strzelanie
bind MOUSE2 "ut_zoomin" //celownik optyczny broni, zwiększenie zoomu
bind MWHEELUP "ut_zoomreset ; ut_weaptoggle primary" //reset zoomu lub wybranie broni głównej
bind MWHEELDOWN "ut_weaptoggle secondary sidearm" //wybranie broni bocznej, a jeśli jej nie mam, pistoletu

Zbierzmy te wszystkie polecenia i zapiszmy je jako jedną akcję, stanowiącą zapis konfiguracji, do której chcemy powrócić po puszczeniu klawisza X:

set PUSZCZENIE "bind MOUSE1 "+attack” ; bind MOUSE2 "ut_zoomin" ; bind MWHEELUP "ut_zoomreset ; ut_weaptoggle primary" ; bind MWHEELDOWN "ut_weaptoggle secondary sidearm""

Zwróć uwagę na cudzysłowy – jedna para ogranicza całe wyrażenie, któremu nadajemy alias, poszczególne pary ograniczają funkcje przypisywane klawiszom w środku formuły (ma to szczególne znaczenie w przypadku MWHEELUP, któremu przypisujemy dwie funkcje – gdyby cudzysłowów nie było w ogóle, gra przypisałaby mu wykonanie tylko akcji ut_zoomreset, traktując ut_weaptoggle primary jako kolejne polecenie). Średnikami oddzielamy poszczególne części. Nie ma znaczenia, czy przed lub po średniku będzie spacja.

Mamy odpowiednio spreparowaną jedną akcję, pozostało nam zrobić to samo z drugą. Konfiguracja pożądana w czasie trzymania X przedstawia się następująco:

bind MOUSE1 "ut_itemdrop" //wyrzucenie przedmiotu
bind MOUSE2 "ut_itemuse" //włączenie lub wyłączenie przedmiotu
bind MWHEELUP "ut_itemprev" //poprzedni przedmiot
bind MWHEELDOWN "ut_itemnext" //następny przedmiot

Podobnie jak wcześniej, sprowadźmy wszystkie polecenia do jednej akcji:

set WCISNIECIE "bind MOUSE1 "ut_itemdrop" ; bind MOUSE2 "ut_itemuse" ; bind MWHEELUP "ut_itemprev" ; bind MWHEELDOWN "ut_itemnext""

Mamy już oba składniki, które podstawiamy do pierwszego wzoru:

bind X "+vstr WCISNIECIE PUSZCZENIE"

Teraz pozostało nam tylko zebrać dane niezbędne silnikowi gry do zrozumienia naszych intencji, zapisać całość jako plik *.cfg (lub dopisać do autoexec.cfg), a następnie modlić się, żeby konsola nie zwróciła informacji o błędzie po wczytaniu pliku ze skryptem.

set PUSZCZENIE "bind MOUSE1 "+attack" ; bind MOUSE2 "ut_zoomin" ; bind MWHEELUP "ut_zoomreset ; ut_weaptoggle primary" ; bind MWHEELDOWN "ut_weaptoggle secondary sidearm"” set WCISNIECIE "bind MOUSE1 "ut_itemdrop" ; bind MOUSE2 "ut_itemuse" ; bind MWHEELUP "ut_itemprev" ; bind MWHEELDOWN "ut_itemnext""
bind X "+vstr WCISNIECIE PUSZCZENIE"

Należy pamiętać o ustawieniu danych w porządku, w jakim powinien przeczytać je silnik gry. Skrypt zaczynamy od zadeklarowania akcji, które zostaną wywołane w dalszej części kodu. Można dodać na końcu polecenie wykonania akcji PUSZCZENIE (czyli dopisać vstr PUSZCZENIE), aby dla pewności na starcie wczytać domyślną konfigurację klawiszy, w tym konkretnie przypadku nie będzie to miało jednak żadnego znaczenia.

Można kwestionować funkcjonalność tego konkretnie skryptu, jako że akcje ut_itemdrop kevlar i ut_itemdrop flag powinniśmy mieć zbindowane tak czy inaczej, by zawsze być w stanie szybko pozbyć się kamizelki kuloodpornej lub flagi. Gra nie daje jednak możliwości włączenia/wyłączenia celownika laserowego (zmienia kolejność ułożenia przedmiotów na liście i akcja ut_itemuse często nie działa tak, jakbyśmy tego chcieli). Zamiast wykorzystywać polecenie +vstr mogliśmy stworzyć toggle – przełączanie konfiguracji jednym przyciskiem, jednak w tej sytuacji ryzyko przypadkowego wprowadzenia zmian jest zbyt duże.

Pobierz

Sam używam dwóch skryptów korzystających z dobrodziejstw +vstr. Jeden z nich pomaga mi wyrzucać, wedle życzenia, kamizelkę, apteczkę lub trzymaną aktualnie broń, a drugi dopasowuje gammę (rozjaśnienie) w grze.

Wyrzucanie elementów ekwipunku jednym przyciskiem [pobierz]

  • domyślnie ruch rolki w górę: wybranie broni głównej lub wyłączenie optyki, jeśli z niej w danej chwili korzystamy
  • domyślnie ruch rolki w dół: wybranie broni bocznej lub (gdy jej nie mamy) pistoletu 
  • wciśnięcie C: wyrzucenie kamizelki
  • wciśnięcie C + ruch rolki myszy w górę: wyrzucenie broni
  • wciśnięcie C + ruch rolki myszy w dół: wyrzucenie apteczki

Dopasowywanie jasności bez wchodzenia do menu [pobierz]

  • domyślnie ruch rolki w górę: wybranie broni głównej lub wyłączenie optyki, jeśli z niej w danej chwili korzystamy
  • domyślnie ruch rolki w dół: wybranie broni bocznej lub (gdy jej nie mamy) pistoletu 
  • wciśnięcie X + ruch rolki myszy w górę: rozjaśnienie obrazu
  • wciśnięcie X + ruch rolki myszy w doł: przyciemnienie obrazu

Należy pamiętać, że wartości użyte w skrypcie nie są uniwersalne i każdy powinien ustawić zakres jasności samemu (w moim przypadku wartości rozpinają się pomiędzy 1.10 a 1.76 ze skokiem co 0.02 – taki układ pozwala mi precyzyjnie dostosować jasność na każdej mapie). Jeżeli dotarłeś aż tutaj, nie powinieneś mieć problemu z modyfikacją tego skryptu.


Pamiętaj, by przed dokonaniem jakichkolwiek zmian zrobić kopię zapasową pliku q3config.cfg.

Obrazek użytkownika DFN
Autor tekstów, pomysłodawca, współautor i tester części funkcji portalu. W Urban Terror od dwóch lat.

O artykule:

Komentarze:

Obrazek użytkownika muuu
muuu, 9 lat temu

miodzio :*

#
Obrazek użytkownika DFN
DFN, 9 lat temu

W następnym odcinku: omijanie bana i przejmowanie kontroli nad konsolą RCON.

#
Obrazek użytkownika LemoNade
LemoNade, 9 lat temu

Fajnie opisane z tym, że większość bindów raczej nie przydatna. Ale zawsze można samemu pokombinować.

#
Obrazek użytkownika DFN
DFN, 9 lat temu

Zgadza się, bo „ciało” tekstu to tylko instrukcja mówiąca o tym, jak takie skrypty pisać. Użyteczne rozwiązania wrzuciłem do ostatniego akapitu. I uwierz mi, pisałem przez rok skrypty na wszystko, a tak naprawdę przydatny okazał się jeden, ten na wyrzucanie ekwipunku. Zdaję sobie jednak sprawę, że niektórzy przełączają configi, głosują w głosowaniach, wywołują je, zmieniają kolory celownika w zależności od drużyny, w której wylądowali… Komuś może się to przydać.

#

Polub tę stronę

Czy wiesz, że...?

Urban Terror w okresie wersji 3.1 do 3.7 było tworzone tylko przez dwójkę developerów.