forked from metin2/server
1
0
Fork 0
server/gamefiles/locale/english/quest/event_easter_2013.quest

382 lines
9.9 KiB
Plaintext

quest event_easter_2013 begin
state start begin
-- 2013 --
function spawn_metin(map_index)
local settings = event_easter_2013.get_settings()
local level_table = settings.spawn.maps[map_index]
if level_table == nil then
return
end
table.foreach(level_table,
function(index, level)
for i=0, 5 do
regen_in_map(map_index, "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
end
end
)
mob.spawn(20352, 1, 1, 1, 1, 1)
end
function metin_killed(vnum)
local settings = event_easter_2013.get_settings()
local level = settings.metins[vnum]
regen_in_map(pc.get_map_index(), "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
if level < pc.get_level() - settings.max_level_difference then
return
else
local eggVnum = math.random(50160, 50179)
game.drop_item_with_ownership(eggVnum, 1)
if math.random(1, 100) <= settings.magicegg.pct then
game.drop_item_with_ownership(settings.magicegg.vnum, 1)
end
end
end
-- 2012 --
function is_running()
return (game.get_event_flag("easter_drop") > 0)
end
function has_rabbit()
return (game.get_event_flag("easter_rabbit") > 0)
end
function get_settings()
local spawnPromille = game.get_event_flag("easter_spawn_chance")
if spawnPromille <= 0 then
spawnPromille = 5
end
local magicEggPercent = game.get_event_flag("easter_magicegg_chance")
if magicEggPercent <= 0 then
magicEggPercent = 5
end
return {
["eggvnums"] = {
["first"] = 50160,
["last"] = 50179,
},
["baskets"] = {
["full"] = 50181,
["empty"] = 50180,
},
["magicegg"] = {
["vnum"] = 71150,
["pct"] = magicEggPercent,
},
["metins"] = {
[8041] = 10,
[8042] = 20,
[8043] = 30,
[8044] = 40,
[8045] = 50,
[8046] = 60,
[8047] = 70,
[8048] = 80,
[8049] = 90,
[8050] = 95
},
["max_level_difference"] = 15,
["rabbit"] = 30129,
["spawn"] = {
["kill"] = 100,
["cooldown"] = 60,
["promille"] = spawnPromille,
["maps"] = {
[1] = {10, 20},
[3] = {20, 30},
[21] = {10, 20},
[23] = {20, 30},
[41] = {10, 20},
[43] = {20, 30},
[61] = {50, 60},
[62] = {50, 60},
[63] = {40, 50},
[64] = {30, 40},
[65] = {40, 50},
[67] = {60, 70},
[68] = {70, 80},
[69] = {60, 70},
[70] = {70, 80},
[301] = {90, 95},
[302] = {90, 95},
[303] = {90, 95},
[304] = {90, 95},
},
},
}
end
function get_reward_table_for_item()
-- for each level range there is a different reward
local playerlevel = pc.get_level()
if playerlevel <= 18 then
return {
{27002, 13},
{27005, 13},
{27100, 8},
{27103, 8},
{50721, 4},
{30053, 9, 20},
{30073, 9, 20},
{30033, 9, 20},
{30010, 9, 20},
{30031, 9, 20},
{30032, 9, 20}
}
elseif playerlevel > 18 and playerlevel <= 30 then
return {
{27002, 18},
{27005, 18},
{27100, 7},
{27103, 7},
{27101, 3},
{27104, 3},
{50721, 8},
{50722, 8},
{50723, 8},
{50724, 8},
{50300, 2, 20},
{30196, 5, 20},
{30090, 5, 20}
}
elseif playerlevel > 30 and playerlevel <= 52 then
return {
{27101, 8},
{27104, 8},
{27003, 17},
{27006, 17},
{27102, 3},
{27105, 3},
{50721, 5},
{50722, 5},
{50723, 5},
{50724, 5},
{50725, 5},
{50726, 5},
{50727, 5},
{50728, 5},
{50300, 1, 20},
{30195, 4, 20},
{30197, 4, 20},
{30193, 3, 20}
}
elseif playerlevel > 52 and playerlevel <= 74 then
return {
{27003, 14},
{27006, 14},
{27102, 9},
{27105, 9},
{50721, 5},
{50722, 5},
{50723, 5},
{50724, 5},
{50725, 5},
{50726, 5},
{50727, 5},
{50728, 5},
{50300, 1, 20},
{30198, 4, 20},
{30199, 4, 20},
{08005, 3},
}
else
return {
{27102, 11},
{27105, 11},
{50091, 15},
{50092, 15},
{50093, 15},
{50094, 15},
{50300, 4, 20},
{50060, 6, 20},
{08005, 4},
{30196, 2, 20},
{30090, 2, 20},
{30195, 2, 20},
{30197, 2, 20},
{30198, 2, 20},
{30199, 2, 20}
}
end
end
function get_reward_amount_for_vnum(reward_table, vnum_to_search)
local amount_needed = 1
table.foreachi(reward_table,
function(index, item)
local itemVnum = item[1]
if itemVnum == vnum_to_search then
if table.getn(item) > 2 then
amount_needed = item[3]
else
amount_needed = 1
end
return
end
end
)
return amount_needed
end
function get_number_of_eggs()
local settings = event_easter_2013.get_settings()
return count_item_range(settings.eggvnums.first, settings.eggvnums.last)
end
function get_random_reward_vnum(reward_table)
local temp_table = {}
local easterEggCount = event_easter_2013.get_number_of_eggs()
table.foreachi(reward_table,
function(index, item)
local itemProbability = item[2]
local itemVnum = item[1]
local meetsAmountLimit = true
-- check if we need more than one easter egg
if table.getn(item) > 2 then
if easterEggCount < item[3] then
-- player does not have enough eggs for this item
meetsAmountLimit = false
end
end
if meetsAmountLimit then
for amount = 1, itemProbability do
table.insert(temp_table, itemVnum)
end
end
end
)
return temp_table[math.random(table.getn(temp_table))]
end
when login or enter with event_easter_2013.has_rabbit() begin
-- spawn rabbit if he is not there
local settings = event_easter_2013.get_settings()
local mapIndex = pc.get_map_index()
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
if find_npc_by_vnum(settings.rabbit) == 0 then
if mapIndex == 1 then
mob.spawn(settings.rabbit, 591, 472, 1, 1, 1)
elseif mapIndex == 21 then
mob.spawn(settings.rabbit, 517, 742, 1, 1, 1)
elseif mapIndex == 41 then
mob.spawn(settings.rabbit, 306, 828, 1, 1, 1)
end
end
end
if find_npc_by_vnum(20352) == 0 then
event_easter_2013.spawn_metin(pc.get_map_index())
end
end
-- 2013 --
-- when login or enter with event_easter_2013.is_running() begin
-- if is_test_server() then
-- notice("test1")
-- end
-- if find_npc_by_vnum(20352) == 0 then
-- event_easter_2013.spawn_metin(pc.get_map_index())
-- if is_test_server() then
-- notice("test2")
-- end
-- end
-- end
-- "Was machst du hier?"
when 30129.chat.gameforge.main_quest_lv2._10_npcChat with event_easter_2013.get_number_of_eggs() == 0 begin
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
say(gameforge.event_easter._030_say) -- "Ich verstecke Ostereier. Wenn du welche findest und mir zur?k bringst, belohne ich dich toll!"
say(gameforge.event_easter._035_say)
if not event_easter_2013.has_rabbit() then
-- purge the rabbit if the event has finished
npc.purge()
end
end --when
when 30129.chat.gameforge.event_easter._040_chat with event_easter_2013.get_number_of_eggs() > 0 begin
local settings = event_easter_2013.get_settings()
local reward_table = event_easter_2013.get_reward_table_for_item()
local amount_to_remove = 0
local amount_to_give = 0
local vnum_to_give = 0
local number_of_eggs = event_easter_2013.get_number_of_eggs()
local wants_items = 2
while wants_items == 2 do
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
vnum_to_give = event_easter_2013.get_random_reward_vnum(reward_table)
local amount_needed = event_easter_2013.get_reward_amount_for_vnum(reward_table, vnum_to_give)
if amount_needed == 20 then
amount_to_remove = 20
amount_to_give = 1
say(gameforge.event_easter._060_say)
say(string.format(gameforge.event_easter._065_say, amount_to_remove)) -- "Daf? musst du mir %d Eier geben! M?htest du das tun?"
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"
say_item_vnum(vnum_to_give)
say(gameforge.event_easter._100_say)
else
if number_of_eggs > 20 then
amount_to_remove = 20
else
amount_to_remove = number_of_eggs
end
if vnum_to_give < 27200 then
amount_to_give = amount_to_remove * 3
else
amount_to_give = amount_to_remove * 5
end
say(gameforge.event_easter._060_say)
say(string.format(gameforge.event_easter._055_say, event_easter_2013.get_number_of_eggs()) )
say(string.format(gameforge.event_easter._050_say, amount_to_give))
say_item_vnum(vnum_to_give)
say(gameforge.event_easter._100_say)
end
end
if (remove_item_range(amount_to_remove, settings.eggvnums.first, settings.eggvnums.last)) then
pc.give_item2(vnum_to_give, amount_to_give)
end
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
say(gameforge.event_easter._080_say) -- "Danke f? die Eier, ich hoffe du hast Spa?mit dem was du bekommen hast"
say("")
if not event_easter_2013.has_rabbit() then
-- purge the rabbit if the event has finished
npc.purge()
end
end --when
when 8041.kill begin
event_easter_2013.metin_killed(8041)
end
when 8042.kill begin
event_easter_2013.metin_killed(8042)
end
when 8043.kill begin
event_easter_2013.metin_killed(8043)
end
when 8044.kill begin
event_easter_2013.metin_killed(8044)
end
when 8045.kill begin
event_easter_2013.metin_killed(8045)
end
when 8046.kill begin
event_easter_2013.metin_killed(8046)
end
when 8047.kill begin
event_easter_2013.metin_killed(8047)
end
when 8048.kill begin
event_easter_2013.metin_killed(8048)
end
when 8049.kill begin
event_easter_2013.metin_killed(8049)
end
when 8050.kill begin
event_easter_2013.metin_killed(8050)
end
end --state
end --quest