Quest
-----------------------------------
-- Age Of Wushu -
-- Author:
-- Contact:
-----------------------------------
quest Templul_Dragonului begin
state start begin
function setting()
return {
["mapIndex"] = 354, -- Index del Mapa
["base_coord"] = {7924,9134}, -- Coordenadas Base
["outdoor_coord"] = {65,5536,1436}, -- Coordenadas de la Entrada. Ej: {indexDelMapa, coordx, coordy}
["second_floor_coord"] = {8046,9246}, -- Coordenadas de la sala de la Araña
["minLevel"] = 75, -- Nivel minimo
["dEnterItemVnum"] = 30179, -- Item necesario para entrar
["dEnterItemCount"] = 3, -- Cantidad de item necesario para entrar en la dungeon
["dsEnterItemCount"] = 1, -- Cantidad de item necesario para entrar en la sala Araña
["enterNpc"] = {30121, 183, 173}, -- NPC de entrada a la segunda planta (araña)
["firstTaskBoss"] = {1192, 166, 212}, -- Jefe de la primera planta + coordenadas de spawn
["secondTaskBoss"] = {2493, 166, 157}, -- Jefe (beran) de la 2ª planta + coordenadas de spawn
["thirdTaskBoss"] = {2092, 372, 361}, -- Jefe (araña) de la 3ª planta + coordenadas de spawn
["thirdTaskStones"] = {2095, 355, 333, 385, 333, 385, 359, 345, 356, 365, 373}, -- Metines (huevos de araña) + coordenadas de spawn. Ej: {idHuevo, x1, y1, x2, y2, x3, y3, etc}
}
end
function is_in()
local mapIndex = dr_sd3_dungeon.setting().mapIndex
return pc.get_map_index() >= mapIndex*10e3 and pc.get_map_index() < (mapIndex+1)*10e3
end
function can_enter(checksecondfase)
local setting = dr_sd3_dungeon.setting()
if pc.get_level() < setting.minLevel then
return -2
elseif pc.count_item(setting.dEnterItemVnum) < (checksecondfase and setting.dsEnterItemCount or setting.dEnterItemCount) then
return -1
end
return true
end
function can_party_members_enter(checksecondfase)
local setting = dr_sd3_dungeon.setting()
local itemCount = (checksecondfase and setting.dsEnterItemCount or setting.dEnterItemCount)
if not party.is_party() then
local canEnter = dr_sd3_dungeon.can_enter(checksecondfase)
if canEnter == -2 then
say(string.format(locale.dr_sd3_dungeon._16say, setting.minLevel))
return false
elseif canEnter == -1 then
say(string.format(locale.dr_sd3_dungeon._15say, itemCount, item_name(setting.dEnterItemVnum)))
return false
end
return true
end
local pids = {party.get_member_pids()}
local cantEnter = {{},{}}
for _, pid in ipairs(pids) do
q.begin_other_pc_block(pid)
local canEnter = dr_sd3_dungeon.can_enter(checksecondfase)
if canEnter == -2 then table.insert(cantEnter[1], pc.get_name())
elseif canEnter == -1 then table.insert(cantEnter[2], pc.get_name()) end
q.end_other_pc_block()
end
if table.getn(cantEnter[1]) > 0 then
say(string.format(locale.dr_sd3_dungeon._05say, setting.minLevel))
for i = 1, table.getn(cantEnter[1]) do
say(color(1,1,0), " "..cantEnter[1][i])
end
return false
elseif table.getn(cantEnter[2]) > 0 then
say(string.format(locale.dr_sd3_dungeon._06say, itemCount, item_name(setting.dEnterItemVnum)))
for i = 1, table.getn(cantEnter[2]) do
say(color(1,1,0), " "..cantEnter[2][i])
end
return false
end
return true
end
function clear_level()
local base = dr_sd3_dungeon.setting().base_coord
d.clear_regen()
d.purge_area(base[1], base[2], (base[1]+511)*100, (base[2]+511)*100)
end
function go_to_next_floor()
dr_sd3_dungeon.clear_level()
d.notice(locale.dr_sd3_dungeon._09say)
server_timer("dr_sd3_dungeon_next_floor", 60, d.get_map_index())
end
when login with dr_sd3_dungeon.is_in() begin
local setting = dr_sd3_dungeon.setting()
if dr_sd3_dungeon.can_enter() == -1 then
d.notice(string.format(locale.dr_sd3_dungeon._01say, pc.get_name(), setting.dEnterItemCount, item_name(setting.dEnterItemVnum)))
d.exit()
return
elseif dr_sd3_dungeon.can_enter() == -2 then
d.exit()
return
end
pc.remove_item(setting.dEnterItemVnum, setting.dEnterItemCount)
pc.set_warp_location(setting.outdoor_coord[1], setting.outdoor_coord[2], setting.outdoor_coord[3])
if d.getf("level") == 0 then
d.setf("level", d.getf("level")+1)
d.regen_file("data/dungeon/dr_sd3_dungeon/dr_sd3_1.txt")
d.spawn_mob(setting.firstTaskBoss[1], setting.firstTaskBoss[2], setting.firstTaskBoss[3])
d.notice(string.format(locale.dr_sd3_dungeon._07say, mob_name(setting.firstTaskBoss[1])))
end
end
when 30121.chat.locale.dr_sd3_dungeon._02say begin
local setting = dr_sd3_dungeon.setting()
say_title(mob_name(npc.get_race()))
if dr_sd3_dungeon.is_in() then
if party.is_party() and not party.is_leader() then
say(locale.dr_sd3_dungeon._04say)
return
end
say(locale.dr_sd3_dungeon._11say)
local decision = select(locale.dr_sd3_dungeon._12say, locale.dr_sd3_dungeon._13say, locale.dr_sd3_dungeon._14say)
if decision == 3 then
server_timer("dr_sd3_dungeon_exit", 10, d.get_map_index())
npc.purge()
elseif decision == 1 then
if not dr_sd3_dungeon.can_party_members_enter(true) then return end
local pids = {party.get_member_pids()}
local continue = true
for _, pid in ipairs(pids) do
q.begin_other_pc_block(pid)
if pc.count_item(setting.dEnterItemVnum) >= setting.dsEnterItemCount then
pc.remove_item(setting.dEnterItemVnum, setting.dsEnterItemCount)
else
continue = false
end
q.end_other_pc_block()
end
if continue then
dr_sd3_dungeon.go_to_next_floor()
npc.purge()
end
end
return
--elseif not party.is_party() then
-- say(locale.dr_sd3_dungeon._03say)
-- return
elseif party.is_party() and not party.is_leader() then
say(locale.dr_sd3_dungeon._04say)
return
end
if not dr_sd3_dungeon.can_party_members_enter() then return end
if party.is_party() then
d.new_jump_party(setting.mapIndex, setting.base_coord[1], setting.base_coord[2])
else
d.join(setting.mapIndex)
end
end
when kill with not npc.is_pc() and dr_sd3_dungeon.is_in() begin
local setting = dr_sd3_dungeon.setting()
local mobVnum = npc.get_race()
if mobVnum == setting.firstTaskBoss[1] then
dr_sd3_dungeon.go_to_next_floor()
elseif mobVnum == setting.secondTaskBoss[1] then
dr_sd3_dungeon.clear_level()
d.spawn_mob(setting.enterNpc[1], setting.enterNpc[2], setting.enterNpc[3])
elseif mobVnum == setting.thirdTaskStones[1] then
local count = d.getf("killedStones")+1
d.setf("killedStones", count)
if count >= (table.getn(setting.thirdTaskStones)-1)/2 then
d.spawn_mob(setting.thirdTaskBoss[1], setting.thirdTaskBoss[2], setting.thirdTaskBoss[3])
d.notice(string.format(locale.dr_sd3_dungeon._07say, mob_name(setting.thirdTaskBoss[1])))
end
elseif mobVnum == setting.thirdTaskBoss[1] then
dr_sd3_dungeon.clear_level()
d.notice(string.format(locale.dr_sd3_dungeon._10say, pc.get_name(), mob_name(mobVnum)))
server_timer("dr_sd3_dungeon_exit", 60, d.get_map_index())
end
end
when dr_sd3_dungeon_next_floor.server_timer begin
if d.select(get_server_timer_arg()) then
local setting = dr_sd3_dungeon.setting()
local level = d.getf("level")+1
d.setf("level", level)
if level == 2 then
d.jump_all(setting.base_coord[2], setting.base_coord[3])
d.notice(string.format(locale.dr_sd3_dungeon._07say, mob_name(setting.secondTaskBoss[1])))
d.spawn_mob(setting.secondTaskBoss[1], setting.secondTaskBoss[2], setting.secondTaskBoss[3])
elseif level == 3 then
d.jump_all(setting.second_floor_coord[1], setting.second_floor_coord[2])
for i = 2, table.getn(setting.thirdTaskStones), 2 do
d.spawn_mob(setting.thirdTaskStones[1], setting.thirdTaskStones[i], setting.thirdTaskStones[i+1])
end
d.notice(string.format(locale.dr_sd3_dungeon._08say, mob_name(setting.thirdTaskStones[1])))
end
d.regen_file("data/dungeon/dr_sd3_dungeon/dr_sd3_"..level..".txt")
end
end
when dr_sd3_dungeon_exit.server_timer begin
if d.select(get_server_timer_arg()) then
d.exit_all()
end
end
end
end
Locale.lua
locale.dr_sd3_dungeon = {}
locale.dr_sd3_dungeon._01say = "%s Nu deti %dx %s.Astfel a fost explotat."
locale.dr_sd3_dungeon._02say = "Intrare la Dragon"
locale.dr_sd3_dungeon._03say = "Ai nevoie de o grupa!."
locale.dr_sd3_dungeon._04say = "Trebuie sa fi tu Seful Grupului!"
locale.dr_sd3_dungeon._05say = "Membri grupei sunt prea mici %d."
locale.dr_sd3_dungeon._06say = "Membri nu au %dx %s."
locale.dr_sd3_dungeon._07say = "Omoara %s pentru a trece la urmatorul nivel!"
locale.dr_sd3_dungeon._08say = "Distrugeti toate %s."
locale.dr_sd3_dungeon._09say = "In 60 de secunde te voi teleporta!"
locale.dr_sd3_dungeon._10say = "Grupa lui %s A omorat %s."
locale.dr_sd3_dungeon._11say = "Vrei sa continui? ?"
locale.dr_sd3_dungeon._12say = "Clar!"
locale.dr_sd3_dungeon._13say = "Ok, asteapta un minut."
locale.dr_sd3_dungeon._14say = "Nu abandona"
locale.dr_sd3_dungeon._15say = "Nu ai %dx %s."
locale.dr_sd3_dungeon._16say = "Ai nevoie de level %d pentru a intra."
Tutorial instalare quest:
1. Salvaţi conţinutul quest-ului într-un fişier text numit de exemplu nume_quest.quest .
2. Vă conectaţi la filezilla / winscp şi întrati în /usr/home/game/share/locale/germany/quest (depinde ce server aveţi).
3. Îl puneţi acolo (să fie .quest) şi da-ţi permisiuni 777.
4. Te loghezi în FreeBSD / putty şi scrii în felul următor: cd /usr/home/game/share/locale/germany/quest apoi ./qc nume_quest.quest
5. Intraţi pe server şi scrieţi /reload q .