- Katılım
- 31 May 2009
- Konular
- 772
- Mesajlar
- 4,174
- Online süresi
- 4g 29299s
- Reaksiyon Skoru
- 3,477
- Altın Konu
- 1
- Başarım Puanı
- 337
- Yaş
- 33
- TM Yaşı
- 16 Yıl 10 Ay 28 Gün
- MmoLira
- 1,221
- DevLira
- 3
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
Merhaba Gamemasterların oyuna daha hakim olup belirli kordinatlara hızlıca ışınlanabilmeleri için hazırladığım küçük bir yardımcıdır kendi sunucunuza göre düzenlemeniz gerekmektedir sadece basit halini ekliyorum.
M bastığınızda açılan haritada Mouse ile tıkladığınız kordinata ışınlanmanızı sağlar.
17.01.2021 Tarihinde Güncellendi
uiminimap.py içerisinde bulun
Altına ekleyin.
uiminimap.py içerisinde bulun
Altına ekleyin
PythonMinimap.cpp içerisinde bulun
Altına ekleyin
NetworkActorManager.cpp dosyası içerisinde bulun --------- YENİ 17.01.2021
Methodun tamamını bununla değiştirin --------- YENİ 17.01.2021
NetworkActorManager.cpp dosyası içerisinde bulun --------- YENİ 17.01.2021
Bununla değiştirin --------- YENİ 17.01.2021
@ssembol61 Teşekkürler
Artık "M" bastığınızda açılan büyük haritada GM yetkisine sahip olan kişi haritada tıkladığı herhangi bir yere ışınlanabilir bununla beraber yönetimi dahada kolaylaştırmak için sectree_manager.cpp SendNPCPosition fonksiyonundaki örnekten yola çıkarak x haritada çevrimiçi gamemastera oyuncuların kordinat bilgilerini gönderip slotlar da kasan oyuncuları haritadan görerek üstüne tıklayıp takip edebilirsiniz hile takibinde çok güzel işe yarıyor
M bastığınızda açılan haritada Mouse ile tıkladığınız kordinata ışınlanmanızı sağlar.
17.01.2021 Tarihinde Güncellendi
- Işınlanma sonrası yaşanan donma/kasma sorunları düzeltildi.
uiminimap.py içerisinde bulun
Python:
self.SetPosition(wndMgr.GetScreenWidth() - 136 - 256 - 10, 0)
Altına ekleyin.
Python:
self.board.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.OnMouseLeftButtonUpEvent))
uiminimap.py içerisinde bulun
Python:
def SetCenterPositionAdjust(self, x, y):
self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y)
Altına ekleyin
Python:
def OnMouseLeftButtonUpEvent(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
(bFind, sName, iPosX, iPosY, dwTextColor, dwGuildID) = miniMap.GetAtlasInfo(mouseX, mouseY)
net.SendChatPacket("/go %s %s" % (str(iPosX), str(iPosY)))
PythonMinimap.cpp içerisinde bulun
C++:
bool CPythonMiniMap::GetAtlasInfo(float fScreenX, float fScreenY, std::string & rReturnString, float * pReturnPosX, float * pReturnPosY, DWORD * pdwTextColor, DWORD * pdwGuildID)
{
float fRealX = (fScreenX - m_fAtlasScreenX) * (m_fAtlasMaxX / m_fAtlasImageSizeX);
float fRealY = (fScreenY - m_fAtlasScreenY) * (m_fAtlasMaxY / m_fAtlasImageSizeY);
Altına ekleyin
C++:
*pReturnPosX = fRealX;
*pReturnPosY = fRealY;
NetworkActorManager.cpp dosyası içerisinde bulun --------- YENİ 17.01.2021
C++:
bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY)
Methodun tamamını bununla değiştirin --------- YENİ 17.01.2021
C++:
bool CNetworkActorManager::__IsVisiblePos(LONG lPosX, LONG lPosY)
{
LONG dx = lPosX - m_lMainPosX;
LONG dy = lPosY - m_lMainPosY;
LONG len = (LONG)sqrtf((float(dx) * float(dx) + float(dy) * float(dy)));
extern int CHAR_STAGE_VIEW_BOUND;
if (len < CHAR_STAGE_VIEW_BOUND && len > -CHAR_STAGE_VIEW_BOUND)
return true;
return false;
}
NetworkActorManager.cpp dosyası içerisinde bulun --------- YENİ 17.01.2021
C++:
if (rkActorEach->IsPC() || rkActorEach->IsNPC() || rkActorEach->IsEnemy())
Bununla değiştirin --------- YENİ 17.01.2021
C++:
if (rkActorEach->IsPC() || rkActorEach->IsNPC() || rkActorEach->IsEnemy() || rkActorEach->IsStone() )
@ssembol61 Teşekkürler
oyuncular haritaya tıkladığında bu düzenleme mevcut değil diyecek
BUNUN önüne nasıl geçebiliriz
Python:
#uiminimap.py
net.SendChatPacket("/go %s %s" % (str(iPosX), str(iPosY))) # arat
#değiştir
if chr.IsGameMaster(player.GetMainCharacterIndex()):
net.SendChatPacket("/go %s %s" % (str(iPosX), str(iPosY)))
import chr
import player
#eğer importlarda yoksa ekle
Artık "M" bastığınızda açılan büyük haritada GM yetkisine sahip olan kişi haritada tıkladığı herhangi bir yere ışınlanabilir bununla beraber yönetimi dahada kolaylaştırmak için sectree_manager.cpp SendNPCPosition fonksiyonundaki örnekten yola çıkarak x haritada çevrimiçi gamemastera oyuncuların kordinat bilgilerini gönderip slotlar da kasan oyuncuları haritadan görerek üstüne tıklayıp takip edebilirsiniz hile takibinde çok güzel işe yarıyor
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
Genel olarak rubinum files (nedemekse) oradan yürümek istemiştim![]()
buldum anlatmaya çalıştığım eklentiyi forumda paylaşılan metin2.global'in içinde mevcutmuş.
Öğeyi görmek için üye olmalısınız.
Bu zamana kadar neden kimsenin kullanmadığını anlamadım oldukça yararlı bir şey.
Oyuna girişte oyuncuların yerlerini görebilmek için SendNPCPosition fonksiyonunu aşağıdaki gibi değişebilirsiniz. Sadece gmler görebilir, oyuncunun direk x,y koordinatlarını alacak fonksiyonu bulamadığım için aşağıdaki gibi yaptım.
Öğeyi görmek için üye olmalısınız.
C++:void SECTREE_MANAGER::SendNPCPosition(LPCHARACTER ch) { LPDESC d = ch->GetDesc(); if (!d) return; long lMapIndex = ch->GetMapIndex(); if (m_mapNPCPosition[lMapIndex].empty()) return; TEMP_BUFFER buf; TPacketGCNPCPosition p; p.header = HEADER_GC_NPC_POSITION; p.count = m_mapNPCPosition[lMapIndex].size(); TNPCPosition np; // TODO m_mapNPCPosition[lMapIndex] ¸¦ º¸³»ÁÖ¼¼¿ä itertype(m_mapNPCPosition[lMapIndex]) it; for (it = m_mapNPCPosition[lMapIndex].begin(); it != m_mapNPCPosition[lMapIndex].end(); ++it) { np.bType = it->bType; strlcpy(np.name, it->name, sizeof(np.name)); np.x = it->x; np.y = it->y; buf.write(&np, sizeof(np)); } if (ch->IsGM()) { const DESC_MANAGER::DESC_SET & c_ref_set = DESC_MANAGER::instance().GetClientSet(); for (itertype(c_ref_set) it2 = c_ref_set.begin(); it2 != c_ref_set.end(); ++it2) { LPCHARACTER pkChar = (*it2)->GetCharacter(); if (!pkChar) continue; if (pkChar->GetMapIndex() == lMapIndex && pkChar->GetPlayerID() != ch->GetPlayerID()) { PIXEL_POSITION posBase; if (!SECTREE_MANAGER::instance().GetMapBasePositionByMapIndex(ch->GetMapIndex(), posBase)) { continue; } DWORD mapX = posBase.x; DWORD mapY = posBase.y; const PIXEL_POSITION & vpos = pkChar->GetXYZ(); DWORD playerX = vpos.x; DWORD playerY = vpos.y; DWORD finalX = (playerX- mapX)/100; DWORD finalY = (playerY- mapY)/100; finalX *= 100; finalY *= 100; np.bType = 1; strlcpy(np.name, pkChar->GetName(), sizeof(np.name)); np.x = finalX; np.y = finalY; p.count += 1; buf.write(&np, sizeof(np)); } } } p.size = sizeof(p) + buf.size(); if (buf.size()) { d->BufferedPacket(&p, sizeof(TPacketGCNPCPosition)); d->Packet(buf.read_peek(), buf.size()); } else d->Packet(&p, sizeof(TPacketGCNPCPosition)); }
Sectree'ye yeni bir Öğeyi görmek için üye olmalısınız.açıyoruz (protected olması önemli)
Anahtarımız VID, değerimiz PIXEL_POSITION
C++:void CInputLogin::Entergame(LPDESC d, const char * data)
Bu fonksiyonun içerisin de Sectree ye ben oyundayım VID bu Pozisyonum bu kaydı giriliyor.
Oyuncu girdiği gibi çıkabilir bunu unutmuyoruz tabi
C++:void CHARACTER::Disconnect(const char * c_pszReason)
Onuda burdan siliyoruz.
Geriye kalan sadece
C++:const DESC_MANAGER::DESC_SET & set = DESC_MANAGER::instance().GetClientSet();
ve aktif gm yetkisine sahip cliente (istemci) asenkron bağlantı ile aktarımı sağlanır, çok fazla online var olur mu öyle şey bilgisayar bilimlerinde kullanılmıyor smart pointerları containera alırsanız uçulurduğunda yok olursunuz.
Hatırladığım kadarıyla GetXYZ gibi bir fonksiyon olması lazım zaten hali hazırda direk PIXEL_POSITION structı dönen, VID zaten mevcut. aynı zamanda gm listeside mevcut diye hatırlıyorum yani bu hali ile hazırda mevcut yeniden tanımlamalara gerek yok.
GetClientSet den dönen listeyi direk timer eventine bağlayarak kullanarak x saniyede bir gm clientlerine iletilir.
Bu işi fazlasıyla iyi bir şekilde yapan admin manager isminde bir eklenti olan sourceler paylaşılmıştı zaten rubinum ya da global olması lazım direk ordan çok daha iyi hali hazır olarak da alınabilir.
Hatırladığım kadarıyla GetXYZ gibi bir fonksiyon olması lazım zaten hali hazırda direk PIXEL_POSITION structı dönen, VID zaten mevcut. aynı zamanda gm listeside mevcut diye hatırlıyorum yani bu hali ile hazırda mevcut yeniden tanımlamalara gerek yok.
GetClientSet den dönen listeyi direk timer eventine bağlayarak kullanarak x saniyede bir gm clientlerine iletilir.
Bu işi fazlasıyla iyi bir şekilde yapan admin manager isminde bir eklenti olan sourceler paylaşılmıştı zaten rubinum ya da global olması lazım direk ordan çok daha iyi hali hazır olarak da alınabilir.
Genel olarak rubinum files (nedemekse) oradan yürümek istemiştim
17.01.2021 Tarihinde Güncellendi Hatalar Düzeltildi.
- Katılım
- 23 Nis 2017
- Konular
- 1,224
- Mesajlar
- 4,483
- Reaksiyon Skoru
- 1,273
- Altın Konu
- 0
- Başarım Puanı
- 280
- TM Yaşı
- 8 Yıl 12 Ay 3 Gün
- MmoLira
- 353
- DevLira
- -21
teşekkürler abi
- Katılım
- 20 Şub 2018
- Konular
- 74
- Mesajlar
- 862
- Reaksiyon Skoru
- 387
- Altın Konu
- 0
- Başarım Puanı
- 132
- TM Yaşı
- 8 Yıl 2 Ay
- MmoLira
- 430
- DevLira
- -21
Teşekkürler
- Katılım
- 4 Nis 2016
- Konular
- 52
- Mesajlar
- 989
- Reaksiyon Skoru
- 182
- Altın Konu
- 0
- Başarım Puanı
- 120
- TM Yaşı
- 10 Yıl 18 Gün
- MmoLira
- 640
- DevLira
- 0
basit ama bir o kadar da yararlı teşekkürler.



