Uzaktan Ticaret Sistemi Fısıltı Yanı

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 72

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
-Merhaba arkadaşlar Sızlere Uzaktan tıcaret sıstemını paylaşacağım. lafı uzatmadan dırek konuya gırıyorum.

Game py açın Importlara ekleyın
Kod:
import localegame
import gameInfo
import event
import uiExchange_Multi


Aratın

Kod:
def OnRecvWhisper(self, mode, name, line):

Altına Ekleyın

Kod:
if line.find("uzaktan_ticaret_teklifi") != -1: bol = line.split("#")
if line.find("cevap") != -1:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
net.SendWhisperPacket(name, "#uzaktan_ticaret_teklifi_kapat#")
return
target_level = bol[3]
target_lonca = bol[4]
target_sinif = bol[5]
gameInfo.UZAKTAN_TICARET_KISILER["kisi_"+str(name)] = "#"+str(target_level)+"#"+str(target_lonca)+"#"+st r(target_sinif)+"#"
gameInfo.UZAKTAN_TICARET_RAKIP = name
self.ac = uiExchange_Multi.MultiExchangeDialog()
self.ac.Open()
self.interface.ToggleInventoryWindow()
return

if line.find("kapat") != -1:
uiExchange_Multi.TICARET_KAPAT = 1
chat.AppendChat(chat.CHAT_TYPE_INFO, localegame.UZAKTAN_TICARET_RAKIP_TICARETTE)
return


if gameInfo.UZAKTAN_TICARET_DURUM != 0:
net.SendWhisperPacket(name, "#uzaktan_ticaret_teklifi_kapat#")
return


target_level = bol[2]
target_lonca = bol[3]
target_sinif = bol[4]
self.TicaretDialog = uiCommon.QuestionDialog()
self.TicaretDialog.SetText(localegame.UZAKTAN_TICA RET % (str(name)))
self.TicaretDialog.SetAcceptEvent(lambda arg=TRUE: self.OnExchangeDialog(name, 1, target_level, target_lonca, target_sinif))
self.TicaretDialog.SetCancelEvent(lambda arg=FALSE: self.OnExchangeDialog(name, 0, target_level, target_lonca, target_sinif))
self.TicaretDialog.Open()
return


if line.find("uzaktan_ticaret_itemekle") != -1:
bol = line.split("#")
uiExchange_Multi.ITEMSLOT_INFO = "#"+str(bol[2])+"#"+str(bol[3])+"#"+str(bol[4])+"#"+str(bol[5])+"#"+bol[6]+"#"+bol[7]+"#"
uiExchange_Multi.ITEM_EKLE = 1
return


if line.find("uzaktan_ticaret_kabul") != -1:
if gameInfo.UZAKTAN_TICARET_DURUM == 2:
gameInfo.UZAKTAN_TICARET_DURUM = 4
uiExchange_Multi.TICARET_BASARILI = 1
else:
gameInfo.UZAKTAN_TICARET_DURUM = 3
return


if line.find("uzaktan_ticaret_iptal") != -1:
uiExchange_Multi.TICARET_KAPAT = 1
return


if line.find("uzaktan_ticaret_paraekle") != -1:
bol = line.split("#")
gameInfo.UZAKTAN_TICARET_PARA_TARGET = int(bol[2])
return

Aratın
Kod:
def OnRecvWhisperError(self, mode, name, line):


Kod bloğunun altına ekleyın

Kod:
def OnExchangeDialog(self, ad, flag, target_level, target_lonca, target_sinif):
if flag == 0:
self.TicaretDialog.Close()
return


self.TicaretDialog.Close()
gameInfo.UZAKTAN_TICARET_KISILER["kisi_"+str(ad)] = "#"+str(target_level)+"#"+str(target_lonca)+"#"+st r(target_sinif)+"#"
gameInfo.UZAKTAN_TICARET_RAKIP = ad
race = net.GetMainActorRace()
if not guild.IsGuildEnable():
net.SendWhisperPacket(ad, "#uzaktan_ticaret_teklifi#cevap#"+str(player.GetSt atus(player.LEVEL))+"#Lonca yok.#"+str(race)+"#")
else:
net.SendWhisperPacket(ad, "#uzaktan_ticaret_teklifi#cevap#"+str(player.GetSt atus(player.LEVEL))+"#"+str(player.GetGuildName()) +"#"+str(race)+"#")

self.ac = uiExchange_Multi.MultiExchangeDialog()
self.ac.Open()
self.interface.ToggleInventoryWindow()


