Skocz do zawartości
  • 0

podstawianie zmiennych i argumentów


luk4sMC
 Udostępnij

Pytanie

Witam.

Napisałem skrypt, który pozwala na pozostawianie wiadomości wskazanemu graczowi. Po zalogowaniu każdy gracz dostaje listę wiadomości.

KIt2WB.jpg

Napotykam na kilka problemów z:

  • podstawieniem nazwy gracza do wiadomości.
  • wstawieniem całej wiadomości tj. <player> <text>, <name of player> <textr

Metoda podana na forum z 2015 nie działa..niestety.

command /sendmsg [<player>] [<text>]:
	trigger:
		
		if arg-2 is set:
			
			#dodaj do: list.<player>, treść wiadomosci: <text>
			set {player} to arg-2
			add arg-2 to {list.%arg-1%::*}
			send "&bWysłano wiadomośc do: &6%arg-1%"

Nie wiem czy z tego będą korzystał, ponieważ różne długości nazw graczy zrobią mi śmietnik na czacie. Chyba, że da się ograniczyć wyświetlenie nazwy gracza do np. max 15 znaków długości???

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

15 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • -2

Przedstaw aktualny kod, który posiadasz.

7 minut temu, luk4sMC napisał:

set {player} to arg-2

do czego ta linijka?

 

+ w komendzie zmień 

7 minut temu, luk4sMC napisał:

[<player>]

na [<offlineplayer>]

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

  • 0
Teraz, luk4sMC napisał:

Napotykam na kilka problemów z:

podstawieniem nazwy gracza do wiadomości.

wstawieniem całej wiadomości tj. <player> <text>, <name of player> <textr>

Nie rozumiem, mógłbyś dokładniej wyjaśnić?

Teraz, luk4sMC napisał:

Nie wiem czy z tego będą korzystał, ponieważ różne długości nazw graczy zrobią mi śmietnik na czacie.

Cóż, w twoim kodzie jest taki problem, że używasz zmiennej globalnej do ustawiania prostego argumentu w komendzie, mimo że ta zmienna nie ma żadnego zastosowania w kodzie.

Dodatkowo nie sprawdzasz czy arg-1 jest ustawiony, co może spowodować problemy.

3 minuty temu, luk4sMC napisał:

Chyba, że da się ograniczyć wyświetlenie nazwy gracza do np. max 15 znaków długości???

Jak najbardziej.

if player's name's length <= 15:

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
command /sendmsg [<player>] [<text>]:
	trigger:
		
		if arg-2 is set:
			
			#dodaj do: list.<player>, treść wiadomosci: <text>
			add arg-2 to {list.%arg-1%::*}
			send "&bWysłano wiadomośc do: &6%arg-1%"

/sendmsg <gracz> <wiadomość>
Gracza po zalogowaniu dostaje listę wiadomości...

on join:
	
	send ""
	send "&bMasz Wiadomość:"
	loop {list.%player%::*}:
		send "&c- &f%loop-value%"
		
	send ""

 

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

  • 0
Teraz, luk4sMC napisał:

command /sendmsg [<player>] [<text>]:
	trigger:
		
		if arg-2 is set:
			
			#dodaj do: list.<player>, treść wiadomosci: <text>
			set {_arg-1} to arg-2
			add arg-2 to {list.%arg-1%::*}
			send "&bWysłano wiadomośc do: &6%arg-1%"

sedmsg <gracz> <wiadomość>
Gracza po zalogowaniu dostaje listę wiadomości...

No widzisz, jeżeli po zalogowaniu to argument nr 1 typu 'player' nie zadziała poprawnie, gdyż ten typ wymaga gracza online. W twoim wypadku powinien zostać użyty 'offline player', który pozwala na użycie gracza, który może być zarówno online jak i offline.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
2 minuty temu, CoFFeIN04 napisał:

To aktualnie nie ma prawa wyświetlić czegokolwiek przy dołączeniu na serwer.

jak nie ma prawa skoro to robi i wyświetla - czego przykład masz na screenie - to że null nie jest uwzględniony nie oznacza że kod nie zadziała, przestań tu mieszać.

Odnośnik do komentarza
Udostępnij na innych stronach

  • -3
Teraz, PanMaruda napisał:

jak nie ma prawa skoro to robi i wyświetla - czego przykład masz na screenie - to że null nie jest uwzględniony nie oznacza że kod nie zadziała, przestań tu mieszać.

a teraz zobacz że jego wpis został edytowany i wcześniej nie zawierał kodu z "on join"

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Działa, działa...

tekst wiadomości zostaje dodany do listy gracza wskazanego...

command /sendmsg [<player>] [<text>]:
			add arg-2 to {list.%arg-1%::*}

czyli powiedzmy: <dodaj text wiadomości> do <list.nazwa_gracza>

 

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

  • 0
1 minutę temu, CoFFeIN04 napisał:

a teraz zobacz że jego wpis został edytowany i wcześniej nie zawierał kodu z "on join"

jasne, rozumiem - proszę jakiegoś służbistę o potwierdzenie jego słów.

 

a co do tematu - jeżeli chcesz żeby odbiorca widział także nick tego kto do niego napisał, wystarczy wstawić nick gracza i argument do jednego tekstu i dopiero potem dodać do listy, np.
 

add "%player% pisze: %argument 2%" to {lista::*}

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • -2
1 minutę temu, luk4sMC napisał:

Działa, działa...

tekst wiadomości zostaje dodany do listy gracza wskazanego...


command /sendmsg [<player>] [<text>]:
			add arg-2 to {list.%arg-1%::*}

czyli powiedzmy: <dodaj tesxt> do <list.nazwa_gracza>

 

