Çözüldü İtem Karşılığı Bonus Veren NPC?

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ı.

Yusty

Üye
Üye
Mesaj
98
Çözümler
5
Beğeni
38
Puan
676
Merhaba arkadaşlar item karşılığı bonus özellik veren bir npc lazım bana mesela biz npcye 10 tane ruh taşı vereceğiz o da bize 1 hafta süreli +1000 hp verecek bir bilen var mı acaba?
 
Çözüm
Ben yazdığını yanlış anladım herhalde 1 kere aldı ya o hafta bir daha alamayacak tabiki. :)

Tamamdır questi bitirdim.
Bunları bi lua dosyasının içine yapıştır. Kodlama ANSI olsun.

Testini filan yaptım ben. Siz gene de kontrol ederseniz iyi olur. :)

Lua (Quest):
-- Bu quest MMO Tutkunlari forumundan Whistle tarafindan
-- Yusty icin yazilmistir.
quest bonus begin
    state start begin
        when 9008.chat."Bonus Ver " begin
            say_title(string.format("%s : ", mob_name(9008)))
            say("Bana 20 tane ruh taşı verirseniz sana ")
            say("bunlardan birisini verebilirim. ")
            say("")
            say_reward("Bilgi: ")
            say("Maksimum SP (+1000)[ENTER]Maksimum HP (+1000)[ENTER]Maksimum EXP (+%25)[ENTER]Maksimum...
Quest ile yapılabilir. Siz detayları konu altından belirtin ben size bir tane quest şablonu yazayım. Daha sonra siz gerekli şeyleri eklersiniz. :)
 
Mesela 9008 kodlu npc tıkladığımızda seçenekler sunacak;
  1. Maksimum SP(+1000)
  2. Maksimum HP(+1000)
  3. Maksimum EXP(+%25)
  4. Maksimum DEX(+50)
Bunları oyuncuya 20 adet Ruh Taşı karşılığında 1 hafta süre ile verilmesini istiyorum.
 
Yapabildiniz mi? İsterseniz sizin için questi yazabilirim. :)
 
Yarısı bitti bile.
Birde 1 hafta efsunu aldı diyelim bir tane daha almak için 1 hafta beklesin mi?
 
Beklemesine gerek yok bitince tekrar alabilsin. Ama o 1 hafta bekletmenin kodunu ayriyeten paylaşabilirseniz mantığını öğrenmek açısından güzel olur.:)
 
Mesela bi 20 tane ruh taşı verdi ve hp seçti diyelim. 1 hafta süre kontrolü olmadığını düşünürsek adam bi daha alır. Bug yaparlar yani. ;)
 
Beklemesine gerek yok bitince tekrar alabilsin. Ama o 1 hafta bekletmenin kodunu ayriyeten paylaşabilirseniz mantığını öğrenmek açısından güzel olur.:)

Süre ekleme bu şuanki zamanın değerini alır ve üstüne 7 gün ekler.
Lua (Quest):
pc.setqf("sure", get_time() + 60*60*24*7)

Buda şuanki zamanla sure ile gelen değeri kontrol eder. Eğer şuanki zaman sureyi geçmiş ise 7 günlük süre dolmuş demektir.
Lua (Quest):
if get_time() >= pc.getqf("sure") then

Bu arada getqf ve setqf veritabanının player.quest içinde saklı tutar.
Mesela quest adı bonus olsun. Quest veritabanında şöyle tutar.

dwPID => karakter id, szName => bonus, szState => sure, IValue => 1532412344
 
Son düzenleme:
Ben yazdığını yanlış anladım herhalde 1 kere aldı ya o hafta bir daha alamayacak tabiki. :)

Tamamdır questi bitirdim.
Bunları bi lua dosyasının içine yapıştır. Kodlama ANSI olsun.

Testini filan yaptım ben. Siz gene de kontrol ederseniz iyi olur. :)

