Metin2 Projectile Target Fix - Sageti si Skill-uri care Zboara Gresit
Acest fix rezolva problema din client in care sagetile si proiectilele skill-urilor pot zbura spre pozitii gresite, spre coltul hartii sau catre target-uri vechi.
Problema este cauzata de CFlyTarget::Clear, care nu elimina corect target-ul din lista actorului, dar si de target-urile ramase in m_kQue_kFlyTarget si backup-ul folosit de skill-urile multi-target.
- rezolva pointerii vechi din CFlyTarget;
- previne folosirea target-urilor din cast-ul anterior;
- corecteaza proiectilele pentru skill-uri multi-target;
- evita proiectilele trimise spre pozitii stale sau spre originea hartii.
*Link download / Code:
Deschide GameLib/FlyTarget.cpp si cauta functia:
Code:
void CFlyTarget::Clear()Inlocuieste toata functia cu:
Cauta functia:
Code:
void CFlyTarget::NotifyTargetClear()Inlocuieste toata functia cu:
In operator=, adauga la inceput:
Cauta functia:
Code:
void CFlyTarget::GetFlyTargetData(CFlyTarget * pFlyTarget)Inlocuieste toata functia cu:
Aceasta modificare foloseste operator= in loc sa copieze direct pointerul intern, astfel incat copia sa fie gestionata prin aceeasi logica de inregistrare a target-ului.
Deschide UserInterface/InstanceBaseBattle.cpp, in functia CInstanceBase::SetFlyTargetInstance, cauta apelul:
Code:
SetFlyTargetAdauga deasupra:
Deschide UserInterface/PythonNetworkStreamPhaseGame.cpp, in functia RecvFlyTargetingPacket, cauta zona in care este obtinut pTarget.
Imediat dupa ce pTarget este gasit, adauga:
Problema apare deoarece CFlyTarget::Clear reseta pointerul fara sa elimine obiectul din lista de fly targeters a actorului vechi.
Cand acel actor era distrus mai tarziu, putea apela NotifyTargetClear pe un CFlyTarget deja refolosit pentru alt target.
NotifyTargetClear salveaza acum pozitia curenta a target-ului inainte de a transforma target-ul din:
Code:
TYPE_OBJECTin:
Code:
TYPE_POSITIONAstfel, proiectilul nu mai foloseste o pozitie veche sau valoarea initiala:
Code:
(0, 0, 0)Curatarea din SetFlyTargetInstance si RecvFlyTargetingPacket elimina si target-urile ramase din cast-ul anterior.
Aceasta modificare nu strica Chain Lightning.
Packet-ul FLY_TARGETING este trimis cand incepe motion-ul skill-ului, inainte de packet-urile:
Code:
ADD_FLY_TARGETINGAstfel, target-urile suplimentare ale volley-ului curent sunt adaugate dupa ClearFlyTarget.
Apelul OnGetFlyTargetPosition din NotifyTargetClear este sigur in acest flow, deoarece ClearFlyTargeter este apelat la inceputul CActorInstance::Destroy.

la acest mesaj și conținutul se va afișa automat.

