forked from metin2/server
249 lines
8.5 KiB
Plaintext
249 lines
8.5 KiB
Plaintext
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 |