Hikayeler

Reklam vermek için turkmmo@gmail.com

Gurup halinde zindan girildiğinde çıkan syserr?

odinogluthorr

Level 4
TM Üye
Üye
Katılım
27 Şub 2024
Konular
108
Mesajlar
324
Online süresi
4ay 9g
Reaksiyon Skoru
53
Altın Konu
0
Başarım Puanı
101
TM Yaşı
2 Yıl 1 Ay 22 Gün
MmoLira
7,913
DevLira
12

Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!

Gurup halinde zindan girildiğinde şu hataya alıyorum;




Kod:
SYSERR: Jul 28 01:31:54 :: SetDungeon: test1 is trying to reassigning dungeon (current 0x36ca8b00, new party 0x36ca8b00)
SYSERR: Jul 28 01:31:54 :: SetDungeon: test2 is trying to reassigning dungeon (current 0x36ca8b00, new party 0x36ca8b00)



zindan doğru çalışıyor her şey işliyor ama gurup halinde bu syser atıyor nedir bu nasıl çözülür?
 
maalsef sorunlar devam ediyor yine

Kod:
SYSERR: Jul 28 20:04:50 :: RunState: LUA_ERROR: [string "dragonlair"]:27: attempt to call field `select_by_pid' (a nil value)
SYSERR: Jul 28 20:04:50 :: WriteRunningStateToSyserr: LUA_ERROR: quest dragonlair.start leave
SYSERR: Jul 28 20:04:54 :: Entergame: !GetMovablePosition (name Demir 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:04:54 :: SetDungeon: Demir is trying to reassigning dungeon (current 0x3ebf4600, new party 0x3ebf4600)
SYSERR: Jul 28 20:04:54 :: Entergame: !GetMovablePosition (name test 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:04:54 :: SetDungeon: test is trying to reassigning dungeon (current 0x3ebf4600, new party 0x3ebf4600)
 
maalsef sorunlar devam ediyor yine

Kod:
SYSERR: Jul 28 20:04:50 :: RunState: LUA_ERROR: [string "dragonlair"]:27: attempt to call field `select_by_pid' (a nil value)
SYSERR: Jul 28 20:04:50 :: WriteRunningStateToSyserr: LUA_ERROR: quest dragonlair.start leave
SYSERR: Jul 28 20:04:54 :: Entergame: !GetMovablePosition (name Demir 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:04:54 :: SetDungeon: Demir is trying to reassigning dungeon (current 0x3ebf4600, new party 0x3ebf4600)
SYSERR: Jul 28 20:04:54 :: Entergame: !GetMovablePosition (name test 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:04:54 :: SetDungeon: test is trying to reassigning dungeon (current 0x3ebf4600, new party 0x3ebf4600)

Gönderdiğiniz son hata logu her şeyi açıkladı. Sorun, size verdiğim bir önceki kodun, sizin sunucu dosyalarınızda bulunmayan pc.select_by_pid fonksiyonunu kullanmasıymış. Bu yüzden quest script'i çöküyor ve eski hata geri geliyor.

Aşağıda, bu uyumluluk sorununu da gideren, tamamen standart fonksiyonlarla yazılmış nihai çözüm bulunmaktadır. Lütfen quest dosyanızın içeriğini bununla tamamen değiştirin ve reload q komutunu kullanın.


KULLANILACAK KODUN TAMAMI:


Kod:
quest dragonlair begin
    state start begin
        ------ fonksiyonlar ----------------
       
        function GrupKontrol()
            local user_fail_level = {}
            local user_fail_cd = {}
            local user_fail_item = {}
            local pids_data = {party.get_member_pids()}
            local pids = type(pids_data[1]) == "table" and pids_data[1] or pids_data
            local need_level = 75
            for i = 1, table.getn(pids), 1 do
                q.begin_other_pc_block(pids[i])
                if pc.get_level() < need_level then
                    table.insert(user_fail_level, table.getn(user_fail_level) +1, pc.get_name())
                end
                if pc.getf("dragonlair","dungeon_time") > get_time() then
                    table.insert(user_fail_cd, table.getn(user_fail_cd) +1, pc.get_name())
                end
                if pc.count_item(30179) < 3 then
                    table.insert(user_fail_item, table.getn(user_fail_item) +1, pc.get_name())
                end
                q.end_other_pc_block()
            end
            if table.getn(user_fail_level) == 0 and table.getn(user_fail_cd) == 0 and table.getn(user_fail_item) == 0 then
                return true
            end
            say_npc()
            say("Grubun bazı üyeleri ")
            say("içeriye girmeye uygun değil.")
            if table.getn(user_fail_level) >= 1 then
                say(need_level.." seviyeye ulaşmamış:")
                for x = 1, table.getn(user_fail_level), 1 do
                    say(color(1,1,0), "    "..user_fail_level[x])
                end
            end

            if table.getn(user_fail_cd) >= 1 then
                say("Giriş süresi dolmayanlar :")
                for x = 1, table.getn(user_fail_cd), 1 do
                    say(color(1,1,0), "    "..user_fail_cd[x])
                end
            end

            if table.getn(user_fail_item) >= 1 then
                say("Giriş bileti olmayanlar :")
                for x = 1, table.getn(user_fail_item), 1 do
                    say(color(1,1,0), "    "..user_fail_item[x])
                end
            end

            return false
        end
       
        function GrupSok()
            local pids_data = {party.get_member_pids()}
            local pids = type(pids_data[1]) == "table" and pids_data[1] or pids_data
            for i = 1, table.getn(pids), 1 do
                q.begin_other_pc_block(pids[i])
                pc.remove_item(30179,3)
                q.end_other_pc_block()
            end
        end
       
        function Temizle()
            local d_index = d.get_map_index()
            clear_server_timer("dragonlair_timeup",d_index)
            clear_server_timer("dragonlair_25left",d_index)
            clear_server_timer("dragonlair_20left",d_index)
            clear_server_timer("dragonlair_15left",d_index)
            clear_server_timer("dragonlair_10left",d_index)
            clear_server_timer("dragonlair_5left",d_index)
            clear_server_timer("dragonlair_out",d_index)
            d.setf("party_leader_pid",0)
            d.setf("dungeon_endtime",0)
            d.setf("dragon_dead",0)
            d.setf("dragonlair_regen",0)
            d.setf("sure_doldu",0)
            d.clear_regen()
            d.kill_all()
        end
       
        ------------------------------------
       
        when 30121.chat."Ejderhayı öldürmek istiyorum!" with pc.get_map_index() == 73 begin
            if game.get_event_flag("ejder_open") == 0 then
                if pc.is_gm() then
                    say_title("Event Flag : ejder_open ")
                end
                say("Dungeon henüz aktif değil!")
                return
            end
            local isparty = false
            if party.is_party() then
                isparty = true
            end
            if isparty then
                if not party.is_leader() then
                    say("Bu işlemi sadece grup lideri yapabilir.")
                    return
                end
                say_npc()
                say("")
                say("Ejderha odasına girmek istediğinize ")
                say("emin misiniz ?")
                say("")
                local gir = select(locale.yes,locale.no)
                if gir == 1 then
                    if dragonlair.GrupKontrol() == false then   
                        return
                    else
                        dragonlair.GrupSok()
                        timer("dragonlair_grupgiris",2)
                    end
                else
                    return
                end
            else
                if pc.get_level() < 75 then
                    say_npc()
                    say("")
                    say("İçeriye sadece 75 seviye ve üstü oyuncular girebilir.")
                    return
                end
                if pc.getf("dragonlair","dungeon_time") > get_time() then
                    say_npc()
                    say("")
                    say("Henüz odaya giremezsin.")
                    say("Bekleme süren dolunca tekrar gel.")
                    say("")
                    say_reward("Kalan Süre : "..LIB_duration(pc.getf("dragonlair","dungeon_time")-get_time()))
                    return
                end
                if pc.count_item(30179) < 3 then
                    say_npc()
                    say("")
                    say("Gerekli eşya 3x: "..item_name(30179)..":")
                    say_item_vnum(30179)
                    return
                end
                say_npc()
                say("")
                say("Ejderha odasına girmek istediğine ")
                say("emin misin ?")
                say("")
                local gir = select(locale.yes,locale.no)
                if gir == 1 then
                    if pc.count_item(30179) < 3 then
                        return
                    end
                    pc.remove_item(30179,3)
                    timer("dragonlair_sologiris",2)
                else
                    return
                end
            end
        end -- when
       
        when dragonlair_sologiris.timer begin
            d.join_coords(208,8436,10669)
            dragonlair.Temizle()
            server_timer("dragonlair_timeup", 30*60, d.get_map_index())
            server_timer("dragonlair_25left", 5*60, d.get_map_index())
            d.setf("party_leader_pid",pc.get_player_id())
            d.setf("dungeon_endtime",get_global_time()+30*60*1)
        end
       
        -- ############### BAŞLANGIÇ: NİHAİ UYUMLU KOD ###############
        when dragonlair_grupgiris.timer begin
            if d.join(208) == false then
                return
            end
       
            local map_idx = d.get_map_index()
            if map_idx == 0 then
                return
            end
       
            d.select(map_idx)
           
            dragonlair.Temizle()
            server_timer("dragonlair_timeup", 30*60, map_idx)
            server_timer("dragonlair_25left", 5*60, map_idx)
            d.setf("party_leader_pid", party.get_leader_pid())
            party.setf("dragonlair_mapindex", map_idx)
            d.setf("dungeon_endtime", get_global_time()+30*60*1)
       
            local pids = party.get_member_pids()
            if type(pids) ~= "table" then
                pids = {pids}
            end

            -- UYUMLULUK DÜZELTMESİ: pc.select_by_pid yerine q.begin_other_pc_block kullanıldı.
            for i, pid in ipairs(pids) do
                if pid ~= pc.get_player_id() then
                    q.begin_other_pc_block(pid)
                    pc.warp(8436, 10669, map_idx)
                    q.end_other_pc_block()
                end
            end
        end
        -- ############### BİTİŞ: NİHAİ UYUMLU KOD ###############
       
        when login begin
            local map = pc.get_map_index()
            if map >= (208 * 10000) and map < (208 * 10000 + 9000) then
                pc.set_warp_location(73 , 1801, 12204)
                if pc.get_level() < 35 then
                    chat("Odaya girmek için seviyen yeterli değil.")
                    d.exit()
                    return
                end
                if party.is_party() then
                    if d.getf("party_leader_pid") != party.get_leader_pid() then
                        chat("Sizin grubunuz içeride değil.")
                        d.exit()
                        return
                    end
                    if party.is_leader() then
                        if d.getf("dragonlair_regen") == 0 then
                            d.regen_file("data/dungeon/skia_deliboss.txt")
                            d.notice("30 dakika içerisinde mavi ejderhayı mağlup et!")
                            d.setf("dragonlair_regen",1)
                        end
                    end
                else  
                    if d.getf("party_leader_pid") != pc.get_player_id() then
                        chat("Bu senin girdiğin zindan değil.")
                        d.exit()
                        return
                    end
                    if d.getf("dragonlair_regen") == 0 then
                        d.regen_file("data/dungeon/skia_deliboss.txt")
                        d.notice("30 dakika içerisinde mavi ejderhayı mağlup et!")
                        d.setf("dragonlair_regen",1)
                    end
                end  
                pc.setqf("dungeon_ch",pc.get_channel_id())
                pc.setqf("dungeonorgindex",208)
                syschat("Ejderin 3 kere can yenilemesini engellemek için 4 tane intikam metni bırakmanız gerekiyor.")
            end
        end
       
        when logout begin
            local map = pc.get_map_index()
            if map >= (208 * 10000) and map < (208 * 10000 + 9000) then
                pc.setf("dragonlair","dungeon_time",get_global_time() + 60*60*1)
            end
        end
       
        when kill begin
            local map = pc.get_map_index()
            if map >= (208 * 10000) and map < (208 * 10000 + 9000) then
                if npc.get_race() == 8031 or npc.get_race() == 8032 or  npc.get_race() == 8033 or npc.get_race() == 8034 then
                    local t = number(1,4)
                    d.regen_file("data/dungeon/skia_boss"..t..".txt")
                elseif npc.get_race() == 2493 then
                    notice_all(pc.get_name().." grubu, Mavi Ejderha'yı öldürdü!")
                    if game.get_event_flag("boss_iade") == 1 then
                        game.drop_item_with_ownership(30179,1)
                    end
                    d.setf("dragon_dead",1)
                    clear_server_timer("dragonlair_timeup",d.get_map_index())
                    server_timer("dragonlair_out",1*60, d.get_map_index())
                    d.kill_all()
                end
            end
        end

        when dragonlair_out.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.exit_all()
            end
        end
       
        when dragonlair_timeup.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("Zaman doldu.")
                d.setf("sure_doldu",1)
                d.exit_all()
            end
        end
       
        when dragonlair_25left.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("25 dakika kaldı!")
                server_timer("dragonlair_20left", 5*60, d.get_map_index())
            end
        end
       
        when dragonlair_20left.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("20 dakika kaldı!")
                server_timer("dragonlair_15left", 5*60, d.get_map_index())
            end
        end
       
        when dragonlair_15left.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("15 dakika kaldı!")
                server_timer("dragonlair_10left", 5*60, d.get_map_index())
            end
        end
       
        when dragonlair_10left.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("10 dakika kaldı!")
                server_timer("dragonlair_5left", 5*60, d.get_map_index())
            end
        end
       
        when dragonlair_5left.server_timer begin
            if d.select(get_server_timer_arg()) then
                d.notice("5 dakika kaldı!")
            end
        end
    end -- state
end
 
foksiyon hataları gitti ama bu hatalar devam ediyor;


Kod:
SYSERR: Jul 28 20:39:30 :: Entergame: !GetMovablePosition (name test1 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:39:30 :: SetDungeon: test1 is trying to reassigning dungeon (current 0x2a02b700, new party 0x2a02b700)
SYSERR: Jul 28 20:39:30 :: Entergame: !GetMovablePosition (name test2 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:39:30 :: SetDungeon: test2 is trying to reassigning dungeon (current 0x2a02b700, new party 0x2a02b700)
 
foksiyon hataları gitti ama bu hatalar devam ediyor;


Kod:
SYSERR: Jul 28 20:39:30 :: Entergame: !GetMovablePosition (name test1 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:39:30 :: SetDungeon: test1 is trying to reassigning dungeon (current 0x2a02b700, new party 0x2a02b700)
SYSERR: Jul 28 20:39:30 :: Entergame: !GetMovablePosition (name test2 845300x1074200 map 2080000 changed to 845300x1074200)
SYSERR: Jul 28 20:39:30 :: SetDungeon: test2 is trying to reassigning dungeon (current 0x2a02b700, new party 0x2a02b700)
Merhaba,

Fonksiyon hatasının gitmesine sevindim. Şimdi karşılaştığın reassigning dungeon hatası, zindana giriş mantığındaki bir çakışmadan kaynaklanıyor. Script, hem otomatik olarak (d.join) hem de manuel olarak (pc.warp) partiyi içeri sokmaya çalıştığı için sistem hata veriyor.

Bunu düzeltmek için lütfen dragonlair.quest dosyanızdaki SADECE aşağıdaki bloğu bulun ve içeriğini bu yeni kodla tamamen değiştirin:


Lua:
-- ############### BAŞLANGIÇ: BU BLOĞU BUL VE DEĞİŞTİR ###############
when dragonlair_grupgiris.timer begin
    -- d.join() fonksiyonu idealde tüm partiyi zindana sokar ve haritayı oluşturur.
    -- Bu fonksiyon zaten parti üyelerini de ışınladığı için, manuel warp döngüsü
    -- hem gereksizdir hem de 'reassigning dungeon' hatasına sebep olur.
    -- Bu yüzden manuel warp döngüsü bu nihai koddan kaldırılmıştır.

    if d.join(208) == true then
        local map_idx = d.get_map_index()
        if map_idx > 0 then
            d.select(map_idx)
          
            dragonlair.Temizle()
            server_timer("dragonlair_timeup", 30*60, map_idx)
            server_timer("dragonlair_25left", 5*60, map_idx)
            d.setf("party_leader_pid", party.get_leader_pid())
            party.setf("dragonlair_mapindex", map_idx)
            d.setf("dungeon_endtime", get_global_time()+30*60*1)
        end
    end
end
-- ############### BİTİŞ: BU BLOĞU BUL VE DEĞİŞTİR ###############

Bu değişikliği yapıp reload q komutunu kullandıktan sonra sorununuzun tamamen çözülmesi gerekiyor. d.join() fonksiyonu tüm işi tek başına halledecektir.
 

Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)

Geri
Üst