Skocz do zawartości

[SkQuery] Regiony - Osobny system regionów (+ mapa)


Rekomendowane odpowiedzi

Witam.
Ostatnio natrafiłem na kilka skryptów,które mają w sobie tereny. Tereny najczęściej były zrobione na prostej zasadnie WG (WorldGuard) i WE (WorldEdit), wszystko fajnie i wszystko działa. Wpiszemy komendę "/rg list" i można się załamać.Tego typu regiony są bardzo obciążające serwer i nawet po usunięciu skryptu zostają.
W tym poradniku chciałbym Wam przedstawić jak uniknąć tego rozwiązania.

Jak działają regiony?
Regiony którymi się dzisiaj zajmiemy będą oparte na zmiennych oraz chunk'ach (Chunk?). Pewnie w tym momencie bardziej zaawansowana grupa osób już wie o co chodzi.
Tzw. Chunk to obszar mapy o konkretnym oznaczeniu (tak jak koordynaty) np. 14,24 of world
Do każdego z nich można więc podpisać wartość w zmiennej. Zapis wygląda następująco,

set {chunk::%chunk at player%} to player

Skript czyta to w taki sposób

chunk (14,24) of world = Quaczi


Jak stworzyć region dla gracza?
Sekcja wyżej bardzo dużo tłumaczy, jeżeli ją pominąłeś przeczytaj ją.
Zacznijmy od podpisania gracza do chunka.

 

set {chunk::%chunk at player%} to player

Mamy już zapisanego gracza jako właściciela tego obszaru, teraz już tylko blokady.
 

on break:
	if {chunk::%chunk at event-block%} is set: # Jezeli ten chunk ma wlasciciela
		if {chunk::%chunk at event-block%} is not player: # Jezeli gracz nie jest wlascicielem
			cancel event # Przerwij wydarzenie
			send "&cNie jestes wlascicielem tego obszaru"
		

Takim właśnie prostym kawałkiem kodu stworzyliśmy region 16x16 na którym niszczyć może tylko właściciel.
Identycznie tworzymy blokadę budowania.

Jak można to jeszcze wykorzystać takie regiony?
W temacie napisałem "mapa" i taką też mamy możliwość, jak ma wyglądać taka mapa, jak ma działać i co najważniejsze jak ją zrobić?
Mapa będzie wyświetlana na czacie co nie jest tutaj jedyną możliwością bo jednak posługujemy się zmiennymi czyli podstawą Skript'a.
 

Spoiler

5894ff6a9dab1_7fJ2OVk-Imgur.png.80d3d9367233d047e16f8eb839b7490a.png

 

Jak zrobić taką mapę?
 

set {_mapX} to 11
set {_mapY} to 6
set {_m} to ""
	loop 13 times:
		loop 23 times:
			set {_x} to {_mapX} * 16
			set {_y} to {_mapY} * 16
			set {_chunk} to chunk at block {_y} blocks north {_x} blocks west of player
			if {qg::mapa::%{_chunk}%} isn't set:
				set {_result} to ""
			if {qg::mapa::%{_chunk}%} is "DZICZ":
				set {_result} to ""
			else:
				set {_result} to {qg::mapa::%{_chunk}%}
			if {_chunk} is chunk at player:
				set {_m} to "%{_m}%&2█"
			else if {_result} is {qg::mapa::%{_chunk}%}:
				if {_result} is {qg::player::%player%::tag}:
					set {_m} to "%{_m}%&a█"
				else:
					set {_m} to "%{_m}%&c█"
			else if {_result} is "STREFA BEZPIECZNA":
				set {_m} to "%{_m}%&b█"
			else if {_result} is "WOJNA":
				set {_m} to "%{_m}%&4█"
			else if {_result} is "":
				set {_m} to "%{_m}%&7█"
			else:
				set {_m} to "%{_m}%&c█"
				add -1 to {_mapX}
				message "%{_m}%" to player
				set {_m} to ""
				add -1 to {_mapY}
				set {_mapX} to 11
			send "&eLEGENDA:" to player
			send "&2█ &8- &2Ty    &7█ &8- &7Wolny teren     &a█ &8- &aTwoja gildia   " to player
			send "&c█ &8- &cInne gildie     &b█ &8- &bSTREFA BEZPIECZNA    &4█ &8- &4WOJNA" to player

#Kawalek kodu mojego skryptu na gildie

 

Zacznijmy od samego działania. Zmienne tymczasowe {_mapX} oraz {_mapY} służą do określenia położenia gracza tak aby był on na środku mapki. Pętle 13 oraz 23 to rozmiar mapy.
Dzięki temu fragmentowi możemy dalej pozostać na środku oraz określić który chunk jest obok nas i jeszcze dalej w taki sposób żeby ich położenie na mapie było odpowiednie do lokalizacji w grze.
 

set {_x} to {_mapX} * 16
set {_y} to {_mapY} * 16
set {_chunk} to chunk at block {_y} blocks north {_x} blocks west of player

Znowuż ten fragment
 

if {_chunk} is chunk at player:
	set {_m} to "%{_m}%&2█"

Koloruje kratkę na której jesteśmy czyli tak jak mówiłem, środkową. 
Oczywiście kolejna część jest zrozumiała, tak mi się przynajmniej wydaje.
 

else if {_result} is {qg::mapa::%{_chunk}%}:
	if {_result} is {qg::player::%player%::tag}:
			set {_m} to "%{_m}%&a█"
		else:
			set {_m} to "%{_m}%&c█"
	else if {_result} is "STREFA BEZPIECZNA":
		set {_m} to "%{_m}%&b█"
	else if {_result} is "WOJNA":
		set {_m} to "%{_m}%&4█"
	else if {_result} is "":
		set {_m} to "%{_m}%&7█"
	else:
		set {_m} to "%{_m}%&c█"
	add -1 of {_mapY}

Pewnie wiadomo, odpowiada za dobranie kolorów mapy i przejście do następnego chunka (ostatnia linijka).
Ostatnia już część,która jest wymagana to:

message "%{_m}%" to player
set {_m} to ""
add -1 to {_mapY}
set {_mapX} to 11

Dajemy w niej znać,że skrypt ma wysłać już naszą pokolorowaną wiadomość do gracza, zrestartować ją i ustawić następny chunk zachowując informacje,iż gracz ma pozostać na środku.

Dziękuję za uwagę :) liczę na + z Waszej strony oraz uwagi czy pytania.

Odnośnik do komentarza
https://skript.pl/temat/16235-skquery-regiony-osobny-system-region%C3%B3w-mapa/
Udostępnij na innych stronach

  • 1 rok później...
  • Szifter zablokował(a) ten temat
Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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