Metin2 Quest Sistemi Nedir? Quest Yazmaya Başlangıç
📜 Metin2 Quest Sistemi Nedir? Quest Yazmaya Başlangıç
Metin2 server geliştirmeye başlayanların karşısına çıkan en önemli sistemlerden biri:
Quest sistemidir.
Quest denildiğinde akla yalnızca oyuncuya verilen görevler gelmemelidir.
Metin2'de quest sistemi;
🧙 NPC işlemleri,
🎁 ödüller,
⚔️ görevler,
👹 canavar öldürme kontrolleri,
📦 item teslimleri,
🗺️ ışınlanma işlemleri,
⏳ zamanlayıcılar,
📊 oyuncu ilerlemesi
ve çok sayıda oyun mekanizmasının oluşturulmasında kullanılabilir.
Bu nedenle quest sistemini öğrenmek, Metin2 server geliştirmeye başlayan biri için oldukça değerlidir.
📌 Quest Nedir?
Quest, belirli olaylar ve şartlar gerçekleştiğinde çalışabilen oyun mantığını tanımlamak için kullanılan sistemlerden biridir.
Basit bir örnek düşünelim:
Oyuncu bir NPC'ye tıklar.
NPC:
“10 adet item getir.”
der.
Oyuncu gerekli itemleri toplar.
NPC'ye tekrar gelir.
Sistem itemleri kontrol eder.
Şartlar sağlanıyorsa:
itemleri alır
ve oyuncuya ödül verir.
Bu sürecin mantığı quest sistemiyle oluşturulabilir.
🧠 Quest Sistemi Nasıl Düşünülmeli?
Yeni başlayanların quest yazarken ilk öğrenmesi gereken şey kod ezberlemek değildir.
Önce şu mantığı anlamak gerekir:
OLAY
↓
ŞART
↓
İŞLEM
↓
SONUÇ
Örneğin:
OLAY:
Oyuncu NPC'ye tıkladı.
ŞART:
Oyuncunun seviyesi 30 veya üzeri mi?
İŞLEM:
Görev ekranını göster.
SONUÇ:
Oyuncuya görev ver.
Quest yazımının büyük bölümü bu mantık etrafında düşünülebilir.
📜 Quest Yapısının Temel Mantığı
Quest dosyalarında genel olarak:
quest
state
when
gibi yapılarla karşılaşabilirsiniz.
Bunların görevlerini anlamak:
quest geliştirmeyi çok daha kolay hale getirir.
📦 quest Nedir?
questoluşturduğunuz quest yapısının başlangıcını tanımlar.
Basitleştirilmiş mantık:
quest → sistemin kendisi
state → sistemin mevcut aşaması
when → sistemin hangi olayda çalışacağı
şeklinde düşünülebilir.
🚦 state Nedir?
statequestin belirli aşamalarını yönetmek için kullanılabilir.
Örneğin bir görev:
başlamadı,
aktif,
tamamlandı
gibi farklı aşamalara sahip olabilir.
Metin2 quest sisteminde bu ilerleme:
state yapılarıyla
yönetilebilir.
⚡ when Nedir?
whenbelirli bir olay gerçekleştiğinde:
hangi kodun çalışacağını
tanımlamak için kullanılır.
Örneğin:
oyuncu giriş yaptığında,
NPC'ye tıkladığında,
bir yaratık öldürdüğünde,
belirli seviyeye ulaştığında
veya bir item kullandığında
quest çalıştırılabilir.
👤 login Olayı
Oyuncu oyuna giriş yaptığında:
belirli işlemleri gerçekleştirmek için
login olayı kullanılabilir.
Örneğin:
oyuncuya bilgi vermek,
belirli şartları kontrol etmek
veya devam eden bir sistemi yönetmek
için kullanılabilir.
Ancak her girişte ağır işlemler çalıştırmak:
gereksiz yük oluşturabileceği için
dikkatli kullanılmalıdır.
🧙 NPC Click Mantığı
Quest sisteminin en yaygın kullanım alanlarından biri:
NPC etkileşimidir.
Oyuncu belirli NPC'ye tıkladığında:
konuşma ekranı,
seçenekler,
görev,
ödül
veya farklı işlemler
başlatılabilir.
👹 kill Olayı
Oyuncu bir yaratık öldürdüğünde:
quest üzerinden işlem yapılabilir.
Örneğin:
“50 yaratık öldür”
görevi düşünelim.
Her uygun yaratık öldürüldüğünde:
sayaç artırılabilir.
Sayaç 50 olduğunda:
görev tamamlanabilir.
🎒 Item Kullanımı
Bazı questler:
oyuncunun belirli bir itemi
kullanmasıyla
başlatılabilir.
Bu mantık:
özel sandıklar,
ışınlanma eşyaları,
görev itemleri
ve farklı sistemlerde
kullanılabilir.
📊 Quest Flag Nedir?
Quest geliştirirken:
quest flag
kavramıyla sık karşılaşabilirsiniz.
Flag:
oyuncuya veya quest ilerlemesine ait
belirli bilgileri saklamak için
kullanılabilir.
Örneğin:
kaç yaratık öldürdü?
görevi tamamladı mı?
ödülü aldı mı?
hangi aşamada?
gibi bilgiler
flag mantığıyla takip edilebilir.
💡 Basit Bir Örnek
Bir görev tasarlayalım:
Oyuncu NPC'ye gider.
NPC:
“20 adet yaratık öldür.”
der.
Oyuncu görevi kabul eder.
Sistem:
öldürülen uygun yaratıkları
saymaya başlar.
20 yaratık öldürüldüğünde:
oyuncuya
“Görev tamamlandı.”
bilgisi verilir.
Oyuncu NPC'ye döner.
NPC:
ödülü verir.
Burada ihtiyaç duyduğumuz temel yapı:
NPC etkileşimi
+
görev durumu
+
kill kontrolü
+
sayaç
+
ödül
olacaktır.
🧩 Quest Yazmadan Önce Akış Hazırlayın
Doğrudan kod yazmaya başlamayın.
Önce düz yazıyla:
questin nasıl çalışacağını
hazırlayın.
Örneğin:
1️⃣ Oyuncu NPC'ye tıklar.
2️⃣ Seviye kontrol edilir.
3️⃣ Görev daha önce tamamlandı mı kontrol edilir.
4️⃣ Oyuncuya görev teklif edilir.
5️⃣ Kabul ederse görev başlar.
6️⃣ Yaratıklar sayılır.
7️⃣ Hedef tamamlanınca NPC'ye dönmesi istenir.
8️⃣ Gerekli kontroller tekrar yapılır.
9️⃣ Ödül verilir.
🔟 Quest tamamlandı olarak işaretlenir.
Bu akışı doğru kurduğunuzda:
kodu yazmak
çok daha kolay hale gelir.
🔐 Server Tarafındaki Kontroller Neden Önemli?
Quest sistemi:
oyuncuya item,
Yang,
EXP,
ışınlanma
ve farklı avantajlar
sağlayabilir.
Bu nedenle:
ödül vermeden önce
gerekli şartların gerçekten karşılandığı
kontrol edilmelidir.
⚠️ Ödülü İki Kez Alma Problemi
Kötü hazırlanmış questlerde:
oyuncu aynı ödülü
birden fazla kez alabilir.
Örneğin:
quest tamamlandıktan sonra
tamamlanma durumu kaydedilmiyorsa
NPC'ye tekrar tıklamak:
ödülün yeniden verilmesine
neden olabilir.
Bu yüzden ödül sistemlerinde:
“Bu oyuncu ödülü daha önce aldı mı?”
kontrolü önemlidir.
🎁 Item Verirken Nelere Dikkat Edilmeli?
Quest üzerinden item verirken:
doğru item ID,
doğru miktar,
gerekli şartlar
ve ödülün tekrar alınıp alınamayacağı
kontrol edilmelidir.
Yanlış item ID:
oyuncuya tamamen farklı bir item
verilmesine neden olabilir.
💰 Yang Ödüllerinde Dikkat
Quest üzerinden yüksek miktarda:
Yang
veya ekonomik değeri olan ödüller
veriliyorsa
quest mutlaka dikkatli test edilmelidir.
Tekrarlanabilir bir hata:
server ekonomisini
ciddi şekilde bozabilir.
🗺️ Işınlanma Questleri
Quest sistemi:
oyuncuyu farklı haritalara
ışınlamak için de kullanılabilir.
Örneğin:
NPC'ye tıkla
→ bölge seç
→ şartları kontrol et
→ gerekli itemi kontrol et
→ itemi al
→ oyuncuyu ışınla
şeklinde bir sistem kurulabilir.
⚠️ Işınlamadan Önce Kontrol
Özellikle:
level şartı,
giriş itemi,
grup şartı,
bekleme süresi
ve harita gereksinimleri
varsa
ışınlamadan önce kontrol edilmelidir.
⏳ Timer Nedir?
Bazı questlerde:
belirli bir süre sonra
işlem yapılması gerekir.
Örneğin:
zindanın kapanması,
oyuncunun belirli süre beklemesi,
dalga başlangıcı,
geri sayım
veya zaman sınırlı görev
gibi sistemlerde
timer mantığı kullanılabilir.
⚠️ Timer Kullanırken Dikkat
Zamanlayıcılar:
özellikle zindanlarda
dikkatli tasarlanmalıdır.
Oyuncu:
çıkış yaparsa,
ölürse,
haritadan ayrılırsa
veya server yeniden başlarsa
sistemin nasıl davranacağı
önceden düşünülmelidir.
🏰 Zindanlar Quest ile Yapılabilir mi?
Metin2'de birçok zindan mantığında:
quest sistemi önemli rol oynayabilir.
Örneğin:
giriş kontrolü,
grup kontrolü,
Metin kesme,
boss oluşturma,
kat ilerletme,
zaman sınırı,
ödül
ve çıkış
gibi aşamalar
questlerle yönetilebilir.
🧠 Zindan Questi Neden Daha Zordur?
Basit NPC questinden farklı olarak:
zindanlarda
aynı anda birçok durum
takip edilir.
Örneğin:
kaç oyuncu içeride?
boss öldü mü?
hangi kattalar?
süre doldu mu?
gerekli item kullanıldı mı?
ödül alındı mı?
Bu nedenle yeni başlayan biri:
ilk quest olarak büyük bir zindan
yazmaya çalışmamalıdır.
🌱 İlk Questiniz Ne Olmalı?
Başlangıç için:
basit NPC konuşması
iyi bir seçimdir.
Sonrasında:
level kontrolü,
item kontrolü,
ödül verme,
kill görevi,
quest flag,
state değiştirme
gibi özellikleri
tek tek öğrenebilirsiniz.
📈 Quest Öğrenme Sırası
Başlangıç:
NPC konuşması
↓
Seçenek menüsü
↓
Level kontrolü
↓
Item kontrolü
↓
Item verme/alma
↓
Yang ve EXP işlemleri
↓
Quest flag
↓
Kill sayacı
↓
State sistemi
↓
Timer
↓
Işınlanma
↓
Grup kontrolleri
↓
Zindan sistemleri
Bu sırayla ilerlemek:
karmaşık questleri anlamayı
kolaylaştırır.
🧪 Quest Nasıl Test Edilmeli?
Quest yazıldıktan sonra:
yalnızca normal senaryoyu
test etmek yeterli değildir.
Örneğin görev:
10 item istiyorsa
şunları da deneyin:
Oyuncuda 0 item var.
Oyuncuda 9 item var.
Oyuncuda tam 10 item var.
Oyuncuda 20 item var.
Görev daha önce tamamlandı.
Oyuncu görevi yarıda bıraktı.
Oyuncu çıkış yapıp geri geldi.
Oyuncu NPC'ye tekrar tekrar tıkladı.
Bu testler:
beklenmeyen hataları
bulmanıza yardımcı olur.
🔁 Tekrar Edilebilir Questler
Bazı görevler:
yalnızca bir kez,
bazıları:
günlük,
bazıları:
belirli bekleme süresiyle,
bazıları ise:
sınırsız
tekrar edilebilir.
Quest tasarlanırken:
bu davranış açık şekilde
belirlenmelidir.
📅 Günlük Görev Mantığı
Günlük görev oluşturuyorsanız:
yalnızca:
“ödülü verdi”
bilgisini saklamak
yeterli değildir.
Oyuncunun:
ödülü ne zaman aldığı
ve yeniden ne zaman alabileceği
de doğru şekilde
takip edilmelidir.
⚠️ Saat ve Tarih Sistemlerinde Dikkat
Günlük reset:
00:00 mı?
24 saat sonra mı?
server saatine göre mi?
belirli bir reset saatinde mi?
çalışacak?
Bunlar birbirinden farklı sistemlerdir.
Quest yazmadan önce:
reset kuralını
net belirleyin.
🧹 Quest Değişkenlerini Gereksiz Kullanmayın
Her küçük bilgi için:
kalıcı flag oluşturmak
iyi tasarım olmayabilir.
Gerçekten:
oyuncunun ileride tekrar ihtiyaç duyacağı
bilgileri
saklayın.
Quest büyüdükçe:
değişken isimlerinin anlaşılır olması
çok önemlidir.
📝 İsimlendirme Neden Önemli?
Şöyle bir değişken:
a
ilk yazdığınız anda
size anlaşılır gelebilir.
Aylar sonra:
ne işe yaradığını
hatırlamayabilirsiniz.
Bunun yerine:
görevin amacını anlatan
tutarlı isimler kullanmak
bakımı kolaylaştırır.
🛠️ Quest Hatası Nasıl Bulunur?
Quest çalışmıyorsa:
rastgele kod değiştirmek yerine
adım adım ilerleyin.
Kontrol edin:
Syntax doğru mu?
Doğru quest yüklendi mi?
NPC veya mob ID doğru mu?
State doğru mu?
When olayı gerçekten tetikleniyor mu?
Şart yanlış mı?
Flag beklenen değerde mi?
Server logunda hata var mı?
📋 Loglar Neden Önemli?
Quest derleme veya çalışma sırasında:
hata mesajları
problemin nerede olduğunu
gösterebilir.
Logları okumadan:
sürekli farklı kodlar denemek
hem zaman kaybettirir
hem yeni hatalar oluşturabilir.
⚠️ İnternetten Quest Kopyalarken Dikkat
İnternette:
çok sayıda hazır quest
bulunabilir.
Ancak her quest:
sizin Server Files yapınıza
uygun olmayabilir.
Ayrıca kod:
eski,
hatalı,
güvensiz
veya kötü optimize edilmiş
olabilir.
Bu nedenle:
kopyala → yükle → canlıya al
yaklaşımı yerine:
kodu incele → ne yaptığını anla → test et → kullan
yaklaşımı daha sağlıklıdır.
🔐 Kaynağı Bilinmeyen Questlere Dikkat
Özellikle:
uzun,
karmaşık
ve ne yaptığı anlaşılmayan
questleri
canlı servera doğrudan eklemeyin.
Kodun:
item üretip üretmediğini,
oyuncu verisini değiştirip değiştirmediğini,
komut çalıştırıp çalıştırmadığını
ve hangi sistemlere dokunduğunu
inceleyin.
💾 Quest Değiştirmeden Önce Yedek
Çalışan bir sistemi:
değiştirmeden önce
mevcut quest dosyasının
yedeklenmesi
iyi bir alışkanlıktır.
Büyük değişikliklerde:
ilgili server dosyalarının
ve gerekiyorsa veritabanının
yedeklenmesi
geri dönüşü kolaylaştırır.
🧪 Test Server Kullanmanın Avantajı
Test ortamında:
hatalı quest,
yanlış ödül,
bozuk ışınlanma,
sonsuz döngü,
tekrar ödül alma
gibi problemleri
gerçek oyuncular etkilenmeden
tespit edebilirsiniz.
⚠️ Questlerde Yapılan Yaygın Hatalar
Kodun ne yaptığını anlamadan kopyalamak.
Canlı serverda doğrudan test yapmak.
Quest flag kullanmayı bilmemek.
Ödülün tekrar alınmasını engellememek.
Yanlış item veya mob ID kullanmak.
Level şartını kontrol etmemek.
Timer davranışını düşünmemek.
Oyuncu çıkış yaptığında ne olacağını hesaba katmamak.
Quest state yapısını gereksiz karmaşıklaştırmak.
Logları okumamak.
Yedek almamak.
Birinci quest olarak büyük zindan yazmaya çalışmak.
❓ Metin2 Quest Hangi Dille Yazılır?
Metin2 quest sistemi:
Lua tabanlı bir söz dizimi ve Metin2'ye özgü quest fonksiyonları/yapıları
kullanır.
Bu nedenle:
genel Lua bilgisi
faydalıdır.
Ancak yalnızca standart Lua öğrenmek:
Metin2'nin quest API'sini
otomatik olarak öğretmez.
❓ Kodlama Bilmeden Quest Yazılır mı?
Basit questleri:
örnekleri inceleyerek
öğrenmek mümkündür.
Ancak:
değişken,
koşul,
fonksiyon,
olay
ve programlama mantığını
öğrenmek
çok büyük avantaj sağlar.
❓ Quest Yazmak İçin Source Gerekir mi?
Basit ve mevcut quest sistemi tarafından desteklenen işlemler için:
her zaman source değişikliği
gerekmez.
Quest sistemi:
serverın sunduğu mevcut fonksiyonları
kullanabilir.
Ancak quest sisteminde bulunmayan
yeni bir çekirdek davranış gerekiyorsa:
source tarafında geliştirme
gerekebilir.
❓ Quest ile Item Verilir mi?
Evet.
Questler:
şartlar karşılandığında
oyuncuya item
ve farklı ödüller
vermek için kullanılabilir.
❓ Quest ile NPC Yapılır mı?
Quest:
mevcut NPC ile oyuncu arasındaki
etkileşimleri
yönetebilir.
NPC konuşmaları,
seçenekler
ve farklı işlemler
quest üzerinden
oluşturulabilir.
❓ Quest ile Zindan Yapılır mı?
Evet.
Zindanların:
giriş,
ilerleme,
boss,
süre
ve ödül
gibi birçok mekanizmasında
quest sistemi kullanılabilir.
Ancak zindan questleri:
başlangıç seviyesi için
karmaşıktır.
❓ Quest Çalışmıyorsa İlk Neye Bakmalıyım?
Öncelikle:
questin başarıyla yüklenip yüklenmediğini
ve loglarda:
syntax veya çalışma hatası
olup olmadığını
kontrol edin.
Sonra:
olay,
şart,
ID
ve state mantığını
adım adım inceleyin.
🏆 İlk Questinizi Yazmadan Önce Kontrol Listesi
Questin amacını belirleyin.
Akışı düz yazıyla hazırlayın.
Başlangıç olayını belirleyin.
Gerekli şartları yazın.
Quest state yapısını planlayın.
Gerekli flagleri belirleyin.
Ödülü tanımlayın.
Ödülün tekrar alınıp alınamayacağını belirleyin.
Hatalı kullanım senaryolarını düşünün.
Test serverda deneyin.
Logları kontrol edin.
Çıkış/giriş senaryosunu test edin.
Tekrar tıklama senaryosunu test edin.
Çalışan dosyanın yedeğini saklayın.
📌 Sonuç: Quest Öğrenmeye Nereden Başlanmalı?
Metin2 Quest Sistemi:
yalnızca görev yazmak için kullanılan
küçük bir sistem değildir.
Questler;
🧙 NPC etkileşimleri,
👹 yaratık görevleri,
🎁 ödüller,
📦 item işlemleri,
🗺️ ışınlanmalar,
⏳ zamanlayıcılar,
🏰 zindanlar
ve çok sayıda oyun sisteminde
kullanılabilir.
Yeni başlıyorsanız:
karmaşık hazır questleri
ezberlemek yerine
önce şu mantığı öğrenin:
OLAY
↓
ŞART
↓
İŞLEM
↓
SONUÇ
Ardından:
NPC konuşması,
level kontrolü,
item kontrolü,
quest flag,
kill sayacı,
state,
timer
ve zindan mantığına
adım adım ilerleyin.
Quest sistemini gerçekten öğrenmenin en iyi yolu:
hazır kodu kopyalamak değil,
küçük bir sistem yazıp
neden çalıştığını
anlamaktır. 📜🛠️
💬 Developer & Files Tartışması
Quest geliştirmeye ilk başladığınızda:
en çok hangi bölümde zorlandınız?
NPC işlemleri,
quest flag,
kill sayacı,
timer
yoksa zindan questleri mi?
Kendi tecrübelerinizi ve quest geliştirme sorularınızı konu altında paylaşabilirsiniz. 👇
