Mudlet - skrypty

Forum techniczne - konfiguracja i skrypty
Awatar użytkownika
Zurin
Posty: 97
Rejestracja: pt sty 17, 2020 11:03 pm

Mudlet - skrypty

Post autor: Zurin » pn sty 24, 2022 1:43 pm

Poniżej przedstawiam jak w prosty sposób zrobić sobie licznik zabitych stworzeń.

Najpierw zróbmy sobie niezbędne zmienne - w górnym pasku klikamy na przycisku Variables a w otwartym oknie "Add Item". Jako nazwę wpisujemy 'zabici' a typ wartości (Value type) ustawiamy na table. Na koniec klikamy Save Item oraz Activate. Tak samo tworzymy drugą zmienną o nazwie 'zabiciTotal'.
Poniżej zamieszczam screen dla ułatwienia:
licznik1.jpg
licznik1.jpg (108.62 KiB) Przejrzano 264 razy
Kolejną rzeczą której potrzebujemy do trigger - po to aby nasz skrypt reagował na zabicie moga i odpowiednia zwiększał liczniki. Niestety, tu jest taki problem - nie byłem w stanie smusić triggera do działania z polskimi znakami. Zatem aby cały nasz licznik działał, musimy niestety przełączyć grę w tryb bez polskich znaków...

No dobrze, zatem potrzebny jest nam trigger. Po lewej stronie w menu mamy Trigger - przełączamy się tam i znów klikamy Add Item i wypełniamy pola tak jak na poniższym obrazku:
liczni 2.jpg
liczni 2.jpg (166.34 KiB) Przejrzano 264 razy
Dla ułatwienia wkleję jeszcze tekst triggera:

Kod: Zaznacz cały

^(Zabil(es|as) ([A-Za-z ]+))\.$
Nie zapomnijcie na końcu kliknąś Save Item oraz Activate!

Kolejną rzaczą która jest tu potrzebna są komendy do obłsługi naszego licznika. Przełączamy się zatem na sekcje Aliases i znów, taką samą metodą jak poprzednio tworzymy trzy nowe komendy: 'reset', 'resetGlobal', 'zabici'.
licznik3.jpg
licznik3.jpg (108.15 KiB) Przejrzano 264 razy
Na samym końcu to co najważniejsze - skrypt. Przełączamy się na scripts i klikamy Add Item. Następnie w polu skryptu wklejamy to:

Kod: Zaznacz cały

-------------------------------------------------
--         Put your Lua functions here.        --
--                                             --
-- Note that you can also use external Scripts --
-------------------------------------------------
function init()
  if not initialized then
  	zabici = {}
		zabiciTotal={}
		loadVars();
		initialized = true
	end
end

function addKill(co) 
  if table.contains(zabici,co) then
		zabici[co] = zabici[co]+1
	 else 
	  zabici[co]=1
	end
	if table.contains(zabiciTotal,co) then
		zabiciTotal[co] = zabiciTotal[co]+1
	 else 
	  zabiciTotal[co]=1
	end
  saveVars()
end

function raport2() 
  local key;
	local val;
	local lacznie = 0; 
	local lacznieTeraz = 0; 
	echo("+-------------- Zabiles (lacznie): --------------+\n")
  echo("|                                                |\n")
	local tablicaLaczna = {}
	local n = 0
	for k,v in pairs(zabici) do
	  n=n+1
    tablicaLaczna[n]=k
  end
	for k,v in pairs(zabiciTotal) do

	  if  not table.contains(tablicaLaczna,k) then
  		n=n+1
    	tablicaLaczna[n]=k
  	end
	end
		
	local tablicaSuma = {}
	
	for kk in ipairs(tablicaLaczna) do
	  
		if table.contains(zabiciTotal,tablicaLaczna[kk]) then
		   tablicaSuma[tablicaLaczna[kk]] = zabiciTotal[tablicaLaczna[kk]]
		end	 
		if table.contains(zabici,tablicaLaczna[kk]) then
		   tablicaSuma[tablicaLaczna[kk]] = tablicaSuma[tablicaLaczna[kk]] 
		end
	end
	local lacznie = 0
	local lacznieTeraz = 0
  for key,val in pairs(tablicaSuma) do
	  
		
		
	  local name = string.sub(key .. " ...............................", 0, 32)
    local nb = tostring(tablicaSuma[key])
		local terazStr = tostring(zabici[key])
		if terazStr == "nil" then
			terazStr = "0"
		end	
    echo("| " ..  name .. " " .. string.sub(terazStr .. "/" .. nb .. "            ", 0, 12) .. "  |\n")
    lacznie = lacznie + tablicaSuma[key]
		if table.contains(zabici,key) then
			lacznieTeraz = lacznieTeraz + zabici[key]
		end	 
  end
  echo("|                                                |\n")
  echo("| LACZNIE: ....................... " .. string.sub(tostring(lacznieTeraz) .. "/".. tostring(lacznie) .. "            ", 0, 12) .. "  |\n")
	echo("+------------------------------------------------+\n")
end

function notifyKill()
  local tab = {}
	for i in string.gmatch(matches[4], "%S+") do
   table.insert(tab,i)
  end
	addKill(tab[3])
end


function reset()
 zabici = {}
end

function resetGlobal()
		zabici = {}
		zabiciTotal={}
		saveVars()
end

init()
remember("zabiciTotal")
loadVars();
Oczywiście jak zwykle nie zapominamy o Save Item oraz Activate.

Następnie robimy restart Mudleta a po jego ponownym uruchomieniu możemy cieszyć się licznikiem zabitych wrogów.

Obsługa jest następująca:
- polecenie 'zabici' podaje stan licznika, pierwsza liczba to liczba zabitych stworzeń od ostatniego uruchomienia Mudleta, druga liczba to całkowita liczba zabitych stworzeń (oczywiście musimy coś najpierw zabić aby licznik pokazał jakiekolwiek liczby(
- polecenie "reset" zeruje licznik aktualnej sesji
- polecenie "resetGlobal" zeruje licznik całkowity

Miłej zabawy!
To tylko mój podpis. Czytaj dalej.

Awatar użytkownika
Melisandre
Posty: 86
Rejestracja: czw sty 30, 2020 8:07 am

Re: Mudlet - skrypty

Post autor: Melisandre » pt lut 04, 2022 1:59 pm

Fajny licznik. Skromny, ale spełnia swoje zadanie.

ODPOWIEDZ