Notatki Ziemowita

Aktualizacja PHP

  • Podatność w PHP wymusiła aktualizację PHP (CVE-2026-109618, CVE-2026-109619)
  • Aktualizacja PHP wymusiła aktualizację SMF z 2.0.19 do 2.1.8
  • Aktualizacja SMF wymusiła zmianę kodowania (encoding) oraz wprowadzenie na nowo zmian by dopasować forum do reszty serwisu
  • Zmiana kodowania wymusiła naprawę tabel w bazie danych SMF



1. Aktualizacja PHP

CytatPHP only supports version 8.2 and later. Servers on PHP 8.1 or older get no official fix.
PHP has released 8.5.12, 8.4.27, 8.3.36 and 8.2.35 to address this.

https://sansec.io/research/php2shell
https://www.php.net/archive/2026.php#2026-10-21-5

Są jednak tak zwane "backporty". Wolałem jednak użyć najnowszej wersji PHP.

Jak tylko dostawca mojego hostingu udostępnił poprawioną wersję PHP - ustawiłem globalnie używanie najnowszej wersji.

Użycie najnowszej wersji PHP spowodowało kilkanaście błędów w kodzie n-gry i home, ale także parę w samym SMF 2.1.8 (dodanie 5-tego parametru do wywołania pewnej funkcji).

W większości polegało to na dodaniu sprawdzenia "isset()" przed użyciem zmiennej (starsze wersje PHP pozwalały na użycie niezainicjowanej zmiennej).

Włączyłem wyświetlanie errorów w PHP (tylko dla mojego IP) by widzieć na bieżąco gdzie pojawiają się błędy i czy poprawki w kodzie je usuwają.

Sprawdzałem także logi błędów zapisywane przez SMF, a także te dostępne w cPanel - najbardziej wiarygodne źródło pokazujące wszystkie błędy PHP z całego konta.



2. Aktualizacja SMF

CytatSMF 2.1.8 supports PHP 8.5, 8.4 and 8.3. SMF 2.0 and below are not supported and it is recommended you upgrade to SMF 2.1 as soon as possible. Older SMF versions have limited or no support for PHP 8.2 or higher.
https://www.simplemachines.org/community/index.php?topic=595217
https://wiki.simplemachines.org/smf/Hacking_-_I_think_I_have_been_hacked

Aktualizacja SMF z 2.0.19 na 2.1.8 nie wydaje się dużą aktualizacja, ale zmian było naprawdę sporo. Prostsze było nadpisanie wszystkich plików i odtworzenie moich modyfikacji na wyświetlanie forum n-gry.pl.

Ciekawostka - aktualizacja SMF ma odpowiednie skrypty do obsługi aktualizacji (również by podmienić Settings.php czy strukturę bazy danych). W przypadku N-Gry skrypt ten już na samym początku tego procesu wyrzucał błąd. Ostatecznie wykonałem skrypty aktualizacji poprzez Bash terminal ("php upgrade.php") w cPanel. Skrypty wykonały się poprawnie. Ważne było także to, by plik Settings.php zapisać w kodowaniu UTF-8.

Warto wspomnieć także o istotnej zmianie w obsłudze avatarów pomiędzy wersjami 2.0.19 a 2.1.8. Avatary nie są już traktowane jak zwykłe załączniki. Poprawiłem kod PHP do wyświetlania avatarów autorów artykułów/plików w serwisie (używając do tego SSI).



3a. Zmiana kodowania (encoding)

Niedawno robiłem poprawki do starego kodowania ISO-8859-2 (wymuszone - jak mi się wydaje - przez aktualizację wersji MySQL na hostingu, który używam). Teraz przy aktualizacji SMF do 2.1.8 musiałem wszystko przekonwertować na UTF-8.

Pliki trzeba było otworzyć używając starego kodowania i zapisać używając nowego.
Jednak z bazą danych było trochę więcej roboty... (punkt 5 poniżej).



3b. Poprawki wyglądu

