• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Dynamiczne zapisywanie mapy w grze oraz przedmiotów na niej...

Aeven


Joined
Dec 29, 2010
Messages
335
Reaction score
4
Witam.
Zastanawiam się czy jest jakaś możliwość (używając TFS) zapisywać na bieżąco zmiany dokonywane na mapie w grze w czasie rzeczywistym (np. rzucenie itemu/śmieci na ziemię) i żeby po restarcie serwera owe zmiany się nie usuwały. Nie mam pojęcia czy skrypt czy trzeba hard-codować w źródłach. Jeśli da się coś takiego zrobić, pewnie można by było też dodać tablicę z ID, które by się nie zapisywały ;)

Let's discuss. Uważacie, że coś takiego jest możliwe do zrealizowania? Czy w ogóle da się coś takiego zrobić? :p
 
Wszystko sie da, ale to napewno nie z poziomu lua, no chyba ze dodasz se nowe funkcje :p
 
Wszystko sie da, ale to napewno nie z poziomu lua, no chyba ze dodasz se nowe funkcje :p
Masz jakiś dokładniejszy pomysł w jaki sposób by to mogło działać, na jakiej zasadzie? Nie tylko rzucone itemy miały by być zapisywane (takie jak viale), ale też zmiany w groundach, naturze.
 
Ja mam pomysł, zrób sobie wielki domek na całą mapę, przy logowaniu gracza dodawaj mu od razu dostęp i ... tyle :D. Szybko, łatwo i bez edycji source.
 
Ogólnie - po co takie coś? Przecież zapis przykładowo co godzinę, pół godziny, trzy godziny, i godzin wiele (lub dni) nie jest złym pomysłem. I chyba do tego wolno ustawić, aby przy każdym wylogowaniu postaci także wszystko się zapisało (co z nią związane) - lub tak jest automatycznie =).

Jeśli chodzi o pomysł, to wydaje mi się nie praktyczny - da się tak zrobić ale nie ma to sensu, bo na pewno spadnie wydajność - nie na głowę, ale na pewno na kark. Więcej interakcji z bazą danych - zamiast jednego długiego połączenia z bazą, będzie ich więcej.​
 
Tak, oczywiście że zapisywanie tego wszystkiego mogło by się odbywać co jakiś dłuższy okres czasu, ale chodzi o to, że nie tylko zmiany postaci, jej statystyk itd. miały by się zapisywać ale także wszystkie zmiany na mapie.

Pomysł wydaje się niepraktyczny, gdyż każdy myśli pewnie o standardowym serwerze typu rl map, evo itd. aczkolwiek jeśli taki pomysł wykorzystamy do innego typu serwera (mam pomysł, ale na razie nie chcę nic rozsiewać ;)) nie jest wcale złym rozwiązaniem.
 
A jeśli chodzi tobie o zmiany na mapie, które mogą wystąpić to da się tak zrobić, ale to też wolno robić np. co godzinkę, a nie co chwilę (bo tak to się by odbywało po twojej myśli). Zapisywanie działa tak samo jak wczytywanie, tylko na odwrót (no, co taka jest prawda) - więc to nie żadna filozofia zapisywać mapy do pliku .otmb.

@down - twój projekt, więc musisz się pogłowić, ale wiedź że najlepiej to zrobić w C++ (i chyba tak się tylko da dla początkujących, i średnio-zaawansowanych).​
 
Last edited:
otbm*

No niby tak... może ktoś jakimś przykładowym kodem rzucić jak by to mogło wyglądać?
Dzięki :peace:
 
A jeśli chodzi tobie o zmiany na mapie, które mogą wystąpić to da się tak zrobić, ale to też wolno robić np. co godzinkę, a nie co chwilę (bo tak to się by odbywało po twojej myśli). Zapisywanie działa tak samo jak wczytywanie, tylko na odwrót (no, co taka jest prawda) - więc to nie żadna filozofia zapisywać mapy do pliku .otmb.

@down - twój projekt, więc musisz się pogłowić, ale wiedź że najlepiej to zrobić w C++ (i chyba tak się tylko da dla początkujących, i średnio-zaawansowanych).​

facepalm6[1].gif

To, że w C++ to on wie od początku. Profesjonalny profesjonalisto...Jedyne rozsądne wyjscie, to raczej edycja i zapis do otbm, nie? Przecież nie będzie zapisywał wszystkich itemów na mapie do bazy....
 
