Tipologie server:PVM
*Resursă folosită:
Cod: Selectaţi tot
quest dungeon_beran begin
state __FUNC__ begin
function settings()
return
{
["dungeon_name"] = "dragon",
["map_index"] = 207,
["vnum_metin"] = 101,
["vnum_boss"] = 102,
["pos_boss"] = {207, 147}, -- local pos
["pos_entry"] = {8432, 10669}, -- global pos
-- ["pos_entry"] = {xBase + xLocal, yBase + yLocal}, -- pe viitor iti inlocuiesti tu sub forma asta (adica scazi 8111 - xBase din Setting.txt ca sa obtii xLocal)
["cooldown"] = 60,
["min_level"] = 75,
["max_level"] = 110,
["item_need"] = 30179,
["item_need_count"] = 1,
};
end
function d_set_warp_location() -- inapoi in map1
local e = pc.get_empire()
if e == 1 then
d.set_warp_location(1, 652+4096, 592+8960) -- rosii
elseif e == 2 then
d.set_warp_location(21, 637, 646+1024) -- galbeni
elseif e == 3 then
d.set_warp_location(41, 381 + 9216, 644+2048) -- albastrii
end
end
function get_stone_pos()
local positions = { -- coordonate locale
{188, 179},
{176, 179},
{176, 167},
{188, 166}
}
return positions
end
function spawn_metin()
local settings = dungeon_beran.settings()
local positions, total = dungeon_beran.get_stone_pos()
for i = 1, 4 do
d.spawn_mob(settings["vnum_metin"], positions[i][1], positions[i][2])
end
d.setf(string.format("%s_stone_destroyed",settings["dungeon_name"]), 0)
end
function CanEnter()
local settings = dungeon_beran.settings()
local minLevel = settings["min_level"]
local maxLevel = settings["max_level"]
local cooldown = settings["cooldown"]
local dungeonName = settings["dungeon_name"]
local itemVnum = settings["item_need"]
local itemCount = settings["item_need_count"]
if pc.get_level() < minLevel then
setdelay(0)
say_npc()
say_reward("Nu poti intra!")
say(string.format("Doar cei experimentati pot intra, ai nevoie de nivelul %d",minLevel))
return false
end
if pc.get_level() > maxLevel then
setdelay(0)
say_npc()
say_reward("Nu poti intra!")
say(string.format("Limita de nivel maxim depasita (Max.%d)",maxLevel))
return false
end
if pc.count_item(itemVnum) < itemCount then
setdelay(0)
say_npc()
say_reward("Nu poti intra!")
say(string.format("Ai nevoie de %s x%d pentru a intra",item_name(itemVnum),itemCount))
return false
end
local cooldown = pc.getf("dungeon", string.format("dungeon_cooldown_%s", dungeonName))
if pc.get_gm_level() < 5 then
if cooldown > 0 and cooldown > get_time() then
setdelay(0)
--say_npc("srthsr")
say("Trebuie sa astepti pentru a putea face asta")
say(string.format("Nu poti reintra atat de repede inapoi in dungeon,[ENTER]trebuie sa astepti %s.", get_time_remaining(cooldown - get_time())))
return false
end
end
return true
end
end
state start begin
when login with pc.in_dungeon(dungeon_beran.settings()["map_index"]) begin
local level = d.getf("level")
if level == 1 then
notice("Nivelul 1: Distruge toate pietrele metin!")
if pc.is_gm() and pc.get_gm_level() == 5 then
chat(string.format("GM: Real Metin pos: x: %d y: %d", d.getf("gm_info_pos_1"), d.getf("gm_info_pos_2")))
end
elseif level == 2 then
notice(string.format("Nivelul 2: Ucide-l pe %s",dungeon_beran.settings()["vnum_boss"]))
end
end
-- vnum_metin
when 101.kill with pc.in_dungeon(dungeon_beran.settings()["map_index"]) and d.getf("level") == 1 begin
local settings = dungeon_beran.settings()
local blodyprost = d.getf(string.format("%s_stone_destroyed",settings["dungeon_name"])) + 1
if blodyprost == 4 then
d.setf("level",3)
d.notice(string.format("%s va aparea in 2 secunde",mob_name(settings["vnum_boss"])))
server_timer('boss_appear',2,d.get_map_index())
end
d.setf(string.format("%s_stone_destroyed",settings["dungeon_name"]), blodyprost)
end
when boss_appear.server_timer begin
if d.select(get_server_timer_arg()) then
local settings = dungeon_beran.settings()
d.spawn_mob(settings["vnum_boss"], settings["pos_boss"][1], settings["pos_boss"][2])
end
end
-- vnum_boss
when 102.kill with pc.in_dungeon(dungeon_beran.settings()["map_index"]) begin
dungeon_beran.d_set_warp_location()
local settings = dungeon_beran.settings()
local isParty = party.is_party()
local leaderName = "[NoName]"
if isParty then
local pids = {party.get_member_pids()}
local leaderPid = party.get_leader_pid()
for i, pid in next, pids, nil do
q.begin_other_pc_block(pid)
if pid == leaderPid then
leaderName = pc.get_name()
end
pc.setf("dungeon", string.format("dungeon_cooldown_%s",settings["dungeon_name"]), get_time() + settings["cooldown"])
q.end_other_pc_block()
end
else
pc.setf("dungeon", string.format("dungeon_cooldown_%s",settings["dungeon_name"]), get_time() + settings["cooldown"])
end
d.clear_regen()
local runTime = get_time() - d.getf("dungeon_start_time")
if isParty then
notice_all(string.format("%s and his group have killed %s in %s", mob_name(settings["vnum_boss"]), leaderName, get_time_remaining(runTime)))
else
notice_all(string.format("%s has killed %s in %s", pc.get_name(), mob_name(settings["vnum_boss"]), get_time_remaining(runTime)))
end
end
when 30121.chat."Ucide-l pe beran" begin
say_title(mob_name(30121))
local settings = dungeon_beran.settings()
local myName = pc.get_name()
local mapIndex = settings["map_index"]
local posEntry = settings["pos_entry"]
local cooldown = settings["cooldown"]
local dungeonName = settings["dungeon_name"]
local itemVnum = settings["item_need"]
local itemCount = settings["item_need_count"]
local minLevel = settings["min_level"]
local maxLevel = settings["max_level"]
if minLevel > 1 then
say_reward(string.format("Limita de nivel minim: %d", minLevel))
end
if maxLevel > 1 then
say_reward(string.format("Limita de nivel maxim: %d", maxLevel))
end
if itemVnum > 0 then
say_reward(string.format("Pentru a intra ai nevoie de %s x%d", item_name(itemVnum),itemCount))
end
say("Vrei sa-l ucizi pe beran")
local s
if party.is_party() then
if party.is_leader() == false then
say_reward("[ENTER]Doar liderul grupului poate initia intrarea")
return
end
s = select("Intra singur", "Intra cu grupul", "Nici nu ma gandesc.")
if s == 3 then return end
if not pc.can_warp() then
setdelay(0)
say_npc()
say("Trebuie sa astepti 10 sec inainte de a te teleporta")
return
end
if not dungeon_beran.CanEnter() then return end
-- intra singur
if s == 1 then
pc.remove_item(itemVnum,itemCount)
d.new_jump(mapIndex, posEntry[1]*100, posEntry[2]*100)
d.setf("level",1)
d.setf("dungeon_start_time", get_time())
dungeon_beran.spawn_metin()
-- intra cu grupul
elseif s == 2 then
local pids = {party.get_member_pids()}
local notEnoughLevelMembers = {}
local notEnoughLevelMaxMembers = {}
local notEnoughKeysMembers = {}
local cooldownMembers = {}
local levelCheck = true
local levelMaxCheck = true
local keyCheck = true
local cooldownCheck = true
--say("test 1")
for i, pid in next, pids, nil do
q.begin_other_pc_block(pid)
--say(string.format("pc level %s minlevel %s myname %s pc name %s",tostring(pc.get_level()),tostring(minLevel),tostring(myName),tostring(pc.get_name())))
if pc.get_level() < minLevel and myName != pc.get_name() then
table.insert(notEnoughLevelMembers, pc.get_name())
notEnoughLevelMembers[pc.get_name()] = pc.get_level()
levelCheck = false
end
--say("test 2")
if pc.get_level() > maxLevel and myName != pc.get_name() then
table.insert(notEnoughLevelMaxMembers, pc.get_name())
notEnoughLevelMaxMembers[pc.get_name()] = pc.get_level()
levelMaxCheck = false
end
if pc.count_item(itemVnum) < itemCount then
table.insert(notEnoughKeysMembers, pc.get_name())
keyCheck = false
end
--say("test 2")
local cooldown = pc.getf("dungeon", string.format("dungeon_cooldown_%s", dungeonName))
if cooldown > 0 and cooldown > get_time() then
table.insert(cooldownMembers, {pc.get_name(), cooldown})
cooldownCheck = false
end
q.end_other_pc_block()
end
if not levelCheck then
setdelay(0)
say_npc()
say_reward(string.format("Urmatorii membrii ai grupului nu au lv. %d:",minLevel))
for k, v in notEnoughLevelMembers do
say("\t - "..v.." (lv."..notEnoughLevelMembers[v]..")")
end
return
end
--say("test 3")
if not levelMaxCheck then
setdelay(0)
say_npc()
say_reward(string.format("Urmatorii membrii ai grupului au nivelul prea mare. (Max.%d):",maxLevel))
for k, v in notEnoughLevelMaxMembers do
say("\t - "..v.." (lv."..notEnoughLevelMaxMembers[v]..")")
end
return
end
--say("test 4")
if not keyCheck then
setdelay(0)
say_npc()
say_reward(string.format("Urmatorii membrii ai grupului nu au %s x%d:",item_name(itemVnum),itemCount))
for k, v in notEnoughKeysMembers do
say("\t - "..v.."")
end
return
end
--say("test 5")
if not cooldownCheck then
setdelay(0)
say_npc()
say_reward("Urmatorii membrii trebuie sa astepte:")
for k, v in cooldownMembers do
say(string.format("\t - %s (%s)", v[1], get_time_remaining(v[2] - get_time())))
end
return
else
for i, pid in next, pids, nil do
q.begin_other_pc_block(pid)
pc.remove_item(itemVnum,itemCount)
pc.setf("dungeon", string.format("dungeon_cooldown_%s",dungeonName), get_time() + cooldown)
q.end_other_pc_block()
end
end
--say("test 6")
d.new_jump_party(mapIndex, posEntry[1], posEntry[2])
d.setf("level",1)
d.setf("dungeon_start_time", get_time())
dungeon_beran.spawn_metin()
end
return
end
s = select("Intra", "Nici nu ma gandesc.")
if s == 2 then return end
if s == 1 then
if not pc.can_warp() then
setdelay(0)
say_npc()
say("Trebuie sa astepti 10 sec inainte de a te teleporta")
return
end
if not dungeon_beran.CanEnter() then return end
pc.remove_item(itemVnum,itemCount)
d.new_jump(mapIndex, posEntry[1]*100, posEntry[2]*100)
d.setf("level",1)
d.setf("dungeon_start_time", get_time())
dungeon_beran.spawn_metin()
end
end
end
end*Syserr:
Cod: Selectaţi tot
SYSERR: Feb 21 16:29:10 :: RunState: LUA_ERROR: [string "dungeon_beran"]:24: attempt to call global `get_time_remaining' (a nil value)
SYSERR: Feb 21 16:29:10 :: WriteRunningStateToSyserr: LUA_ERROR: quest dungeon_beran.start click
SYSERR: Feb 21 16:29:15 :: Entergame: !GetMovablePosition (name CHULISUJI 153600x1203200 map 73 changed to 241300x1275400)
SYSERR: Feb 21 16:29:25 :: RunState: LUA_ERROR: locale/romania/quest/object/state/dungeon_beran:69: attempt to call global `get_time_remaining' (a nil value)
SYSERR: Feb 21 16:29:25 :: WriteRunningStateToSyserr: LUA_ERROR: quest dungeon_beran.start click
*Detalii suplimentare:




