Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.00 KB | None | 0 0
  1. function ENT:GetCrafting() //nawet nie mysl ze ci to wytlumacze, sam ledwo to wymyslilem XDDDD EDIT: albo w sumie sie postaram
  2.         for k, v in pairs(self.Craftings) do //self.Craftings to tablica zawierajaca wszystkie craftingi wiec po prostu przez nia przelatujemy w tym forze
  3.             //v w kazdej iteracji staje sie po prostu kolejnym craftingiem z tejze tablicy
  4.             local contains = true
  5.             local modifiedcrafting = {}
  6.  
  7.             for x, y in pairs(v.items) do
  8.                 if(modifiedcrafting[y] == nil) then
  9.                     modifiedcrafting[y] = 1
  10.                 else
  11.                     modifiedcrafting[y] = modifiedcrafting[y] + 1
  12.                 end
  13.             end
  14.  
  15.             for x, y in pairs(modifiedcrafting) do
  16.                 /*logiczny and, oba warunki musza byc spelnione, a wiec jesli zabranknie jakiegos przedmiotu, to prawa strona operatora && zmieni sie na false,
  17.                 a co za tym idzie zmienna contains zmieni sie na false i to w sumie koniec, bo potem nie wazne czy kolejny przedmiot bedzie czy nie to i tak contains
  18.                 jest rowne false i juz sie nie zmieni na true
  19.                 P.S. v.items oznacza ze z obecnego craftingu (ktory jest podstawiony pod v przez petle for) bierzemy tablice itemow i lecimy przez nie,
  20.                 y to kolejny item z tej tablicy. Czemu x, y a nie k, v? K, v juz wykorzystalismy w tym przedziale kodu w najwyzszej petli.
  21.                 */
  22.                 contains = contains && (self.StoredItems[x] != nil && self.StoredItems[x] >= y)
  23.             end
  24.  
  25.             if(!contains) then
  26.                 continue //jesli nie zawiera choc jednego przedmiotu to klapa, lecimy z kolejnym craftingiem,
  27.                 //continue tak samo jak return to operator przeplywu sterowania, decyduje on o tym gdzie dalej udac sie w programie
  28.                 //ale continue nie wychodzi z funkcji tak jak return, ani nie przerywa petli tak jak break
  29.                 //continue po prostu zarzuca prace nad obecna iteracja (jak gdyby okrazeniem petli) i skacze do nastepnej iteracji
  30.                 //pomijajac jakikolwiek kod
  31.             end
  32.  
  33.             //jesli wykona sie continue to odtąd
  34.             if(self.CurrentCrafting == nil || #self.CurrentCrafting.items < #v.items) then
  35.                 self.CurrentCrafting = v //tutaj sprawdzamy czy mamy juz jakis prawidlowy crafting, i jesli mamy, to sprawdzamy
  36.                 //z ilu itemow sie on sklada, system faworyzuje zlozone kraftingi, a wiec jesli masz materialy na kilka kraftingow
  37.                 //a mozesz wykraftowac przeciez tylko jeden w czasie jednego uzycia, to wykona sie ten ktory wymaga najwiecej przedmiotow,
  38.                 //czyli np. wiadro + butelka + hamburger wykona sie wczesniej niz np wiadro + butelka, butelka z wodą itp.
  39.             end
  40.             //dotąd nic sie nie wykona
  41.         end
  42.  
  43.         if(self.CurrentCrafting == nil) then
  44.             return false //jesli mimo sprawdzenia kazdego craftingu na zaden nas nie stac to zwracamy falsz
  45.         end
  46.  
  47.         //tu juz mozemy k,v poniewaz wyszlismy z tamtej petli (z reszta patrz jak wciecia sa)
  48.         for k, v in pairs(self.CurrentCrafting.items) do //jesli udalo sie znalezc dobry crafting to lecimy przez jego przedmioty
  49.             self.StoredItems[v] = self.StoredItems[v] - 1 //i odejmujemy je z naszego EQ
  50.             self.NumStoredItems = self.NumStoredItems - 1
  51.         end
  52.  
  53.         return true //zwracamy prawde
  54.     end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement