Çözüldü Quest yazarken kullanılan IF operatörleri?

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

okcoder1134

MT Üye
MT Üye
Mesaj
265
Çözümler
16
Beğeni
154
Puan
734
Ticaret Puanı
0
Arkadaşlar Won/yang çevirme questi var elimde fakat questte
"kaç wonu yanga dönüştürmek istersin" diye soruyor.
buna cevap olarak.
2 tane if seçeneği var.
1 = "kullanıcı bir sayı girerse kod devam ediyor."
2 = "kullanıcı sayıdan farklı bir karakter girerse hata veriyor."

Fakat kullanıcı kutucuğa birşey yazmadan [ENTER]'a basınca veya [esc]'ye basınca kod buga giriyor. kapanmıyor veya hata vermiyor.

Örnek kod şu :
Lua (Quest):
                if type(won) != 'number' then
                    say_title("Won'u Yang'a Dönüştür -> Hata[ENTER]")
                        say("Değer yalnızca rakamlardan oluşabilir.[ENTER]")
                return end

Bunun benzeri olarak "kutucuk eğer boş ise" diye bir if operatörü var mı?
bulamadım da :)
 
Çözüm
Lua (Quest):
quest scp_economi begin
state start begin

when warehouse_keeper.chat."Döviz Bürosu V2" begin
    local tax = 3 -- Vergi
    local wond = 100 -- Won değeri, m cinsinden
    local maxCheque = 998 -- Oyununuzdaki max won
    local maxYang = 1999999988 -- Oyununuzdaki max yang
    local mywon=pc.get_cheque()
    local myyang=pc.get_gold()
    say_title("Merhabalar "..pc.get_name())
    say("")
    say("")
    say("Sahip olduğun Yang: "..numberToDots(myyang))
    say("Sahip olduğun Won: "..mywon)
    say("")
    say_reward("Ticarette %3 gelir vergisi bulunmaktadır :)")
    say("")
    local my_sec=select("Won Bozdur","Won Satın Al","Pencereyi Kapat")
    if my_sec==1 then
        if mywon==0 then
            syschat(" Üzgünüm, sana ait...
else komutunu denediniz mi? Bu gibi durumlarda else; if bloğunda belirtilen şartlar sağlanmadığında yapılacak olan işlemi belirler.
Verdiğiniz kodda da if'in devamında bitirici bir blok olmadığı için bug oluşması normal gibime geliyor.
Yani şartlar var, şartlar sağlandığında ne yapılacağı belli, ancak şartlar sağlanmadığında ne yapılacağı belli değil. Bunu da else ile belirleyebilirsiniz. Quest yazma konusunda fazla bilgiye sahip değilim ancak C# ve bir çok programlama dilinde mantık böyle işlediği için, sanırım burda da aynı şekilde işler :) Bir deneyin isterseniz..

Verdiğiniz kod üzerinden gösterdim, uygun yere aynı şekilde ekleyebilirsiniz.

Lua (Quest):
if type(won) != 'number' then
    say_title("Won'u Yang'a Dönüştür -> Hata[ENTER]")
        say("Değer yalnızca rakamlardan oluşabilir.[ENTER]")
else
    say_title("Hata")
        say("Bir hata oluştu.")
return end
 
Son düzenleme:
else komutunu denediniz mi? Bu gibi durumlarda else; if bloğunda belirtilen şartlar sağlanmadığında yapılacak olan işlemi belirler.
Verdiğiniz kodda da if'in devamında bitirici bir blok olmadığı için bug oluşması normal gibime geliyor.
Yani şartlar var, şartlar sağlandığında ne yapılacağı belli, ancak şartlar sağlanmadığında ne yapılacağı belli değil. Bunu da else ile belirleyebilirsiniz. Quest yazma konusunda fazla bilgiye sahip değilim ancak C# ve bir çok programlama dilinde mantık böyle işlediği için, sanırım burda da aynı şekilde işler :) Bir deneyin isterseniz..

Verdiğiniz kod üzerinden gösterdim, uygun yere aynı şekilde ekleyebilirsiniz.

Kod:
if type(won) != 'number' then
    say_title("Won'u Yang'a Dönüştür -> Hata[ENTER]")
        say("Değer yalnızca rakamlardan oluşabilir.[ENTER]")
else
    say_title("Hata")
        say("Bir hata oluştu.")
return end
Maalesef else işe yaramıyor. Aynı şekilde buga girip sürekli değer istiyor benden. Ancak oraya bir değer girene kadar gitmiyor.
Kodda hatalar ifler ile kontrol edilmiş.
şöyle : toplamda 4 hata var ama kademeli olarak kodlanmış.
yani diyalog tam olarak şöyle :

- kaç wonu yanga dönüştürmek istersin ?
+ 1 [ENTER] (Bu esnada 2 if dönüyor. Yazdığı şey sayı mı? Girdiği sayı 1 ile 19 arasında mı?)
(Bu arada yazılan değer "won" adında bir değişkene atanıyor.)
- 1 wonu 100m Yang'a dönüştürmek istiyor musun? (burda "won" adlı değişkeni kullanıyor.)
(Tam Bu arada da iki if daha dönüyor. Hesap envanteri kilitli mi? Güvenli PC açık mı? )

+ Dönüştür.
(Son olarak won adlı değişkeni 100.000.000 ile çarpıp bana veriyor ve -won koduyla değişkendeki sayı kadar karakterden won siliyor.)

Benim sorunum ise :
Yazı yazılan yerde. Oyuncu orda sayı yerine başka birşey yazınca hata veriyor. 19 dan fazla yazınca hata veriyor. Fakat boş bırakınca hata verdirtmem lazım. o yüzden "girilendeğer = BOŞ" ise şu hatayı ver. gibisinden bir operatöre ihtiyacım var.
 
Bu şekilde dener misiniz?
Lua (Quest):
...
.........
    say_title("Won'u Yang'a Dönüştür -> Hata[ENTER]")
    say("Değer yalnızca rakamlardan oluşabilir.[ENTER]")
    local sayi = tonumber(input())
if(sayi <= 0) then
    say_title("Hata")
        say("Girdiğiniz değer çok düşük.")
elseif(sayi > 0) then
Buradan sonrasına won verme / won silme kodlarını ekleyin
return end
 
maalesef o da olmadı
Bu şekilde dener misiniz?
Lua (Quest):
...
.........
    say_title("Won'u Yang'a Dönüştür -> Hata[ENTER]")
    say("Değer yalnızca rakamlardan oluşabilir.[ENTER]")
    local sayi = tonumber(input())
if(sayi <= 0) then
    say_title("Hata")
        say("Girdiğiniz değer çok düşük.")
elseif(sayi > 0) then
Buradan sonrasına won verme / won silme kodlarını ekleyin
return end
 
Lua (Quest):
quest scp_economi begin
state start begin

when warehouse_keeper.chat."Döviz Bürosu V2" begin
    local tax = 3 -- Vergi
    local wond = 100 -- Won değeri, m cinsinden
    local maxCheque = 998 -- Oyununuzdaki max won
    local maxYang = 1999999988 -- Oyununuzdaki max yang
    local mywon=pc.get_cheque()
    local myyang=pc.get_gold()
    say_title("Merhabalar "..pc.get_name())
    say("")
    say("")
    say("Sahip olduğun Yang: "..numberToDots(myyang))
    say("Sahip olduğun Won: "..mywon)
    say("")
    say_reward("Ticarette %3 gelir vergisi bulunmaktadır :)")
    say("")
    local my_sec=select("Won Bozdur","Won Satın Al","Pencereyi Kapat")
    if my_sec==1 then
        if mywon==0 then
            syschat(" Üzgünüm, sana ait won göremiyorum.")
            return
        end
        local algorithm=math.min(mywon,math.floor((maxYang-myyang)/(wond*1000000)))
        say_title("Won Bozdur")
        say("")
        say("")
        say("Sahip olduğun Yang: "..numberToDots(myyang))
        say("Sahip olduğun Won: "..mywon)
        say("")
        say_reward("Bozdurabileceğin max. değer: "..algorithm)
        if algorithm==0 then
            wait()
        else
            local inpt=tonumber(input())
            if inpt<=0 or inpt==nil or inpt>algorithm then return end
            local kazanc=inpt*wond*1000000
            -- say_title("Won Bozdur - Onaylama Paneli")
            -- say("")
            -- say("Sahip olduğun Yang: "..numberToDots(myyang))
            -- say("Sahip olduğun Won: "..mywon)
            -- say("")
            -- say_reward("Bozdurulacak Won: "..inpt)
            -- say_reward("Kazanılacak Yang: "..numberToDots(kazanc))
            -- say("")
            -- say_color("mor","Son durumdaki yang: "..numberToDots(myyang+kazanc))
            -- say_color("mor","Son durumdaki won: "..numberToDots(mywon-inpt))
            -- say("")
            -- say("Onaylıyor musunuz?")
            -- if select("Evet","Hayır")==2 then return end
            pc.change_gold(kazanc)
            pc.change_cheque(-inpt)
            syschat("Won başarıyla bozduruldu.")
        end
    elseif my_sec==2 then
        if myyang==0 then
            syschat(" Üzgünüm, sana ait yang göremiyorum.")
            return
        end
        local algorithm=math.min(math.floor(myyang/((wond+tax)*1000000)),maxCheque-mywon)
        say_title("Won Satın Al")
        say("")
        say("")
        say("Sahip olduğun Yang: "..numberToDots(myyang))
        say("Sahip olduğun Won: "..mywon)
        say("")
        say_reward("Satın alabileceğin max. değer: "..algorithm)
        if algorithm==0 then
            wait()
        else
            local inpt=tonumber(input())
            if inpt<=0 or inpt==nil or inpt>algorithm then return end
            local kayip=inpt*(wond+tax)*1000000
            -- say_title("Won Satın Al - Onaylama Paneli")
            -- say("")
            -- say("Sahip olduğun Yang: "..numberToDots(myyang))
            -- say("Sahip olduğun Won: "..mywon)
            -- say("")
            -- say_reward("Kaybedilecek Yang: "..numberToDots(kayip))
            -- say_reward("Kazanılacak Won: "..inpt)
            -- say("")
            -- say_color("mor","Son durumdaki yang: "..numberToDots(myyang-kayip))
            -- say_color("mor","Son durumdaki won: "..numberToDots(mywon+inpt))
            -- say("")
            -- say("Onaylıyor musunuz?")
            -- if select("Evet","Hayır")==2 then return end
            pc.change_gold(-kayip)
            pc.change_cheque(inpt)
            syschat("Won başarıyla satın alındı.")
        end
    end
end

end
end

bunu bi dene istersen
 
Çözüm
Lua (Quest):
quest scp_economi begin
state start begin

when warehouse_keeper.chat."Döviz Bürosu V2" begin
    local tax = 3 -- Vergi
    local wond = 100 -- Won değeri, m cinsinden
    local maxCheque = 998 -- Oyununuzdaki max won
    local maxYang = 1999999988 -- Oyununuzdaki max yang
    local mywon=pc.get_cheque()
    local myyang=pc.get_gold()
    say_title("Merhabalar "..pc.get_name())
    say("")
    say("")
    say("Sahip olduğun Yang: "..numberToDots(myyang))
    say("Sahip olduğun Won: "..mywon)
    say("")
    say_reward("Ticarette %3 gelir vergisi bulunmaktadır :)")
    say("")
    local my_sec=select("Won Bozdur","Won Satın Al","Pencereyi Kapat")
    if my_sec==1 then
        if mywon==0 then
            syschat(" Üzgünüm, sana ait won göremiyorum.")
            return
        end
        local algorithm=math.min(mywon,math.floor((maxYang-myyang)/(wond*1000000)))
        say_title("Won Bozdur")
        say("")
        say("")
        say("Sahip olduğun Yang: "..numberToDots(myyang))
        say("Sahip olduğun Won: "..mywon)
        say("")
        say_reward("Bozdurabileceğin max. değer: "..algorithm)
        if algorithm==0 then
            wait()
        else
            local inpt=tonumber(input())
            if inpt<=0 or inpt==nil or inpt>algorithm then return end
            local kazanc=inpt*wond*1000000
            -- say_title("Won Bozdur - Onaylama Paneli")
            -- say("")
            -- say("Sahip olduğun Yang: "..numberToDots(myyang))
            -- say("Sahip olduğun Won: "..mywon)
            -- say("")
            -- say_reward("Bozdurulacak Won: "..inpt)
            -- say_reward("Kazanılacak Yang: "..numberToDots(kazanc))
            -- say("")
            -- say_color("mor","Son durumdaki yang: "..numberToDots(myyang+kazanc))
            -- say_color("mor","Son durumdaki won: "..numberToDots(mywon-inpt))
            -- say("")
            -- say("Onaylıyor musunuz?")
            -- if select("Evet","Hayır")==2 then return end
            pc.change_gold(kazanc)
            pc.change_cheque(-inpt)
            syschat("Won başarıyla bozduruldu.")
        end
    elseif my_sec==2 then
        if myyang==0 then
            syschat(" Üzgünüm, sana ait yang göremiyorum.")
            return
        end
        local algorithm=math.min(math.floor(myyang/((wond+tax)*1000000)),maxCheque-mywon)
        say_title("Won Satın Al")
        say("")
        say("")
        say("Sahip olduğun Yang: "..numberToDots(myyang))
        say("Sahip olduğun Won: "..mywon)
        say("")
        say_reward("Satın alabileceğin max. değer: "..algorithm)
        if algorithm==0 then
            wait()
        else
            local inpt=tonumber(input())
            if inpt<=0 or inpt==nil or inpt>algorithm then return end
            local kayip=inpt*(wond+tax)*1000000
            -- say_title("Won Satın Al - Onaylama Paneli")
            -- say("")
            -- say("Sahip olduğun Yang: "..numberToDots(myyang))
            -- say("Sahip olduğun Won: "..mywon)
            -- say("")
            -- say_reward("Kaybedilecek Yang: "..numberToDots(kayip))
            -- say_reward("Kazanılacak Won: "..inpt)
            -- say("")
            -- say_color("mor","Son durumdaki yang: "..numberToDots(myyang-kayip))
            -- say_color("mor","Son durumdaki won: "..numberToDots(mywon+inpt))
            -- say("")
            -- say("Onaylıyor musunuz?")
            -- if select("Evet","Hayır")==2 then return end
            pc.change_gold(-kayip)
            pc.change_cheque(inpt)
            syschat("Won başarıyla satın alındı.")
        end
    end
end

end
end

bunu bi dene istersen


Teşekkür ederim konu kapanabilir. :)

Ama o operatör kafama takıldı. ilerleyen zamanlarda çözmem gerekiyor.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst