Paylaşım 55-120 Sunucular İçi̇n Eşi̇ Benzeri̇ Olmayan Zi̇ndan Boss Mob Quest

KutlukHan

Yeni Üye
Aileden Biri
0
Aktiflik
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

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.

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.

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


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


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.


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;


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)
);


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.


Adım 7: SQL Kabukdan Çıkış Yapma​

Tablo oluşturma işlemini tamamladıktan sonra MySQL veya MariaDB kabuğundan çıkabilirsiniz:

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​

  1. SSH ile sunucunuza bağlanın.
  2. MySQL veya MariaDB'nin çalıştığından emin olun. sudo service mysql status ve gerekirse sudo service mysql start komutlarıyla kontrol edin.​
  3. MySQL veya MariaDB kabuğuna giriş yapın. mysql -u root -p komutunu kullanarak giriş yapın.​
  4. 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.​
  5. 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.​
  6. Tablonun doğru oluşturulduğunu kontrol edin. SHOW TABLES; komutunu kullanarak tablonun oluşturulduğunu doğrulayın.​
  7. 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

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

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

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:

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

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.

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.

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​

  1. SSH ile sunucunuza bağlanın.​
  2. Yeni quest dosyasını oluşturun ve içeriği yapıştırın.​
  3. Quest listesi dosyasını düzenleyin ve yeni quest'i ekleyin.​
  4. Quest dosyasını derleyin.​
  5. Sunucuyu yeniden başlatın.​
  6. 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!
 
Geri