Skocz do zawartości

Ranking

Popularna zawartość

Treść z najwyższą reputacją w 11/11/20 w Odpowiedzi

  1. PanMaruda

    Tab Blocker

    jeżeli chodzi o blokowanie dopełniania argumentów to w pliku konfiguracyjnym spigot.yml musisz ustawić opcję tab-complete na -1 jeżeli chodzi o blokowanie dopełniania komend to trzeba będzie pewnie poszukać jakiegoś pluginu na necie - jest ich pełno - szukaj pod frazą 'minecraft commands completer / suggest commands / tab commands 1.16 plugin'
    2 punkty
  2. Kormic

    Drop itemów do ekwipunku

    Proszę, powinno pomóc. on break of chest: cancel drops if player has enough space for 1 chest: give player 1 chest else: drop 1 chest at event-block
    1 punkt
  3. Kormic

    Drop itemów do ekwipunku

    Proszę. Wymagany Skript 2.4+. on mine: if player has enough space for ("%event-block's type%" parsed as item): cancel drops add ("%event-block's type%" parsed as item) to player's inventory
    1 punkt
  4. a nie można do tego kodu na losowe tp jakos tego dopisać?
    1 punkt
  5. Kormic

    Skrypt na antylogout

    Nie mam na myśli komendy /setspawn... W jaki sposób są wytyczone granice spawnu?
    1 punkt
  6. Musisz do zmiennej gracza zapisać czas w sekundach do końca walki i to odliczać. Przy banowaniu musisz gracza wrzucić do jakiejś listy i przy dołączeniu sprawdzać czy ta lista zawiera gracza, jeżeli tak, to teleportujesz go w losowe miejsce na mapie i usuwasz go z wcześniej wspomnianej listy.
    1 punkt
  7. Podczas lekcji: poznasz sposób przygotowania środowiska i miejsca pracy od strony technicznej do pisania bota, poznasz poprawny sposób uruchamiania bota, poznasz pierwszy sposób reagowania przez bota na wpisane komendy. Mam nadzieje, że przygotowany przeze mnie materiał uda Ci się przyswoić w najlepszym dla ciebie stopniu i wspomoże Cię on na drodze do budowania swojego programistycznego imperium. Pierwszym etapem dzisiejszej lekcji będzie zainstalowanie silnika NodeJS, aby to wykonać należy: 1. Wejść na stronę https://nodejs.org/en/, która jest oficjalnym źródłem tego silnika 2. Wybrać jedną z wersji, ja polecam tą z dopiskiem Recommended For Most Users - jest to wersja stabilna doskonała dla większości użytkowników pod pisanie bota jest w zupełności wystarczająca. Następnie postępujemy według wskazań instalatora. 3. Aby sprawdzić czy instalacja przebiegła poprawnie należy w konsoli CMD pisać komendę npm -v, jeżeli odpowiedź zawiera wersje waszego silnika wszystko przebiegło poprawnie. (Zajrzyj poniżej jeżeli nie wiesz jak ją uruchomić) 4. Następnie wybieramy miejsce, w którym będzie znajdował się nasz bot. Ja wybrałem folder na pulpicie, Tobie również polecam stworzyć nowy folder, ponieważ bot będzie się składał z dużej ilości plików co jest jednoznaczne z tym, że zrobienie go w folderze, w którym już istnieją pliki będzie mocno utrudniało Ci prace. Następnie musimy uruchomić konsolę cmd z domyślną lokalizacją naszego folderu, który wybraliśmy na miejsce przyszłych plików bota. Robi się naciskając dwukrotnie na ścieżkę do lokalizacji folderu 5. Kolejnym krokiem jest zainicjowanie pliku package.json, w którym będą znajdywały się główne informacje o projekcie. Robimy to poleceniem npm init 6. Wypełniamy następnie odpowiednie wartości. W nawiasach okrągłych znajdują się odpowiedzi domyślne, które zostaną ustawione, jeżeli to pole to zostanie puste. (jeżeli nie wiesz jak wypełnić dane pole zajrzyj do spojlera poniżej) 7. Kolejną wymaganą do odwiedzenia przez nas stroną będzie https://discord.js.org/ 8. Możemy tam znaleźć komendę do zainstalowanej wcześniej konsoli npm. 9. Wpisujemy ją w tą samą konsole, co wcześniej polecenie npm init 10. Po kilku chwilach menadżer pakietów npm zainstaluje nam bibliotekę DiscordJS, z której będziemy korzystać podczas tworzenia bota. Kolejnym etapem będzie uruchomienie edytora kodu źródłowego, w którym będziemy tworzyć projekt. Ja z doświadczenia polecam VS code, które można pobrać ze strony https://code.visualstudio.com/, lecz można również użyć innych takich jak subline, ub nawet notepad++ (lecz w nim będzie dużo trudności) 11. Po zainstalowaniu wybranego przez nas edytora należy wpisać komendę code . co oznacza, że folder w którym się znajdujemy zostanie otwarty przez edytor VS code (jeżeli macie inny należy sprawdzić czy daje on możliwość otwarcia pełnego katalogu i jeżeli tak to w jaki sposób i postępujecie według tych wskazówek) Pierwszy punkt naszej lekcji uważam za zaliczony… Dużo teorii? Tak wiem, ale od teraz zaczynamy prawdziwą zabawę z kodem. Naszym dzisiejszym celem będzie stworzenie bota, który będzie podawał nam aktualną godzinne po wpisaniu komendy !czas, ale dość już tego przedłużania i zacznijmy kodowanie! Pierwszym krokiem jaki zrobimy to napiszemy podstawowy kod uruchamiający bota: const Discord = require('discord.js'); const bot = new Discord.Client(); bot.login(token); Ale co to w sumie jest? I skąd wziąć token? Takie dwa pytanie mogą narodzić się w Twojej głowie podczas patrzenie na ten kod już spieszę z wyjaśnieniami. Wpierw zajmiemy się pytaniem technicznym co oznaczają poszczególne linijki, a zrobię to w taki sposób: const Discord = require('discord.js'); /* Pobieramy domyślny obiekt do pobrania z biblioteki discord.js i przypisujemy je do zmiennej Discord */ const bot = new Discord.Client(); /* Tworzy naszego bota i przypisuje go do zmiennej bot */ bot.login(token); /* przypisuje specjalny tajny kod dostępu do naszego bota */ Najważniejszą zasadą przy tokenie jest to, że nie wolno go podawać publicznie ponieważ jest to taki login i hasło dla naszego bota i podając komuś ten token dajemy komuś dostęp do bota. Ale mówię tu o tym tokenie, a w sumie nie wiadomo jak stworzyć taki token… 1. Należy wejść na stronę https://discord.com/developers/applications jest to programistyczny panel platformy Discord, właśnie tam możemy stworzyć naszego bota. 2. Pierwszym krokiem panelu programisty jest utworzenie specjalnej aplikacji Discordowej, jest ona taką naszą strefą, dzięki której możemy programować używając specjalnych API – jest to specjalna bramka umożliwiająca niegraficzne połączenia z daną platformą, aktualnie bez API nie można zrobić poprawnie dużej platformy, zwłaszcza tak zaawansowanej jak Discord. 3. Kolejno musimy wybrać zakładkę BOT, a następnie klikamy Create bot, zostanie wtedy utorzona nam dodatkowa strefa, w której możemy pobrać informacje takie jak token. 4. Aby pozwolić nam podejrzeć token należy kliknąć w tekst Click to Reveal Token Oto krótki wizualny poradnik jak to zrobić: Okej nasz bot już istnieje możemy wkleić teraz token w odpowiednie miejsce: const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); /* Przypisujemy go używając znaku ' odpowiada on w JavaScripcie za tekst, który ignoruje jakiekolwiek nazwy zmiennych jeżeli przypadkiem pojawiły się w naszym tokenie */ (Tak, wiem udostępniłem właśnie Wam token do mojego bota lecz po opublikowaniu tej lekcji kod ten jest już zmieniony) Okej mamy już bota, mamy już token, ale jak wygenerować link, którym dodamy naszego bota na serwer? Już śpieszę z wyjaśnieniami. Najprostszym sposobem jest w panelu aplikacji wejście w zakładkę OAuth2, następnie w pierwszej liście zaznaczamy opcje bot, a na kolejnej pojawionej liście wybieramy permisje, które będą dostępne dla bota po dodaniu go generowanym linkiem. Ja z powodu, że jest to bot poradnikowy wybiorę permisje Administrator, czyli nadam botowi wszelkie permisje, lecz nie zawsze jest to wymagane, czasem wystarczy tylko wysyłanie wiadomości, albo dodawanie reakcji w zależności jakiego bota robimy, kolejno kopiujemy wygenerowany link, a następnie przeklejamy go do paska przeglądarki i postępujemy standardowo jak podczas dodawania bota, czyli wybieramy serwer (musimy na nim mieć dostęp do zarządzania serwerem) Poradnik graficzny: Nasz bot jest już gotowy do uruchomienia. No właśnie do uruchomienia, ale jak to zrobić? Istnieje wiele różnych sposobów na uruchamianie aplikacji pisanych w nodeJS, ale jeden z nich jest najwygodniejszy (a co najmniej w mojej opini) i właśnie go wam przedstawię, ale wracając do poradnik krok po kroku: 1. Wchodzimy w plik package.json 2. Następnie znajdujemy linijkę „test”: „echo \”Error: no test specified\” && exit 1” 3. Kolejno zamieniamy jej treść na: „start”: „node bot.js” ( „Start” w tym miejscu określa nazwę, skryptu możesz ją nazwać jak tylko chcesz, ale musi być ona zawarta w cudzysłowie, w miejscu bot.js powinieneś wpisać nazwę pliku głównego, którego nazwę zdefiniowałeś podczas tworzenia projektu poleceniem npm init) 4. Zapisujemy plik i w lewym dolnym rogu znajdujemy przycisk NPM SCRIPTS, a następnie klikamy w nasz skrypt Tym sposobem nasz bot już działa i można zauważyć że jego status jest aktywny, lecz nadal nie mamy od niego żadnego komunikatu. Dlatego teraz dodamy do naszego bota komunikat do konsoli, że został poprawnie uruchomiony. Oto kilka sposobów na stworzenie takiego kodu: const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); function ReadyFunction(){ console.log("Bot został poprawnie uruchomiony"); }; client.on('ready', ReadyFunction); const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); const ReadyFunction = () => { console.log("Bot został poprawnie uruchomiony"); }; client.on('ready', ReadyFunction); const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); client.on('ready', () => { console.log("Bot został poprawnie uruchomiony"); }); const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); const ReadyFunction = function(){ console.log("Bot został poprawnie uruchomiony"); }; client.on('ready', ReadyFunction); const Discord = require('discord.js'); const client = new Discord.Client(); client.login('Nzc1NjcxMDQ4ODEyNjI1OTMw.X6pt9Q.OOkUQp59J918Al274uZxicryBZU'); client.on('ready', function(){ console.log("Bot został poprawnie uruchomiony"); }); Ukazałem tu możliwość stworzenia tej akcji używając każdej z poznanych w poprzedniej części wariacji funkcji. Ja jak i większość programistów użyła by funkcji strzałkowej nieprzypisanej, którą ukazałem w środkowym kodzie i właśnie z nią będziemy pracować, lecz w żaden sposób nie zabraniam pisania w inny sposób. Jedną z ważnych zasad kodu JavaScript jest czytelność i jednolitość kodu, dlatego jakiej funkcji użyjecie leży po waszej stronie, lecz powinniście - aby zachować jednolitość składniową kodu - używać tej samej przez cały projekt. Funkcja wywołuje nam najprostsze, ale jednocześnie nieznane nam jeszcze zadanie czylo console.log("notka") obstawiam trudne nie jest do zgadniecie co to znaczy, jest to dokładnie wypisanie treści notki do konsoli jest to jedna z częstszych metod wyszukiwania błędów w JS czyli wypisywanie wartości do konsoli i szukanie, w którym momencie dzieje się coś co nie powinno się stać. Ostatnią rzeczą do omówienia w tym krótkim kodzie jest funkcja przypisania do opcji on w naszym bocie. Oznacza ona, że w momencie gdy zostanie wykonana akcja z pierwszego argumentu funkcji, ona sama wykona nam przypisaną w drugim funkcje. (Listę wszystkich dostępnych nazw akcji znajdziesz tutaj: https://discord.js.org/#/docs/main/stable/class/Client, znajduje się ona w liście events po kliknięciu w daną nazwę zostaniesz przeniesiony do strony opisującej działanie wraz z wypisem możliwych argumentów) Sprawdźmy czy po uruchomieniu działa: (Jeżeli twój wynik jest inny sprawdź czy nasz wszystko dobrze zapisane) Jak mamy już to gotowe wyłączmy naszego bota klikając ten śmietniczek Przejdźmy teraz do pisania naszej pierwszej komendy, użyjemy do tego eventu o nazwie message, wyglada on tak: client.on('message', ( msg ) => { }); Możemy zauważyć, że w przeciwieństwie do eventu ready, przekazuje on argument. Najczęściej argument ten jest zapisywany jako zmienna msg, dlatego ja również będę go tak nazywał. Z powodu, że funkcja ta jest funkcją strzałkową z jednym argumentem możemy użyć skróconej wersjii zapisu czyli: client.on('message', msg => { }); Obie te funkcje będą działały identycznie. Teraz powinniśmy sprawdzić jak tak naprawdę wygląda przekazywany nam obiekt, który widnieje w naszej funkcji pod nazwą msg, najprościej sprawdzimy to tak: client.on('message', ( msg ) => { console.log(msg) }); Wynik tego kodu jest taki: Message { channel: TextChannel { type: 'text', deleted: false, id: '775668209768071168', name: 'kanał1', rawPosition: 3, parentID: '775667827163004938', permissionOverwrites: Collection [Map] { '705028390205259886' => [PermissionOverwrites], '706164940557385738' => [PermissionOverwrites] }, topic: null, nsfw: false, lastMessageID: '775837008224190464', rateLimitPerUser: 0, lastPinTimestamp: null, guild: Guild { members: [GuildMemberManager], channels: [GuildChannelManager], roles: [RoleManager], presences: [PresenceManager], voiceStates: [VoiceStateManager], deleted: false, available: true, id: '705028390205259886', shardID: 0, name: 'Boty', icon: null, splash: null, discoverySplash: null, region: 'europe', memberCount: 6, large: false, features: [], applicationID: null, afkTimeout: 300, afkChannelID: null, systemChannelID: null, embedEnabled: undefined, premiumTier: 0, premiumSubscriptionCount: 0, verificationLevel: 'NONE', explicitContentFilter: 'DISABLED', mfaLevel: 0, joinedTimestamp: 1605005303568, defaultMessageNotifications: 'ALL', systemChannelFlags: [SystemChannelFlags], maximumMembers: 250000, maximumPresences: null, approximateMemberCount: null, approximatePresenceCount: null, vanityURLCode: null, vanityURLUses: null, description: null, banner: null, rulesChannelID: null, publicUpdatesChannelID: null, preferredLocale: 'en-US', ownerID: '319161845220900864', emojis: [GuildEmojiManager] }, messages: MessageManager { cacheType: [Function: LimitedCollection], cache: [LimitedCollection [Map]], channel: [Circular] }, _typing: Map {} }, deleted: false, id: '775837008224190464', type: 'DEFAULT', system: false, content: 'Wiadomość testowa', author: User { id: '319161845220900864', system: false, locale: null, flags: UserFlags { bitfield: 64 }, username: 'wiktoor123', bot: false, discriminator: '0439', avatar: '667ac96c2b090fd60a80a80836c0e5d3', lastMessageID: '775837008224190464', lastMessageChannelID: '775668209768071168' }, pinned: false, tts: false, nonce: '775837009607393280', embeds: [], attachments: Collection [Map] {}, createdTimestamp: 1605044357115, editedTimestamp: 0, reactions: ReactionManager { cacheType: [Function: Collection], cache: Collection [Map] {}, message: [Circular] }, mentions: MessageMentions { everyone: false, users: Collection [Map] {}, roles: Collection [Map] {}, _members: null, _channels: null, crosspostedChannels: Collection [Map] {} }, webhookID: null, application: null, activity: null, _edits: [], flags: MessageFlags { bitfield: 0 }, reference: null } Możemy z tego wyczytać, że jest to obiekt składający się z wielu innych obiektów, ale niech was to nie przeraża nie jest to trudne i przebrniemy przez to razem. Wiadomość, którą wysłałem wyglądała tak: Dlatego wiemy już, że jej treść musi mieć wartość Wiadomość testowa. Odnajdźmy ją teraz w tym dużym obiekcie powyżej... (znajduje się w 74 linijce) Po chwili poszukiwań uda nam się ją znaleźć. Możemy zauważyć, że nie należy ona do innego obiektu, dlatego wystarczy, że odwołamy się do niej za pomocą msg.NAZWA, a za nazwę wstawimy nazwę tego parametru czyli content, poprawny kod wygląda teraz tak: client.on('message', msg => { console.log(msg.content) }); Dzięki niemu po napisaniu jakiejkolwiek wiadomości otrzymamy jej treść w konsoli: Teraz musimy użyć wyrażenia warunkowego jakim jest IF, jego składnia wygląda tak: if(warunek){ //To co jest wykonywane jeżeli warunek jest prawdą } Warunkiem jaki dziś użyjemy jest warunek równa się, czyli będzie on sprawdzał czy obie dane są równe. Taki typ warunku oznacza się dwoma znakami równości. Kod z jego użyciem będzie wyglądać tak: client.on('message', msg => { if(msg.content == "!czas"){ console.log("Warunek został spełniony") } }); Log w konsoli zostanie wyświetlony tylko w przypadku gdy użytkownik napisze !czas. Teraz przyszedł czas na odpisywanie wiadomości przez bota. Zrobimy to w taki sposób: client.on('message', msg => { if(msg.content == "!czas"){ msg.reply("Wykonałeś polecenie") } }); Oto wynik tego kodu: Ostatnim elementem kodu będzie użycie specjalnej funkcji Data, dzięki której w łatwy sposób możemy pobrać godzine. (dokumentacje tej metody dla ciekawskich znajdziesz tutaj: https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Obiekty/Date/getTime) Kod z użyciem tej funkcji wygląda tak: client.on('message', msg => { if(msg.content == "!czas"){ const data = new Date; const godzina = data.getHours; const minuta = data.getMinutes; const sekunda = data.getSeconds; msg.reply(`aktualna godzina: ${godzina}:${minuta}:${sekunda}`); } }); Jak widać aby połączyć te 3 zmienne wraz z tekstem w jeden ciąg użyliśmy znaku ` - Grawis (ten ukośny apostrof znajdujący się na klawiaturze pod klawiszem ESC) - , a same zmienne zdefiniowaliśmy w nawiasach klamrowych poprzedzonych znakiem dolara tym sposobem stworzyliśmy Temple Stringi, w których możemy użyć jakiego chcemy sformułowania z JS i będzie on przekształcony w stringa, a następnie połączony z ciągiem znaków. Użycie tego kodu wygląda tak: To koniec na dzisiaj. Mam nadzieje, że dzisiejsza lekcja była łatwa do zrozumienia, a przyswojona dzisiaj wiedza zostanie w waszych umysłach na długo. Chciałbyś bym omówił coś dokładniej, albo masz inne zastarzenia co do dzisiejszej jak i wcześniejszej lekcji? Napisz to w komentarzu poniżej (Kolejna lekcja już w piątek!) Do zobaczenie o/
    1 punkt
  8. PanMaruda

    Skrypt na uzbrojonego zombie

    skąd wy ludzie bierzecie to chance of 100%... on spawn: if entity is zombie: set max health of entity to 100 heal entity set name of entity to "&6Goblin" equip entity with diamond sword fajnie by też było jakbyś pisał pytania w dziale od pytań, a nie od publikowania skryptów.
    1 punkt
  9. PanMaruda

    Top 10 graczy zmienna "size of {zmienna}"

    nawet pewnie sobie z tego nie zdajesz sprawy, ale uwierz mi - nie ma nic bardziej wkurwiającego od osoby, która w złym dziale pyta nieszczegółowo o pomoc bez podawania podstawowych informacji takich jak kod, silnik, wersje, pluginy - mimo tego jednak pomoc otrzymuje, a potem twierdzi że nawet nie potrafi tego zastosować... on right click: "%clicked block%" contains "skull" or "head" {wszystkiePrezenty1::*} contains location of clicked block if {zebranePrezenty1::%player%::*} contains location of clicked block: send "%{prefix}% &cOdebrales juz kiedys ten prezent! &b(%size of {zebranePrezenty1::%player%::*}%/%size of {wszystkiePrezenty1::*}%)" else: add location of clicked block to {zebranePrezenty1::%player%::*} set {topka::prezenty::1::%player%} to size of {zebranePrezenty1::%player%::*} send "%{prefix}% &bOdebrales prezent! (%size of {zebranePrezenty1::%player%::*}%/%size of {wszystkiePrezenty1::*}%)" command topka: trigger: send "top 10 prezentów:" and "" send createTop("topka::prezenty::1", 10, all offline players, false, "[index]. [player] - [value]")
    1 punkt
  10. Kormic

    Poprawa wydajności w kodzie

    Wydajnościowo poza usunięciem niepotrzebnego 'chance of 100%' i 'wait 5 tick' niewiele można zrobić. Mimo wszystko zamiast periodicalu (jeśli to możliwe) użyłbym regionu w tym celu i eventu 'on entering of region "nazwa_regionu"'. every 1 real seconds: loop all players in "swiat": loop-player is alive loop-player's y-loc <= 60 loop-player isn't wearing golden helmet of protection 1 named "&6Hełm &3Górnika" loop-player is not in god mode damage loop-player by 3 hearts message "&cPotrzebujesz hełmu &b*&6Górnika&b*&c by wejść w podziemia..." to loop-player Nadal zastanawiam się co to za warunek "is not in god mode"... Rozumiem, że to z jakiegoś dodatku?
    1 punkt
  11. PanMaruda

    Poprawa wydajności w kodzie

    every 1 second: loop all players in "swiat": if loop-player's y coord <= 60: if helmet of loop-player is not golden helmet of protection 1 named "&6Hełm &3Górnika": damage loop-player by 3 hearts send "&cPotrzebujesz hełmu &b*&6Górnika&b*&c by wejść w podziemia..." to loop-player
    1 punkt
  12. Kormic

    Czesc zmiennych sie nie zapisuje

    Pamiętam, że miałem zawsze problem z odczytywaniem zmiennych globalnych w funkcji i musiałem je ręcznie zapisywać.
    1 punkt
  13. Podczas lekcji: poznasz informacje o języku JavaScript, poznacz podstawowe słówka, które przydadzą Ci się podczas kolejnych lekcji jak i będą występować w dokumentacji i w większości innych języka programowania. Mam nadzieje, że przygotowany przeze mnie materiał uda Ci się przyswoić w najlepszym dla ciebie stopniu i wspomoże Cię on na drodze do budowania swojego programistycznego imperium. Pierwszym krokiem podczas poznawania nowego języka programowania jest poznanie jego podstawowych zasad, możliwości i użyteczności. JavaScript to skryptowy jeżyk programowania w dużej mierze przeznaczony do tworzenia niestatycznych stron internetowy. Dzisiaj jest od niezbędny do stworzenia większego serwisu internetowego, a sama jego znajomość otwiera nam bardzo dużą bramę do świata IT. Jak znamy już najważniejsze (i te mniej ważne) informacje o języku, w którym będziemy pisać powinniśmy poznać jeszcze silnik naszego przyszłego bota czyli NodeJS. NodeJS jak podaje jego strona (https://nodejs.org/) jest to asynchroniczne środowisko JavaScript do tworzenia skalowalnych aplikacji sieciowych, co oznacza, że zamiast otwierania skryptu w przeglądarce internetowej możemy użyć takiego wizualizatora, który dodatkowo udostępnia nam dodatkowe wbudowane w niego ułatwienia. Wraz z silnikiem instalowany manager pakietów - npm, z którego kilkukrotnie będziemy korzystać podczas kursu. Znając już podstawowe informacje na temat technicznego zaplecza bota poznajmy kilka podstawowych słówek, które przydadzą się w dalszych częściach kursu: Edytor tekstowy – aplikacja pozwalająca na edycje plików tekstowych (przykładowo jest to windowsowy notatnik, ja podczas prowadzenia tego kursu będę używał Visual Studio Code), Plik tekstowy – plik zawierający ciąg znaków, Flow projektu – zbór zasad i zaleceń dotyczący danego projektu, Repozytorum – lokalizacja pliku źródłowego (podczas tego projektu będzie to najczęściej GitHub), Folder – lokalizacja pozwalająca do grupowanie plików. To tyle jeżeli chodzi o słowa programowano podobne, teraz czas na słowa typowo związane z kodem. zmienna – wartość przypisana do danego wyrażenia, której można używać nieskończenie wiele razy ale tylko w obszarze jej działania, tablica – przez wiele osób nazywana jest to „szufladka na dane” i w sumie coś w tym jest, ponieważ przypisywane do niej wartości najczęściej nie mają konkretnych nazw, a jedynie identyfikatory, które można porównać do piętek w komodzie z szufladami. obiekt – zbiór zmiennych i funkcji połączony wspólną nazwą, najczęściej powiązany ze sobą znaczeniowo, funkcja – zapis zdarzeń wykonywany w ustalonej wcześniej kolejności zwracający dany efekt, komentarz – oznaczenie widoczne tylko dla człowieka, wyłączone z logicznego działania programu Poznaliśmy już większość trudnych i wartych po poznania słówek przed kursem. Teraz czas na poznanie ich w praktyce w języku JavaScript. Każdy z powyżej wymienionych elementów można stworzyć i używać na kilka sposobów ja spróbuje przedstawić większość, a na pewno wszystkie najczęściej używane sposoby. Pierwszym elementem, którym się zajmiemy są zmienne. W JS w przeciwieństwie do większości innych języków programowania nie wymagane jest ustalenie typu zmiennej (chodzi tu o definiowanie, że w zmiennej będą występować liczby, tekst czy wartości prawda/fałsz) dzielą się one na 3 rodzaje: Zmienna const – zmienna ta jest preferowana do najczęstszego używania. Jej minusem, a zarazem zaletą jest fakt, że raz zdefiniowanej nie można ponownie zdefiniować, ani zmienić jej wartości. Aby używa się jej tak: const zmienna = „wartość”; Zmienna let – zmienna ta preferowana jest wszędzie gdzie zmienna const jest niewystarczająca i potrzeba w środku kodu zmieniać wartość zmiennej. Oto sposoby jej użycia: let zmienna = „wartość”; let zmienna; zmienna = „wartość”; Zmienna var – dwa powyższe rodzaje zmiennych są zmiennymi tak zwanymi obszarowymi, czyli działają jedynie na obszarze obiektu, w przypadku gdy będziemy próbowali ich użyć poza tym obiektem będzie występowa błąd undefined co oznacza że zmienna ta jest po prostu niezdefiniowania, lecz w przypadku zmiennej var użycie jej przed jej poza obszarem będzie skutkowało otrzymaniem wartości null co oznacza, że zmienna nie ma wartości, dodatkową różnicą jest również redeklarowalność co oznacza, że zmienne var pod tą samą nazwą można zdefiniować kilka razy i nie będzie żadnego błędu logicznego w przeciwieństwie co zmiennej cost i let, lecz jest to odradzane, ponieważ tworzy to nieład w projekcie. Zmiennej tej powinno używać się jak najmniej, a tak naprawdę w projektach podstawowych najlepiej jej nie używać. Definiowanie jej wygląda tak samo jak zmiennej let: var zmienna = „wartość”; var zmienna; zmienna = „wartość”; Aby pobrać dane z każdej z powyższych zmiennych wystarczy w kodzie wpisać ich nazwe: zmienna Kolejnym poznanym przez nas elementem będzie tablica. W JS tablice definiuje się tak: ["item1", "item2", "item3"] Można ją przypisać do wybranej zmiennej. Aby pobrać określoną daną z tablicy należy tą tablice przypisać do zmiennej oto przykład: const items = ["kot", "pies", "słoń", "żyrafa"]; Następnie należy wpisać nazwę zmiennej i w nawias kwadratowych określić miejsce wartości, pamiętając, że w programowaniu liczymy od 0: items[0] Powyższy zapis zwróci nam wartość kot. Po tablicach przyszedł czas na obiekty. Stanowią one najczęściej zapis wartości. Można je zdefiniować w taki sposób: { Nazwa1: „wartość1”, Nazwa2: „wartość2” }; const nazwa1 = „wartość1”; let nazwa2 = „wartość2”; { nazwa1, nazwa2 }; Oczywiście obiekty tak samo jak tablice można przypisać do obiektów, a robi to się tak: const obj = { Nazwa1: „wartość1”, Nazwa2: „wartość2” }; const nazwa1 = „wartość1”; let nazwa2 = „wartość2”; const obj = { nazwa1, nazwa2 }; Aby wyciągnąć wartość z obiektu należy przypisać dany obiekt do zmiennej, a następnie zrobić to tak: obj.nazwa1 w tym momencie otrzymaliśmy wartość wartość1. Ostatnim logicznym elementem z naszej listy są funkcje. Są to dokładnie obiekty, lecz zamiast nazw i wartości mają one odpowiednie wyrażenia logiczne. Aby zdefiniować podstawową funkcje należy napisać taki fragment kodu: () => { return 1; }; function() { return 1; }; Powyżej napisane funkcje zwracają wartość 1, ponieważ zwrot return w ciele funkcji oznacza, że dana funkcje zwraca wartość (może być również sytuacja gdzie funkcje nie zwraca żadnej wartości, wtedy return służy jako element przerwania dalszego działania funkcji). Funkcje tak jak tablice i obiekty można przypisać do nazw, a robi się to w taki sposób: const func = () => { return 1; }; const func = function() { return 1; }; function func() => { return 1; }; Funkcje mogą otrzymywać przy wywoływaniu kodu argumenty, które tworzą wewnętrzne zmienne w funkcji wygląda to tak: const func = (arg1, arg2) => { return arg1 + arg2; }; const func = function(arg1, arg2) { return arg1 + arg2; }; function func(arg1, arg2) => { return arg1 + arg2; }; Aby wywołać funkcje musi posiadać ona nazwę. Można to zrobić w taki sposób: func(1, 2); Ostatnim elementem, którego będę najczęściej używał jest komentarz. W JS wygląda to tak: //ten komentarz jest tekstem jedno linijkowym /* Ten komentarz mogę rozciągnąć na kilka linijek i nadal będą to linijki nieingerujące w kod */ To już koniec tej lekcji, mam nadzieje, że taka forma nauki Ci się spodoba! (Z powodu, że ta lekcja jest bardzo mocno teoretyczna kolejna z wersją praktyczną pojawi się już jutro!) A jeżeli chcesz zgłębić temat JavaScripta odsyłam cię do jego kilku dokumentacji: https://developer.mozilla.org/pl/docs/Web/JavaScript https://www.w3schools.com/js/default.asp https://devdocs.io/javascript/ Coś nie tak, a może wręcz przeciwnie spodobało ci się coś i chcesz bym o czymś pisał więcej? Napisz to w komentarzu poniżej na pewno rozważę wszelkie wasze propozycje! Do zobaczenia o/
    1 punkt
  14. Jajpucz

    YAML-List sprawdzanie

    No ok, ale ja nie rozumiem tych dokumentacji...
    0 punktów
  15. Libter

    Standardy komunikacyjne na serwerze

    Oczywiście są to prywatne standardy, nie ma przymusu używania Wszystkich zainteresowanych budowaniem opisanej infrastruktury zapraszam do kontaktu na Discordzie. Drogi (do tras na średnie dystanse lub konno) Autostrada (A) Nawierzchnia betonowa z wydzielonymi pasami ruchu Minimum 5 kratek szerokości i 4 kratki wysokości Jak najmniej zmian poziomów i tylko na płytki Całość w oświetlonym tunelu bez dostępu dla mobów Skrzyżowania tylko z autostradami lub zabezpieczone furtkami z drogami głównymi i zbiorczymi Przy odcinkach na powierzchni kładki umożliwiające przejście nad tunelem w odległości maksymalnie 50 kratek od siebie o szerokości minimum 3 kratek Droga główna (G) Nawierzchnia betonowa Minimum 4 kratki szerokości Rzadkie zmiany poziomów i tylko na płytki Oświetlone pobocze z ogrodzeniem ograniczającym dostęp mobów Mosty (nieograniczające przepływu łódek), wiadukty i tunele o minimalnie 3 kratkach wysokości Droga zbiorcza (Z) Nawierzchnia betonowa Minimum 3 kratki szerokości i 3 kratki wysokości (w przypadku tunelu) Zmiany poziomów na płytki i schodki Mosty (nieograniczające przepływu łódek) i tunele o minimalnie 3 kratkach wysokości Droga lokalna (L) Standard drogi zbiorczej ze ścieżką zamiast nawierzchni betonowej Metro (do tras na długie dystanse lub transportu mobów) Ze względu na brak możliwości poruszania w górę lub w dół łódką na lodzie - wszystkie trasy powinny być umieszczone na poziomie Y 50 (kiedy gracz stoi na lodzie). Metro przyspieszone (M+) Nawierzchnia w całości z brył lodu dla łódek z wydzielonymi pasami ruchu Umieszczone pod poziomem gruntu, aby zminimalizować kolizje 5 kratek szerokości i minimum 3 kratki wysokości Całość w oświetlonym tunelu bez dostępu dla mobów Skrzyżowania tylko z metrem, możliwe wyjścia na powierzchnie zabezpieczone drzwiami Metro zwykłe (M) Nawierzchnia z pojedynczych brył lodu dla łódek Umieszczone pod poziomem gruntu, aby zminimalizować kolizje 3 kratki szerokości i minimum 3 kratki wysokości Całość w oświetlonym tunelu bez dostępu dla mobów Skrzyżowania tylko z metrem, możliwe wyjścia na powierzchnie zabezpieczone drzwiami Woda Nie jest to w formie standardu, ale dla sprawnego pływania łódkami warto postarać się o: Tworzenie skrótów lub przepływów za pomocą przekopów o szerokości i wysokości minimum 3 kratek Stawianie boi sygnalizujących możliwe cele i kierunek podróży Wizualizacje Podsumowanie Tym postem chciałbym rozpocząć erę budowy sprawnej serwerowej komunikacji. Klasy A oraz M+ zostały opisane nieco na wyrost - na chwilę obecną chciałbym wybudować główne drogi w centrum w oparciu o klasę G oraz z czasem zastanowić się nad budową metra w dalsze rejony w klasie M.
    0 punktów
Ten Ranking jest ustawiony na Warszawa/GMT+02:00
  • Najwięcej postów w tygodniu

    xSebixx1
    xSebixx1
    2 posty
    Fendi
    Fendi
    2 posty
    Antychryst
    Antychryst
    1 post
    MICHALBEZSKINOW
    MICHALBEZSKINOW
    1 post
    artur9010
    artur9010
    1 post
    Bananek355
    Bananek355
    1 post
    0j_12
    0j_12
    1 post
    Kormic
    Kormic
    1 post
    kinimod5021
    kinimod5021
    1 post
  • Najwięcej tematów w tygodniu

    0j_12
    0j_12
    1 temat
    xSebixx1
    xSebixx1
    1 temat
    bug128
    bug128
    1 temat
    Nieaktywny
    Nieaktywny
    1 temat
    LusiaMC
    LusiaMC
    1 temat
    Antychryst
    Antychryst
    1 temat
    MICHALBEZSKINOW
    MICHALBEZSKINOW
    1 temat
    artur9010
    artur9010
    1 temat
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...