Metin2 Hungarian Forum

Metin2 => Szerver készítés => Privát szerverek => Segítség => A témát indította: 5310pati Dátum 2018-04-02, 01:59:15

Cím: Szint valós idejű frissítése
Írta: 5310pati Dátum 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 (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.
Cím: Re:Szint valós idejű frissítése
Í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.
Cím: Re:Szint valós idejű frissítése
Írta: Critter Dátum 2018-04-02, 10:25:50
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
Cím: Re:Szint valós idejű frissítése
Írta: fabtam11 Dátum 2018-04-02, 11:51:22
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!  :-\
Cím: Re:Szint valós idejű frissítése
Írta: Chookez Dátum 2018-04-02, 13:07:58
Ebben csak annyi van mint a Dev-es témában.
Cím: Re:Szint valós idejű frissítése
Írta: TiuXin Dátum 2018-04-02, 14:54:14
https://www.metin2downloads.info/thread/42-c-fix-levelanzeige-aktualisiert-sich-nach-levelup-nicht-direkt-by-sanii/
Talán ez.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 16:18:58
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 :-\ :'( :'(
Cím: Re:Szint valós idejű frissítése
Írta: TiuXin Dátum 2018-04-02, 16:41:16
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.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 16:58:58
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.
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-02, 18:32:16
É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'.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 18:34:28
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...
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-02, 18:41:00
Nem érted. Nézd meg a képet, minden olvashatatlanul kicsi. Telefonról nézni meg kész öngyilkosság lenne.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 18:42:18
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.
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-02, 18:44:41
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
Cím: Re:Szint valós idejű frissítése
Írta: Pisti95 Dátum 2018-04-02, 18:57:25
Nekem frissül a szint rendesen:
[spoiler]https://www.youtube.com/watch?v=mAqeKPwfafk&feature=youtu.be[/spoiler]
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 19:08:42
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.
Cím: Re:Szint valós idejű frissítése
Írta: Pisti95 Dátum 2018-04-02, 19:25:23
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.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-02, 19:28:58
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.
Cím: Re:Szint valós idejű frissítése
Írta: Distraught Dátum 2018-04-04, 10:16:56
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ím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-04, 21:15:55
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
Cím: Re:Szint valós idejű frissítése
Írta: Distraught Dátum 2018-04-04, 21:49:36
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; }
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-04, 21:49:58
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.
Cím: Re:Szint valós idejű frissítése
Írta: TiuXin Dátum 2018-04-04, 22:16:43
(https://i.imgur.com/goVzbLO.png)
Cím: Re:Szint valós idejű frissítése
Í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.

btw a szintlépés effecthez kötve is jónak kell lennie, hiszen azt is látod másra meghívva
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-04, 22:23:15
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
Cím: Re:Szint valós idejű frissítése
Írta: Distraught Dátum 2018-04-04, 22:30:49
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;
Cím: Re:Szint valós idejű frissítése
Írta: [VIP]Rin the Exorcist Dátum 2018-04-04, 22:42:41
Nah, így még akár működhet is. Holnap kiderül a részemről.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-04, 22:54:50
Tehát összességében nézve, a te megoldásod is úgy van h elküldi a többieknek a packetet ??? ::)
Cím: Re:Szint valós idejű frissítése
Írta: Distraught Dátum 2018-04-04, 22:59:50
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.
Cím: Re:Szint valós idejű frissítése
Írta: 5310pati Dátum 2018-04-04, 23:03:02
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.
Cím: Re:Szint valós idejű frissítése
Írta: femaremon Dátum 2018-04-06, 11:34:38
Nálam hiba mentes  :o
EhPortal 1.39 © 2025, WebDev