Szint valós idejű frissítése

Started by 5310pati, 2018-04-02, 01:59:15

Nem sűrűn szoktam helpet kérni de most megint eljött az ideje :'(

Annó nyitottam már erről témát és ott szépen meg is lett vitatva a dolog, megoldás is született, de sajnos törölve lett a téma ugyanis az összes hsz-em átnéztem de 1 mukkot sem találok a dologról.
És igen, megtaláltam ezt ami végülis tök jól működik, szépen frissül rendesen a szint, de ahogy a régi témában is kifejtettem, ha van a környezetünkben 1 másik játékos és ő is fejlődik v fordítva, akkor egymás szintje ugyanúgy nem frissül.

Töröm a fejem ahogy csak tudom de egyszerűen nem jövök rá, hogy hol lett ez fixálva annó.
Bármilyen hintet elfogadok, hátha beugrik valami arról.

https://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/3655206-c-fix-levelanzeige-aktualisiert-sich-nach-levelup-nicht-direkt.html

Eredetileg ebben a témában le volt írva mert régen használtam és működött is csak a **** módosította az egész témát.  :-X
Pár hozzászólás van még benne itt-ott nézd át hátha találsz valamit ami kell neked belőle.

Quote from: Chookez™ on 2018-04-02, 07:02:48
https://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/3655206-c-fix-levelanzeige-aktualisiert-sich-nach-levelup-nicht-direkt.html

Eredetileg ebben a témában le volt írva mert régen használtam és működött is csak a **** módosította az egész témát.  :-X
Pár hozzászólás van még benne itt-ott nézd át hátha találsz valamit ami kell neked belőle.

Én nekem ez van bent persze még a régebbi verzió, rá kérdeztem saniinál hogy meg van e még neki a régebbi de azt írta hogy nincs

2018-04-02, 11:51:22 #3 Last Edit: 2018-04-02, 17:36:07 by fabtam11
sztem retardált vok de nem ezt keressük?
http://metin2hungary.net/index.php/topic,195315.msg1051683.html#msg1051683



Bocsánatot kérek a szétesett, félreérthető, idióta és felesleges, hozzászólásvadász stílusomért!  :-\

Ebben csak annyi van mint a Dev-es témában.

https://www.metin2downloads.info/thread/42-c-fix-levelanzeige-aktualisiert-sich-nach-levelup-nicht-direkt-by-sanii/
Talán ez.
A buta emberek különös szenvedélyt táplálnak az olyan következtetések iránt, amelyekre a maguk eszével jutottak.
Lev Tolsztoj

