Skocz do zawartości

AdisSaveq - Skrypt na 2 różne ekwipunki


Rekomendowane odpowiedzi

AdisSaveeq

Witam tu znowu ja, w sumie to drugi raz, bo to mój drugi skrypt :P
Zrobiłem skrypt na 2 różne ekwipunki, bo sam takiego potrzebowałem, a jako, że może się komuś też to przydać to postanowiłem go opublikować.
Działa jak działa, powiedział bym, że jest w wersji "dev" ale no, przynajmniej jest, proszę o uwagi i propozycje w komentarzach.

 

Jak działa skrypt?

Po wpisaniu komendy /eq (i tu mamy do wyboru 1 i 2) zapisuje nasz obecny ekwipunek jako "ten drugi" i przenosi nas na "drugi" ekwipunek.
Dodałem jeszcze komende /saveeq (Znowu do wyboru 1 i 2), która zapisuje nasz ekwipunek.
W tej wersji są tylko 2 ekwipunki, oczywiście można dodać więcej samemu bo skrypt nie jest jakoś skomplikowany.
No i to tyle.

Wersja 1.0
Kod: https://code.skript.pl/7dHBNBDb

 

Odnośnik do komentarza
https://skript.pl/temat/45959-adissaveq-skrypt-na-2-r%C3%B3%C5%BCne-ekwipunki/
Udostępnij na innych stronach

17 minut temu, CoFFeIN04 napisał:

można to było zrobić o wiele łatwiej, dodatkowo żeby zapisywało dowolną ilość eq

 

Wartościowy komentarz. Najlepiej powiedzieć, że można było coś prościej zrobić, ale już nie napiszesz jak.

Co do zapisywania nieskończonej ilości ekwipunków - jakbyś chciał to zrobić? Przecież musisz sobie w momencie zapisu wczytać inny ekwipunek, więc skrypt jest dobrze napisany i na miejscu autora nie zmieniał bym niczego.

Dwa ekwipunki są optymalną ilością, poza tym zapis dowolnej liczby ekwipunków będzie skutkował zapisem dużej ilości zmiennych (każdy gracz będzie mógł sobie zapisywać nawet jeden dirt w kilkuset ekwipunkach, mowa oczywiście o jakichś śmiesznych panach, którzy psują frajdę na serwerze).

A jeżeli już miałaby być nieskończona ilość ekwipunków, należałoby podawać do komendy dwa argumenty w postaci dwóch liczb - pierwsza to zapisywany ekwipunek, natomiast druga to wczytywany ekwipunek.

Oczywiście to generuje kolejne problemy, gdyż należałoby zrobić jakiś system chroniący przed nadpisaniem zapisanego ekwipunku.

Co do samego uproszczenia kodu, właściwie nie ma tutaj czego upraszczać, gdyż i tak nie będzie to zbyt ładnie wyglądało.

Ale jeżeli już chcemy się upierać...

arg is "1" or "2"
set {_n} to 2 if arg is "1" else 1 # To jest ternary operator
loop 41 times:
	set {eq%{_n}%::%player%::%loop-number - 1%} to slot (loop-number - 1) of player's inventory
	set slot (loop-number - 1) of player's inventory to {eq%arg%::%player%::%loop-number - 1%}
send "&cZapisano obecny ekwipunek jako %{_n}%, jesteś teraz na ekwipunku %arg%" to player

Wykorzystujemy tutaj 'ternary operator' (czyli operator trójskładnikowy, który jest używany jako zastępca konstrukcji 'if' wraz z 'else').

Powyższy kod zastąpi nam całą zawartość pierwszej komendy. Tak samo możesz zrobić z drugą komendą.

Odnośnik do komentarza
https://skript.pl/temat/45959-adissaveq-skrypt-na-2-r%C3%B3%C5%BCne-ekwipunki/#findComment-289454
Udostępnij na innych stronach

9 minut temu, Kormic napisał:

Wartościowy komentarz. Najlepiej powiedzieć, że można było coś prościej zrobić, ale już nie napiszesz jak.

Co do zapisywania nieskończonej ilości ekwipunków - jakbyś chciał to zrobić? Przecież musisz sobie w momencie zapisu wczytać inny ekwipunek, więc skrypt jest dobrze napisany i na miejscu autora nie zmieniał bym niczego.

