forked from metin2/server
1
0
Fork 0
server/gamefiles/data/quest/heavens_cave_keyquest.quest

855 lines
34 KiB
Plaintext
Raw Permalink Blame History

quest heavens_cave_keyquest begin
-- keyquest for heavens cave (Grotte der Verbannung), repetable 24h
-- initially created 06Oct by Arne
state start begin
when login or levelup with pc.get_level() >= 75 begin
pc.setqf("heavens_cave_keyquest_Repeat",0)
pc.setqf("heavens_cave_keyquest_CooldownTime", 3600) -- just to give it some value, true value is declared later
-- REMOVE, only for test, replace with proper NPC marking as soon as NPC is in maps
local v=find_npc_by_vnum(20095) -- Seon Hae
if 0!=v then
if pc.get_map_index() == 1 or pc.get_map_index() == 21 or pc.get_map_index() == 41 then
target.vid("__TARGET__", find_npc_by_vnum(20095), gameforge.heavens_cave_keyquest._010_target)
set_state(check_cooldown)
end
end
end
end
state check_cooldown begin -- quest loops back into this state after completion
when enter or login begin
local h = 0 -- for time hours
local m = 0 -- for time minutes
local s = 0 -- for time remaining seconds
end
when 20095.chat.gameforge.heavens_cave_keyquest._020_npcChat begin
if pc.getqf("heavens_cave_keyquest_Repeat") == 0 then -- this should only be used the first time the whole quest is done
target.delete("__TARGET__")
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
if pc.get_sex() == 0 then
say(gameforge.heavens_cave_keyquest._030_say)
else
say(gameforge.heavens_cave_keyquest._040_say)
end
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._050_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._060_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._070_say)
say("")
say(gameforge.heavens_cave_keyquest._080_say)
say_reward(gameforge.heavens_cave_keyquest._090_say_reward)
set_state(initialize)
else -- this is what the player gets on later repeats of the quest
if get_time() - pc.getqf("overall_cooldown_timestamp") >= pc.getqf("heavens_cave_keyquest_CooldownTime") then
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._100_say)
set_state(initialize)
else
-- calculating remaining hours and minutes, only for display
s = pc.getqf("heavens_cave_keyquest_CooldownTime") - (get_time() - pc.getqf("overall_cooldown_timestamp"))
-- h,m = math.modf(s/3600) -- metin does not compile this, sigh
h = math.floor(s/3600)
m = math.ceil(((s/3600)-h)*60)
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._110_say)
say("")
if s >= 7200 then
say(string.format(gameforge.heavens_cave_keyquest._120_say, h))
else
if s >= 3660 then
say(string.format(gameforge.heavens_cave_keyquest._130_say, m))
else
say(string.format(gameforge.heavens_cave_keyquest._140_say, m))
end
end
end
end
end
end
state initialize begin
when enter or login begin
-- main variable declaration for the quest, executed after each cooldown --
-- sorry for all the spirit forest/fireland mismatch --
---------------------------------------------------------------------------
-- Quest cooldown time in seconds, should be 86400 (24h). Can be set by eventflag in minutes.
local keyquest_cooldown = game.get_event_flag("keycooldown")
if keyquest_cooldown >= 1 then
pc.setqf("heavens_cave_keyquest_CooldownTime",keyquest_cooldown *60)
-- notice(string.format("Keyquest cooldown is at %d minutes.", keyquest_cooldown))
else
pc.setqf("heavens_cave_keyquest_CooldownTime",86400)
-- notice("Keyquest set to default value of 24h.")
end
-- needed amount of tears to collect in spirit forest/fireland
pc.setqf("heavens_cave_keyquest_NeededTearsAmount",7)
-- needed glass shards to get from fireland creatures
pc.setqf("heavens_cave_keyquest_NeededGlassAmount", 4)
-- resetting the time stamp for the overall cooldown
pc.setqf("overall_cooldown_timestamp",0)
-- reachedspot not passed
pc.setqf("reachedspot", 1)
--item vnums
pc.setqf("heavens_cave_keyquest_FrozenTear",30186)
pc.setqf("heavens_cave_keyquest_TearBottle", 30189)
pc.setqf("heavens_cave_keyquest_BloodDrop", 30187)
pc.setqf("heavens_cave_keyquest_BloodStone", 30190)
pc.setqf("heavens_cave_keyquest_VolcanicGlass", 30188)
-- counter for the collected tears in spirit forest
pc.setqf("tears_collected",0)
-- counter for glass in fireland killquest
pc.setqf("glass_collected", 0)
-- for setting marker for Barah
-- this is the random index for the red forest coords table, see search_spirit_forest state for the coords
pc.setqf("heavens_cave_keyquest_RedForestRndNum", math.random(1,11))
--Resetting Questflags for Targets visited, might be possible and more efficient with global vars ...
-- just feel more comfortable with qfs as they hopefully can be manipulated by gm's
pc.setqf("Tear1Taken",0)
pc.setqf("Tear2Taken",0)
pc.setqf("Tear3Taken",0)
pc.setqf("Tear4Taken",0)
pc.setqf("Tear5Taken",0)
pc.setqf("Tear6Taken",0)
pc.setqf("Tear7Taken",0)
set_state(search_spirit_forest)
end
end
state search_spirit_forest begin
-- this is used to generate a list of unique randoms, to be used for placing markers on random locations
-- it is important to not have markers at the same location, hence this script
-- unfortunately we cannot store a table permamnently, so relog/zoning or server restart will change the locations
-- if this proves to be undesireable, just render the picked coords into quest flags that reset in initialize state
-- would just mean 14 more quest flages per player ...
-- SourceListDepth is the amount of entries in the coord table you will later be picking from
-- TagetListDepth is the desired amount of random numbers you want to generate
-- The numbers are stored in a table
function generate_unique_rnd_table (SourceListDepth, TargetListDepth)
local Rand_List = {}
local Rand_Number
local current_length = 1
local conflict = false
local i
repeat
Rand_Number = math.random(1,SourceListDepth)
i = 1
conflict = false
while conflict == false do
if Rand_List[i] == Rand_Number then
conflict = true
else
if i == current_length then
Rand_List[i] = Rand_Number
current_length=current_length + 1
conflict = true
else
i= i + 1
end
end
end
until current_length == TargetListDepth+1
return Rand_List
end
-- this function is basically just a repeating piece of script code, stored here for readability and easier fixing
-- it should be called with the TEARn number of the arrive event it is called from
-- some variables are not declared to avoid a reset on function call, just leave them global they do not need to survive a server restart
function find_tear (Identifier)
local a -- temp random value store for multi pickup amount
local c -- temp store for counter operations
local heavens_cave_keyquest_LockTime = 5 -- seconds the arrive event will be locked should the dialogue be aborted
if heavens_cave_keyquest_Lock == true then -- check if the dialog had been aborted before and is still locked
--notice("Debug: looped locked state")
if get_time() - heavens_cave_keyquest_lock_timestamp >= heavens_cave_keyquest_LockTime then
--notice(string.format("Debug: Lock time through = %s",heavens_cave_keyquest_LockTime))
heavens_cave_keyquest_Lock = false
end
else
target.delete("__TEAR"..Identifier.."__")
say_title(gameforge.heavens_cave_keyquest._150_say_title)
say(gameforge.heavens_cave_keyquest._160_say)
local s = select(gameforge.heavens_cave_keyquest._170_1_select, gameforge.heavens_cave_keyquest._170_2_select, gameforge.heavens_cave_keyquest._170_3_select)
if s == 1 then
c = pc.getqf("tears_collected")
say_title(gameforge.heavens_cave_keyquest._150_say_title)
say(gameforge.heavens_cave_keyquest._180_say)
pc.setqf("tears_collected",c+1)
pc.setqf("Tear"..Identifier.."Taken",1)
pc.give_item2(pc.getqf("heavens_cave_keyquest_FrozenTear"))
--q.set_counter_value(pc.getqf("heavens_cave_keyquest_NeededTearsAmount")-pc.getqf("tears_collected"))
end
if s == 2 then
a = math.random(1,3)
c = pc.getqf("tears_collected")
say_title(gameforge.heavens_cave_keyquest._190_say_title)
say(string.format(gameforge.heavens_cave_keyquest._200_say,a))
wait()
say_title(gameforge.heavens_cave_keyquest._190_say_title)
say(gameforge.heavens_cave_keyquest._210_say)
pc.setqf("tears_collected",c+a)
pc.setqf("Tear"..Identifier.."Taken",1)
pc.give_item2(pc.getqf("heavens_cave_keyquest_FrozenTear"), a)
--q.set_counter_value(pc.getqf("heavens_cave_keyquest_NeededTearsAmount")-pc.getqf("tears_collected"))
pc.aggregate_monster()
end
if s == 3 then
heavens_cave_keyquest_lock_timestamp = get_time()
--notice(string.format("Debug: Time Stamp = %s",heavens_cave_keyquest_lock_timestamp))
heavens_cave_keyquest_Lock = true
-- re-placing the target marker as dialogue was aborted
target.pos("__TEAR"..Identifier.."__", heavens_cave_keyquest_SpiritForestCoordsTempList[Identifier][1], heavens_cave_keyquest_SpiritForestCoordsTempList[Identifier][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
end
return nil
end
when enter or login begin
-- Fill the daily table with random values for the spirit forest/fireland part
-- remember, it generates a list of indexes to pick from the coords table, not the coords themselves
-- see heavens_cave_keyquest_SpiritForestCoordsList for coords, mind the input table size
local heavens_cave_keyquest_DailyRndList = heavens_cave_keyquest.generate_unique_rnd_table (87,7)
--these are handpicked local coord pairs from spirit forest, fix here if a loc should be inconvenient
--(should then be fixed with next cooldown of quest)
local heavens_cave_keyquest_SpiritForestCoordsList =
{
-- Disabling spirit forest values temporarily
-- [1] = {147, 86,},
-- [2] = {28, 240,},
-- [3] = {35, 332,},
-- [4] = {103, 357,},
-- [5] = {144, 254,},
-- [6] = {57, 241,},
-- [7] = {63, 174,},
-- [8] = {78, 346,},
-- [9] = {222, 428,},
-- [10] = {299, 399,},
-- [11] = {346, 273,},
-- [12] = {431, 409,},
-- [13] = {370, 240,},
-- [14] = {291, 285,},
-- [15] = {231, 307,},
-- [16] = {227, 403,},
-- [17] = {350, 199,},
-- [18] = {409, 196,},
-- [19] = {442, 337,},
-- [20] = {143, 191,},
-- [21] = {262, 82,},
-- [22] = {234, 175,},
-- [23] = {197, 156,},
-- [24] = {298, 119,},
-- [25] = {265, 223,},
-- [26] = {349, 173,},
-- [27] = {411, 133,},
-- [28] = {412, 62,},
-- [29] = {464, 60,},
-- [30] = {471, 162,},
-- [31] = {450, 165,},
-- [32] = {481, 269,},
-- [33] = {479, 375,},
-- [34] = {454, 457,},
-- [35] = {415, 442,},
-- [36] = {394, 455,},
-- [37] = {340, 329,},
-- [38] = {340, 329,},
-- [39] = {340, 329,},
-- [40] = {325, 354,},
-- [41] = {327, 454,},
-- [42] = {262, 480,},
-- [43] = {204, 469,},
-- [44] = {166, 408,},
-- [45] = {166, 408,},
-- [46] = {122, 377,},
-- [47] = {93, 457,},
-- [48] = {61, 454,},
-- [49] = {40, 431,},
-- values for fireland until spirit forest is fixed
[1] = {407, 191,},
[2] = {464, 247,},
[3] = {649, 148,},
[4] = {827, 181,},
[5] = {899, 168,},
[6] = {1059, 152,},
[7] = {1141, 210,},
[8] = {1301, 208,},
[9] = {140, 257,},
[10] = {1279, 262,},
[11] = {1279, 380,},
[12] = {1352, 469,},
[13] = {1268, 529,},
[14] = {1087, 485,},
[15] = {937, 467,},
[16] = {877, 409,},
[17] = {841, 523,},
[18] = {685, 572,},
[19] = {664, 474,},
[20] = {596, 388,},
[21] = {558, 517,},
[22] = {437, 568,},
[23] = {409, 500,},
[24] = {378, 397,},
[25] = {269, 395,},
[26] = {162, 380,},
[27] = {82, 490,},
[28] = {92, 623,},
[29] = {130, 713,},
[30] = {261, 712,},
[31] = {245, 884,},
[32] = {110, 855,},
[33] = {506, 709,},
[34] = {482, 813,},
[35] = {425, 846,},
[36] = {651, 846,},
[37] = {696, 888,},
[38] = {733, 733,},
[39] = {834, 689,},
[40] = {949, 747,},
[41] = {917, 816,},
[42] = {1042, 894,},
[43] = {1146, 884,},
[44] = {118, 756,},
[45] = {1228, 701,},
[46] = {1319, 704,},
[47] = {190, 1031,},
[48] = {199, 998,},
[49] = {129, 1128,},
[50] = {312, 1165,},
[51] = {319, 1090,},
[52] = {381, 1020,},
[53] = {462, 986,},
[54] = {531, 985,},
[55] = {643, 979,},
[56] = {700, 1024,},
[57] = {726, 1152,},
[58] = {795, 1175,},
[59] = {830, 1053,},
[60] = {897, 960,},
[61] = {947, 1044,},
[62] = {1018, 1117,},
[63] = {1089, 1060,},
[64] = {1156, 1167,},
[65] = {1310, 1125,},
[66] = {1389, 1029,},
[67] = {1417, 1132,},
[68] = {1373, 1190,},
[69] = {1380, 1169,},
[70] = {1241, 1300,},
[71] = {1352, 1352,},
[72] = {1304, 1375,},
[73] = {1232, 1403,},
[74] = {1107, 1415,},
[75] = {1051, 1446,},
[76] = {938, 1400,},
[77] = {858, 1428,},
[78] = {772, 1420,},
[79] = {712, 1425,},
[80] = {634, 1343,},
[81] = {556, 1403,},
[82] = {460, 1415,},
[83] = {517, 1322,},
[84] = {484, 1305,},
[85] = {407, 1305,},
[86] = {370, 1393,},
[87] = {411, 1448,},
}
-- temp until I find the proper clean parsing, nested reading does not seem to work atm
-- this should not be local or the function cannot seem to access its values ...function code does not seem to belong to the state block
heavens_cave_keyquest_SpiritForestCoordsTempList =
{
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[1]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[2]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[3]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[4]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[5]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[6]],
heavens_cave_keyquest_SpiritForestCoordsList[heavens_cave_keyquest_DailyRndList[7]]
}
pc.setqf("tears_collected",pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear"))) -- step counter to any leftovers in inventory
send_letter(gameforge.heavens_cave_keyquest._020_npcChat)
q.start()
q.set_title(gameforge.heavens_cave_keyquest._020_npcChat)
--q.set_counter("Tr<54>nen ben<65>tigt:", pc.getqf("heavens_cave_keyquest_NeededTearsAmount")-pc.getqf("tears_collected"))
-- painting the locations for the tears if on fireland map
if pc.get_map_index() == 62 then
local allTearsTaken = true
--notice(string.format("Debug:Example coords %s x %s y",heavens_cave_keyquest_SpiritForestCoordsTempList[3][1], heavens_cave_keyquest_SpiritForestCoordsTempList[3][2]))
if pc.getqf("Tear1Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR1__", heavens_cave_keyquest_SpiritForestCoordsTempList[1][1], heavens_cave_keyquest_SpiritForestCoordsTempList[1][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear2Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR2__", heavens_cave_keyquest_SpiritForestCoordsTempList[2][1], heavens_cave_keyquest_SpiritForestCoordsTempList[2][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear3Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR3__", heavens_cave_keyquest_SpiritForestCoordsTempList[3][1], heavens_cave_keyquest_SpiritForestCoordsTempList[3][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear4Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR4__", heavens_cave_keyquest_SpiritForestCoordsTempList[4][1], heavens_cave_keyquest_SpiritForestCoordsTempList[4][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear5Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR5__", heavens_cave_keyquest_SpiritForestCoordsTempList[5][1], heavens_cave_keyquest_SpiritForestCoordsTempList[5][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear6Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR6__", heavens_cave_keyquest_SpiritForestCoordsTempList[6][1], heavens_cave_keyquest_SpiritForestCoordsTempList[6][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.getqf("Tear7Taken") == 0 then
allTearsTaken = false
target.pos("__TEAR7__", heavens_cave_keyquest_SpiritForestCoordsTempList[7][1], heavens_cave_keyquest_SpiritForestCoordsTempList[7][2], 62, gameforge.heavens_cave_keyquest._150_say_title)
end
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") and pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass"))>= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
elseif allTearsTaken then
set_state(initialize)
end
end
end
when button or info begin
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._220_say)
say("")
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) < pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
say_reward(string.format(gameforge.heavens_cave_keyquest._230_say, pc.getqf("heavens_cave_keyquest_NeededTearsAmount")-pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear"))))
end
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) < pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
say_reward(string.format(gameforge.heavens_cave_keyquest._240_say, pc.getqf("heavens_cave_keyquest_NeededGlassAmount")-pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass"))))
end
end
when __TEAR1__.target.arrive begin
heavens_cave_keyquest.find_tear(1)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR2__")
target.delete("__TEAR3__")
target.delete("__TEAR4__")
target.delete("__TEAR5__")
target.delete("__TEAR6__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
--if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR2__.target.arrive begin
heavens_cave_keyquest.find_tear(2)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR3__")
target.delete("__TEAR4__")
target.delete("__TEAR5__")
target.delete("__TEAR6__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
--if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR3__.target.arrive begin
heavens_cave_keyquest.find_tear(3)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR2__")
target.delete("__TEAR4__")
target.delete("__TEAR5__")
target.delete("__TEAR6__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR4__.target.arrive begin
heavens_cave_keyquest.find_tear(4)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR2__")
target.delete("__TEAR3__")
target.delete("__TEAR5__")
target.delete("__TEAR6__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR5__.target.arrive begin
heavens_cave_keyquest.find_tear(5)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR2__")
target.delete("__TEAR3__")
target.delete("__TEAR4__")
target.delete("__TEAR6__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR6__.target.arrive begin
heavens_cave_keyquest.find_tear(6)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR2__")
target.delete("__TEAR3__")
target.delete("__TEAR4__")
target.delete("__TEAR5__")
target.delete("__TEAR7__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when __TEAR7__.target.arrive begin
heavens_cave_keyquest.find_tear(7)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
target.delete("__TEAR1__")
target.delete("__TEAR2__")
target.delete("__TEAR3__")
target.delete("__TEAR4__")
target.delete("__TEAR5__")
target.delete("__TEAR6__")
pc.setqf("Tear1Taken",1)
pc.setqf("Tear2Taken",1)
pc.setqf("Tear3Taken",1)
pc.setqf("Tear4Taken",1)
pc.setqf("Tear5Taken",1)
pc.setqf("Tear6Taken",1)
pc.setqf("Tear7Taken",1)
notice_multiline(gameforge.heavens_cave_keyquest._250_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
when 2204.kill begin -- the added killquest
if pc.get_map_index() == 62 and pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) < pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
if math.random(1,100) <= 20 then
notice_multiline(gameforge.heavens_cave_keyquest._260_notice,notice)
pc.give_item2(pc.getqf("heavens_cave_keyquest_VolcanicGlass"))
local c = pc.getqf("glass_collected")+1
pc.setqf("glass_collected", c)
if pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
-- if pc.getqf("glass_collected") >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
notice_multiline(gameforge.heavens_cave_keyquest._270_notice,notice)
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") then
q.done()
set_state(tears_for_seon)
end
end
end
end
end
end
state tears_for_seon begin
when enter or login begin
send_letter(gameforge.heavens_cave_keyquest._020_npcChat)
q.start()
q.set_title(gameforge.heavens_cave_keyquest._020_npcChat)
local v=find_npc_by_vnum(20095) -- Seon Hae
if 0~=v then
target.vid("__TARGET__", v, gameforge.heavens_cave_keyquest._010_target)
end
end
when button or info begin
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._280_say)
say("")
say(string.format(gameforge.heavens_cave_keyquest._290_say, get_map_name_by_number(1)))
end
when 20095.chat.gameforge.heavens_cave_keyquest._020_npcChat begin
target.delete("__TARGET__")
if pc.getqf("heavens_cave_keyquest_Repeat") == 0 then -- this should only be used once
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._300_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._310_say)
else
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._320_say)
end
target.delete("__TARGET__")
if pc.count_item(pc.getqf("heavens_cave_keyquest_FrozenTear")) >= pc.getqf("heavens_cave_keyquest_NeededTearsAmount") and pc.count_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass")) >= pc.getqf("heavens_cave_keyquest_NeededGlassAmount") then
pc.remove_item(pc.getqf("heavens_cave_keyquest_FrozenTear"), pc.getqf("heavens_cave_keyquest_NeededTearsAmount"))
pc.remove_item(pc.getqf("heavens_cave_keyquest_VolcanicGlass"), pc.getqf("heavens_cave_keyquest_NeededGlassAmount"))
pc.give_item2(pc.getqf("heavens_cave_keyquest_TearBottle"))
q.done()
set_state(search_spirit)
else
--notice("illegal using") -- debug message
end
end
end
state search_spirit begin
when enter or login begin
-- and this is the coordlist for red forest, where Barah Taraji spirit will spawn
local heavens_cave_keyquest_RedForestCoordsList =
{
[1] = {85, 277,},
[2] = {79, 442,},
[3] = {403, 473,},
[4] = {464, 396,},
[5] = {468, 427,},
[6] = {468, 427,},
[7] = {300, 444,},
[8] = {300, 444,},
[9] = {206, 348,},
[10] = {539, 294,},
[11] = {410, 335,},
}
send_letter(gameforge.heavens_cave_keyquest._020_npcChat)
q.start()
q.set_title(gameforge.heavens_cave_keyquest._020_npcChat)
-- painting location for voice if in red forest
if pc.get_map_index() == 68 then
--notice(string.format("Debug:Bahar-Taraji is at: %s x %s y",heavens_cave_keyquest_RedForestCoordsList[pc.getqf("heavens_cave_keyquest_RedForestRndNum")][1], heavens_cave_keyquest_RedForestCoordsList[pc.getqf("heavens_cave_keyquest_RedForestRndNum")][2]))
target.pos("__VOICE__", heavens_cave_keyquest_RedForestCoordsList[pc.getqf("heavens_cave_keyquest_RedForestRndNum")][1], heavens_cave_keyquest_RedForestCoordsList[pc.getqf("heavens_cave_keyquest_RedForestRndNum")][2], 68, "Stimme von Barah Taraji")
end
end
when button or info begin
if pc.getqf("reachedspot") >= 1 then
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._330_say)
return
else
if pc.get_map_index() == 68 and pc.getqf("reachedspot") == 0 then
if pc.getqf("heavens_cave_keyquest_Repeat") == 0 then
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._340_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._350_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._360_say)
say("")
say(gameforge.heavens_cave_keyquest._370_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(string.format(gameforge.heavens_cave_keyquest._380_say,pc.get_name()))
else
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._390_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(string.format(gameforge.heavens_cave_keyquest._400_say,pc.get_name()))
say("")
say(gameforge.heavens_cave_keyquest._410_say)
end
if pc.count_item(pc.getqf("heavens_cave_keyquest_TearBottle")) >= 1 then
pc.remove_item(pc.getqf("heavens_cave_keyquest_TearBottle"),1)
pc.give_item2(pc.getqf("heavens_cave_keyquest_BloodDrop"))
q.done()
set_state(blood_for_seon)
else
return
end
end
end
end
when __VOICE__.target.arrive begin
target.delete("__VOICE__")
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._335_say)
wait()
pc.setqf("reachedspot", 0)
send_letter(gameforge.heavens_cave_keyquest._020_npcChat)
end
end
state blood_for_seon begin
when enter or login begin
send_letter(gameforge.heavens_cave_keyquest._020_npcChat)
q.start()
q.set_title(gameforge.heavens_cave_keyquest._020_npcChat)
local v=find_npc_by_vnum(20095) -- Seon Hae
if 0~=v then
target.vid("__TARGET__", v, gameforge.heavens_cave_keyquest._010_target)
end
end
when button or info begin
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._420_say)
say("")
say(string.format(gameforge.heavens_cave_keyquest._290_say, get_map_name_by_number(1)))
end
when 20095.chat.gameforge.heavens_cave_keyquest._020_npcChat begin
target.delete("__TARGET__")
if pc.getqf("heavens_cave_keyquest_Repeat") == 0 then
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._430_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._440_say)
wait()
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._450_say)
say("")
say_reward(gameforge.heavens_cave_keyquest._460_say_reward)
else
say_title(gameforge.heavens_cave_keyquest._020_npcChat)
say(gameforge.heavens_cave_keyquest._470_say)
say("")
say_reward(gameforge.heavens_cave_keyquest._480_say_reward)
end
if pc.count_item(pc.getqf("heavens_cave_keyquest_BloodDrop")) >= 1 then
pc.remove_item(pc.getqf("heavens_cave_keyquest_BloodDrop"), 1)
pc.give_item2(pc.getqf("heavens_cave_keyquest_BloodStone"))
pc.setqf("overall_cooldown_timestamp", get_time()) --setting the time stamp for quest repeat
q.done()
pc.setqf("heavens_cave_keyquest_Repeat",1)
set_state(check_cooldown)
else
--notice("illegal using") -- debug message
end
end
end
end