Skocz do zawartości

[Skrypt] EasyStoneDrop + Fortune - Minecraft | SkVersion: 1.1 - 2020/2021 [STILL IN BUILD]!


Rekomendowane odpowiedzi

Witam, chciałbym wam przedstawiać mój skrypt na drop surowców z kamienia w "Minecraft".

Jest to mój autorski skrypt który planuję ciągle rozwijać (jak i nie tylko ten skrypt). Udostępniam go wam w celu konfrontacji z waszą opinią i pomocą dalszego rozwoju. Chciałbym, abyście proponowali co mógł bym zaimplementować do skryptu lub jaki skrypt miałbym napisać.

Pozdrawiam i zapraszam do komentowania!

 

 

 Link:

https://code.skript.pl/gUC5oph8

 

Komendy:

/drop - pokazuje nam na chacie całe menu z komendami.

 

Skript Versions:

1.0 - Opublikowanie skryptu - 03.12.2020

1.1 - Zaimplementowane komendy: "/drop szansa", dodano opisy opcji, - 03.12.2020

 

 

 
Kod źródłowy dla podglądu:

 

 

Edytowane przez Krystiann
Odnośnik do komentarza
https://skript.pl/temat/43396-skrypt-easystonedrop-fortune-minecraft-skversion-11-20202021-still-in-build/
Udostępnij na innych stronach

Po 1:
w tej nanosekundzie nie było 😮 (było miliard takich skryptów)

Po 2:
Kod dodaj na https://code.skript.pl :)

Po 3: 
zmień:

on mine of redstone ore:

na:

on mine of any ore:

Unikniesz pisania 10 linijek ;)
Zrobiłbym to inaczej:

on mine of any ore:
	cancel drops
	repair player's tool by 1
	send {@wykopanie_rudy}

(jeśli to naprawianie itemu będzie jakoś źle działać to je wywal)

Po 4:
czemu wymuszasz po wejściu gracza na serwer te wszystkie zmienne? Czemu w kodzie sprawdzasz czy są "on"  a nie true?

on join:
	set {drop.%player%} to true
	set {wiadomosci.%player%} to true
	set {cobble.%player%} to true

Skoro wyłączyli je podczas ostatniego pobytu, to dlaczego mają musieć je znowu wyłączać. Dodałbym warunek if {drop.%player%} is not set i dopiero wtedy ustawił na true ;)

Po 5:
Między options gdy dajesz komentarz to nie musisz dawać od nowa options:

Po 6:
w komendzie /drop dwa razy sprawdzasz permisję, po co?

Po 7:
czemu wszystko dajesz do oddzielnych eventów on mine?

Edytowane przez CoFFeIN04

1. Wszelkie dłuższe skrypty wstawiamy na serwis code.skript.pl. Usuń ten skrypt i wrzuć go do tego serwisu, a następnie wklej link, zostanie on automatycznie zamieniony na graficzną formę wycinku kodu.

2. Co do samego skryptu...

Zalety to:

  • obszerna sekcja konfiguracyjna, co pozwala użytkownikowi na dopasowanie niemalże całego skryptu do swoich zastosowań
  • możliwość modyfikacji dropu przez gracza

Wady natomiast to:

  • wielokrotne nasłuchiwanie do tych samych eventów (chociażby on mine stone), tutaj zalecałbym połączenie wszystkiego w jeden event
  • wiele zagnieżdżonych conditionali, co wpływa negatywnie na czytelność kodu, zalecałbym zastąpienie tego czymś takim:
    if arg 1 is not 1:
    	stop
    if arg 2 is not 2:
    	stop
    if arg 3 is not 3:
    	stop
    # I tak dalej...
  • brak użycia funkcji w celu skrócenia kodu oraz uczynienia go czytelniejszym
  • niepotrzebne użycie 'on first join' oraz 'on join', gdyż zawierają ten sam kod, wystarczy użyć samego 'on join'

Nie wiem czy testowałeś skrypt, czy też nie, ale z pewnością przydałoby się uporządkować kod. Starałem się wypunktować te wady, które najbardziej rzucają się w oczy. Mógłbym się tutaj jeszcze do sposobu nazewnictwa zmiennych, ale to jest szczerze mało istotne (o ile nie zamierzasz ich później masowo modyfikować).

EDIT:

Co do rozwoju skryptu, dodam, że przydałoby się utworzenie jakiegoś GUI pozwalającego na modyfikację dropu. Gracze raczej wolą GUI aniżeli zabawę w wykonywanie dziesiątek komend.

Edytowane przez Kormic

Tak jak pan Kormic ci wyżej napisał i trochę więcej:

  • unikaj definiowania rzeczy w pierwszej linijce eventu, np.
    zamiast
    on mine stone:
    	#kod

    używaj:

    on mine:
    	if event-block is a stone:
    		#kod


     

  • jeżeli jednak musisz już to zrobić - to proszę - pisz to poprawnie gramatycznie:
    zamiast

    on mine stone:
    #podczas wykopanie kamień? Jak to brzmi? Kali jeść?
    
    on rightclick axe:
    #podczas kliknięcia siekiera? Kali pić?

    używaj:

    on mine OF stone:
    #podczas wykopania kamienia
    
    on rightclick WITH axe:
    #podczas kliknięcia PPM siekierą


     

  • nie powtarzaj takich samych sekcji w skrypcie, np. konfiguracji:
    zamiast

    options:
        admin: drop.admin                                                    # uprawnienie dla administratora
        upr_mess: &cNie masz wystarczających uprawnień                       # wiadomość dla gracza nie posiadającego uprawnień
    
    # Opcje zadziałania fortuny w PROCENTACH, ilości dodatkowych diamentów z fortuny, moc dropów surowców. <<------------<<------------<<------------
    
    options:
        procent_zadzialania_fortuny_1: 20

    używaj:

    options:
        admin: drop.admin                                                    # uprawnienie dla administratora
        upr_mess: &cNie masz wystarczających uprawnień                       # wiadomość dla gracza nie posiadającego uprawnień
    
    # Opcje zadziałania fortuny w PROCENTACH, ilości dodatkowych diamentów z fortuny, moc dropów surowców. <<------------<<------------<<------------
    
        procent_zadzialania_fortuny_1: 20 

    Puste linijki ani komentarze nie przerywają ani nie kończą danej sekcji.
     

  • ograniczaj kod do minimum - nie powtarzaj kodu pierdyliard razy:
    zamiast

    if player has permission "{@admin}":
    	if arg 1 is not set:
    		send "&8============ &6[ &eDrop Menu &4- Admin &6] &8============" to player
    		send "" to player
    		send " &8- &c/drop &aon &8- &eWłącza drop surowców na całym serwerze." to player
    		send " &8- &c/drop &4off &8- &eWyłącza drop surowców na całym serwerze." to player
    		send " &8- &6/drop szansa &8- &ePokazuje aktualną szansę na drop surowców w &cprocentach&e." to player
    		send " &8- &6/drop surowce &aon &8- &eWłącza drop surowców." to player
    		send " &8- &6/drop surowce &coff &8- &eWyłącza drop surowców." to player
    		send " &8- &6/drop cobble &aon &8- &eWłącza drop cobblestone." to player
    		send " &8- &6/drop cobble &coff &8- &eWyłącza drop cobblestone." to player
    		send " &8- &6/drop wiadomosci &aon &8- &eWłącza powiadomienia o dropie." to player
    		send " &8- &6/drop wiadomosci &coff &8- &eWyłącza powiadomienia o dropie." to player
    		send "" to player
    		send "&8============ &6[ &eDrop Menu &4- Admin &6] &8============" to player
    if arg 1 is not set:
    	if player don't have permission "{@admin}":
    		send "&8============ &6[ &eDrop Menu &6] &8============" to player
    		send "" to player
    		send " &8- &6/drop szansa &8- &ePokazuje aktualną szansę na drop surowców w &cprocentach&e." to player
    		send " &8- &6/drop surowce &aon &8- &eWłącza drop surowców." to player
    		send " &8- &6/drop surowce &coff &8- &eWyłącza drop surowców." to player
    		send " &8- &6/drop cobble &aon &8- &eWłącza drop cobblestone." to player
    		send " &8- &6/drop cobble &coff &8- &eWyłącza drop cobblestone." to player
    		send " &8- &6/drop wiadomosci &aon &8- &eWłącza powiadomienia o dropie." to player
    		send " &8- &6/drop wiadomosci &coff &8- &eWyłącza powiadomienia o dropie." to player
    		send "" to player
    		send "&8============ &6[ &eDrop Menu &6] &8============" to player

    twórz w taki sposób

    if arg 1 is not set:
    	if player has permission "{@admin}":
    		set {_} to "&4- Admin "
    		add " &8- &c/drop &aon &8- &eWłącza drop surowców na całym serwerze." to {_admin::*}
    		add " &8- &c/drop &4off &8- &eWyłącza drop surowców na całym serwerze." to {_admin::*}
    
    	send "&8============ &6[ &eDrop Menu %{_} ? """"%&6] &8============"
    	send ""
    	send {_admin::*}
    	send " &8- &6/drop szansa &8- &ePokazuje aktualną szansę na drop surowców w &cprocentach&e."
    	send " &8- &6/drop surowce &aon &8- &eWłącza drop surowców."
    	send " &8- &6/drop surowce &coff &8- &eWyłącza drop surowców."
    	send " &8- &6/drop cobble &aon &8- &eWłącza drop cobblestone."
    	send " &8- &6/drop cobble &coff &8- &eWyłącza drop cobblestone."
    	send " &8- &6/drop wiadomosci &aon &8- &eWłącza powiadomienia o dropie."
    	send " &8- &6/drop wiadomosci &coff &8- &eWyłącza powiadomienia o dropie."
    	send ""
    	send "&8============ &6[ &eDrop Menu %{_} ? """"%&6] &8============"
    
    • mamy podobne wiadomości, które różnią się tylko fragmentem więc nie powtarzając warunków sprawdzamy tylko raz czy gracz jest adminem i wtedy ustawiamy tą różnicę w wiadomościach do zmiennych - czyli napis '&4 Admin' do zmiennej {_} i dwie wiadomości do listy {_admin::*}
    • następnie przechodzimy do wysyłania wiadomości - w miejscu gdzie powinny się znaleźć linijki dla admina - wysyłamy listę {_admin::*}
      • gdy będzie ustawiona, tj. gdy gracz jest adminem wtedy wiadomości z listy zostaną wysłane
      • gdy nie będzie ustawiona, tj. gdy gracz nie jest adminem wtedy lista będzie pusta i nic nie wyśle
    • zmienną {_} wstawiamy do nagłówka i stopki w procentach, ponieważ chcemy wyświetlić jej wartość
    • {_} ? """"

      tylko dlaczego taki zapis - o ile lista przy wysyłaniu gdy będzie pusta nie wyśle nic, tak zmienna wstawiona do tekstu gdy będzie pusta (tj. gdy gracz nie będzie adminem) zwróci null (czyli <none>) - tego nie chcemy - dlatego definiujemy wartość domyślną dla tego nulla - znaczy to mniej więcej tak - gdy zmienna będzie miała wartość wstaw jej wartość, a gdy nie - wstaw wartość znajdującą się po drugiej stronie pytajnika.
      Dlaczego jest tam cztery cudzysłowy ("""")? Ten zapis jest równoznaczy z pustą wiadomoscią "", ale ponieważ jest to tekst w tekście a cudzysłów jest znakiem specjalnym to gdy chcemy go wpisać do tekstu musimy go zapisać podwójnie (podobnie jak procenty i kratki)

    • zrezygnuj z ustawiania odbiorcy na końcu wiadomości ('to player') - to jest komenda - jeżeli wysyłamy wiadomość do gracz, który ją wykonał to skript sam go sobie dopełni

       

  • nie powtarzaj eventów:
    zamiast

    on mine emerald ore:
    	cancel event
    	set block to air
    	send "{@wykopanie_rudy}" to player
    on mine gold ore:
    	cancel event
    	set block to air
    	send "{@wykopanie_rudy}" to player

    pisz w taki sposób:

    on mine:
    	if event-block is any ore:
    		cancel drops
    		send "{@wykopanie_rudy}"
    • ponownie rezygnacja z 'to player' - to jest event wykonywany przez gracza - więc nie trzeba ustawiać odbiorcy
    • jak wyżej również pisałem - nie sprawdzaj bloku w pierwszej linijce eventu
    • skoro sprawdzasz wszystkie rudy osobnymi eventami - a zatem kod się powtarza a zmienia się jedynie rodzaj rudy - to użyj wyrażenia 'any ore' - ono sprawdzi czy wykopany blok jest jakąkolwiek rudą (w skript mamy wiele takich grup przedmiotów - any ore, any food, any sheep, any villager, any tool i tak dalej...
    • nie przerywaj eventu aby potem zniszczyć blok bo to niepotrzebnie obciąża procesor i irytuje gracza - wyczyść wypadające przedmioty - użyj 'cancel drops' zamiast 'cancel event'

       
  • tak jak wyżej napisał Kormic - nie powielaj eventów o podobnym działaniu:
    zamiast:
    on first join:
    	set {drop.%player%} to true
    	set {wiadomosci.%player%} to true
    	set {cobble.%player%} to true
    on join:
    	set {drop.%player%} to true
    	set {wiadomosci.%player%} to true
    	set {cobble.%player%} to true

    używaj jedynie

    on join:
    	set {drop.%player%} to true
    	set {wiadomosci.%player%} to true
    	set {cobble.%player%} to true
    • event 'on first join' aktywuje się równocześnie z 'on join' więc jest to zbędne zaśmiecanie kodu

       
  • wydarzenie 'on mine' aktywuj się jedynie w przypadku gdy blok zostanie zniszczony odpowiednim narzędziem i z bloku wypadnie przedmiot - nie musisz więc sprawdzać czy danym narzędziem można zniszczyć blok:
    if player' tool is a diamond pickaxe or iron pickaxe or stone pickaxe:

 

 

 

póki co tyle ode mnie - połącz wszystkie te eventy w jeden, popraw powyższe błędy, zastosuj się do tego co ci napisałem ja i panowie wyżej - w razie problemów pytaj - powodzenia.

Edytowane przez PanMaruda

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Nieaktywny
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...