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 (https://metin2dev.org/board/index.php?/topic/6159-level-text-above-players-head-update-in-real-time/) 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.
Idézetet írta: Chookez™ Dátum 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
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.
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.
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 (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.
É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 &$!#?
(https://i.imgur.com/5smZSIN.jpg)
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'.
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.
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.
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
Nekem frissül a szint rendesen:
[spoiler]https://www.youtube.com/watch?v=mAqeKPwfafk&feature=youtu.be[/spoiler]
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.
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;
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
Ja alapból nem volt GetLevel? Akkor lehet méh régebben beleírtam, bár szerintem alapból is van ilyen. Csak írj egyet gyorsan. És ne a RefreshTextTail, hanem az UpdateTextTailLevel metódust hívd meg, ahogy írtam.
UI.:
DWORD GetLevel() const { return m_dwLevel; }
Kicsit kísérleteztem ezzel a gondolatmenettel, de nem itt kell megoldani a problémát szerintem, bár az ötlet jó.
Ami viszont feltűnt, hogy /a esetében aki kapja a szintet annak rendesen frissül, lehet ebből kéne kiindulni.
Egyébként számomra a PointsPacket() metódus nagyon gyanús a char.cpp-ben.
(https://i.imgur.com/goVzbLO.png)
Vagy mégegy ötlet:
PythonNetworkStreamPhaseGame.cpp-ben a RecvPointChange függvényhez írd hozzá:
if (PointChange.Type == POINT_LEVEL)
{
CInstanceBase* chr = CPythonPlayer::Instance().NEW_FindActorPtr(PointChange.dwVID);
if (!chr) return false;
chr->UpdateTextTailLevel(PointChange.value);
}
Ennek valószínűleg már biztosan működnie kell.
btw a szintlépés effecthez kötve is jónak kell lennie, hiszen azt is látod másra meghívva
Idézetet írta: Distraught Dátum 2018-04-04, 22:19:30
Vagy mégegy ötlet:
PythonNetworkStreamPhaseGame.cpp-ben a RecvPointChange függvényhez írd hozzá:
if (PointChange.Type == POINT_LEVEL)
{
CInstanceBase* chr = CPythonPlayer::Instance().NEW_FindActorPtr(PointChange.dwVID);
if (!chr) return false;
chr->UpdateTextTailLevel(PointChange.value);
}
Ennek valószínűleg már biztosan működnie kell.
Hasonlóan csináltam, de úgy tűnik nem itt van a probléma forrása.
Idézetet írta: TiuXin Dátum 2018-04-04, 22:16:43
(https://i.imgur.com/goVzbLO.png)
(https://media.giphy.com/media/wfuWsK4Fw0MP6/source.gif)
Majd holnap megnézem, egy próbát megér. :D
Amit írtam legutóbb, ahhoz ne felejtsük el, hogy mindenkinek ki kell küldeni a közelben a packetet.
char.cpp-ben a PointChange függvény végén az if (GetDesc()) rész elé:
bBroadcast = (type==POINT_LEVEL) ? true : bBroadcast;
Nah, így még akár működhet is. Holnap kiderül a részemről.
Tehát összességében nézve, a te megoldásod is úgy van h elküldi a többieknek a packetet ??? ::)
Csak annyi, hogy nem csak az adott felhasználónak küldi ki a pointchange packetet, ha az a szintről szól. Mondjuk igazából sokat nem változtat, ha kibővíted az updatepacketet, mert már tökmindegy az a +1 int.
Az UpdatePacket sem csak neked küldi ki. Ugyanis azt beleírva a PointChange szint részéhez tökéletes a dolog :o
+ Direkt meg is néztem a dolgot, és ahogy frissülök, a melletem lévő játékos is megkapja az UpdatePacketet.
Nálam hiba mentes :o