Merhaba Metin2 oyuncuları ve sunucu sahipleri! Bugün sizlerle FreeBSD tabanlı bir Metin2 PVP sunucusu için 55-120 seviye aralığında tamamen farm odaklı, uzun sürecek ve daha önce eşi benzerine rastlanmamış bir sistem paylaşacağım. Bu sistem, oyuncularınızı uzun süre meşgul edecek ve oyun deneyimini önemli ölçüde zenginleştirecektir. Hazırsanız başlayalım!
Gereksinimler
Bu rehberi takip edebilmeniz için aşağıdaki gereksinimlere sahip olmanız gerekiyor:
- FreeBSD işletim sistemi üzerinde çalışan bir Metin2 sunucusu
- MySQL veya MariaDB veritabanı
- Metin2 Quest Compiler (qc)
- Lua programlama dili temel bilgisi
Görev Tanıtımı
Bugün "Efsanevi Zindan Yolculuğu" adlı uzun bir görev dizisini tanıtacağız. Bu görev dizisi, oyuncuların farklı zindanlardaki farklı boss canavarlarını yenmelerini, nadir materyaller toplamalarını ve efsanevi bir ekipmanı üretmelerini sağlayacaktır.
1. Veritabanı İşlemleri
İlk olarak, görevimizi destekleyecek bazı veritabanı tabloları oluşturmamız gerekiyor. Bu tablolar, oyuncuların görevdeki ilerlemelerini saklayacak.
Tablo Oluşturma
Veritabanınıza bağlanın ve aşağıdaki sorguları çalıştırarak gerekli tabloları oluşturun.
SQL:
CREATE TABLE efsanevi_zindan_gorev (
player_id INT NOT NULL,
stage VARCHAR(50) NOT NULL,
materyal1 INT DEFAULT 0,
materyal2 INT DEFAULT 0,
materyal3 INT DEFAULT 0,
baso_boss BIT DEFAULT 0,
canavar_boss BIT DEFAULT 0,
ejderha_boss BIT DEFAULT 0,
PRIMARY KEY (player_id);
2. Quest Script'i
Şimdi, asıl quest kodumuzu yazacağız. Bu kod, oyuncuların belirli zindanda nadir materyalleri toplamasını ve belirli boss canavarlarını yenmesini sağlayacak.
Görev Başlangıcı
Bu bölümde, ana quest dosyamızı oluşturacağız ve gerekli işlevlerimizi tanımlayacağız.
efsanevi_zindan_yolculugu.quest
efsanevi_zindan_yolculugu.quest
Kod:
quest efsanevi_zindan_yolculugu begin
state start begin
when login with pc.get_level() >= 55 and pc.get_level() <= 120 begin
set_state(baslangic)
end
end
state baslangic begin
when letter begin
send_letter("Efsanevi Zindan Macerası")
end
when button or info begin
say_title("Efsanevi Zindan Macerası Başlıyor")
say("Merhaba kahraman!")
say("Kasabamızın derinliklerinde yatan efsanevi zindanlara bir yolculuğa çıkman gerekiyor.")
say("Bu zindanlarda gizli materyalleri toplayacak ve zorlu boss canavarlarını alt edeceksin.")
local s = select("Bu macerayı kabul ediyorum", "Henüz hazır değilim")
if s == 1 then
set_state(materyal_toplama)
else
say("Hazır olduğunda geri dön!")
set_state("__COMPLETE__")
end
end
end
state materyal_toplama begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("INSERT INTO efsanevi_zindan_gorev (player_id, stage) VALUES('" .. pc.get_player_id() .. "', 'materyal_toplama')")
when letter begin
send_letter("Nadir Materyalleri Topla")
end
when button or info begin
say_title("Nadir Materyalleri Topla")
say("Toplaman gereken materyaller:")
say("- Büyülü Taş Madeni (0/10)")
say("- Kutsal Kristal Parçası (0/10)")
say("- Gizemli Antik Taş (0/10)")
end
when 3001.kill begin -- Madencilik Alanı Boss ID'si
if pc.count_item(6001) < 10 then
pc.give_item2(6001, 1) -- Büyülü Taş Madeni
local materyal1 = db:query("SELECT materyal1 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal1 = materyal1 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal1 + 1 >= 10 then
say("Büyülü Taş Madeni toplandı.")
end
end
end
when 3002.kill begin -- Kristal Ormanı Boss ID'si
if pc.count_item(6002) < 10 then
pc.give_item2(6002, 1) -- Kutsal Kristal Parçası
local materyal2 = db:query("SELECT materyal2 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal2 = materyal2 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal2 + 1 >= 10 then
say("Kutsal Kristal Parçası toplandı.")
end
end
end
when 3003.kill begin -- Antik Tapınak Boss ID'si
if pc.count_item(6003) < 10 then
pc.give_item2(6003, 1) -- Gizemli Antik Taş
local materyal3 = db:query("SELECT materyal3 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal3 = materyal3 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal3 + 1 >= 10 then
say("Gizemli Antik Taş toplandı.")
set_state(zindan_bosslari)
end
end
end
end
state zindan_bosslari begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'zindan_bosslari' WHERE player_id = '" .. pc.get_player_id() .. "'")
when letter begin
send_letter("Zindan Bosslarını Yen")
end
when button or info begin
say_title("Zindan Bosslarını Yen")
say("Yenmen gereken bosslar:")
say("- Basonun Bekçisi")
say("- Kral Canavar")
say("- Efsanevi Ejderha")
end
when 4001.kill begin -- Basonun Bekçisi
local baso_boss = db:query("SELECT baso_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if baso_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET baso_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Basonun Bekçisi yenildi.")
end
end
when 4002.kill begin -- Kral Canavar
local canavar_boss = db:query("SELECT canavar_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if canavar_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET canavar_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Kral Canavar yenildi.")
end
end
when 4003.kill begin -- Efsanevi Ejderha
local ejderha_boss = db:query("SELECT ejderha_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if ejderha_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET ejderha_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Efsanevi Ejderha yenildi.")
set_state(sonuc)
end
end
end
state sonuc begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'sonuc' WHERE player_id = '" .. pc.get_player_id() .. "'")
when letter begin
send_letter("Görev Tamamlandı")
end
when button or info begin
say_title("Görev Tamamlandı")
say("Tebrikler! Tüm bossları yendin ve nadir materyalleri topladın.")
say("Şimdi ödülünü alabilirsin.")
pc.give_item2(7001, 1) -- Efsanevi Ekipman (örneğin zırh)
pc.give_item2(7002, 1) -- Efsanevi Silah
pc.give_item2(7003, 1) -- Efsanevi Takı
pc.give_exp2(500000) -- Büyük Miktarda EXP
pc.change_skill_level(120, 10) -- Yeni Yetenek
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'tamamlandi' WHERE player_id = '" .. pc.get_player_id() .. "'")
set_state(tamamlandi)
end
end
state tamamlandi begin
when login or levelup with pc.get_level() >= 60 begin
say_title("Tebrikler!")
say("Artık efsanevi bir zindan keşifçisisin.")
say("Daha fazla macera için hazır ol! Yeni zindanlar seni bekliyor.")
set_state("__COMPLETE__")
end
end
end;
Quest Dosyasının Aktif Edilmesi
Yeni quest scriptimizi yazdıktan sonra, bu dosyanın quest listesinden çağrılabilmesi için quest liste dosyasına eklememiz gerekiyor.
Quest Listesi Dosyasına Ekleme
Quest scriptlerinin listesini yöneten quest_list dosyasını düzenleyin:
Kod:
vi quest_list
quest_list dosyasına şu satırı ekleyin:
efsanevi_zindan_yolculugu.quest;
Quest'i Aktifleştirme ve Sunucuyu Yeniden Başlatma
Sunucunuzda yapılan değişikliklerin aktif olabilmesi için birkaç komut çalıştırmamız gerekecek.
Quest Compiler ile Betiği Derlemek
Quest betiğini derlemek için aşağıdaki komutu çalıştırın:
cd /usr/home/game/share/locale/turkey/quest
./qc efsanevi_zindan_yolculugu.quest
Bu komut, quest betiğini derler ve hataları kontrol eder.
cd /usr/home/game/share/locale/turkey/quest
./qc efsanevi_zindan_yolculugu.quest
Bu komut, quest betiğini derler ve hataları kontrol eder.
Sunucuyu Yeniden Başlatma
Daha sonra sunucuyu yeniden başlatarak yeni quest'in aktif olmasını sağlarız:
cd /usr/home/game
./stop.sh && ./start.sh
Sunucuyu yeniden başlattıktan sonra, değişiklikler aktif olur ve oyuncular yeni quest'i oyun içinde görebilirler.
cd /usr/home/game
./stop.sh && ./start.sh
Sunucuyu yeniden başlattıktan sonra, değişiklikler aktif olur ve oyuncular yeni quest'i oyun içinde görebilirler.
5. Quest'in Oyun İçi Test Edilmesi
Yeni quest'in düzgün çalışıp çalışmadığına emin olmak için birkaç oyuncuyla test edin. Quest'in başlangıçtan sonuna kadar düzgün ilerleyip ilerlemediğini kontrol edin ve her aşamasının doğru çalışıp çalışmadığını test edin.
6. Hataların Giderilmesi ve Optimizasyon
Test sürecinde ortaya çıkan hataları gidermek ve kodu optimize etmek önemlidir. Ayrıca, oyunculardan gelen geri bildirimleri değerlendirin ve quest'i iyileştirin.
Sonuç
Bu rehberde, FreeBSD tabanlı bir Metin2 PVP sunucusu için 55-120 seviye aralığında, tamamen farm odaklı, uzun sürecek ve benzersiz bir quest sistemi tasarladık. Oyuncularınızı uzun süre meşgul edecek bu sistemle, sunucunuzdaki deneyimi önemli ölçüde geliştirmiş olacaksınız. Umarım bu rehber, Metin2 sunucunuzu daha eğlenceli ve sürükleyici kılmakta size ve foruma yardımcı olur! iyi oyunlar!
Veritabanı İşlemleri: Detaylı Anlatım
Veritabanı İşlemleri: Detaylı Anlatım
Bu SQL tablo oluşturma kodu, FreeBSD üzerinde çalışmakta olan bir MySQL veya MariaDB sunucusunda çalıştırılmalıdır. Adım adım nasıl yapacağınızı detaylı bir şekilde anlatan bir rehber:
Adım 1: SSH ile Sunucuya Bağlanma
Öncelikle, FreeBSD sunucunuza SSH ile bağlanmanız gerekecek. Bunun için aşağıdaki komutu kullanarak sunucunuza bağlanabilirsiniz:
ssh kullanıcı_adınız@sunucu_ip_adresi
ssh kullanıcı_adınız@sunucu_ip_adresi
Adım 2: MySQL veya MariaDB'yi Başlatma
MySQL veya MariaDB'nin çalıştığından emin olun. Aşağıdaki komutlarla hizmetin durumunu kontrol edebilir ve başlatabilirsiniz:
# MySQL veya MariaDB'nin durumunu kontrol etmek için
sudo service mysql status
# MySQL veya MariaDB'yi başlatmak için
sudo service mysql start
# MySQL veya MariaDB'nin durumunu kontrol etmek için
sudo service mysql status
# MySQL veya MariaDB'yi başlatmak için
sudo service mysql start
Adım 3: MySQL veya MariaDB'ye Giriş Yapma
MySQL veya MariaDB kabuğuna giriş yapmanız gerekecek. Aşağıdaki komutla MySQL kabuğuna girin (kendi kullanıcı adı ve şifrenizi kullanın):
mysql -u root -p
Bu komut size şifrenizi soracak. Şifrenizi girdikten sonra MySQL veya MariaDB konsoluna erişmiş olacaksınız.
mysql -u root -p
Bu komut size şifrenizi soracak. Şifrenizi girdikten sonra MySQL veya MariaDB konsoluna erişmiş olacaksınız.
Adım 4: Veri Tabanınızı Seçme veya Oluşturma
Öncelikle, kullanmak istediğiniz veri tabanını seçin. Eğer veri tabanı yoksa oluşturmanız gerekecek. Örneğin, metin2db adında bir veri tabanı kullanıyorsanız:
1. Veri Tabanını Kontrol Etme veya Oluşturma
CREATE DATABASE IF NOT EXISTS metin2db;
USE metin2db;
USE metin2db;
Adım 5: Tabloyu Oluşturma
Şimdi, yukarıdaki SQL komutlarını MySQL veya MariaDB kabuğuna yapıştırarak tabloyu oluşturun:
CREATE TABLE efsanevi_zindan_gorev (
player_id INT NOT NULL,
stage VARCHAR(50) NOT NULL,
materyal1 INT DEFAULT 0,
materyal2 INT DEFAULT 0,
materyal3 INT DEFAULT 0,
baso_boss BIT DEFAULT 0,
canavar_boss BIT DEFAULT 0,
ejderha_boss BIT DEFAULT 0,
PRIMARY KEY (player_id)
);
CREATE TABLE efsanevi_zindan_gorev (
player_id INT NOT NULL,
stage VARCHAR(50) NOT NULL,
materyal1 INT DEFAULT 0,
materyal2 INT DEFAULT 0,
materyal3 INT DEFAULT 0,
baso_boss BIT DEFAULT 0,
canavar_boss BIT DEFAULT 0,
ejderha_boss BIT DEFAULT 0,
PRIMARY KEY (player_id)
);
Adım 6: Veritabanı İşlemlerinin Test Edilmesi
Tablonun doğru bir şekilde oluşturulduğunu kontrol etmek için aşağıdaki sorguyu çalıştırabilirsiniz:
SHOW TABLES;
Bu komut, mevcut tabloları listeleyecektir. efsanevi_zindan_gorev tablosunun listede olduğundan emin olun.
SHOW TABLES;
Bu komut, mevcut tabloları listeleyecektir. efsanevi_zindan_gorev tablosunun listede olduğundan emin olun.
Adım 7: SQL Kabukdan Çıkış Yapma
Tablo oluşturma işlemini tamamladıktan sonra MySQL veya MariaDB kabuğundan çıkabilirsiniz:
EXIT;
EXIT;
Adım 8: Sunucunun Yeni Tabloyu Kullanacak Şekilde Konfigüre Edilmesi
Artık efsanevi_zindan_gorev tablosu veritabanınızda yer almakta. Bu tabloyu quest betiğiniz içinde kullanabilirsiniz.
Özet
- SSH ile sunucunuza bağlanın.
- MySQL veya MariaDB'nin çalıştığından emin olun. sudo service mysql status ve gerekirse sudo service mysql start komutlarıyla kontrol edin.
- MySQL veya MariaDB kabuğuna giriş yapın. mysql -u root -p komutunu kullanarak giriş yapın.
- Veri tabanını seçin veya oluşturun. CREATE DATABASE metin2db; ve USE metin2db; komutlarını çalıştırarak veri tabanını seçin veya oluşturun.
- Tablo oluşturma komutunu çalıştırın. CREATE TABLE efsanevi_zindan_gorev ... komutunu MySQL veya MariaDB kabuğuna yapıştırarak çalıştırın.
- Tablonun doğru oluşturulduğunu kontrol edin. SHOW TABLES; komutunu kullanarak tablonun oluşturulduğunu doğrulayın.
- MySQL veya MariaDB kabuğundan çıkın. EXIT; komutunu kullanarak çıkış yapın.
Bu adımları takip ederek, FreeBSD üzerinde çalışan Metin2 sunucunuz ile MySQL veya MariaDB veritabanında gerekli tabloyu oluşturmuş olacaksınız. Quest betiğinizin, veri tabanınızla doğru bir şekilde etkileşime geçmesini sağlayabilirsiniz.
Kalan Bölümün Detaylı Anlatımı Quest Dosyasını Oluşturma ve Düzenleme
FreeBSD yapısında Metin2 sunucunuza entegre etmek için ayrıntılı adımları izleyelim. Bu işlemler, hem dosya oluşturma hem de sunucunun yeniden başlatılması gibi konuları kapsar.
Adım 1: Quest Dosyasını Oluşturma ve Düzenleme
Adım 1: Quest Dosyasını Oluşturma ve Düzenleme
1. Sunucuya Bağlanma
Öncelikle SSH ile sunucunuza bağlanmanız gerekiyor. Aşağıdaki komutu kullanarak sunucunuza bağlanın:
ssh kullanıcı_adınız@sunucu_ip_adresi
ssh kullanıcı_adınız@sunucu_ip_adresi
2. Gerekli Klasöre Gitme
Quest dosyalarını düzenlemek için sunucu dosya sisteminde ilgili klasöre gitmelisiniz. Genellikle bu klasör /usr/home/game/share/locale/turkey/quest dizininde yer alır.
cd /usr/home/game/share/locale/turkey/quest
cd /usr/home/game/share/locale/turkey/quest
3. Yeni Quest Dosyasını Oluşturma
Yeni quest dosyanızı oluşturmak için efsanevi_zindan_yolculugu.quest adlı yeni bir dosya oluşturun. Bu işlem için vim veya nano gibi bir metin düzenleyici kullanabilirsiniz. Örneğin, vim kullanarak dosyayı oluşturmak için:
Yapıştırma işlemi bittikten sonra vim içinde INSERT modundan çıkmak için ESC tuşuna basın. Ardından :wq komutunu yazarak dosyayı kaydedip çıkın.
:wq
Kod:
vim efsanevi_zindan_yolculugu.quest
Vim açıldıktan sonra, INSERT moduna geçmek için i tuşuna basın ve script'inizi yapıştırın:
quest efsanevi_zindan_yolculugu begin
state start begin
when login with pc.get_level() >= 55 and pc.get_level() <= 120 begin
set_state(baslangic)
end
end
state baslangic begin
when letter begin
send_letter("Efsanevi Zindan Macerası")
end
when button or info begin
say_title("Efsanevi Zindan Macerası Başlıyor")
say("Merhaba kahraman!")
say("Kasabamızın derinliklerinde yatan efsanevi zindanlara bir yolculuğa çıkman gerekiyor.")
say("Bu zindanlarda gizli materyalleri toplayacak ve zorlu boss canavarlarını alt edeceksin.")
local s = select("Bu macerayı kabul ediyorum", "Henüz hazır değilim")
if s == 1 then
set_state(materyal_toplama)
else
say("Hazır olduğunda geri dön!")
set_state("__COMPLETE__")
end
end
end
state materyal_toplama begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("INSERT INTO efsanevi_zindan_gorev (player_id, stage) VALUES('" .. pc.get_player_id() .. "', 'materyal_toplama')")
when letter begin
send_letter("Nadir Materyalleri Topla")
end
when button or info begin
say_title("Nadir Materyalleri Topla")
say("Toplaman gereken materyaller:")
say("- Büyülü Taş Madeni (0/10)")
say("- Kutsal Kristal Parçası (0/10)")
say("- Gizemli Antik Taş (0/10)")
end
when 3001.kill begin -- Madencilik Alanı Boss ID'si
if pc.count_item(6001) < 10 then
pc.give_item2(6001, 1) -- Büyülü Taş Madeni
local materyal1 = db:query("SELECT materyal1 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal1 = materyal1 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal1 + 1 >= 10 then
say("Büyülü Taş Madeni toplandı.")
end
end
end
when 3002.kill begin -- Kristal Ormanı Boss ID'si
if pc.count_item(6002) < 10 then
pc.give_item2(6002, 1) -- Kutsal Kristal Parçası
local materyal2 = db:query("SELECT materyal2 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal2 = materyal2 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal2 + 1 >= 10 then
say("Kutsal Kristal Parçası toplandı.")
end
end
end
when 3003.kill begin -- Antik Tapınak Boss ID'si
if pc.count_item(6003) < 10 then
pc.give_item2(6003, 1) -- Gizemli Antik Taş
local materyal3 = db:query("SELECT materyal3 FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
db:query("UPDATE efsanevi_zindan_gorev SET materyal3 = materyal3 + 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
if materyal3 + 1 >= 10 then
say("Gizemli Antik Taş toplandı.")
set_state(zindan_bosslari)
end
end
end
end
state zindan_bosslari begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'zindan_bosslari' WHERE player_id = '" .. pc.get_player_id() .. "'")
when letter begin
send_letter("Zindan Bosslarını Yen")
end
when button or info begin
say_title("Zindan Bosslarını Yen")
say("Yenmen gereken bosslar:")
say("- Basonun Bekçisi")
say("- Kral Canavar")
say("- Efsanevi Ejderha")
end
when 4001.kill begin -- Basonun Bekçisi
local baso_boss = db:query("SELECT baso_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if baso_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET baso_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Basonun Bekçisi yenildi.")
end
end
when 4002.kill begin -- Kral Canavar
local canavar_boss = db:query("SELECT canavar_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if canavar_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET canavar_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Kral Canavar yenildi.")
end
end
when 4003.kill begin -- Efsanevi Ejderha
local ejderha_boss = db:query("SELECT ejderha_boss FROM efsanevi_zindan_gorev WHERE player_id = '" .. pc.get_player_id() .. "'")
if ejderha_boss == 0 then
db:query("UPDATE efsanevi_zindan_gorev SET ejderha_boss = 1 WHERE player_id = '" .. pc.get_player_id() .. "'")
say("Efsanevi Ejderha yenildi.")
set_state(sonuc)
end
end
end
state sonuc begin
local db = asyncsql.connect("localhost", "db_user", "db_pass", "metin2db")
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'sonuc' WHERE player_id = '" .. pc.get_player_id() .. "'")
when letter begin
send_letter("Görev Tamamlandı")
end
when button or info begin
say_title("Görev Tamamlandı")
say("Tebrikler! Tüm bossları yendin ve nadir materyalleri topladın.")
say("Şimdi ödülünü alabilirsin.")
pc.give_item2(7001, 1) -- Efsanevi Ekipman (örneğin zırh)
pc.give_item2(7002, 1) -- Efsanevi Silah
pc.give_item2(7003, 1) -- Efsanevi Takı
pc.give_exp2(500000) -- Büyük Miktarda EXP
pc.change_skill_level(120, 10) -- Yeni Yetenek
db:query("UPDATE efsanevi_zindan_gorev SET stage = 'tamamlandi' WHERE player_id = '" .. pc.get_player_id() .. "'")
set_state(tamamlandi)
end
end
state tamamlandi begin
when login or levelup with pc.get_level() >= 60 begin
say_title("Tebrikler!")
say("Artık efsanevi bir zindan keşifçisisin.")
say("Daha fazla macera için hazır ol! Yeni zindanlar seni bekliyor.")
set_state("__COMPLETE__")
end
end
end;
Yapıştırma işlemi bittikten sonra vim içinde INSERT modundan çıkmak için ESC tuşuna basın. Ardından :wq komutunu yazarak dosyayı kaydedip çıkın.
:wq
Adım 2: Quest Listesi Dosyasını Düzenleme
1. Quest Listesine Ekleme
Quest script'lerinin listesini yöneten quest_list dosyasını düzenleyin. Bu dosyayı açmak için yine vim veya nano kullanabilirsiniz. Örneğin:
vim quest_list
Açılan dosyaya aşağıdaki satırı ekleyin:
efsanevi_zindan_yolculugu.quest
Yapıştırma işlemi bittikten sonra vim içinde INSERT modundan çıkmak için ESC tuşuna basın. Ardından :wq komutunu yazarak dosyayı kaydedip çıkın.
:wq
vim quest_list
Açılan dosyaya aşağıdaki satırı ekleyin:
efsanevi_zindan_yolculugu.quest
Yapıştırma işlemi bittikten sonra vim içinde INSERT modundan çıkmak için ESC tuşuna basın. Ardından :wq komutunu yazarak dosyayı kaydedip çıkın.
:wq
Adım 3: Quest Dosyasını Derleme
1. Derleme Komutunu Çalıştırma
Quest dosyasını derlemek için qc komutunu kullanmanız gerekiyor. Bunun için aşağıdaki komutu çalıştırın:
./qc efsanevi_zindan_yolculugu.quest
Bu komut, quest betiğinizi derler ve hataları kontrol eder.
./qc efsanevi_zindan_yolculugu.quest
Bu komut, quest betiğinizi derler ve hataları kontrol eder.
Adım 4: Sunucuyu Yeniden Başlatma
1. Sunucu Hizmeti Yeniden Başlatma
Sunucunuzda yapılan değişikliklerin aktif olabilmesi için sunucuyu yeniden başlatmanız gerekiyor:
cd /usr/home/game
./stop.sh && ./start.sh
Yukarıdaki komutlar, sunucuyu durdurup yeniden başlatacaktır. Yeniden başlatma işlemi tamamlandığında, oyun içi değişiklikleriniz aktif olacaktır.
cd /usr/home/game
./stop.sh && ./start.sh
Yukarıdaki komutlar, sunucuyu durdurup yeniden başlatacaktır. Yeniden başlatma işlemi tamamlandığında, oyun içi değişiklikleriniz aktif olacaktır.
Adım 5: Quest'in Oyun İçi Test Edilmesi
Yeni quest'in düzgün çalışıp çalışmadığını oyun içinde test edin. Quest'in başlangıcından sonuna kadar doğru olup olmadığını kontrol edin ve her adımının doğru çalıştığından emin olun.
Özet
- SSH ile sunucunuza bağlanın.
- Yeni quest dosyasını oluşturun ve içeriği yapıştırın.
- Quest listesi dosyasını düzenleyin ve yeni quest'i ekleyin.
- Quest dosyasını derleyin.
- Sunucuyu yeniden başlatın.
- Oyun içi test yaparak quest'in düzgün çalıştığını doğrulayın.
Bu adımları takip ederek, Metin2 sunucunuza yeni bir quest ekleyebilir ve doğru bir şekilde çalışmasını sağlayabilirsiniz. Umarım bu rehber foruma faydalı olmuştur! iyi oyunlar!