Hi guys,
I have a problem with the pvp arena, when I challenge a character ( both not GMs) the npc teleport them to the arena, but immediately after that, they both get teleported automatically to their city. and then the duel starts there, but with GM character, I don't get teleported outside the map, but the duel never starts (which I think is some kind of protection), so why do the regular characters get teleported? I have cleared the object folder to amke sure that there isn't any another quest affecting it, and the same happened. this is my arena manager quest.
Edit: the map index is 112, and it's added in the game99 config
Code: arena_manager.quest
- quest arena_manager begin
- state start begin
- when 20017.chat."test" begin
- say("test")
- wait()
- pc.warp(844800, 0)
- end
- when 20017.chat.gameforge.arena_manager._10_npcChat begin
- if game.get_event_flag("arena_close") > 0 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._30_say)
- return
- end
- if not npc.lock() then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._40_say)
- return
- end
- local useMinLevel = game.get_event_flag("arena_use_min_level")
- if useMinLevel == 0 then
- useMinLevel = 25 ;
- end
- if pc.get_level() < useMinLevel then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._50_say, useMinLevel))
- npc.unlock()
- return
- else
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._60_say)
- local sname = input()
- if sname == "" then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._70_say)
- npc.unlock()
- return
- else
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._80_say, pc.name, sname))
- wait("")
- local opp_vid = find_pc_by_name(sname)
- if opp_vid == 0 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._90_say, sname))
- npc.unlock()
- return
- elseif opp_vid == pc.get_vid() then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._100_say)
- npc.unlock()
- return
- end
- local old = pc. select(opp_vid , opp_vid )
- local opp_level = pc.get_level()
- pc. select(old , old )
- if opp_level < useMinLevel then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._110_say, useMinLevel))
- npc.unlock()
- return
- end
- if not npc.is_near_vid(opp_vid, 10) then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._120_say, sname))
- npc.unlock()
- return ;
- end
- local a = arena.is_in_arena(opp_vid)
- if a == 0 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._130_say, sname))
- npc.unlock()
- return ;
- end
- say_title(gameforge.arena_manager._140_sayTitle)
- say(string.format(gameforge.arena_manager._85_say, pc.name, sname))
- local agree = confirm(opp_vid, string.format(gameforge.arena_manager._87_say, sname, pc.name), 30)
- if agree!= CONFIRM_OK then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._150_say, sname))
- npc.unlock()
- return
- end
- s = arena.start_duel(sname, 3)
- if s == 0 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._160_say)
- elseif s == 2 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._170_say)
- elseif s == 3 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._180_say)
- end
- end
- end
- npc.unlock()
- end
- when 20017.chat.gameforge.arena_manager._190_npcChat begin
- local g = arena.get_duel_list()
- local arena_name = {}
- local arena_observer = {}
- table.foreachi(g,
- function(n, p)
- arena_name[n] = string.format(gameforge.arena_manager._195_say, p[1], p[2])
- arena_observer[n] = { p[3], p[4], p[5] }
- end
- )
- table.insert(arena_name, gameforge.arena_manager._200_tableInsert)
- table.insert(arena_observer, 0)
- local count = table.getn(g)
- if count == 0 then
- say_title(gameforge.arena_manager._20_sayTitle)
- say(gameforge.arena_manager._210_say)
- return ;
- else
- say_title(gameforge.arena_manager._20_sayTitle)
- say(string.format(gameforge.arena_manager._220_say, count))
- wait()
- end
- if table.getn(g)!= 0 then
- local s = select_table(arena_name)
- if table.getn(arena_observer) == s then
- return ;
- end
- if table.getn(arena_observer) >= s then
- arena.add_observer(arena_observer[s][1], arena_observer[s][2], arena_observer[s][3])
- end
- end
- end
- end
- end