Çözüldü quest fonksiyon hatası

  • Konuyu açan Konuyu açan texas1343
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 11
  • Gösterim Gösterim 159
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ı.

texas1343

MT Üye
MT Üye
Mesaj
585
Çözümler
26
Beğeni
385
Puan
799
Ticaret Puanı
0
iyi günler etkinlik quest yapamya çalıyorum fakat hatalar alıyorum örnek vermek gekirse mob ve player arasında 15 levlde fazla fark olursa item düşmmesi gibi ama ch1 sys atıyor bu fonksiyonları src kısmına doğru şekilde nasıl entegre edeilrim

ayışığı ques:
Genişlet Daralt Kopyala
quest Ay_isigi_quest begin

    state start begin

        -- GM kontrolü ile Ay Işığı etkinliğini başlatma veya durdurma
        when 20095.chat."Ayisigi" with pc.is_gm() begin
            if game.get_event_flag("Ayisigi_quest") == 0 then
                say_title("Ay Sandigi")
                say("Ay Sandigi Eventini Baslatmak istiyormusun?")
                local ysno = select("Evet", "Hayir")
                if ysno == 1 then
                    game.set_event_flag("Ayisigi_quest", 1)
                    notice_all("Ay isigi Define Sandigi Etkinligi Baslamistir!")
                end
            else
                say_title("Ay Sandigi")
                say("Ay Sandigi Eventini Kapatmak istiyormusun?")
                local yesno = select("Evet", "Hayir")
                if yesno == 1 then
                    game.set_event_flag("Ayisigi_quest", 0)
                    notice_all("Ay isigi Sandigi Etkinligi Bitmistir!")
                end
            end
        end

        -- Canavar kesildiğinde item düşürme işlemi
        when kill with game.get_event_flag("Ayisigi_quest") == 1 begin
            -- Canavar ile oyuncu arasındaki seviye farkı 15'ten fazla olmamalı
            if math.abs(pc.get_level() - npc.get_level()) <= 15 then
                -- %100 ihtimalle item düşürme
                pc.give_item2(50011, 1)
            end
        end

    end

end


ch1 syser:
Genişlet Daralt Kopyala
RunState: LUA_ERROR: [string "Ay_isigi_quest"]:1: attempt to call field `get_level' (a nil value)
WriteRunningStateToSyserr: LUA_ERROR: quest Ay_isigi_quest.start letter
 
Çözüm
questlua_pc:
Genişlet Daralt Kopyala
    ALUA(pc_get_level)
    {
        lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetLevel());
        return 1;
    }

{ "get_level",        pc_get_level        },

questlua_npc:
Genişlet Daralt Kopyala
    ALUA(npc_get_level0)
    {
        CQuestManager& q = CQuestManager::instance();
        LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

        lua_pushnumber(L, npc->GetLevel());
        return 1;
    }

    { "get_level",            npc_get_level0},

ekle sonra quest_functions dosyana

pc.get_level
npc.get_level

ekle öyle dene
when kill with not npc.is_pc() and game.get_event_flag("Ayisigi_quest") == 1 begin

if math.abs(pc.get_level() - npc.get_level0()) &lt;= 15 then
böyle dener misin?
 
Son düzenleme:
Kod:
Genişlet Daralt Kopyala
ayisigi_event.quest:33:syntax error : [string "startnot npc . is_pc ( ) and game . get_event_flag ( "Ayisigi_q..."]:1: `then' expected near `&'
Abort (core dumped)
 
farklı bir quest daha

Kod:
Genişlet Daralt Kopyala
quest Ay_isigi_quest begin

 state start begin

        when 20095.chat."Ayisigi" with pc.is_gm ( ) begin

                if game.get_event_flag ( "Ayisigi_quest" ) == 0 then
         say_title ( "Ay Sandigi" )
         say ( "Ay Sandigi Eventini Baslatmak istiyormusun?" )
         local ysno = select ( "Evet" , "Hayir" )
         if ysno == 1 then
         game.set_event_flag ( "Ayisigi_quest" , 1 )
         notice_all ( "Ay isigi Define Sandigi Etkinligi Baslamistir ! " )
         end
             else
         say_title ( "Ay Sandigi" )
         say ( "Ay Sandigi Eventini Kapatmak istiyormusun?" )
         local yesno = select ( "Evet" , "Hayir" )
         if yesno == 1 then
         game.set_event_flag ( "Ayisigi_quest" , 0 )
         notice_all ( "Ay isigi Sandigi Etkinligi Bitmistir ! " )
         end
             end

        end

        when kill with game.get_event_flag ( "Ayisigi_quest" ) == 1 begin

        -- Oyuncunun ve mob'un seviyesinin farkını kontrol et
        local player_level = pc.get_level()
        local mob_level = npc.get_level()
        local level_diff = math.abs(player_level - mob_level)

        -- Eğer seviye farkı 15'ten büyükse item düşmesin
        if level_diff <= 15 then
            if math.random ( 1 , 1 ) < 99 then
             local itmrnd = math.random ( 1 , 1 )
             if itmrnd == 1 then
           pc.give_item2 ( 50011 , 1 )
             end
            end
        end

        end

 end

end

buradaki sorun sanırım
local player_level = pc.get_level()
local mob_level = npc.get_level()

bu fonksiyonların olmamaısndan kaynaklı
 
1744034844726.webp

npc.get_level0 olarak kullanırsan düzelmesi lazım
 
dediğin gibi düzeltme yaptım

Kod:
Genişlet Daralt Kopyala
[string "Ay_isigi_quest"]:2: attempt to perform arithmetic on local `mob_level' (a nil value
serr: LUA_ERROR: quest Ay_isigi_quest.start letter

şimdi de bu hata
 
aynı questi martysama da kullandım işe yarıyor ama ne hikmetse bu mainlinede işe yaramıyor
 
Kod:
Genişlet Daralt Kopyala
quest Ay_isigi_quest begin

 state start begin

        when 20095.chat."Ayisigi" with pc.is_gm ( ) begin

                if game.get_event_flag ( "Ayisigi_quest" ) == 0 then
         say_title ( "Ay Sandigi" )
         say ( "Ay Sandigi Eventini Baslatmak istiyormusun?" )
         local ysno = select ( "Evet" , "Hayir" )
         if ysno == 1 then
         game.set_event_flag ( "Ayisigi_quest" , 1 )
         notice_all ( "Ay isigi Define Sandigi Etkinligi Baslamistir ! " )
         end
             else
         say_title ( "Ay Sandigi" )
         say ( "Ay Sandigi Eventini Kapatmak istiyormusun?" )
         local yesno = select ( "Evet" , "Hayir" )
         if yesno == 1 then
         game.set_event_flag ( "Ayisigi_quest" , 0 )
         notice_all ( "Ay isigi Sandigi Etkinligi Bitmistir ! " )
         end
             end

        end

        when kill with game.get_event_flag ( "Ayisigi_quest" ) == 1 begin

        local player_level = pc.get_level()
        local mob_level = npc.get_level()
        local level_difference = math.abs(player_level - mob_level)

        -- Eğer seviye farkı 15'ten fazla ise chat kısmında uyarı
        if level_difference > 15 then
            chat ("[Uyarı]: Mob ve oyuncu arasındaki seviye farkı çok fazla! Item düşmeyecek.")
        else
            -- Seviye farkı 15'ten küçükse item düşüşü
            local drop_chance = 50  -- Düşme olasılığı %50
            if math.random(0, 99) < drop_chance then
                local itmrnd = math.random(1, 1)
                if itmrnd == 1 then
                    pc.give_item2(50011, 1)
                end
            end
        end

        end

 end

end

questi Martysama da çalışır hale getirdim oyuncu ve mob arasında 1-15 fark varsa chat kısmında uyarı vericek ayrıca düşme ihtmalide ekledim TEK SORUN MANLİNEDE Çalışımıyor
 
questlua_npc ve questlua_pc dosyalarında get_level tanımlımı
 
questlua_pc:
Genişlet Daralt Kopyala
    ALUA(pc_get_level)
    {
        lua_pushnumber(L, CQuestManager::instance().GetCurrentCharacterPtr()->GetLevel());
        return 1;
    }

{ "get_level",        pc_get_level        },

questlua_npc:
Genişlet Daralt Kopyala
    ALUA(npc_get_level0)
    {
        CQuestManager& q = CQuestManager::instance();
        LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();

        lua_pushnumber(L, npc->GetLevel());
        return 1;
    }

    { "get_level",            npc_get_level0},

ekle sonra quest_functions dosyana

pc.get_level
npc.get_level

ekle öyle dene
 
Çözüm
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Geri
Üst