Paylaşım Quest Eklemek ve Kaldırmak (Detaylı Anlatım)

  • Konuyu başlatan Üye silindi 505
  • Başlangıç tarihi
Ü

Üye silindi 505

vsro
Videolu anlatım;


Quest Nedir?
Oyunun çalışmasında yardımcı olan lua kodları diyebiliriz. Çekirdek tarafından kendisine sunulan fonksiyonları kullanmakla yükümlüdür. Görevler, npc komutları, dungeondaki timerlar, spawnlanacak şeyleri kontrol eder.
Quest dosyaları .lua veya .quest uzantısını kullanırlar.
Aslında baktığımızda baya bir işe yaradığını anlayabiliriz.

Quest Nasıl Eklenir?
Quest dosyamız oto_event.lua olsun diyelim.
Quest içeriğimiz;

Kod:
-----------------------------------------------
quest event begin
    state start begin
        when letter begin
            send_letter("Etkinlik Takvimi ")
        end
        when info or button begin
            say_title("Etkinlik Takvimi :")
            say("")
            say("Pazartesi: Ay Işığı 21.00 - 23.00 ")
            say("Salı: Futbol Topu 21.00 - 23.00 ")
            say("Çarşamba: Pet Sandık 21.00 - 23.00 ")
            say("Perşembe: Kostüm Sandık 21.00 - 23.00 ")
            say("Cuma: Bulmaca Kutusu 21.00 - 23.00 ")
            say_reward("Özel Eventler;")
            say("Cumartesi : VS-Turnuvası 21.00 KRAL Tag ")
            say("Pazar : OX-Event - 21.00(10RuhTaşı,1Pençe,1Pul) ")
            say("")
            wait()
            send_letter("Etkinlik Takvimi ")
        end
        when login begin
            local saat = tonumber(os.date("%H"))
            local gun = tostring(os.date("%A"))
            if gun == "Monday" then
                if saat == 21 then
                    if game.get_event_flag("ay_ac") == 0 then
                        game.set_event_flag("ay_ac",1)
                        game.set_event_flag("ay_kapa",0)
                        game.set_event_flag("ayisigi",1)
                        notice_all("Ayışığı eventi 2 saat süreyle başlamıştır.")
                    end
                elseif saat == 23 then
                    if game.get_event_flag("ay_kapa") == 0 then
                        game.set_event_flag("ay_ac",0)
                        game.set_event_flag("ay_kapa",1)
                        game.set_event_flag("ayisigi",0)
                        notice_all("Ayışığı eventi sona ermiştir.")
                    end
                end
            elseif gun == "Tuesday" then
                if saat == 21 then
                    if game.get_event_flag("top_ac") == 0 then
                        game.set_event_flag("top_ac",1)
                        game.set_event_flag("top_kapa",0)
                        game.set_event_flag("futboltopu",1)
                        notice_all("Futbol Topu eventi 2 saat süreyle başlamıştır.")
                    end
                elseif saat == 23 then
                    if game.get_event_flag("top_kapa") == 0 then
                        game.set_event_flag("top_ac",0)
                        game.set_event_flag("top_kapa",1)
                        game.set_event_flag("futboltopu",0)
                        notice_all("Futbol Topu eventi bitmiştir.")
                    end
                end
            elseif gun == "Wednesday" then
                if saat == 21 then
                    if game.get_event_flag("pet_ac") == 0 then
                        game.set_event_flag("pet_ac",1)
                        game.set_event_flag("pet_kapa",0)
                        game.set_event_flag("pet_event",1)
                        notice_all("Pet Sandığı eventi 2 saat süreyle başlamıştır.")
                    end
                elseif saat == 23 then
                    if game.get_event_flag("pet_kapa") == 0 then
                        game.set_event_flag("pet_ac",0)
                        game.set_event_flag("pet_kapa",1)
                        game.set_event_flag("pet_event",0)
                        notice_all("Pet Sandığı eventi bitmiştir.")
                    end
                end
            elseif gun == "Thursday" then
                if saat == 21 then
                    if game.get_event_flag("kostum_ac") == 0 then
                        game.set_event_flag("kostum_ac",1)
                        game.set_event_flag("kostum_kapa",0)
                        game.set_event_flag("dressup",1)
                        notice_all("Kostüm Eventi 2 saat süreyle başlamıştır.")
                    end
                elseif saat == 23 then
                    if game.get_event_flag("kostum_kapa") == 0 then
                        game.set_event_flag("kostum_ac",0)
                        game.set_event_flag("kostum_kapa",1)
                        game.set_event_flag("dressup",0)
                        notice_all("Kostüm Eventi bitmiştir.")
                    end
                end
            elseif gun == "Friday" then
                if saat == 21 then
                    if game.get_event_flag("bilgi_ac") == 0 then
                        game.set_event_flag("bilgi_ac",1)
                        game.set_event_flag("bilgi_kapa",0)
                        game.set_event_flag("kids_day_quiz",1)
                        notice_all("Bulmaca Kutusu Eventi 2 saat süreyle başlamıştır.")
                    end
                elseif saat == 23 then
                    if game.get_event_flag("bilgi_kapa") == 0 then
                        game.set_event_flag("bilgi_ac",0)
                        game.set_event_flag("bilgi_kapa",1)
                        game.set_event_flag("kids_day_quiz",0)
                        notice_all("Bulmaca Kutusu Eventi bitmiştir.")
                    end
                end
            end
        end
    end
