Skocz do zawartości
  • Dołącz do społeczności!

    👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[PY] Skrypt naprawiający czarne plamy na minimapie


Rekomendowane odpowiedzi

Opublikowano (edytowane)

Długi czas oczekiwania w końcu dobiegł końca, oto na wasze ręce daje kawałek kodu, który rozwiązuje odwieczny problem WE.

Jak wiadomo, nowe drzewka przy generowaniu z WE są widoczne jako czarne plamy na minimapie, a ja jestem perfekcjonistą.

Podziwiam, że tyle lat byliście w stanie patrzeć na te czarne plamy i udawać, że ich tam nie ma i nie wygląda to źle.

Natomiast już nie musicie tego robić, skorzystajcie z mojego skryptu, który ma proste switche, ale za to szeroki wachlarz możliwości.

Nikt nie pytał, a każdy potrzebował 🙂

 

 

Żeby go odpalić trzeba mieć komputer, pythona, CMD i bibliotekę:

Spoiler

pip install pillow

 

Pod skrypt tworzycie sobie folder, wrzucacie go tam, a następnie do środka folder całej mapy i duży atlas w formacie .dds czy .bmp (obojętnie), ma to wyglądać tak:

Zrzut-ekranu-2025-04-25-141841.png

 

 

Gdy użyjecie skryptu, powstaje folder z gotowymi plikami po przeróbce, nie rusza tych waszych źródłowych, a przy innych opcjach jak sobie wybierzecie, to nadpisuje te znajdujące się w tym folderze, więc można się pobawić ustawieniami i tam sobie zerkać np. na duży atlas, jak się zmienia.

 

 

Kod PY:

Spoiler

import os,random,shutil,sys
from PIL import Image
from collections import deque

P1=[(20,70,20),(15,65,15),(10,60,10),(5,55,5),(7,50,7),(4,40,4)]
P2=[(30,90,30),(25,80,25),(20,70,20),(15,65,15),(10,60,10),(5,55,5)]
P3=[(100,170,100),(90,160,90),(110,90,60),(90,70,50),(70,50,30),(60,130,60)]
S=20
F="FIXED_MAP"
N=os.path.basename(sys.argv[0])

def n(x,y,w,h):return[(x+dx,y+dy)for dx,dy in[(-1,0),(1,0),(0,-1),(0,1)]if 0<=x+dx<w and 0<=y+dy<h]

def p(s,d,pal,t,m):
 img=Image.open(s).convert("RGBA");pix=img.load();w,h=img.size
 if m==1:
  for y in range(h):
   for x in range(w):
    r,g,b,a=pix[x,y]
    if r<=t and g<=t and b<=t and a>0:pix[x,y]=random.choice(pal)+(a,)
 else:
  v=[[0 for _ in range(w)]for _ in range(h)]
  for y in range(h):
   for x in range(w):
    r,g,b,a=pix[x,y]
    if not v[y][x]and r<=t and g<=t and b<=t and a>0:
     q=deque([(x,y)]);bL=[]
     while q:
      cx,cy=q.popleft()
      if v[cy][cx]:continue
      cr,cg,cb,ca=pix[cx,cy]
      if cr<=t and cg<=t and cb<=t and ca>0:
       v[cy][cx]=1;bL.append((cx,cy));q.extend(n(cx,cy,w,h))
     z=len(bL)
     if m==2:
      sH=pal[2:4]if z<=S else pal[3:]
      for i,(bx,by)in enumerate(bL):
       c=pal[0]if z>S and i==z//2 else random.choice(sH)
       pix[bx,by]=c+(pix[bx,by][3],)
     elif m==3:
      for i,(bx,by)in enumerate(bL):
       if i%10==0:pix[bx,by]=pal[0]+(pix[bx,by][3],)
       elif i%7==0:pix[bx,by]=pal[1]+(pix[bx,by][3],)
       else:pix[bx,by]=random.choice(pal[2:])+(pix[bx,by][3],)
 img.save(d);print(f"Przerobiono: {d}")

def fnd(pal,t,m):
 for r,d,fL in os.walk(os.getcwd()):
  if F in r:continue
  for f in fL:
   if f==N:continue
   sP=os.path.join(r,f)
   rP=os.path.relpath(sP,os.getcwd())
   dP=os.path.join(F,rP)
   os.makedirs(os.path.dirname(dP),exist_ok=True)
   lf=f.lower()
   if lf=="minimap.dds"or("atlas"in lf and(lf.endswith(".dds")or lf.endswith(".bmp"))):p(sP,dP,pal,t,m)
   else:shutil.copy2(sP,dP)

if __name__=="__main__":
 print("════════════════════════════════════")
 print("      Matesh dla MPCForum.pl")
 print("════════════════════════════════════\n")
 print("════════════════════════════════════")
 print("  Skrypt naprawie czarne minimapy")
 print("════════════════════════════════════\n")
 while 1:
  print("Wybierz styl kolorystyki roślinności:")
  print("1 - Ciemnozielony\n2 - Zielony\n3 - Pustynny")
  c=input("Wybór (1-3): ")
  if c in["1","2","3"]:break
  print("\nJaja se szmato robisz?!\n")
 pal=P1
 if c=="2":pal=P2
 elif c=="3":pal=P3
 while 1:
  print("\nWybierz tryb wypełnienia czerni:")
  print("1 - Losowe (Piksel)\n2 - Inteligentny (Gradient)\n3 - Zaawansowany (Gradient + Kamuflaż + Wzory)")
  m=input("Wybór (1-3): ")
  if m in["1","2","3"]:m=int(m);break
  print("\nJaja se szmato robisz?!\n")
 while 1:
  t=input("\nPodaj poziom tolerancji czerni (1-20, domyślnie 10): ")
  if t.strip()=="":t=10;break
  elif t.isdigit()and 1<=int(t)<=20:t=int(t);break
  print("\nJaja se szmato robisz?!\n")
 os.makedirs(F,exist_ok=True)
 fnd(pal,t,m)

 

Skrypt po uruchomieniu:

Zrzut-ekranu-2025-04-25-141635.png

 

 

Źródłowy:

natural-map-atlas.png

 

 

Porównanie możliwości (dla tolerancji 15 - trochę za ostro w tym wypadku o jakieś 3-4 punkty):

1. Ciemnozielony

a) Losowe

natural-map-atlas-losowe-ciemno-zielony.

 

b) Inteligentny

natural-map-atlas-gradient-ciemno-zielon

 

c) Zaawansowany

natural-map-atlas-zaawansowany-ciemno-zi

 

2. Zielony

a) Losowe

natural-map-atlas-losowe-zielony.png

 

b) Inteligentny

natural-map-atlas-gradient-zielony.png

 

c) Zaawansowany

natural-map-atlas-zaawansowany-zielony.p

 

3. Pustynny

a) Losowe

natural-map-atlas-losowe-pustynny.png

 

b) Inteligentny

natural-map-atlas-gradient-pustynny.png

 

c) Zaawansowany

natural-map-atlas-zaawansowany-pustynny.

 

 

Edytowane przez Matesh
Zarax, SlimShadv i Hooltras lubią to

:makka: Wszystkie assety nasze są, leaking prawem, a nie towarem :makka:

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...