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

Whistle

Ruhsuz Filozof
Kurucu
Kurumsal Üye
Geliştirici
Yardımsever Üye
Mesaj
11.494
Çözümler
546
Beğeni
12.054
Puan
5.864
Merhaba arkadaşlar,
Çoğu web sitesinde quest eklemeyi zaten anlatıyorlar lakin ben kaldırmayıda anlatacağım. Videolu anlatımı da yaptım. Şuan up olurken yazılı bir anlatim da yapayım diyorum. :)

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;
Lua (Quest):
------ MMO Tutkunları | www.mmotutkunlari.com ------
-----------------------------------------------
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;
Lua (Quest):
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;
Lua (Quest):
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ı;
Lua (Quest):
        when letter begin
            send_letter("Etkinlik Takvimi ")
        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:
object/notarget/letter/
dizine içine questin adıyla event.start dosyası oluşturur. Bu dosyayı silmemiz gerekiyor.

Lua (Quest):
when info or button begin
   say_title("Etkinlik Takvimi :")
   say("")
   say("Pazartesi: Ay Işığı 21.00 - 23.00 ")
end
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:
object/notarget/info/
object/notarget/button/
bu dizine girip onları event.start dosyasını silmeniz gerekli.

ve bu questimizdeki son parça olan;
Lua (Quest):
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:
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üğü
Lua (Quest):
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:
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.

Bazı questler player.quest tablosuna verileri kaydetmektedir. Sildiğiniz quest eğer kayıt yapıyorsa tablodan temizlemeyi unutmayınız.

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.
 
Son düzenleme:
Teşşekürler :D 2.yöntem karışık geliyor bana,bide 1. yöntem putty dizini cd/usr/game/share/locale/turkey/quest olucak
 
Teşşekürler :D 2.yöntem karışık geliyor bana,bide 1. yöntem putty dizini cd/usr/game/share/locale/turkey/quest olucak
O filezilla dizini :) cdyi o yüzden eklemedim. :) 2. yöntem daha iyi bence. Sonuçta 2k 5 k oyuncun olduğu bir oyunda quest editlerken sürekli sh make.sh çekemezsin.
 
O filezilla dizini :) cdyi o yüzden eklemedim. :) 2. yöntem daha iyi bence. Sonuçta 2k 5 k oyuncun olduğu bir oyunda quest editlerken sürekli sh make.sh çekemezsin.
make.sh dosyası usr/game/share/locale/turkey/quest dizininde olduğu için o dizine geçmek zorundasın.Zaten sunucuyu bakıma alman lazım 2.yöntemdede sorun çıkarır :D
 
make.sh dosyası usr/game/share/locale/turkey/quest dizininde olduğu için o dizine geçmek zorundasın.Zaten sunucuyu bakıma alman lazım 2.yöntemdede sorun çıkarır :D
Ha gördüm tamam :D usr/game yapmışım. Ben genelde o dizine koyuyorum fazladan yazmamak için :D 2. yöntemde sıkıntı yok ben hep kullanıyorum. :) Dediğim gibi oyuncu sayısı fazla olduğu zaman reboot atamazsın. Fazla reboot atığın zaman oyuncular sıkıntı çıkarır.
 
Ha gördüm tamam :D usr/game yapmışım. Ben genelde o dizine koyuyorum fazladan yazmamak için :D 2. yöntemde sıkıntı yok ben hep kullanıyorum. :) Dediğim gibi oyuncu sayısı fazla olduğu zaman reboot atamazsın. Fazla reboot atığın zaman oyuncular sıkıntı çıkarır.
Reboot atmaya gerek yokki :D reload q komutu var
 
quest_list dosyasına hepsini ekledikten sonra toplu olarak derleyebilirsiniz.
Videolu olarak;
 
Geri
Üst