- Katılım
- 6 Mayıs 2022
- Konular
- 48,291
- Mesajlar
- 48,601
- Tepkime puanı
- 75
- M2 Yaşı
- 3 yıl 11 ay 10 gün
- Trophy Puan
- 48
- M2 Yang
- 488,879
Merhaba Arkadaşlar :
Bu Zamanlarda En Çok Aranan Sistem Haline Gelen Pazar Geçmişi Logunu Sizlerle Paylaşacağım. Pazarınızda ki İtemi Kimin Aldığını Hangi Saatte Aldığını Ve Ne Zaman Aldığını Görebilirsiniz. Pazar Geçmişi Logu Tablosunu Açmak Ve Kayıtları Görmek İçin Pazar Panelinizde ki Kayıtlar Kısmına Basmanız Yeterlidir. Bu Sayede Kimin Ne Zaman Hangi Saatte Hangi İtemi Aldığını Görebilirsiniz.
Anlatım :
uiscript/shopdialog.py dosyasını açın.
Code:
{
"name" : "LogsButton",
"type" : "button",
"x" : 120,
"y" : 295,
"width" : 61,
"height" : 21,
"text" : "Kayitlar",
"default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
"over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
"down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
},
Yukarıda Vermiş Olduğum Kodu En Alta Ekleyin.
uishop.py dosyasını açın.
Code:
import time
import gameInfo
İmportların Arasına Ekleyin.
Bu Zamanlarda En Çok Aranan Sistem Haline Gelen Pazar Geçmişi Logunu Sizlerle Paylaşacağım. Pazarınızda ki İtemi Kimin Aldığını Hangi Saatte Aldığını Ve Ne Zaman Aldığını Görebilirsiniz. Pazar Geçmişi Logu Tablosunu Açmak Ve Kayıtları Görmek İçin Pazar Panelinizde ki Kayıtlar Kısmına Basmanız Yeterlidir. Bu Sayede Kimin Ne Zaman Hangi Saatte Hangi İtemi Aldığını Görebilirsiniz.
Anlatım :
uiscript/shopdialog.py dosyasını açın.
Code:
{
"name" : "LogsButton",
"type" : "button",
"x" : 120,
"y" : 295,
"width" : 61,
"height" : 21,
"text" : "Kayitlar",
"default_image" : "d:/ymir work/ui/public/middle_button_01.sub",
"over_image" : "d:/ymir work/ui/public/middle_button_02.sub",
"down_image" : "d:/ymir work/ui/public/middle_button_03.sub",
},
Yukarıda Vermiş Olduğum Kodu En Alta Ekleyin.
uishop.py dosyasını açın.
Code:
import time
import gameInfo
İmportların Arasına Ekleyin.
Code:
class ShopDialog(ui.ScriptWindow):
def __init__(self):
Aratın.
Code:
self.kisi = ""
self.pazar = 0
Altına Ekleyin.
class ShopDialog(ui.ScriptWindow):
def __init__(self):
Aratın.
Code:
self.kisi = ""
self.pazar = 0
Altına Ekleyin.
Code:
def LoadDialog(self):
Aratın.
Code:
self.btnLogs = GetObject("LogsButton")
Altına Ekleyin.
def LoadDialog(self):
Aratın.
Code:
self.btnLogs = GetObject("LogsButton")
Altına Ekleyin.
Code:
self.btnClose.SetEvent(ui.__mem_func__(self.AskClo sePrivateShop))
Aratın.
Code:
self.btnLogs.SetEvent(ui.__mem_func__(self.AskLogs PrivateShop)) ##koray- shop - log
Altına Ekleyin.
Code:
if chr.IsNPC(vid):
Bulun.
Code:
if chr.IsNPC(vid):
self.pazar = 0
isPrivateShop = FALSE
self.kisi = chr.GetNameByVID(vid)
else:
self.kisi = chr.GetNameByVID(vid)
self.pazar = 1
isPrivateShop = TRUE
Kodu Tamamen Değiştirin.
self.btnClose.SetEvent(ui.__mem_func__(self.AskClo sePrivateShop))
Aratın.
Code:
self.btnLogs.SetEvent(ui.__mem_func__(self.AskLogs PrivateShop)) ##koray- shop - log
Altına Ekleyin.
Code:
if chr.IsNPC(vid):
Bulun.
Code:
if chr.IsNPC(vid):
self.pazar = 0
isPrivateShop = FALSE
self.kisi = chr.GetNameByVID(vid)
else:
self.kisi = chr.GetNameByVID(vid)
self.pazar = 1
isPrivateShop = TRUE
Kodu Tamamen Değiştirin.
Bulun.
Code:
isMainPlayerPrivateShop = TRUE
self.btnBuy.Hide()
self.btnSell.Hide()
self.btnClose.Show()
else:
isMainPlayerPrivateShop = FALSE
self.btnBuy.Show()
self.btnSell.Show()
self.btnClose.Hide()
Değiştirin.
Code:
isMainPlayerPrivateShop = TRUE
self.btnBuy.Hide()
self.btnSell.Hide()
self.btnLogs.Show()
self.btnClose.Show()
else:
isMainPlayerPrivateShop = FALSE
self.btnBuy.Show()
self.btnSell.Show()
self.btnClose.Hide()
self.btnLogs.Hide()
Code:
isMainPlayerPrivateShop = TRUE
self.btnBuy.Hide()
self.btnSell.Hide()
self.btnClose.Show()
else:
isMainPlayerPrivateShop = FALSE
self.btnBuy.Show()
self.btnSell.Show()
self.btnClose.Hide()
Değiştirin.
Code:
isMainPlayerPrivateShop = TRUE
self.btnBuy.Hide()
self.btnSell.Hide()
self.btnLogs.Show()
self.btnClose.Show()
else:
isMainPlayerPrivateShop = FALSE
self.btnBuy.Show()
self.btnSell.Show()
self.btnClose.Hide()
self.btnLogs.Hide()
Bulun.
Code:
def Close(self):
Fonksiyonun Altına Ekleyin.
Code:
def AskLogsPrivateShop(self):
self.Board = ui.BoardWithTitleBar()
self.Board.SetSize(376+108+12+130, 306+35)
self.Board.SetCenterPosition()
self.Board.AddFlag('movable')
self.Board.AddFlag('float')
self.Board.SetTitleName('Alışveriş Kayıtların')
self.Board.SetCloseEvent(self.Kapat)
self.Board.Show()
self.ThinBoard = ui.SlotBar()
self.ThinBoard.SetParent(self.Board)
self.ThinBoard.SetSize(351+110+12+130, 260+35)
self.ThinBoard.SetPosition(10, 34)
self.ThinBoard.Show()
self.ListBox=ui.ListBoxScroll()
self.ListBox.SetParent(self.Board)
self.ListBox.SetPosition(10, 34)
self.ListBox.SetSize(345+110+12+130, 255+35)
self.ListBox.Show()
if len(gameInfo.PV_SHOP_LOG) != 0:
for i in xrange(0, len(gameInfo.PV_SHOP_LOG)):
self.ListBox.InsertItem(i, str(gameInfo.PV_SHOP_LOG.split("#")[1]) + ' adlı oyuncu -> ' + str(gameInfo.PV_SHOP_LOG.split("#")[2]) + ' -> ' + localeInfo.NumberToMoneyString(str(gameInfo.PV_SHO P_LOG.split("#")[3])) + "'a satın aldı. " + str(gameInfo.PV_SHOP_LOG.split("#")[4]))
else:
self.ListBox.InsertItem(0, "Henuz bu pazardan item satin alinmadi.")
Pazar Geçmişi Log Sistemi Nedir?
Metin2 özel sunucularında oyun içi ekonomi ve pazar hareketlerini takip edebilmek için kritik öneme sahip olan bir yapıdır Pazar Geçmişi Log Sistemi. Bu sistem sayesinde oyuncuların satın alma, satma ve teklif gibi işlemlerini kayıt altına alarak hem sunucu yöneticileri hem de oyuncular için şeffaf bir işlem geçmişi oluşturulur. Özellikle PvP sistemlerin yoğun olduğu Metin2 özel sunucularında, bu log sistemi oyun içi dengelerin analiz edilmesini sağlar.
Pazar Geçmişi Log Sistemi Nasıl Çalışır?
Pazar Geçmişi Log Sistemi, oyuncuların Market üzerinden gerçekleştirdiği her işlemi veritabanına kaydeder. Satın alma, satış yapma, fiyat belirleme gibi eylemler, DB tabanında özel log tablolarında tutulur. Bu sayede geçmişte hangi ürünün ne kadar fiyata satıldığını, hangi oyuncunun ne zaman işlem yaptığını görüntülemek mümkündür. Bu loglama sistemi genellikle Game Server tarafında C++ kaynak kodlarla entegre edilir. Martysama ve diğer Metin2 geliştirme araçları ile kolayca özelleştirilebilir.
Loglama İçin Gerekli Veriler Nelerdir?
Her log kaydı şu temel bilgileri içerir:
- Oyuncu Adı
- Ürün Adı
- Miktar
- Fiyat
- Tarih ve Saat
- İşlem Türü (Satış/Satın Alma)
Bu bilgiler sayesinde, sunucu sahipleri fiyat manipülasyonlarını tespit edebilir, ekonomik dengeleri gözlemleyebilir ve oyun içi inflasyonu kontrol altında tutabilirler.
Python GUI ile Log Takibi
Python tabanlı GUI sistemler ile logları görsel olarak analiz etmek mümkündür. Py Root klasörlerine entegre edilen GUI arayüzleri sayesinde logları filtreleyebilir, sıralayabilir ve detaylı istatistikler çıkarabilirsiniz. Bu tür Python GUI sistemleri, adminlerin hızlıca işlem geçmişi incelemesini sağlar. Özellikle Uiscript ile entegre edilen bu arayüzler, kullanıcı dostu bir deneyim sunar.
Neden Pazar Geçmişi Log Sistemi Kullanmalıyız?
Metin2 özel sunucularında hile kullanımı, fiyat manipülasyonu gibi durumlar görülebilir. Bu log sistemi sayesinde şüpheli hareketler tespit edilebilir. Ayrıca, oyun içi ekonomi dengesizliklerini analiz etmek için değerli veriler sağlar. Özellikle Core tabanlı sunucularda, DB Core ile entegre çalışan bu sistem, sunucu güvenliğini artırır.
Sistem Entegrasyonu ve Kurulum
Sistemi kurmak için öncelikle Game Sunucusu (Game Server) üzerinde gerekli C++ kodlamaları yapılmalıdır. Auth sunucusuyla senkronize çalışacak şekilde tasarlanmalıdır. Pack dosyalarına eklenen GUI arayüzü ile admin panelinden loglara erişim sağlanabilir. Bu süreçte DB Core ve Game Core yapıları dikkate alınmalıdır. Sistem, Metin2 Development (Metin2Dev) süreçlerine uygun şekilde optimize edilmelidir.
Bu sistem, Metin2 özel sunucularında hem teknik hem de oyun içi denge açısından kritik öneme sahiptir. Geliştiriciler için güçlü bir analiz aracıdır.
What is a Market History Log System?
The Market History Log System is a crucial structure for tracking in-game economy and market movements on Metin2 private servers. This system creates a transparent transaction history for both server administrators and players by logging every action such as buying, selling, and bidding made by players. Especially on Metin2 private servers where PvP systems are intense, this log system allows analysis of in-game balances.
How Does the Market History Log System Work?
The Market History Log System records every transaction made by players on the Market into the database. Actions like purchasing, selling, setting prices are stored in specific log tables within the DB system. This way, it becomes possible to view which item was sold at what price, and which player made a transaction at what time. This logging system is typically integrated with C++ source codes on the Game Server side. It can be easily customized with tools like Martysama and other Metin2 development utilities.
What Data Is Required for Logging?
Each log entry contains the following basic information:
- Player Name
- Item Name
- Quantity
- Price
- Date and Time
- Transaction Type (Sell/Buy)
With this information, server owners can detect price manipulation, observe economic balance, and control in-game inflation.
Tracking Logs with Python GUI[/BR]
It is possible to analyze logs visually using Python-based GUI systems. GUI interfaces integrated into Py Root folders allow filtering, sorting, and generating detailed statistics from logs. These types of Python GUI systems enable admins to quickly review transaction histories. Interfaces integrated with Uiscript provide a user-friendly experience.
Why Should We Use a Market History Log System?
On Metin2 private servers, cheating and price manipulation may occur. This log system helps detect suspicious activities. Additionally, it provides valuable data for analyzing in-game economic imbalances. Particularly on core-based servers, this system integrated with DB Core enhances server security.
System Integration and Installation
To install the system, necessary C++ coding must first be done on the Game Server. It should be designed to work synchronously with the Auth server. Access to logs through an admin panel can be provided via GUI interfaces added to Pack files. During this process, DB Core and Game Core structures should be considered. The system must be optimized according to Metin2 Development (Metin2Dev) processes.
This system is critically important for technical and in-game balance aspects on Metin2 private servers. It serves as a powerful analytical tool for developers.
Code:
def Close(self):
Fonksiyonun Altına Ekleyin.
Code:
def AskLogsPrivateShop(self):
self.Board = ui.BoardWithTitleBar()
self.Board.SetSize(376+108+12+130, 306+35)
self.Board.SetCenterPosition()
self.Board.AddFlag('movable')
self.Board.AddFlag('float')
self.Board.SetTitleName('Alışveriş Kayıtların')
self.Board.SetCloseEvent(self.Kapat)
self.Board.Show()
self.ThinBoard = ui.SlotBar()
self.ThinBoard.SetParent(self.Board)
self.ThinBoard.SetSize(351+110+12+130, 260+35)
self.ThinBoard.SetPosition(10, 34)
self.ThinBoard.Show()
self.ListBox=ui.ListBoxScroll()
self.ListBox.SetParent(self.Board)
self.ListBox.SetPosition(10, 34)
self.ListBox.SetSize(345+110+12+130, 255+35)
self.ListBox.Show()
if len(gameInfo.PV_SHOP_LOG) != 0:
for i in xrange(0, len(gameInfo.PV_SHOP_LOG)):
self.ListBox.InsertItem(i, str(gameInfo.PV_SHOP_LOG.split("#")[1]) + ' adlı oyuncu -> ' + str(gameInfo.PV_SHOP_LOG.split("#")[2]) + ' -> ' + localeInfo.NumberToMoneyString(str(gameInfo.PV_SHO P_LOG.split("#")[3])) + "'a satın aldı. " + str(gameInfo.PV_SHOP_LOG.split("#")[4]))
else:
self.ListBox.InsertItem(0, "Henuz bu pazardan item satin alinmadi.")
Bulun.
Code:
def OnClosePrivateShop(self):
Altına Ekleyin.
Code:
def Kapat(self):
self.Board.Hide()
self.ThinBoard.Hide()
self.ListBox.Hide()
Code:
def OnClosePrivateShop(self):
Altına Ekleyin.
Code:
def Kapat(self):
self.Board.Hide()
self.ThinBoard.Hide()
self.ListBox.Hide()
Code:
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerBuyItem(arg))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerBuyItem(arg))
Bulun.
Code:
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerBuyItem(arg, itemName, itemPrice, 1))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg, itemName, item
Değiştirin.
Code:
def AnswerBuyItem(self, flag):
Bulun.
Code:
def AnswerBuyItem(self, flag, itemAdi, itemFiyati, durum):
if flag:
pos = self.itemBuyQuestionDialog.pos
net.SendShopBuyPacket(pos)
##koray- shop - log
if self.kisi != "" and durum == 1 and player.GetElk() > itemFiyati:
net.SendWhisperPacket(self.kisi, '#'+str(itemAdi)+'#'+str(itemFiyati)+'#'+str(time. strftime("[%d:%m:%Y, %H:%M:%S]"))+'#_satin_aldi#')
self.itemBuyQuestionDialog.Close()
self.itemBuyQuestionDialog = None
Fonksiyonu Bununla Değiştirin.
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerBuyItem(arg))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerBuyItem(arg))
Bulun.
Code:
itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerBuyItem(arg, itemName, itemPrice, 1))
itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg, itemName, item
Değiştirin.
Code:
def AnswerBuyItem(self, flag):
Bulun.
Code:
def AnswerBuyItem(self, flag, itemAdi, itemFiyati, durum):
if flag:
pos = self.itemBuyQuestionDialog.pos
net.SendShopBuyPacket(pos)
##koray- shop - log
if self.kisi != "" and durum == 1 and player.GetElk() > itemFiyati:
net.SendWhisperPacket(self.kisi, '#'+str(itemAdi)+'#'+str(itemFiyati)+'#'+str(time. strftime("[%d:%m:%Y, %H:%M:%S]"))+'#_satin_aldi#')
self.itemBuyQuestionDialog.Close()
self.itemBuyQuestionDialog = None
Fonksiyonu Bununla Değiştirin.
Code:
def OnUpdate(self):
Bulun.
Code:
if self.pazar == 1:
self.GetChild("TitleName").SetText(str(self.kisi) + " - Dükkan")
else:
self.GetChild("TitleName").SetText("Dükkan")
En Altına Ekleyin.
def OnUpdate(self):
Bulun.
Code:
if self.pazar == 1:
self.GetChild("TitleName").SetText(str(self.kisi) + " - Dükkan")
else:
self.GetChild("TitleName").SetText("Dükkan")
En Altına Ekleyin.
gameInfo.py oluşturun.
Code:
PV_SHOP_LOG = [*]
Yukarıda ki Kodu Ekleyip Kaydedin.
game.py açın.
Code:
import gameInfo
İmportların Arasına Ekleyin.
Code:
def OnRecvWhisper(self, mode, name, line):
Aratın.
Code:
if line.find("#_satin_aldi#") != -1:
bol = line.split('#')
chat.AppendChat(chat.CHAT_TYPE_INFO, name + ' adlı oyuncu -> ' + bol[1] + ' -> ' + localeInfo.NumberToMoneyString(bol[2]) + "'a satın aldı " + str(bol[3]))
gameInfo.PV_SHOP_LOG.append("#"+name+'#'+bol[1]+'#'+bol[2]+'#'+bol[3]+'#')
return
Yukarıdaki Kodu Fonksiyona Ekleyin.
Code:
PV_SHOP_LOG = [*]
Yukarıda ki Kodu Ekleyip Kaydedin.
game.py açın.
Code:
import gameInfo
İmportların Arasına Ekleyin.
Code:
def OnRecvWhisper(self, mode, name, line):
Aratın.
Code:
if line.find("#_satin_aldi#") != -1:
bol = line.split('#')
chat.AppendChat(chat.CHAT_TYPE_INFO, name + ' adlı oyuncu -> ' + bol[1] + ' -> ' + localeInfo.NumberToMoneyString(bol[2]) + "'a satın aldı " + str(bol[3]))
gameInfo.PV_SHOP_LOG.append("#"+name+'#'+bol[1]+'#'+bol[2]+'#'+bol[3]+'#')
return
Yukarıdaki Kodu Fonksiyona Ekleyin.
ui.py açın.
Code:
elif Type == "listbox":
parent.Children[Index] = ListBox()
parent.Children[Index].SetParent(parent)
self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
Aratın.
Code:
elif Type == "listbox_scroll":
parent.Children[Index] = ListBoxScroll()
parent.Children[Index].SetParent(parent)
self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
Altına Ekleyin.
Code:
class ScriptWindow(Window):
Arayın.
Code:
class ListBoxScroll(ListBox):
def __init__(self):
ListBox.__init__(self)
self.scrollBar = ScrollBar()
self.scrollBar.SetParent(self)
self.scrollBar.SetScrollEvent(self.__OnScroll)
self.scrollBar.Hide()
def SetSize(self, width, height):
ListBox.SetSize(self, width - ScrollBar.SCROLLBAR_WIDTH, height)
Window.SetSize(self, width, height)
self.scrollBar.SetPosition(width - ScrollBar.SCROLLBAR_WIDTH, 0)
self.scrollBar.SetScrollBarSize(height)
def ClearItem(self):
ListBox.ClearItem(self)
self.scrollBar.SetPos(0)
def _LocateItem(self):
ListBox._LocateItem(self)
if self.showLineCount < len(self.itemList):
self.scrollBar.SetMiddleBarSize(float(self.GetView ItemCount())/self.GetItemCount())
self.scrollBar.Show()
else:
self.scrollBar.Hide()
def __OnScroll(self):
scrollLen = self.GetItemCount()-self.GetViewItemCount()
if scrollLen < 0:
scrollLen = 0
self.SetBasePos(int(self.scrollBar.GetPos()*scroll Len))
Üstüne Ekleyin.
Yapamayanlar İçin Hazır Dosyalar : İndirme Linki:
Code:
elif Type == "listbox":
parent.Children[Index] = ListBox()
parent.Children[Index].SetParent(parent)
self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
Aratın.
Code:
elif Type == "listbox_scroll":
parent.Children[Index] = ListBoxScroll()
parent.Children[Index].SetParent(parent)
self.LoadElementListBox(parent.Children[Index], ElementValue, parent)
Altına Ekleyin.
Code:
class ScriptWindow(Window):
Arayın.
Code:
class ListBoxScroll(ListBox):
def __init__(self):
ListBox.__init__(self)
self.scrollBar = ScrollBar()
self.scrollBar.SetParent(self)
self.scrollBar.SetScrollEvent(self.__OnScroll)
self.scrollBar.Hide()
def SetSize(self, width, height):
ListBox.SetSize(self, width - ScrollBar.SCROLLBAR_WIDTH, height)
Window.SetSize(self, width, height)
self.scrollBar.SetPosition(width - ScrollBar.SCROLLBAR_WIDTH, 0)
self.scrollBar.SetScrollBarSize(height)
def ClearItem(self):
ListBox.ClearItem(self)
self.scrollBar.SetPos(0)
def _LocateItem(self):
ListBox._LocateItem(self)
if self.showLineCount < len(self.itemList):
self.scrollBar.SetMiddleBarSize(float(self.GetView ItemCount())/self.GetItemCount())
self.scrollBar.Show()
else:
self.scrollBar.Hide()
def __OnScroll(self):
scrollLen = self.GetItemCount()-self.GetViewItemCount()
if scrollLen < 0:
scrollLen = 0
self.SetBasePos(int(self.scrollBar.GetPos()*scroll Len))
Üstüne Ekleyin.
Yapamayanlar İçin Hazır Dosyalar : İndirme Linki:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Virüs Total:
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Dip Not: Her Zaman Serverinizin Orjinal Pack Dosyalarını Kullanmanızda Fayda Var. Hazır Dosyalar Hata Verebilir. Ve Videoda İtem İsimleri Yabancı Olduğu İçin Sistem Kayıtlarında Yabancı Olarak Gözüküyor O Sistemden Değil Arkadaşın Serverinden Kaynaklanıyor. Sistem Tamamen Türkçe'dir.
Bir RepYeter Turkmmo <span style="color: rgb(51, 51, 51); font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; text-align: center; font-weight: bold;"><span style="color: rgb(153, 51, 51);">
Bir RepYeter Turkmmo <span style="color: rgb(51, 51, 51); font-family: Tahoma, Verdana, Arial, sans-serif; font-size: 14px; line-height: 19.6000003814697px; text-align: center; font-weight: bold;"><span style="color: rgb(153, 51, 51);">
Ailesi
Pazar Geçmişi Log Sistemi Nedir?
Metin2 özel sunucularında oyun içi ekonomi ve pazar hareketlerini takip edebilmek için kritik öneme sahip olan bir yapıdır Pazar Geçmişi Log Sistemi. Bu sistem sayesinde oyuncuların satın alma, satma ve teklif gibi işlemlerini kayıt altına alarak hem sunucu yöneticileri hem de oyuncular için şeffaf bir işlem geçmişi oluşturulur. Özellikle PvP sistemlerin yoğun olduğu Metin2 özel sunucularında, bu log sistemi oyun içi dengelerin analiz edilmesini sağlar.
Pazar Geçmişi Log Sistemi Nasıl Çalışır?
Pazar Geçmişi Log Sistemi, oyuncuların Market üzerinden gerçekleştirdiği her işlemi veritabanına kaydeder. Satın alma, satış yapma, fiyat belirleme gibi eylemler, DB tabanında özel log tablolarında tutulur. Bu sayede geçmişte hangi ürünün ne kadar fiyata satıldığını, hangi oyuncunun ne zaman işlem yaptığını görüntülemek mümkündür. Bu loglama sistemi genellikle Game Server tarafında C++ kaynak kodlarla entegre edilir. Martysama ve diğer Metin2 geliştirme araçları ile kolayca özelleştirilebilir.
Loglama İçin Gerekli Veriler Nelerdir?
Her log kaydı şu temel bilgileri içerir:
- Oyuncu Adı
- Ürün Adı
- Miktar
- Fiyat
- Tarih ve Saat
- İşlem Türü (Satış/Satın Alma)
Bu bilgiler sayesinde, sunucu sahipleri fiyat manipülasyonlarını tespit edebilir, ekonomik dengeleri gözlemleyebilir ve oyun içi inflasyonu kontrol altında tutabilirler.
Python GUI ile Log Takibi
Python tabanlı GUI sistemler ile logları görsel olarak analiz etmek mümkündür. Py Root klasörlerine entegre edilen GUI arayüzleri sayesinde logları filtreleyebilir, sıralayabilir ve detaylı istatistikler çıkarabilirsiniz. Bu tür Python GUI sistemleri, adminlerin hızlıca işlem geçmişi incelemesini sağlar. Özellikle Uiscript ile entegre edilen bu arayüzler, kullanıcı dostu bir deneyim sunar.
Neden Pazar Geçmişi Log Sistemi Kullanmalıyız?
Metin2 özel sunucularında hile kullanımı, fiyat manipülasyonu gibi durumlar görülebilir. Bu log sistemi sayesinde şüpheli hareketler tespit edilebilir. Ayrıca, oyun içi ekonomi dengesizliklerini analiz etmek için değerli veriler sağlar. Özellikle Core tabanlı sunucularda, DB Core ile entegre çalışan bu sistem, sunucu güvenliğini artırır.
Sistem Entegrasyonu ve Kurulum
Sistemi kurmak için öncelikle Game Sunucusu (Game Server) üzerinde gerekli C++ kodlamaları yapılmalıdır. Auth sunucusuyla senkronize çalışacak şekilde tasarlanmalıdır. Pack dosyalarına eklenen GUI arayüzü ile admin panelinden loglara erişim sağlanabilir. Bu süreçte DB Core ve Game Core yapıları dikkate alınmalıdır. Sistem, Metin2 Development (Metin2Dev) süreçlerine uygun şekilde optimize edilmelidir.
Bu sistem, Metin2 özel sunucularında hem teknik hem de oyun içi denge açısından kritik öneme sahiptir. Geliştiriciler için güçlü bir analiz aracıdır.
What is a Market History Log System?
The Market History Log System is a crucial structure for tracking in-game economy and market movements on Metin2 private servers. This system creates a transparent transaction history for both server administrators and players by logging every action such as buying, selling, and bidding made by players. Especially on Metin2 private servers where PvP systems are intense, this log system allows analysis of in-game balances.
How Does the Market History Log System Work?
The Market History Log System records every transaction made by players on the Market into the database. Actions like purchasing, selling, setting prices are stored in specific log tables within the DB system. This way, it becomes possible to view which item was sold at what price, and which player made a transaction at what time. This logging system is typically integrated with C++ source codes on the Game Server side. It can be easily customized with tools like Martysama and other Metin2 development utilities.
What Data Is Required for Logging?
Each log entry contains the following basic information:
- Player Name
- Item Name
- Quantity
- Price
- Date and Time
- Transaction Type (Sell/Buy)
With this information, server owners can detect price manipulation, observe economic balance, and control in-game inflation.
Tracking Logs with Python GUI[/BR]
It is possible to analyze logs visually using Python-based GUI systems. GUI interfaces integrated into Py Root folders allow filtering, sorting, and generating detailed statistics from logs. These types of Python GUI systems enable admins to quickly review transaction histories. Interfaces integrated with Uiscript provide a user-friendly experience.
Why Should We Use a Market History Log System?
On Metin2 private servers, cheating and price manipulation may occur. This log system helps detect suspicious activities. Additionally, it provides valuable data for analyzing in-game economic imbalances. Particularly on core-based servers, this system integrated with DB Core enhances server security.
System Integration and Installation
To install the system, necessary C++ coding must first be done on the Game Server. It should be designed to work synchronously with the Auth server. Access to logs through an admin panel can be provided via GUI interfaces added to Pack files. During this process, DB Core and Game Core structures should be considered. The system must be optimized according to Metin2 Development (Metin2Dev) processes.
This system is critically important for technical and in-game balance aspects on Metin2 private servers. It serves as a powerful analytical tool for developers.
