forked from metin2/server
498 lines
20 KiB
Plaintext
498 lines
20 KiB
Plaintext
quest new_quest_lv52 begin
|
|
state start begin
|
|
when login or levelup with pc.get_level() >= 52 begin -- Quest for level 52 and higher
|
|
set_state(letterfromboss)
|
|
pc.setqf("ghostsleft", 4)
|
|
end
|
|
end
|
|
|
|
-- starts with a quest-letter send to the player
|
|
state letterfromboss begin
|
|
when letter begin
|
|
-- this is the letter
|
|
send_letter(gameforge.new_quest_lv52._010_send_letter)
|
|
end
|
|
when button or info begin
|
|
-- finding out which map (map1) the player has to go to meet his or her first contact
|
|
local map_lookup = { "Yongan", "Joan", "Pyongmoo" }
|
|
local mapname = map_lookup[pc.get_empire()]
|
|
say_title(gameforge.new_quest_lv52._020_say_title)
|
|
say_reward(gameforge.new_quest_lv52._021_say_reward)
|
|
say(string.format(gameforge.new_quest_lv52._022_say, mapname)) -- where Baek-Go can be found. See if-then-else argument above.
|
|
set_state(askbeakgo)
|
|
end
|
|
|
|
when enter begin
|
|
if pc.getqf("ghostsleft") == 0 then
|
|
pc.setqf("ghostsleft", 4)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- This state if for the conversation with Baek-Go which the player is told to go in the letter above.
|
|
state askbeakgo begin
|
|
-- This Function is for finding out if the player is in the right map so we can place the questarrow right.
|
|
when login or enter begin
|
|
send_letter(gameforge.new_quest_lv52._030_set_title)
|
|
q.start() -- creating a journal entery int the quest-journal
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title) -- setting the title of the new quest-journal
|
|
if is_destination_village(1) then --
|
|
local position = find_npc_by_vnum(20018) -- Locate Baek-Go
|
|
if position != 0 then
|
|
target.vid("__TARGET__", position, gameforge.new_quest_lv52._035_target) -- place questarrow on Baek-Go
|
|
end
|
|
end
|
|
end
|
|
when button or info begin -- this event is triggered when the quest-journal is clicked. A conversation window will open.
|
|
say_title(gameforge.new_quest_lv52._030_set_title)
|
|
say(gameforge.new_quest_lv52._040_say)
|
|
say("")
|
|
say(string.format(gameforge.new_quest_lv52._043_say, get_map_name_by_number(1)))
|
|
end
|
|
|
|
when 20018.chat.gameforge.new_quest_lv52._030_set_title begin -- when Baek-Go is clicked this event is triggered
|
|
target.delete("__TARGET__")
|
|
say_title(gameforge.new_quest_lv52._044_say_title)
|
|
say(gameforge.new_quest_lv52._041_say)
|
|
q.done()
|
|
local doquest = select(gameforge.new_quest_lv52._042_select, gameforge.subquest_12._50_select)
|
|
if doquest ==1 then
|
|
set_state(askyuhwan)
|
|
else
|
|
say_title(gameforge.new_quest_lv52._044_say_title)
|
|
say(gameforge.new_quest_lv52._046_say)
|
|
return
|
|
end
|
|
end
|
|
when 20355.chat.gameforge.new_quest_lv52._030_set_title begin -- If the player should click the Boss he or she will get a reaction from him even though it is not needed for the quest.
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._042_say)
|
|
local doquest = select(gameforge.new_quest_lv52._055_select, gameforge.subquest_12._50_select, gameforge.new_quest_lv75._290_2_select)
|
|
if doquest ==1 then
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._056_say)
|
|
elseif doquest == 3 then
|
|
say(gameforge.subquest_06._60_say)
|
|
local abortquest = select(gameforge.subquest_06._70_select, gameforge.subquest_06._80_select)
|
|
if abortquest == 1 then
|
|
pc.setqf("ghostsleft", 0)
|
|
target.delete("__TARGET__")
|
|
set_state(__GIVEUP__)
|
|
else
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.subquest_11._80_say)
|
|
end
|
|
return
|
|
else
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._85_say)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- This state is for the second npc to talk to - Yu-Hwan. The player is send to him by Baek-Go in the state above.
|
|
state askyuhwan begin
|
|
|
|
when login or enter begin
|
|
send_letter(gameforge.new_quest_lv52._030_set_title)
|
|
q.start() -- starting a new quest-journal since the player may logout or changing maps during this quest
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title) -- this is the tilte of the quest-journal
|
|
if is_destination_village(2) then
|
|
local position = find_npc_by_vnum(20017) -- locating Yu-Hwan in map2...
|
|
if position != 0 then
|
|
target.vid("__TARGET2__", position, gameforge.new_quest_lv52._050_target) -- ...and placing a questarrow on him
|
|
end
|
|
end
|
|
end
|
|
when button or info begin -- this event is triggered when the player looks into the quest-journal to find out what to do
|
|
local mapname
|
|
|
|
-- the following text will appear in the conversation window when clicking the quest-journal of this quest
|
|
say_title(gameforge.new_quest_lv52._030_set_title)
|
|
say(gameforge.new_quest_lv52._051_say)
|
|
say("")
|
|
say(string.format(gameforge.new_quest_lv52._045_say, get_map_name_by_number(3)))
|
|
end
|
|
when 20017.chat.gameforge.new_quest_lv52._030_set_title begin -- event triggered when Yu-Hwan is clicked. A conversation window will appear.
|
|
target.delete("__TARGET2__")
|
|
say_title(gameforge.new_quest_lv52._049_say_title)
|
|
say(gameforge.new_quest_lv52._052_say)
|
|
say(gameforge.new_quest_lv52._053_say)
|
|
q.done()
|
|
set_state(gotoboss)
|
|
end
|
|
when 20355.chat.gameforge.new_quest_lv52._030_set_title begin -- It is not neccessary for the quest but the player may get the idea to talk to the Boss who is the quest-giver and will get a reaction from him.
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say_reward(gameforge.new_quest_lv52._055_say_reward)
|
|
wait()
|
|
say_pc_name()
|
|
say_reward(gameforge.new_quest_lv52._056_say_reward)
|
|
end
|
|
end
|
|
|
|
-- After talking to Yu-Hwan the player is send to the Boss and to this state.
|
|
state gotoboss begin
|
|
-- again the player has to switch maps. To figure out if it is the right one we use this function again.
|
|
when login or enter begin
|
|
send_letter(gameforge.new_quest_lv52._030_set_title)
|
|
q.start() -- we need a new quest-journal entery since the player may logout or change maps
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
if is_destination_village(1) then --
|
|
local position = find_npc_by_vnum(20355) -- locate the Boss in map1
|
|
if position != 0 then
|
|
target.vid("__TARGET3__", position, gameforge.new_quest_lv52._060_target) -- place questarrow on Boss
|
|
end
|
|
end
|
|
end
|
|
when button or info begin -- this event is triggered when the quest-journal is clicked - it will open a conversation window
|
|
local map_lookup = { "Yongan", "Joan", "Pyongmoo" }
|
|
local mapname = map_lookup[pc.get_empire()]
|
|
say_title(gameforge.new_quest_lv52._030_set_title)
|
|
say(string.format(gameforge.new_quest_lv52._061_say, mapname))
|
|
end
|
|
when 20355.chat.gameforge.new_quest_lv52._030_set_title begin -- when the boss is clicked a conversation starts
|
|
target.delete("__TARGET3__")
|
|
local MorF = pc.get_sex() -- here we find out the characters sex
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._062_say_reward )
|
|
wait()
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
if MorF == 0 then
|
|
say(gameforge.new_quest_lv52._063_say_reward) -- say this if character is male
|
|
else
|
|
say(gameforge.new_quest_lv52._064_say_reward) -- say this if character is female
|
|
end
|
|
say(gameforge.new_quest_lv52._065_say_reward)
|
|
say(gameforge.new_quest_lv52._066_say_reward)
|
|
wait()
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._067_say_reward)
|
|
wait()
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._068_say_reward)
|
|
say(gameforge.new_quest_lv52._069_say_reward)
|
|
wait()
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._070_say_reward)
|
|
wait()
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._071_say_reward)
|
|
local answer = select(gameforge.new_quest_lv52._080_1_select, gameforge.new_quest_lv52._080_2_select, gameforge.new_quest_lv52._080_3_select) -- multiple choice answer
|
|
if answer == 1 then -- positive answer: Doing it for the village
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._081_say_reward)
|
|
elseif answer == 2 then -- positive answer: proving oneself
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._082_say_reward)
|
|
elseif answer == 3 then -- negative answer
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._083_say_reward)
|
|
wait()
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._084_say_reward)
|
|
wait()
|
|
say_pc_name()
|
|
local answertwo = select(gameforge.new_quest_lv52._090_1_select, gameforge.new_quest_lv52._090_2_select)
|
|
if answertwo == 1 then -- think twice positive answer
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._091_say_reward)
|
|
elseif answertwo == 2 then -- don't wanne do this quest answer
|
|
say_pc_name()
|
|
say(gameforge.new_quest_lv52._092_say_reward )
|
|
wait()
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._093_say_reward) -- finishing quest
|
|
say(string.format(gameforge.new_quest_lv52._093_say_reward_exp, 20000))
|
|
say(string.format(gameforge.new_quest_lv52._093_say_reward_gold, 25000))
|
|
pc.change_money(25000)
|
|
pc.give_exp2(20000)
|
|
q.done()
|
|
pc.setqf("ghostsleft", 0)
|
|
clear_letter()
|
|
set_state(__GIVEUP__)
|
|
return
|
|
else
|
|
notice_multiline(gameforge.new_quest_lv52._100_notice, notice)
|
|
end
|
|
end
|
|
wait() -- continue positive conversation
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
say(gameforge.new_quest_lv52._110_say_reward)
|
|
say(gameforge.new_quest_lv52._111_say_reward)
|
|
q.done()
|
|
set_state(revenge)
|
|
end
|
|
end
|
|
|
|
-- in this stae the fighting is done
|
|
state revenge begin
|
|
|
|
when enter begin
|
|
if pc.getqf("ghostsleft") == 0 then
|
|
pc.setqf("ghostsleft", 4)
|
|
end
|
|
end
|
|
|
|
when login or enter begin
|
|
new_quest_lv52_mob1 = 706
|
|
new_quest_lv52_mob2 = 707
|
|
new_quest_lv52_mob3 = 756
|
|
new_quest_lv52_mob4 = 757
|
|
new_quest_lv52_successMulti = 2
|
|
new_quest_lv52_neededAmount = 4
|
|
|
|
letterindex = new_quest_lv52_neededAmount - pc.getqf("ghostsleft")
|
|
if letterindex == 0 then
|
|
send_letter(gameforge.new_quest_lv52._030_set_title)
|
|
elseif letterindex == 1 then
|
|
send_letter(gameforge.new_quest_lv52._170_send_letter)
|
|
elseif letterindex == 2 then
|
|
send_letter(gameforge.new_quest_lv52._171_send_letter)
|
|
elseif letterindex == 3 then
|
|
send_letter(gameforge.new_quest_lv52._172_send_letter)
|
|
else
|
|
send_letter(gameforge.new_quest_lv52._173_send_letter)
|
|
end
|
|
q.start()
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
end
|
|
when button or info begin
|
|
local sayMob1Name = mob_name(706)
|
|
local sayMob2Name = mob_name(707)
|
|
local sayMob3Name = mob_name(756)
|
|
local sayMob4Name = mob_name(757)
|
|
say_title(gameforge.new_quest_lv52._120_set_title)
|
|
|
|
letterindex = new_quest_lv52_neededAmount - pc.getqf("ghostsleft")
|
|
-- these ate the answers which will appear in the quest-journal after every successful kill
|
|
if letterindex == 1 then
|
|
say_reward(gameforge.new_quest_lv52._130_say_reward)
|
|
say(gameforge.new_quest_lv52._131_say)
|
|
say(gameforge.new_quest_lv52._132_say)
|
|
elseif letterindex == 2 then
|
|
say_reward(gameforge.new_quest_lv52._140_say_reward)
|
|
say(gameforge.new_quest_lv52._141_say)
|
|
say(gameforge.new_quest_lv52._132_say)
|
|
elseif letterindex == 3 then
|
|
say_reward(gameforge.new_quest_lv52._150_say_reward)
|
|
say(gameforge.new_quest_lv52._151_say)
|
|
say(gameforge.new_quest_lv52._132_say)
|
|
elseif letterindex == 4 then
|
|
|
|
else
|
|
-- this quest-journal entery is shown befor the first mob is killed
|
|
say(gameforge.new_quest_lv52._160_say)
|
|
say(gameforge.new_quest_lv52._161_say)
|
|
say("")
|
|
say(string.format(gameforge.new_quest_lv52._162_say,get_map_name_by_number(64)))
|
|
end
|
|
end
|
|
when 706.kill or 707.kill or 756.kill or 757.kill begin -- Mob1 - Mob4
|
|
local minimum_y = 671 -- this is the minumum Y value
|
|
local value_y = pc.get_local_y() - minimum_y
|
|
-- this if-then-else construct controls if the the killed mob can be counted as a valid kill
|
|
if pc.get_local_y() >= 671 and pc.get_local_y() <= 906 then
|
|
if pc.get_local_x() >= 603 and pc.get_local_x() < 778 then -- handles west side of the tower
|
|
local minimum_x = 603
|
|
local value_x = value_y*35/47 -- calculation of slope triangle
|
|
if pc.get_local_x() >= value_x + minimum_x then
|
|
if pc.getqf("ghostsleft") > 0 then
|
|
local successProb = pc.getqf("ghostsleft")*new_quest_lv52_successMulti
|
|
if math.random(1,100) < successProb then
|
|
local index = pc.getqf("ghostsleft") -1
|
|
pc.setqf("ghostsleft", index) -- one ghost less to be freed
|
|
if index == 3 then
|
|
letterindex = 1
|
|
send_letter(gameforge.new_quest_lv52._170_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 2 then
|
|
letterindex = 2
|
|
send_letter(gameforge.new_quest_lv52._171_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 1 then
|
|
letterindex = 3
|
|
send_letter(gameforge.new_quest_lv52._172_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 0 then
|
|
if pc.get_job() == 0 then -- class sensitive reward
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", 50403)
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", number(50416, 50420))
|
|
else
|
|
pc.setqf("lv52reward", 50300)
|
|
end
|
|
elseif pc.get_job() == 1 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", number(50431, 50435))
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", 50449)
|
|
else
|
|
pc.setqf("lv52reward", 50301)
|
|
end
|
|
elseif pc.get_job() == 2 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", 50464)
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", number(50476, 50481))
|
|
else
|
|
pc.setqf("lv52reward", 50302)
|
|
end
|
|
elseif pc.get_job() == 3 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", number(50491, 50496))
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", 50509)
|
|
else
|
|
pc.setqf("lv52reward", 50303)
|
|
end
|
|
else
|
|
pc.setqf("lv52reward", 1)
|
|
end
|
|
q.done()
|
|
set_state(backhome)
|
|
else
|
|
notice("There is something wrong with the questflag!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("Pech gehabt, nix passiert!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("You already freed all the ghosts!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("This one does not count!") -- to be deleted after testing
|
|
end
|
|
elseif pc.get_local_x() >= 778 and pc.get_local_x() <= 906 then -- handles east side of the tower
|
|
local maximum_x = 906
|
|
local value_x = value_y*128/235 -- calculation of slope triangle
|
|
if pc.get_local_x() <= maximum_x - value_x then
|
|
-- notice("This one may count!") -- to be deleted after testing
|
|
if pc.getqf("ghostsleft") > 0 then
|
|
local successProb = pc.getqf("ghostsleft")*new_quest_lv52_successMulti
|
|
if math.random(1,100) < successProb then
|
|
local index = pc.getqf("ghostsleft") -1
|
|
pc.setqf("ghostsleft", index) -- one ghost less to be freed
|
|
if index == 3 then
|
|
letterindex = 1
|
|
send_letter(gameforge.new_quest_lv52._170_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 2 then
|
|
letterindex = 2
|
|
send_letter(gameforge.new_quest_lv52._171_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 1 then
|
|
letterindex = 3
|
|
send_letter(gameforge.new_quest_lv52._172_send_letter)
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
elseif index == 0 then
|
|
if pc.get_job() == 0 then -- class sensitive reward
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", number(50401, 50405))
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", 50418)
|
|
else
|
|
pc.setqf("lv52reward", 70037)
|
|
end
|
|
elseif pc.get_job() == 1 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", 50434)
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", number(50446, 50450))
|
|
else
|
|
pc.setqf("lv52reward", 70037)
|
|
end
|
|
elseif pc.get_job() == 2 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", number(50461, 50466))
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", 50479)
|
|
else
|
|
pc.setqf("lv52reward", 70037)
|
|
end
|
|
elseif pc.get_job() == 3 then
|
|
if pc.get_skill_group() == 1 then
|
|
pc.setqf("lv52reward", 50495)
|
|
elseif pc.get_skill_group() == 2 then
|
|
pc.setqf("lv52reward", number(50506, 50511))
|
|
else
|
|
pc.setqf("lv52reward", 70037)
|
|
end
|
|
else
|
|
pc.setqf("lv52reward", 1)
|
|
end
|
|
q.done()
|
|
set_state(backhome)
|
|
else
|
|
-- notice("There is something wrong with the questflag!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("Pech gehabt, nix passiert!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("You already freed all the ghosts!") -- to be deleted after testing
|
|
end
|
|
else
|
|
-- notice("This one does not count!") -- to be deleted after testing
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- when the killing is done we go back to the boss
|
|
state backhome begin
|
|
when login or enter begin
|
|
send_letter(gameforge.new_quest_lv52._030_set_title)
|
|
q.start()
|
|
q.set_title(gameforge.new_quest_lv52._030_set_title)
|
|
if is_destination_village(1) then --
|
|
local position = find_npc_by_vnum(20355) -- Boss
|
|
if position != 0 then
|
|
target.vid("__TARGET4__", position, gameforge.new_quest_lv52._060_target) -- place questarrow on Boss
|
|
end
|
|
end
|
|
end
|
|
when button or info begin -- here the last letter from the boss is handled
|
|
say_title(gameforge.new_quest_lv52._010_send_letter)
|
|
say_reward(gameforge.new_quest_lv52._180_say_reward)
|
|
local reward = pc.getqf("lv52reward")
|
|
say(string.format(gameforge.new_quest_lv52._181_say, item_name(reward)))
|
|
--EDIT Arne 24Sept09, Reason: Did not fit in UI
|
|
say(string.format(gameforge.new_quest_lv52._182_say, get_map_name_by_number(1)))
|
|
end
|
|
when 20355.chat.gameforge.new_quest_lv52._030_set_title begin -- when the boss is clicked
|
|
target.delete("__TARGET4__")
|
|
say_title(gameforge.new_quest_lv52._054_say_title)
|
|
local MorF = pc.get_sex() -- is the character male of female
|
|
local isvalid = pc.getqf("ghostsleft")
|
|
if isvalid == 0 then
|
|
local reward = pc.getqf("lv52reward")
|
|
say(string.format(gameforge.new_quest_lv52._183_say_reward, item_name(reward)))
|
|
say(gameforge.new_quest_lv52._184_say_reward)
|
|
if MorF == 0 then
|
|
say(gameforge.new_quest_lv52._185_say_reward) -- if character is male
|
|
else
|
|
say(gameforge.new_quest_lv52._186_say_reward) -- if character is female
|
|
end
|
|
pc.change_money(270000)
|
|
pc.give_exp2(3300000)
|
|
pc.give_item2(reward)
|
|
pc.setqf("lv52reward", 0)
|
|
else
|
|
notice("Questflag got manipulated! You shouldn't be here!!!") -- if the player cheated
|
|
end
|
|
q.done()
|
|
clear_letter()
|
|
set_state(__COMPLETE__)
|
|
end
|
|
end
|
|
|
|
------ give up ------------------------------------------------------------------------------------------------------
|
|
state __GIVEUP__ begin
|
|
end
|
|
------ complete ------------------------------------------------------------------------------------------------------
|
|
state __COMPLETE__ begin
|
|
end
|
|
end
|