Lua (Quest):
-- Bu quest MMO Tutkunlari forumundan Whistle tarafindan
-- Yusty icin yazilmistir.
quest bonus begin
    state start begin
        when 9008.chat."Bonus Ver " begin
            say_title(string.format("%s : ", mob_name(9008)))
            say("Bana 20 tane ruh taşı verirseniz sana ")
            say("bunlardan birisini verebilirim. ")
            say("")
            say_reward("Bilgi: ")
            say("Maksimum SP (+1000)[ENTER]Maksimum HP (+1000)[ENTER]Maksimum EXP (+%25)[ENTER]Maksimum DEX(+50) ")
            wait()
            if pc.count_item(50513) >= 20 then
                say_title(string.format("%s : ", mob_name(9008)))
                if get_time() > pc.getqf("sure") then       
                    say("Süper! 20 tane ruh taşını getirdin. ")
                    say("Emeğinin karşılığı olarak bunlardan bir tanesini ")
                    say("seçenebilirsin. ")
               
                    local efsunSec = select("Maks. SP +1000", "Maks. HP +1000", "EXP Bonusu +%25", "Maks. DEX +50")
                    local efsunData = bonus.efsunData()
               
                    if efsunSec == 5 then
                        return
                    end
               
                    say_title(string.format("%s : ", mob_name(9008)))
                    say("Seçtiğiniz bonusu kontrol ediniz. ")
                    say("")
                    say(string.format("Bonus: %s (%s)", efsunData[efsunSec][3], efsunData[efsunSec][2]))
                    say("")
                    say_reward("Devam etmek istiyor musun? ")
               
                    if select("Evet ", "Hayır ") == 2 then return end
               
                    affect.add_collect(efsunData[efsunSec][1], efsunData[efsunSec][2], 60*60*24*7)
                    pc.setqf("sure", get_time() + 60*60*24*7)
                    pc.remove_item(50513, 20)
                    say_title(string.format("%s : ", mob_name(9008)))
                    say("Seçtiğiniz bonus karakterinize başarıyla uygulandı. ")
                else
                    say("Zaten daha önce bir bonus almışsın. ")
                    say("süresi dolmadan yeni bir tane alamazsın! ")
                end
            else
                say_title(string.format("%s : ", mob_name(9008)))
                say("Yeterli ruh taşı yok. ")
                say("Bana 20 tane ruh taşı getirirsen ")
                say("bunlardan birisini alabilirsin. ")
                say("")
                say_reward("Bilgi: ")
                say("Maksimum SP (+1000)[ENTER]Maksimum HP (+1000)[ENTER]Maksimum EXP (+%25)[ENTER]Maksimum DEX(+50) ")
            end
        end
   
        function efsunData()
            return {
                -- efsun vnum, value
                -- buraya yeni efsun eklemek isterseniz secenek kısmına da eklemeniz gerekmektedir.
                [1] = {apply.MAX_SP, 1000, "Maks. SP "},
                [2] = {apply.MAX_HP, 1000, "Maks. HP "},
                [3] = {apply.MALL_EXPBONUS, 25, "EXP Bonusu "},
                [4] = {apply.DEX, 100, "Maks. DEX "},
            }
        end
    end
end
 
Son düzenleme:
Çözüm
Tamamdır questi bitirdim.
Bunları bi lua dosyasının içine yapıştır. Kodlama ANSI olsun.

Testini filan yaptım ben. Siz gene de kontrol ederseniz iyi olur. :)

Lua (Quest):
-- Bu quest MMO Tutkunlari forumundan Whistle tarafindan
-- Yusty icin yazilmistir.
quest bonus begin
    state start begin
        when 9008.chat."Bonus Ver " begin
            say_title(string.format("%s : ", mob_name(9008)))
            say("Bana 20 tane ruh taşı verirseniz sana ")
            say("bunlardan birisini verebilirim. ")
            say("")
            say_reward("Bilgi: ")
            say("Maksimum SP (+1000)[ENTER]Maksimum HP (+1000)[ENTER]Maksimum EXP (+%25)[ENTER]Maksimum DEX(+50) ")
            wait()
            if pc.count_item(50513) >= 20 then
                say_title(string.format("%s : ", mob_name(9008)))
                if get_time() > pc.getqf("sure") then      
                    say("Süper! 20 tane ruh taşını getirdin. ")
                    say("Emeğinin karşılığı olarak bunlardan bir tanesini ")
                    say("seçenebilirsin. ")
              
                    local efsunSec = select("Maks. SP +1000", "Maks. HP +1000", "EXP Bonusu +%25", "Maks. DEX +50")
                    local efsunData = bonus.efsunData()
              
                    if efsunSec == 5 then
                        return
                    end
              
                    say_title(string.format("%s : ", mob_name(9008)))
                    say("Seçtiğiniz bonusu kontrol ediniz. ")
                    say("")
                    say(string.format("Bonus: %s (%s)", efsunData[efsunSec][3], efsunData[efsunSec][2]))
                    say("")
                    say_reward("Devam etmek istiyor musun? ")
              
                    if select("Evet ", "Hayır ") == 2 then return end
              
                    affect.add_collect(efsunData[efsunSec][1], efsunData[efsunSec][2], 60*60*24*7)
                    pc.setqf("sure", get_time() + 60*60*24*7)
                    pc.remove_item(50513, 20)
                    say_title(string.format("%s : ", mob_name(9008)))
                    say("Seçtiğiniz bonus karakterinize başarıyla uygulandı. ")
                else
                    say("Zaten daha önce bir bonus almışsın. ")
                    say("süresi dolmadan yeni bir tane alamazsın! ")
                end
            else
                say_title(string.format("%s : ", mob_name(9008)))
                say("Yeterli ruh taşı yok. ")
                say("Bana 20 tane ruh taşı getirirsen ")
                say("bunlardan birisini alabilirsin. ")
                say("")
                say_reward("Bilgi: ")
                say("Maksimum SP (+1000)[ENTER]Maksimum HP (+1000)[ENTER]Maksimum EXP (+%25)[ENTER]Maksimum DEX(+50) ")
            end
        end
  
        function efsunData()
            return {
                -- efsun vnum, value
                -- buraya yeni efsun eklemek isterseniz secenek kısmına da eklemeniz gerekmektedir.
                [1] = {apply.MAX_SP, 1000, "Maks. SP "},
                [2] = {apply.MAX_HP, 1000, "Maks. HP "},
                [3] = {apply.MALL_EXPBONUS, 25, "EXP Bonusu "},
                [4] = {apply.DEX, 100, "Maks. DEX "},
            }
        end
    end
end
Çok teşekkür ederim. Denedim çalışıyor. Emektar birini bulmak güzel birşey.
 
Hmm bu konuda istedikleriniz gerçekleştiğine göre konuyu çözüldü işaretleyip kilitliyorum. :)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst