Idejét sem tudom annak, hogy mikor volt utoljára, hogy bármit is posztoltam, viszont a napokban @"LpV0iĐ" szenvedett ezen a dolgon (sad story, rly sad, úgyhogy nem részletezném) és gondoltam megcsinálom (na persze csak azért hogy utána tudjak vele mencizni mégis mi másért (figura) :|).
Szóval a fix a következőket orvosolja:
ugyebár ha vértet cserélsz, és utána karicserézel, a karicserében nem látszik rendesen a felvett vért, illetve a statok (szint, erő, vit, játékidő, stb..) sem, csak akkor, ha másodszor is karicserézel vagy teljesen kilépsz és úgy vissza
mikor te, vagy valaki a közeledben karaktert cserél akkor lehet látni egy rövid időre, hogy a karakter "leveszi" a fegyvert vértet meg mindent ami rajta van (ha éppen te karicserézel még az inventoryból is "eltűnnek" a dolgok)
A problémák okai
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]some magical reasons:
Nos az előbbi problémát tekintve a következő a magyarázat: Mivel ymir bá' jól összerakta nekünk a szerver részt, ezért természetesen azon kívül, hogy az authnak konkrétan szinte semmi értelme nincs (mivel ha esetleg a karakterválasztás azon menne még azt mondanám, hogy ér valamit) még a login is a lehető legjobban túl van bonyolítva. Nade ami a lényeg, hogy loginnál/entergamenél a szervertől megkapja a kliens az accounton lévő karakterek statját (csak azokat, amikre szükség van kariválasztásnál) és aztán ezt használja a későbbiekben, tehát mikor tolsz egy karicserét, akkor ezeket fogja használni, mivel nem kap újabb packetet. Azonban mikor a karaktert kiválasztod a ymirből adódóan ismét megkapja a kliens ezeket a korábban említett adatokat (teljesen feleslegesen) és ezért van, hogy ha 2x karicserézel a 2. karicserén jól mutatja már a dolgokat.
A listában az utóbbi probléma pedig abból adódik, hogy amikor a szerveren a CHARACTER class törlésre kerül, akkor vele együtt mennek a memóriában lévő itemek is a süllyesztőbe, és a RemoveFromCharacter funkcióban az if (m_bEquipped) elágazásnál az Unequip() funkció miatt lefut egy SendUpdatePacket is, aminek amúgy már nincs értelme, hiszen felesleges updatelni egy már amúgy kilépett vagy éppen kilépő karaktert, és így akár egy kisebb laggot is lehet, hogy sikerül elkerülni, hiszen ha sokan vannak pl map 1-en akkor a szerver feleslegesen küldi el ezeknek az embereknek az update packetet, a kliens pedig feleslegesen dolgozza fel őket és szedi le a partokat a karakterről.
A fix
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]some magical thingz:
server/char.cpp
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:
A void CHARACTER:: Disconnect(const char * c_pszReason) függvényben add hozzá ezt:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
E fölé:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
A void CHARACTER::UpdatePacket() függvényben pedig add hozzá ezt:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
Ez után:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
client/PythonNetworkStreamPhaseGameActor.cpp
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:
A void CPythonNetworkStream::__RecvCharacterUpdatePacket(SNetworkUpdateActorData * pkNetUpdateActorData) funkcióban add hozzá ezt:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
Ez után:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
client/PythonNetworkStreamPhaseLoading.cpp
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:
A bool CPythonNetworkStream::__RecvPlayerPoints() funkcióban cseréld le ezt:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
Erre:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
client/PythonNetworkStreamPhaseGame.cpp
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]Spoiler:
A bool CPythonNetworkStream::RecvPointChange() funkcióban cseréld le ezt:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]
Erre:
[Csak regisztrált felhasználók láthatják ezt a tartalmat.]