Skocz do zawartości

Skrypt na gamemode, gm: dla graczy z OP i Pluginu MultiverseCore


luk4sMC
 Udostępnij

Rekomendowane odpowiedzi

Witam.

Na wstępie dodam, że to mój obecnie pierwszy skrypt w tym języku i mógłbym go uprościć wykorzystując m.in funkcje, ale ze względu na to, że chcę uczyć programowania moje dzieciaki (8 i 5lat), to w takiej formie to zostawię...

Działanie:

  • - gamemode creative, gamemode c, gamemode 1
  • - gamemode creative player
  • - gm c, gm 1   #dopisze kod
  • - gma, gmc, gmsp, gms   #dopisze kod

Pytanie moje co uprościć i jak dodać losowe komunikaty -patrz koniec skryptu.

options:
	#lista parametrów dla polecenia gamemode
	surv: "survival","s" or "0"
	creat: "creative", "c" or "1"
	adve: "adventure","a" or "2"
	spct: "spectator","sp" or "3"
	
command /gm [<text>] [<player>]:
	aliases: gamemode
	trigger: 
		
		if "%player's world%" is not "island_ocean":   #osland_ocean, nazwa świata wygenerowana przez plugin MultiverceCore
		
			if arg 1 is not set:
				send "Użyj: gamemode <tryb gry> <nazwa gracza>" to player
				stop
		
			if arg 1 is {@surv}:
				if arg 2 isn't set:
					set player's gamemode to survival
					send "&cGracz: &6%player% aktywował tryb: &bPrzetrwania" to player
				else:
                	#Zmiana trybu przez gracza bo dzieciakom wiecznie coś nie pasuje...
					execute console command "/gamemode survival %player%"
					send "&cGracz: &6%arg 2%! Zmieniono Twój tryb na: &bPrzetrwanie"
				
			if arg 1 is {@creat}:
				if arg 2 isn't set:
					set player's gamemode to creative
					send "&cGracz: &6%player% aktywował tryb: &bKreatywny" to player
				else:
					execute console command "/gamemode creative %player%"
					send "&cGracz: &6%arg 2%! Zmieniono Twój tryb na: &bKreatywny"
				
			if arg 1 is {@adve}:
				if arg 2 isn't set:
					set player's gamemode to adventure
					send "&cGracz: &6%player% aktywował tryb: &bPrzygoda" to player
				else:
					execute console command "/gamemode adve %player%"
					send "&cGracz: &6%arg 2%! Zmieniono Twój tryb na: &bPrzygoda"
				
			if arg 1 is {@spct}:
				if arg 2 isn't set:
					set player's gamemode to spectator
					send "&cGracz: &6%player% aktywował tryb: &bWidza" to player
				else:
					execute console command "/gamemode spectator %player%"
					send "&cGracz: &6%arg 2%! Zmieniono Twój tryb na: &bWidz"
					
		else:
		
			#Ze względu na to, że plugin: Multiverse-Core sam zmieni tryb gry, ponizszy kod można usunąc!!!
			if arg 1 is not set:
				send "Użyj: gamemode <tryb gry> <nazwa gracza>" to player
				stop
		
			if arg 1 is {@surv}:
				if arg 2 isn't set:
					set player's gamemode to survival
					send "&cGracz: &6%player% aktywował tryb: &bPrzetrwania" to player
				else:
					execute console command "/gamemode survival %player%"
					send "&cGracz: &6%arg 2%! Zmieniono Twój tryb na: &bPrzetrwanie
	
			#Kod odpowiedzialny za komunikaty: śmieszne, podpowiedzi jak grac itd.
			if arg 1 is not {@surv}:
				send "&6%player% nie oszukuj! Chwyć się łopaty i buduj schron. ZOMbie idą!!!"
				stop	

 

Edytowane przez luk4sMC
Odnośnik do komentarza
Udostępnij na innych stronach

  • luk4sMC zmienił(a) tytuł na Skrypt na gamemode, gm: dla graczy z OP i Pluginu MultiverseCore
3 minuty temu, luk4sMC napisał:

Pytanie moje co uprościć i jak dodać losowe komunikaty -patrz koniec skryptu.

Co do upraszczania skryptu, nie widzę wielu możliwości. Kod wygląda w miarę przystępnie, a skoro ojciec będzie tłumaczył dziecakiom skrypt na biężąco, nie widzę problemu. Mimo wszystko 'stop' w ostatniej linijce nie jest potrzebne, gdyż w tym miejscu zatrzymywanie skryptu nie ma sensu.

Natomiast jeżeli mowa o losowych wiadomościach, można to zrobić na dwa sposoby:

1. Utworzenie listy z różnymi wiadomościami oraz wyciąganie z niej losowego elementu.

set {_lista::*} to "Wiadomość nr 1" and "Wiadomość nr 2" and "Wiadomość nr 3"
send "%random element out of {_lista::*}%"

2. Ustawianie zmiennej do losowej liczby i tworzenie szeregu conditionali.

set {_losowaLiczba} to random integer between 1 and 3
if {_losowaLiczba} is 1:
	send "Wiadomość nr 1"
else if {_losowaLiczba} is 2:
	send "Wiadomość nr 2"
else if {_losowaLiczba} is 3:
	send "Wiadomość nr 3"

Dodam, że uważam, iż nauka dzieciaków programowania to dobra decyzja i wkład w ich przyszłość ze strony ojca. Technologia w naszym życiu jest coraz ważniejsza, a programowanie oraz umiejętność logicznego myślenia z pewnością im się przyda.

Odnośnik do komentarza
Udostępnij na innych stronach

3 godziny temu, Michix napisał:

Skrypt ładnie napisany, lecz przydało by się zamienić tego execute'a na set gamemode of player to

Przyznam, że nie potrafię tego poprawnie podstawić...dostaje różne komunikaty 😅

Nauczony jestem w BASH'u podstawiać cokolwiek przez np. mechanizm podstawiania poleceń.

#Mechanizmy podstawiania
$() lub ``

#Przypisanie listy plików 8.dat zmiennej x
x=$(ls *.dat)

#Usunięcie plików z rozszerzeniem *.dat
rm $(ls *.dat)
rm $x

 

Odnośnik do komentarza
Udostępnij na innych stronach

 

command /gms [<player>]:
	trigger:

		if "%player's world%" is not "swiat_survival":
	
		#Przetrwanie - Survival
			if arg 1 is not set:
				set player's gamemode to survival
				send "&cGracz: &6%player% aktywował tryb: &bPrzetrwanie" to player
			else:
				set gamemode of {player} to survival
				send "&cGracz: &6%player%! Zmieniono Twój tryb na: &bPrzetrwanie"
				
		#Ten tryb jest domyśłnym trybem świata_survival, więc użycie /gms nic nie zmieni / else nie jest potrzebne...

Ja kudłaty, durnowaty, nie wiedziałem... że deletem usuwa się kod 🙃

Edytowane przez luk4sMC
Odnośnik do komentarza
Udostępnij na innych stronach

35 minut temu, luk4sMC napisał:

Ja kudłaty, durnowaty, nie wiedziałem... że deletem usuwa się kod

Rozumiem, że ta komenda ma ustawiać tryb gry danemu graczowi, tak? Dodatkowo, jeżeli gracz nie został podany, to wykonawcy komendy ma zostać zmieniony tryb gry, mam rację?

Jeżeli odpowiedzi na dwa powyższe pytania są twierdzące, w takim razie mam kilka zastrzeżeń.

Przepraszam za formę "na ty", ale tak będzie mi znacznie łatwiej.

1. Niepotrzebnie zamieniasz 'player's world' na tekst.

if player's world is "swiat_survival":

2. Gdy odnosimy się do danego argumentu komendy (w tym przypadku jest to argument 1 typu 'player'), używamy wyrażenia arg-[numer argumentu] (może być również argument-x, myślnik jest opcjonalny, zamiast niego może być spacja), czyli to będzie arg-1. Przechowuje on informację o graczu podanym jako argument komendy. W linijce 11. użyłeś zmiennej {player}, myślę, że miałeś na myśli odniesienie do argumentu nr 1. Dlatego też zamiast '{player}', powinno się tam znaleźć 'arg-1'.

