Kayıtlı Python Dosyasını Çalıştırmak
Kullanıcı ile etkileşime geçmeden önce bir "Python dosyası nasıl oluşturulur?" ve "Komut satırında nasıl çalıştırılır?" bundan bahsetmeliyiz.
Python dosyası oluştururken ilk yapmamız gereken ilk satıra
#!/usr/bin/env python
yazmaktır. Bu komut yazacağımız kodların Python kodları olduğunu ve Python'un sistemdeki konumunu belirtir. Eğer istenilirse Python'nun yolu direkt olarak da belirtilebilir. Fakat her sistemde aynı olmaması ve kullanıcının tam olarak nerede olduğunu bilmemesinden dolayı "env" betiği kullanılmaktadır. Bu betik sayesinde sistemde Python nerede olursa olsun program onu kendisi bulur. Bu satırı yazdıktan sonra kodun devamını istediğimiz gibi şekillendirebiliriz.
Peki Python dosyasını kaydettik ama nasıl çalıştıracağız?
Bu sorunun cevabı oldukça basittir. Yapmanız gereken "uç birimde" oluşturduğunuz Python dosyasının bulunduğu dizine gitmek ve şu kod parçacığını yazmaktır.
python dosyaAdi.py
Kullanıcıdan Veri Almak
Python da kullanıcı ile etkileşime geçebilmek için input() ve raw_input()fonksiyonları kullanılır. Şimdi bu fonksiyonları ve aralarındaki temel farkları inceleyelim.
raw_input() Fonksiyonu
raw_input() fonksiyonu klavye aracılığı ile kullanıcıdan veri alınmasını sağlar. Daha iyi anlayabilmeniz için basit bir örnek ile açıklayalım.
[COLOR=white !important]
[TABLE=full][TR][TD]
# -*- coding: utf-8 -*-
ad = raw_input("Lütfen adınızı giriniz:")
print ad
[/TD][/TR][/TABLE]
Yukarıdaki programda ilk satırdaki kodun ne işe yaradığından ve kaydedilen bir Python dosyasının çalıştırılmasından yazının başında bahsetmiştik. Gelelim şuan bizi ilgilendiren kodlara; Gördüğünüz gibi raw_input() fonksiyonu içinde "Lütfen adınızı giriniz:" açıklaması yapılarak programın kullanıcıdan ne beklediği belirtilmiştir. Bu açıklamayı yapmak zorunda değilsiniz. Ama kullanıcının programın kendisinden ne beklediğini anlayabilmesi için yazmanız daha faydalı olacaktır. Burada raw_input() fonksiyonunun anlaşılabilmesi için basit bir örnek yapılmıştır.Şimdi ise kullanıcının girdiği iki sayıyı topladıktan sonra ekrana yazdıran programı yazmaya çalışalım.
[COLOR=white !important]
[TABLE=full][TR][TD]
Bu programı çalıştırdıktan sonra 10 ve 15 değerlerini girerseniz şu şekilde bir çıktı ile karşılaşacaksınız.
[COLOR=white !important]
[TABLE=full][TR][TD]
Gördüğünüz gibi biz programın iki sayıyı toplamasını isterken;program iki sayıyı yan yana ekleyerek ekrana yazdı. Buradan da anlayacağınız gibi raw_input() kullanıcı tarafından girilen bütün değerleri karakter dizisi olarak alır. Yani Python için girilen iki değer sayı değildir.Bu yüzden de iki karakter dizisini uç uca eklemiş oldu. Programın kod yapısını şu şekilde değiştirelim.
[COLOR=white !important]
[TABLE=full][TR][TD]
Aynı değerleri bu program için girdiğinizde aşağıdaki gibi bir sonuçla karşılaşacaksınız.
[COLOR=white !important]
[TABLE=full][TR][TD]
Peki neden bu şekilde oldu? Eğer bu sorunun cevabı hakkında pek bir fikriniz yoksa;
input() Fonksiyonu
Tıpkı raw_input() fonksiyonu gibi input() fonksiyonu da kullanıcıdan klavye aracılığıyla veri alınmasını sağlar. Az önce verdiğimiz örneği şimdi de input() ile yapmaya çalışalım.
[COLOR=white !important]
[TABLE=full][TR][TD]
Bu programı çalıştırdığınız da şu şekilde bir sonuç alacaksınız.
[COLOR=white !important]
[TABLE=full][TR][TD]
Gördüğünüz gibi herhangi bir dönüştürme işlemi yapmadan input() fonksiyonu ile aldığımız değerleri matematiksel olarak toplayabildik. Buradan da anlaşılacağı gibi input() fonksiyonu aldığı değeri karakter dizisi olarak tutmaz. Gönderdiğimiz değerleri sayı olarak tuttuğu için dönüştürme işlemi yapmadan sayıları toplayabildik. Gelin şimdi de şu örneği inceleyelim.
[COLOR=white !important]
[TABLE=full][TR][TD]
Bu programı çalıştırdığınız da şu şekilde bir hata ile karşılaşacaksınız.
[COLOR=white !important]
[TABLE=full][TR][TD]
Az önce de söylediğimiz gibi input() fonksiyonu ile gönderilen değerler karakter dizisi olarak saklanmaz. Eğer kod satırına şunu yazarsanız aynı hata ile karşılaştığınızı göreceksiniz.
[COLOR=white !important]
[TABLE=full][TR][TD]
Bir de şu şekilde deneyelim;
[COLOR=white !important]
[TABLE=full][TR][TD]
Bu şekilde denediğimiz zaman program herhangi bir hata vermeyecektir. Çünkü biz ona tanıdığı bir tür olan karakter dizisini gönderdik. Buradan anlayacağınız gibi raw_input() fonksiyonu kullanıcıdan aldığı değeri karakter dizisi olarak saklarken input() fonksiyonu kullanıcıdan komut bekler. input() fonksiyonun kullanıcıdan komut beklemesi bazı güvenlik sorunlarına sebep olmaktadır.
Güvenlik Sorunları
Yukarı da söylediğimiz gibi input() fonksiyonu kullanıcıdan komut bekler.
[COLOR=white !important]
[TABLE=full][TR][TD]
[COLOR=white !important]
[TABLE=full][TR][TD]
Bu örnekte input() komutunun komut beklediğini çok net bir şekilde görebiliyorsunuz. Kullanıcının "3*6" olarak girdiği ifadeyi komut olarak gördü ve "*" operatörünü işleme soktu. input() fonksiyonunun bu özelliği yanında çok ciddi tehlikeler de getirmektedir. Kullanıcı programın istediği "sayi" yerine işletim sistemine ait komutları girerek programa istediği herhangi bir şeyi(dosya silmek,dosya içeriğini görmek vb.) yaptırabilir.
input() fonksiyonun güvenlik sorunlarından dolayı programcılar genellikle raw_input() fonksiyonunu kullanmayı tercih ederler. Zaten bu fonksiyon veri alış verişi ile ilgili her türlü isteğimizi karşılayacak özelliktedir.
Türkçe Karakter Kullanımı
Yukarıda yazdığımız programların hepsinde şu satırı gördünüz.
[COLOR=white !important]
[TABLE=full][TR][TD]
Python 2.x sürümü Türkçe karakterleri desteklememektedir. Eğer bu kodu yazmadan Türkçe karakter kullanırsanız program hata verecektir. Bu kodu yazarak kullandığımız karakter tipini Python'a tanıtmış oluruz.
Metin2 Oyun Sunucusunda Kullanıcı Girdisi Almak
Metin2 özel sunucularında oyun geliştirme sürecinde kullanıcı girdisi almak oldukça önemli bir konudur. Özellikle PvP sistemlerin veya özel etkileşimli menülerin tasarlandığı durumlarda doğru ve güvenli bir şekilde kullanıcıdan bilgi alabilmek, hem oyun deneyimini artırır hem de sunucu tarafında oluşabilecek hataları azaltır. Bu yazıda, Metin2 özel sunucularında kullanıcı girdisi alma yöntemlerini ele alacağız.
Python Script Tabanlı Girdi Sistemleri
Metin2 özel sunucularında genellikle Python dili ile yazılmış uiscript dosyaları kullanılır. Bu dosyalar sayesinde oyun içi arayüzler oluşturulabilir ve kullanıcıdan girdi alınabilir. Örneğin, bir GUI penceresi açarak kullanıcıdan bir metin girmesini istemek mümkündür. Bu işlem genellikle py root klasöründe bulunan dosyalarla yapılır.
Örnek bir kullanıcı girdi penceresi şu şekilde oluşturulabilir:
- UIScript dosyası ile arayüz tasarlanır.
- Python tarafında butonlara tıklama olayları tanımlanır.
- Girdi kutusundan alınan değer kontrol edilir ve sunucuya gönderilir.
Güvenlik Önlemleri
Kullanıcı girdisi alınırken dikkat edilmesi gereken en önemli konulardan biri güvenliktir. Kötü niyetli kullanıcılar, özellikle SQL injection gibi açıklardan faydalanarak sunucuyu tehlikeye atabilir. Bu nedenle alınan girdilerin doğrulanması (validation) ve filtrelenmesi büyük önem taşır.
Martysama gibi gelişmiş Metin2 development araçları, bu tür işlemlerde yardımcı olabilecek modüller sunar. Ancak yine de geliştiricilerin temel güvenlik önlemlerini öğrenmesi gerekir.
Sunucu Taraflı Girdi Kontrolü
Kullanıcıdan alınan girdi sadece istemci tarafında değil, server src tarafında da kontrol edilmelidir. C++ tabanlı game server yapılarında bu kontroller, oyunun bütünlüğünü korumak adına kritiktir. Özellikle auth ve db katmanlarında yapılan doğrulamalar, kullanıcıların sistemsel olarak hatalı ya da zararlı veri girmesini engeller.
Py GUI ve Python GUI Kullanımı
Python GUI araçları sayesinde kullanıcı dostu arayüzler oluşturulabilir. Bu tür arayüzler sayesinde oyuncuların sunucu ayarlarını değiştirmesi, PvP sistemlerinde seçim yapması veya özel komutları kullanması kolaylaşır. Py GUI ile oluşturulan pencerelerde kullanıcıdan girdi almak oldukça basit ve esnek bir şekilde yapılabilir.
Özet
Kullanıcı girdisi almak, Metin2 özel sunucularında oyun deneyimi ve sunucu güvenliği açısından kritik öneme sahiptir. Python ve C++ tabanlı geliştirme ortamlarında doğru yöntemlerle kullanıcıdan alınan girdiler, daha güçlü ve stabil sistemlerin oluşturulmasını sağlar. Metin2lobby.com olarak, bu konuda siz geliştiricilere destek olmaya devam ediyoruz.
Receiving User Input in Metin2 Server
In the process of developing Metin2 private servers, receiving user input is a very important topic. Especially when designing PvP systems or interactive menus, being able to securely and correctly obtain information from the user enhances the gaming experience and reduces potential errors on the server side. In this article, we will examine methods for receiving user input in Metin2 private servers.
Python-Based Input Systems
In Metin2 private servers, uiscript files written in Python are generally used. These files allow in-game interfaces to be created and user input to be obtained. For example, a GUI window can be opened to prompt the user to enter text. This process is typically done through files located in the py root folder.
An example user input window can be built as follows:
- Interface designed with a UIScript file.
- Button click events defined in Python.
- Value entered in the input box validated and sent to the server.
Security Measures
One of the most important aspects to consider when receiving user input is security. Malicious users may exploit vulnerabilities such as SQL injection to compromise the server. Therefore, validating and filtering received inputs is critical.
Martysama and other advanced Metin2 development tools provide modules that assist in such operations. However, developers must still learn basic security measures.
Server-Side Input Validation
User input should not only be checked on the client-side but also on the server src side. In C++-based game server structures, these validations are critical for maintaining game integrity. Validations performed in auth and db layers prevent users from entering incorrect or harmful data into the system.
Using Py GUI and Python GUI
With Python GUI tools, user-friendly interfaces can be created. Such interfaces make it easier for players to adjust server settings, make selections in PvP systems, or use special commands. Input windows created with Py GUI can easily and flexibly receive user input.
Summary
Receiving user input is critically important for both game experience and server security in Metin2 private servers. Properly obtained user input via Python and C++-based development environments allows for the creation of more robust and stable systems. As Metin2lobby.com, we continue to support you developers in this area.
Kullanıcı ile etkileşime geçmeden önce bir "Python dosyası nasıl oluşturulur?" ve "Komut satırında nasıl çalıştırılır?" bundan bahsetmeliyiz.
Python dosyası oluştururken ilk yapmamız gereken ilk satıra
#!/usr/bin/env python
yazmaktır. Bu komut yazacağımız kodların Python kodları olduğunu ve Python'un sistemdeki konumunu belirtir. Eğer istenilirse Python'nun yolu direkt olarak da belirtilebilir. Fakat her sistemde aynı olmaması ve kullanıcının tam olarak nerede olduğunu bilmemesinden dolayı "env" betiği kullanılmaktadır. Bu betik sayesinde sistemde Python nerede olursa olsun program onu kendisi bulur. Bu satırı yazdıktan sonra kodun devamını istediğimiz gibi şekillendirebiliriz.
Peki Python dosyasını kaydettik ama nasıl çalıştıracağız?
Bu sorunun cevabı oldukça basittir. Yapmanız gereken "uç birimde" oluşturduğunuz Python dosyasının bulunduğu dizine gitmek ve şu kod parçacığını yazmaktır.
python dosyaAdi.py
Kullanıcıdan Veri Almak
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Bugüne kadar yaptığımız bütün örneklerde her zaman tek taraflı işlemler yaptık.Yani kullanıcı programa hiç müdahalede bulunamadı. Bu yazımızda kullanıcının Python ile nasıl etkileşime geçeceğinden bahsedeceğiz.Python da kullanıcı ile etkileşime geçebilmek için input() ve raw_input()fonksiyonları kullanılır. Şimdi bu fonksiyonları ve aralarındaki temel farkları inceleyelim.
raw_input() Fonksiyonu
raw_input() fonksiyonu klavye aracılığı ile kullanıcıdan veri alınmasını sağlar. Daha iyi anlayabilmeniz için basit bir örnek ile açıklayalım.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
[/TD][TD]#!/usr/bin/env python2
3
4
5
# -*- coding: utf-8 -*-
ad = raw_input("Lütfen adınızı giriniz:")
print ad
[/TD][/TR][/TABLE]
Yukarıdaki programda ilk satırdaki kodun ne işe yaradığından ve kaydedilen bir Python dosyasının çalıştırılmasından yazının başında bahsetmiştik. Gelelim şuan bizi ilgilendiren kodlara; Gördüğünüz gibi raw_input() fonksiyonu içinde "Lütfen adınızı giriniz:" açıklaması yapılarak programın kullanıcıdan ne beklediği belirtilmiştir. Bu açıklamayı yapmak zorunda değilsiniz. Ama kullanıcının programın kendisinden ne beklediğini anlayabilmesi için yazmanız daha faydalı olacaktır. Burada raw_input() fonksiyonunun anlaşılabilmesi için basit bir örnek yapılmıştır.Şimdi ise kullanıcının girdiği iki sayıyı topladıktan sonra ekrana yazdıran programı yazmaya çalışalım.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
6
7
8
9
[/TD]2
3
4
5
6
7
8
9
[TD]#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");
toplam = sayi1+sayi2
print toplam
[/TD]
[/TR]# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");
toplam = sayi1+sayi2
print toplam
[/TD]
[/TABLE]Bu programı çalıştırdıktan sonra 10 ve 15 değerlerini girerseniz şu şekilde bir çıktı ile karşılaşacaksınız.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
[/TD]2
3
4
[TD]İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
1015
[/TD]
[/TR]Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
1015
[/TD]
[/TABLE]Gördüğünüz gibi biz programın iki sayıyı toplamasını isterken;program iki sayıyı yan yana ekleyerek ekrana yazdı. Buradan da anlayacağınız gibi raw_input() kullanıcı tarafından girilen bütün değerleri karakter dizisi olarak alır. Yani Python için girilen iki değer sayı değildir.Bu yüzden de iki karakter dizisini uç uca eklemiş oldu. Programın kod yapısını şu şekilde değiştirelim.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
6
7
8
9
[/TD]2
3
4
5
6
7
8
9
[TD]#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");
toplam = int(sayi1)+int(sayi2)
print toplam
[/TD]
[/TR]# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = raw_input("Birinci Sayıyı Giriniz:")
sayi2 = raw_input("İkinci Sayıyı Giriniz:");
toplam = int(sayi1)+int(sayi2)
print toplam
[/TD]
[/TABLE]Aynı değerleri bu program için girdiğinizde aşağıdaki gibi bir sonuçla karşılaşacaksınız.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
[/TD]2
3
4
[TD]İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25
[/TD]
[/TR]Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25
[/TD]
[/TABLE]Peki neden bu şekilde oldu? Eğer bu sorunun cevabı hakkında pek bir fikriniz yoksa;
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
başlıklı yazıyı okumalısınız. Burada programın elinde bulunan karakter dizilerini sayıya çevirmesi için int() fonksiyonundan yararlandık. Şimdi bir de input() fonksiyonunu inceleyelim.input() Fonksiyonu
Tıpkı raw_input() fonksiyonu gibi input() fonksiyonu da kullanıcıdan klavye aracılığıyla veri alınmasını sağlar. Az önce verdiğimiz örneği şimdi de input() ile yapmaya çalışalım.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
6
7
8
9
[/TD]2
3
4
5
6
7
8
9
[TD]#!/usr/bin/env python
# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = input("Birinci Sayıyı Giriniz:")
sayi2 = input("İkinci Sayıyı Giriniz:");
toplam = sayi1+sayi2
print toplam
[/TD]
[/TR]# -*- coding: utf-8 -*-
print "İki Sayıyı Toplayan Program"
sayi1 = input("Birinci Sayıyı Giriniz:")
sayi2 = input("İkinci Sayıyı Giriniz:");
toplam = sayi1+sayi2
print toplam
[/TD]
[/TABLE]
Bu programı çalıştırdığınız da şu şekilde bir sonuç alacaksınız.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
[/TD]2
3
4
[TD]İki Sayıyı Toplayan Program
Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25
[/TD]
[/TR]Birinci Sayıyı Giriniz:10
İkinci Sayıyı Giriniz:15
25
[/TD]
[/TABLE]
Gördüğünüz gibi herhangi bir dönüştürme işlemi yapmadan input() fonksiyonu ile aldığımız değerleri matematiksel olarak toplayabildik. Buradan da anlaşılacağı gibi input() fonksiyonu aldığı değeri karakter dizisi olarak tutmaz. Gönderdiğimiz değerleri sayı olarak tuttuğu için dönüştürme işlemi yapmadan sayıları toplayabildik. Gelin şimdi de şu örneği inceleyelim.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
[/TD]2
3
[TD]#!/usr/bin/env python
# -*- coding: utf-8 -*-
kelime = input("Bir kelime giriniz:")
[/TD]
[/TR]# -*- coding: utf-8 -*-
kelime = input("Bir kelime giriniz:")
[/TD]
[/TABLE]
Bu programı çalıştırdığınız da şu şekilde bir hata ile karşılaşacaksınız.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
[/TD]2
3
4
5
[TD]Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'kelime' is not defined
</module></string></module></stdin>
[/TD]
[/TR]File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'kelime' is not defined
</module></string></module></stdin>
[/TD]
[/TABLE]
Az önce de söylediğimiz gibi input() fonksiyonu ile gönderilen değerler karakter dizisi olarak saklanmaz. Eğer kod satırına şunu yazarsanız aynı hata ile karşılaştığınızı göreceksiniz.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
[/TD][TD]>>>kelime
[/TD]
[/TR][/TD]
[/TABLE]
Bir de şu şekilde deneyelim;
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
[/TD]2
[TD]Bir kelime giriniz:"pythondersleri.com"
pythondersleri.com
[/TD]
[/TR]pythondersleri.com
[/TD]
[/TABLE]
Bu şekilde denediğimiz zaman program herhangi bir hata vermeyecektir. Çünkü biz ona tanıdığı bir tür olan karakter dizisini gönderdik. Buradan anlayacağınız gibi raw_input() fonksiyonu kullanıcıdan aldığı değeri karakter dizisi olarak saklarken input() fonksiyonu kullanıcıdan komut bekler. input() fonksiyonun kullanıcıdan komut beklemesi bazı güvenlik sorunlarına sebep olmaktadır.
Güvenlik Sorunları
Yukarı da söylediğimiz gibi input() fonksiyonu kullanıcıdan komut bekler.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
3
4
5
[/TD]2
3
4
5
[TD]#!/usr/bin/env python
# -*- coding: utf-8 -*-
sayi = input("Bir kelime giriniz:")
print sayi
[/TD]
[/TR]# -*- coding: utf-8 -*-
sayi = input("Bir kelime giriniz:")
print sayi
[/TD]
[/TABLE][COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
2
[/TD]2
[TD]Bir sayı giriniz:3*6
18
[/TD]
[/TR]18
[/TD]
[/TABLE]Bu örnekte input() komutunun komut beklediğini çok net bir şekilde görebiliyorsunuz. Kullanıcının "3*6" olarak girdiği ifadeyi komut olarak gördü ve "*" operatörünü işleme soktu. input() fonksiyonunun bu özelliği yanında çok ciddi tehlikeler de getirmektedir. Kullanıcı programın istediği "sayi" yerine işletim sistemine ait komutları girerek programa istediği herhangi bir şeyi(dosya silmek,dosya içeriğini görmek vb.) yaptırabilir.
input() fonksiyonun güvenlik sorunlarından dolayı programcılar genellikle raw_input() fonksiyonunu kullanmayı tercih ederler. Zaten bu fonksiyon veri alış verişi ile ilgili her türlü isteğimizi karşılayacak özelliktedir.
Türkçe Karakter Kullanımı
Yukarıda yazdığımız programların hepsinde şu satırı gördünüz.
[COLOR=white !important]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[TABLE=full][TR][TD]
1
[/TD][TD]# -*- coding: utf-8 -*- =>
[/TD]
[/TR][/TD]
[/TABLE]Python 2.x sürümü Türkçe karakterleri desteklememektedir. Eğer bu kodu yazmadan Türkçe karakter kullanırsanız program hata verecektir. Bu kodu yazarak kullandığımız karakter tipini Python'a tanıtmış oluruz.
Metin2 Oyun Sunucusunda Kullanıcı Girdisi Almak
Metin2 özel sunucularında oyun geliştirme sürecinde kullanıcı girdisi almak oldukça önemli bir konudur. Özellikle PvP sistemlerin veya özel etkileşimli menülerin tasarlandığı durumlarda doğru ve güvenli bir şekilde kullanıcıdan bilgi alabilmek, hem oyun deneyimini artırır hem de sunucu tarafında oluşabilecek hataları azaltır. Bu yazıda, Metin2 özel sunucularında kullanıcı girdisi alma yöntemlerini ele alacağız.
Python Script Tabanlı Girdi Sistemleri
Metin2 özel sunucularında genellikle Python dili ile yazılmış uiscript dosyaları kullanılır. Bu dosyalar sayesinde oyun içi arayüzler oluşturulabilir ve kullanıcıdan girdi alınabilir. Örneğin, bir GUI penceresi açarak kullanıcıdan bir metin girmesini istemek mümkündür. Bu işlem genellikle py root klasöründe bulunan dosyalarla yapılır.
Örnek bir kullanıcı girdi penceresi şu şekilde oluşturulabilir:
- UIScript dosyası ile arayüz tasarlanır.
- Python tarafında butonlara tıklama olayları tanımlanır.
- Girdi kutusundan alınan değer kontrol edilir ve sunucuya gönderilir.
Güvenlik Önlemleri
Kullanıcı girdisi alınırken dikkat edilmesi gereken en önemli konulardan biri güvenliktir. Kötü niyetli kullanıcılar, özellikle SQL injection gibi açıklardan faydalanarak sunucuyu tehlikeye atabilir. Bu nedenle alınan girdilerin doğrulanması (validation) ve filtrelenmesi büyük önem taşır.
Martysama gibi gelişmiş Metin2 development araçları, bu tür işlemlerde yardımcı olabilecek modüller sunar. Ancak yine de geliştiricilerin temel güvenlik önlemlerini öğrenmesi gerekir.
Sunucu Taraflı Girdi Kontrolü
Kullanıcıdan alınan girdi sadece istemci tarafında değil, server src tarafında da kontrol edilmelidir. C++ tabanlı game server yapılarında bu kontroller, oyunun bütünlüğünü korumak adına kritiktir. Özellikle auth ve db katmanlarında yapılan doğrulamalar, kullanıcıların sistemsel olarak hatalı ya da zararlı veri girmesini engeller.
Py GUI ve Python GUI Kullanımı
Python GUI araçları sayesinde kullanıcı dostu arayüzler oluşturulabilir. Bu tür arayüzler sayesinde oyuncuların sunucu ayarlarını değiştirmesi, PvP sistemlerinde seçim yapması veya özel komutları kullanması kolaylaşır. Py GUI ile oluşturulan pencerelerde kullanıcıdan girdi almak oldukça basit ve esnek bir şekilde yapılabilir.
Özet
Kullanıcı girdisi almak, Metin2 özel sunucularında oyun deneyimi ve sunucu güvenliği açısından kritik öneme sahiptir. Python ve C++ tabanlı geliştirme ortamlarında doğru yöntemlerle kullanıcıdan alınan girdiler, daha güçlü ve stabil sistemlerin oluşturulmasını sağlar. Metin2lobby.com olarak, bu konuda siz geliştiricilere destek olmaya devam ediyoruz.
Receiving User Input in Metin2 Server
In the process of developing Metin2 private servers, receiving user input is a very important topic. Especially when designing PvP systems or interactive menus, being able to securely and correctly obtain information from the user enhances the gaming experience and reduces potential errors on the server side. In this article, we will examine methods for receiving user input in Metin2 private servers.
Python-Based Input Systems
In Metin2 private servers, uiscript files written in Python are generally used. These files allow in-game interfaces to be created and user input to be obtained. For example, a GUI window can be opened to prompt the user to enter text. This process is typically done through files located in the py root folder.
An example user input window can be built as follows:
- Interface designed with a UIScript file.
- Button click events defined in Python.
- Value entered in the input box validated and sent to the server.
Security Measures
One of the most important aspects to consider when receiving user input is security. Malicious users may exploit vulnerabilities such as SQL injection to compromise the server. Therefore, validating and filtering received inputs is critical.
Martysama and other advanced Metin2 development tools provide modules that assist in such operations. However, developers must still learn basic security measures.
Server-Side Input Validation
User input should not only be checked on the client-side but also on the server src side. In C++-based game server structures, these validations are critical for maintaining game integrity. Validations performed in auth and db layers prevent users from entering incorrect or harmful data into the system.
Using Py GUI and Python GUI
With Python GUI tools, user-friendly interfaces can be created. Such interfaces make it easier for players to adjust server settings, make selections in PvP systems, or use special commands. Input windows created with Py GUI can easily and flexibly receive user input.
Summary
Receiving user input is critically important for both game experience and server security in Metin2 private servers. Properly obtained user input via Python and C++-based development environments allows for the creation of more robust and stable systems. As Metin2lobby.com, we continue to support you developers in this area.
