forked from metin2/server
630 lines
29 KiB
Plaintext
630 lines
29 KiB
Plaintext
quest new_quest_lv75 begin
|
|
state start begin
|
|
when login or levelup with pc.get_level() >= 75 begin
|
|
pc.setqf("suraskel0", 1)
|
|
-- for 30124
|
|
pc.setqf("suraskel1", 1)
|
|
-- for 30125
|
|
pc.setqf("suraskel2", 1)
|
|
-- for 30126
|
|
pc.setqf("suraskel3", 1)
|
|
-- for 30127
|
|
pc.setqf("suraskel4", 1)
|
|
-- for 30128
|
|
pc.setqf(timer, get_global_time())
|
|
set_state(gotoinformation)
|
|
end
|
|
end
|
|
|
|
-- Inform player what to do
|
|
state gotoinformation begin
|
|
when enter or login begin
|
|
diarypage = 30181 -- page of a book
|
|
goto_npc = 20090 -- Heuk-Young
|
|
local v=find_npc_by_vnum(goto_npc)
|
|
if 0!=v then
|
|
target.vid("__TARGET__", v, gameforge.new_quest_lv75._010_target) -- place questarrow on Heuk-Young
|
|
end
|
|
end
|
|
when 20090.chat.gameforge.new_quest_lv75._020_set_title begin -- when Heuk-Younmg is clicked
|
|
target.delete("__TARGET__") -- delete questarrow
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._030_say)
|
|
set_state(find_evidence)
|
|
end
|
|
end
|
|
|
|
-- and the scavenger hunt begins
|
|
state find_evidence begin
|
|
when login or enter begin
|
|
diarypage = 30181 -- page of a book
|
|
send_letter(gameforge.new_quest_lv75._020_set_title)
|
|
new_quest_lv75_mob = 1137 -- Himmels-Eisgolem
|
|
new_quest_lv75_dropProb = 15 -- probability is 1.5%
|
|
new_quest_lv75_npcvnum = 20090
|
|
q.start()
|
|
q.set_title(gameforge.new_quest_lv75._020_set_title) -- for quest-journal
|
|
end
|
|
|
|
-- quest journal gives feedback to whatever useful things the player finds. It changes according to the findings
|
|
when button or info begin
|
|
local foundskel = pc.getqf("suraskel0") + pc.getqf("suraskel1") + pc.getqf("suraskel2") + pc.getqf("suraskel3") + pc.getqf("suraskel4")
|
|
if foundskel == 4 and pc.countitem(diarypage) == 0 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._021_say)
|
|
elseif foundskel < 4 and pc.countitem(diarypage) == 0 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._022_say)
|
|
elseif foundskel == 5 and pc.countitem(diarypage) > 0 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(string.format(gameforge.new_quest_lv75._023_say, mob_name(new_quest_lv75_mob)))
|
|
elseif foundskel < 5 and pc.countitem(diarypage) > 0 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._024_say)
|
|
else -- this is the initial task what the player must do
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._025_say)
|
|
end
|
|
end
|
|
|
|
-- when player finds a skelleton he or she may return to quest giver
|
|
when 30124.chat.gameforge.new_quest_lv75._050_npcChat begin
|
|
say(gameforge.new_quest_lv75._060_say)
|
|
pc.setqf("suraskel0", 0)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
|
|
when 30125.chat.gameforge.new_quest_lv75._050_npcChat begin
|
|
say(gameforge.new_quest_lv75._060_say)
|
|
pc.setqf("suraskel1", 0)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
|
|
when 30126.chat.gameforge.new_quest_lv75._050_npcChat begin
|
|
say(gameforge.new_quest_lv75._060_say)
|
|
pc.setqf("suraskel2", 0)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
|
|
when 30127.chat.gameforge.new_quest_lv75._050_npcChat begin
|
|
say(gameforge.new_quest_lv75._060_say)
|
|
pc.setqf("suraskel3", 0)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
|
|
when 30128.chat.gameforge.new_quest_lv75._050_npcChat begin
|
|
say(gameforge.new_quest_lv75._060_say)
|
|
pc.setqf("suraskel4", 0)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
-- player kills an ice golem and may recieve a page of the legendary diary
|
|
when 1137.kill begin
|
|
if pc.countitem(diarypage) < 1 then
|
|
if math.random(1,1000) <= new_quest_lv75_dropProb then -- probability if s.th. drops
|
|
pc.give_item2(diarypage)
|
|
notice_multiline(gameforge.new_quest_lv75._070_notice, notice)
|
|
target.vid("__TARGET__", find_npc_by_vnum(new_quest_lv75_npcvnum), gameforge.new_quest_lv75._010_target)
|
|
end
|
|
end
|
|
end
|
|
|
|
when 20090.chat.gameforge.new_quest_lv75._020_set_title begin -- Conversation with Heuk Young befor and after the player found some useful things in the cave
|
|
local foundskel = pc.getqf("suraskel0") + pc.getqf("suraskel1") + pc.getqf("suraskel2") + pc.getqf("suraskel3") + pc.getqf("suraskel4")
|
|
|
|
if pc.count_item(diarypage) == 0 and foundskel == 5 then -- has neither found a page nor a skeleton
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._090_say) -- display this when player gets back to Heuk-Young with empty hands
|
|
elseif pc.count_item(diarypage) > 0 and foundskel == 5 then -- has found one or more pages but no skeleton
|
|
target.delete("__TARGET__")
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._100_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._105_say)
|
|
say(gameforge.new_quest_lv75._109_say)
|
|
-- since the player has not found any skeletons yet we want to make sure that not every seleton he or she finds is a success
|
|
local randomvalue = math.random(0,4) -- defines which skeleton is empty
|
|
if randomvalue == 0 then
|
|
pc.setqf("suraskel0", 0)
|
|
elseif randomvalue == 1 then
|
|
pc.setqf("suraskel1", 0)
|
|
elseif randomvalue == 2 then
|
|
pc.setqf("suraskel2", 0)
|
|
elseif randomvalue == 3 then
|
|
pc.setqf("suraskel3", 0)
|
|
else
|
|
pc.setqf("suraskel4", 0)
|
|
end
|
|
set_state(moreinfo)
|
|
elseif pc.count_item(diarypage) == 0 and foundskel < 5 then -- has found one or more skeletons and no pages
|
|
target.delete("__TARGET__")
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._110_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._115_say)
|
|
if foundskel > 1 then -- if the player has already found more then one skeleton but not all he will miss all the fun finding the pages so we reset some questflags only leaving one skeleton empty
|
|
local counter1 = 0
|
|
repeat
|
|
activeskel = string.format("suraskel%s", counter1)
|
|
if pc.getqf(activeskel) == 0 then
|
|
local counter2 = counter1 +1
|
|
while counter2 < 5 do
|
|
nextskel = string.format("suraskel%s", counter2)
|
|
if pc.getqf(nextskel) == 0 then
|
|
pc.setqf(nextskel, 1)
|
|
end
|
|
counter2 = counter2 +1
|
|
end
|
|
end
|
|
counter1 = counter1 +1
|
|
until counter1 > 4
|
|
else -- player has found all the skeletons or there is something wrong in the questflag -> we reset all the skeletons except one to have a page
|
|
pc.setqf("suraskel0", 1)
|
|
pc.setqf("suraskel1", 1)
|
|
pc.setqf("suraskel2", 1)
|
|
pc.setqf("suraskel3", 1)
|
|
pc.setqf("suraskel4", 1)
|
|
local randomvalue = math.random(0,4) -- defines which skeleton is empty
|
|
if randomvalue == 0 then
|
|
pc.setqf("suraskel0", 0)
|
|
elseif randomvalue == 1 then
|
|
pc.setqf("suraskel1", 0)
|
|
elseif randomvalue == 2 then
|
|
pc.setqf("suraskel2", 0)
|
|
elseif randomvalue == 3 then
|
|
pc.setqf("suraskel3", 0)
|
|
else
|
|
pc.setqf("suraskel4", 0)
|
|
end
|
|
end
|
|
set_state("moreinfo")
|
|
else -- has found one or more skeletons and one or more pages
|
|
target.delete("__TARGET__")
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._120_say)
|
|
set_state("moreinfo")
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
-- the player is send out to find 14 pages of the diary. One page he or she already has
|
|
-- when he or she finds a skeleton it is worth 3 pages
|
|
-- killing an iceman is rewarded 1 page at a chance of 8% each
|
|
-- there are 5 different skelotons in 7 different places so some skeletons are doubles
|
|
-- player can only get the pages of one skeleton once
|
|
state moreinfo begin
|
|
when enter or login begin
|
|
diarypage = 30181 -- page of a book
|
|
new_quest_lv75_mob = 1137 -- Himmels-Eisgolem
|
|
new_quest_lv75_dropProb = 15 -- probability is 1.5%
|
|
new_quest_lv75_npcvnum = 20090
|
|
send_letter(gameforge.new_quest_lv75._020_set_title)
|
|
local story
|
|
end
|
|
|
|
when button or info begin
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._130_say)
|
|
if pc.countitem(diarypage) > 3 and pc.countitem(diarypage) <= 6 then
|
|
story = select(gameforge.new_quest_lv75._140_1_select, gameforge.new_quest_lv75._140_2_select)
|
|
elseif pc.countitem(diarypage) > 6 and pc.countitem(diarypage) <= 9 then
|
|
story = select(gameforge.new_quest_lv75._140_1_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select)
|
|
elseif pc.countitem(diarypage) > 9 and pc.countitem(diarypage) <= 12 then
|
|
story = select(gameforge.new_quest_lv75._140_1_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select)
|
|
elseif pc.countitem(diarypage) > 12 and pc.countitem(diarypage) <= 15 then
|
|
story = select(gameforge.new_quest_lv75._140_1_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select, gameforge.new_quest_lv75._140_5_select)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
if story == 2 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif story == 3 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif story == 4 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
elseif story == 5 then
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
end
|
|
end
|
|
|
|
when 20090.chat.gameforge.new_quest_lv75._020_set_title begin
|
|
if pc.countitem(diarypage) > 1 and pc.countitem(diarypage) <= 3 then
|
|
say(gameforge.new_quest_lv75._170_say)
|
|
say(gameforge.new_quest_lv75._171_say)
|
|
elseif pc.countitem(diarypage) > 3 and pc.countitem(diarypage) <= 6 then
|
|
say(gameforge.new_quest_lv75._172_say)
|
|
say(gameforge.new_quest_lv75._173_say)
|
|
local story = select(gameforge.new_quest_lv75._140_7_select, gameforge.new_quest_lv75._140_2_select)
|
|
elseif pc.countitem(diarypage) > 6 and pc.countitem(diarypage) <= 9 then
|
|
say(gameforge.new_quest_lv75._174_say)
|
|
local story = select(gameforge.new_quest_lv75._140_7_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select)
|
|
elseif pc.countitem(diarypage) > 9 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._175_say)
|
|
say(gameforge.new_quest_lv75._176_say)
|
|
local story = select(gameforge.new_quest_lv75._140_7_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select)
|
|
else
|
|
say(gameforge.new_quest_lv75._177_say)
|
|
say(gameforge.new_quest_lv75._178_say)
|
|
local story = select(gameforge.new_quest_lv75._140_7_select, gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select, gameforge.new_quest_lv75._140_5_select)
|
|
end
|
|
if story == 2 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif story == 3 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif story == 4 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
elseif story == 5 then
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
end
|
|
end
|
|
|
|
when 1137.kill begin
|
|
if math.random(1,1000) <= new_quest_lv75_dropProb *2 then
|
|
if pc.count_item(diarypage) >= 14 then
|
|
-- if the player finds the last page he is sent to the next state
|
|
-- higher propability because player knows what he or she is searching for
|
|
pc.give_item2(diarypage)
|
|
notice_multiline(gameforge.new_quest_lv75._180_notice, notice)
|
|
send_letter(gameforge.new_quest_lv75._185_send_letter)
|
|
set_state("legendarydiary")
|
|
else
|
|
pc.give_item2(diarypage)
|
|
notice_multiline(string.format(gameforge.new_quest_lv75._190_notice, item_name(diarypage), mob_name(new_quest_lv75_mob)), notice)
|
|
send_letter(gameforge.new_quest_lv75._195_send_letter)
|
|
end
|
|
end
|
|
end
|
|
|
|
when 30181.use begin -- if the player right clicks the diarypages it will produce a dialog (not working right now)
|
|
if pc.countitem(diarypage) > 3 and pc.countitem(diarypage) <= 6 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 6 and pc.countitem(diarypage) <= 9 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 9 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
elseif pc.countitem(diarypage) > 12 and pc.countitem(diarypage) <= 15 then
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
end
|
|
|
|
when 30124.chat.gameforge.new_quest_lv75._200_npcChat begin
|
|
if pc.getqf("suraskel0") == 1 and pc.countitem(diarypage) < 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel0", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
if pc.countitem(diarypage) > 2 and pc.countitem(diarypage) <= 5 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 5 and pc.countitem(diarypage) <= 8 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 8 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
wait()
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
elseif pc.getqf("suraskel0") == 1 and pc.countitem(diarypage) >= 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel0", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._220_say)
|
|
set_state("legendarydiary") -- to next state
|
|
else
|
|
say(gameforge.new_quest_lv75._230_say)
|
|
-- say(string.format("Mir fehlen immer noch %s Seiten.", 15 - pc.countitem(diarypage)))
|
|
end
|
|
end
|
|
-- player finds skeletons and clicks on them. Opens a dialog
|
|
when 30125.chat.gameforge.new_quest_lv75._200_npcChat begin
|
|
if pc.getqf("suraskel1") == 1 and pc.countitem(diarypage) < 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel1", 0) -- set the skeleton to empty
|
|
pc.give_item2(diarypage, 3)
|
|
wait() -- depending on how many pages the player has collected he or she gets to read another part of the background story
|
|
if pc.countitem(diarypage) > 2 and pc.countitem(diarypage) <= 5 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 5 and pc.countitem(diarypage) <= 8 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 8 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
wait()
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
elseif pc.getqf("suraskel1") == 1 and pc.countitem(diarypage) >= 12 then --12 +3 pages = 15 or more pages so we can go to next state
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel1", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._220_say)
|
|
set_state("legendarydiary") -- to next state
|
|
else
|
|
say(gameforge.new_quest_lv75._230_say)
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
end
|
|
end
|
|
|
|
when 30126.chat.gameforge.new_quest_lv75._200_npcChat begin
|
|
if pc.getqf("suraskel2") == 1 and pc.countitem(diarypage) < 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel2", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
if pc.countitem(diarypage) > 2 and pc.countitem(diarypage) <= 5 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 5 and pc.countitem(diarypage) <= 8 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 8 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
wait()
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
elseif pc.getqf("suraskel2") == 1 and pc.countitem(diarypage) >= 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel2", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._220_say)
|
|
set_state("legendarydiary") -- to next state
|
|
else
|
|
say(gameforge.new_quest_lv75._230_say)
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
end
|
|
end
|
|
|
|
when 30127.chat.gameforge.new_quest_lv75._200_npcChat begin
|
|
if pc.getqf("suraskel3") == 1 and pc.countitem(diarypage) < 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel3", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
if pc.countitem(diarypage) > 2 and pc.countitem(diarypage) <= 5 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 5 and pc.countitem(diarypage) <= 8 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 8 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
wait()
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
elseif pc.getqf("suraskel3") == 1 and pc.countitem(diarypage) >= 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel3", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._220_say)
|
|
set_state("legendarydiary") -- to next state
|
|
else
|
|
say(gameforge.new_quest_lv75._230_say)
|
|
-- say(string.format("There are only %s pages missing.", 15 - pc.countitem(diarypage)))
|
|
end
|
|
end
|
|
|
|
when 30128.chat.gameforge.new_quest_lv75._200_npcChat begin
|
|
if pc.getqf("suraskel4") == 1 and pc.countitem(diarypage) < 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel4", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
if pc.countitem(diarypage) > 2 and pc.countitem(diarypage) <= 5 then
|
|
say(gameforge.new_quest_lv75._160_1_say)
|
|
elseif pc.countitem(diarypage) > 5 and pc.countitem(diarypage) <= 8 then
|
|
say(gameforge.new_quest_lv75._160_2_say)
|
|
elseif pc.countitem(diarypage) > 8 and pc.countitem(diarypage) <= 12 then
|
|
say(gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say(gameforge.new_quest_lv75._150_say) -- einfach ein paar zusammenhanslose informationen streuen
|
|
end
|
|
wait()
|
|
-- say(string.format("Jetzt fehlen mir noch %s Seiten.", 15 - pc.countitem(diarypage)))
|
|
elseif pc.getqf("suraskel4") == 1 and pc.countitem(diarypage) >= 12 then
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._210_say)
|
|
pc.setqf("suraskel4", 0)
|
|
pc.give_item2(diarypage, 3)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._160_4_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._220_say)
|
|
set_state("legendarydiary") -- to next state
|
|
else
|
|
say(gameforge.new_quest_lv75._230_say)
|
|
-- say(string.format("Mir fehlen immer noch %s Seiten.", 15 - pc.countitem(diarypage)))
|
|
end
|
|
end
|
|
end
|
|
-- When player returns to Heuk-Young she will tell the 5th part of the story and take all pages from the players
|
|
-- inventory. She retrns it in the form a a valuable book which contains all the pages the player found.
|
|
-- It can be clicked to read the story once again and will show a part of the heavens cave map which is
|
|
-- changing every 10 hours to another map. The map never shows the whole cave and lieves out many places.
|
|
-- But it leads the player to the portal for the second layer. The player may sell the book to Soon at a very high price
|
|
-- but he or she will have to bargain with him.
|
|
state legendarydiary begin
|
|
when enter or login begin
|
|
diarypage = 30181 -- page of a book
|
|
new_quest_lv75_mob = 1137 -- Himmels-Eisgolem
|
|
new_quest_lv75_dropProb = 15 -- probability is 1.5%
|
|
new_quest_lv75_npcvnum = 20090
|
|
local goto_npc = 20090 -- Heuk-Young
|
|
local v=find_npc_by_vnum(goto_npc)
|
|
if 0!=v then
|
|
target.vid("__TARGET__", v, gameforge.new_quest_lv75._010_target) -- place questarrow on Heuk-Young
|
|
end
|
|
send_letter(gameforge.new_quest_lv75._240_send_letter)
|
|
end
|
|
|
|
when button or info begin
|
|
say(gameforge.new_quest_lv75._250_say)
|
|
end
|
|
|
|
when 30181.use begin -- if the player right clicks the diarypages it will produce a dialog (not working right now)
|
|
local choosestory = select(gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select, gameforge.new_quest_lv75._140_5_select)
|
|
if choosestory == 1 then
|
|
say (gameforge.new_quest_lv75._160_1_say)
|
|
elseif choosestory == 2 then
|
|
say (gameforge.new_quest_lv75._160_2_say)
|
|
elseif choosestory == 3 then
|
|
say (gameforge.new_quest_lv75._160_3_say)
|
|
else
|
|
say (gameforge.new_quest_lv75._160_4_say)
|
|
end
|
|
end
|
|
|
|
when __TARGET__.target.click begin -- when Heuk-Young is clicked
|
|
q.set_title(gameforge.new_quest_lv75._020_set_title) -- for quest-journal
|
|
target.delete("__TARGET__") -- delete questarrow
|
|
say_title(gameforge.new_quest_lv75._020_set_title) -- displays headline
|
|
say(gameforge.new_quest_lv75._270_say)
|
|
wait()
|
|
pc.remove_item(diarypage, pc.countitem(diarypage))
|
|
say(gameforge.new_quest_lv75._280_say)
|
|
local listen = select(gameforge.new_quest_lv75._290_1_select, gameforge.new_quest_lv75._140_7_select)
|
|
if listen == 1 then
|
|
say(gameforge.new_quest_lv75._160_5_say)
|
|
end
|
|
pc.give_item2(30182) -- Legendary Diary
|
|
pc.change_money(1200000) -- reward for the quest are 1.2 Mil yang and the diry which can be sold for a high price
|
|
pc.give_exp2(90000000)
|
|
pc.setqf("bargainsleft", 3) -- set the number of times the player may turn down an offer of the npc when bargaining for the price of the diary
|
|
q.done()
|
|
set_state("usingbook")
|
|
end
|
|
|
|
|
|
end
|
|
|
|
state usingbook begin
|
|
when enter or login begin
|
|
averagebargain = math.random(26,34)*100000 -- he will offer between 2,600,000 and 3,400,000 Yang but the player may get the double amount of yang
|
|
end
|
|
|
|
when 30182.use begin
|
|
local choosestory = select(gameforge.new_quest_lv75._140_2_select, gameforge.new_quest_lv75._140_3_select, gameforge.new_quest_lv75._140_4_select, gameforge.new_quest_lv75._140_5_select, gameforge.new_quest_lv75._140_6_select)
|
|
if choosestory == 1 then
|
|
say (gameforge.new_quest_lv75._160_1_say)
|
|
elseif choosestory == 2 then
|
|
say (gameforge.new_quest_lv75._160_2_say)
|
|
elseif choosestory == 3 then
|
|
say (gameforge.new_quest_lv75._160_3_say)
|
|
elseif choosestory == 4 then
|
|
say (gameforge.new_quest_lv75._160_4_say)
|
|
elseif choosestory == 5 then
|
|
say (gameforge.new_quest_lv75._160_5_say)
|
|
else
|
|
--local xdays = 30 -- 60*60*24*2 -- calculate 2 days in seconds
|
|
--if pc.getqf(timer) + xdays < get_global_time() then -- players have to wait x days befor they get to see another map in the book
|
|
addimage(20,12, test.tga)
|
|
end
|
|
end
|
|
|
|
when 20023.chat.gameforge.new_quest_lv75._020_set_title begin
|
|
if pc.count_item(30182) < 1 then -- check if the player has a legendary diary in his or her inventory
|
|
say(gameforge.new_quest_lv75._310_say)
|
|
else -- if he or she has then Soon starts talking about the diary
|
|
-- we calculate the amount of Yang the NPC will offer to the player
|
|
say_title(gameforge.new_quest_lv75._020_set_title)
|
|
say(gameforge.new_quest_lv75._320_say)
|
|
say(gameforge.new_quest_lv75._330_say)
|
|
wait()
|
|
say(gameforge.new_quest_lv75._340_say)
|
|
local sell = select(gameforge.new_quest_lv75._350_1_select, gameforge.new_quest_lv75._350_2_select) -- the player may decide if h want to sell the diary or not.
|
|
if sell == 1 and pc.getqf("bargainsleft") > 0 then
|
|
-- when the player is interested to sell the diary and has tried to bargain with the NPC less then 3 times.
|
|
local letmeout = 0 -- this value must be set to 1 to end conversation
|
|
repeat
|
|
say(gameforge.new_quest_lv75._360_say)
|
|
local pcgives = tonumber(input())
|
|
-- player can input the amount of Yang he or she wants to have for the diary
|
|
if pcgives < 1 or pcgives > 999999999 or pc.getqf("bargainsleft") < 1 then
|
|
-- If does not enter a valid value the NPC offers 500k yang.
|
|
say(gameforge.new_quest_lv75._370_say)
|
|
local nobargain = select(gameforge.new_quest_lv75._380_1_select, gameforge.new_quest_lv75._380_2_select)
|
|
if nobargain == 1 then -- player takes the offer
|
|
pc.remove_item(30182, 1) -- removes 1 diary from inventory
|
|
pc.change_money(500000) -- gives amount of yang
|
|
pc.setqf("bargainsleft", 0)
|
|
letmeout = 1 -- conversation will end
|
|
set_state(__COMPLETE__)
|
|
else -- player does not take the offer
|
|
say(gameforge.new_quest_lv75._390_say)
|
|
letmeout = 1
|
|
end
|
|
elseif pcgives >= 1 and pcgives <= 999999999 and pcgives > averagebargain *2 then
|
|
-- the value the player entered is valid but it is greater then twice the amount of yang which the npc want to give
|
|
say(gameforge.new_quest_lv75._400_say)
|
|
local npcmaxbargain = averagebargain + math.random(1,5)*100000
|
|
-- we calculate the offer which the npc will make. Since the player wanted much more the npc adds between 100,000 and half a million yang to his offer
|
|
local reducebargains = pc.getqf("bargainsleft")
|
|
reducebargains = reducebargains -1
|
|
pc.setqf("bargainsleft", reducebargains) -- The number of offers the npc will make is reduced by one
|
|
say(string.format(gameforge.new_quest_lv75._410_say, npcmaxbargain))
|
|
say(gameforge.new_quest_lv75._420_say)
|
|
if pc.getqf("bargainsleft") == 0 then say(gameforge.new_quest_lv75._425_say) end -- this will be shown if there will be no more bargaining
|
|
local makebargain = select(string.format(gameforge.new_quest_lv75._430_1_select, npcmaxbargain), gameforge.new_quest_lv75._430_2_select)
|
|
if makebargain == 1 then -- taks the offer of the npc
|
|
pc.remove_item(30182, 1) -- removes 1 diary from inventory
|
|
pc.change_money(npcmaxbargain) -- maximum amount of yang varies between 3,900,000 and 2,700,000 yang
|
|
letmeout = 1 -- conversation will end
|
|
pc.setqf("bargainsleft", 0)
|
|
set_state(__COMPLETE__)
|
|
else -- player does not take the offer of the npc
|
|
say(gameforge.new_quest_lv75._440_say)
|
|
--letmeout = 1 -- conversation will end
|
|
end
|
|
else -- npc takes the players offer
|
|
say(gameforge.new_quest_lv75._450_say)
|
|
pc.remove_item(30182, 1)
|
|
pc.change_money(pcgives) -- maximum amount of yang varies between 6,800,000 and 5,200,000 yang
|
|
pc.setqf("bargainsleft", 0)
|
|
letmeout = 1 -- conversation will end
|
|
set_state(__COMPLETE__)
|
|
end
|
|
until letmeout == 1 -- bargaining will end when variable is set to 1
|
|
elseif sell == 1 and pc.getqf("bargainsleft") == 0 then
|
|
-- if the player comes back to to the npc but already tried to bargain with him 3 times he will only get half a million yang for the book
|
|
say(gameforge.new_quest_lv75._460_say)
|
|
say(gameforge.new_quest_lv75._470_say)
|
|
local nobargain = select(gameforge.new_quest_lv75._380_1_select, gameforge.new_quest_lv75._380_2_select)
|
|
if nobargain == 1 then -- when player sells the book
|
|
pc.remove_item(30182, 1)
|
|
pc.change_money(500000)
|
|
set_state(__COMPLETE__)
|
|
else -- when player wants to keep the book
|
|
say(gameforge.new_quest_lv75._480_say)
|
|
end
|
|
else -- when player does not want to bargain
|
|
say(gameforge.new_quest_lv75._490_say)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
state __COMPLETE__ begin
|
|
end
|
|
end
|