
*(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos;
void __stdcall SetVisible_Hook
void __stdcall SetUI_Hook(int x, int y)
#if 0
*(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos;
#endif
void __stdcall SetVisible_Hook(bool isVisible)
{
DWORD thisPtr;
__asm
{
MOV thisPtr, ECX
}
if (g_pMain->varius
&& thisPtr == g_pMain->varius
&& g_pMain->pClientUIState && isVisible)
g_pMain->pClientUIState->resetPerks();
if (g_pMain->uiSeedHelperPlug != NULL && thisPtr == g_pMain->uiSeedHelperPlug->group_option_grapic2)
{...
iletişime geçiyorum@YNG yardımcı olur
Kendisi işini bilen işin ehli bir arkadaş
Knk çözümü bulabilirsen bizide bilgilendirirmisin aynı sorunu bende yaşıyorumiletişime geçiyorum
asm taraflıda müdehale edilmesi lazım diye biliyorum şuan @YNG de çalışan sistem var ücretli olarak yardımcı olurçözülen varsa benimle paylaşabilir misi lazım olanlar var.
ne ücreti aksam forumdaasm taraflıda müdehale edilmesi lazım diye biliyorum şuan @YNG de çalışan sistem var ücretli olarak yardımcı olur
*(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos;
void __stdcall SetVisible_Hook
void __stdcall SetUI_Hook(int x, int y)
#if 0
*(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos;
#endif
void __stdcall SetVisible_Hook(bool isVisible)
{
DWORD thisPtr;
__asm
{
MOV thisPtr, ECX
}
if (g_pMain->varius
&& thisPtr == g_pMain->varius
&& g_pMain->pClientUIState && isVisible)
g_pMain->pClientUIState->resetPerks();
if (g_pMain->uiSeedHelperPlug != NULL && thisPtr == g_pMain->uiSeedHelperPlug->group_option_grapic2)
{
g_pMain->SetState(g_pMain->uiSeedHelperPlug->btn_render_objects, isRenderObject ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL);
g_pMain->SetState(g_pMain->uiSeedHelperPlug->btn_hide_player, isHideUser ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL);
}
if (g_pMain->uiGenieMain != NULL && g_pMain->uiGenieMain->etc == thisPtr && isVisible)
{
g_pMain->SetState(g_pMain->uiGenieMain->btn_party_leader_on, isLeaderAttack ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL);
g_pMain->SetState(g_pMain->uiGenieMain->btn_party_leader_off, isLeaderAttack ? UI_STATE_BUTTON_NORMAL : UI_STATE_BUTTON_DOWN);
}
//Genie YNG
#if 0
if (g_pMain->uiGenieSubPlug != NULL)
{
if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam || thisPtr == g_pMain->uiGenieSubPlug->TargetTwo)
{
#if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534)
POINT pt;
g_pMain->GetUiPos(g_pMain->hkServerNotice, pt);
LONG isPost = 63;
if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && isVisible)
isPost = 115;
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && !isVisible)
{
if (g_pMain->IsVisible(thisPtr))
isPost = 89;
}
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && !isVisible)
isPost = 47;
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && isVisible)
isPost = 93; //1098 genieye göre target two ayarlandı. v2 de kontrol edilecek.
#else
POINT pt;
g_pMain->GetUiPos(g_pMain->hkServerNotice, pt);
LONG isPost = 69;
if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && isVisible)
isPost = 117;
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && !isVisible)
{
if (g_pMain->IsVisible(thisPtr))
isPost = 93;
}
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && !isVisible)
isPost = 47;
else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && isVisible)
isPost = 93; //2369 genieye göre target two ayarlandı. v2 de kontrol edilecek.
#endif
RECT ASD = g_pMain->GetUiRegion(g_pMain->uiGenieSubPlug->m_dVTableAddr);
ASD.bottom = isPost;
g_pMain->SetUiRegion(g_pMain->uiGenieSubPlug->m_dVTableAddr, ASD);
if (g_pMain->IsVisible(g_pMain->hkCampAdress))
isPost += 18;
POINT zs;
zs.x = pt.x;
zs.y = isPost;
g_pMain->SetUIPos(g_pMain->hkServerNotice, zs);
if (g_pMain->IsVisible(g_pMain->hkCampAdress))
{
g_pMain->GetUiPos(g_pMain->hkCampAdress, pt);
zs.y = LONG(isPost - 22);
g_pMain->SetUIPos(g_pMain->hkCampAdress, zs);
}
POINT z2;
#if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534)
z2.x = LONG(koScreen.x - 169);
z2.y = 0;
#else
z2.x = LONG(koScreen.x - 187);
z2.y = 0;
#endif
g_pMain->SetUIPos(g_pMain->uiGenieSubPlug->m_dVTableAddr, z2);
}
}
#endif
_asm
{
MOV ECX, thisPtr
PUSH isVisible
CALL oSetVisible
}
}
void __stdcall SetUI_Hook(int x, int y)
{
DWORD thisPtr;
__asm
{
MOV thisPtr, ECX
}
//Genie YNG
#if 0
if (g_pMain->uiGenieSubPlug && g_pMain->uiGenieSubPlug->m_dVTableAddr == thisPtr)
{
koScreen = *(POINT*)KO_UI_SCREEN_SIZE;
POINT pt;
g_pMain->GetUiPos(thisPtr, pt);
#if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534)
x = LONG(koScreen.x - 169);
y = 0;
#else
x = LONG(koScreen.x - 187);
y = 0;
#endif
}
else
{
if (g_pMain->uiGenieSubPlug
&& g_pMain->m_bGameStart
&& g_pMain->uiGenieSubPlug->m_dVTableAddr != NULL)
{
POINT zs;
#if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534)
zs.x = LONG(koScreen.x - 169);
zs.y = 0;
#else
zs.x = LONG(koScreen.x - 187);
zs.y = 0;
#endif
g_pMain->SetUIPos(g_pMain->uiGenieSubPlug->m_dVTableAddr, zs);
}
}
#endif
_asm
{
MOV ECX, thisPtr
PUSH y
push x
CALL oSetUIPos
}
}
acs ye uymadı knka ıstırap kullanıyorum uyumlu olmadı veya ben hata yapıyorumMerhaba
Genie sabit kaldırmak için yapılması gerekenler.
Hook tarafından düzenlenecek yerler
C++:*(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos; void __stdcall SetVisible_Hook void __stdcall SetUI_Hook(int x, int y)
Böyle düzenleyin
C++:#if 0 *(DWORD*)0xC6F480 = (DWORD)hkGenieSetPos; #endif void __stdcall SetVisible_Hook(bool isVisible) { DWORD thisPtr; __asm { MOV thisPtr, ECX } if (g_pMain->varius && thisPtr == g_pMain->varius && g_pMain->pClientUIState && isVisible) g_pMain->pClientUIState->resetPerks(); if (g_pMain->uiSeedHelperPlug != NULL && thisPtr == g_pMain->uiSeedHelperPlug->group_option_grapic2) { g_pMain->SetState(g_pMain->uiSeedHelperPlug->btn_render_objects, isRenderObject ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL); g_pMain->SetState(g_pMain->uiSeedHelperPlug->btn_hide_player, isHideUser ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL); } if (g_pMain->uiGenieMain != NULL && g_pMain->uiGenieMain->etc == thisPtr && isVisible) { g_pMain->SetState(g_pMain->uiGenieMain->btn_party_leader_on, isLeaderAttack ? UI_STATE_BUTTON_DOWN : UI_STATE_BUTTON_NORMAL); g_pMain->SetState(g_pMain->uiGenieMain->btn_party_leader_off, isLeaderAttack ? UI_STATE_BUTTON_NORMAL : UI_STATE_BUTTON_DOWN); } //Genie YNG #if 0 if (g_pMain->uiGenieSubPlug != NULL) { if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam || thisPtr == g_pMain->uiGenieSubPlug->TargetTwo) { #if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534) POINT pt; g_pMain->GetUiPos(g_pMain->hkServerNotice, pt); LONG isPost = 63; if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && isVisible) isPost = 115; else if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && !isVisible) { if (g_pMain->IsVisible(thisPtr)) isPost = 89; } else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && !isVisible) isPost = 47; else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && isVisible) isPost = 93; //1098 genieye göre target two ayarlandı. v2 de kontrol edilecek. #else POINT pt; g_pMain->GetUiPos(g_pMain->hkServerNotice, pt); LONG isPost = 69; if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && isVisible) isPost = 117; else if (thisPtr == g_pMain->uiGenieSubPlug->TargetSam && !isVisible) { if (g_pMain->IsVisible(thisPtr)) isPost = 93; } else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && !isVisible) isPost = 47; else if (thisPtr == g_pMain->uiGenieSubPlug->TargetTwo && isVisible) isPost = 93; //2369 genieye göre target two ayarlandı. v2 de kontrol edilecek. #endif RECT ASD = g_pMain->GetUiRegion(g_pMain->uiGenieSubPlug->m_dVTableAddr); ASD.bottom = isPost; g_pMain->SetUiRegion(g_pMain->uiGenieSubPlug->m_dVTableAddr, ASD); if (g_pMain->IsVisible(g_pMain->hkCampAdress)) isPost += 18; POINT zs; zs.x = pt.x; zs.y = isPost; g_pMain->SetUIPos(g_pMain->hkServerNotice, zs); if (g_pMain->IsVisible(g_pMain->hkCampAdress)) { g_pMain->GetUiPos(g_pMain->hkCampAdress, pt); zs.y = LONG(isPost - 22); g_pMain->SetUIPos(g_pMain->hkCampAdress, zs); } POINT z2; #if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534) z2.x = LONG(koScreen.x - 169); z2.y = 0; #else z2.x = LONG(koScreen.x - 187); z2.y = 0; #endif g_pMain->SetUIPos(g_pMain->uiGenieSubPlug->m_dVTableAddr, z2); } } #endif _asm { MOV ECX, thisPtr PUSH isVisible CALL oSetVisible } } void __stdcall SetUI_Hook(int x, int y) { DWORD thisPtr; __asm { MOV thisPtr, ECX } //Genie YNG #if 0 if (g_pMain->uiGenieSubPlug && g_pMain->uiGenieSubPlug->m_dVTableAddr == thisPtr) { koScreen = *(POINT*)KO_UI_SCREEN_SIZE; POINT pt; g_pMain->GetUiPos(thisPtr, pt); #if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534) x = LONG(koScreen.x - 169); y = 0; #else x = LONG(koScreen.x - 187); y = 0; #endif } else { if (g_pMain->uiGenieSubPlug && g_pMain->m_bGameStart && g_pMain->uiGenieSubPlug->m_dVTableAddr != NULL) { POINT zs; #if (HOOK_SOURCE_VERSION == 1098 || HOOK_SOURCE_VERSION == 1534) zs.x = LONG(koScreen.x - 169); zs.y = 0; #else zs.x = LONG(koScreen.x - 187); zs.y = 0; #endif g_pMain->SetUIPos(g_pMain->uiGenieSubPlug->m_dVTableAddr, zs); } } #endif _asm { MOV ECX, thisPtr PUSH y push x CALL oSetUIPos } }
bendede aynı knkg_pMain bildirimi yapılmamış tanımlayıcı diyor.
Patron pearlengine.h de bi tanımını da paylaşırsan muhteşem olur valla ellerine sağlık![]()
g_pMain-> yazan yerleri Engine-> olarak değiştiring_pMain bildirimi yapılmamış tanımlayıcı diyor.
Patron pearlengine.h de bi tanımını da paylaşırsan muhteşem olur valla ellerine sağlık![]()
pClientUIStat knk hata veriyorg_pMain yazan yerleri Engine
olarak düzeltiniz.
Knight Online PVP server yönetimi ve oyun geliştirme üzerine yapılan tartışmalar, geliştiricilerin karşılaştığı her türlü sorun için etkili çözüm önerileri sunar. Server kurulumu, performans optimizasyonu, hata ayıklama ve veri tabanı yönetimi gibi teknik konularda, geliştiriciler karşılaştıkları zorlukları çözüme kavuşturmak için çeşitli rehberler ve kaynaklar paylaşmaktadır. Örneğin, SSL sertifikası ve Cloudflare ayarları gibi ağ yönetimi üzerine yapılan tartışmalar, server güvenliği ve hızını artırmaya yönelik öneriler sunar.
Diğer taraftan, NPC görevleri ve Emblem yapımı gibi oyun içi işlevlerin iyileştirilmesi, oyuncu deneyimini zenginleştirir. İstirap gibi özel sistemler ve Ko-panel yapılandırması da geliştirilmesi gereken alanlar arasında yer alır. Ayrıca, Genie gibi araçlar ve manual drop ekleme gibi işlemlerle ilgili çözümler, geliştiricilerin oyunları daha işlevsel hale getirmelerine yardımcı olur.
Source kodu geliştirme, yükseltme ve SQL Query gibi konularla ilgili tartışmalar, geliştiricilere teknik bilgilere dayalı derinlemesine rehberlik sağlar. Bu tür kaynaklar, sorunları hızlıca çözmek ve oyun serverlarını optimize etmek isteyen geliştiriciler için oldukça değerlidir.
Eğer siz de bir Knight Online geliştiricisiyseniz ve server yönetimindeki sorunlara çözüm arıyorsanız, bu topluluk, en güncel bilgileri ve pratik çözümleri bulabileceğiniz bir platform sunuyor.