Woocash dobrze mówi. Ja po prostu szczerze mówiąc nie wiem od której strony, jakim sposobem mam się zabrać za to, aby osiągnąć oczekiwany efekt.
 
Samme, na upartego mógłby to zrobić w LUA, i nie mów że nie bo taki zapis to tylko operacje na bitach (bajtach) - wolno, bo dlaczego nie? Tylko, że się nie opłaca, jeśli od tego wolno bez problemu użyć naszego pięknego C++.

Jeśli chodzi o resztę (przykładowo poruszony sposób zapisu przedmiotów), to kwestia zastanowienia i przemyśleń.​
 
a gdzieś na otland nie jest wzmianki o tym, że killall z jakimiś parametrami reloaduje wszystko nawet mapę bez restartu serwera?

nie jestem w 100% pewien, ale to gdzieś chyba jest
 
Samme, na upartego mógłby to zrobić w LUA, i nie mów że nie bo taki zapis to tylko operacje na bitach (bajtach) - wolno, bo dlaczego nie? Tylko, że się nie opłaca, jeśli od tego wolno bez problemu użyć naszego pięknego C++.

Jeśli chodzi o resztę (przykładowo poruszony sposób zapisu przedmiotów), to kwestia zastanowienia i przemyśleń.​

Na upartego to można wysrać się do zlewu, co nie znaczy, że będzie to zrobione dobrze.
 
Samme, na upartego mógłby to zrobić w LUA, i nie mów że nie bo taki zapis to tylko operacje na bitach (bajtach) - wolno, bo dlaczego nie? Tylko, że się nie opłaca, jeśli od tego wolno bez problemu użyć naszego pięknego C++.

Jeśli chodzi o resztę (przykładowo poruszony sposób zapisu przedmiotów), to kwestia zastanowienia i przemyśleń.​

Naprawdę mądrze piszesz, ale niekiedy rozwijasz wątek, aż do przesady i wynika z tego jeden wielki nudny non-sens.
 
Najprosciej podejrzec jak sa zapisywane domki w silniku, analogicznie zapisywac reszte mapy.

Hint: w kontenerze Trash ( przy store_trash w configu ) bedziesz mial pozycje tajli, na ktorych zostal dodany jakis item, mozesz poiterowac po tym i zapisac do bazy. Jezeli nie bardzo znasz sie na C++ to sobie raczej odpusc. Tablea moze wygladac na przyklad tak:
SQL:
posx,posy,posz,stackpos,itemtype,count,itemattributes
chyba, ze wolisz binarnie, ale to juz wyzsza szkola jazdy.
 
Dzięki bardzo za wypowiedzi ;)

@Koob
:*

Jak ktoś ma jeszcze jakieś pomysły/sposoby to proszę pisać :)
 
Na początku, ogólnie wyrzucić zapisywać przedmiotów na mapie (czyli chodzi mi tutaj przykładowo o domki), jeśli będziesz zapisywał mapę, to nie opyla się osobno zapisywać przedmiotów (ktoś o tym wspomniał wyżej). Więc tutaj już jest kilka modyfikacji.


Później, najlepiej dodać do standardowego zapisywania systemu kod, który zapisywał by mapę do pliku .otmb (przykładowo, nadpis pliku - ale może też robić kopie zapasowe, dla bezpieczeństwa).
PHP:
void Game::saveGameState(bool shallow);
Jeśli chodzi o samo zapisywanie mapy, to musisz już poszukać dokładnie jak to robi system binarnie w plikach źródłowych (io*) - i analogicznie do tego zapisywać wszystko. Taki kod też powinien być w edytorze map, ale nie wiem czy gdzieś są otwarte źródła do tego. Moja rada, zapisuj mapę nie zbyt często, najlepiej lub do przykładowo co parę godzin, aby klienci poczuli komfort gry - a nie co chwilowe lagi, przycięcia itd. - może że masz naprawdę bardzo dobrą maszynę, i możesz sobie pozwolić na zapisywanie gry w trybie rzeczywistym.
 
co do zapisu mapy: kiedyś rme miał otwarte źródło i jest ono wciąż dostępne(zawsze coś da nawet jeśli kilka rzeczy trzeba zmienić)
 
da sie z poziomu lua, zapisywanie do MySQL wszystkiego co wyrzuciłeś, a później najzwyczajniej spawnujesz przy starcie.
 
Back
Top Bottom