Aratın
Kod:
def BINARY_ServerCommand_Run(self, line):

altına ekleyın

Kod:
def __PythonToLua(self, id): constInfo.PYTHONTOLUA = int(id)

def __PythonIslem(self, PythonIslem):
if PythonIslem == "PYTHONISLEM":
net.SendQuestInputStringPacket(constInfo.PYTHONISL EM)
elif PythonIslem == "PLAYER_VID":
net.SendQuestInputStringPacket(str(constInfo.PLAYE R_VID))

def __LuaToPython(self, LuaToPython):
if LuaToPython.find("#quest_input#") != -1:
constInfo.INPUT = 1
elif LuaToPython.find("#quest_inputbitir#") != -1:
constInfo.INPUT = 0
elif LuaToPython.find("ticaret_log") != -1:
bol = LuaToPython.split("#")
bol2 = LuaToPython.split("|")
constInfo.TICARET_LOG.insert(0, bol2[1])



Aratın
Kod:
"CloseSafebox" : self.CommandCloseSafebox,


Altına bır boşluk bırakıp ekleyın
Kod:
"PythonToLua" : self.__PythonToLua, # .python to Quest "PythonIslem" : self.__PythonIslem, # .python to Quest
"LuaToPython" : self.__LuaToPython, # Quest to .python



uiExchange py açın ve Importların arasına ekleyın
Kod:

import localegame
import gameInfo
import uiexchange_multi

Aratın
Kod:
def SelectOwnerEmptySlot(self, SlotIndex):

ve bu kod bloğun ıçındekının bu kodun altına
Kod:
DstSlotNumber = SlotIndex

Bu kodu ekleyın

Kod:
if srcSlotNumber in uiExchange_Multi.ITEMSLOT:
return


Aratın
Kod:
def OnUpdate(self):

bu kodun üstüne alttakı kodu ekleyınKod:
USE_EXCHANGE_LIMIT_RANGE = 1000


Kod:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
if DUELLO_YAPAMASSIN == 0:
chat.AppendChat(chat.CHAT_TYPE_INFO, '<Sistem> : Zaten ticaret yapiyorsun.')
DUELLO_YAPAMASSIN = 1
net.SendExchangeExitPacket()



uiinventory.py açın ve ımportların arasına ekleyın
Kod:
import gameInfo
import event
import localegame
import uiExchange_Multi


Aratın
Kod:
def SelectItemSlot(self, itemSlotIndex):


Bu kodun altına bı boşluk bırakıp
Kod:
attachedItemVID = mouseModule.mouseController.GetAttachedItemIndex()

alttakı kodu ekleyın

Kod:
if player.GetItemIndex(attachedSlotPos) == 71084 or player.GetItemIndex(attachedSlotPos) == 71085:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
return
if gameInfo.DUELLO_DURUM != 0:
return


Aratın ve kod bloğunun ıçıne alttakı kodları ekleyın
Kod:
def __DropSrcItemToDestItemInInventory(self, srcItemVID, srcItemSlotPos, dstItemSlotPos):


Kod:
if srcItemSlotPos in uiExchange_Multi.ITEMSLOT:
#chat.AppendChat(chat.CHAT_TYPE_INFO, localegame.DUELLO_ITEMI_HAREKET_ETTIREMESSIN)
return


Aratın ve kod bloğunun ıçıne alttakı kodu ekleyın
Kod:
def __SendUseItemPacket(self, slotPos):



Kod:
if slotPos in uiExchange_Multi.ITEMSLOT:
#chat.AppendChat(chat.CHAT_TYPE_INFO, localegame.DUELLO_ITEMI_KULLANAMASSIN)
return


Aratın ve Kod bloğunun ıçıne alttakı kodu ekleyın
Kod:
def __SendMoveItemPacket(self, srcSlotPos, dstSlotPos, srcItemCount):



Kod:
if srcSlotPos in uiExchange_Multi.ITEMSLOT:
#chat.AppendChat(chat.CHAT_TYPE_INFO, localegame.DUELLO_ITEMI_HAREKET_ETTIREMESSIN)
return



uiprivateshopbuilder.py açın

Aratın
Kod:
def Open(self, title):


Altına Ekleyın

Kod:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
self.Hide()
return



uisafebox.py açın ve ımportların arasına ekleyın
Kod:
import localegame
import uiexchange_multi
import gameInfo


Aratın ve altına bı boşluk bırakıp
Kod:
def OnUpdate(self):


Ekleyın

Kod:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
self.Close()