end


Oyuna quest atmak için

Kod:
usr/game/share/locale/turkey/quest

dizine girmeniz gerekiyor. Sizlerde farklı olabilir. Genel itibari ile Türkiye'deki fileslerde bu dizindir.

Eğer ileride questleri sıfırdan hepsini derlemek isterseniz listelere eklemeniz gerekiyor. Aynı dizinde quest_list
diye bir dosya olur. O dosyayı açıp en altına oto_event.lua adını yazıyoruz.
Not: Fileslere göre quest_list dosyasının adı farklı olabilir!

Questimizi attıktan sonra Putty (ssh) ile sunucumuza bağlanıp şu işlemleri yapıyoruz.

Kod:
cd /usr/game/share/locale/turkey/quest

Kod:
./qc oto_event.lua

bu işlemler bittikten sonra isterseniz sunucuya reboot atın isterseniz oyuna gm karakteriyle girip;

Kod:
/reload q

şu komutu yazın. Quest başarıyla yüklenmiştir.

Quest Nasıl Silinir?
Questimiz gene oto_event.lua olsun bunun üzerinden anlatim
1. Yöntem
Bu yöntem daha kolay olduğu için uzun sürecek bir işlemdir.

Kod:
usr/game/share/locale/turkey/quest

dizinine girip oto_event.lua dosyasını siliyoruz. Sonra quest_listten "oto_event.lua" yazısını siliyoruz.
ondan sonra Puttu (ssh) ile sunucuya bağlanıp.
Uyarı: Bu işlemi yapmadan önce oyunu kapatınız ve yedek alınız. Sunucu kendini direk kapatacaktır!
Uyarımı okuduysanız devam edelim ssh ekranına şu komutları sırayla yazıyoruz;

Kod:
cd usr/game/share/locale/turkey/quest


Kod:
sh make.sh

bu işlemi yaptığınız zaman object klasörü tamamen boşaltılıp quest_list içindeki questleri okutacaktır. Sık sık kullanmayınız!

2. Yöntem
Not:
Bu yöntemi uygulayabilmek için questleri okumayı bilmeniz gerekli!
Benim sevdiğim yöntemdir en azndan 1. yöntemdeki gibi uğraşmak zorunda kalmıyoruz.

Notumuda okumuşsunuzdur umarım. Ben size ufak bir anlatım sunacağım.
Eğer örnek quest kodlarımızı incelerseniz içinde when ile başlayan komutları görebilirsiniz. Bu her açılan when komutu questte belirlenmiş isimle objectlere veri ekler.