3. W linijce nr 12 wydaje mi się, że wiadomość powinna zostać wysłana do gracza podanego jako argument nr 1. Jeżeli mam rację, w takim wypadku należy dodać za wiadomością adresata, czyli 'to arg 1'.

Odnośnik do komentarza
Udostępnij na innych stronach

Zanim odpowiem, to muszę dodać, że pracuje, gram i zarządzam serwerem na Linuksie. Moje pierwsze kroki w Skript to był brak podstawowego narzędzia jakim jest "zdefiniowanie języka" , kolorowanie składni itd. Obecnie korzystam Notepad++ Kończąc dodam, że na początki nie dawałem rady z prostymi skryptami przez to złe podejście. Potem poszedłem drogą "poszukiwanie rozwiązań nurtujących problemów" szukając wszystkiego co działa w google ;)

 

command /gms [<player>]: #<- jezeli nie ma argumentu, gamemode wykonuje się dla tego, który go użyl
	trigger:

		if "%player's world%" is not "swiat_survival": #<- jezeli swiat != survival, pelny dostep do gm, glowny swiat to creative
	
		#Przetrwanie - Survival
			if arg 1 is not set: #<- brak argumentu to inaczej /gms czyli: gamemode wykonuje się dla tego, który go użyl
				set player's gamemode to survival
				send "&cGracz: &6%player% aktywował tryb: &bPrzetrwanie" to player
			else: #<- jezeli jest argument, to albo gamemode wykonuje się dla tego, który go użyl, albo dla drugiego, eskazanego gracza
				set gamemode of {player} to survival
				send "&cGracz: &6%player%! Zmieniono Twój tryb na: &bPrzetrwanie"
				
		#Ten tryb jest domyśłnym trybem świata_survival, więc użycie /gms nic nie zmieni / else nie jest potrzebne...
czyli to będzie arg-1

Spotkałem się z tym o czym piszesz błąkając się po google. Niestety "każdy sobie" i potem skutkiem tego jest "czemu nie działa?"  Sprawdzę zmiany i napisze...

Mam 37 lat, czuje się na 25... luz xD

Edytowane przez luk4sMC
Odnośnik do komentarza
Udostępnij na innych stronach

Masz dobry nawyk komentowania kodu, to dosyć ważne w poważniejszych produkcjach (nie w Skripcie)...

 

edit, bo się spłakaliście: chodzi o pracę w zespole, gdzie trudno by było zrozumieć kod innemu pracownikowi bez prostych adnotacji

Edytowane przez CoFFeIN04
Odnośnik do komentarza
Udostępnij na innych stronach

4 minuty temu, CoFFeIN04 napisał:

Masz dobry nawyk komentowania kodu, to dosyć ważne w poważniejszych produkcjach (nie w Skripcie)...

Komentarze nie są żadnym dobrym ani złym nawykiem. Przydają się jedynie do przypominania programiście do czego służy dany fragment kodu. Należy jedynie uważać na to, aby z nimi nie przesadzać oraz aby nie zajmowały więcej miejsca niż sam kod.

EDIT:

Nie dawaj mi kappy za kappę, bo to jest żałosne... 

Edytowane przez Kormic
Odnośnik do komentarza
Udostępnij na innych stronach

Cytat

Masz dobry nawyk komentowania kodu, to dosyć ważne w poważniejszych produkcjach (nie w Skripcie)...

Szczerze, to komentarze zawsze mnie irytowały -zaśmiecały kod. To jest to złe podejście o którym pisałem wyżej. Zawsze używałem prostego edytora: Gedit, Kate z podstawowym kolorowaniem składni. Dopiero Skript nauczył mnie jak duże ma to znaczenie dla np. odbioru, pracy z projektem.

PS. Dodam, że dawanie komuś /gamemode jest bardzo ważne, ponieważ wile dzieciaków w wieku 9 lat nie potrafią się nawet zalogować do serwera. Długo by pisać, a tego nie chce (nie chcę zaśmiecać forum)

Edytowane przez luk4sMC
Odnośnik do komentarza
Udostępnij na innych stronach

1 minutę temu, Kormic napisał:

Komentarze nie są żadnym dobrym ani złym nawykiem. Przydają się jedynie do przypominania programiście do czego służy dany fragment kodu. Należy jedynie uważać na to, aby z nimi nie przesadzać oraz aby nie zajmowały więcej miejsca niż sam kod.

