Am o mica problema la Camera de crystal.
Cand incerc sa intru in ea mereu imi cere o parola pe care nu o stiu. Chiar daca am 3 chei imi tot cere parola.
Questurile mele sunt astea:
dragon_lair_access.quest
Cod: Selectaţi tot
quest dragon_lair_access begin
state start begin
function get_settings()
local settings = {}
settings.cooldown_time = 3600 -- when can the dragon be killed again?
settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair?
settings.access_item = 30179 -- "Dragon God Symbols"
settings.dragon_vnum = 2430
settings.spawn = {}
settings.spawn.x = 181
settings.spawn.y = 173
settings.warp_in = {}
settings.warp_in.first = {}
settings.warp_in.last = {}
settings.warp_in.first.x = 843677
settings.warp_in.first.y = 1066206
settings.warp_in.last.x = 844027
settings.warp_in.last.y = 1067599
settings.warp_out = {}
settings.warp_out.first = {}
settings.warp_out.last = {}
settings.warp_out.first.x = 9200
settings.warp_out.first.y = 1206400
settings.warp_out.last.x = 10900
settings.warp_out.last.y = 1209100
settings.room_area = {}
settings.room_area.first = {}
settings.room_area.last = {}
settings.room_area.first.x = 833000
settings.room_area.first.y = 1062500
settings.room_area.last.x = 844100
settings.room_area.last.y = 1071500
settings.access_item_amount = game.get_event_flag("dragon_lair_amount")
if (settings.access_item_amount == 0) then
settings.access_item_amount = 3 -- default value when event flag is not set
elseif (settings.access_item_amount == -1) then
settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case)
end
return settings
end
function get_random_point(area_coordinates)
return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y)
end
function warp_to_lair()
local settings = dragon_lair_access.get_settings()
local x, y = dragon_lair_access.get_random_point(settings.warp_in)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y)
pc.warp(x,y)
end
function warp_from_lair()
local settings = dragon_lair_access.get_settings()
local x, y = dragon_lair_access.get_random_point(settings.warp_out)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y)
pc.warp(x,y)
end
function warp_all_from_lair()
local settings = dragon_lair_access.get_settings()
warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y)
game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
char_log(0, 'LAIR', 'WARP ALL')
end
function get_time_remaining()
local settings = dragon_lair_access.get_settings()
return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time())
end
function give_item_to_ghost()
local settings = dragon_lair_access.get_settings()
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._130_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel)
if give_item == 1 then
pc.remove_item(settings.access_item, settings.access_item_amount)
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM')
return true
else
return false
end
end
function show_time_remaining(time_remaining)
q.set_title(gameforge.dragon_lair_access._165_sendLetter)
send_letter(gameforge.dragon_lair_access._165_sendLetter)
q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining)
timer("dragon_lair_timer", time_remaining)
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, time_remaining / 60), notice)
q.start()
end
when enter or login begin
pc.setqf("is_leader", 0)
q.done()
if pc.get_map_index() == 208 and not pc.is_gm() then
dragon_lair_access.warp_from_lair()
end
end
when blue_dragon_timer.server_timer begin
game.set_event_flag("dragon_lair_timer_used", 0)
if game.get_event_flag("dragon_lair_alive") == 1 then
notice_multiline(gameforge.dragon_lair_access._150_notice, notice_all)
else
notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all)
end
dragon_lair_access.warp_all_from_lair()
end
when 30121.chat.gameforge.dragon_lair_access._010_npcChat with pc.get_map_index() != 208 begin
local starttime = game.get_event_flag("dragon_lair_time")
local current_time = get_global_time()
local settings = dragon_lair_access.get_settings()
local time_remaining = dragon_lair_access.get_time_remaining()
if pc.count_item(settings.access_item) >= settings.access_item_amount then
if starttime + settings.group_time >= current_time then
local password_input;
repeat
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._020_say)
password_input = tonumber(input())
if password_input != game.get_event_flag("dragon_lair_password") then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._030_say)
local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
if again == 2 then
return
end
end
until password_input == game.get_event_flag("dragon_lair_password")
if not dragon_lair_access.give_item_to_ghost() then
return
end
-- right password
pc.setqf("time", starttime)
dragon_lair_access.warp_to_lair()
set_state(kill_dragon)
elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._050_say)
local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel)
if abort == 2 then
npc.unlock()
return
end
local password_number;
repeat
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._070_say)
password_number = tonumber(input())
local again;
if type(password_number) != 'number' then
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._080_say)
again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
if again == 2 then
npc.unlock()
return
end
end
until type(password_number) == 'number'
if not dragon_lair_access.give_item_to_ghost() then
npc.unlock()
return
end
if dragon_lair_access.get_time_remaining() > 0 then
pc.give_item2(settings.access_item, settings.access_item_amount)
npc.unlock()
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end
pc.setqf("password", password_number)
timer("dragon_lair_warptimer", pc.get_channel_id()*2)
npc.unlock()
else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
return
end
else
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._100_say)
say(gameforge.dragon_lair_access._105_say)
say(settings.access_item_amount.."x: ")
say_item_vnum(settings.access_item)
return
end
end
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too
set_state(start)
end
end
when dragon_lair_warptimer.timer begin
local settings = dragon_lair_access.get_settings()
if dragon_lair_access.get_time_remaining() < 0 then
local starttime = get_global_time()
game.set_event_flag("dragon_lair_time", starttime) -- set start time
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime)
pc.setqf("time", starttime)
pc.setqf("is_leader", 1)
game.set_event_flag("dragon_lair_password", pc.getqf("password")) -- set password
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password"))
server_timer("blue_dragon_timer", settings.cooldown_time)
dragon_lair_access.warp_to_lair()
set_state(spawn_dragon)
else
pc.give_item2(settings.access_item, settings.access_item_amount)
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._120_say)
end
pc.setqf("password", 0)
end
end
state spawn_dragon begin
when login begin
local settings = dragon_lair_access.get_settings()
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
notice_multiline(string.format(gameforge.dragon_lair_access._090_notice, pc.name), notice_all)
-- spawn all mobs needed
regen_in_map(208, "locale/_master/map/metin2_map_skipia_dungeon_boss/regen.txt")
mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon
game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')
notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
dragon_lair_access.show_time_remaining(settings.cooldown_time)
set_state(kill_dragon)
end
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end
end
state kill_dragon begin
when dragon_lair_timer.timer begin
set_state(start)
end
when login begin
if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then
set_state(start)
else
dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining())
end
end
when button or info begin
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, dragon_lair_access.get_time_remaining() / 60), notice)
local settings = dragon_lair_access.get_settings()
if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then
notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
end
end
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
say_title(gameforge.ghost_story._010_sayTitle)
say(gameforge.dragon_lair_access._115_say)
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
if warp == 1 then
dragon_lair_access.warp_from_lair()
set_state(start)
end
end
when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208 begin
if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
dragon_lair_access.warp_to_lair()
else
say_title(gameforge.neutral_warp._20_sayTitle)
say(gameforge.dragon_lair_access._120_say)
set_state(start)
end
end
when 2493.kill with pc.get_map_index() == 208 begin
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED')
game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
game.drop_item_with_ownership(71129, 1) -- dropping toe nail
notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
local settings = dragon_lair_access.get_settings()
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
end
end
endCod: Selectaţi tot
quest dragon_lair begin
state start begin
when kill begin
if npc.get_race() == 8041 or npc.get_race() == 8042 or npc.get_race() == 8043 or npc.get_race() == 8044 then
-- spawns a group of mobs at the area of the player with a chance of 1/3
if (math.random(3) == 1) then
local group_group = {
2425, 2425,
2426, 2426,
2427
}
local group_num = math.random(table.getn(group_group))
local group_vnum = group_group[group_num]
mob.spawn_group(group_vnum, pc.get_local_x(), pc.get_local_y(), 1, 1, 1) -- spawn a group of monsters
end
end
end
end
endCod: Selectaţi tot
quest dragon_lair_weekly begin
state start begin
function set_settings()
local settings = { }
-- how long the player has to wait until he can do the quest again
settings.cooldown_time = 561600 -- 60 seconds * 60 minutes * 24 hours * 6.5 days
-- how long the player has time to get the items
settings.time_to_hunt = 7200 -- 2 hours
-- those items should be hunted
settings.items_to_hunt = {
30198,
30199,
50721,
50722,
50723,
50725,
50726,
50727
}
-- the amount of items to be hunted. Array field relate to settings.items_to_hunt
settings.amount_to_hunt = {
10,
10,
50,
50,
50,
50,
50,
50
}
settings.amount_to_pay = 150000
-- Rewards:
-- how often he gets a normal item instead of a poly marble
settings.normal_items_rate = 50 -- in percent
-- reward tables follow the rules: {vnum, quantity, mininum level, maximum level}
-- reward items when giving a normal item
settings.normal_items = {
{70008, 1}
}
-- vnum of the poly marble (to show an icon to the player)
settings.poly_item_vnum = 71093
-- mobs to give in a poly marble
settings.poly_mobs = {
{175, 6},
{184, 6},
{501, 4},
{502, 4},
{552, 2, 85},
{771, 6},
{1601, 2, 95},
{2001, 4},
{2051, 2, 90},
{2061, 2, 90},
{2131, 6},
{5003, 6}
}
return settings
end
when login or enter or levelup with pc.get_level() >= 85 begin
set_state(getquest)
end
end
state getquest begin
when enter begin
pc.setqf("item_to_hunt", 0)
pc.setqf("amount_to_hunt", 0)
end
-- "Give me polymorph items!"
when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
local settings = dragon_lair_weekly.set_settings()
local time_to_wait = pc.getqf("lasttime") - get_global_time() + settings.cooldown_time
-- "Ghost of a warrior: "
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
if time_to_wait < 0 then
-- the player has no cooldown any longer
local item_to_hunt = pc.getqf("item_to_hunt")
local amount_to_hunt = pc.getqf("amount_to_hunt")
if item_to_hunt == 0 then
local table_number = math.random(table.getn(settings.items_to_hunt))
item_to_hunt = settings.items_to_hunt[table_number]
amount_to_hunt = settings.amount_to_hunt[table_number]
pc.setqf("item_to_hunt", item_to_hunt)
pc.setqf("amount_to_hunt", amount_to_hunt)
end
-- "You have to collect %s:"
say(string.format(gameforge.dragon_lair_weekly._030_say, amount_to_hunt))
say_item_vnum(item_to_hunt)
-- "Then I will give you polymorph!"
say(gameforge.dragon_lair_weekly._040_say)
-- yes / no
local accept = select(gameforge.dragon_lair_weekly._050_select, gameforge.dragon_lair_weekly._060_select)
if accept == 1 then
set_state(hunt_item)
else
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
-- "You are mean to me!"
say(gameforge.dragon_lair_weekly._070_say)
end
else
-- player still has cooldown
-- "You have to wait %s longer!"
say(string.format(gameforge.dragon_lair_weekly._080_say, get_time_remaining(time_to_wait)))
end
end
end
state hunt_item begin
-- returns the amount of items the player still has to hunt
function get_amount_remaining()
return (pc.getqf("amount_to_hunt") - pc.count_item(pc.getqf("item_to_hunt")))
end
-- returns the time in seconds the player has left collecting the items.
function get_time_remaining()
local settings = dragon_lair_weekly.set_settings()
return (pc.getqf("lasttime") - get_global_time() + settings.time_to_hunt)
end
when login begin
-- add a quest icon and timer
local time_remaining = dragon_lair_weekly.get_time_remaining()
q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will be shown to the player
timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
if dragon_lair_weekly.get_amount_remaining() > 0 then
-- "Collect things!"
send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
else
-- "Things collected!"
send_letter(gameforge.dragon_lair_weekly._120_sendLetter)
q.set_title(gameforge.dragon_lair_weekly._130_sayTitle)
end
q.start()
end
when enter begin
local settings = dragon_lair_weekly.set_settings()
local time_remaining = settings.time_to_hunt
pc.setqf("lasttime", get_global_time()) -- reset the cooldown
-- "Collect things!"
send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will trigger the failing of this quest
timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
q.start()
end
when info or button begin
local settings = dragon_lair_weekly.set_settings()
local amount_remaining = dragon_lair_weekly.get_amount_remaining()
if (amount_remaining > 0) then
local time_remaining = dragon_lair_weekly.get_time_remaining()
if (time_remaining > 0) then
-- player still has to collect items
say_title(gameforge.dragon_lair_weekly._110_sayTitle) -- quest title
-- "You still have to collect %s:"
say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
say_item_vnum(pc.getqf("item_to_hunt"))
say("")
say(gameforge.dragon_lair_weekly._090_questRest .. get_time_remaining(time_remaining))
else
-- player did not collect the items in time
-- "You failed collecting the items in time!"
notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
q.done()
set_state(getquest) -- reset the quest, but the cooldown remains
end
else
say_title(gameforge.dragon_lair_weekly._130_sayTitle) -- quest title
-- "You have all needed items. Go back to the warrior Ghost! He is in heavens cave 2"
say(gameforge.dragon_lair_weekly._150_say)
end
end
when dragon_lair_weekly_timer.timer begin
-- the player did not collect the items in time
-- "You failed collecting the items in time!"
notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
q.done()
set_state(getquest) -- reset the quest, but the cooldown remains
end
when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
local settings = dragon_lair_weekly.set_settings()
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
local amount_remaining = dragon_lair_weekly.get_amount_remaining()
if amount_remaining > 0 then
-- the player did not collect enough items
-- "You still have to collect %s:"
say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
say_item_vnum(pc.getqf("item_to_hunt"))
-- "Then I will give you polymorph!"
say(gameforge.dragon_lair_weekly._040_say)
elseif pc.money < settings.amount_to_pay then
-- you don't have enough yang to pay
say(gameforge.dragon_lair_weekly._175_say)
else
-- "You want to give me %s ?: "
say(string.format(gameforge.dragon_lair_weekly._170_say, pc.getqf("amount_to_hunt")))
say_item_vnum(pc.getqf("item_to_hunt"))
-- "Yes" / "No"
local give_item = select(gameforge.dragon_lair_weekly._180_select, gameforge.dragon_lair_weekly._190_select)
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
if (give_item == 1) then
-- "Thanks, now you get this from me: "
-- see if a normal item, or a polymorph item should be given
if math.random(100) < settings.normal_items_rate then -- normal item
say(gameforge.dragon_lair_weekly._205_sayReward)
local award_vnum = get_random_vnum_from_table(settings.normal_items)
say_item_vnum(award_vnum)
pc.give_item2(award_vnum)
else -- polymorph item
say(gameforge.dragon_lair_weekly._200_sayReward)
local award_vnum = get_random_vnum_from_table(settings.poly_mobs)
say_item(item_name(settings.poly_item_vnum), settings.poly_item_vnum, mob_name(award_vnum))
pc.give_poly_marble(award_vnum) -- give a poly morph item with this mob vnum in it
end
pc.remove_item(pc.getqf("item_to_hunt"), pc.getqf("amount_to_hunt")) -- remove the questitems from inventory
pc.changemoney(settings.amount_to_pay) -- player pays yang for the item
q.done()
set_state(getquest)
else
say(gameforge.dragon_lair_weekly._210_say)
end
end
end
end
end
