Skocz do zawartości

Poradnik LUA dla początkujacych - część pierwsza


Vexnom
 Udostępnij

Rekomendowane odpowiedzi

Cześć! Postanowiłem że i ja napiszę swój poradnik, ponieważ umiem już w LUA trochę więcej niż podstawy, więc myślę że mogę to zrobić.

A więc tak, zaczynamy!

1. Uruchamiamy serwer lokalny

Na czymś musimy testować nasze zasoby, prawda? Istnieją dwie możliwości postawienia serwera lokalnego - przez zakładkę Host game w menu, lub uruchamiając aplikację MTA Server.exe. My skorzystamy z tego drugiego. Przechodzimy do katalogu w którym mamy zainstalowane MTA, a w nim do server. Tam uruchamiamy aplikację MTA Server.exe. Uruchomi nam się konsolka. Możemy przejść do MTA. Wchodzimy na serwer 127.0.0.0, jeśli nie będziecie mogli się połączyć, w katalogu z serwerem przejdzcie do mods/deathmach, otwórzcie plik mtaserver.conf, i znajdzcie następującą linijkę: (u mnie linia 12)

    <serverip>IP Mojego Serwera</serverip>

"IP Mojego Serwera" zamieniacie na Wasze IP, które możecie sprawdzić w ten sposób:

Windows XP: Wchodzicie w start, uruchom wpisujecie cmd, później ipconfig, wartość z pola Adres IPv4 jest Waszym IP. 
Windows Vista i wyżej: Wchodzicie w start, w pole wyszukiwania wpisujecie cmd, klikacie enter, wpisujecie ipconfig. Wartość z pola Adres IPv4 jest Waszym IP.

2. Tworzymy pierwszy zasób

Ok, to tak. Wracamy do katalogu z serwerem, i przechodzimy do mods/deathmach/resources. Tam tworzymy nowy folder, np. mojPierwszyZasob. Przechodzimy do folderu, i dodajemy w nim plik server.lua - będzie to nasz pierwszy plik. Następnie, tworzymy plik meta.xml, a w nim wpisujemy:

<meta>  
<info author="NaszNick" type="script" name="Nasz pierwszy zasób" />
<script src="server.lua" type="server" />
</meta>

W linijce

<script src="server.lua" type="server" />

dołączamy nasz zasób, oraz dajemy serwerowi informacje, jaka to ma być strona - dla strony serwera w sumie nie trzeba pisać type="server", ale ja napisałem to dla przykładu. Możemy także zamiast "server" wstawić "client", ale nasz zasób będzie po stronie serwera - więc tego nie robimy.

3. Funkcja

Funkcja, to podstawowa rzecz jaką musimy znać. 

Funkcję definiujemy za pomocą:

function naszaPierwszaFunkcja ()
-- zawartosc naszej funkcji
end

w LUA, zamiast klamer jak to mamy w innych językach, funkcję kończymy używając end, tak samo z warunkami IF, ale o tym w następnej części tutoriala.

Tak stworzoną funkcję możemy wywołać np. za pomocą event handlera. W miejscu naszaPierwszaFunkcja wpisujemy nazwę naszej funkcji.

3. Pierwsze linijki!

No więc tak, bo podejrzewam, że wolicie coś praktycznego niż przykłady których wprawie nie da się wykorzystać.

Zrobimy informację, o tym kto wszedł na serwer, lub kto z niego wyszedł.

addEventHandler("onPlayerJoin", getRootElement(), 
function ( )
outputChatBox(""..getPlayerName(source).." dołączył/a do serwera.", getRootElement(), 255, 000, 000)
end)


addEventHandler("onPlayerQuit", getRootElement(),
function ( reason )
outputChatBox(""..getPlayerName(source).." wyszedł/a z serwera ("..reason..")", getRootElement(), 255, 000, 000)
end)

No więc tak. Dlaczego getPlayerName(source)? Każda funkcja, a w naszym przypadku event, zwraca wartość source. W przypadku onPlayerJoin i onPlayerQuit source to element gracza który wszedł/wyszedł. Natomiast np. w przypadku onPlayerMarkerHit, source to element markera w który wszedł gracz. Dzięki temu możemy np. sprawdzić czy getElementData(source, "stacjaPaliwa") == true, jeśli tak to tankujemy pojazd - jeśli nie to nie robimy nic.