Aynı Kodu bı daha Aratıyoruz ve altına eklıyoruz
Kod:
if gameInfo.UZAKTAN_TICARET_DURUM != 0:
self.Close()


uiwhisper.py açın ve ımportların arasına ekleyın
Kod:
import gameInfo
import os
import uiCommon


Aratın ve kod bloğunun üstüne ekleyın
Kod:
def OnTop(self):



Kod:
def OnUpdate(self): if gameInfo.UZAKTAN_TICARET_CANSEND == 0 and self.uzaktanticaret_yapabilirsin == 1:
self.uzaktanticaret.Show()
else:
self.uzaktanticaret.Hide()

self.gamemasterMark = GetObject("gamemastermark") bunu aratın altına bı boşlk bırakıp


self.uzaktanticaret = GetObject("uzaktanticaretbutton")
self.uzaktanticaret_yapabilirsin = 0


Aratın ve altına bı boşluk bırakıp
Kod:
self.acceptButton.SetEvent(ui.__mem_func__(self.Ac ceptTarget))


Ekleyın

Kod:
self.uzaktanticaret.SetEvent(ui.__mem_func__(self. UzaktanTicaret))


Aratın ve bu bloğun en sonunda bı boşluk bırakıp
Kod:
def OpenWithTarget(self, targetName):


Ekleyın

Kod:
self.uzaktanticaret.Show()
self.uzaktanticaret_yapabilirsin = 1


if gameInfo.UZAKTAN_TICARET_CANSEND == 1:
self.uzaktanticaret.Hide()


Aratın ve en altında bı boşluk bırakın
Kod:
def OpenWithoutTarget(self, event):


Ekleyın

Kod:
self.uzaktanticaret.Hide()
self.uzaktanticaret_yapabilirsin = 0


Aratın ve kod bloğunun altına
Kod:
def Close(self):


Bu kod bloğunu ekleyın

Kod:
def UzaktanTicaret(self):
race = net.GetMainActorRace()
if not guild.IsGuildEnable():
net.SendWhisperPacket(self.targetName, "#uzaktan_ticaret_teklifi#"+str(player.GetStatus(p layer.LEVEL))+"#Lonca yok.#"+str(race))
else:
net.SendWhisperPacket(self.targetName, "#uzaktan_ticaret_teklifi#"+str(player.GetStatus(p layer.LEVEL))+"#"+str(player.GetGuildName())+"#"+s tr(race))
self.uzaktanticaret.Hide()
gameInfo.UZAKTAN_TICARET_ZAMAN = app.GetTime() + 30
gameInfo.UZAKTAN_TICARET_CANSEND = 1







vLLWEm.png


Uzaktan Tıcaret Ekranını Açmak Içın Hangı Oyuncuyla Açacaksanız Fısıltı Ekranının Üstünde U-T yazısına tıklayacaksınız Tıcaret Ekranı Açılacaktır

Son Olarak Gereklı dosyaları ındırıp gereklı yerlere atın rarın ıçınde anlatımlar ve dosyaların nereye atılacakları yazıyor

///


Uzaktan Ticaret Sistemi Fısıltı Yanı Nedir?
Metin2 özel sunucularında sunucu geliştirme ve oyuncu deneyimi iyileştirme konusunda öne çıkan sistemlerden birisi olan Uzaktan Ticaret Sistemi, oyuncuların belirli menzilde olmaksızın eşya alım-satımı yapabilmesine olanak tanır. Bu sistem sayesinde oyuncular, kendi karakterleriyle uzak bölgelerdeyken dahi markete erişim sağlayabilir. Fısıltı Yanı (Whisper Side), bu sistemin bir parçası olarak, kullanıcıların doğrudan birbirleriyle iletişim kurmadan bazı işlemlerini daha hızlı gerçekleştirmesini sağlar. Bu sistem, genellikle C++ tabanlı kaynak kod düzenlemeleriyle entegre edilir ve Python GUI arayüzleri ile desteklenir.

Fısıltı Yanı Nasıl Çalışır?
Fısıltı Yanı, oyuncuların belirli komutlarla veya özel bir pencere üzerinden diğer oyunculara mesaj göndermeden, doğrudan işlem yapmasını sağlar. Örneğin, bir oyuncu uzaktan ticaret penceresinden bir eşyayı seçip, 'fısıldama' yoluyla hemen satın alma işlemini gerçekleştirebilir. Bu işlem, Martysama gibi geliştirici eklentileriyle kolayca entegre edilebilir. Kullanıcılar, bu sayede zaman kaybı yaşamadan hedeflerine daha hızlı ulaşabilirler. Bu sistem, genellikle uiscript dosyaları üzerinden görsel arayüzle entegre edilir ve py root üzerinde çalışır.