Dwa ekwipunki są optymalną ilością, poza tym zapis dowolnej liczby ekwipunków będzie skutkował zapisem dużej ilości zmiennych (każdy gracz będzie mógł sobie zapisywać nawet jeden dirt w kilkuset ekwipunkach, mowa oczywiście o jakichś śmiesznych panach, którzy psują frajdę na serwerze).

A jeżeli już miałaby być nieskończona ilość ekwipunków, należałoby podawać do komendy dwa argumenty w postaci dwóch liczb - pierwsza to zapisywany ekwipunek, natomiast druga to wczytywany ekwipunek.

Oczywiście to generuje kolejne problemy, gdyż należałoby zrobić jakiś system chroniący przed nadpisaniem zapisanego ekwipunku.

Co do samego uproszczenia kodu, właściwie nie ma tutaj czego upraszczać, gdyż i tak nie będzie to zbyt ładnie wyglądało.

Ale jeżeli już chcemy się upierać...


arg is "1" or "2"
set {_n} to 2 if arg is "1" else 1 # To jest ternary operator
loop 41 times:
	set {eq%{_n}%::%player%::%loop-number - 1%} to slot (loop-number - 1) of player's inventory
	set slot (loop-number - 1) of player's inventory to {eq%arg%::%player%::%loop-number - 1%}
send "&cZapisano obecny ekwipunek jako %{_n}%, jesteś teraz na ekwipunku %arg%" to player

Wykorzystujemy tutaj 'ternary operator' (czyli operator trójskładnikowy, który jest używany jako zastępca konstrukcji 'if' wraz z 'else').

Powyższy kod zastąpi nam całą zawartość pierwszej komendy. Tak samo możesz zrobić z drugą komendą.

Uprościłem ten kod tak jak napisałeś, zastanawiałem się też czy by po prostu nie zrobić po wpisaniu eq zamiany jednego eq na drugie, ale nie wiem czy warto

Odnośnik do komentarza
https://skript.pl/temat/45959-adissaveq-skrypt-na-2-r%C3%B3%C5%BCne-ekwipunki/#findComment-289457
Udostępnij na innych stronach

7 minut temu, Warpedex napisał:

Uprościłem ten kod tak jak napisałeś, zastanawiałem się też czy by po prostu nie zrobić po wpisaniu eq zamiany jednego eq na drugie, ale nie wiem czy warto

Możesz i tak, ale faktycznie gra nie jest warta świeczki, gdyż znowu musisz zapisywać graczowi zmienną, która będzie przechowywała informację o tym który ekwipunek gracz ma obecnie załadowany. Tak więc koniec konców kod jest tak samo długi (o ile nie dłuższy).

Tak jak napisałem wcześniej, nie ma sensu dodawać i zmieniać w tym skrypcie innych rzeczy, gdyż trzeba będzie to łatać i właściwie zrobi się z tego błędne koło luk, możliwych nadużyć i bugów, które będzie trzeba łatać, a ty nie będziesz w tym widział końca.

Zostaw tak jak jest i basta. Skrypt działa? Działa. Wygląda dobrze? Dobrze.

Ode mnie to tyle.

Edytowane przez Kormic
Odnośnik do komentarza
https://skript.pl/temat/45959-adissaveq-skrypt-na-2-r%C3%B3%C5%BCne-ekwipunki/#findComment-289463
Udostępnij na innych stronach

5 minut temu, Kormic napisał:

Możesz i tak, ale faktycznie gra nie jest warta świeczki, gdyż znowu musisz zapisywać graczowi zmienną, która będzie przechowywała informację o tym który ekwipunek gracz ma obecnie załadowany. Tak więc koniec konców kod jest tak samo długi (o ile nie dłuższy).

Tak jak napisałem wcześniej, nie ma sensu dodawać i zmieniać w tym skrypcie innych rzeczy, gdyż trzeba będzie to łatać i właściwie zrobi się z tego błędne koło luk, możliwych nadużyć i bugów, które będzie trzeba łatać, a ty nie będziesz w tym widział końca.

Zostaw tak jak jest i basta. Skrypt działa? Działa. Wygląda dobrze? Dobrze.

Ode mnie to tyle.

Na razie zostawie to tak jak jest, może kiedyś do tego wróce, ale jak na razie skrypt wystarczający jak na moje potrzeby, a chyba najważniejsze, żeby był jakoś pomocny :>

Odnośnik do komentarza
https://skript.pl/temat/45959-adissaveq-skrypt-na-2-r%C3%B3%C5%BCne-ekwipunki/#findComment-289465
Udostępnij na innych stronach

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ę...