Nadpisanie wszystkich plików SMF wymagało odtworzenie moich modyfikacji na wyświetlanie forum n-gry.pl (https://n-gry.pl/forum/index.php?topic=2961).
Jak to wyglądało przed a jak po:





4. Naprawa bazy danych

Skrypty aktualizujące forum spowodowały niepoprawne wyświetlanie polskich znaków. Na szczęście informacje o tych znakach pozostały nietknięte, zepsute było tylko ich wyświetlanie. Aby wyświetlanie polskich znaków działało poprawnie wszędzie (na serwisie, na forum, ale także na phpMyAdmin) ostatecznie:
  • eksportowałem wszystkie tabele, w których zapisywany jest tekst wprowadzany przez użytkowników,
  • zmieniałem komendę SQL tworzącą tabele (CHARSET i COLLATE),
  • by odzyskać "zepsute" polskie znaki, otwierałem pliki z wyeksportowaną tabelę i komendą SQL jako ISO-8859-2, zmieniałem kodowanie na ISO-8859-1 (ale cofając zmiany w pliku, które ten proces powodował), mając ISO-8859-1, zmieniałem kodowanie na ISO-8859-2 (tutaj bez cofania zmian, które ten proces powodował) (dopiero wtedy pojawiły się poprawnie polskie znaki) i dopiero wtedy zapisywałem ten plik jako UTF-8,
  • usuwałem starą tabelę w bazie danych,
  • importowałem tabelę używając zmienionych komend SQL by stworzyć na nowo

Zmiana doctype na N-Gry

Zamiast:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
<meta http-equiv="Content-language" content="pl-PL" />


Teraz jest:

<!DOCTYPE html>
<html lang="pl">
<meta charset="iso-8859-2">





Przy okazji poprawione HTTPS - zmienione w ustawieniach stylu forum z http na https oraz w pliku Settings:

$boardurl = 'https://n-gry.pl/forum';

Diamenciki - usprawnienia, uproszczenia, lepsze kolory


  • Uproszczenie kodu
  • Usprawnienia
  • Nowy shader do kolorowania poziomów
  • Więcej poziomów
  • Tryb okna

Kampanie Original War

Znowu wróciłem do Original War. Ostatni raz grałem chyba w 2017 roku, czyli aż 9 lat temu.

Ukończyłem obie kampanie na średnim poziomie trudności, żeby się nie przemęczać ;) (oznaczone na żółto, pozostałe to misje ukończone "ostatnio", czyli 9 lat temu i parę dodatkowych misji).