Uzaktan Ticaret Sistemi ile Entegrasyon
Bu sistem, uzaktan ticaret sistemine doğrudan entegre edildiğinde, oyuncuların hem alım-satım hem de hızlı iletişim kanallarına sahip olmalarını sağlar. Özellikle Metin2 PvP sistemlerinde, oyuncuların hızla ekipmanlarını güncellemesi büyük önem taşır. Bu nedenle, Fısıltı Yanı gibi sistemler, oyuncu sadakati ve sunucu performansı açısından kritik bir rol oynar. Sistem, DB (veritabanı) seviyesinde güvenli işlemlerle tasarlanmalıdır. Auth ve Game Server arasında koordineli bir yapıyla çalışması gerekir. Bu yapı, game core ve db core ile desteklenmelidir.

Güvenlik ve Performans Açısından Dikkat Edilmesi Gerekenler
Fısıltı Yanı sistemi, yanlış uygulandığında sunucuda güvenlik açıklarına neden olabilir. Bu nedenle, sistem geliştirilirken C++ kaynak kodlarında gerekli kontroller yapılmalı, tüm işlemler DB seviyesinde kontrol edilmelidir. Ayrıca, sistemde kullanılacak komutlar filtrelenmeli ve kötüye kullanım engellenmelidir. Python GUI tabanlı sistemlerde, kullanıcı girdileri mutlaka doğrulanmalıdır. Sunucu tarafında pack ve compile işlemleri sırasında bu kontrollerin eksiksiz yerine getirilmesi gerekir. Bu sayede, hem güvenli hem de verimli bir sistem ortaya çıkar.

Metin2 Lobby Üzerinden Geliştirme ve Test Etme
Metin2 Lobby, geliştiricilerin test amaçlı kullanabileceği güçlü bir platformdur. Bu platformda Uzaktan Ticaret Sistemi ve Fısıltı Yanı gibi gelişmiş sistemlerin test edilmesi, hata ayıklama süreçlerinin daha hızlı tamamlanmasını sağlar. Geliştiriciler, client src üzerinde değişiklik yaparak, sistemin sunucu ve istemci tarafında nasıl çalıştığını gözlemleyebilirler. Bu sayede, sistemlerin doğru entegrasyonu sağlanabilir. Geliştirme sürecinde, Metin2Dev standartlarına uyulması da önemlidir. Bu sayede, sistemler daha stabil ve profesyonel bir yapıya kavuşur.


What is Remote Trade System Whisper Side?
The Remote Trade System is one of the key features in Metin2 private servers that enhances player experience and server development. It allows players to buy and sell items without being within a certain range. With this system, players can access markets even when their characters are located in distant areas. Whisper Side acts as a component of this system, allowing users to perform transactions more quickly without direct communication with other players. This system is typically integrated through C++ based source code modifications and supported by Python GUI interfaces.

How Does Whisper Side Work?
Whisper Side enables players to interact directly without sending messages to each other, using specific commands or a dedicated window. For instance, a player can select an item from the remote trade window and instantly complete a purchase via 'whispering'. This feature can be easily integrated with tools like Martysama. As a result, users can achieve their goals faster without wasting time. The system is usually integrated visually through uiscript files and operates on py root.

Integration with Remote Trade System
When integrated into the remote trade system, Whisper Side allows players to have both trading and fast communication channels. Especially in Metin2 PvP systems, quickly updating equipment is critical for players. Therefore, systems like Whisper Side play a vital role in terms of player loyalty and server performance. The system must be designed with secure database operations. It should operate coordinately between Auth and Game Server and be supported by game core and db core.

Security and Performance Considerations
If implemented incorrectly, the Whisper Side system may lead to security vulnerabilities on the server. Therefore, necessary checks must be made in C++ source codes during development, and all operations must be validated at the database level. Additionally, commands used in the system must be filtered to prevent abuse. In Python GUI-based systems, user inputs must be validated. During pack and compile processes on the server side, these validations must be fully implemented. This ensures a secure and efficient system.

Development and Testing Through Metin2 Lobby
Metin2 Lobby serves as a robust platform for developers to use for testing purposes. Testing advanced systems such as Remote Trade System and Whisper Side on this platform accelerates debugging processes. Developers can observe how the system works on both server and client sides by making modifications on client src. This ensures correct integration of the systems. During the development process, adhering to Metin2Dev standards is also important. This leads to more stable and professional structures.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt