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

448 lines
19 KiB
Plaintext
Raw Normal View History

quest pre_event_heavens_cave begin
state start begin
when login with pc.get_level() >= 15 begin -- tbd
pc.setqf("personalvalue", 0)
set_state(pre_event_heavens_cave)
end -- tbd
end
state pre_event_heavens_cave begin
when enter with pc.is_gm() begin -- tbd
send_letter("Pre-Event Helper Script") -- tbd
end -- tbd
when button or info begin -- tbd
say_reward("Warning!") -- tbd
say("This dialog is not part of the Heavens Cave Pre-Event!!!") -- tbd
say("It's purpose is to help in the testing of the event. Only run the script ONCE PER SERVER because it automaticly starts the event which should only be done 1 time!") -- tbd
say("You may use it to resets - using Stop and then Start - every variable to its default value. It only resets variable concerning the event and not your character's variables.") -- tbd
say("The tickets related to this event are: 0030149, 0030150 and 0031479.") -- tbd
say("Have Fun!") -- tbd
say("") -- tbd
say("Benjamin") -- tbd
local startevent = select("Start the Event", "Stop the Event", "Close") -- tbd
if startevent == 1 then
game.set_event_flag("pre_event_hc", 1) -- tbd
game.set_event_flag("glyphstones_collected", 0) -- tbd
game.set_event_flag("hc_drop", 100) -- tbd
game.set_event_flag("gold_collected", 0) -- tbd
-- event flags for the score table
game.set_event_flag("score0",100) -- tbd
game.set_event_flag("score1",90) -- tbd
game.set_event_flag("score2",80) -- tbd
game.set_event_flag("score3",70) -- tbd
game.set_event_flag("score4",60) -- tbd
game.set_event_flag("score5",50) -- tbd
game.set_event_flag("score6",40) -- tbd
game.set_event_flag("score7",30) -- tbd
game.set_event_flag("score8",20) -- tbd
game.set_event_flag("score9",10) -- tbd
-- how many yang did the player spent on Heuk-Young
elseif startevent == 2 then
game.set_event_flag("pre_event_hc", 0) -- tbd
game.set_event_flag("hc_drop", 0) -- tbd
else -- tbd
return -- tbd
end -- tbd
end -- tbd
function getherbs(maxlevel)
local range = maxlevel -12
range = math.floor(range /4)
local randomvalue = math.random(1,range)
local herbvnum=0
if randomvalue == 2 then
herbvnum = 50722 -- Glockenblume - LV20
elseif randomvalue == 3 then
herbvnum = 50723 -- Kakibl<62>te - LV24
elseif randomvalue == 4 then
herbvnum = 50724 -- Gango-Wurzel - LV28
elseif randomvalue == 5 or randomvalue == 6 then
herbvnum = 50725 -- Flieder - LV32
elseif randomvalue == 7 or randomvalue == 8 then
herbvnum = 50726 -- Tue-Pilz - LV40
elseif randomvalue == 9 then
herbvnum = 50727 -- Alpenrose - LV46
elseif randomvalue >= 10 then
herbvnum = 50728 -- Maulbeeren - LV50
else
herbvnum = 50721 -- Pfirsichbl<62>te - LV16
end
return herbvnum
end
function getpotion(maxlevel)
local randomvalue = math.random(1,6)
local potionvnum = 0
if maxlevel <= 18 then
if randomvalue <= 3 then potionvnum = 27100 -- Gr<47>ner Trank(K)
else potionvnum = 27103 -- Violetter Trank(K)
end
elseif maxlevel > 18 and maxlevel <= 25 + randomvalue then
if randomvalue == 1 then potionvnum = 27100 -- Gr<47>ner Trank(K)
elseif randomvalue == 2 then potionvnum = 27103 -- Violetter Trank(K)
elseif randomvalue == 3 then potionvnum = 27002 -- Roter Trank(M)
elseif randomvalue == 4 then potionvnum = 27005 -- Blauer Trank(M)
elseif randomvalue == 5 then potionvnum = 27101 -- Gr<47>ner Trank(M)
else potionvnum = 27104 -- Violetter Trank(M)
end
else
if randomvalue == 1 then potionvnum = 27101 -- Gr<47>ner Trank(M)
elseif randomvalue == 2 then potionvnum = 27104 -- Violetter Trank(M)
elseif randomvalue == 3 then potionvnum = 27003 -- Roter Trank(G)
elseif randomvalue == 4 then potionvnum = 27006 -- Blauer Trank(G)
elseif randomvalue == 5 then potionvnum = 27102 -- Gr<47>ner Trank(G)
else potionvnum = 27105 -- Violetter Trank(G)
end
end
return potionvnum
end
function getsushi()
local randomvalue = math.random(1,5)
local sushivnum = 0
if randomvalue == 1 then sushivnum = 50091 -- Goldfisch-Sushi
elseif randomvalue == 2 then sushivnum = 50092 -- Karpfen-Sushi
elseif randomvalue == 3 then sushivnum = 50093 -- Lachs-Sushi
elseif randomvalue == 4 then sushivnum = 50094 -- Katzenfisch-Sushi
else sushivnum = 50901 -- empty bottle
end
return sushivnum
end
when 20090.chat.gameforge.pre_event_heavens_cave._10_npcChat with pc.get_level() >= 15 and pc.get_map_index() <= 43 and game.get_event_flag("hc_drop") > 0 begin
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._30_say)
if pc.get_map_index() == 3 then
say(gameforge.pre_event_heavens_cave._40_say)
elseif pc.get_map_index() == 23 then
say(gameforge.pre_event_heavens_cave._50_say)
elseif pc.get_map_index() == 43 then
say(gameforge.pre_event_heavens_cave._60_say)
end
wait()
say(gameforge.pre_event_heavens_cave._70_say)
say(gameforge.pre_event_heavens_cave._80_say)
say_item_vnum(30178)
local maxlevel = pc.get_level()
local glyphcount = 0
glyphcount = pc.count_item(30178)
if glyphcount > 0 then -- Glyphstone
local giveglyphstone = select(gameforge.pre_event_heavens_cave._90_1_select, gameforge.pre_event_heavens_cave._90_2_select)
if giveglyphstone == 1 then
say_pc_name()
say(gameforge.pre_event_heavens_cave._100_say)
local pickpotion = 0
if pc.get_level() < 24 and pc.get_level() >= 20 then
pickpotion = math.random(0,8)
elseif pc.get_level() < 20 then
pickpotion = math.random(0,4)
else
pickpotion = math.random(0,9)
end
--notice(string.format("pickpotion = %d", pickpotion)) -- tbd
local potion1=0
local potion2=0
local potion3=0
if pickpotion <= 4 then
-- Find me 3 types of reward items; 1 juice, 1 potion and 1 sushi
potion1 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion1 = %d", potion1)) -- tbd
potion2 = pre_event_heavens_cave.getpotion(maxlevel)
--notice(string.format("potion2 = %d", potion2)) -- tbd
potion3 = pre_event_heavens_cave.getsushi()
--notice(string.format("potion3 = %d", potion3)) -- tbd
elseif pickpotion == 5 or pickpotion == 6 then
-- Find me 3 types of reward items; 2 juice and 1 potion and make sure we don't got the same juice twice
potion1 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion1 = %d", potion1)) -- tbd
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion2 = %d", potion2)) -- tbd
while potion2 == potion1 do
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("changed potion2 to %d", potion2)) -- tbd
end
potion3 = pre_event_heavens_cave.getpotion(maxlevel)
--notice(string.format("potion3 = %s", potion3)) -- tbd
elseif pickpotion == 7 or pickpotion == 8 then
-- Find me 3 types of reward items; 2 juice and 1 sushi and make sure we don't got the same juice twice
potion1 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion1 = %d", potion1)) -- tbd
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion2 = %d", potion2)) -- tbd
while potion2 == potion1 do
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("changed potion2 to %d", potion2)) -- tbd
end
potion3 = pre_event_heavens_cave.getsushi()
--notice(string.format("potion3 = %d", potion3)) -- tbd
else
-- Find me 3 types of reward items; 3 juice and make sure we don't got the same juice twice
potion1 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion1 = %d", potion1)) -- tbd
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion2 = %d", potion2)) -- tbd
while potion2 == potion1 do
potion2 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("changed potion2 to %d", potion2)) -- tbd
end
potion3 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("potion3 = %d", potion3)) -- tbd
while potion3 == potion1 or potion3 == potion2 do
potion3 = pre_event_heavens_cave.getherbs(maxlevel)
--notice(string.format("changed potion3 to %d", potion3)) -- tbd
end
end
-- potion1 is a herb
local potion1amount = pc.count_item(30178) *7
local potion2amount = 0
local potion3amount = 0
if potion2 < 27200 then -- it is a potion
potion2amount = pc.count_item(30178) *3
else -- it is a herb
potion2amount = pc.count_item(30178) *5
end
if potion3 < 27200 then -- it is a potion
potion3amount = pc.count_item(30178) *2
elseif potion1 > 50800 then -- it is Sushi
potion3amount = pc.count_item(30178) *6
else -- it is a herb
potion3amount = pc.count_item(30178) *3
end
wait()
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._110_say)
say(string.format("%dx", potion1amount))
say_item_vnum(potion1)
say(string.format("%dx", potion2amount))
say_item_vnum(potion2)
wait()
say(string.format(gameforge.pre_event_heavens_cave._120_say, potion3amount))
say_item_vnum(potion3)
local choosereward =
select(
string.format("%d %s", potion1amount, item_name(potion1)),
string.format("%d %s", potion2amount, item_name(potion2)),
string.format("%d %s", potion3amount, item_name(potion3)),
gameforge.pre_event_heavens_cave._130_4_select)
if choosereward < 4 then
local glyphstones = pc.count_item(30178)
pc.remove_item(30178, glyphstones)
local glyphcount = game.get_event_flag("glyphstones_collected")
glyphcount = glyphcount + glyphstones
game.set_event_flag("glyphstones_collected", glyphcount)
if choosereward == 1 then pc.give_item2(potion1, potion1amount)
elseif choosereward == 2 then pc.give_item2(potion2, potion2amount)
elseif choosereward == 3 then pc.give_item2(potion3, potion3amount)
end
say(gameforge.pre_event_heavens_cave._20_say)
say(string.format(gameforge.pre_event_heavens_cave._140_say, glyphcount))
say_pc_name()
local eventstory = select(gameforge.pre_event_heavens_cave._150_1_select, gameforge.pre_event_heavens_cave._150_2_select)
if eventstory == 1 then
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._160_say)
say(gameforge.pre_event_heavens_cave._170_say)
say(gameforge.pre_event_heavens_cave._180_say)
say(gameforge.pre_event_heavens_cave._190_say)
say(gameforge.pre_event_heavens_cave._200_say)
wait()
if pc.getqf("goldstatus") == 0 then
say(string.format(gameforge.pre_event_heavens_cave._210_say, item_name(30180)))
say_item_vnum(30180) -- Dragongod Amulet
pc.setqf("goldstatus", 2)
say(string.format(gameforge.pre_event_heavens_cave._220_say, mob_name(20009), mob_name(9012)))
wait()
say(gameforge.pre_event_heavens_cave._230_say)
else
say(gameforge.pre_event_heavens_cave._240_say)
end
say_item_vnum(50626) -- mined gold 200 Yang
say_item_vnum(80008) -- gold nugget 100.000 Yang
wait()
say("")
say_item_vnum(80005) -- gold bar 500.000 Yang
say_item_vnum(80006) -- gold bar 1.000.000 Yang
say_item_vnum(80007) -- gold bar 2.000.000 Yang
end
else
say(gameforge.pre_event_heavens_cave._250_say)
end
else
--notice("failed") -- tbd
end
end
end
when 20090.chat.gameforge.pre_event_heavens_cave._260_npcChat with pc.getqf("goldstatus") > 0 begin
if game.get_event_flag("hc_drop") == 0 then
set_state(__COMPLETE__)
end
if pc.count_item(80005) == 0 and pc.count_item(80006) == 0 and pc.count_item(80007) == 0 and pc.count_item(80008) == 0 and pc.count_item(50626) == 0 then
say(gameforge.pre_event_heavens_cave._20_say)
say(string.format(gameforge.pre_event_heavens_cave._270_say, item_name(30180)))
say(item_name(80005)) -- gold bar 500.000 Yang
say(item_name(80006)) -- gold bar 1.000.000 Yang
say(item_name(80007)) -- gold bar 2.000.000 Yang
say(item_name(80008)) -- gold nugget 100.000 Yang
say(item_name(50626)) -- mined gold 200 Yang
return
end
say(gameforge.pre_event_heavens_cave._280_say)
local checkinventory = {}
checkinventory[1] = {}
checkinventory[1]["vnum"] = 80005
checkinventory[2] = {}
checkinventory[2]["vnum"] = 80006
checkinventory[3] = {}
checkinventory[3]["vnum"] = 80007
checkinventory[4] = {}
checkinventory[4]["vnum"] = 80008
checkinventory[5] = {}
checkinventory[5]["vnum"] = 50626
notice(checkinventory[1]["vnum"])
local goldcounter = 1
repeat
checkinventory[goldcounter]["amount"] = pc.count_item(checkinventory[goldcounter].vnum)
checkinventory[goldcounter]["name"] = item_name(checkinventory[goldcounter].vnum)
goldcounter = goldcounter +1
until goldcounter > 5
notice(checkinventory[1]["amount"])
notice(checkinventory[1]["name"])
local gold = {}
local buttoncounter = 1
goldcounter = 1
repeat
if checkinventory[goldcounter]["amount"] > 0 then
gold[buttoncounter] = checkinventory[goldcounter]
buttoncounter = buttoncounter +1
end
goldcounter = goldcounter +1
until goldcounter > 5
local choosegold = 0
if buttoncounter == 2 then
choosegold = select(gameforge.pre_event_heavens_cave._290_select, string.format("%dx %s", gold[1].amount, gold[1].name))
elseif buttoncounter == 3 then
choosegold = select(gameforge.pre_event_heavens_cave._290_select, string.format("%dx %s", gold[1].amount, gold[1].name), string.format("%dx %s", gold[2].amount, gold[2].name))
elseif buttoncounter == 4 then
choosegold = select(gameforge.pre_event_heavens_cave._290_select, string.format("%dx %s", gold[1].amount, gold[1].name), string.format("%dx %s", gold[2].amount, gold[2].name), string.format("%dx %s", gold[3].amount, gold[3].name))
elseif buttoncounter == 5 then
choosegold = select(gameforge.pre_event_heavens_cave._290_select, string.format("%dx %s", gold[1].amount, gold[1].name), string.format("%dx %s", gold[2].amount, gold[2].name), string.format("%dx %s", gold[3].amount, gold[3].name), string.format("%dx %s", gold[4].amount, gold[4].name))
elseif buttoncounter == 6 then
choosegold = select(gameforge.pre_event_heavens_cave._290_select, string.format("%dx %s", gold[1].amount, gold[1].name), string.format("%dx %s", gold[2].amount, gold[2].name), string.format("%dx %s", gold[3].amount, gold[3].name), string.format("%dx %s", gold[4].amount, gold[4].name), string.format("%dx %s", gold[5].amount, gold[5].name))
end
if choosegold > 1 then
choosegold = choosegold -1
pc.remove_item(gold[choosegold].vnum, 1)
local globalvalue = 0
local personalvalue = 0
if gold[choosegold].vnum == 80005 then
globalvalue = 500000 + game.get_event_flag("gold_collected")
personalvalue = 500000 + pc.getqf("personalvalue")
game.set_event_flag("gold_collected", globalvalue)
pc.setqf("personalvalue", personalvalue)
elseif gold[choosegold].vnum == 80006 then
globalvalue = 1000000 + game.get_event_flag("gold_collected")
personalvalue = 1000000 + pc.getqf("personalvalue")
game.set_event_flag("gold_collected", globalvalue)
pc.setqf("personalvalue", personalvalue)
elseif gold[choosegold].vnum == 80007 then
globalvalue = 2000000 + game.get_event_flag("gold_collected")
personalvalue = 2000000 + pc.getqf("personalvalue")
game.set_event_flag("gold_collected", globalvalue)
pc.setqf("personalvalue", personalvalue)
elseif gold[choosegold].vnum == 80008 then
globalvalue = 100000 + game.get_event_flag("gold_collected")
personalvalue = 100000 + pc.getqf("personalvalue")
game.set_event_flag("gold_collected", globalvalue)
pc.setqf("personalvalue", personalvalue)
elseif gold[choosegold].vnum == 50626 then
globalvalue = 200 + game.get_event_flag("gold_collected")
personalvalue = 200 + pc.getqf("personalvalue")
game.set_event_flag("gold_collected", globalvalue)
pc.setqf("personalvalue", personalvalue)
end
if pc.getqf("goldstatus") == 2 then
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._300_say)
pc.give_item2(30180) -- give Dragongod Amulet to player
pc.setqf("goldstatus", 1)
say(string.format(gameforge.pre_event_heavens_cave._310_say, item_name(30180), mob_name(20009), mob_name(9012)))
else
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._320_say)
end
say(string.format(gameforge.pre_event_heavens_cave._330_say, globalvalue))
wait()
-- building table for the score
local scoretable = {}
scoretable[1] = {}
scoretable[2] = {}
scoretable[3] = {}
scoretable[4] = {}
scoretable[5] = {}
scoretable[6] = {}
scoretable[7] = {}
scoretable[8] = {}
scoretable[9] = {}
scoretable[10] = {}
scoretable[11] = {}
-- putting all the event flags for the score into the table
local scorecounter0 = 0
local scorecounter1 = 1
local score = 0
local pcname = "zzz"
local letmeout = 0
local loadscore = 0
repeat
score = string.format("score%s", scorecounter0)
loadscore = game.get_event_flag(score)
scoretable[scorecounter1]["score"] = loadscore *100
scorecounter0 = scorecounter0 +1
scorecounter1 = scorecounter1 +1
until scorecounter0 == 10
-- checking if personalvalue is in the list
repeat
if scorecounter0 > 0 then
if pc.getqf("personalvalue") > scoretable[scorecounter0]["score"] then
scoretable[scorecounter1] = scoretable[scorecounter0]
scorecounter0 = scorecounter0 -1
scorecounter1 = scorecounter1 -1
else
letmeout = 1
end
else
letmeout = 1
end
until letmeout > 0
-- fill in the players score data
local scoreplace = scorecounter1
scoretable[scoreplace]["score"] = pc.getqf("personalvalue")
-- write the new score back into the event flags and put in in the dialog
local scorecounter0 = 0
local scorecounter1 = 1
local savescore = 0
say_title(gameforge.pre_event_heavens_cave._340_say_title)
repeat
score = string.format("score%d", scorecounter0)
savescore = scoretable[scorecounter1]["score"] /100
game.set_event_flag(score, savescore)
if scorecounter1 == scoreplace then
say_reward(string.format(gameforge.pre_event_heavens_cave._350_say_reward, scorecounter1, scoretable[scorecounter1]["score"]))
else
say(string.format(gameforge.pre_event_heavens_cave._350_say_reward, scorecounter1, scoretable[scorecounter1]["score"]))
end
scorecounter0 = scorecounter0 +1
scorecounter1 = scorecounter1 +1
until scorecounter0 == 10
else
say(gameforge.pre_event_heavens_cave._20_say)
say(gameforge.pre_event_heavens_cave._250_say)
end
end
end
state __COMPLETE__ begin
end
end