0.7 i Linux

Haha, dałeś mi dobrą wskazówkę :smiley: chodziło o dużą literę :stuck_out_tongue: on szukał w “Fonts” a ja miałem “fonts”. Potem jeszcze kilka błędów i się uruchomiło :slight_smile:

Ale z jakiś powodów myszka działa jakby była pijana xD Raz szybciej raz wolniej ale zdecydowanie wolniej niż naprawdę przez co dojadę do końca ekranu a ona zaraz za mną… pomijajac to, pomimo, że denerwujące dałem na Single Scenario->Start i gra się wyłącza (możliwe, że znów problem z polską wersją…). Ach i każda mapa jest dla niego corrupted (czyżby znowu polska wersja?)

logi:

gdb (tylko końcówka)

ok, więc coś odkryłem. Jakaś funkcja odwołuję się do folderu maps przez co jak jest Maps to gra się nie włącza. Jednak jak dam maps to on szuka znów map w Maps… podpowiesz mi gdzie to zmienić aby i tu i tu było z małej literki?

EDIT:

Chyba znalazłem

pliczkiTemp.push_back("Maps/"+(dir->path().leaf()));

w cpregame.cpp

Jednak po zmianie, gra się wywala (taki sam efekt otrzymuję jak po prostu skopiuję folder Maps jako maps (aby mieć dwa))

gdb

Wygląda na ten sam bug z wczytywaniem map, do któéego dotarł Dikamilo. Problem nietyle z Linuksem, ile z GCC. Nie mam na to dobrego pomysłu.
Przerobiłem na razie kod odpowiadający za wczytywanie map. Uaktualnij źródła i wypróbuj. Nawet jeśli nie zadziała, to przynajmniej powinno się ciekawiej wysypywać. :wink:

Więc ukłony bo najwyraźniej już dobrze wczytuje mapy. Ignorując problem z myszką postanowiłem uruchomić grę. Kiedy wybiorę mapę z oryginalnych Herosów (czyli tych polskich) to jest taki log:

gdb

Gdy wybiorę mapę z WoG

gdb

Jako że nasze “problemy” tyczą się praktycznie tego samego, pozwolę sobie napisać w tym temacie.

Więc, wprowadzone zmiany są na duży plus. Jednak pojawił się następny problem, mianowicie z połączeniem do serwera, gdy wybieram mapę (obojętnie z jakiej wersji), client ładuje serwer następnie serwer zamyka się i gra stoi, w logach widać to:

client:

...
Initialization CPreGame (together): 953
Initialization of VCMI (together): 3859
Preparing shared memory and starting server: 32
Waiting for server... 2344
Establishing connection...
Found endpoints:
	0: 127.0.0.1:3030
Trying connection to 127.0.0.1:3030  (0)

Przy niektórych mapach klient wywala takie coś:

Establishing connection...
Found endpoints:
	0: 127.0.0.1:3030
Trying connection to 127.0.0.1:3030  (0)

Cannot establish connection! Retrying within 2 seconds
Establishing connection...
Found endpoints:
	0: 127.0.0.1:3030
Trying connection to 127.0.0.1:3030  (0)
Problem with connecting: 
system:10061
Something went wrong... checking for error info
system:10061

server:

...
CVCMIServer created!
Listening for connections at port 3030
We've accepted someone... 
Próbowano przeprowadzić próbę na obiekcie, który nie jest gniazdem

Mam podlinkowane liby wsock32 oraz ws2_32 (od winsock) w serverze i dll. gdb nie pokazuje nic, bo to serwer się wychacza.

===
Podam jeszcze niezbędnie zmiany aby VCMI dal się skompilować na mingw, może będzieice chcieli to dodać :]

  • problem z konsolą (gra nie loguje do okna tylko do 2 lików txt):
    w CMP.cpp dodać po includach:
#if __MINGW32__
#undef main
#endif
  • undefined reference to genRect i SDL_PutPixelWithoutRefresh
    Przenieść wymienione funkcie (inline) z SDL_Exceptions.cpp do SDL_Exceptions.h

Najlepiej by było, gdybyś zrobił z tego łatkę ( .diff / .patch) i mi podesłał/załączył - wgrałbym na repozytorium i byś nie miał konfliktu :wink:

Serwer wywala się na wczytywaniu mapy.