Tegnap este még a topic után pont ezt megírtam, és ha GM kóddal szintelem magam v mást akkor jó, de ha mobot öl és úgy fejlődik ugyanúgy nem frissül :-\ :'( :'(

Lehet kéne egy computepoint(asszem ez a neve) a setlevelbe vagy milyen funkció ad lvl-t?
Csak tipp ezért nem nyitok VS-t.
A buta emberek különös szenvedélyt táplálnak az olyan következtetések iránt, amelyekre a maguk eszével jutottak.
Lev Tolsztoj

2018-04-02, 16:58:58 #8 Last Edit: 2018-04-02, 18:26:24 by 5310pati
Az szerver oldalon van :-\

Üzenet összefésülés: 2018-04-02, 18:26:24

Van hogy jól frissül de van hogy nem :-\
https://www.youtube.com/watch?v=sEiCMTs47TA
Nemtom am mi tart eddig, de ha végez YT akk 4k-ban olvashatóbb minőségben is látható lesz majd, addig meg sad van :'( :'(
Pedig nincs 100 mega a cucc, szal nem értem mit tököl eddig, a HD-t is jó pár perc volt mire megcsinálta.

2018-04-02, 18:32:16 #9 Last Edit: 2018-04-02, 18:40:18 by Rin the Exorcist
És? A kliens sem fog frissülni addig, amíg utasítást nem kap arra a szervertől (fuck logic). Lehet pont az a baj, hogy mindenáron kliensoldalon akarja mindenki megoldani, amikor szerveroldal (is) kéne.




Amúgy az átlag felhasználók meg &$!#?

Ha sima HD-ban nem is, max fullHD-t illik ilyenkor felhasználni, hogy legalább valamit lásson belőle az átlag pc-s ember is. Just sayin'.
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

2018-04-02, 18:34:28 #10 Last Edit: 2018-04-02, 18:40:07 by 5310pati
Megírtam szerver oldalon is, az UpdatePacketbe
pack.iLevel = GetLevel();
És mint írtam, van hogy frissül a szint van hogy nem.

Üzenet összefésülés: 2018-04-02, 18:40:07

Jogos de akk is csak 60 megás a cuccli, nem hal bele senki :D
Ezért sem értem mit baszakszik ennyit YT a 4k-s elérhetőséggel...

Nem érted. Nézd meg a képet, minden olvashatatlanul kicsi. Telefonról nézni meg kész öngyilkosság lenne.
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"

Persze, hogy az, mivel nem a natív felbontáson nézed, mert a YT még nem csinálta meg.
Minden szarabbul néz ki a natívnál kisebb felbontáson. De a kedvedért lekonvertálom FHD-ra.

2018-04-02, 18:44:41 #13 Last Edit: 2018-04-02, 18:47:11 by Rin the Exorcist
Igazából nem tudom az segítene-e itt, hisz neked minden "kisebb", mert a metin gui-ja használ fix értékeket. Ha kisebb felbontású lesz a videód ugyanúgy nem lehet majd elolvasni.

Az segítene ha eleve kisebb felbontásban rögzítenéd.





De egy próbát megér, akkor viszont sima HD-t kérnék, ha lehet, mert a fullHD is hangyabetű számomra. :-X
"Tisztelet a kivételnek! Mindig tisztelet a kivételnek!"
"KezdÅ' vagyok, ne nézz le... (:"


Hát ha jól meg van csinálva persze, h frissül, és most már nálam is úgy néz ki.
1 UpdatePacket-et bevágtam a PointChange végére, úgy néz ki exp után nem küldött frissítést v idk, de most jónak néz ki.

Nekem ez a leírás van:

[spoiler]

[C++/Fix] Levelanzeige aktualisiert sich nach Levelup nicht direkt

Heyho,

ihr kennt ja sicher folgende Problematik:

Ihr levelt und levelt, aber die Levelanzeige an eurem Namen steht noch immer auf dem Level mit dem ihr angefangen habt.

Ich hab rausgefunden was dort los war! Folgende Problematik:

Das Spielerlevel wird an den Clienten nur in der __Create__ mitgegeben.
Im UpdatePacket() fehlt es allerdings. Er führt im Verlaufe des UpdatePackets das RefreshTextTail() aus, welches das Level theoretisch auch wirklich aktualisiert mit dem wert "m_dwLevel". Dieser Wert wird aber nur gesetzt wenn der Spieler "Created" wird. Sprich Spawnen, Mounten etc.

Mit diesem Fix zeig ich euch wie ihr ganz einfach das Level in das UpdatePacket() einbaut!



Server:

In packet.h suchen:
Code:
typedef struct packet_update_char

unter
Code:
short sAlignment;

hinzufügen:

DWORD dwLevel;



In char.cpp suchen:
Code:
void CHARACTER::UpdatePacket()

unter
Code:
pack.sAlignment = m_iAlignment / 10;

hinzufügen:

pack.dwLevel = GetLevel();




Client:

In Packet.h suchen:
Code:
typedef struct packet_update_char

unter
Code:
short       sAlignment;

hinzufügen:

DWORD dwLevel;



In PythonNetworkStreamPhaseGameActor.cpp
suchen:
Code:
bool CPythonNetworkStream::RecvCharacterUpdatePacket()

unter
Code:
kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;

hinzufügen:

kNetUpdateActorData.m_dwLevel=chrUpdatePacket.dwLevel;



In NetworkActorManager.cpp
suchen:
Code:
void CNetworkActorManager::UpdateActor(const SNetworkUpdateActorData& c_rkNetUpdateActorData)

unter
Code:
pkInstFind->SetAlignment(c_rkNetUpdateActorData.m_sAlignment);

hinzufügen:

pkInstFind->SetLevel(c_rkNetUpdateActorData.m_dwLevel);




In NetworkActorManager.h
suchen:
Code:
struct SNetworkUpdateActorData

unter
Code:
short m_sAlignment;

hinzufügen:

DWORD m_dwLevel;



In InstanceBase.cpp
suchen:
Code:
void CInstanceBase::SetAlignment(short sAlignment)

unter der Funktion adden wir diese Funktion:
Code:
void CInstanceBase::SetLevel(DWORD level)
{
m_dwLevel = level;
UpdateTextTailLevel(m_dwLevel);
}


In InstanceBaseEffect.cpp
suchen:
Code:
void CInstanceBase::UpdateTextTailLevel(DWORD level)


ersetzen mit:
Code:
void CInstanceBase::UpdateTextTailLevel(DWORD level)
{
if (IsPC())
{
static D3DXCOLOR s_kLevelColor = D3DXCOLOR(152.0f/255.0f, 255.0f/255.0f, 51.0f/255.0f, 1.0f);

char szText[256];
sprintf(szText, "Lv %d", level);
CPythonTextTail::Instance().AttachLevel(GetVirtualID(), szText, s_kLevelColor);
}
}


In InstanceBase.h suchen:
Code:
void SetAlignment(short sAlignment);

darunter hinzufügen:
Code:
void SetLevel(DWORD level);

Das sollte alles gewesen sein, nun wird euer Level immer aktuell gesetzt
Viel Spaß damit!

Ps.: Das gleich kann man noch mit dem Namen machen, so würde bei einem Namenwechsel der Relogg wegfallen :P

[/spoiler]


packet.h-ban kell kommunikálniuk igazából, azért kell megnézni a game fájl packet.h-ját, és az indító packet.h-ját.

Az eddig is megvolt ahogy jó párszor már leírtam... :D
De látod mégse volt tökéletes. 1-2 szintnél semmi, aztán ha ilyen 2mrd exp-t adtam neki akk hirtelen felugrott 15-ös szintűre nálam, de valójában meg vmi 79 környékére ugrott, tehát még így se volt tökéletes.

2018-04-04, 10:16:56 #18 Last Edit: 2018-04-04, 20:41:53 by Distraught
Alapból kiküldi rendesen, hiszen a karakter ablaknál ugye egyből frissül (felesleges az update_packetet kibővíteni, mert semmi értelme, hogy többször küldjük ki ugyanazt az adatot). PM-ben írtam pár javaslatot. Lehet önmagában azok nem voltak elegek, de azok kombinációjából szerintem megoldható.

Edit:
Hülyeséget írtam rájöttem, mert amit küldtem neked, azzal pont a rang részét frissítette szintváltozáskor is. ><
Most belenézve a forrásba ugye van a levelup effekt meghívása (ShowPointEffect függvény a PythonCharacterManager.cpp-ben)
Ott a POINT_LEVEL részt ha módosítod erre, szerintem működnie kellene.

case POINT_LEVEL:
pkInstSel->LevelUp();
pkInstSel->UpdateTextTailLevel(pkInstSel->GetLevel());
break;

C++ programmer at Gameloft

2018-04-04, 21:15:55 #19 Last Edit: 2018-04-04, 21:17:33 by 5310pati
Ez mind szép és jó lenne, ha lenne GetLevel metódusa a CInstanceBase-nek :-X

Üzenet összefésülés: 2018-04-04, 21:17:33

RefreshTextTail-re átírva meg szintén nem frissül, szóval jó az az újraküldés nekem :D