4. Komentarze

Komentarze to nie wątpliwe bardzo przydatne rzeczy. Są to po prostu jakieś dopiski do kodu, których serwer nie czyta.

Komentarze mogą nam się przydać np. do oznaczenia co robi dana funkcja, albo co przechowuje dana zmienna - przy większych projektach da się w tym pogubić.

Rozróżniamy dwa typy komentarzy:

1. jednoliniowy

Definiujemy go za pomocą '--'

Przykład:

local zmienna = 242 -- ta zmienna oznacza liczbe, ktora bede mnozyc

2. wieloliniowy

Definiujemy go za pomocą '--[[' a kończymy za pomocą ']]--'.

Przykład:

--[[

To jest moj pierwszy komentarz wieloliniowy
yeaaaaaaaaaaaaaaaah

]]--

5. Zmienne lokalne i globalne

Chwilka, zapędziłem się a nie wyjaśniłem Wam, co to zmienne.

No więc tak, zmienna to po prostu tak jakby schowek, do którego możemy coś schować np. cyfrę bądź liczbę. W LUA sytuację ze zmiennymi mamy ułatwioną o tyle, że nie musimy definiować, czy zmienna ta przechowuje cyfrę, czy liczbę.

Rozróżniamy dwa typy zmiennych:

Lokalną - Występuje tylko w pliku w którym została stworzona, lub jeśli została stworzona w warunku IF lub funkcji, to tylko wewnątrz warunku lub funkcji. 

Definiujemy ją za pomocą

local zmienna = 5242

Globalną - Występuje w całym zasobie, nie ma znaczenia czy stworzymy ją w funkcji czy też w warunku.

Definiujemy ją za pomocą:

zmienna = 4141

Czyli po prostu nazwy zmiennej, = i jej zawartość.

To na dziś wszystko, planuję także drugą część poradnika. Zapraszam do pisania sugestii, oraz konstruktywnej krytyki.