Nie mówię o amatorskich pracach w Skrypcie, tylko o pracy przy poważnym projekcie w zespole

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz, CoFFeIN04 napisał:

Nie mówię o amatorskich pracach w Skrypcie, tylko o pracy przy poważnym projekcie w zespole

Z całym szacunkiem, ale co ty możesz wiedzieć o pracy przy poważnym projekcie...

Wiesz ile jest na tym forum pięknych skryptów, nad którymi ludzie siedzieli tygodniami, aby je dopracować? Mam wrażenie, że nie wiesz. Tym komentarzem naplułeś w twarz twórcom tych skryptów.

Odnośnik do komentarza
Udostępnij na innych stronach

5 minut temu, Kormic napisał:

Z całym szacunkiem, ale co ty możesz wiedzieć o pracy przy poważnym projekcie...

Wiesz ile jest na tym forum pięknych skryptów, nad którymi ludzie siedzieli tygodniami, aby je dopracować? Mam wrażenie, że nie wiesz. Tym komentarzem naplułeś w twarz twórcom tych skryptów.

super, powiedziałeś, że komentarze nie są dobrym nawykiem a jeśli ktoś inny będzie miał po tobie przejąć projekt to nie będzie nic wiedział co i jak i wyjdzie jak z Source z csgo

Odnośnik do komentarza
Udostępnij na innych stronach

Cytat

Wiesz ile jest na tym forum pięknych skryptów, nad którymi ludzie siedzieli tygodniami, aby je dopracować? Mam wrażenie, że nie wiesz. Tym komentarzem naplułeś w twarz twórcom tych skryptów.

Nie ma co się denerwować bo to do niczego dobrego nie prowadzi. W życiu trzeba doświadczać, ponieważ tylko wtedy zmienia się postrzeganie czegoś. Dziś myślisz, że Twój projekt jest dobry, a po wielu latach zdajesz sobie sprawę, że można było to zrobić lepiej i inaczej...

Odnośnik do komentarza
Udostępnij na innych stronach

13 minut temu, CoFFeIN04 napisał:

super, powiedziałeś, że komentarze nie są dobrym nawykiem a jeśli ktoś inny będzie miał po tobie przejąć projekt to nie będzie nic wiedział co i jak i wyjdzie jak z Source z csgo

Napisałem, że nie są ani dobrym, ani złym nawykiem.

28 minut temu, Kormic napisał:

Przydają się jedynie do przypominania programiście do czego służy dany fragment kodu.

Czytaj proszę ze zrozumieniem i skończ ten spam reakcjami..

10 minut temu, luk4sMC napisał:

Nie ma co się denerwować bo to do niczego dobrego nie prowadzi. W życiu trzeba doświadczać, ponieważ tylko wtedy zmienia się postrzeganie czegoś. Dziś myślisz, że Twój projekt jest dobry, a po wielu latach zdajesz sobie sprawę, że można było to zrobić lepiej i inaczej...

Zdenerwowało mnie to w jaki sposób myśli o pracy innych. Mówię o projektach niezwykle dobrych, tych, które zdobyły serca wielu użytkowników. Przychodzi nagle jakiś pierwszy, lepszy gość i wrzuca wszystko do jednego wora tylko ze względu na to, że jest napisane w Skript'cie.

EDIT:

Nie zamierzam już kontynuować dyskusji w tym wątku, przepraszam @luk4sMC za kłopot i syf w wątku. Zdaję sobie sprawę z tego, że nie jest to dla ciebie mile widziane.

Edytowane przez Kormic
Odnośnik do komentarza
Udostępnij na innych stronach

36 minut temu, Kormic napisał:

Czytaj proszę ze zrozumieniem i skończ ten spam reakcjami..

40 minut temu, luk4sMC napisał:

sam zacząłeś mi spamić xD

37 minut temu, Kormic napisał:

Zdenerwowało mnie to w jaki sposób myśli o pracy innych. Mówię o projektach niezwykle dobrych, tych, które zdobyły serca wielu użytkowników. Przychodzi nagle jakiś pierwszy, lepszy gość i wrzuca wszystko do jednego wora tylko ze względu na to, że jest napisane w Skript'cie.