Potem wykorzystując narzędzia dołączone do wersji gry na Steam - "wyciągnąłem" z plików gry obrazy map oraz informacje o celach i medalach kampanii amerykańskiej (https://n-gry.pl/2946) oraz rosyjskiej (https://n-gry.pl/2947).

Nadal nie miałem dość, więc zagrałem jeszcze parę misji stawiając sobie dodatkowe cele:

Kilka zrzutów ekranu z różnych misji:




Przejęcie bazy w 6 misji amerykańskiej:





Zniszczenie bazy w 14 misji amerykańskiej (zwykle budowałem pojazdy i jechałem dalej):





Pokonanie przymierza w 15 misji amerykańskiej (próbowałem schwytać Rotha uzdrawiając go po unieszkodliwieniu, ale nic to nie dawało):





Teleportacja do bazy wroga w ostatniej misji przymierza:





Dwie wersje baza Trockiego w 8 misji rosyjskiej (oraz jak wyglądała wersja druga we wstępach późniejszych kilku misji):





Przejęcie władzy (czyli pokonanie Płatonowa) w 12 misji rosyjskiej:





Przejęcie wszystkich baz amerykanów w 13 misji rosyjskiej:





Koniec kampanii rosyjskiej (bardzo podobały mi się przerywniki filmowe kampanii rosyjskiej (amerykańskiej zresztą też), szczególnie robiły wrażenie 25 lat temu):





Bonus - menu wyboru po ukończeniu 11 misji rosyjskiej - (jak wspomniałem w liście misji kampanii rosyjskiej) decydując której postaci odpowiedzieć, możemy nie odpowiedzieć nikomu (wybierając "QUIT") i przejść do "specjalnej" misji pt. "Oczyszczenie":

Problem z polskimi znakami

Zapewne po zmianach na hostingu (wersja mysql, domyślny encoding) polskie znaki przestały działać. Od teraz trzeba definiować encoding.

Wyodrębnianie danych z plików gry z pomocą AI

Linki: https://n-gry.pl/2946 i https://n-gry.pl/2947





Gemini AI prompt:

give me lists of things from the text below:

1. first list should contain full text from a row that is right after a row starting with "Add Main"
2. second list should contain full text from a row that is right after a row starting with "Add Secondary"
3. third list should contain full text from a row that starts with a "+"

[Txt01.wri]

---

then having those 3 lists please insert them into this text template:

1. first list should populate list under "Cele:", putting each item inside [li][/li] (add more [li] elements if needed)
2. second list should populate list under "Cele poboczne:", putting each item inside [li][/li] (add more [li] elements if needed)
3. third list should populate list under "Medale:", putting each item inside [li][/li] (add more [li] elements if needed)

for each item inserted please remove the trailing "- " or "+ "

[center][size=14pt][b]Misja X: NAZWA[/b][/size]
[size=8pt]DATA[/size][/center]

[i]WSTEP[/i]

[center][url=IMAGE_URL][img]IMAGE_URL[/img][/url][/center]

Cele:
[list]
[li][/li]
[/list]
Cele poboczne:
[list]
[li][/li]
[/list]
Medale:
[list]
[li][/li]
[/list]





Mapy uzyskane z plików gry dzięki narzędziom dołączonym do nowych wersji Original War (Map Editor), np:


Kolejny powrót do kampanii StarCraft II

Ostatnio grałem kampanie StarCraft 2 jakieś 2.5 roku temu. Tym razem postanowiłem po prostu przejść pierwszą kampanię: StarCraft II: Wings of Liberty. Najpierw grałem na poziomie trudności "hard". Grałem tak by zdobywać jak najwięcej punktów badań, by odblokować jak najwięcej ulepszeń. Zanim wybrałem się na "Char" ukończyłem najpierw wszystkie możliwe misje.

Na koniec pomyślałem, że sprawdzę jaki miałem czas - oto lista misji:

Misja 1 - Liberation Day - 03:58
Misja 2 - The Outlaws - 07:31
Misja 3 - Zero Hour - 20:10
Misja 4 - Smash and Grab - 17:53
Misja 5 - The Devil's Playground - 13:19
Misja 6 - Welcome to the Jungle - 17:55
Misja 7 - Cutthroat - 16:44
Misja 8 - The Dig - 31:14
Misja 9 - Whispers of Doom (Zeratul) - 12:40
Misja 10 - A Sinister Turn (Zeratul) - 18:13
Misja 11 - Echoes of the Future (Zeratul) - 19:37
Misja 12 - In Utter Darkness (Zeratul) - 42:38
Misja 13 - Breakout - 20:42
Misja 14 - The Evacuation - 13:33
Misja 15 - The Moebius Factor - 16:38
Misja 16 - Outbreak - 18:55
Misja 17 - Safe Haven - 13:44
Misja 18 - Supernova - 20:22
Misja 19 - Engine of Destruction - 20:48
Misja 20 - Maw of the Void - 25:15
Misja 21 - Media Blitz - 22:18
Misja 22 - The Gates of Hell - 18:11
Misja 23 - Belly of the Beast - 26:11
Misja 24 - All In - 30:07

Całkowity czas: 07:48:36


W końcowej misji korzystałem z ulepszenia pozwalającego przejmować kontrole nad jednostkami Zergów. Pod koniec misji miałem całkiem sporo Brood-Lordów.




Wtedy pomyślałem, żeby sprawdzić jakie są rekordowe czasy przejścia pierwszej kampanii. Rekord to około 1 godzina i 33 minuty. Rekordy na rankingu jaki znalazłem ustalone były na poziomie trudności "normal". Pomyślałem, że sprawdzę jak szybko będę w stanie przejść kampanię na tym poziomie trudności. Tym razem grałem jak najszybciej, często bez ukończenia celów pobocznych, a przez to zebrałem niewiele punktów badań i ulepszeń. Jak tylko pojawiła się możliwość polecenia na "Char" - od razu się tam wybrałem (całkowicie pomijając 6 misji - choć zastanawiałem się czy może warto byłoby niektóre nieobowiązkowe misje jednak ukończyć, by zdobyć punkty badań, by w kolejnych misjach mieć łatwiej i jeszcze szybciej je ukończyć, ale zrezygnowałem z tego pomysłu).

Misja 1 - Liberation Day - 02:22
Misja 2 - The Outlaws - 03:21
Misja 3 - Zero Hour - 20:12
Misja 4 - Smash and Grab - 05:50
Misja 5 - The Devil's Playground - 08:04
Misja 6 - Welcome to the Jungle - 06:30
Misja 7 - Cutthroat - 10:04
Misja 8 - The Dig - 24:35
Misja 9 - Whispers of Doom (Zeratul) - 09:06
Misja 10 - A Sinister Turn (Zeratul) - 05:33
Misja 11 - The Moebius Factor - 09:46
Misja 12 - Echoes of the Future (Zeratul) - 08:04
Misja 13 - Engine of Destruction - 17:08
Misja 14 - Supernova - 14:15
Misja 15 - Maw of the Void - 18:22
Misja 16 - The Gates of Hell - 10:54
Misja 17 - Shatter the Sky - 15:02
Misja 18 - All In - 30:08

Całkowity czas: 03:39:16

Menu Start w Windows 11

Dzięki niewidzialnym ikonkom można chociaż trochę poukładać tak jak się chce.

Anno 117 Pax Romana

Kupiłem Anno 117 na premierę, ale po paru godzinach gry (gdy moje miasta i miasta rywali zamieszkiwało coraz więcej ludzi) mój komputer już nie dawał rady. Wróciłem do gry kiedy kupiłem nowy komputer (choć nawet w nowym komputerze wiatraczki muszą chodzić na pełnych obrotach w trakcie gry).

Na początku trochę się odbiłem. Chyba z wiekiem poznawanie i uczenie się nowych gier przychodzi mi z większym wysiłkiem. Jednak z czasem było tylko lepiej. Teraz mogę powiedzieć, że Anno 117 bardzo mi się podoba.


Praktycznie każdy budynek oddziałuje na inne budynki w pobliżu. Na początku myślałem, że chodzi tylko o domy, ale nie - chodzi o każdy budynek. Istotne jest, że efekty pozytywne danego typu budynku nie sumują się (np. efekt tkalni: +1 do przychodów z każdego budynku w pobliżu - kilka tkalni to nadal tylko +1). Efekty negatywne jednak sumują się (np. piekarni: -2 do bezpieczeństwa przeciwpożarowego - pięć piekarnia to już -10 na KAŻDY budynek w pobliżu). Dlatego najlepiej budować budynki z potrzebnymi efektami pozytywnymi tam gdzie jest dużo budynków (najczęściej domów - bo są najmniejszymi budynkami), a budynki z negatywnymi efektami stawiać, gdzieś bliżej lasów czy pól uprawnych, gdzie budynków jest mało. Istotne jest także, że kiedy budynek nie pracuje, jego efekty przestają działać - nawet jeśli powodem niedziałania jest pełny magazyn i brak możliwości odstawienia towarów.


Atrybutów jest kilka:

  • przychód
  • populacja
  • wiedza
  • wiara
  • prestiż
  • zdrowie
  • zadowolenia
  • bezpieczeństwo przeciwpożarowe

Na początku nie rozumiałem jak to wszystko działa. Myślałem, że +1 do populacji zwiększa ilość mieszkańców i tym samym pośrednio przychód - ale nie - zwiększenie jednego atrybutu nie zwiększa pośrednio innych. Efekty zwiększające populację zwiększają tylko ilość siły roboczej.

Największym budynkiem możliwym do zbudowania jest amfiteatr. Podobnie jak światowa wystawa w Anno 1800 do budowy tego budynku niezbędne są setki ton materiałów budowlanych. Budowa odbywa się w 3 etapach, każdy trwa całkiem sporo czasu i wymaga dużo siły roboczej (na każdym etapie siły roboczej innego poziomu - wyzwoleńców, plebejuszy, ekwitów). A do działania amfiteatru niezbędni są patrycjusze. Efekty amfiteatru oddziałują na każdy budynek na wyspie (bez znaczenia na odległość).


Dzięki wiedzy można dokonywać odkryć i odblokowywać nowe efekty - funkcjonalność znana już z kilku poprzednich odsłon Anno. Jednak wiara jest czymś nowym. Jak to w starożytnym Rzymie było - można czcić wielu bogów. Na każdej wyspie można wybrać innego boga. Po osiągnięciu pewnej ilości punktów wiary pewne efekty się uruchamiają. Dodatkowo bóg z największą ilością punktów wiary uruchamia jeden specjalny efekt globalny.


Prowadzenie działań militarnych jest moim zdaniem zrobione całkiem praktycznie. Po desancie wojsk na wyspę trzeba przejąć "willę namiestnika" (specjalny budynek, można wybudować tylko jeden na wyspie). Gdy się ją przejmie i utrzyma przez jakiś czas wyspa zostaje przejęta. Po przejęciu jest kilka opcji:



  • zwasalizowanie wyspy - to tak naprawdę stan domyślny, stan w którym nie ma się kontroli nad wyspą, nie ponosi się żadnych kosztów, jest jakby "zamrożona" i czeka na decyzje
  • zrównanie z ziemią - wszystkie budynki są niszczone, zostaje tylko magazyn - może wpływać negatywnie na stosunki dyplomatyczne
  • przejęcie wyspy wraz zabudową - wymaga to jednak wydania denarów, lub poświęcenia pewnej ilości punktów reputacji u cesarza


Warto wspomnieć, że wyspy rywala (a dokładniej wszystko co przeciwnik posiada) można (pod pewnymi warunkami) przejąć wykupując je - choć trzeba przyznać, że kwota jest całkiem wysoka.

I tutaj trzeba wspomnieć o cesarzu. Dzięki dobry stosunkom z cesarzem (zapewnianym przez wykonywania zadań i podejmowanie decyzji, które cesarzowi się podobają) otrzymuje się pewne benefity (np. niższe ceny kupna towarów czy specjalistów). Najistotniejszym moim zdaniem jest benefit otrzymywany przy maksymalnie możliwym poparciu cesarza - to jest możliwość wykupienia rywali. Potrzebnych do tego jest wiele denarów, ale po wykupieniu otrzymuje się wszystko co miał rywal - wszystkie wyspy, wszystkie statki, wszystkie oddziały wojskowe. (W moim przypadku jednego z rywali wykupiłem za około 22 miliony denarów, a drugiego za 38 milionów denarów.)

Nowością, którą można porównać do elektryczności w Anno 1800 są akwedukty. Dostęp do wody umożliwiany dzięki akweduktom jest niezbędny np. w łaźniach czy na forum. Plantacjom daje bonus do produkcji upraw. Ponadto budynki wokoło otrzymują +3 do bezpieczeństwa przeciwpożarowego.

Albion to odblokowywany po pewnym czasie sektor, w którym można produkować inne towary niż w pierwszym sektorze - Lacjum. Ponadto ludność można rozwinąć na dwa sposoby - celtycką i zromanizowaną. Przy czym obie mogą współistnieć na tej samej wyspie. Potrzeby mieszkańców Albionu są inne niż w Lacjum (nawet tych zromanizowanych). Warto wspomnieć, że nawet jeśli mieszkańcy nie potrzebują budynku danego typu (np. Celtowie nie potrzebują do rozwoju łaźni) to czasem warto mimo tego zbudować ten budynek (w przypadku łaźni daje ona duży bonus do zdrowia i bezpieczeństwa przeciwpożarowego).





W pierwszym dodatku o nazwie Popielne Proroctwa (Prophecies of Ash) sektor Lacjum został powiększony, kilka nowych wysp w tym wyspa Cinis - największa wyspa. Oraz możliwość zatrudniania specjalistów, którzy mogą zwiększyć żyzność wyspy (również z poziomu 0 - więc praktycznie na każdej wyspie można uprawiać wszystkie typy upraw rolniczych, a nawet wydobywać z kopalni pierwotnie niedostępne surowce. Potrzebne do tego są oficja, ale ich limit można z czasem zwiększać.


Nowością są także okresowe wybuchy wulkanu, które powodują duże spadki w produkcji upraw zaraz po wybuchu, ale po jakimś czasie dają bonus (z powodu zwiększenia żyzności dzięki "ziemi wulkanicznej"). Wybuchy wulkanów zwiększają także ryzyko pożarów oraz niezadowolenie mieszkańców.





W Anno 117 dostępnych jest wiele budowli upiększających. Niestety nie mają one żadnego wpływu na wyspę i ich mieszkańców. Na zrzucie ekranu poniżej - kilka upiększeń wokół amfiteatru.


Ciekawostką jest, że po zbudowanych miastach można się "przejść". Po wciśnięciu [Ctrl] + [Shift] + [R] pojawia się postać którą możemy sterować.





W pewnym momencie postanowiłem sprawdzić jaka jest maksymalna możliwość przychodu, którą można uzyskać z pojedynczego domu. Udało mi się osiągnąć 90 denarów zapewniając wszystkie towary i zaspokajając wszystkie potrzeby. Potrzebnych było do tego jednak kilkanaście budynków w okolicy (działających!), których efektem jest zwiększenie przychodu. Zbudowanie wszystkich takich budynków w pobliżu wszystkich domów nie jest w praktyce możliwe, więc praktyczny maksymalny przychód jest trochę mniejszy.


Widok zmieniającej się w trakcie rozgrywki minimapy (w pewnym momencie mapa się powiększa - to efekt dodatku Popielne Proroctwa).

StarCraft ASL 21

StarCraft ASL 21 - Co za finał!