Start gry wygląda tak - po wyborze mapy, klient uruchamia serwer, czeka nań, łączy się i wysyła nazwę mapy i ustawienia początkowe. Potem czekamy, aż serwer odeśle nam swoje informacje. Następnie klient wczytuje mapę.
Serwer po otrzymaniu informacji startowych wczytuje mapę i dopiero potem przekazuje resztę informacji klientowi. Jeżeli serwer na wczytywaniu mapy się wykrzaczy, pójdzie za nim i klient (bo połączenie się popsuje).

Tak właśnie było w tym przypadku - klient się wysypał, bo połączenie z serwerem siadło. A siadło, bo serwer się wysypał na tej mapie.
Żeby powiedzieć coś więcej, musiałbym znać mapę i zobaczyć stos wywołań serwera w chwili crasha. Ten z klienta mówi tylko: “to nie ja!”. :wink:

O, już bardzo daleko zaszedł. To ostatni krok przed rozpoczęciem rozgrywki - wczytanie AI. Pewnie nie jest w stanie wczytać pliku AI/GeniusAI.dll - przypuszczam, że zbudowaną bibliotekę z AI nazwało inaczej. Możesz zmienić jej nazwę, albo zmienić nazwę szukanego pliku w config/settings.txt (wpis defaultAI=GeniusAI.dll;).

Oto łatka w załączniku, zmiany które wymieniłem w poprzednim poście + pliki projektów dla Code::Blocks.

“Popełniłem” :wink:
Dzięki!

Jak byś mógł jeszcze tego wgrać, bo w tamtym kilka błędów było (nie sprawdziłem przed wysłaniem) :slight_smile:
mingw_r718.rar (5.66 KB)

Zrobione, sam zresztą powinienem był uważniej rzucić okiem. :wink:
Co do samego błędu, na którym utknąłeś, to nie bardzo mam pomysł. Sieć coś dziwnie działa. Zastanawiające o tyle, że Skoruppa przez ten etap przebrnął akurat dość bezboleśnie, więc to raczej nie problem stricte związany z GCC.

Naprawiłem :slight_smile: Trzeba było dodać flagę _WIN32_WINNT <- sam boost asio o to krzyczał :slight_smile:

Wszystkie mapy ładują się poprawnie, wiec nie ma tego problemu który występuje u Skoruppa.

Pierwszy błąd prawie na 100% powoduję polska wersja :stuck_out_tongue: Drugi pewnie powoduję brak AI bo wstyd się przyznać ale nie skompilowałem. Dikamilo: jak kompilujesz AI? (tak, po prostu mi nie wychodzi :P)

Ja importowałem projekt Visuala i dolinkowałem mu liba VCMI, dodatkowo takie #defines:

WIN32
_WINDOWS
_USRDLL
GENIUS_EXPORTS

Mam jeszcze w projekcie podana ścieżkę do include i libs z boosta ale żaden lib nie jest potrzebny :slight_smile:

A pliki w projekcie to:
CGeniusAI.h
CGeniusAI.cpp
DLLMain.cpp

A mógłby mi ktoś wygenerować makefile? Bo ja jestem chyba zbyt wielki amator :stuck_out_tongue:

EDIT:
Czego bym nie próbował to zawsze

Może coś źle robię…

Zaktualizuj źródła tam jest patch który to poprawia, albo zmień (CGeniusAI.h):

void CBattleLogic::PrintBattleAction(const BattleAction &action); 

na

void PrintBattleAction(const BattleAction &action); 

Tak, dokładnie rewizja 719 (lub nowsza :wink: ).
Po tej poprawce już powinno działać.

Gra się crashuje przy zapisywaniu zaraz po tym:

System message from server: Serializing game info...

Czy to odtwarzalne? Czy zachodzi na wszystkich mapach?
Spróbuj zdebugować sewer, bo wpis w logu jest mało pomocny (serializacja informacji o grze, to dość sporo pracy).

Tak zachodzi na każdej mapie, a co do debugowania, to za bardzo nie wiem jak się za to wziąć, attach to PID nie bardzo działa, frezuje całą aplikacje, a z miejsca tego nie zrobię bo serwer jest przecież uruchamiany z poziomu klienta.

Podczas kompilacji GeniusAI

/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
collect2: ld returned 1 exit status

nie wiem czy tu mój błąd czy z coś innego.