Çözüldü Yazdığım quest hata alıyorum

Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

enesaydemir

Üye
Üye
Mesaj
149
Çözümler
4
Beğeni
50
Puan
464
Ticaret Puanı
0
Merhabalar

quest yazmayı öğrenmeye çalışıyorum ve yeni bir quest yazmak istedim ancak çalışmadı.
Questte amacım bir savaşcıyı öldürdüğünde öldüren kişiye bir mesaj gittmesi

questim şöyle ;
quest:
state start begin
    when 9007.chat."Görev" begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim")
        say("Ancak bu tag sadece bu görev ile elde edilebilir.")
        local a = select("Tamam yapalım","Yapmayalım")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill with npc.is_pc() begin
        if pc.get_job() == 0 then
        say_title("başardın")
        end
    end
end
Sizlerden rica neyi nasıl yaptığınızı anlatmanız amacım burada öğrenmek
 
Çözüm
Bu komutu kullandım hocam != olmayacağını tahmin ettim ama tam tersi şekilde çalıştı. Questin son halini size cevap olarak yazdım.
Kod:
state start begin
    when 9007.chat."Görev " begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim ")
        say("Ancak bu tag sadece bu görev ile elde edilebilir. ")
        local a = select("Tamam yapalım","Yapmayalım ")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill with npc.is_pc() begin
        if npc.get_race() == 0 or npc.get_race()  == 4 then
            chat("başardın...
Selam, 1. hatan quest belirlememiş olman.
Örnek: quest xxx begin

ayrıca bunu yapınca sona 1 end daha ekleyeceksin

2. hatan türkçe karakterler girip son tırnağı birleşik tutman


hatalı yazım örneği : say("Bana her sınıf oyuncudan 20 tane öldürür müsün")

doğru yazım örneği: say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
aynı durum locale select için de geçerli.
aynı durum when deki görev başlığı ile de ilgili

yazım yaparken kontrol edilmesi gerekenler:

-girdiğin fonksiyonların server tarafında karşılığı olup olmadığını kontrol et.
-fonksiyonların doğru kullanımı.
 
Selam, 1. hatan quest belirlememiş olman.
Örnek: quest xxx begin

ayrıca bunu yapınca sona 1 end daha ekleyeceksin

2. hatan türkçe karakterler girip son tırnağı birleşik tutman


hatalı yazım örneği : say("Bana her sınıf oyuncudan 20 tane öldürür müsün")

doğru yazım örneği: say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
aynı durum locale select için de geçerli.
aynı durum when deki görev başlığı ile de ilgili

yazım yaparken kontrol edilmesi gerekenler:

-girdiğin fonksiyonların server tarafında karşılığı olup olmadığını kontrol et.
-fonksiyonların doğru kullanımı.
Hocam bunları elbette düzeltirim ancak quest istediğim gibi çalışmıyor sorun orada. Mesajı savaşcı öldürünce söylemesini istiyorum ancak quest sınıf fark etmeksizin mesaj veriyor.
 
Hocam bunları elbette düzeltirim ancak quest istediğim gibi çalışmıyor sorun orada. Mesajı savaşcı öldürünce söylemesini istiyorum ancak quest sınıf fark etmeksizin mesaj veriyor.
Evet, çünkü when kill with npc.is_pc() begin demişsin bu yüzden sınıfa bakmıyor bunun yerine sadece when kill kullan bir altına if ile karakter belirtip dene.
 
Kod:
state görev begin
    when kill begin
        if pc.get_job() == 0 then
        say_title("başardın ")
        end
    end
end
bu yeterli olur mu hocam
 
Kod:
state görev begin
    when kill begin
        if pc.get_job() == 0 then
        say_title("başardın ")
        end
    end
end
bu yeterli olur mu hocam
pc get job'u şöyle düzenleyip dener misin

1. seçenek en sağlamı: pc.get_job() != 0 or pc.get_job() != 4
2. seçenek sana kalmış: pc.get_job() == 0 or pc.get_job() == 4
 
pc get job'u şöyle düzenleyip dener misin

1. seçenek en sağlamı: pc.get_job() != 0 or pc.get_job() != 4
2. seçenek sana kalmış: pc.get_job() == 0 or pc.get_job() == 4
Hocam çalıştı gibi ama biraz tersten
Kod:
state start begin
    when 9007.chat."Görev " begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim ")
        say("Ancak bu tag sadece bu görev ile elde edilebilir. ")
        local a = select("Tamam yapalım","Yapmayalım ")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill begin
        if pc.get_job() == 0 or pc.get_job() == 4 then
        say_title("başardın ")
        end
    end
end
Şuan şavaşcı hariç diğer sınıfları öldürünce mesajı veriyor. Benim istediğim bunun tam tersi durum
pc.get_job() == 4 şu ifadeyi neden kullandık. 4 ne anlama geliyor
 
Hocam çalıştı gibi ama biraz tersten
Kod:
state start begin
    when 9007.chat."Görev " begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim ")
        say("Ancak bu tag sadece bu görev ile elde edilebilir. ")
        local a = select("Tamam yapalım","Yapmayalım ")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill begin
        if pc.get_job() == 0 or pc.get_job() == 4 then
        say_title("başardın ")
        end
    end
end
Şuan şavaşcı hariç diğer sınıfları öldürünce mesajı veriyor. Benim istediğim bunun tam tersi durum
pc.get_job() == 4 şu ifadeyi neden kullandık. 4 ne anlama geliyor
Özür dilerim, fonksiyon işlevini farklı hatırladım. != değil == yani
pc.get_job() == 0 or pc.get_job() == 4

Bunu kullan. Bu şekilde doğru çalışmalı, diğer mantıkta çalıştığına eminden altta sorunu cevapladığım seçeneğe göre düzenleme yap.

Diğer soruna gelecek olursak;

0 ve 4 savaşçıyı
1 ve 5 ninjayı
2 ve 6 surayı
3 ve 7 de şamanı ifade eder
 
Özür dilerim, fonksiyon işlevini farklı hatırladım. != değil == yani
pc.get_job() == 0 or pc.get_job() == 4

bunu kullan.

Diğer soruna gelecek olursak;

0 ve 4 savaşçıyı
1 ve 5 ninjayı
2 ve 6 surayı
3 ve 7 de şamanı ifade eder
Bu komutu kullandım hocam != olmayacağını tahmin ettim ama tam tersi şekilde çalıştı. Questin son halini size cevap olarak yazdım.
 
Bu komutu kullandım hocam != olmayacağını tahmin ettim ama tam tersi şekilde çalıştı. Questin son halini size cevap olarak yazdım.
Mantık tam tersi çalışıyor ise attığım karakter değerlerini kullanarak tam ters mantık yazarsan sorunun çözülebilir o halde. 3 karakteri yazmak gibi
 
Questlerde pek iyi sayılmam ancak sanırım karşı tarafın karakter türünü belirlemek için src tarafına ekleme yapmak gerekebilir.
Genel olarak NPC ve PC kontrolleri yapılabiliyor ama bunların türleri için bir geri dönüş kontrolü yok sanırım.

pc.get_job() ana oyuncu karakterini kontrol ediyor, en anlaşılır örnekle skill questlerinde olduğu gibi get_job() değerine göre, yani skill isteyen oyuncunun karakterine göre skiller veriliyor. Yine de emin değilim, verilen örnekler çalışıyorsa ne mutlu. Sura-ninja gibi karakterlerle savaşçı karakteri öldürdüğünde çalışıyorsa sorun yok demektir.

Ayrıca eğer filesinde 4 karakter varsa get_job() == 4 diye bir şart kullanamazsın. Çünkü karakter türleri 0 1 2 3 şeklindedir.(savaşçı,ninja,sura,şaman) Yani en fazla 3 değeriyle sorgulaman gerekir, fazlası boş değer döndürür. Ama eğer wolfman varsa 4'ü de kullanman gerekebilir.

4 5 6 7 değerleri ise cinsiyeti temsil eder, karakter türünü değil. Zaten onun sorgusu da pc.get_sex() diye geçiyor yanlış hatırlamıyorsam.
 
Questlerde pek iyi sayılmam ancak sanırım karşı tarafın karakter türünü belirlemek için src tarafına ekleme yapmak gerekebilir.
Genel olarak NPC ve PC kontrolleri yapılabiliyor ama bunların türleri için bir geri dönüş kontrolü yok sanırım.

pc.get_job() ana oyuncu karakterini kontrol ediyor, en anlaşılır örnekle skill questlerinde olduğu gibi get_job() değerine göre, yani skill isteyen oyuncunun karakterine göre skiller veriliyor. Yine de emin değilim, verilen örnekler çalışıyorsa ne mutlu. Sura-ninja gibi karakterlerle savaşçı karakteri öldürdüğünde çalışıyorsa sorun yok demektir.

Ayrıca eğer filesinde 4 karakter varsa get_job() == 4 diye bir şart kullanamazsın. Çünkü karakter türleri 0 1 2 3 şeklindedir.(savaşçı,ninja,sura,şaman) Yani en fazla 3 değeriyle sorgulaman gerekir, fazlası boş değer döndürür. Ama eğer wolfman varsa 4'ü de kullanman gerekebilir.
Aslında haklısın, src tarafına tam olarak ne eklediğimden emin değilim fakat başlangıç itemlerini core taraflı değil quest ile verdiğimde karakter seçim hakkında bir problem yaşamıştım. Karakterleri yukarda belirttiğim gibi çektirdiğimde sorun ortadan kalkıyor. Tam olarak fonksiyonu tekrar incelemem gerekebilir bu sebeple onu böyle yönlendirdim. Daha sağlıklı çalıştığını gözlemliyorum belki eklemeler yapmış olabilirim birkaç sene geçti, birkaç farklı say çevirdiğimizde değerin boş dönüp dönmediğini anlayabiliriz aslında hazır konu açılmışken kendim için de kontrol sağlayayım
 
Bu komutu kullandım hocam != olmayacağını tahmin ettim ama tam tersi şekilde çalıştı. Questin son halini size cevap olarak yazdım.
Kod:
state start begin
    when 9007.chat."Görev " begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim ")
        say("Ancak bu tag sadece bu görev ile elde edilebilir. ")
        local a = select("Tamam yapalım","Yapmayalım ")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill with npc.is_pc() begin
        if npc.get_race() == 0 or npc.get_race()  == 4 then
            chat("başardın ")
        end
    end
end
 
Çözüm
Kod:
state start begin
    when 9007.chat."Görev " begin
        say("Bana her sınıf oyuncudan 20 tane öldürür müsün ")
        say("Eğer kabul edersen sana özelliksiz tag vereceğim ")
        say("Ancak bu tag sadece bu görev ile elde edilebilir. ")
        local a = select("Tamam yapalım","Yapmayalım ")
        if a == 1 then
            say("Başlayalım[ENTER]")
            setstate(görev)
        else
            say("Peki sen bilirsin")
        end
    end
end
state görev begin
    when kill with npc.is_pc() begin
        if npc.get_race() == 0 or npc.get_race()  == 4 then
            chat("başardın ")
        end
    end
end
Umut hocam çok teşekkür ederim. Peki size zahmet açıklar mısınız race ile job arasında ki farkı
 
Umut hocam çok teşekkür ederim. Peki size zahmet açıklar mısınız race ile job arasında ki farkı
Kill kullanırken npc seçiliyor, pc.get_job() o questi çalıştıran oyuncunun sınıfını çekiyor. Sizin ihtiyacınız olan questi çalıştıran kişi değil, o kişinin öldürdüğü npc nin sınıfı. Bunuda npc.get_race() ile çekebilirsiniz. Buradaki npc_get_race() = 0 ve 4 Erkek/Kadın Savaşçı karakter.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst