#ots30wkids #tibia #programowanie
Wreszcie się udało!
Zanim będziecie chcieli mnie zabić za wrzucenie tutaj świętego tagu pozwólcie proszę, że się wytłumaczę.
Jak to zwykle bywa przy moich zabawach, granie w gierki jest tylko pretekstem, żeby coś porobić. Nie inaczej jest z moim OTSem.
Chciałem dać możliwość wylogowania się gdziekolwiek - w Tibi, nie możesz wylogować się przez 60s po tym jak zostałeś zauważony przez ostatniego przeciwnika.
Na początku poszedłem prostą ścieżką - brak statusu in-combat - był do tego nawet całkiem sprytny pstryczek w plikach .lua - pliki do konfigurowania w trybie hot (wystarczy restart serwisu serwera). Zmieniłem czas statusu in-combat na 0 ze skutkiem braku możliwości wylogowania się w ogóle. No to lecimy 1, wartość wyrażona w mili sekundach.
Patrzę, status niby flapuje ale rzeczywiście da się wylogować zawsze. Zadowolony zabrałem się za resztę ficzerów. W czasie developmentu zauważyłem, że niepoprawnie naliczają się zabite potworki co rodzi problemy przy questach takich jak zabij 100 potworów.
Do tego źle liczyło też w hunt analajzerze. Zaczęła się ostra dłubanina, issue na githubie projektu aż w końcu przejście do plików c++, czyli core samego serwera. Tam grube analizy jak liczony jest kill i szukanie błędu w logice z tym związanej. Na gitcie dostałem odpowiedź, że team się temu przyjrzy, więc jak nikt nie jest pewny, że działa to znaczy, że dłubiemy dalej.
Po jakimś tygodniu spróbowania wszystkiego, trochę sobie odpuściłem, żeby zobaczyć co powie team. Trochę grałem, wprowadzałem dodatkowe zmiany, zwiedzałem miejscówki, w których nigdy nie byłem. Na 1 huncie zauważyłem, że są takie momenty podczas walki, że nie mogę użyć run pomimo tego, że nie jestem na cooldownie. Skończyłem gierke, połozyłem się spać. Standardowa pobudeczka koło 3 30, żeby pobujać po cycu młodą. I wtedy EUREKA! Kurwa, nie mogłem już potem usnąć, żeby spróbować tego rano.
A co jeśli problemem jest to, że czasem nie jesteś w in-combat a kill liczony jest tylko wtedy? Jeśli status flapuje, to może się tak zdarzyć!
Pierwsze co po przebudzeniu do kompa, vim config.lua, /PZlocked, dw, dw, dw, i, 5*1000, esc, :, qw, docker-compose restart server!
I taaaak jest! To było to! Kurwa co za ulga.
Teraz pozostało tylko zrobić, możliwość logoutu w czasie jak jesteś in-combat ale tu już po statusie, który wyświetlał się na dole ekranu o niemożności przeprowadzenia procesu, doszedłem sobie w plikach źródłowych to gameprotocol.cpp (pic rel 2). Jeden zakomentowny return dalej i rebuild źródła mamy to!
Jak by ktoś chciał pośmigać na otsie to jeszcze troche surowo ale register i klient do pobrania są dostępne tutaj
http://195.167.154.107:6060/
Mam większość najwazniejszych ficzerów i jako taki balans rozgrywki solo więc w następnym kroku zabieram się za domene i ssla
Jak się zarejestrujecie, dajcie znać wrzucę wam trochę TC na start