Odnośnik do komentarza
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
 Udostępnij

  • Najnowsze tematy

  • Ostatnio rozwiązane

    • Cześć. Sprawdź poniższe tematy z tabelką "Kontakt z Administracją":  Tabela "Kontakt z Administracją" dla stylu MyBB Trzeci kod na tabelkę "Kontakt z Administracją" pod MyBB Gotowy kod na "Kontakt z Administracją". Kontakt z Administracją + status Online - Offline [MyBB] Kontakt z Administracją w panelu bocznym A tutaj tabelka serwerów Counter Strike: Gotowa Tabela Serwerów CS pod MyBB Te wszystkie gotowce są przeważnie wyciągane z różnych styli i nie zawsze je tak łatwo dodać do innego. Trzeba zazwyczaj poprawić lekko kod pod swój motyw.
    • Cześć. Tak strona internetowa musi mieć informację iż wykorzystuje pliki cookies, najczęściej jest to wyskakujący baner na dole strony z przyciskiem "Zgadzam się". Oczywiście jeżeli Twoja strona nie wykorzystuje cookies to nie musisz umieszczać żadnego ostrzeżenia. Dodatkowo nie każdy rodzaj ciasteczek wymaga publikacji na stronie o ich wykorzystywaniu.  Ustawa wyłącza spod tego obowiązku ciasteczka o charakterze technicznym, czyli wykorzystywane między innymi przy rejestracji kont, logowaniu albo zapisywaniu towarów w koszyku sklepu internetowego. W Polsce przepis dotyczący stosowania plików cookies został umieszczony 22 marca 2013 roku w ustawie Prawo Telekomunikacyjne w art. 173 i brzmi on tak: Przechowywanie informacji lub uzyskiwanie dostępu do informacji już przechowywanej w telekomunikacyjnym urządzeniu końcowym abonenta lub użytkownika końcowego jest dozwolone, pod warunkiem że: abonent lub użytkownik końcowy zostanie uprzednio bezpośrednio poinformowany w sposób jednoznaczny, łatwy i zrozumiały, o:  celu przechowywania i uzyskiwania dostępu do tej informacji, możliwości określenia przez niego warunków przechowywania lub uzyskiwania dostępu do tej informacji za pomocą ustawień oprogramowania zainstalowanego w wykorzystywanym przez niego telekomunikacyjnym urządzeniu końcowym lub konfiguracji usługi; abonent lub użytkownik końcowy, po otrzymaniu informacji, o których mowa w pkt 1, wyrazi na to zgodę; (…) przechowywana informacja lub uzyskiwanie do niej dostępu nie powoduje zmian konfiguracyjnych w telekomunikacyjnym urządzeniu końcowym abonenta lub użytkownika końcowego i oprogramowaniu zainstalowanym w tym urządzeniu. Jest taki zapis w ustawie, ale dotyczy on bardziej dużych korporacji czy technologicznych gigantów jak Google czy Amazon.  Zgodnie z przepisami karnymi Prawa Telekomunikacyjnego (art. 209 ust. 1, pkt. 27 i art. 210) za brak informacji o ciasteczkach karę  pieniężną w drodze decyzji nakłada Prezes Urzędu Komunikacji Elektronicznej. Uwzględniając okoliczności i możliwości finansowe ukaranego podmiotu może nałożyć karę w wysokości do 3 % przychodu ukaranego podmiotu, osiągniętego w poprzednim roku kalendarzowym.  Jeżeli okres działania podmiotu jest krótszy niż rok kalendarzowy, za podstawę wymiaru kary przyjmuje się kwotę 500 000 złotych! Najłatwiej i najszybciej skorzystać z gotowych skryptów Javascript i zaimplementować je na swojej stronie.  Skorzystaj ze strony: Skrypt-cookies.pl albo ciasteczka.eu.
    • Musisz dodać kod HTML legendy grup w osobnej tabeli, bo dodałeś kod wewnątrz tabeli "WhosOnline" dlatego się rozjechało. Znaki zapytania wyświetlają się dlatego że w stylu masz zaimplementowaną nowszą wersję Font Awesome 5 a w kodzie legendy grup jest kod dla wersji 4.7. Przykładowo ten kod dla ikonki pół-gwiazdy nie zadziała na FA5 a zamiast ikonki będzie pokazywał się znak zapytania o którym wspomniałeś. <i class="fa fa-star-half-o" aria-hidden="true"></i> Poprawnym odpowiednikiem tej ikonki w nowej wersji jest: <i class="fas fa-star-half"></i> Jak widać w FA5 jest "fas" zamiast "fa" i zniknęło -o na końcu. Natomiast dla ikonek z logiem marek np. Steam czy Facebook zamist "fas" jest "fab" = Font Awesome Brand. Warto dodać że w FA5 wiele ikonek jest dostępnych tylko w wersji PRO więc nie zawsze znajdziesz dokładny odpowiednik, trzeba użyć najbardziej zbliżonej dostępnej ikonki. Myślę że wiesz już o co chodzi, bo są to naprawdę podstawy HTML.  Dobra, poprawiłem cały kod za Ciebie. Warto zadbać o to aby kod był czytelny czyli np. oddzielić sobie poszczególne komórki (td) wtedy łatwiej jest go zrozumieć i edytować. Dodatkowo nie widzę sensu dodawać stylu lokalnego (CSS) wewnątrz kodu HTML, przecież od tego jest właśnie arkusz styli, aby tam dodwać klasy i w razie czego edytować jedną klasę a nie tracić czasu na edycję kodu HTML. Przykładowo jeżeli chciałbyś teraz zmienić "padding-left" to musisz edytować to w każdym elemencie "span" a wystarczyłoby dodać nową klasę do global.css i operować tylko nią... ale mniejsza o to nie będę się czepiał 😛  Przejdź do szablonu index_boardstats, usuń cały dotychczasowy kod i wklej: {$forumstats} <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <thead> <tr> <td class="thead{$collapsedthead['boardstats']}"> <div><strong><span class="podkresleniestaty">{$lang->whos_online} </span><span class="podnapisstaty"> {$lang->online_note} </span></strong></div> </td> </tr> </thead> <tbody style="{$collapsed['boardstats_e']}" id="boardstats_e"> {$whosonline} </tbody> </table> <br /> <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder"> <td class="trow1" style="vertical-align:top;height:20%;margin:0 auto;width:13.5%;"> <span style="font-size:13px; color: red; text-shadow: 3px 3px 10px !important;font-weight:bold;">Administracyjne:</span><br> <br> <span class="rank_admin"><i class="fa fa-star"></i> Właściciel</span> <br> <span class="rank_viceadmin" style="padding-left: 10px;"><i class="fas fa-star"></i> Współwłaściciel</span> <br> <span class="rank_hadmin" style="padding-left: 10px;"><i class="fas fa-star" aria-hidden="true"></i> Administrator Forum</span> <br> <span class="rank_opforum" style="padding-left: 10px;"><i class="fas fa-star-half"></i> Opiekun Forum</span> <br> <span class="rank_mod" style="padding-left: 10px;"><i class="fas fa-cogs" aria-hidden="true"></i> Moderator</span><br> <span class="rank_ubt" style="padding-left: 10px;"><i class="fas fa-gavel"></i> UBTeam</span> <br> </td> <td class="trow1" style="vertical-align:top;height:20%;margin:0 auto;width:13.5%;"> <span style="font-size:13px; color: green; text-shadow: 3px 3px 10px !important;font-weight:bold;">Serwerowe:</span> <br><br> <span class="rank_wserwera" style="padding-left: 10px;"><i class="fas fa-shield-alt"></i> Właściciel Serwera</span> <br> <span class="rank_opiekun" style="padding-left: 10px;"><i class="fab fa-yelp"></i> Opiekun Serwera</span> <br> <span class="rank_madmin" style="padding-left: 10px;"><i class="fab fa-steam"></i> Multi-Admin</span><br> <span class="rank_aserwera" style="padding-left: 10px;"><i class="fab fa-steam"></i> Admin Serwera CS 1.6</span> <br> <span class="rank_ats" style="padding-left: 10px;"><i class="fas fa-microphone"></i> Admin Serwera TS3</span><br> <span style="font-weight: bold; color: #00ffff;"><i class="fab fa-steam" aria-hidden="true"></i>&nbsp;Admin Rezerwowy</span><br> <span style="text-shadow: 1px 1px 8px #FFCC00 ; font-weight: bold; color:#FFCC00 ;"><i class="fas fa-code" aria-hidden="true"></i>Technik Serwerów</span><br> <span style="text-shadow: 1px 1px 8px #FFCC00 ; font-weight: bold; color:#FFCC00 ;"><i class="fas fa-microphone"></i>Technik TeamSpeak</span> </td> <td class="trow1" style="vertical-align:top;height:20%;margin:0 auto;width:13.5%;"> <span style="font-size:13px; color: cyan; text-shadow: 3px 3px 10px !important;font-weight:bold;">Forumowe:</span> <br><br> <span class="rank_grafik" style="padding-left: 10px;"><i class="fas fa-paint-brush"></i> Grafik</span> <br> <span class="rank_redaktor" style="padding-left: 10px;"><i class="fas fa-edit"></i> Redaktor</span><br> <span class="rank_rfb" style="padding-left: 10px;"><i class="fab fa-facebook" aria-hidden="true"></i> Redaktor FanPage</span> </td> <td class="trow1" style="vertical-align:top;height:20%;margin:0 auto;width:13.5%;"> <span style="font-size:13px;color: purple; text-shadow: 3px 3px 10px !important;font-weight:bold;">Premium:</span> <br><br> <span class="rank_donator" style="padding-left: 10px;"><i class="fas fa-dollar-sign"></i> Donator</span><br> <span class="rank_premium" style="padding-left: 10px;"><i class="fas fa-star"></i> Premium</span><br> <span class="rank_weteran" style="padding-left: 10px;"><i class="fas fa-gem"></i> Zasłużony</span> </td> <td class="trow1" style="vertical-align:top;height:20%;margin:0 auto;width:13.5%;"> <span style="font-size:13px; color: white;text-shadow: 3px 3px 10px !important;font-weight:bold;">Podstawowe:</span> <br><br> <span class="rank_laska" style="padding-left: 10px;"><i class="fas fa-heart"></i> Kobieta</span> <br> <span class="rank_bywalec" style="padding-left: 10px;"><i class="fas fa-gem"></i> Bywalec</span><br> <span class="rank_user" style="padding-left: 10px;"><i class="fas fa-user"></i> Użytkownik</span> <br> </td> </table> <br />
×