tak jak już wspominaliśmy kilkukrotnie, zmień [<player>] na [<offlineplayer>]

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Zarejestruj się lub zaloguj, aby zobaczyć ukrytą treść!

Skrypt Zostaw Wiadomowsc *.SK

command /sendmsg [<player>] [<text>]:
	trigger:
		
		if arg-2 is set:
			
			add 1 to {login.%player%}
						
			send ""
			#dodaj do: list.<player>, treść wiadomosci: <text>
			add "%player%: %arg-2%" to {list.%arg-1%::*}
			send "&bWiadomość &6(&f%{login.%player%}%&6) do &6%arg-1%:"
			send " &c- &f%arg-2%"
			send ""
			
command /readmsg:
	trigger:
		
		send ""
		send "&bWiadomości: &6(&f%{login.%player%}%&6):"
		loop {list.%player%::*}:
			send " &c- &f%loop-value%"
		send ""
			
command /deletemsg:
	trigger:
		delete {list.%player%::*}
		delete {login.%player%}
		send "&bUsunięto wszystkie wiadomości: &6%player%"

Skrypt Auto Wiadomość *.SK

on join:

	if {login.%player%} is not set:
		set {login.%player%} to 0
	
	send ""
	send "&bMasz Wiadomość &6(&f%{login.%player%}%&6)"
	loop {list.%player%::*}:
		if player's name's length <= 10:
			send "&c- &f%loop-value%"
	send ""

Do zrobienia:

ustawienie stałej długości nazw graczy dla formatowania tekstu #nie wiem jak to się nazywa.. w printf '%-10s %s\n' 'Gracz' 'Wiadomosc'

jezeli wiadomosci jest duzo, przy kazdym logowaniu usuwa najstarsza z listy

inne, zalecane, proponowane

PS To pierwszy skrypt. który podoba się moim dzieciakom xD

 

17 godzin temu, CoFFeIN04 napisał:

tak jak już wspominaliśmy kilkukrotnie, zmień [<player>] na [<offlineplayer>]

Ręcznie jak wpiszesz gracza, którego nie ma na serwerze, to też działa...

 

command /sendmsg [<player>] [<text>]:   #<-- pierwszy argument to Gracz, który jeżeli nie ma go na serwerze, to nie wyświetli się pod Tab i wpisuje go z pamięci
	trigger:
		
		if arg-2 is set:   #<-- Nie ma potrzeby sprawdzania wszystkich argumentów, ponieważ jezeli arg-50 istnieje to istnieje też arg-22 Logiczne
			
			add 1 to {login.%arg-1%} #<--tutaj arytmetyka ma się dobrze i zlicza każdą jedną dodaną wiadomość
						
			send ""
			#dodaj do: list.<player>, treść wiadomosci: <text>
			add "&6%player%: &f%arg-2%" to {list.%arg-1%::*} #<-- ale tutaj już nie wystwietla, dostaje none. Jak moze zwracac none jeżeli arg-1 istnieje, jest z palca wpisany i to czy gracz jest na serweie, czy nie -nie ma znaczenia bo arg-1 istnieje w formie łańcucha znaków!!
			send "&bWiadomość &6(&f%{login.%arg-1%}%&6) do &6%arg-1%:"

 

CoFFeIN04 zwracam honor!!!

<offlineplayer> rozwiązał problem!!! Mogłem wykorzystać dla pierwszego argumentu <text>, ale zależało mi na Tab'owaniu graczy. Dziwna za zmienna player. Muszę się jej przyjrzeć dokłądniej...

 

Edytowane przez luk4sMC
Nieaktywny

Łączę posty.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
47 minut temu, luk4sMC napisał:

To powiano działać i działa w połowie, więc pytanie czego ja nie rozumiem, gdzie popełniam błąd logiczny?

Wpisując <player> dostaje poid Tab liste graczy online, wpisując <offlineplayer> nie dostaje listy graczy, którzy serwer odwiedzili???

Tak jak wspomniałem wcześniej, <player> oznacza gracza obecnego na serwerze i przy wpisywaniu jego nazwy można posłużyć się tabem, aby pomóc sobie przy wpisaniu jego nicku.

Natomiast <offlineplayer> w odróżnieniu od <player> może być zarówno online, jak i offline, a w dodatku jego nazwa musi zostać dokładnie wpisana, tutaj nie ma możliwości pomagania sobie tabem, aby wpisać jego nazwę.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
9 godzin temu, Kormic napisał:

Tak jak wspomniałem wcześniej, <player> oznacza gracza obecnego na serwerze i przy wpisywaniu jego nazwy można posłużyć się tabem, aby pomóc sobie przy wpisaniu jego nicku.

Natomiast <offlineplayer> w odróżnieniu od <player> może być zarówno online, jak i offline, a w dodatku jego nazwa musi zostać dokładnie wpisana, tutaj nie ma możliwości pomagania sobie tabem, aby wpisać jego nazwę.

Zauważyłem to. Korzystając ze zmiennej <player> gracz obecny na serwerze tab'ował się i zliczanie wiadomości działało prawidłowo. Natomiast gdy nie był obecny na serwerze, wysyłanie wiadomości działało prawidłowo, ale zliczanie ich już nie łącznie z nazwą gracza, która nie był podstawiana a send wyświetlał none. Zamiana na <offlineplayer> rozwiązała problem...

Na przyszłość polecam podstawianie zmiennych na różne sposoby i wyświetlanie ich na czacie...Brak wyniku będzie jakimś wyznacznikiem gdzie szukać przyczyny problemu ;)

Odnośnik do komentarza
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
Odpowiedz na pytanie...

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

 Udostępnij

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

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