no ale nie mam żadnego problemu do tego, że coś jest napisane w Skrypcie, chodzi mi jedynie o to, że nikt ci nie zapłaci za pisanie skryptów i się z tego nie utrzymasz 

Odnośnik do komentarza
Udostępnij na innych stronach

7 godzin temu, luk4sMC napisał:

Moje pierwsze kroki w Skript to był brak podstawowego narzędzia jakim jest "zdefiniowanie języka" , kolorowanie składni itd.

Jeżeli chcesz kolorowanie składni to zapraszam cię do mojego programu SkEditor (link w sygnaturze), planuje niedługo Big Update, w nim podświetlanie składni zostanie dokończone. 

Odnośnik do komentarza
Udostępnij na innych stronach

 

Cytat

tylko ze względu na to, że jest napisane w Skript'cie.

Jest takie fajnie powiedzenie, że jeżeli coś jest głupie, a działa, to nie jest to głupie ;)  Dobrym przykładem jest twórca MC, który wykorzystał do tego java tylko dlatego, że najlepiej znał to środowisko i czuł się w nim najpewniej. Poprawcie mnie jeżeli palnąłem coś głupiego, ale gdzieś o tym czytałem. Ja sam pisałem dużo skryptów w BASHu, ale to tylko dlatego, że trafiłem na naprawdę dobrą książkę, dlatego że skrypty można łatwo integrować z GUI no i najważniejsze tj. "od terminala linuksowego do programowania jest krótka droga". Dlatego tu jestem bo "od czatu w MC do programowania jest krótka droga" o czym dzieciaki zapewne jeszcze nie wiedzą. I dodam na koniec jeszcze, że tak, skrypty nie są tak wydajne jak programy napisane w innych językach...nawet te napisane wręcz wzorowo, ale są i dobrze...

Cytat

Jeżeli chcesz kolorowanie składni to zapraszam cię do mojego programu SkEditor

Sprawdzę Obecnie używam Notepad++

KfqQMN.jpg

Edytowane przez luk4sMC
Odnośnik do komentarza
Udostępnij na innych stronach

command /gma [<player>]:
	trigger:

		#świat gracza można od razu przyrównać z tekstem - nie trzeba go dodatkowo parsować na tekst (wpisywać w cudzysłów i procenty)
		#jeżeli tobie będzie łatwiej to spokojnie możesz tworzyć przeczenie poprzez dodanie wykrzyknika
		# + taka moja osobista rada - unikaj apostrofów - one nic nie zmieniają ale dla mnie jakoś dziwnie wyglądają w kodzie
		if world of player != "island_ocean":


			#jeżeli zdefiniowałeś tylko jeden argument w komendzie to nie trzeba go numerować (ale jak najbardziej można)
			if arg is not set:


				#komenda może być również wykonana przez konsolę - jednak konsola nie może mieć zmienionego trybu gry
				#warto dodać warunek, który to sprawdzi żeby w razie czego nie było opcji gdzie wpadnie nam null
				#sender w tym przypadku może zwrócić gracza lub konsolę
				#player zwróci tylko gracza - gdy konsola wykona komendę to player zwróci null
				if sender != console:


					#tutaj ponownie ten apostrof
					set gamamode of player to adventure


					#jeżeli chcesz wysłać wiadomość do wykonującego komendę, to akurat nie musisz podawać go jako odbiorcy
					#plugin sam go sobie dopełni - niezależnie czy sender to będzie gracz czy konsola
					send "&cGracz: &6%player% aktywował tryb: &bPrzygoda"


				#opcjonalna wiadomość dla wysyłającego że jest konsolą:
				else:
					send "Nie możesz zmienić swojego trybu gry bo jesteś konsolą."


			else:


				#jeżeli odnosimy się do argumentu to nie potrzeba żadnych dodatkowych nawiasów, cudzysłowów itp.
				#opcjonalnie procenty gdy parsujemy argument na tekst
				#w klamrach - tak jak ty zrobiłeś - zapisuje się zmienne
				set gamemode of arg to survival
				send "&cGracz: &6%arg%! Zmieniono Twój tryb na: &bPrzygoda"

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Szifter zablokował(a) ten temat
Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

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

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