Quest Okuma?
Burada detaylı bir anlatım yapmayacağım. Sonuçta burada size quest yazmayı anlatmıyorum. Sadece silmek için gerekli bilgileri vereceğim.

1. Komut;

PHP:
  1. quest event begin
bu komut quest dosyalarımızı başlatan komuttur. Kodda gördüğünüz gibi event adı verilmiştir. Bu questin adıdır. Questi derlediğiniz zaman objectlere event.start adıyla dosyalar ekler.

2. Komut;
PHP:
  1. state start begin
Quest içeriğimizi belirten korttur. Gördüğünüz gibi start dosyaları oluşturur. Her questlerde bu 2 komutu yazmalısınız.

Diğer komutlar quest içerik parçaları;
Kod (Text):
  1. when letter begin
  2. send_letter("Etkinlik Takvimi ")
  3. end
bu komut ile oyuna görev eklettirebilirsiniz. Görevin ismi Etkinlik Takvimi olarak çıkacaktır. Bizim burada gözümüze çarpan "when letter begin" deyimidir. Çünkü questleri silerken bu başlatıcılardan faydalanacağız.
Bu komut
Kod (Text):
  1. object/notarget/letter/
dizine içine questin adıyla event.start dosyası oluşturur. Bu dosyayı silmemiz gerekiyor.

PHP:
  1. when info or button begin
  2. say_title("Etkinlik Takvimi :")
  3. say("")
  4. say("Pazartesi: Ay Işığı 21.00 - 23.00 ")
Bu komutta tıklandığı zaman gerçekleşecek işlemdir. Burada gene "when info or button begin" bu deyime bakmamız gerekiyor. Bu satır 2 klasöre event.start adında dosyalar ekleyecektir.
Kod (Text):
  1. object/notarget/info/
  2. object/notarget/button/
bu dizine girip onları event.start dosyasını silmeniz gerekli.

ve bu questimizdeki son parça olan;
Kod (Text):
  1. when login begin
başlatıcısıdır. Bu oyuna girdiğiniz anda gerçekleşecek işlemleri belirler. Bizim örnek questimizde girdiği zaman aktif bir event varsa oyuncuya duyuru geçecektir.
Ne işe yaradığını anlattıktan sonra silmeyide anlatim.
Bu komut ayı şekilde event.start adında dosyalar ekleyecektir.
Kod (Text):
  1. object/notarget/login/
bu dizine girip onları event.start dosyasını silmeniz gerekli.

Bu quest içeriğinde olmayan birşeyide anlatim. Npc ve itemler içinde komut vardır bunlar başka bir komut ile farklı klasörlere eklenir. Örneğin;
Işınlanma yüzüğü
Kod (Text):
  1. when 40002.use begin
için kullanılan kod. Bu kod ile 40002 vnum'a ait iteme sağ tıklandığında gerçekleşecek işlemleri içinde barındıran başlatıcıdır.
Bu kod object klasörüne 40002 ismiyle klasör oluşturup onun içine use adında bir klasör oluşturarak quest adıyla .start dosyası ekleyecektir.
Dizin şu şekilde olacaktır;
Kod (Text):
  1. object/40002/use/
Eğer silmek isterseniz 40002 içinde başka bir klasör yoksa direk 40002 klasörünü silin eğer başka dosyalar görüyorsanız sadece use klasörünü silebilirsiniz.

Npclerde de benzerdir fakat onda click, chat isimli uzantılar olabilir. Target eklenebilir.
Dediğim gibi burada quest yazmayı öğretmek yerine when komutlarını okuyup questleri silmeyi anlattım. Umarım yardımcı olabilmişimdir.

Genelde millet olarak uzun yazı okumaya üşeniriz lakin baştan sona okuyan arkadaşlara sonsuz teşekkür ederim.

Yazması uzun sürdü arkadaşlar. Eğer başka bir sitede paylaşacak olursanız burayı kaynakça olarak göstermeyi unutmayın.
Anlamadığınız birşey olursa konu altından sorabilirsiniz.
 

Benzer konular

Üst