forked from metin2/server
Restructured gamefiles, locale data loading refactoring, docker build fixes
This commit is contained in:
12
gamefiles/data/quest/.gitignore
vendored
Normal file
12
gamefiles/data/quest/.gitignore
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
# Ignore compiled quest folders
|
||||
object/
|
||||
pre_qc/
|
||||
|
||||
# Quest compiler binaries
|
||||
qc
|
||||
qc.core
|
||||
qc.exe
|
||||
|
||||
# Compiled Python files
|
||||
__pycache__/
|
||||
*.pyc
|
114
gamefiles/data/quest/GFquestlib.lua
Normal file
114
gamefiles/data/quest/GFquestlib.lua
Normal file
@ -0,0 +1,114 @@
|
||||
|
||||
-- returns a vnum from a table.
|
||||
-- the table must look like this:
|
||||
-- items = {
|
||||
-- {vnum, probability[, minLevel[, maxLevel] ]}[, ...]
|
||||
-- }
|
||||
-- vnum is the vnum to be returned
|
||||
-- probability is an int showing how often this vnum should be returned compared to the others
|
||||
-- minLevel is the minimum level a player should have in order to return this vnum
|
||||
-- maxLevel is the maximum level a player should have in order to return this vnum
|
||||
-- -- WARNING: don't use levelLimit in server_timer triggers, the server will crash!
|
||||
--
|
||||
-- e.g:
|
||||
-- items = {
|
||||
-- {101, 1},
|
||||
-- {102, 2, 20, 50}
|
||||
-- }
|
||||
-- will return vnum 101 with a probability of 1/3. When player is below level 20 the probability will be 1/1.
|
||||
-- returns 102 with a probability of 2/3 when the player is between level 20 and 50, otherwise not.
|
||||
|
||||
function get_random_vnum_from_table(items)
|
||||
local temp_table = {}
|
||||
local playerLevel = pc.get_level()
|
||||
table.foreachi(items,
|
||||
function(index, item)
|
||||
local itemProbability = item[2]
|
||||
local itemVnum = item[1]
|
||||
local meetsLevelLimit = true
|
||||
if table.getn(item) > 2 then -- minLevel is given for this item
|
||||
if playerLevel < item[3] then
|
||||
meetsLevelLimit = false
|
||||
end
|
||||
if table.getn(item) > 3 then -- maxLevel is given for this item
|
||||
if playerLevel > item[4] then
|
||||
meetsLevelLimit = false
|
||||
end
|
||||
end
|
||||
end
|
||||
if meetsLevelLimit then
|
||||
for amount = 1, itemProbability do
|
||||
table.insert(temp_table, itemVnum)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
return temp_table[math.random(table.getn(temp_table))]
|
||||
end
|
||||
|
||||
function get_time_remaining(seconds)
|
||||
if seconds <= 60 then
|
||||
return string.format(gameforge.locale.time.seconds, seconds)
|
||||
else
|
||||
local minutes = math.floor(seconds / 60)
|
||||
seconds = math.mod(seconds, 60)
|
||||
if minutes <= 60 then
|
||||
return string.format(gameforge.locale.time.minutes_and_seconds, minutes, seconds)
|
||||
else
|
||||
local hours = math.floor(minutes / 60)
|
||||
minutes = math.mod(minutes, 60)
|
||||
if hours <= 24 then
|
||||
return string.format(gameforge.locale.time.hours_and_minutes, hours, minutes)
|
||||
else
|
||||
local days = math.floor(hours / 24)
|
||||
hours = math.mod(hours, 24)
|
||||
return string.format(gameforge.locale.time.days_and_hours, days, hours)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function count_item_range(firstVnum, lastVnum)
|
||||
local amount = 0
|
||||
for item = firstVnum, lastVnum, 1 do
|
||||
local i = pc.count_item(item)
|
||||
amount = amount + i
|
||||
end
|
||||
return amount
|
||||
end
|
||||
|
||||
function remove_item_range(amountLeft, firstVnum, lastVnum)
|
||||
if count_item_range(firstVnum, lastVnum) < amountLeft then
|
||||
return false
|
||||
end
|
||||
for currentVnum = firstVnum, lastVnum, 1 do
|
||||
local currentAmount = pc.count_item(currentVnum)
|
||||
if currentAmount > 0 then
|
||||
if currentAmount < amountLeft then
|
||||
pc.remove_item(currentVnum, currentAmount)
|
||||
amountLeft = amountLeft - currentAmount
|
||||
else
|
||||
pc.remove_item(currentVnum, amountLeft)
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- is the player in the right map so we can place the questarrow?
|
||||
-- param maps is int define the maplookup table to search in
|
||||
function is_destination_village(maps)
|
||||
local map_lookup = {}
|
||||
if maps == 1 then
|
||||
map_lookup = {[1]='', [21]='', [41]='' }
|
||||
elseif maps==2 then
|
||||
map_lookup = {[3]='', [23]='', [43]='' }
|
||||
elseif maps==3 then
|
||||
map_lookup = {[1]='', [21]='', [41]='',[3]='', [23]='', [43]='' }
|
||||
elseif maps==65 then
|
||||
map_lookup = {[65]='' }
|
||||
end
|
||||
return map_lookup[pc.get_map_index()]
|
||||
end
|
||||
function say_important_title(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
|
||||
function say_important(name) say(color256(255, 230, 186)..name..color256(196, 196, 196)) end
|
10
gamefiles/data/quest/ItemInformer.quest
Normal file
10
gamefiles/data/quest/ItemInformer.quest
Normal file
@ -0,0 +1,10 @@
|
||||
--2012.10.31 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ
|
||||
|
||||
quest ItemInformer begin
|
||||
state start begin
|
||||
when item_informer with pc.get_informer_type() == "GIFT" begin
|
||||
command("gift")
|
||||
end
|
||||
end --say_reward(pc.get_informer_item())
|
||||
end
|
149
gamefiles/data/quest/arena_manager.quest
Normal file
149
gamefiles/data/quest/arena_manager.quest
Normal file
@ -0,0 +1,149 @@
|
||||
quest arena_manager begin
|
||||
state start begin
|
||||
when 20017.chat.gameforge.arena_manager._10_npcChat begin
|
||||
if game.get_event_flag("arena_close") > 0 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._30_say)
|
||||
return
|
||||
end
|
||||
|
||||
if not npc.lock() then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._40_say)
|
||||
return
|
||||
end
|
||||
|
||||
local useMinLevel = game.get_event_flag("arena_use_min_level")
|
||||
|
||||
if useMinLevel == 0 then
|
||||
useMinLevel = 25 ;
|
||||
end
|
||||
|
||||
if pc.get_level() < useMinLevel then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._50_say, useMinLevel))
|
||||
npc.unlock()
|
||||
return
|
||||
else
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._60_say)
|
||||
|
||||
local sname = input()
|
||||
|
||||
if sname == "" then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._70_say)
|
||||
npc.unlock()
|
||||
return
|
||||
else
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._80_say, pc.name, sname))
|
||||
wait("")
|
||||
|
||||
local opp_vid = find_pc_by_name(sname)
|
||||
|
||||
if opp_vid == 0 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._90_say, sname))
|
||||
npc.unlock()
|
||||
return
|
||||
elseif opp_vid == pc.get_vid() then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._100_say)
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
|
||||
local old = pc. select(opp_vid , opp_vid )
|
||||
local opp_level = pc.get_level()
|
||||
pc. select(old , old )
|
||||
|
||||
if opp_level < useMinLevel then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._110_say, useMinLevel))
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
if not npc.is_near_vid(opp_vid, 10) then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._120_say, sname))
|
||||
npc.unlock()
|
||||
return ;
|
||||
end
|
||||
|
||||
local a = arena.is_in_arena(opp_vid)
|
||||
if a == 0 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._130_say, sname))
|
||||
npc.unlock()
|
||||
return ;
|
||||
end
|
||||
say_title(gameforge.arena_manager._140_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._85_say, pc.name, sname))
|
||||
local agree = confirm(opp_vid, string.format(gameforge.arena_manager._87_say, sname, pc.name), 30)
|
||||
if agree!= CONFIRM_OK then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._150_say, sname))
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
|
||||
s = arena.start_duel(sname, 3)
|
||||
|
||||
if s == 0 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._160_say)
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._170_say)
|
||||
elseif s == 3 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._180_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
npc.unlock()
|
||||
end
|
||||
|
||||
when 20017.chat.gameforge.arena_manager._190_npcChat begin
|
||||
local g = arena.get_duel_list()
|
||||
local arena_name = {}
|
||||
local arena_observer = {}
|
||||
|
||||
table.foreachi(g,
|
||||
function(n, p)
|
||||
arena_name[n] = string.format(gameforge.arena_manager._195_say, p[1], p[2])
|
||||
arena_observer[n] = { p[3], p[4], p[5] }
|
||||
end
|
||||
)
|
||||
|
||||
table.insert(arena_name, gameforge.arena_manager._200_tableInsert)
|
||||
table.insert(arena_observer, 0)
|
||||
|
||||
local count = table.getn(g)
|
||||
if count == 0 then
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.arena_manager._210_say)
|
||||
return ;
|
||||
else
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(string.format(gameforge.arena_manager._220_say, count))
|
||||
wait()
|
||||
end
|
||||
|
||||
if table.getn(g)!= 0 then
|
||||
local s = select_table(arena_name)
|
||||
|
||||
if table.getn(arena_observer) == s then
|
||||
return ;
|
||||
end
|
||||
|
||||
if table.getn(arena_observer) >= s then
|
||||
arena.add_observer(arena_observer[s][1], arena_observer[s][2], arena_observer[s][3])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
225
gamefiles/data/quest/arne_test1.quest
Normal file
225
gamefiles/data/quest/arne_test1.quest
Normal file
@ -0,0 +1,225 @@
|
||||
quest arne_test1 begin
|
||||
state start begin
|
||||
function generate_unique_rand_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)
|
||||
--notice("Generated Number" .. Rand_Number)
|
||||
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
|
||||
when letter begin
|
||||
local temp = math.random(1,100)
|
||||
Temp_RandList ={}
|
||||
Temp_RandList = arne_test1.generate_unique_rand_table(8, 4)
|
||||
|
||||
Test_QestBlock = false
|
||||
TestQuest_timeToWait = 5
|
||||
pc.setqf("cooldown_timer", get_time())
|
||||
Test_Quest_LocTable_C1 =
|
||||
{
|
||||
[1]= {361, 478,},
|
||||
[2]= {347, 475,},
|
||||
[3]= {356, 461,},
|
||||
[4]= {336, 462,},
|
||||
[5]= {335, 447,},
|
||||
[6]= {363, 450,},
|
||||
[7]= {368, 479,},
|
||||
[8]= {380, 463,},
|
||||
}
|
||||
Test_Quest_LocTable_Temp =
|
||||
{
|
||||
Test_Quest_LocTable_C1[Temp_RandList[1]],
|
||||
Test_Quest_LocTable_C1[Temp_RandList[2]],
|
||||
Test_Quest_LocTable_C1[Temp_RandList[3]],
|
||||
Test_Quest_LocTable_C1[Temp_RandList[4]],
|
||||
}
|
||||
-- set_state(reach_marker)
|
||||
end
|
||||
end
|
||||
|
||||
state reach_marker begin
|
||||
when letter begin
|
||||
target.pos("__TARGET8__", Test_Quest_LocTable_Temp[1][1], Test_Quest_LocTable_Temp[1][2], 41, "")
|
||||
target.pos("__TARGET9__", Test_Quest_LocTable_Temp[2][1], Test_Quest_LocTable_Temp[2][2], 41, "")
|
||||
target.pos("__TARGET10__", Test_Quest_LocTable_Temp[3][1], Test_Quest_LocTable_Temp[3][2], 41, "")
|
||||
target.pos("__TARGET11__", Test_Quest_LocTable_Temp[4][1], Test_Quest_LocTable_Temp[4][2], 41, "")
|
||||
-- target.pos("__TARGET9__", 347, 475, 41, "")
|
||||
notice("Markers should be there")
|
||||
end
|
||||
|
||||
when __TARGET8__.target.arrive begin
|
||||
if Test_QestBlock == true then
|
||||
notice("Bool true")
|
||||
if get_time() - pc.getqf("cooldown_timer") >= TestQuest_timeToWait then
|
||||
notice("wait timer through")
|
||||
Test_QestBlock = false
|
||||
else
|
||||
notice("waiting for timer")
|
||||
end
|
||||
else
|
||||
target.delete("__TARGET8__")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Hier ist eine der geforenen Tr<54>nen des Drachengottes zur Erde gest<73>rtzt.")
|
||||
local s = select("Tr<54>ne aufnehmen", "Nach mehr graben", "Nichts tun")
|
||||
if s == 1 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du erh<72>lst eine gefrorene Tr<54>ne.")
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 1)
|
||||
end
|
||||
if s == 2 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du findest 2 gefroene Tr<54>nen.")
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 3)
|
||||
end
|
||||
if s == 3 then
|
||||
pc.setqf("cooldown_timer", get_time())
|
||||
affect.add(apply.CON, 120, 60)
|
||||
TestQuest_timeToWait = 5
|
||||
Test_QestBlock = true
|
||||
target.pos("__TARGET8__", Test_Quest_LocTable_Temp[1][1], Test_Quest_LocTable_Temp[1][2], 41, "")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du l<>sst die Tr<54>ne liegen.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when __TARGET9__.target.arrive begin
|
||||
if Test_QestBlock == true then
|
||||
notice("Bool true")
|
||||
if get_time() - pc.getqf("cooldown_timer") >= TestQuest_timeToWait then
|
||||
notice("wait timer through")
|
||||
Test_QestBlock = false
|
||||
else
|
||||
notice("waiting for timer")
|
||||
end
|
||||
else
|
||||
target.delete("__TARGET9__")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Hier ist eine der geforenen Tr<54>nen des Drachengottes zur Erde gest<73>rtzt.")
|
||||
local s = select("Tr<54>ne aufnehmen", "Nach mehr graben", "Nichts tun")
|
||||
if s == 1 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du erh<72>lst eine gefrorene Tr<54>ne.")
|
||||
affect.add(apply.CON, 30, 60)
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 1)
|
||||
end
|
||||
if s == 2 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du findest 2 gefroene Tr<54>nen.")
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 3)
|
||||
end
|
||||
if s == 3 then
|
||||
pc.setqf("cooldown_timer", get_time())
|
||||
affect.add(apply.CON, 120, 60)
|
||||
TestQuest_timeToWait = 5
|
||||
Test_QestBlock = true
|
||||
target.pos("__TARGET9__", Test_Quest_LocTable_Temp[2][1], Test_Quest_LocTable_Temp[2][2], 41, "")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du l<>sst die Tr<54>ne liegen.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when __TARGET10__.target.arrive begin
|
||||
if Test_QestBlock == true then
|
||||
notice("Bool true")
|
||||
if get_time() - pc.getqf("cooldown_timer") >= TestQuest_timeToWait then
|
||||
notice("wait timer through")
|
||||
Test_QestBlock = false
|
||||
else
|
||||
notice("waiting for timer")
|
||||
end
|
||||
else
|
||||
target.delete("__TARGET10__")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Hier ist eine der geforenen Tr<54>nen des Drachengottes zur Erde gest<73>rtzt.")
|
||||
local s = select("Tr<54>ne aufnehmen", "Nach mehr graben", "Nichts tun")
|
||||
if s == 1 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du erh<72>lst eine gefrorene Tr<54>ne.")
|
||||
affect.add(apply.CON, 30, 60)
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 1)
|
||||
end
|
||||
if s == 2 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du findest 2 gefroene Tr<54>nen.")
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 3)
|
||||
end
|
||||
if s == 3 then
|
||||
pc.setqf("cooldown_timer", get_time())
|
||||
affect.add(apply.CON, 120, 60)
|
||||
TestQuest_timeToWait = 5
|
||||
Test_QestBlock = true
|
||||
target.pos("__TARGET10__", Test_Quest_LocTable_Temp[3][1], Test_Quest_LocTable_Temp[3][2], 41, "")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du l<>sst die Tr<54>ne liegen.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when __TARGET11__.target.arrive begin
|
||||
if Test_QestBlock == true then
|
||||
notice("Bool true")
|
||||
if get_time() - pc.getqf("cooldown_timer") >= TestQuest_timeToWait then
|
||||
notice("wait timer through")
|
||||
Test_QestBlock = false
|
||||
else
|
||||
notice("waiting for timer")
|
||||
end
|
||||
else
|
||||
target.delete("__TARGET11__")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Hier ist eine der geforenen Tr<54>nen des Drachengottes zur Erde gest<73>rtzt.")
|
||||
local s = select("Tr<54>ne aufnehmen", "Nach mehr graben", "Nichts tun")
|
||||
if s == 1 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du erh<72>lst eine gefrorene Tr<54>ne.")
|
||||
affect.add(apply.CON, 30, 60)
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 1)
|
||||
end
|
||||
if s == 2 then
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du findest 2 gefroene Tr<54>nen.")
|
||||
mob.spawn(173, pc.get_local_x(), pc.get_local_y(), 1, 1, 3)
|
||||
end
|
||||
if s == 3 then
|
||||
pc.setqf("cooldown_timer", get_time())
|
||||
affect.add(apply.CON, 120, 60)
|
||||
TestQuest_timeToWait = 5
|
||||
Test_QestBlock = true
|
||||
target.pos("__TARGET11__", Test_Quest_LocTable_Temp[4][1], Test_Quest_LocTable_Temp[4][2], 41, "")
|
||||
say_title("Gefrorene Tr<54>ne")
|
||||
say("Du l<>sst die Tr<54>ne liegen.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
739
gamefiles/data/quest/arne_test2.quest
Normal file
739
gamefiles/data/quest/arne_test2.quest
Normal file
@ -0,0 +1,739 @@
|
||||
quest arne_test begin
|
||||
state start begin
|
||||
when login begin
|
||||
NpcName=mob_name(20095) --SeonHae
|
||||
-- notice("Script l<>uft.")
|
||||
-- notice("Npc heisst: "..NpcName..". Right on!")
|
||||
-- notice(string.format("Geschlecht ist: %s", pc.get_sex()))
|
||||
-- mob.spawn(20095, 356, 483, 1, 1, 1)
|
||||
pc.give_item2(10)
|
||||
-- set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
|
||||
state talk_seon begin
|
||||
|
||||
function challenge_main_menu_proto(SelectionList)
|
||||
local selected = 0
|
||||
local s = select_table (SelectionList)
|
||||
-- local s = select ("1", "2", "3", "4", "5")
|
||||
-- always 5 deep
|
||||
-- say_title("ChallengeX")
|
||||
if s == 1 then
|
||||
selected = 1
|
||||
else
|
||||
if s == 2 then
|
||||
selected = 2
|
||||
else
|
||||
if s == 3 then
|
||||
selected = 3
|
||||
else
|
||||
if s == 4 then
|
||||
selected = 4
|
||||
else
|
||||
selected = 5
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return selected
|
||||
end
|
||||
|
||||
function challenge_calculate_rewards(TargetChallenge, AmountChallenge, TimeChallenge)
|
||||
local NewChallenge
|
||||
local NewRewards = {1,2,3}
|
||||
local BetRewardTable= {
|
||||
[1] = {[1] = 50, [2] = 100,},
|
||||
[2] = {[1] = 250, [2] = 500,},
|
||||
[3] = {[1] = 300, [2] = 1200,},
|
||||
[4] = {[1] = 400, [2] = 5000,},
|
||||
}
|
||||
|
||||
NewChallenge = (TargetChallenge + (2*AmountChallenge))*TimeChallenge
|
||||
notice("Challenge computed")
|
||||
if NewChallenge >= 30 then
|
||||
BetMoney = BetRewardTable[4][1]
|
||||
Reward = BetRewardTable[4][2]
|
||||
NewRewards = {NewChallenge, BetMoney, Reward}
|
||||
else
|
||||
if NewChallenge >= 15 then
|
||||
BetMoney = BetRewardTable[3][1]
|
||||
Reward = BetRewardTable[3][2]
|
||||
NewRewards = {NewChallenge, BetMoney, Reward}
|
||||
else
|
||||
if NewChallenge >= 8 then
|
||||
BetMoney = BetRewardTable[2][1]
|
||||
Reward = BetRewardTable[2][2]
|
||||
NewRewards = {NewChallenge, BetMoney, Reward}
|
||||
else
|
||||
BetMoney = BetRewardTable[1][1]
|
||||
Reward = BetRewardTable[1][2]
|
||||
NewRewards = {NewChallenge, BetMoney, Reward}
|
||||
end
|
||||
end
|
||||
end
|
||||
return NewRewards
|
||||
end
|
||||
|
||||
when login or enter begin
|
||||
HuntAmount=5
|
||||
GatherAmount=5
|
||||
pc.setqf("kill_count_1", 0)
|
||||
pc.setqf("collect_count", 0)
|
||||
-- local find_npc_vnum = 20095
|
||||
-- local v=find_npc_by_vnum(find_npc_vnum) -- alter Mann
|
||||
-- if 0==v then
|
||||
-- notice("Id 0")
|
||||
-- else
|
||||
-- notice("NPC da")
|
||||
-- target.vid("__TARGET__", v, "Seon-Hae")
|
||||
-- send_letter("Sprecht mit Seon-Hae")
|
||||
-- end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Sprecht mit Seon-Hae")
|
||||
say("Ihr habt einen alten Mann an der Br<42>cke gesehen, der v<>llig aufgel<65>st ist und wahrscheinlich Hilfe braucht.")
|
||||
end
|
||||
|
||||
|
||||
when 20095.Chat."Teleport Command" begin
|
||||
pc.setqf("pcx", pc.get_x())
|
||||
pc.setqf("pcy", pc.get_y())
|
||||
set_state(teleport)
|
||||
end
|
||||
|
||||
when 20095.Chat."ChallengeX" begin
|
||||
|
||||
local MainMenuList =
|
||||
{
|
||||
"Ziel W<>hlen",
|
||||
"Menge W<>hlen",
|
||||
"Zeit W<>hlen",
|
||||
"Quest Starten",
|
||||
"Abbruch",
|
||||
}
|
||||
local TargetMenuList =
|
||||
{
|
||||
"Wildhunde",
|
||||
"W<>lfe",
|
||||
"Tiger",
|
||||
}
|
||||
local AmountMenuList =
|
||||
{
|
||||
"10",
|
||||
"30",
|
||||
"50",
|
||||
}
|
||||
local TimeMenuList =
|
||||
{
|
||||
"60 min",
|
||||
"30 min",
|
||||
"10 min",
|
||||
}
|
||||
TargetList =
|
||||
{
|
||||
101,
|
||||
102,
|
||||
114,
|
||||
}
|
||||
AmountList =
|
||||
{
|
||||
10,
|
||||
30,
|
||||
50,
|
||||
}
|
||||
TimeList =
|
||||
{
|
||||
3600,
|
||||
1800,
|
||||
600,
|
||||
}
|
||||
|
||||
local Selected = 0
|
||||
|
||||
|
||||
if BeenHere != 1 then
|
||||
ChallengeIndex = 0
|
||||
BetMoney = 0
|
||||
Reward = 0
|
||||
TargetChallenge = 0
|
||||
AmountChallenge = 0
|
||||
TimeChallenge = 0
|
||||
TargetSelector = 0
|
||||
AmountSelector = 0
|
||||
TimeSelector = 0
|
||||
BeenHere = 1
|
||||
end
|
||||
repeat
|
||||
Selected = arne_test.challenge_main_menu_proto(MainMenuList)
|
||||
if Selected == 1 then
|
||||
TargetSelector = arne_test.challenge_main_menu_proto(TargetMenuList)
|
||||
TargetChallenge = TargetSelector
|
||||
end
|
||||
if Selected == 2 then
|
||||
AmountSelector = arne_test.challenge_main_menu_proto(AmountMenuList)
|
||||
AmountChallenge = AmountSelector
|
||||
end
|
||||
if Selected == 3 then
|
||||
TimeSelector = arne_test.challenge_main_menu_proto(TimeMenuList)
|
||||
TimeChallenge = TimeSelector
|
||||
end
|
||||
if Selected == 4 then
|
||||
local NewRewardsTable = {}
|
||||
NewRewardsTable = arne_test.challenge_calculate_rewards(TargetChallenge, AmountChallenge, TimeChallenge)
|
||||
say_title("Quest starten")
|
||||
say("Quest mit folgenden Parametern starten?")
|
||||
say(string.format("Jage %s x %s in %s Minuten",AmountList[AmountSelector],mob_name(TargetList[TargetSelector]),TimeList[TimeSelector]/60))
|
||||
say(string.format("Challenge: %s Einsatz: %s Belohnung: %s Yang", NewRewardsTable[1], NewRewardsTable[2], NewRewardsTable[3]))
|
||||
local x = select("Ja", "Nein")
|
||||
if x == 1 then
|
||||
pc.setqf("challenge_duration", get_time())
|
||||
FinalTarget = TargetList[TargetSelector]
|
||||
Selected = 5
|
||||
pc.setqf("FinalTarget",TargetList[TargetSelector])
|
||||
pc.setqf("FinalAmount",AmountList[AmountSelector])
|
||||
pc.setqf("FinalTime",TimeList[TimeSelector])
|
||||
set_state(start_2quest)
|
||||
else
|
||||
Selected = 5
|
||||
set_state(bounceback)
|
||||
end
|
||||
end
|
||||
if Selected == 5 then
|
||||
set_state(bounceback)
|
||||
end
|
||||
until Selected == 5
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state bounceback begin
|
||||
when enter or login begin
|
||||
notice(string.format("%s ,%s ,%s", TimeChallenge, AmountChallenge, TargetChallenge))
|
||||
set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
|
||||
state start_2quest begin
|
||||
when enter or login begin
|
||||
q.start()
|
||||
local timeToWait = pc.getqf("FinalTime")
|
||||
local timeLeft = 0
|
||||
timeLeft = timeToWait - (get_time() - pc.getqf("challenge_duration"))
|
||||
send_letter(string.format("Jage %s x %s in %s Minuten",pc.getqf("FinalAmount"),mob_name(pc.getqf("FinalTarget")),pc.getqf("FinalTime")/60))
|
||||
q.set_title(string.format("Jage %s x %s in %s Minuten",pc.getqf("FinalAmount"),mob_name(pc.getqf("FinalTarget")),pc.getqf("FinalTime")/60))
|
||||
q.set_clock("Zeit:", timeLeft)
|
||||
if get_time() - pc.getqf("challenge_duration") >= timeToWait then
|
||||
q.done()
|
||||
notice("Challenge Zeit Abgelaufen")
|
||||
set_state(challenge_failed)
|
||||
end
|
||||
end
|
||||
|
||||
when FinalTarget.kill begin
|
||||
if pc.getqf("kill_count_1") < AmountSelector then
|
||||
local index =pc.getqf("kill_count_1") + 1
|
||||
pc.setqf("kill_count_1",index)
|
||||
-- q.set_counter_value(AmountSelector - pc.getqf("kill_count_1"))
|
||||
if AmountSelector == pc.getqf("kill_count_1") and get_time() - pc.getqf("challenge_duration") < timeToWait then
|
||||
q.done()
|
||||
notice("Challenge Erfolg")
|
||||
set_state(challenge_success)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
--
|
||||
--
|
||||
--
|
||||
-- when 20095.Chat."Challenge" begin
|
||||
-- if BeenHere != 1 then
|
||||
-- ChallengeIndex = 0
|
||||
-- BetMoney = 0
|
||||
-- Reward = 0
|
||||
-- TargetChallenge = 0
|
||||
-- AmountChallenge = 0
|
||||
-- TimeChallenge = 0
|
||||
-- TargetSelector = 0
|
||||
-- AmountSelector = 0
|
||||
-- TimeSelector = 0
|
||||
-- BeenHere = 1
|
||||
-- end
|
||||
-- say_title("Challenge")
|
||||
-- local s = select("Ziel ausw<73>hlen", "Anzahl ausw<73>hlen", "Zeit ausw<73>hlen")
|
||||
-- if s == 1 then
|
||||
-- say_title("Ziel ausw<73>hlen")
|
||||
-- local t = select("Wildhunde", "W<>lfe", "Tiger")
|
||||
-- if t == 1 then
|
||||
-- TargetSelector = Target1
|
||||
-- TargetChallenge = 1
|
||||
-- else
|
||||
-- if t== 2 then
|
||||
-- TargetSelector = Target2
|
||||
-- TargetChallenge = 2
|
||||
-- else
|
||||
-- TargetSelector = Target3
|
||||
-- TargetChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- else
|
||||
-- if h == 2 then
|
||||
-- say_title("Anzahl festlegen")
|
||||
-- local a = select("10", "30", "50")
|
||||
-- if a == 1 then
|
||||
-- AmountSelector = 10
|
||||
-- AmountChallenge = 1
|
||||
-- else
|
||||
-- if a== 2 then
|
||||
-- AmountSelector = 30
|
||||
-- AmountChallenge = 2
|
||||
-- else
|
||||
-- AmountSelector = 50
|
||||
-- AmountChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- else
|
||||
-- say_title("Zeit festlegen")
|
||||
-- local i = select("60 Minuten", "30 Minuten", "10 Minuten")
|
||||
-- if i == 1 then
|
||||
-- TimeSelector = Time1
|
||||
-- TimeChallenge = 1
|
||||
-- else
|
||||
-- if i== 2 then
|
||||
-- TimeChallenge = 2
|
||||
-- set_state(bounceback)
|
||||
-- else
|
||||
-- TimeSelector = Time3
|
||||
-- TimeChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
--
|
||||
--
|
||||
-- when 20095.Chat."Dem alten Mann helfen" begin
|
||||
-- target.delete("__TARGET__")
|
||||
-- say_title("Hilfe f<>r Seon-Hae")
|
||||
-- say("Wehe! Diese verflixten Kl<4B>ffer! Hungrige Wildunde haben meinen kleinen Hund Fu verschlungen! Mit zwei Bissen war er weg, der arme Kleine!")
|
||||
-- wait()
|
||||
-- say(string.format("R<>cht meinen Fu! Erschlagt %s hungrige Wildhunde und seine kleine Hundeseele wird mit Genugtuung in das Geisterreich eingehen k<>nnen! Der arme Kleine ...",HuntAmount))
|
||||
-- set_state(hunting)
|
||||
-- end
|
||||
--
|
||||
-- when 20095.Chat."Dem alten Mann Ehre erweisen" begin
|
||||
-- target.delete("__TARGET__")
|
||||
-- say_title("Tee f<>r Seon-Hae")
|
||||
-- say("*Der alte Mann Seon-Hae nickt euch zu, als ihr euch zur Begr<67><72>ung verbeugt. Er scheint von Sorgen geplagt.*")
|
||||
-- wait()
|
||||
-- say("*Die Tradition w<>rde gebieten, ihm einen Glockenblumentee zu reichen. Dies demonstriert eure Achtung und beruhigt seine Seele.*")
|
||||
-- wait()
|
||||
-- say(string.format("*Sammelt %s Glockenblumen. Die Wildhunde erschn<68>ffeln sie gere im Gras, von ihnen k<>nnt ihr welche erbeuten.*", GatherAmount))
|
||||
-- set_state(gather)
|
||||
-- end
|
||||
--
|
||||
-- when 20095.Chat."Den alten Mann ausrauben" begin
|
||||
-- target.delete("__TARGET__")
|
||||
-- say_title("<22>berfall auf Seon-Hae")
|
||||
-- say("R<>pel! Ein alter Mann ist in Trauer um seinen besten Freund und ihr haltet ihm noch eine Klinge unter die Nase! Aber glaubt nur nicht das ihr damit davonkommt! Der Geist meines toten Hundes wird mir Schutz senden!")
|
||||
-- wait()
|
||||
-- say("Fass, Fu! Fass!")
|
||||
-- set_state(fighting)
|
||||
-- end
|
||||
--
|
||||
--
|
||||
--
|
||||
state teleport begin
|
||||
when enter or login begin
|
||||
if pc.get_map_index() >= 1120000 and pc.get_map_index() <= 1129999 then
|
||||
say_in_map("proper state")
|
||||
set_state(arena_relocate)
|
||||
else
|
||||
notice("teleport begin")
|
||||
command("private 112")
|
||||
set_state(arena_relocate)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state arena_relocate begin
|
||||
when enter or login begin
|
||||
if pc.get_map_index() >= 1120000 then
|
||||
notice("relocate")
|
||||
command("go 88 88")
|
||||
-- say_in_map("proper state")
|
||||
set_state(spawn_arena)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state spawn_arena begin
|
||||
when enter or login begin
|
||||
mob.spawn(101, 101, 101, 1,1, 3)
|
||||
notice("spawn")
|
||||
set_state(arena_combat)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state arena_combat begin
|
||||
when enter or login begin
|
||||
notice("combat")
|
||||
-- if pc.is_dead() == true then
|
||||
-- set_state(return_from_arena)
|
||||
-- end
|
||||
end
|
||||
|
||||
when 101.kill begin
|
||||
local index = pc.getqf("killcount")+1
|
||||
pc.setqf("killcount", index)
|
||||
|
||||
if pc.getqf("killcount") >= 3 then
|
||||
notice("final kill")
|
||||
set_state(return_from_arena)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state return_from_arena begin
|
||||
when enter or login begin
|
||||
local CordX = pc.getqf("pcx")*100
|
||||
local CordY = pc.getqf("pcy")*100
|
||||
pc.setqf("killcount", 0)
|
||||
say_title("Round Over")
|
||||
say("Return home.")
|
||||
local s = select("OK")
|
||||
if s == 1 then
|
||||
pc.warp(CordX, CordY)
|
||||
notice("timer over")
|
||||
set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state hunting begin
|
||||
when enter begin
|
||||
q.start()
|
||||
q.set_title("Hundejagd")
|
||||
notice("Erlege hungrige Wildhunde.")
|
||||
send_letter("Erlegt hungrige Wildhunde.")
|
||||
q.set_counter("Noch <20>brig", HuntAmount)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Erlege Wildhunde")
|
||||
say(string.format("Erlegt %s hungrige Wildhunde um Fu zu r<>chen.", HuntAmount))
|
||||
end
|
||||
|
||||
|
||||
-----Kill 171#Hungringer wildhund-----
|
||||
when 171.kill begin
|
||||
if pc.getqf("kill_count_1") < HuntAmount then
|
||||
local index =pc.getqf("kill_count_1") + 1
|
||||
pc.setqf("kill_count_1",index)
|
||||
q.set_counter_value(HuntAmount - pc.getqf("kill_count_1"))
|
||||
if HuntAmount == pc.getqf("kill_count_1") then
|
||||
q.done()
|
||||
notice("Das sollten genug Hunde gewesen sein, kehrt zu Seon-Hae zur<75>ck.")
|
||||
set_state(back_to_npc)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state back_to_npc begin
|
||||
when enter begin
|
||||
q.start()
|
||||
q.set_title("Zur<75>ck zu Seon-Hae")
|
||||
send_letter("Zur<75>ck zu Seon-Hae")
|
||||
local v=find_npc_by_vnum(20095) -- Seon-Hae
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET2__", v, "Seon-Hae")
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Zur<75>ck zu Seon-Hae")
|
||||
say("Kehrt zu Seon-Hae zur<75>ck.")
|
||||
end
|
||||
|
||||
when __TARGET2__.target.click begin
|
||||
target.delete("__TARGET2__")
|
||||
say("Gute Arbeit, ihr habt es den Biestern gezeigt! Mein kleiner Fu kann nun getrost ins Geisterreich <20>bergehen.") -- white font text
|
||||
wait()
|
||||
say("Hier, dieses Geld hatte ich gespart um seine Leckereien zu kaufen. Ich sch<63>tze es geb<65>hrt euch.")
|
||||
say_reward("Ihr erhaltet:")
|
||||
say("Einen gro<72>en Beutel Yang")
|
||||
q.done()
|
||||
pc.change_money(10000)
|
||||
pc.give_exp2(500)
|
||||
end
|
||||
end
|
||||
|
||||
state gather begin
|
||||
|
||||
when enter begin
|
||||
q.start()
|
||||
q.set_title("Glockenblumen")
|
||||
notice("Erlegt Wildhunde um Glockenblumen zu sammeln")
|
||||
send_letter("Erlegt Wildhunde um Glockenblumen zu sammeln.")
|
||||
q.set_counter("Noch <20>brig", GatherAmount)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Glockenblumen von Wildhunden")
|
||||
say(string.format("Erbeutet %s Glockenblumen von den Wildhunden der Umgebung", GatherAmount))
|
||||
end
|
||||
|
||||
when 101.kill begin -- yy unfinished yy
|
||||
if pc.count_item(50702)< GatherAmount - pc.getqf("collect_count") then
|
||||
pc.give_item2(50702, 1)
|
||||
local index = pc.getqf("collect_count") + 1
|
||||
q.set_counter_value(GatherAmount - pc.getqf("collect_count"))
|
||||
pc.setqf("collect_count",index)
|
||||
notice("Ihr habt eine Glockenblume gefunden")
|
||||
else
|
||||
q.done()
|
||||
-- set_state(return_flowers)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- state return_flowers
|
||||
-- when enter begin
|
||||
-- q.start()
|
||||
-- q.set_title("Der Tee f<>r Seon-Hae")
|
||||
-- notice("Kehrt zu Seon-Hae zur<75>ck")
|
||||
-- send_letter("Kehrt zu Seon-Hae zur<75>ck")
|
||||
-- if 0!=v then
|
||||
-- target.vid("__TARGET3__", v, "Seon-Hae")
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- when button or info begin
|
||||
-- say_title("Glockenblumen f<>r Seon-Hae")
|
||||
-- say("Kehrt mit dne Glockenblumen zu Seon-Hae zur<75>ck.")
|
||||
-- end
|
||||
--
|
||||
-- when __TARGET3__.target.click begin
|
||||
-- target.delete("__TARGET3__")
|
||||
-- say("*Es dauert nicht lange, aus den Glockenblumen einen Tee zuzubereiten. Seon-Hae betrachtet euch wohlwollend als ihr ihm die Schale <20>berreicht.*") -- white font text
|
||||
-- wait()
|
||||
-- say("Das nenne ich gute Erziehung! Das war genau das,w as ich in dieser schweren Zeit brauchte. Ihr seid noch ein junger Mensch mit Manieren. Selten anzutreffen bei euch Abenteurern.")
|
||||
-- say_reward("*Seon-Hae steckt euch etwas zu:*")
|
||||
-- say("Einige Yang")
|
||||
-- q.done()
|
||||
-- pc.change_money(100)
|
||||
-- pc.give_exp2(1000)
|
||||
-- end
|
||||
--
|
||||
-- end
|
||||
|
||||
state fighting begin
|
||||
when enter begin
|
||||
q.start()
|
||||
q.set_title("Besiegt den Wolf")
|
||||
send_letter("Besiegt den Wolf")
|
||||
mob.spawn(102, 356, 483, 1, 1, 1)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Besiegt den Wolf")
|
||||
say("Besiegt den Wolfsgeist, der Seon-Ha zur Hilfe geeilt ist.")
|
||||
end
|
||||
|
||||
when 102.kill begin
|
||||
q.done()
|
||||
set_state(robbing)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state robbing begin
|
||||
when enter begin
|
||||
q.start()
|
||||
q.set_title("Holt das Geld von Seon-Hae")
|
||||
send_letter("Holt das Geld von Seon-Hae")
|
||||
local v=find_npc_by_vnum(20095) -- Seon-Hae
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET2__", v, "Seon-Hae")
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title("Seon-Hae ausrauben")
|
||||
say("Ihr habt Seon-Haes W<>chter beseigt, nun ist es an der Zeit sich sein Geld zu schnappen.")
|
||||
end
|
||||
|
||||
when __TARGET2__.target.click begin
|
||||
target.delete("__TARGET2__")
|
||||
say_title("Das Geld von Seon-Ha")
|
||||
say("Ihr... Ihr habt ihn erschlagen! Bitte, tut mir nicht das gleiche an, ihr sollt alles bekommen, was ich habe!") -- white font text
|
||||
wait()
|
||||
say("Da, nehmt meinen Besitz! M<>ge euch h<>chstpers<72>nlich ein Metinstein auf den Kopf fallen, ehrloser Schurke!")
|
||||
say_reward("Seon-Ha <20>bergibt euch:")
|
||||
say_item_vnum(11)
|
||||
say("und einen gro<72>en Beutel Yang")
|
||||
q.done()
|
||||
pc.change_money(10000)
|
||||
pc.give_item2(11, 1)
|
||||
pc.give_exp2(100)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- when 20095.Chat."Ziele festlegen" begin
|
||||
-- say_title("Challenge")
|
||||
-- local s = select("Ziel ausw<73>hlen", "Anzahl ausw<73>hlen", "Zeit ausw<73>hlen")
|
||||
-- if s == 1 then
|
||||
-- say_title("Ziel ausw<73>hlen")
|
||||
-- local t = select("Wildhunde", "W<>lfe", "Tiger")
|
||||
-- if t == 1 then
|
||||
-- TargetSelector = Target1
|
||||
-- TargetChallenge = 1
|
||||
-- else
|
||||
-- if t== 2 then
|
||||
-- TargetSelector = Target2
|
||||
-- TargetChallenge = 2
|
||||
-- else
|
||||
-- TargetSelector = Target3
|
||||
-- TargetChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- else
|
||||
-- if h == 2 then
|
||||
-- say_title("Anzahl festlegen")
|
||||
-- local a = select("10", "30", "50")
|
||||
-- if a == 1 then
|
||||
-- AmountSelector = 10
|
||||
-- AmountChallenge = 1
|
||||
-- else
|
||||
-- if a== 2 then
|
||||
-- AmountSelector = 30
|
||||
-- AmountChallenge = 2
|
||||
-- else
|
||||
-- AmountSelector = 50
|
||||
-- AmountChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- else
|
||||
-- say_title("Zeit festlegen")
|
||||
-- local i = select("60 Minuten", "30 Minuten", "10 Minuten")
|
||||
-- if i == 1 then
|
||||
-- TimeSelector = Time1
|
||||
-- TimeChallenge = 1
|
||||
-- else
|
||||
-- if i== 2 then
|
||||
-- TimeChallenge = 2
|
||||
-- else
|
||||
-- TimeSelector = Time3
|
||||
-- TimeChallenge = 4
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- end
|
||||
--
|
||||
-- when 20095.Chat."Anzahl festlegen" begin
|
||||
-- say_title("Anzahl festlegen")
|
||||
-- local s = select("10", "30", "50")
|
||||
-- if s == 1 then
|
||||
-- AmountSelector = 10
|
||||
-- AmountChallenge = 1
|
||||
-- set_state(bounceback)
|
||||
-- else
|
||||
-- if s== 2 then
|
||||
-- AmountSelector = 30
|
||||
-- AmountChallenge = 2
|
||||
-- set_state(bounceback)
|
||||
-- else
|
||||
-- AmountSelector = 50
|
||||
-- AmountChallenge = 4
|
||||
-- set_state(bounceback)
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
--
|
||||
-- when 20095.Chat."Zeit festlegen" begin
|
||||
-- say_title("Zeit festlegen")
|
||||
-- local s = select("60 Minuten", "30 Minuten", "10 Minuten")
|
||||
-- if s == 1 then
|
||||
-- TimeSelector = Time1
|
||||
-- TimeChallenge = 1
|
||||
-- set_state(bounceback)
|
||||
-- else
|
||||
-- if s== 2 then
|
||||
-- TimeSelector = Time2
|
||||
-- TimeChallenge = 2
|
||||
-- set_state(bounceback)
|
||||
-- else
|
||||
-- TimeSelector = Time3
|
||||
-- TimeChallenge = 4
|
||||
-- set_state(bounceback)
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
|
||||
|
||||
|
||||
state bounceback begin
|
||||
when enter or login begin
|
||||
notice(string.format("%s ,%s ,%s", TimeChallenge, AmountChallenge, TargetChallenge))
|
||||
set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
|
||||
state start_quest begin
|
||||
when enter or login begin
|
||||
q.start()
|
||||
timeToWait = TimeList[TimeSelector]
|
||||
timeLeft = timeToWait - (get_time() - pc.getqf("challenge_duration"))
|
||||
send_letter(string.format("Jage %s x %s in %s Minuten",AmountList[AmountSelector],mob_name(TargetList[TargetSelector]),TimeList[TimeSelector]/60))
|
||||
q.set_title(string.format("Jage %s x %s in %s Minuten",AmountList[AmountSelector],mob_name(TargetList[TargetSelector]),TimeList[TimeSelector]/60))
|
||||
q.set_clock("Zeit:", timeLeft)
|
||||
if get_time() - pc.getqf("challenge_duration") >= timeToWait then
|
||||
q.done()
|
||||
notice("Challenge Zeit Abgelaufen")
|
||||
set_state(challenge_failed)
|
||||
end
|
||||
end
|
||||
|
||||
when FinalTarget.kill begin
|
||||
if pc.getqf("kill_count_1") < AmountSelector then
|
||||
local index =pc.getqf("kill_count_1") + 1
|
||||
pc.setqf("kill_count_1",index)
|
||||
-- q.set_counter_value(AmountSelector - pc.getqf("kill_count_1"))
|
||||
if AmountSelector == pc.getqf("kill_count_1") and get_time() - pc.getqf("challenge_duration") < timeToWait then
|
||||
q.done()
|
||||
notice("Challenge Erfolg")
|
||||
set_state(challenge_success)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state challenge_failed begin
|
||||
when enter or login begin
|
||||
notice("Challenge fehlgeschlagen")
|
||||
set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
|
||||
state challenge_success begin
|
||||
when enter or login begin
|
||||
notice(string.format("Du erh<72>lst", Reward))
|
||||
pc.change_money(Reward)
|
||||
set_state(talk_seon)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
52
gamefiles/data/quest/assassin_shop_box.quest
Normal file
52
gamefiles/data/quest/assassin_shop_box.quest
Normal file
@ -0,0 +1,52 @@
|
||||
quest assassin_shop_box begin
|
||||
state start begin
|
||||
|
||||
function give_costume_item(costume_vnum, duration)
|
||||
|
||||
-- provide the new costume
|
||||
local remain_time = 86400*duration
|
||||
pc.give_item2_select(costume_vnum,1)
|
||||
item.set_socket(0, get_global_time()+remain_time)
|
||||
end
|
||||
|
||||
|
||||
when 38054.use begin
|
||||
local n = number (1,1000)
|
||||
if n <= 120 then
|
||||
pc.give_item2(71012,1)
|
||||
elseif n <= 240 then
|
||||
pc.give_item2(71130,3)
|
||||
elseif n <= 360 then
|
||||
pc.give_item2(71083,1)
|
||||
elseif n <= 480 then
|
||||
pc.give_item2(71004,10)
|
||||
elseif n <= 600 then
|
||||
pc.give_item2(71018,2)
|
||||
elseif n <= 675 then
|
||||
pc.give_item2(25040,1)
|
||||
elseif n <= 680 then
|
||||
pc.give_item2(25041,1)
|
||||
elseif n <= 690 then
|
||||
pc.give_item2(71085,1)
|
||||
elseif n <= 700 then
|
||||
pc.give_item2(70039,1)
|
||||
elseif n <= 740 then
|
||||
pc.give_item2(71032,1)
|
||||
elseif n <= 780 then
|
||||
pc.give_item2(70024,1)
|
||||
elseif n <= 840 then
|
||||
assassin_shop_box.give_costume_item(41030, 14)
|
||||
elseif n <= 900 then
|
||||
assassin_shop_box.give_costume_item(41029, 14)
|
||||
elseif n <= 950 then
|
||||
assassin_shop_box.give_costume_item(41030, 30)
|
||||
else
|
||||
assassin_shop_box.give_costume_item(41029, 30)
|
||||
end
|
||||
|
||||
pc.remove_item(38054,1)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
10
gamefiles/data/quest/blacksmith.quest
Normal file
10
gamefiles/data/quest/blacksmith.quest
Normal file
@ -0,0 +1,10 @@
|
||||
quest blacksmith begin
|
||||
state start begin
|
||||
when blacksmith.chat.gameforge.blacksmith._10_npcChat begin
|
||||
say_title(gameforge.blacksmith._20_sayTitle)
|
||||
say(gameforge.blacksmith._30_say)
|
||||
say_title(gameforge.blacksmith._40_sayTitle)
|
||||
say_reward(gameforge.blacksmith._50_sayReward)
|
||||
end
|
||||
end
|
||||
end
|
202
gamefiles/data/quest/buy_fishrod.quest
Normal file
202
gamefiles/data/quest/buy_fishrod.quest
Normal file
@ -0,0 +1,202 @@
|
||||
quest buy_fishrod begin
|
||||
state start begin
|
||||
when 9009.chat.gameforge.buy_fishrod._10_npcChat with pc.level>=7 and pc.level<=17 begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._30_say)
|
||||
local b= select(gameforge.buy_fishrod._40_select, gameforge.buy_fishrod._50_select)
|
||||
if 1==b then
|
||||
if pc.money>=3980 then
|
||||
pc.changemoney(-3980)
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._60_say)
|
||||
pc.give_item2("27400", 1)
|
||||
pc.give_item2("27800", 100)
|
||||
pc.give_item2("27801", 20)
|
||||
setstate(notify_event)
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._70_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state notify_event begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.buy_fishrod._90_makequestbutton)
|
||||
q.set_title(gameforge.buy_fishrod._90_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.buy_fishrod._100_sayTitle)
|
||||
say(gameforge.buy_fishrod._110_say)
|
||||
local b= select(gameforge.buy_fishrod._120_select, gameforge.buy_fishrod._130_select)
|
||||
if 1==b then
|
||||
setstate(play_event)
|
||||
elseif 2==b then
|
||||
setstate(__COMPLETE__)
|
||||
q.done()
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._140_say)
|
||||
local b= select(gameforge.buy_fishrod._120_select, gameforge.buy_fishrod._130_select)
|
||||
if 1==b then
|
||||
setstate(play_event)
|
||||
elseif 2==b then
|
||||
setstate(__COMPLETE__)
|
||||
q.done()
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state play_event begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.buy_fishrod._150_makequestbutton)
|
||||
q.set_title(gameforge.buy_fishrod._150_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._160_say)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._160_say)
|
||||
end
|
||||
when 9009.chat.gameforge.buy_fishrod._170_npcChat with pc.countitem("27833")>=5 begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._180_say)
|
||||
setstate(reward)
|
||||
end
|
||||
when 9009.chat.gameforge.buy_fishrod._170_npcChat with pc.countitem("27833")<5 begin
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._190_say)
|
||||
end
|
||||
end
|
||||
state reward begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.buy_fishrod._200_makequestbutton)
|
||||
q.set_title(gameforge.buy_fishrod._200_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.buy_fishrod._220_say)
|
||||
if pc.countitem("27833")>=5 then
|
||||
pc.removeitem("27833", 5)
|
||||
say(gameforge.buy_fishrod._230_say)
|
||||
if pc.job==0 then
|
||||
local r=number(1, 10)
|
||||
if r==1 then
|
||||
pc.give_item2("00013", 1)
|
||||
elseif r==2 then
|
||||
pc.give_item2("00023", 1)
|
||||
elseif r==3 then
|
||||
pc.give_item2("00033", 1)
|
||||
elseif r==4 then
|
||||
pc.give_item2("00043", 1)
|
||||
elseif r==5 then
|
||||
pc.give_item2("00053", 1)
|
||||
elseif r==6 then
|
||||
pc.give_item2("03003", 1)
|
||||
elseif r==7 then
|
||||
pc.give_item2("03013", 1)
|
||||
elseif r==8 then
|
||||
pc.give_item2("03023", 1)
|
||||
elseif r==9 then
|
||||
pc.give_item2("03033", 1)
|
||||
elseif r==10 then
|
||||
pc.give_item2("03043", 1)
|
||||
end
|
||||
elseif pc.job==1 then
|
||||
local r=number(1, 15)
|
||||
if r==1 then
|
||||
pc.give_item2("00013", 1)
|
||||
elseif r==2 then
|
||||
pc.give_item2("00023", 1)
|
||||
elseif r==3 then
|
||||
pc.give_item2("00033", 1)
|
||||
elseif r==4 then
|
||||
pc.give_item2("00043", 1)
|
||||
elseif r==5 then
|
||||
pc.give_item2("00053", 1)
|
||||
elseif r==6 then
|
||||
pc.give_item2("01003", 1)
|
||||
elseif r==7 then
|
||||
pc.give_item2("04003", 1)
|
||||
elseif r==8 then
|
||||
pc.give_item2("01013", 1)
|
||||
elseif r==9 then
|
||||
pc.give_item2("04013", 1)
|
||||
elseif r==10 then
|
||||
pc.give_item2("01023", 1)
|
||||
elseif r==11 then
|
||||
pc.give_item2("02003", 1)
|
||||
elseif r==12 then
|
||||
pc.give_item2("02013", 1)
|
||||
elseif r==13 then
|
||||
pc.give_item2("02023", 1)
|
||||
elseif r==14 then
|
||||
pc.give_item2("02033", 1)
|
||||
elseif r==15 then
|
||||
pc.give_item2("2043", 1)
|
||||
end
|
||||
elseif pc.job==2 then
|
||||
local r=number(1, 6)
|
||||
if r==1 then
|
||||
pc.give_item2("00013", 1)
|
||||
elseif r==2 then
|
||||
pc.give_item2("00023", 1)
|
||||
elseif r==3 then
|
||||
pc.give_item2("00033", 1)
|
||||
elseif r==4 then
|
||||
pc.give_item2("00043", 1)
|
||||
elseif r==5 then
|
||||
pc.give_item2("00053", 1)
|
||||
elseif r==6 then
|
||||
pc.give_item2("00053", 1)
|
||||
end
|
||||
elseif pc.job==3 then
|
||||
local r=number(1, 8)
|
||||
if r==1 then
|
||||
pc.give_item2("05003", 1)
|
||||
elseif r==2 then
|
||||
pc.give_item2("05013", 1)
|
||||
elseif r==3 then
|
||||
pc.give_item2("05023", 1)
|
||||
elseif r==4 then
|
||||
pc.give_item2("07003", 1)
|
||||
elseif r==5 then
|
||||
pc.give_item2("07013", 1)
|
||||
elseif r==6 then
|
||||
pc.give_item2("07023", 1)
|
||||
elseif r==7 then
|
||||
pc.give_item2("07033", 1)
|
||||
elseif r==8 then
|
||||
pc.give_item2("07043", 1)
|
||||
end
|
||||
end
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._20_sayTitle)
|
||||
say(gameforge.buy_fishrod._240_say)
|
||||
end
|
||||
setstate(__COMPLETE__)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
127
gamefiles/data/quest/change_empire.quest
Normal file
127
gamefiles/data/quest/change_empire.quest
Normal file
@ -0,0 +1,127 @@
|
||||
quest change_empire begin
|
||||
state start begin
|
||||
when 20090.chat.gameforge.change_empire._10_npcChat with game.get_event_flag("c_e") >0 begin
|
||||
|
||||
local count = pc.get_change_empire_count() ;
|
||||
if count >= 1 then
|
||||
say(gameforge.change_empire._20_say)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.change_empire._10_npcChat)
|
||||
|
||||
say(gameforge.change_empire._30_say)
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.cancel)
|
||||
|
||||
if s == 1 then
|
||||
change_empire.move_pc()
|
||||
end
|
||||
end
|
||||
|
||||
when 71054.use begin
|
||||
say_title(gameforge.change_empire._10_npcChat)
|
||||
|
||||
say(gameforge.change_empire._40_say)
|
||||
if get_time() < pc.getqf("next_use_time") then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._60_sayReward)
|
||||
|
||||
if pc.is_gm() then
|
||||
say(gameforge.change_empire._70_say)
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 1 then
|
||||
say(gameforge.change_empire._80_say)
|
||||
pc.setqf("next_use_time", 0)
|
||||
end
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
if change_empire.move_pc() == true then
|
||||
pc.setqf("next_use_time", get_time() + 86400 * 7)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function move_pc()
|
||||
if pc.is_engaged() then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._90_sayReward)
|
||||
say(gameforge.change_empire._100_say)
|
||||
return false
|
||||
end
|
||||
|
||||
if pc.is_married() then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._90_sayReward)
|
||||
say(gameforge.change_empire._110_say)
|
||||
return false
|
||||
end
|
||||
|
||||
if pc.is_polymorphed() then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._120_sayReward)
|
||||
say(gameforge.change_empire._130_say)
|
||||
return false
|
||||
end
|
||||
|
||||
if pc.has_guild() then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._140_sayReward)
|
||||
say(gameforge.change_empire._150_say)
|
||||
return false
|
||||
end
|
||||
|
||||
if pc.money < 500000 then
|
||||
say_title(gameforge.change_empire._50_sayTitle)
|
||||
say_reward(gameforge.change_empire._160_sayReward)
|
||||
say(gameforge.change_empire._170_say)
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
say(gameforge.change_empire._180_say)
|
||||
local s = select ( gameforge.change_empire._190_select, gameforge.change_empire._200_select, gameforge.change_empire._205_select, gameforge.locale.cancel)
|
||||
|
||||
if 4 == s then
|
||||
return false
|
||||
end
|
||||
|
||||
say_reward(gameforge.change_empire._210_sayReward)
|
||||
|
||||
local a = select(gameforge.locale.guild.yes, gameforge.locale.cancel)
|
||||
|
||||
if 2 == a then
|
||||
return false
|
||||
end
|
||||
|
||||
local ret = pc.change_empire(s)
|
||||
local oldempire = pc.get_empire()
|
||||
|
||||
if ret == 999 then
|
||||
say_title(gameforge.change_empire._220_sayTitle)
|
||||
say_reward(gameforge.change_empire._230_sayReward)
|
||||
pc.change_gold(-500000)
|
||||
pc.remove_item(71054) ;
|
||||
|
||||
char_log(0, "CHANGE_EMPIRE",string.format(gameforge.change_empire._240_stringFormat, oldempire, s))
|
||||
|
||||
return true
|
||||
else
|
||||
if ret == 1 then
|
||||
say(gameforge.change_empire._250_say)
|
||||
elseif ret == 2 then
|
||||
say(gameforge.change_empire._260_say)
|
||||
elseif ret == 3 then
|
||||
say(gameforge.change_empire._270_say)
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
53
gamefiles/data/quest/change_guild_master.quest
Normal file
53
gamefiles/data/quest/change_guild_master.quest
Normal file
@ -0,0 +1,53 @@
|
||||
quest change_guild_master begin
|
||||
state start begin
|
||||
function change_master( name , level_limit , time_resign_limit , time_be_other_leader , time_be_other_member , iscacheitem )
|
||||
local ret = guild.change_master_with_limit( name , level_limit , time_resign_limit , time_be_other_leader , time_be_other_member, iscacheitem)
|
||||
local result = false
|
||||
|
||||
if ret == 0 then
|
||||
say(gameforge.change_guild_master._30_say)
|
||||
elseif ret == 1 then
|
||||
say(gameforge.change_guild_master._40_say)
|
||||
elseif ret == 2 then
|
||||
say(gameforge.change_guild_master._50_say)
|
||||
elseif ret == 3 then
|
||||
say(gameforge.change_guild_master._60_say)
|
||||
result = true
|
||||
pc.remove_item(71099)
|
||||
elseif ret == 4 then
|
||||
say(gameforge.change_guild_master._70_say)
|
||||
elseif ret == 5 then
|
||||
say(gameforge.change_guild_master._90_say)
|
||||
elseif ret == 6 then
|
||||
say(gameforge.change_guild_master._100_say)
|
||||
elseif ret == 7 then
|
||||
say(gameforge.change_guild_master._110_say)
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
when 71099.use begin
|
||||
if pc.is_guild_master() == false then
|
||||
say(gameforge.change_guild_master._10_say)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
say(gameforge.change_guild_master._20_say)
|
||||
local s = input()
|
||||
local newface_name = find_pc_by_name(s)
|
||||
if newface_name == pc.get_vid() then
|
||||
say(gameforge.change_guild_master._80_say)
|
||||
return
|
||||
end
|
||||
|
||||
if change_guild_master.change_master( s , 40 , 0 , 0 , 0 ,true) == true then
|
||||
pc.remove_item(71099)
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
100
gamefiles/data/quest/change_name.quest
Normal file
100
gamefiles/data/quest/change_name.quest
Normal file
@ -0,0 +1,100 @@
|
||||
quest chagne_name begin
|
||||
state start begin
|
||||
when 71055.use begin
|
||||
if pc.is_married() then
|
||||
say("You cannot change your name if you are married.")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if pc.is_polymorphed() then
|
||||
say("You cannot change your name if you are transformed.")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if pc.has_guild() then
|
||||
say("You cannot change your name if you are in a guild. ")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if party.is_party() then
|
||||
say("You cannot change your name if you are in a party.")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if pc.get_level() < 35 then
|
||||
say("You need level 35 to change your name!")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if get_time() < pc.getqf("next_time") then
|
||||
say("You can not use it now.")
|
||||
say("")
|
||||
|
||||
if is_test_server() == true then
|
||||
say("Since it's test server, you can go")
|
||||
say("")
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
say("Please enter the name you want to have") ;
|
||||
|
||||
local name = pc.name ;
|
||||
local str = input() ;
|
||||
if string.len(str) > 16 then
|
||||
say("This name is too long. Please try again.")
|
||||
say("")
|
||||
return
|
||||
|
||||
end
|
||||
local ret = pc.change_name(str) ;
|
||||
|
||||
if ret == 0 then
|
||||
say("You didn't log in after you have changed your name.")
|
||||
say("please re-log in.")
|
||||
say("")
|
||||
|
||||
char_log(0, "CHANGE_NAME", "HAVE NOT RE-LOGIN")
|
||||
elseif ret == 1 then
|
||||
say("The problem occured while using the item.")
|
||||
say("Please use again.")
|
||||
say("")
|
||||
|
||||
char_log(0, "CHANGE_NAME", "ITEM USE PROBLEM")
|
||||
elseif ret == 2 then
|
||||
say("The name is not available.")
|
||||
say("Please enter other name.")
|
||||
say("")
|
||||
|
||||
char_log(0, "CHANGE_NAME", "CAN NOT USE NAME")
|
||||
elseif ret == 3 then
|
||||
say("The name is not available.")
|
||||
say("Please enter other name.")
|
||||
say("")
|
||||
|
||||
char_log(0, "CHANGE_NAME", "ALREADY USING NAME")
|
||||
elseif ret == 4 then
|
||||
say("You have changed your name successfully.")
|
||||
say("Please log in again.")
|
||||
say("")
|
||||
|
||||
item.remove() ;
|
||||
|
||||
pc.setqf("next_time", get_time() + time_hour_to_sec(24*15))
|
||||
|
||||
char_log(0, "CHANGE_NAME", "SUCCESS: from "..name.." to "..str)
|
||||
else
|
||||
say("Unknown error occured.")
|
||||
say("")
|
||||
|
||||
char_log(0, "CHANGE_NAME", "UNKNOWN NAME")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
35
gamefiles/data/quest/charge_cash_by_voucher.quest
Normal file
35
gamefiles/data/quest/charge_cash_by_voucher.quest
Normal file
@ -0,0 +1,35 @@
|
||||
quest charge_cash_by_voucher begin
|
||||
state start begin
|
||||
function charge(amount, charge_type)
|
||||
if charge_type == nil then
|
||||
charge_type = "cash"
|
||||
end
|
||||
|
||||
if 0 < amount then
|
||||
-- syntax : pc.charge_cash(amount, charge_type)
|
||||
-- warning: 1. 'charge_type' : "cash"(default) | "mileage"
|
||||
-- 2. 'amount' must be positive number.
|
||||
local result = pc.charge_cash(amount, charge_type)
|
||||
|
||||
if true == result then
|
||||
local item_id = item.get_id()
|
||||
char_log(item_id, "CHARGE_CASH_BY_VOUCHER", amount)
|
||||
syschat(string.format(gameforge.charge_cash_by_voucher._010_syschat, amount))
|
||||
|
||||
local flag_name = "total_" .. charge_type
|
||||
pc.setqf(flag_name, pc.getqf(flag_name) + amount)
|
||||
|
||||
item.remove()
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
when 80014.use or 80015.use or 80016.use or 80017.use begin
|
||||
local amount = item.get_value(0)
|
||||
|
||||
charge_cash_by_voucher.charge(amount, "cash")
|
||||
end
|
||||
end
|
||||
end
|
117
gamefiles/data/quest/check_collect_reward.quest
Normal file
117
gamefiles/data/quest/check_collect_reward.quest
Normal file
@ -0,0 +1,117 @@
|
||||
quest check_collect_reward begin
|
||||
state start begin
|
||||
when 20018.chat.gameforge.check_collect_reward._010_npcChat begin
|
||||
say_title(gameforge.check_collect_reward._020_say_title)
|
||||
say(gameforge.check_collect_reward._030_say)
|
||||
wait("")
|
||||
say_pc_name()
|
||||
say(gameforge.check_collect_reward._040_say)
|
||||
wait("")
|
||||
say_title(gameforge.check_collect_reward._020_say_title)
|
||||
say(gameforge.check_collect_reward._050_say)
|
||||
|
||||
local value = "557528158"
|
||||
local a = get_quest_state("collect_quest_lv30")
|
||||
local b = get_quest_state("collect_quest_lv40")
|
||||
local c = get_quest_state("collect_quest_lv50")
|
||||
local d = get_quest_state("collect_quest_lv60")
|
||||
local e = get_quest_state("collect_quest_lv70")
|
||||
local f = get_quest_state("collect_quest_lv80")
|
||||
local g = get_quest_state("collect_quest_lv85")
|
||||
local h = get_quest_state("collect_quest_lv90")
|
||||
local i = get_quest_state("collect_quest_lv92")
|
||||
local j = get_quest_state("collect_quest_lv94")
|
||||
local k = get_quest_state("collect_quest_lv96")
|
||||
|
||||
|
||||
local a_ = string.format("%d", a)
|
||||
local b_ = string.format("%d", b)
|
||||
local c_ = string.format("%d", c)
|
||||
local d_ = string.format("%d", d)
|
||||
local e_ = string.format("%d", e)
|
||||
local f_ = string.format("%d", f)
|
||||
local g_ = string.format("%d", g)
|
||||
local h_ = string.format("%d", h)
|
||||
local i_ = string.format("%d", i)
|
||||
local j_ = string.format("%d", j)
|
||||
local k_ = string.format("%d", k)
|
||||
|
||||
affect.remove_all_collect() -- remove all
|
||||
|
||||
if a_== value then
|
||||
affect.add_collect(apply.MOV_SPEED, 10, 60*60*24*365*60)
|
||||
end
|
||||
if b_== value then
|
||||
affect.add_collect(apply.ATT_SPEED,5,60*60*24*365*60)
|
||||
end
|
||||
if c_== value then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS,60,60*60*24*365*60)
|
||||
end
|
||||
if d_== value then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS,50,60*60*24*365*60)
|
||||
end
|
||||
|
||||
if e_== value then
|
||||
affect.add_collect(apply.MOV_SPEED,11,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_DEF_BONUS,10,60*60*24*365*60) --60<36><30>
|
||||
end
|
||||
|
||||
if f_== value then
|
||||
affect.add_collect(apply.ATT_SPEED,6,60*60*24*365*60) --60<36><30>
|
||||
affect.add_collect_point(POINT_ATT_BONUS,10,60*60*24*365*60) --60<36><30>
|
||||
end
|
||||
|
||||
if g_ == value then
|
||||
affect.add_collect_point(POINT_RESIST_WARRIOR,10,60*60*24*365*60) --60 year
|
||||
affect.add_collect_point(POINT_RESIST_ASSASSIN,10,60*60*24*365*60) --60 year
|
||||
affect.add_collect_point(POINT_RESIST_SURA,10,60*60*24*365*60) --60 year
|
||||
affect.add_collect_point(POINT_RESIST_SHAMAN,10,60*60*24*365*60) --60 year
|
||||
end
|
||||
|
||||
if h_ == value then
|
||||
affect.add_collect_point(POINT_ATTBONUS_WARRIOR,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_ASSASSIN,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_SURA,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_SHAMAN,8,60*60*24*365*60)
|
||||
end
|
||||
|
||||
if i_ == value then
|
||||
local reward = pc.getf("collect_quest_lv92", "reward")
|
||||
|
||||
if reward == 1 then
|
||||
affect.add_collect(1, 1000, 60*60*24*365*60) -- hp index == 1, hp +1000
|
||||
elseif reward == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 120, 60*60*24*365*60)
|
||||
elseif reward == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 51, 60*60*24*365*60)
|
||||
end
|
||||
end
|
||||
|
||||
if j_ == value then
|
||||
local reward = pc.getf("collect_quest_lv94", "reward")
|
||||
if reward == 1 then
|
||||
affect.add_collect(1, 1100, 60*60*24*365*60)
|
||||
elseif reward == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 140, 60*60*24*365*60)
|
||||
elseif reward == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 60, 60*60*24*365*60)
|
||||
end
|
||||
end
|
||||
|
||||
if k_ == value then
|
||||
local reward = pc.getf("collect_quest_lv96", "reward")
|
||||
if reward == 1 then
|
||||
affect.add_collect(1, 1000, 60*60*24*365*60)
|
||||
elseif reward == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 120, 60*60*24*365*60)
|
||||
elseif reward == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 50, 60*60*24*365*60)
|
||||
end
|
||||
end
|
||||
|
||||
say_title(gameforge.check_collect_reward._020_say_title)
|
||||
say(gameforge.check_collect_reward._060_say)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
96
gamefiles/data/quest/check_trans_ticket.quest
Normal file
96
gamefiles/data/quest/check_trans_ticket.quest
Normal file
@ -0,0 +1,96 @@
|
||||
quest check_trans_ticket begin
|
||||
state start begin
|
||||
when login or levelup with pc.level >0 begin
|
||||
set_state(zone_enter)
|
||||
end
|
||||
end
|
||||
|
||||
state zone_enter begin
|
||||
|
||||
-- Entrance to "Spinnendungeon"
|
||||
|
||||
when 20088.chat.gameforge.check_trans_ticket._10_npcChat begin
|
||||
say_title(gameforge.check_trans_ticket._15_sayTitle)
|
||||
say(gameforge.check_trans_ticket._20_say)
|
||||
wait()
|
||||
if pc.count_item(71095) + pc.count_item(71130) > 0 then
|
||||
say_title(gameforge.check_trans_ticket._15_sayTitle)
|
||||
say(gameforge.check_trans_ticket._30_say)
|
||||
wait()
|
||||
if false == pc.can_warp() then
|
||||
say(gameforge.check_trans_ticket._160_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(71095) + pc.count_item(71130) > 0 then
|
||||
if pc.count_item(71130) >= 1 then -- player get item from mystery box
|
||||
pc.remove_item(71130, 1) -- remove this one
|
||||
elseif pc.count_item(71095) >= 1 then
|
||||
pc.remove_item(71095, 1) -- remove the ItemShop item
|
||||
else
|
||||
return -- This can only happen as a result of cheating
|
||||
end
|
||||
pc.warp(704100, 464100)
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.check_trans_ticket._15_sayTitle)
|
||||
say(gameforge.check_trans_ticket._40_say)
|
||||
wait()
|
||||
end
|
||||
end
|
||||
|
||||
-- Entrance to "Grotte der Verbannung"
|
||||
|
||||
when 20093.chat.gameforge.check_trans_ticket._50_npcChat begin
|
||||
say_title(gameforge.check_trans_ticket._55_sayTitle)
|
||||
-- inhalt f<>r Schl<68>ssel "gameforge.check_trans_ticket._60_say":
|
||||
say(gameforge.check_trans_ticket._60_say)
|
||||
if pc.get_level() < 75 then
|
||||
-- inhalt f<>r Schl<68>ssel "gameforge.check_trans_ticket._70_say":
|
||||
say_reward(gameforge.check_trans_ticket._70_say)
|
||||
return
|
||||
elseif pc.count_item(30190) + pc.count_item(30191) == 0 then
|
||||
local get_bloodstone = select(gameforge.check_trans_ticket._75_1_select, gameforge.check_trans_ticket._75_2_select)
|
||||
if get_bloodstone == 1 then
|
||||
-- inhalt f<>r Schl<68>ssel "gameforge.check_trans_ticket._80_say":
|
||||
say_title(gameforge.check_trans_ticket._55_sayTitle)
|
||||
say(gameforge.check_trans_ticket._80_say)
|
||||
say(gameforge.check_trans_ticket._90_say_reward)
|
||||
say_reward(gameforge.check_trans_ticket._100_say)
|
||||
else
|
||||
say_title(gameforge.check_trans_ticket._55_sayTitle)
|
||||
say(gameforge.check_trans_ticket._110_say)
|
||||
say(gameforge.check_trans_ticket._90_say_reward)
|
||||
say_reward(gameforge.check_trans_ticket._120_say)
|
||||
end
|
||||
elseif pc.count_item(30190) + pc.count_item(30191) > 0 then
|
||||
local get_bloodstone = select(gameforge.check_trans_ticket._130_1_select, gameforge.check_trans_ticket._130_2_select)
|
||||
|
||||
if false == pc.can_warp() then
|
||||
say(gameforge.check_trans_ticket._160_say)
|
||||
return
|
||||
end
|
||||
|
||||
if get_bloodstone == 1 then
|
||||
say_pc_name()
|
||||
say(string.format(gameforge.check_trans_ticket._140_say, pc.get_name()))
|
||||
if pc.count_item(30190) >= 1 then -- when character has Bloodstones from ItemShop and some from keyquest remove the ones from the keyquest first
|
||||
pc.remove_item(30190, 1) -- remove keyquest bloodstone first
|
||||
elseif pc.count_item(30191) >= 1 then
|
||||
pc.remove_item(30191, 1) -- remove ItemShop bloodstone
|
||||
else
|
||||
return -- This can only happen as a result of cheating
|
||||
end
|
||||
wait()
|
||||
say_title(gameforge.check_trans_ticket._55_sayTitle)
|
||||
say(gameforge.check_trans_ticket._150_say)
|
||||
wait()
|
||||
pc.warp(900,1207800)
|
||||
end
|
||||
else
|
||||
--notice("This shouldn't happen!") -- debug message
|
||||
end
|
||||
end
|
||||
end --state
|
||||
end --quest
|
60
gamefiles/data/quest/christmas_costume_shop_box.quest
Normal file
60
gamefiles/data/quest/christmas_costume_shop_box.quest
Normal file
@ -0,0 +1,60 @@
|
||||
quest christmas_costume_shop_box begin
|
||||
state start begin
|
||||
|
||||
function give_costume_item(costume_vnum, duration)
|
||||
|
||||
-- provide the new costume
|
||||
local remain_time = 86400*duration
|
||||
pc.give_item2_select(costume_vnum,1)
|
||||
item.set_socket(0, get_global_time()+remain_time)
|
||||
end
|
||||
|
||||
|
||||
when 38056.use begin
|
||||
local n = number (1,100)
|
||||
if n <= 1 then
|
||||
pc.give_item2(71085,1)
|
||||
elseif n <= 2 then
|
||||
pc.give_item2(70039,1)
|
||||
elseif n <= 6 then
|
||||
pc.give_item2(71032,1)
|
||||
elseif n <= 10 then
|
||||
pc.give_item2(70024,1)
|
||||
elseif n <= 24 then
|
||||
pc.give_item2(25040,1)
|
||||
elseif n <= 36 then
|
||||
pc.give_item2(71012,1)
|
||||
elseif n <= 47 then
|
||||
pc.give_item2(71130,3)
|
||||
elseif n <= 58 then
|
||||
pc.give_item2(71083,1)
|
||||
elseif n <= 69 then
|
||||
pc.give_item2(71004,10)
|
||||
elseif n <= 79 then
|
||||
pc.give_item2(71018,2)
|
||||
elseif n <= 80 then
|
||||
pc.give_item2(25041,1)
|
||||
elseif n <= 82 then
|
||||
christmas_costume_shop_box.give_costume_item(41147, 30)
|
||||
elseif n <= 84 then
|
||||
christmas_costume_shop_box.give_costume_item(41148, 30)
|
||||
elseif n <= 87 then
|
||||
christmas_costume_shop_box.give_costume_item(45082, 30)
|
||||
elseif n <= 90 then
|
||||
christmas_costume_shop_box.give_costume_item(45084, 30)
|
||||
elseif n <= 92 then
|
||||
christmas_costume_shop_box.give_costume_item(41149, 30)
|
||||
elseif n <= 94 then
|
||||
christmas_costume_shop_box.give_costume_item(41150, 30)
|
||||
elseif n <= 97 then
|
||||
christmas_costume_shop_box.give_costume_item(45083, 30)
|
||||
else
|
||||
christmas_costume_shop_box.give_costume_item(45084, 30)
|
||||
end
|
||||
|
||||
pc.remove_item(38056,1)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
69
gamefiles/data/quest/christmas_santa.quest
Normal file
69
gamefiles/data/quest/christmas_santa.quest
Normal file
@ -0,0 +1,69 @@
|
||||
quest christmas_santa begin
|
||||
state start begin
|
||||
when santa.click begin
|
||||
local intro_msg = locale.christmas_santa.intro_msg
|
||||
|
||||
local skill_book_buy_cost = locale.christmas_santa.skill_book_buy_cost
|
||||
local skill_book_msg = locale.christmas_santa.skill_book_msg
|
||||
local skill_book_sold_out_msg = locale.christmas_santa.skill_book_sold_out_msg
|
||||
|
||||
local hairdye_buy_cost = locale.christmas_santa.hairdye_buy_cost
|
||||
local hairdye_msg = locale.christmas_santa.hairdye_msg
|
||||
local hairdye_sold_out_msg = locale.christmas_santa.hairdye_sold_out_msg
|
||||
|
||||
local not_enough_money = locale.christmas_santa.not_enough_money
|
||||
|
||||
local SKILL_BOOK_GROUP = 50300
|
||||
local HAIRDYE_GROUP = 70201
|
||||
|
||||
say(intro_msg)
|
||||
local s = select(locale.christmas_santa.want_skillbook, gameforge.locale.christmas_santa.want_hairdye)
|
||||
if s==1 then
|
||||
local r = npc.get_remain_skill_book_count();
|
||||
if r>0 then
|
||||
say(skill_book_msg)
|
||||
local s = select(locale.christmas_santa.select_buy, gameforge.locale.christmas_santa.select_stop)
|
||||
if s==1 then
|
||||
if npc.get_remain_skill_book_count()>0 then
|
||||
if pc.gold >= skill_book_buy_cost then
|
||||
npc.dec_remain_skill_book_count()
|
||||
pc.changegold(-skill_book_buy_cost)
|
||||
pc.give_item_from_special_item_group(SKILL_BOOK_GROUP)
|
||||
else
|
||||
say(gameforge.locale.christmas_santa.not_enough_money)
|
||||
end
|
||||
else
|
||||
say(skill_book_sold_out_msg)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(skill_book_sold_out_msg)
|
||||
end
|
||||
elseif s==2 then
|
||||
local r = npc.get_remain_hairdye_count();
|
||||
if r>0 then
|
||||
say(hairdye_msg)
|
||||
local s = select(locale.christmas_santa.select_buy, gameforge.locale.christmas_santa.select_stop)
|
||||
if s==1 then
|
||||
if npc.get_remain_hairdye_count()>0 then
|
||||
if pc.gold >= hairdye_buy_cost then
|
||||
npc.dec_remain_hairdye_count()
|
||||
pc.changegold(-hairdye_buy_cost)
|
||||
pc.give_item_from_special_item_group(HAIRDYE_GROUP)
|
||||
else
|
||||
say(gameforge.locale.christmas_santa.not_enough_money)
|
||||
end
|
||||
else
|
||||
say(hairdye_sold_out_msg)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(hairdye_sold_out_msg)
|
||||
end
|
||||
elseif s==3 then
|
||||
say(locale.christmas_santa.bye_msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
49
gamefiles/data/quest/christmas_tree.quest
Normal file
49
gamefiles/data/quest/christmas_tree.quest
Normal file
@ -0,0 +1,49 @@
|
||||
quest christmas_tree begin
|
||||
state start begin
|
||||
|
||||
when login with game.get_event_flag("xmas_tree") == 0 begin
|
||||
test = pc.getqf("put_sock_count")
|
||||
if test != 0 then
|
||||
pc.setqf("put_sock_count", 0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when xmas_tree.click begin
|
||||
local SOCK_VNUM = 50010
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.greet)
|
||||
local s = select(locale.christmas_tree.sel_put_sock, locale.christmas_tree.sel_put_sock_not, locale.christmas_tree.sel_intro_event)
|
||||
if s==1 then
|
||||
if pc.level >= 10 then
|
||||
if pc.getqf("put_sock_count") >= 3 then
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.no_more_sock)
|
||||
else
|
||||
if pc.countitem(SOCK_VNUM) >= 1 then
|
||||
pc.setqf("put_sock_count", pc.getqf("put_sock_count") + 1)
|
||||
pc.removeitem(SOCK_VNUM, 1)
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.gain_item_msg)
|
||||
|
||||
pc.give_item_from_special_item_group(SOCK_VNUM)
|
||||
else
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.no_sock)
|
||||
end
|
||||
end
|
||||
else
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.under_level_10)
|
||||
end
|
||||
elseif s==2 then
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.greet2)
|
||||
elseif s==3 then
|
||||
say_title(locale.christmas_tree.christmas_say_title)
|
||||
say(locale.christmas_tree.intro_msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
128
gamefiles/data/quest/collect_herb_lv10.quest
Normal file
128
gamefiles/data/quest/collect_herb_lv10.quest
Normal file
@ -0,0 +1,128 @@
|
||||
quest make_herb_lv10 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() ==10 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
say(gameforge.collect_herb_lv10._30_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv10._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._70_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take the Potion of Daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv10._80_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._90_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._100_say)
|
||||
wait()
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_item_vnum(50703)
|
||||
say_reward(string.format(gameforge.collect_herb_lv10._110_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50703)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._130_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 177.kill begin
|
||||
if pc.count_item(50703)<5- pc.getqf("collect_count")then
|
||||
pc.give_item2(50703, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv10._140_npcChat with pc.count_item(50703) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._160_say)
|
||||
pc.remove_item(50703, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=90
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 4 then --Less than 5
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv10._170_say, 5-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potions
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._180_say)
|
||||
wait()
|
||||
say(gameforge.collect_herb_lv10._190_say)
|
||||
say_reward(gameforge.collect_herb_lv10._200_sayReward)
|
||||
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
pc.give_item2(16023)
|
||||
pc.change_money(5000)
|
||||
pc.give_exp2(6500)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._210_say)
|
||||
pc.setqf("drink_drug",0) --Initialize Potions
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
125
gamefiles/data/quest/collect_herb_lv15.quest
Normal file
125
gamefiles/data/quest/collect_herb_lv15.quest
Normal file
@ -0,0 +1,125 @@
|
||||
quest make_herb_lv15 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() ==15 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
say(gameforge.collect_herb_lv15._10_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv15._20_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._30_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._40_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take the Potion of Daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv15._50_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv15._60_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._70_say)
|
||||
say_item_vnum(50704)
|
||||
say_reward(string.format(gameforge.collect_herb_lv15._80_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50704)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._90_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 181.kill begin
|
||||
if pc.count_item(50704)<5- pc.getqf("collect_count")then
|
||||
pc.give_item2(50704, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv15._100_npcChat with pc.count_item(50704) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._110_say)
|
||||
pc.remove_item(50704, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=90
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 4 then --Less than 5
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv15._120_say, 5-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potions
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._130_say)
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.collect_herb_lv15._140_sayReward)
|
||||
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
pc.give_item2(17023)
|
||||
pc.change_money(10000)
|
||||
pc.give_exp2(25000)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._150_say)
|
||||
pc.setqf("drink_drug",0) --please get me another ones
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
124
gamefiles/data/quest/collect_herb_lv20.quest
Normal file
124
gamefiles/data/quest/collect_herb_lv20.quest
Normal file
@ -0,0 +1,124 @@
|
||||
quest make_herb_lv20 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() ==20 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
say(gameforge.collect_herb_lv20._10_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv10._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._20_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take the Potion of Daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv15._50_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv20._30_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._40_say)
|
||||
say_item_vnum(50705)
|
||||
say_reward(string.format(gameforge.collect_herb_lv20._50_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50705)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._60_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 182.kill begin
|
||||
if pc.count_item(50705)< 10 - pc.getqf("collect_count")then
|
||||
pc.give_item2(50705, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv20._70_npcChat with pc.count_item(50705) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._80_say)
|
||||
pc.remove_item(50705, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=80
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 9 then --Less than 10
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv20._90_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv20._100_say, 10-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potions
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._110_say)
|
||||
say_reward(gameforge.collect_herb_lv20._120_sayReward)
|
||||
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
pc.give_item2(14023)
|
||||
pc.change_money(15000)
|
||||
pc.give_exp2(95000)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv20._130_say)
|
||||
pc.setqf("drink_drug",0) --Initialize Potion
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
138
gamefiles/data/quest/collect_herb_lv25.quest
Normal file
138
gamefiles/data/quest/collect_herb_lv25.quest
Normal file
@ -0,0 +1,138 @@
|
||||
quest make_herb_lv25 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() ==25 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
say(gameforge.collect_herb_lv25._10_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv10._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._20_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._30_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take the Potion of Daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv10._80_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv25._40_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._50_say)
|
||||
say_item_vnum(50706)
|
||||
say_reward(string.format(gameforge.collect_herb_lv25._60_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_herb_lv10._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50706)==0 then
|
||||
say(gameforge.collect_herb_lv25._70_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 183.kill begin
|
||||
if pc.count_item(50706)<10 - pc.getqf("collect_count") then
|
||||
pc.give_item2(50706, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv25._80_npcChat with pc.count_item(50706) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._90_say)
|
||||
pc.remove_item(50706, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=70
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 9 then --Less than 10
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv25._100_say, 10-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potion
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._110_say)
|
||||
say_reward(gameforge.collect_herb_lv25._120_sayReward)
|
||||
|
||||
if pc.job==0 then
|
||||
pc.give_item2(12222)
|
||||
say_reward(gameforge.collect_herb_lv25._130_sayReward)
|
||||
end
|
||||
if pc.job==1 then
|
||||
pc.give_item2(12362)
|
||||
say_reward(gameforge.collect_herb_lv25._140_sayReward)
|
||||
end
|
||||
if pc.job==2 then
|
||||
pc.give_item2(12502)
|
||||
say_reward(gameforge.collect_herb_lv25._150_sayReward)
|
||||
end
|
||||
if pc.job==3 then
|
||||
pc.give_item2(12642)
|
||||
say_reward(gameforge.collect_herb_lv25._160_sayReward)
|
||||
end
|
||||
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
pc.change_money(20000)
|
||||
pc.give_exp2(200000)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv25._170_say)
|
||||
pc.setqf("drink_drug",0) --Initialize Potion
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
128
gamefiles/data/quest/collect_herb_lv4.quest
Normal file
128
gamefiles/data/quest/collect_herb_lv4.quest
Normal file
@ -0,0 +1,128 @@
|
||||
quest make_herb_lv4 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() == 4 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv4._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv4._10_sendLetter)
|
||||
say(gameforge.collect_herb_lv4._20_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv10._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._30_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._40_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take potion of daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv10._80_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv4._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._60_say)
|
||||
say_item_vnum(50701)
|
||||
say_reward(string.format(gameforge.collect_herb_lv4._70_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._80_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50701)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._90_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 173.kill begin
|
||||
if pc.count_item(50701)<5-pc.getqf("collect_count") then
|
||||
pc.give_item2(50701, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv4._100_npcChat with pc.count_item(50701) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._160_say)
|
||||
pc.remove_item(50701, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=90
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 4 then --Less than 5
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv4._110_say, 5-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potions
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._120_say)
|
||||
say_title(gameforge.collect_herb_lv4._130_sayTitle)
|
||||
say_reward(gameforge.collect_herb_lv4._140_sayReward)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
if pc.job==3 then
|
||||
pc.give_item2(07003)
|
||||
say_reward(gameforge.collect_herb_lv4._150_sayReward)
|
||||
return
|
||||
else
|
||||
pc.give_item2(00013)
|
||||
say_reward(gameforge.collect_herb_lv4._160_sayReward)
|
||||
|
||||
end
|
||||
pc.change_money(1000)
|
||||
pc.give_exp2(500)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv4._170_say)
|
||||
pc.setqf("drink_drug",0) --Initialize Potions
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
140
gamefiles/data/quest/collect_herb_lv7.quest
Normal file
140
gamefiles/data/quest/collect_herb_lv7.quest
Normal file
@ -0,0 +1,140 @@
|
||||
quest make_herb_lv7 begin
|
||||
state start begin
|
||||
when login or levelup with pc.get_level() ==7 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv10._20_sendLetter)
|
||||
say(gameforge.collect_herb_lv7._10_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_herb_lv10._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._20_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._30_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("collect_count",0)--Current number of items
|
||||
pc.setqf("drink_drug",0) --when take the Potion of Daze
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_herb_lv10._80_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_herb_lv7._40_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._50_say)
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_item_vnum(50702)
|
||||
say_reward(string.format(gameforge.collect_herb_lv7._60_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Potion of Daze
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv10._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(50702)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._70_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
when 175.kill begin
|
||||
if pc.count_item(50702)< 5 -pc.getqf("collect_count") then
|
||||
pc.give_item2(50702, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 20084.chat.gameforge.collect_herb_lv7._80_npcChat with pc.count_item(50702) >0 begin
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_herb_lv15._110_say)
|
||||
pc.remove_item(50702, 1)
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=90
|
||||
else
|
||||
pass_percent=100
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 4 then --Less than 5
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --you got one, so you would get +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_herb_lv7._90_say, 5-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Initialize the potions
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._95_say)
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.collect_herb_lv7._100_sayReward)
|
||||
|
||||
if pc.job==0 then
|
||||
pc.give_item2(11203)
|
||||
say_reward(gameforge.collect_herb_lv7._110_sayReward)
|
||||
end
|
||||
if pc.job==1 then
|
||||
pc.give_item2(11403)
|
||||
say_reward(gameforge.collect_herb_lv7._120_sayReward)
|
||||
end
|
||||
if pc.job==2 then
|
||||
pc.give_item2(11603)
|
||||
say_reward(gameforge.collect_herb_lv7._130_sayReward)
|
||||
end
|
||||
if pc.job==3 then
|
||||
pc.give_item2(11803)
|
||||
say_reward(gameforge.collect_herb_lv7._140_sayReward)
|
||||
end
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
|
||||
clear_letter()
|
||||
set_state(__complete)
|
||||
|
||||
pc.change_money(3000)
|
||||
pc.give_exp2(2000)
|
||||
set_quest_state("levelup","run")
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_herb_lv7._150_say)
|
||||
pc.setqf("drink_drug",0) --Initialize Potions
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
234
gamefiles/data/quest/collect_quest_lv30.quest
Normal file
234
gamefiles/data/quest/collect_quest_lv30.quest
Normal file
@ -0,0 +1,234 @@
|
||||
quest collect_quest_lv30 begin
|
||||
state start begin
|
||||
when login or levelup with pc.level >= 30 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._150_sayTitle)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv30._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv30._10_sendLetter)
|
||||
say(gameforge.collect_quest_lv30._20_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv30._30_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._40_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._50_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._60_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv30._70_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv30._80_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._90_say)
|
||||
say_item_vnum(30006)
|
||||
say_reward(string.format(gameforge.collect_quest_lv30._100_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv30._110_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv30._120_say)
|
||||
|
||||
return
|
||||
end
|
||||
if pc.count_item(30006)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._130_say)
|
||||
return
|
||||
end
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
when 601.kill begin
|
||||
local s = number(1, 100)
|
||||
if s <= 5 then
|
||||
pc.give_item2(30006, 1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv30._140_npcChat with pc.count_item(30006) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30006) >0 then
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._150_say)
|
||||
pc.remove_item("30006", 1)
|
||||
pc.setqf("duration",get_time()+60*60*22) ---22Stunden
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
if true == pet.is_summon(34003) or true == pet.is_summon(34001) then
|
||||
pass_percent=92
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
end
|
||||
|
||||
notice(pass_percent)
|
||||
|
||||
local s= number(1,100)
|
||||
if s <= pass_percent then
|
||||
if pc.getqf("collect_count")< 9 then
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index)
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv30._160_say, 10-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._170_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._180_say)
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._190_say, item_name(30006)))
|
||||
say(gameforge.collect_quest_lv30._190_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._200_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv30._210_sendLetter)
|
||||
|
||||
if pc.count_item(30220)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._150_sayTitle)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30220) >0 then
|
||||
say_title(gameforge.collect_quest_lv30._220_sayTitle)
|
||||
say_reward(gameforge.collect_quest_lv30._230_sayReward)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv30._220_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._240_say)
|
||||
say_item_vnum(30220)
|
||||
say(gameforge.collect_quest_lv30._250_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 631.kill or 632.kill or 633.kill or 634.kill or 635.kill or 636.kill or 637.kill begin
|
||||
local s = number(1, 500)
|
||||
if s == 1 and pc.count_item(30220)==0 then
|
||||
pc.give_item2(30220, 1)
|
||||
send_letter(gameforge.collect_quest_lv30._260_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv30._270_npcChat with pc.count_item(30220) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30220) > 0 then
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._280_say)
|
||||
pc.remove_item(30220,1)
|
||||
set_state(__reward)
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._150_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30220)))
|
||||
say(gameforge.collect_quest_lv30._290_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv30._300_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv30._300_sendLetter)
|
||||
say(gameforge.collect_quest_lv30._320_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv30._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._350_say)
|
||||
say_reward(gameforge.collect_quest_lv30._360_sayReward)
|
||||
|
||||
affect.add_collect(apply.MOV_SPEED, 10, 60*60*24*365*60) --60Jahre
|
||||
pc.give_item2(50109)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv40", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __giveup__ begin
|
||||
when 20084.chat.gameforge.collect_quest_lv30._370_npcChat begin
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv30._380_say)
|
||||
set_state(start)
|
||||
end
|
||||
end
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
220
gamefiles/data/quest/collect_quest_lv40.quest
Normal file
220
gamefiles/data/quest/collect_quest_lv40.quest
Normal file
@ -0,0 +1,220 @@
|
||||
quest collect_quest_lv40 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 40 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._150_sayTitle)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv40._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._20_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._30_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv40._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._50_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._70_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- Die Versuchszeit
|
||||
pc.setqf("collect_count",0)--Die Zahl der gesammelten Artikel
|
||||
pc.setqf("drink_drug",0) --Wenn man das Verwirrungsswasser trinkt, 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv30._70_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._80_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._90_say)
|
||||
say_item_vnum(30047)
|
||||
say_reward(string.format(gameforge.collect_quest_lv40._100_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Das Verwirrungswasser
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv40._110_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv40._120_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30047)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._130_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv40._140_npcChat with pc.count_item(30047) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30047) >0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._150_say)
|
||||
pc.remove_item(30047, 1)
|
||||
pc.setqf("duration",get_time()+60*60*22)--------------22Stunde
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 14 then --nicht mehr als 15
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --Da du eins besorgt hast, mache ich +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv40._160_say, 15-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Wunderwasser
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._170_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._180_say)
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Geheimwasser
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv40._190_say, item_name(30080)))
|
||||
say(gameforge.collect_quest_lv40._190_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._200_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv30._210_sendLetter)
|
||||
|
||||
if pc.count_item(30221)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv40._210_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30221) >0 then
|
||||
say_title(gameforge.collect_quest_lv40._220_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._230_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv40._240_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._250_say)
|
||||
say_item_vnum(30221)----------Der Seelenstein der geheimen Sekte
|
||||
say(gameforge.collect_quest_lv40._260_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when 731.kill or 732.kill or 733.kill or 734.kill or 735.kill or 736.kill or 737.kill or 701.kill or 702.kill or 703.kill or 704.kill or 705.kill or 706.kill or 707.kill begin
|
||||
local s = number(1, 500)
|
||||
if s == 1 and pc.count_item(30221)==0 then
|
||||
pc.give_item2(30221, 1)
|
||||
send_letter(gameforge.collect_quest_lv40._270_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv40._280_npcChat with pc.count_item(30221) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30221) > 0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._290_say)
|
||||
pc.remove_item(30221,1)
|
||||
set_state(__reward)
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30221)))
|
||||
say(gameforge.collect_quest_lv40._295_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._310_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._320_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv40._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv40._340_say)
|
||||
say_reward(gameforge.collect_quest_lv40._350_sayReward)
|
||||
|
||||
affect.add_collect(apply.ATT_SPEED,5,60*60*24*365*60) --60Jahre
|
||||
pc.give_item2(50110)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv50", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
227
gamefiles/data/quest/collect_quest_lv50.quest
Normal file
227
gamefiles/data/quest/collect_quest_lv50.quest
Normal file
@ -0,0 +1,227 @@
|
||||
quest collect_quest_lv50 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 50 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._150_sayTitle)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv50._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv50._20_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._30_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or
|
||||
20084.chat.gameforge.collect_quest_lv50._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._50_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._70_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- Versuchszeit
|
||||
pc.setqf("collect_count",0)--die zahl der gesammelten artikel
|
||||
pc.setqf("drink_drug",0) --Wenn man Das Verwirrungswasser trinkt 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv50._80_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv50._90_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._100_say)
|
||||
say_item_vnum(30015)
|
||||
say_reward(string.format(gameforge.collect_quest_lv50._110_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Das Verwirrungswasser
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv50._120_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv50._130_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30015)==0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._140_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv50._150_npcChat with pc.count_item(30015) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30015) >0 then
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._160_say)
|
||||
pc.remove_item(30015, 1)
|
||||
pc.setqf("duration",get_time()+60*60*22) ----------------22Stunden
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 14 then --nicht mehr als 15
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --da du eins besorgst hast, mache ich +1
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv50._170_say, 15-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Verwirrungswasser
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._180_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._190_say)
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Verwirrungswasser
|
||||
return
|
||||
end
|
||||
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._190_say, item_name(30015)))
|
||||
say(gameforge.collect_quest_lv50._195_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._200_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv50._210_sendLetter)
|
||||
|
||||
if pc.count_item(30222)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._150_sayTitle)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30222) >0 then
|
||||
say_title(gameforge.collect_quest_lv50._220_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._230_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._240_say)
|
||||
say_item_vnum(30222)----------Das Geisstein der Schlangegeist
|
||||
say(gameforge.collect_quest_lv50._250_say)
|
||||
end
|
||||
|
||||
|
||||
when 1001.kill or
|
||||
1002.kill or
|
||||
1003.kill or
|
||||
1004.kill begin
|
||||
local s = number(1, 500)
|
||||
if s == 1 and pc.count_item(30222)==0 then
|
||||
pc.give_item2(30222, 1)
|
||||
send_letter(gameforge.collect_quest_lv50._260_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or
|
||||
20084.chat.gameforge.collect_quest_lv50._270_npcChat with pc.count_item(30222) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
if pc.count_item(30222) > 0 then
|
||||
say(gameforge.collect_quest_lv50._280_say)
|
||||
pc.remove_item(30222,1)
|
||||
set_state(__reward)
|
||||
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30222)))
|
||||
say(gameforge.collect_quest_lv50._295_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv50._290_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv50._300_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._310_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or
|
||||
20018.chat.gameforge.collect_quest_lv30._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv50._320_say)
|
||||
say_reward(gameforge.collect_quest_lv50._330_sayReward)
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS,60,60*60*24*365*60) --60Jahre
|
||||
|
||||
pc.give_item2(50111)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv60", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
231
gamefiles/data/quest/collect_quest_lv60.quest
Normal file
231
gamefiles/data/quest/collect_quest_lv60.quest
Normal file
@ -0,0 +1,231 @@
|
||||
quest collect_quest_lv60 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 60 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv40._210_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv60._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv60._20_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._30_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv60._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._70_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._80_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- Versuchszeit
|
||||
pc.setqf("collect_count",0)--gesammte Zahl der Artikel
|
||||
pc.setqf("drink_drug",0) --Wenn das Verwirrungswasser trinkt, plus 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv60._90_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv60._100_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._110_say)
|
||||
say_item_vnum(30050)
|
||||
say_reward(string.format(gameforge.collect_quest_lv60._110_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --DasVerwirrungswasser
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv60._120_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv60._130_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30050)==0 then
|
||||
say_title(gameforge.collect_quest_lv60._140_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._150_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv60._160_npcChat with pc.count_item(30050) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30050) >0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._170_say)
|
||||
pc.remove_item(30050, 1)
|
||||
pc.setqf("duration",get_time()+60*60*22)------------------22Stunden
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 19 then --nicht mehr als 20
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --Da du noch einen besorgst, macht man plus eins
|
||||
say_title(gameforge.collect_quest_lv60._140_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv60._180_say, 20-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Verwirrungswasser
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._190_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._200_say)
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Verwirrungswasser
|
||||
return
|
||||
end
|
||||
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv40._190_say, item_name(30050)))
|
||||
say(gameforge.collect_quest_lv60._205_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._210_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv60._220_sendLetter)
|
||||
|
||||
if pc.count_item(30223)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv40._210_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30223) >0 then
|
||||
say_title(gameforge.collect_quest_lv60._230_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._240_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv60._250_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._260_say)
|
||||
say_item_vnum(30223)
|
||||
say(gameforge.collect_quest_lv60._270_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 1101.kill or 1102.kill or 1103.kill or 1104.kill or 1105.kill or 1106.kill or 1107.kill begin
|
||||
local s = number(1, 500)
|
||||
if s == 1 and pc.count_item(30223)==0 then
|
||||
pc.give_item2(30223, 1)
|
||||
send_letter(gameforge.collect_quest_lv60._280_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv60._290_npcChat with pc.count_item(30223) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30223) > 0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._300_say)
|
||||
pc.remove_item(30223,1)
|
||||
set_state(__reward)
|
||||
|
||||
else
|
||||
say_title(gameforge.collect_herb_lv10._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30223)))
|
||||
say(gameforge.collect_quest_lv60._305_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv60._310_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
say(gameforge.collect_quest_lv60._320_say)
|
||||
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv60._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._340_say)
|
||||
wait()
|
||||
say_pc_name()
|
||||
say(gameforge.collect_quest_lv60._350_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._360_say)
|
||||
say_reward(gameforge.collect_quest_lv60._370_sayReward)
|
||||
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS,50,60*60*24*365*60)--60Jahre
|
||||
pc.give_item2(50112)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv70", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __giveup__ begin
|
||||
end
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
230
gamefiles/data/quest/collect_quest_lv70.quest
Normal file
230
gamefiles/data/quest/collect_quest_lv70.quest
Normal file
@ -0,0 +1,230 @@
|
||||
quest collect_quest_lv70 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 70 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_herb_lv10._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv60._10_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv70._10_sayTitle)
|
||||
say(gameforge.collect_quest_lv60._30_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv60._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._20_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._30_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._40_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- Versuchszeit
|
||||
pc.setqf("collect_count",0)--gesammte Zahl der Artikel
|
||||
pc.setqf("drink_drug",0) --1Punkt, wenn man das Verwirrungsasser trinkt
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv60._220_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv70._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._60_say)
|
||||
say_item_vnum(30165)
|
||||
say_reward(string.format(gameforge.collect_quest_lv70._70_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --DasVerwirrungswasser
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv70._80_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv70._90_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30165)==0 then
|
||||
say_title(gameforge.collect_quest_lv60._140_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._100_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
when 2301.kill or 2302.kill or 2303.kill or 2304.kill or 2305.kill or 2311.kill or 2312.kill or 2313.kill or 2314.kill or 2315.kill begin
|
||||
local s = number(1, 200)
|
||||
if s == 1 and pc.count_item(30165)==0 then
|
||||
pc.give_item2(30165)
|
||||
--send_letter(string.format(gameforge.collect_quest_lv70._110_sendLetter, item_name(30165)))
|
||||
send_letter(gameforge.collect_quest_lv70._110_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv70._120_npcChat with pc.count_item(30165) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30165) >0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._130_say)
|
||||
pc.remove_item(30165, 1)
|
||||
pc.setqf("duration",get_time()+60*60*22)------------------22Stunden
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 24 then --weniger als 25
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --Da du noch einen besorgst, macht man plus eins
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv70._140_say, 25-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Wunderwasser
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._150_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._160_say)
|
||||
pc.setqf("drink_drug",0) --Anfang mit dem Verwirrungswasser
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv0._190_say, item_name(30165)))
|
||||
say(gameforge.collect_quest_lv70._165_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._170_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv60._220_sendLetter)
|
||||
|
||||
if pc.count_item(30224)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv40._210_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30224) >0 then
|
||||
say_title(gameforge.collect_quest_lv70._180_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._190_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv70._200_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._210_say)
|
||||
say_item_vnum(30224)----------Das Geiststein
|
||||
say(gameforge.collect_quest_lv70._220_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 2301.kill or 2302.kill or 2303.kill or 2304.kill or 2305.kill or 2311.kill or 2312.kill or 2313.kill or 2314.kill or 2315.kill begin
|
||||
local s = number(1, 500)
|
||||
if s == 1 and pc.count_item(30224)==0 then
|
||||
pc.give_item2(30224)
|
||||
send_letter(gameforge.collect_quest_lv70._230_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv70._240_npcChat with pc.count_item(30224) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30224) > 0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._250_say)
|
||||
pc.remove_item(30224,1)
|
||||
set_state(__reward)
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30224)))
|
||||
say(gameforge.collect_quest_lv70._255_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
say(gameforge.collect_quest_lv70._260_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv30._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._270_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._280_say)
|
||||
say_reward(gameforge.collect_quest_lv70._290_sayReward)
|
||||
affect.add_collect(apply.MOV_SPEED,11,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_DEF_BONUS,10,60*60*24*365*60) --60<36><30>
|
||||
pc.give_item2(50113)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv80", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
231
gamefiles/data/quest/collect_quest_lv80.quest
Normal file
231
gamefiles/data/quest/collect_quest_lv80.quest
Normal file
@ -0,0 +1,231 @@
|
||||
quest collect_quest_lv80 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 80 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv80._10_targetVid)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv80._20_sendLetter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv80._30_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._40_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv60._40_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._50_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._60_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._70_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- Die Versuchszeit
|
||||
pc.setqf("collect_count",0)--die gesammelte Artikrl
|
||||
pc.setqf("drink_drug",0) --Wenn man das Verwirrungswasse trinkt 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
|
||||
send_letter(gameforge.collect_quest_lv60._220_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv80._80_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._90_say)
|
||||
say_item_vnum(30166)
|
||||
say_reward(string.format(gameforge.collect_quest_lv80._100_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --Das Wunderwasser der Verwirrung
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv80._110_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv80._120_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30166)==0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._130_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
when 1401.kill or 1402.kill or 1403.kill or 1601.kill or 1602.kill or 1603.kill begin
|
||||
local s = number(1, 100)
|
||||
if s <= 5 and pc.count_item(30166)==0 then
|
||||
pc.give_item2(30166, 1)
|
||||
--send_letter(string.format(gameforge.collect_quest_lv80._310_sendLetter, item_name(30166)))
|
||||
send_letter(gameforge.collect_quest_lv80._310_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv80._140_npcChat with pc.count_item(30166) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30166) >0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._150_say)
|
||||
pc.remove_item(30166, 1)
|
||||
pc.setqf("duration",get_time()+60*60*22)--------------22 Stunden
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 29 then
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index)
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(string.format(gameforge.collect_quest_lv80._160_say, 30-pc.getqf("collect_count")))
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._170_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._180_say)
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._190_say, item_name(30116)))
|
||||
say(gameforge.collect_quest_lv80._185_say, item_name(30116))
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv70._170_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
|
||||
send_letter(gameforge.collect_quest_lv60._220_sendLetter)
|
||||
if pc.count_item(30225)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv40._210_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30225) >0 then
|
||||
say_title(gameforge.collect_quest_lv80._190_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._200_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv80._210_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._220_say)
|
||||
say_item_vnum(30225)
|
||||
say(gameforge.collect_quest_lv80._230_say)
|
||||
end
|
||||
|
||||
|
||||
when 1401.kill or 1402.kill or 1403.kill or 1601.kill or 1602.kill or 1603.kill begin
|
||||
local s = number(1, 200)
|
||||
if s == 1 and pc.count_item(30225)==0 then
|
||||
pc.give_item2(30225, 1)
|
||||
send_letter(gameforge.collect_quest_lv80._240_sendLetter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv80._250_npcChat with pc.count_item(30225) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30225) > 0 then
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._260_say)
|
||||
pc.remove_item(30225,1)
|
||||
set_state(__reward)
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv60._50_sayTitle)
|
||||
--say(string.format(gameforge.collect_quest_lv30._290_say, item_name(30225)))
|
||||
say(gameforge.collect_quest_lv80._265_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
|
||||
send_letter(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv30._310_targetVid)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv40._300_sendLetter)
|
||||
say(gameforge.collect_quest_lv80._270_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv30._330_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._280_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.collect_quest_lv80._290_say)
|
||||
say_reward(gameforge.collect_quest_lv80._300_sayReward)
|
||||
affect.add_collect(apply.ATT_SPEED,6,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATT_BONUS,10,60*60*24*365*60)
|
||||
|
||||
pc.give_item2(50114)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv85", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
230
gamefiles/data/quest/collect_quest_lv85.quest
Normal file
230
gamefiles/data/quest/collect_quest_lv85.quest
Normal file
@ -0,0 +1,230 @@
|
||||
----------------------------------------------------
|
||||
--COLLECT QUEST_lv85
|
||||
--METIN2 ?? ???
|
||||
----------------------------------------------------
|
||||
quest collect_quest_lv85 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 85 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv85._010_target)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv85._020_send_letter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv85._030_say_title)
|
||||
say(gameforge.collect_quest_lv85._040_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or
|
||||
20084.chat.gameforge.collect_quest_lv85._050_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say(gameforge.collect_quest_lv85._055_say)
|
||||
say(gameforge.collect_quest_lv85._060_say)
|
||||
wait()
|
||||
say(gameforge.collect_quest_lv85._064_say)
|
||||
say(gameforge.collect_quest_lv85._065_say)
|
||||
wait()
|
||||
say(gameforge.collect_quest_lv85._069_say)
|
||||
say(gameforge.collect_quest_lv85._070_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0) -- ?? ?? ?? ??
|
||||
pc.setqf("collect_count",0)--??? ?? ??? ?
|
||||
pc.setqf("drink_drug",0) --??? ??? ??? 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv85._080_send_letter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv85._090_say_title)
|
||||
--- l
|
||||
say(gameforge.collect_quest_lv85._100_say)
|
||||
say_item_vnum(30167)
|
||||
say_reward(gameforge.collect_quest_lv85._105_1_say_reward .." "..pc.getqf("collect_count")..gameforge.collect_quest_lv85._105_2_say_reward)
|
||||
end
|
||||
|
||||
when 71035.use begin --??? ??
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv85._110_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv85._115_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30167)==0 then
|
||||
say(gameforge.collect_quest_lv85._120_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
when 2311.kill or 2312.kill or 2313.kill or 2314.kill or 2315.kill begin
|
||||
local s = number(1, 200)
|
||||
if s == 1 then
|
||||
pc.give_item2(30167)
|
||||
send_letter(gameforge.collect_quest_lv85._130_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv85._140_npcChat with pc.count_item(30167) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv85._149_say)
|
||||
say(gameforge.collect_quest_lv85._150_say)
|
||||
pc.remove_item(30167, 1)
|
||||
if is_test_server() then
|
||||
pc.setqf("duration",get_time()+2)
|
||||
else
|
||||
pc.setqf("duration",get_time()+60*60*22) -----------------------------------22??
|
||||
end
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=95
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 39 then --40???
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index) --?? ???? +1 ???
|
||||
say(gameforge.collect_quest_lv85._159_say)
|
||||
say(gameforge.collect_quest_lv85._160_say)
|
||||
say(gameforge.collect_quest_lv85._165_1_say.." "..40-pc.getqf("collect_count").. gameforge.collect_quest_lv85._165_2_say)
|
||||
say(gameforge.collect_quest_lv85._170_say)
|
||||
pc.setqf("drink_drug",0) --?? ???
|
||||
return
|
||||
end
|
||||
say(gameforge.collect_quest_lv85._174_say)
|
||||
say(gameforge.collect_quest_lv85._175_say)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say(gameforge.collect_quest_lv85._179_say)
|
||||
say(gameforge.collect_quest_lv85._180_say)
|
||||
pc.setqf("drink_drug",0) --?? ???
|
||||
return
|
||||
end
|
||||
else
|
||||
say(gameforge.collect_quest_lv85._185_say)
|
||||
say(gameforge.collect_quest_lv85._190_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv85._195_send_letter)
|
||||
|
||||
if pc.count_item(30226)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv85._010_target)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30226) >0 then
|
||||
say_title(gameforge.collect_quest_lv85._200_say_title)
|
||||
say(gameforge.collect_quest_lv85._210_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv85._220_say_title)
|
||||
say(gameforge.collect_quest_lv85._230_say)
|
||||
say_item_vnum(30226)
|
||||
say(gameforge.collect_quest_lv85._240_say)
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 2311.kill or 2312.kill or 2313.kill or 2314.kill or 2315.kill begin
|
||||
local s = number(1, 200)
|
||||
if s == 1 and pc.count_item(30226)==0 then
|
||||
pc.give_item2(30226)
|
||||
send_letter(gameforge.collect_quest_lv85._250_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv85._255_npcChat with pc.count_item(30226) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
say(gameforge.collect_quest_lv85._260_say)
|
||||
say(gameforge.collect_quest_lv85._265_say)
|
||||
pc.remove_item(30226,1)
|
||||
set_state(__reward)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv85._270_send_letter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv85._280_target)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv85._290_say_title)
|
||||
say(gameforge.collect_quest_lv85._300_say)
|
||||
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat.gameforge.collect_quest_lv85._310_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say(gameforge.collect_quest_lv85._311_say)
|
||||
say(gameforge.collect_quest_lv85._315_say)
|
||||
wait()
|
||||
say(gameforge.collect_quest_lv85._311_say)
|
||||
say(gameforge.collect_quest_lv85._316_say)
|
||||
say_reward(gameforge.collect_quest_lv85._317_say_reward)
|
||||
say_reward(gameforge.collect_quest_lv85._318_say_reward)
|
||||
say_reward(gameforge.collect_quest_lv85._319_say_reward)
|
||||
say("")
|
||||
pc.give_item2(50115)
|
||||
clear_letter()
|
||||
affect.add_collect_point(POINT_RESIST_WARRIOR,10,60*60*24*365*60) --60?
|
||||
affect.add_collect_point(POINT_RESIST_ASSASSIN,10,60*60*24*365*60) --60?
|
||||
affect.add_collect_point(POINT_RESIST_SURA,10,60*60*24*365*60) --60?
|
||||
affect.add_collect_point(POINT_RESIST_SHAMAN,10,60*60*24*365*60) --60?
|
||||
set_quest_state("collect_quest_lv90", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
257
gamefiles/data/quest/collect_quest_lv90.quest
Normal file
257
gamefiles/data/quest/collect_quest_lv90.quest
Normal file
@ -0,0 +1,257 @@
|
||||
----------------------------------------------------
|
||||
--COLLECT QUEST_lv90
|
||||
--METIN2 ?? ???
|
||||
----------------------------------------------------
|
||||
quest collect_quest_lv90 begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 90 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__",v,gameforge.collect_quest_lv90._010_target)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv90._020_send_letter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv90._030_say_title)
|
||||
say(gameforge.collect_quest_lv90._040_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv90._050_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(gameforge.collect_quest_lv90._055_say_title)
|
||||
say(gameforge.collect_quest_lv90._060_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv90._055_say_title)
|
||||
say(gameforge.collect_quest_lv90._064_say)
|
||||
say(gameforge.collect_quest_lv90._065_say)
|
||||
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration",0)
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv90._080_send_letter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title (gameforge.collect_quest_lv90._090_say_title)
|
||||
say(gameforge.collect_quest_lv90._100_say)
|
||||
say("")
|
||||
say_item_vnum(30168)
|
||||
say_reward(string.format(gameforge.collect_quest_lv90._105_say_reward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say (gameforge.collect_quest_lv90._110_say)
|
||||
return
|
||||
end
|
||||
if pc.getqf("drink_drug")==1 then
|
||||
say(gameforge.collect_quest_lv90._115_say)
|
||||
return
|
||||
end
|
||||
if pc.count_item(30168)==0 then
|
||||
say_title(gameforge.collect_quest_lv90._055_say_title)
|
||||
say(gameforge.collect_quest_lv90._120_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
when 691.kill or 792.kill or 791.kill or 1093.kill or 1304.kill or 2091.kill or 2191.kill or 2206.kill or 1901.kill or
|
||||
3090.kill or 3290.kill or 3590.kill begin
|
||||
local s = number(1, 100)
|
||||
if s <= 30 and pc.count_item(30168)==0 then
|
||||
pc.give_item2(30168, 1)
|
||||
send_letter(gameforge.collect_quest_lv90._130_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 20084.chat.gameforge.collect_quest_lv90._140_npcChat with pc.count_item(30168) >0 begin
|
||||
if get_time() > pc.getqf("duration") then
|
||||
if pc.count_item(30168) >0 then
|
||||
say(mob_name(20084))
|
||||
|
||||
say(gameforge.collect_quest_lv90._150_say)
|
||||
say("")
|
||||
pc.remove_item(30168, 1)
|
||||
if is_test_server() then
|
||||
pc.setqf("duration",get_time()+2)
|
||||
else
|
||||
pc.setqf("duration",get_time()+60*60*22)
|
||||
end
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
if pc.getqf("drink_drug")==0 then
|
||||
pass_percent=60
|
||||
else
|
||||
pass_percent=90
|
||||
end
|
||||
|
||||
local s= number(1,100)
|
||||
if s<= pass_percent then
|
||||
if pc.getqf("collect_count")< 49 then
|
||||
local index =pc.getqf("collect_count")+1
|
||||
pc.setqf("collect_count",index)
|
||||
say(mob_name(20084))
|
||||
say(gameforge.collect_quest_lv90._160_say)
|
||||
say(string.format(gameforge.collect_quest_lv90._165_say, 50-pc.getqf("collect_count")))
|
||||
say(gameforge.collect_quest_lv90._170_say)
|
||||
say("")
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
say(mob_name(20084))
|
||||
say(gameforge.collect_quest_lv90._175_say)
|
||||
say("")
|
||||
pc.setqf("collect_count",0)
|
||||
pc.setqf("drink_drug",0)
|
||||
pc.setqf("duration",0)
|
||||
set_state(key_item)
|
||||
return
|
||||
else
|
||||
say(mob_name(20084))
|
||||
say(gameforge.collect_quest_lv90._180_say)
|
||||
say("")
|
||||
pc.setqf("drink_drug",0)
|
||||
return
|
||||
end
|
||||
else
|
||||
say(mob_name(20084))
|
||||
say(item_name(30168)..gameforge.collect_quest_lv90._185_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say(mob_name(20084) )
|
||||
say(gameforge.collect_quest_lv90._190_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
state key_item begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv90._195_send_letter)
|
||||
|
||||
if pc.count_item(30227)>0 then
|
||||
local v = find_npc_by_vnum(20084)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, "???")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
if pc.count_item(30227) >0 then
|
||||
say_title(gameforge.collect_quest_lv90._200_say_title)
|
||||
|
||||
say(gameforge.collect_quest_lv90._210_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv90._220_say_title)
|
||||
say(gameforge.collect_quest_lv90._230_say)
|
||||
say_item_vnum(30227)
|
||||
say(gameforge.collect_quest_lv90._240_say)
|
||||
say(mob_name(1304)..", "..mob_name(1093)..",")
|
||||
say(mob_name(1901)..".")
|
||||
say(""..mob_name(3090)..","..mob_name(3290)..","..mob_name(3590)..",")
|
||||
end
|
||||
when 1093.kill or 1304.kill or 1901.kill or 3090.kill or 3290.kill or 3590.kill begin
|
||||
local s = number(1, 100)
|
||||
if s <= 30 and pc.count_item(30227)==0 then
|
||||
pc.give_item2(30227, 1)
|
||||
send_letter(gameforge.collect_quest_lv90._250_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
|
||||
when __TARGET__.target.click or 20084.chat.gameforge.collect_quest_lv90._260_npcChat with pc.count_item(30227) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30227) > 0 then
|
||||
say(mob_name(20084))
|
||||
say(gameforge.collect_quest_lv90._265_say)
|
||||
pc.remove_item(30227,1)
|
||||
set_state(__reward)
|
||||
else
|
||||
say(mob_name(20084))
|
||||
say(""..item_name(30227)..gameforge.collect_quest_lv90._266_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state __reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv90._270_send_letter)
|
||||
|
||||
local v = find_npc_by_vnum(20018)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__",v,gameforge.collect_quest_lv90._280_target)
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv90._290_say_title)
|
||||
|
||||
say(gameforge.collect_quest_lv90._300_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20018.chat. gameforge.collect_quest_lv90._310_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
say(mob_name(20018))
|
||||
say(gameforge.collect_quest_lv90._315_say)
|
||||
say("")
|
||||
wait()
|
||||
say(mob_name(20018))
|
||||
say(gameforge.collect_quest_lv90._316_say)
|
||||
say("")
|
||||
say_reward(gameforge.collect_quest_lv90._317_say_reward)
|
||||
say_reward(gameforge.collect_quest_lv90._318_say_reward)
|
||||
say_reward(gameforge.collect_quest_lv90._319_say_reward)
|
||||
affect.add_collect_point(POINT_ATTBONUS_WARRIOR,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_ASSASSIN,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_SURA,8,60*60*24*365*60)
|
||||
affect.add_collect_point(POINT_ATTBONUS_SHAMAN,8,60*60*24*365*60)
|
||||
pc.give_item2(50114)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv92", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
||||
|
166
gamefiles/data/quest/collect_quest_lv92.quest
Normal file
166
gamefiles/data/quest/collect_quest_lv92.quest
Normal file
@ -0,0 +1,166 @@
|
||||
----------------------------------------------------
|
||||
--COLLECT QUEST_lv92
|
||||
--METIN2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
----------------------------------------------------
|
||||
quest collect_quest_lv92 begin
|
||||
state start begin
|
||||
end
|
||||
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 92 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20091)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv92._010_target)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv92._020_send_letter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv92._020_send_letter)
|
||||
say(gameforge.collect_quest_lv92._030_say)
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20091.chat.gameforge.collect_quest_lv92._040_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
--- l
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._060_say)
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._070_say)
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration", 0)
|
||||
pc.setqf("collect_count", 0)
|
||||
pc.setqf("drink_drug", 0)
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv92._020_send_letter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv92._080_say_title)
|
||||
--- l
|
||||
say(gameforge.collect_quest_lv92._090_say)
|
||||
say_item_vnum(30251)
|
||||
say_reward(string.format(gameforge.collect_quest_lv92._100_sayReward, pc.getqf("collect_count")))
|
||||
end
|
||||
|
||||
when 71035.use begin --<2D><>Ȥ<EFBFBD><C8A4> <20><><EFBFBD><EFBFBD>
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv92._110_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.getqf("drink_drug") == 1 then
|
||||
say(gameforge.collect_quest_lv92._120_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30251) == 0 then
|
||||
say(gameforge.collect_quest_lv92._130_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug",1)
|
||||
end
|
||||
|
||||
when 1135.kill or 1137.kill begin
|
||||
local s = number(1, 200)
|
||||
if s <= 1 then
|
||||
pc.give_item2(30251, 1)
|
||||
send_letter(gameforge.collect_quest_lv92._140_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
when 20091.chat.gameforge.collect_quest_lv92._145_npcChat with pc.count_item(30251) > 0 begin
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._150_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30251) <= 0 then
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._160_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._170_say)
|
||||
pc.remove_item(30251, 1)
|
||||
|
||||
if is_test_server() then
|
||||
pc.setqf("duration", get_time()+10) -- <20><EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> 10<31><30>
|
||||
else
|
||||
pc.setqf("duration", get_time()+60*60*6) -- <20>Ϲ<EFBFBD> 6<>ð<EFBFBD>
|
||||
end
|
||||
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
|
||||
if pc.getqf("drink_drug") == 0 then
|
||||
pass_percent = 10
|
||||
else
|
||||
pass_percent = 60
|
||||
end
|
||||
|
||||
local s = number(1, 100)
|
||||
|
||||
if s <= pass_percent then
|
||||
local collect_count = pc.getqf("collect_count")
|
||||
pc.setqf("collect_count", collect_count + 1) -- <20>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +1 <20><><EFBFBD>ش<EFBFBD>
|
||||
pc.setqf("drink_drug", 0) -- <20><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
|
||||
if collect_count < 9 then
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._180_say)
|
||||
say(string.format(gameforge.collect_quest_lv92._190_say, 10-pc.getqf("collect_count")))
|
||||
say(gameforge.collect_quest_lv92._200_say)
|
||||
else
|
||||
pc.setqf("duration", 0)
|
||||
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._210_say)
|
||||
|
||||
local s = select(gameforge.collect_quest_lv92._220_1_select, gameforge.collect_quest_lv92._220_2_select, gameforge.collect_quest_lv92._220_3_select)
|
||||
|
||||
if 1 == s then
|
||||
affect.add_collect(1,1000,60*60*24*365*60) -- hp index == 1, hp +1000
|
||||
pc.setqf("reward", 1)
|
||||
elseif 2 == s then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 120, 60*60*24*365*60)
|
||||
pc.setqf("reward", 2)
|
||||
elseif 3 == s then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 51, 60*60*24*365*60)
|
||||
pc.setqf("reward", 3)
|
||||
end
|
||||
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv94", "run")
|
||||
set_state(__complete)
|
||||
end
|
||||
|
||||
return
|
||||
else
|
||||
pc.setqf("drink_drug", 0) --<2D><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
say_title(gameforge.collect_quest_lv92._050_say_title)
|
||||
say(gameforge.collect_quest_lv92._230_say)
|
||||
return
|
||||
end
|
||||
end -- end of when 20091.chat."ȫõ<C8AB><C3B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°ǰ<C2B0>? " with pc.count_item(30251) > 0 begin
|
||||
end -- end of state 'go_to_disciple'
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
227
gamefiles/data/quest/collect_quest_lv94.quest
Normal file
227
gamefiles/data/quest/collect_quest_lv94.quest
Normal file
@ -0,0 +1,227 @@
|
||||
----------------------------------------------------
|
||||
--COLLECT QUEST_lv94
|
||||
--METIN2 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
----------------------------------------------------
|
||||
quest collect_quest_lv94 begin
|
||||
state start begin
|
||||
end
|
||||
|
||||
state run begin
|
||||
when login or levelup with pc.level >= 94 begin
|
||||
set_state(information)
|
||||
end
|
||||
end
|
||||
|
||||
state information begin
|
||||
when letter begin
|
||||
local v = find_npc_by_vnum(20091)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, gameforge.collect_quest_lv94._010_target)
|
||||
end
|
||||
send_letter(gameforge.collect_quest_lv94._020_send_letter)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv94._020_send_letter)
|
||||
say(gameforge.collect_quest_lv94._030_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20091.chat.gameforge.collect_quest_lv94._040_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
--- l
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._060_say)
|
||||
say("")
|
||||
wait()
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._070_say)
|
||||
say("")
|
||||
set_state(go_to_disciple)
|
||||
pc.setqf("duration", 0) -- <20>õ<EFBFBD> <20>Ҽ<EFBFBD> <20>ִ<EFBFBD> <20>ð<EFBFBD>
|
||||
pc.setqf("collect_count", 0)--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
pc.setqf("drink_drug", 0) --<2D><>Ȥ<EFBFBD><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
|
||||
end
|
||||
end
|
||||
|
||||
state go_to_disciple begin
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv94._080_say_title)
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say_title(gameforge.collect_quest_lv94._080_say_title)
|
||||
--- l
|
||||
say(gameforge.collect_quest_lv94._090_say)
|
||||
say_item_vnum(30252)
|
||||
say_reward(string.format(gameforge.collect_quest_lv94._100_sayReward, pc.getqf("collect_count")))
|
||||
say("")
|
||||
end
|
||||
|
||||
when 71035.use begin --<2D><>Ȥ<EFBFBD><C8A4> <20><><EFBFBD><EFBFBD>
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say(gameforge.collect_quest_lv94._110_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.getqf("drink_drug") == 1 then
|
||||
say(gameforge.collect_quest_lv94._120_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30252) == 0 then
|
||||
--- l
|
||||
say(gameforge.collect_quest_lv94._130_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
pc.remove_item(71035, 1)
|
||||
pc.setqf("drink_drug", 1)
|
||||
end
|
||||
|
||||
when 2414.kill or 2412.kill begin
|
||||
local s = number(1, 400)
|
||||
if s <= 1 then
|
||||
pc.give_item2(30252, 1)
|
||||
send_letter(gameforge.collect_quest_lv94._140_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
when 20091.chat.gameforge.collect_quest_lv94._150_npcChat with pc.count_item(30252) > 0 begin
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._160_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(30252) <= 0 then
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._170_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._180_say)
|
||||
pc.remove_item(30252, 1)
|
||||
|
||||
if is_test_server() then
|
||||
pc.setqf("duration", get_time() + 2)
|
||||
else
|
||||
pc.setqf("duration", get_time()+60*60*24) -----------------------------------24 stunden nun
|
||||
end
|
||||
|
||||
wait()
|
||||
|
||||
local pass_percent
|
||||
|
||||
if pc.getqf("drink_drug") == 0 then
|
||||
pass_percent = 10
|
||||
else
|
||||
pass_percent = 60
|
||||
end
|
||||
|
||||
local s = number(1, 100)
|
||||
if s <= pass_percent then
|
||||
if pc.getqf("collect_count") < 19 then --10<31><30><EFBFBD≯<EFBFBD>
|
||||
local index = pc.getqf("collect_count") + 1
|
||||
pc.setqf("collect_count", index) --<2D>ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +1 <20><><EFBFBD>ش<EFBFBD>
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._190_say)
|
||||
say(string.format(gameforge.collect_quest_lv94._200_say, 20-pc.getqf("collect_count")))
|
||||
say(gameforge.collect_quest_lv94._210_say)
|
||||
pc.setqf("drink_drug", 0) --<2D><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._250_say)
|
||||
pc.setqf("collect_count",0)
|
||||
set_state(key_item)
|
||||
else
|
||||
pc.setqf("drink_drug", 0) --<2D><><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._240_say)
|
||||
return
|
||||
end
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
state key_item begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.collect_quest_lv94._260_send_letter)
|
||||
|
||||
if pc.count_item(30228)>0 then
|
||||
local v = find_npc_by_vnum(20091)
|
||||
if v != 0 then
|
||||
target.vid("__TARGET__", v, "")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
if pc.count_item(30228) >0 then
|
||||
say_title(gameforge.collect_quest_lv94._270_say_title)
|
||||
say(gameforge.collect_quest_lv94._280_say)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.collect_quest_lv94._290_say_title)
|
||||
say(gameforge.collect_quest_lv94._300_say)
|
||||
say_item_vnum(30228)
|
||||
say(gameforge.collect_quest_lv94._310_say)
|
||||
end
|
||||
|
||||
|
||||
when 2493.kill begin
|
||||
if pc.count_item(30228)==0 then
|
||||
pc.give_item2(30228, 1)
|
||||
send_letter(gameforge.collect_quest_lv94._320_send_letter)
|
||||
end
|
||||
end
|
||||
|
||||
when 2495.kill begin
|
||||
local s = number(1, 20)
|
||||
if s == 1 then
|
||||
if pc.count_item(30228)==0 then
|
||||
pc.give_item2(30228, 1)
|
||||
send_letter(gameforge.collect_quest_lv94._320_send_letter)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when __TARGET__.target.click or 20091.chat.gameforge.collect_quest_lv94._330_npcChat with pc.count_item(30228) > 0 begin
|
||||
target.delete("__TARGET__")
|
||||
if pc.count_item(30228) > 0 then
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._340_say)
|
||||
|
||||
local s = select(gameforge.collect_quest_lv94._230_1_select, gameforge.collect_quest_lv94._230_2_select, gameforge.collect_quest_lv94._230_3_select)
|
||||
if 1 == s then
|
||||
affect.add_collect(1, 1100, 60*60*24*365*60) -- hp apply index == 1
|
||||
pc.setqf("reward", 1)
|
||||
elseif 2 == s then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 140, 60*60*24*365*60)
|
||||
pc.setqf("reward", 2)
|
||||
elseif 3 == s then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 60, 60*60*24*365*60)
|
||||
pc.setqf("reward", 3)
|
||||
end
|
||||
pc.remove_item(30228, 1)
|
||||
pc.setqf("collect_count", 0)
|
||||
pc.setqf("drink_drug", 0)
|
||||
pc.setqf("duration", 0)
|
||||
clear_letter()
|
||||
set_quest_state("collect_quest_lv96", "run")
|
||||
set_state(__complete)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.collect_quest_lv94._050_say_title)
|
||||
say(gameforge.collect_quest_lv94._350_say)
|
||||
return
|
||||
end
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
state __complete begin
|
||||
end
|
||||
end
|
214
gamefiles/data/quest/collect_quest_reset.quest
Normal file
214
gamefiles/data/quest/collect_quest_reset.quest
Normal file
@ -0,0 +1,214 @@
|
||||
quest collect_quest_reset begin
|
||||
state start begin
|
||||
when login with pc.level >= 92 begin
|
||||
if tostring(get_quest_state("collect_quest_lv92")) == "557528158" or
|
||||
tostring(get_quest_state("collect_quest_lv94")) == "557528158" or
|
||||
tostring(get_quest_state("collect_quest_lv96")) == "557528158" then
|
||||
set_state( check_reset_able )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state check_reset_able begin
|
||||
when 20091.chat."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20>ް<EFBFBD> <20>ʹٰ<CDB4>?!" begin
|
||||
--- l
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<DEBE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲٰ<D9B2> <20>ʹٰ<CDB4>?")
|
||||
say("<22><>....")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
if get_time() < pc.getqf("duration") then
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD>ٴ<EFBFBD>..")
|
||||
say("<22><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ϱ<EFBFBD>..")
|
||||
say("<22><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0>̾ȵǾ<C8B5><C7BE><EFBFBD>!")
|
||||
return
|
||||
end
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD> <20>ȱ<C8B1><D7B7><EFBFBD> õ<><C3B5><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF>ؼ<EFBFBD>")
|
||||
say("<22>ڳ<EFBFBD> <20>ٽ<EFBFBD> ã<><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϰ<EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ؿԴ<D8BF> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||||
say("õ<><C3B5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> õ<><C3B5><EFBFBD><EFBFBD> <20><><EFBFBD>Ҽ<EFBFBD> <20>ִٰ<D6B4> <20>ϳ<EFBFBD>")
|
||||
say("<22>װ<EFBFBD><D7B0><EFBFBD> 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD> <20>ְԳ<D6B0>")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("õ<><C3B5><EFBFBD><EFBFBD> 5<><35> <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ҵ<DEBE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѱ<EFBFBD><D1B0><EFBFBD><EFBFBD><EFBFBD>")
|
||||
say("<22>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ֵ<EFBFBD><D6B5><EFBFBD> <20>ϰڳ<CFB0>")
|
||||
say("<22><EFBFBD><EEB6B2>?")
|
||||
say("")
|
||||
|
||||
local s = select("<22><><EFBFBD><EFBFBD> <20><><EFBFBD>ش<EFBFBD> <20>帱<EFBFBD><E5B8B1><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD> <20><> <20>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD>")
|
||||
|
||||
if s == 1 then
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22> <20>ٳ<EFBFBD><D9B3><EFBFBD><EFBFBD>Գ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> <20>ְڳ<D6B0>~")
|
||||
say("")
|
||||
|
||||
set_state( find_jewel )
|
||||
else
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><EFBFBD><D7B7>Գ<EFBFBD>. <20>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>Ұ<EFBFBD><D2B0>̾<EFBFBD>")
|
||||
say("")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state find_jewel begin
|
||||
when letter begin
|
||||
send_letter("<22>鼱<EFBFBD><E9BCB1> <20><><EFBFBD><EFBFBD>")
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
say("")
|
||||
say("<22>·<EFBFBD><C2B7> <20>ִ<EFBFBD> <20>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("õ<><C3B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ְ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD>")
|
||||
say("")
|
||||
|
||||
say_item_vnum( 30254 )
|
||||
|
||||
say_reward(" <20><><EFBFBD><EFBFBD> "..pc.getqf("collect_count").." <20><><EFBFBD><EFBFBD> <20>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϴ<EFBFBD>")
|
||||
say("")
|
||||
end
|
||||
|
||||
when 2401.kill or 2402.kill or 2403.kill or 2404.kill begin
|
||||
if number(1, 500) <= 3 then
|
||||
pc.give_item2(30254, 1)
|
||||
send_letter("õ<><C3B5><EFBFBD><EFBFBD> ȹ<><C8B9><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>")
|
||||
end
|
||||
end
|
||||
|
||||
when 2411.kill or 2412.kill or 2413.kill or 2414.kill begin
|
||||
if number(1, 500) <= 5 then
|
||||
pc.give_item2(30254, 1)
|
||||
send_letter("õ<><C3B5><EFBFBD><EFBFBD> ȹ<><C8B9><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>")
|
||||
end
|
||||
end
|
||||
|
||||
when 20091.chat."õ<><C3B5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°հ<C2B0>?" with pc.count_item(30254) > 0 begin
|
||||
pc.remove_item( 30254 , 1 )
|
||||
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD>...")
|
||||
|
||||
setdelay(150)
|
||||
say("..........")
|
||||
resetdelay()
|
||||
|
||||
if number(1, 100) <= 20 then
|
||||
say("<22>̰<EFBFBD> <20><>¥<EFBFBD><C2A5>...")
|
||||
say("<22>ٽ<EFBFBD> ã<>ƺ<EFBFBD><C6BA>Գ<EFBFBD>")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
say("<22><>... <20><EFBFBD> <20>̰<EFBFBD> <20>и<EFBFBD> õ<><C3B5><EFBFBD>̾<EFBFBD>")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
local count = pc.getqf( "collect_count" ) + 1
|
||||
|
||||
if count < 5 then
|
||||
pc.setqf( "collect_count", count )
|
||||
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD> " .. 5-count .. " <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ش<EFBFBD> <20>ָ<EFBFBD> <20>dz<EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ְԳ<D6B0>")
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD> <20>ڳ<DAB3><D7BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20>ְڳ<D6B0>")
|
||||
say("")
|
||||
|
||||
local selTab = {}
|
||||
local pos = 1
|
||||
|
||||
if tostring(get_quest_state("collect_quest_lv92")) == "557528158" then
|
||||
table.insert(selTab, pos, "ȫõ<C8AB>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
pos = pos + 1
|
||||
end
|
||||
|
||||
if tostring(get_quest_state("collect_quest_lv94")) == "557528158" then
|
||||
table.insert(selTab, pos, "<22><>õ<EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
pos = pos + 1
|
||||
end
|
||||
|
||||
if tostring(get_quest_state("collect_quest_lv96")) == "557528158" then
|
||||
table.insert(selTab, pos, "ûõ<C3BB>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>")
|
||||
pos = pos + 1
|
||||
end
|
||||
|
||||
local s = select_table( selTab )
|
||||
|
||||
if selTab[s] == "lv92 ȫõ<C8AB>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>" then
|
||||
affect.remove_collect(1, 1000)
|
||||
affect.remove_collect(apply.DEF_GRADE_BONUS, 120)
|
||||
affect.remove_collect(apply.ATT_GRADE_BONUS, 51)
|
||||
|
||||
s = select("ü<><C3BC> +1000", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +120", "<22><><EFBFBD>ݷ<EFBFBD> +51")
|
||||
|
||||
if s == 1 then
|
||||
affect.add_collect(1, 1000, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv92","reward","1")
|
||||
elseif s == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 120, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv92","reward","2")
|
||||
elseif s == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 51, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv92","reward","3")
|
||||
end
|
||||
elseif selTab[s] == "lv94 <20><>õ<EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>" then
|
||||
affect.remove_collect(1, 1100)
|
||||
affect.remove_collect(apply.DEF_GRADE_BONUS, 140)
|
||||
affect.remove_collect(apply.ATT_GRADE_BONUS, 60)
|
||||
|
||||
s = select("ü<><C3BC> +1100", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +140", "<22><><EFBFBD>ݷ<EFBFBD> +60")
|
||||
|
||||
if s == 1 then
|
||||
affect.add_collect(1, 1100, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv94","reward","1")
|
||||
elseif s == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 140, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv94","reward","2")
|
||||
elseif s == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 60, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv94","reward","3")
|
||||
end
|
||||
elseif selTab[s] == "lv96 ûõ<C3BB>Ǻ<EFBFBD><C7BA><EFBFBD> <20><><EFBFBD><EFBFBD>" then
|
||||
affect.remove_collect(1, 2000)
|
||||
affect.remove_collect(apply.DEF_GRADE_BONUS, 700)
|
||||
affect.remove_collect(apply.ATT_GRADE_BONUS, 300)
|
||||
|
||||
s = select("ü<><C3BC> +2000", "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +700", "<22><><EFBFBD>ݷ<EFBFBD> +300")
|
||||
|
||||
if s == 1 then
|
||||
affect.add_collect(1, 2000, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv96","reward","1")
|
||||
elseif s == 2 then
|
||||
affect.add_collect(apply.DEF_GRADE_BONUS, 700, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv96","reward","2")
|
||||
elseif s == 3 then
|
||||
affect.add_collect(apply.ATT_GRADE_BONUS, 300, 60*60*24*365*60)
|
||||
pc.setf("collect_quest_lv96","reward","3")
|
||||
end
|
||||
end
|
||||
pc.setqf( "collect_count", 0 )
|
||||
set_state( check_reset_able )
|
||||
|
||||
say("<22>鼱<EFBFBD><E9BCB1><EFBFBD><EFBFBD>")
|
||||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD> <20><><EFBFBD>ҳ<EFBFBD>")
|
||||
say("<22><> <20>ٲٰ<D9B2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD> ã<>ƿ<EFBFBD><C6BF>Գ<EFBFBD>")
|
||||
say("")
|
||||
pc.setqf("duration", get_time()+60*60*24*7)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
106
gamefiles/data/quest/couple_ring.quest
Normal file
106
gamefiles/data/quest/couple_ring.quest
Normal file
@ -0,0 +1,106 @@
|
||||
quest couple_ring begin
|
||||
state start begin
|
||||
when 9006.chat.gameforge.couple_ring._10_npcChat with pc.get_level()>=25 begin
|
||||
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
|
||||
say(gameforge.couple_ring._30_say)
|
||||
local s= select(gameforge.couple_ring._40_select, gameforge.couple_ring._50_select)
|
||||
|
||||
if s==1 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._60_say)
|
||||
set_state(kill)
|
||||
elseif s==2 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._70_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state kill begin
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
pc.setqf("kill_count", 0)
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
q.set_counter(gameforge.couple_ring._75_say, couple_ring.get_rest_count());
|
||||
end
|
||||
when 394.kill begin
|
||||
local kill_count=pc.getqf("kill_count")+1
|
||||
pc.setqf("kill_count", kill_count)
|
||||
q.set_counter(gameforge.couple_ring._75_say, couple_ring.get_rest_count());
|
||||
|
||||
if couple_ring.is_completed() then
|
||||
say_title(gameforge.couple_ring._80_sayTitle)
|
||||
say(gameforge.couple_ring._90_say)
|
||||
set_state(report)
|
||||
end
|
||||
end
|
||||
function get_rest_count()
|
||||
return 30-pc.getqf("kill_count")
|
||||
end
|
||||
function is_completed()
|
||||
return pc.getqf("kill_count")>=30
|
||||
end
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.couple_ring._100_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.couple_ring._110_sayReward)
|
||||
say_reward(string.format(gameforge.couple_ring._120_sayReward, couple_ring.get_rest_count()))
|
||||
end
|
||||
when 9006.chat.gameforge.couple_ring._10_npcChat begin
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._130_say)
|
||||
local s= select(gameforge.locale.levelup.prev_quest_go, gameforge.locale.cancel)
|
||||
if s==1 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._140_say)
|
||||
else
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._150_say)
|
||||
wait()
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.couple_ring._160_say)
|
||||
local s = select(gameforge.couple_ring._170_select, gameforge.locale.cancel)
|
||||
if s==1 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._180_say)
|
||||
elseif s==2 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._190_say)
|
||||
set_state(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state report begin
|
||||
when letter begin
|
||||
send_letter(gameforge.couple_ring._200_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.couple_ring._210_say)
|
||||
end
|
||||
when 9006.chat.gameforge.couple_ring._220_npcChat begin
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.couple_ring._230_say)
|
||||
say_reward(gameforge.couple_ring._240_sayReward)
|
||||
say_item(gameforge.couple_ring._250_sayItem, 70301, gameforge.couple_ring._255_sayItem)
|
||||
pc.give_item2(70301)
|
||||
set_state(__COMPLETE__ )
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
state failure begin
|
||||
end
|
||||
end
|
||||
|
52
gamefiles/data/quest/cube.quest
Normal file
52
gamefiles/data/quest/cube.quest
Normal file
@ -0,0 +1,52 @@
|
||||
quest cube begin
|
||||
state start begin
|
||||
when 20018.chat.gameforge.collect_herb_lv15._20_npcChat with pc.level >= 15 begin
|
||||
say_title(gameforge.collect_quest_lv30._340_sayTitle)
|
||||
say(gameforge.cube._10_say)
|
||||
wait()
|
||||
setskin(NOWINDOW)
|
||||
command("cube open")
|
||||
end
|
||||
|
||||
|
||||
when 20017.chat.gameforge.collect_herb_lv15._20_npcChat with pc.level >= 30 begin
|
||||
say_title(gameforge.arena_manager._20_sayTitle)
|
||||
say(gameforge.cube._20_say)
|
||||
wait()
|
||||
setskin(NOWINDOW)
|
||||
command("cube open")
|
||||
end
|
||||
|
||||
|
||||
when 20022.chat.gameforge.cube._30_npcChat with pc.level >=45 begin
|
||||
say_title(gameforge.cube._40_sayTitle)
|
||||
say(gameforge.cube._50_say)
|
||||
wait()
|
||||
setskin(NOWINDOW)
|
||||
command("cube open")
|
||||
end
|
||||
|
||||
when 20018.chat.gameforge.cube._060_npcChat with pc.level >= 15 begin
|
||||
setskin(NOWINDOW)
|
||||
command("cube make all")
|
||||
end
|
||||
|
||||
|
||||
when 20017.chat.gameforge.cube._060_npcChat with pc.level >= 30 begin
|
||||
setskin(NOWINDOW)
|
||||
command("cube make all")
|
||||
end
|
||||
|
||||
|
||||
when 20022.chat.gameforge.cube._060_npcChat with pc.level >=45 begin
|
||||
setskin(NOWINDOW)
|
||||
command("cube make all")
|
||||
end
|
||||
|
||||
when 20383.chat.gameforge.cube._30_npcChat with pc.level >=90 begin
|
||||
setskin(NOWINDOW)
|
||||
command("cube open")
|
||||
end
|
||||
|
||||
end
|
||||
end
|
81
gamefiles/data/quest/cube_opener_list.quest
Normal file
81
gamefiles/data/quest/cube_opener_list.quest
Normal file
@ -0,0 +1,81 @@
|
||||
quest cube_opener_list begin
|
||||
state start begin
|
||||
when 20378.take begin
|
||||
-- special case
|
||||
local vnum = item.get_vnum()
|
||||
local upgrade_list = {
|
||||
[11299] = 20000,
|
||||
[11499] = 20250,
|
||||
[11699] = 20500,
|
||||
[11899] = 20750,
|
||||
}
|
||||
|
||||
local material_list = {
|
||||
{
|
||||
["vnum"] = 70031,
|
||||
["count"] = 3,
|
||||
},
|
||||
{
|
||||
["vnum"] = 51001,
|
||||
["count"] = 100,
|
||||
},
|
||||
{
|
||||
["vnum"] = 25040,
|
||||
["count"] = 2,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
local can_change = true
|
||||
|
||||
if 11299 == vnum or 11499 == vnum or 11699 == vnum or 11899 == vnum then
|
||||
say_title(mob_name(20378))
|
||||
say(string.format(gameforge.cube_opener_list._010_say, item_name(vnum)))
|
||||
say_title(gameforge.cube_opener_list._020_sayTitle)
|
||||
for i, material in ipairs(material_list) do
|
||||
say(" " .. item_name(material.vnum) .. " " .. locale.count_prefix .. material.count .. " " .. locale.count_postfix .. "")
|
||||
can_change = can_change and (material.count <= pc.count_item(material.vnum))
|
||||
end
|
||||
|
||||
say("")
|
||||
say_title(gameforge.cube_opener_list._030_say)
|
||||
say_item_vnum(upgrade_list[vnum])
|
||||
say("")
|
||||
wait()
|
||||
|
||||
if true == can_change then
|
||||
say_title(mob_name(20378))
|
||||
say(string.format(gameforge.cube_opener_list._040_say, item_name(vnum),item_name(upgrade_list[vnum])))
|
||||
say_reward(locale.reward)
|
||||
say_item_vnum(upgrade_list[vnum])
|
||||
say("")
|
||||
|
||||
local s = select(locale.yes, locale.no)
|
||||
if s == 1 then
|
||||
item.copy_and_give_before_remove(upgrade_list[vnum])
|
||||
for i, material in ipairs(material_list) do
|
||||
pc.remove_item(material.vnum, material.count)
|
||||
end
|
||||
end
|
||||
return
|
||||
else
|
||||
say_title(mob_name(20378))
|
||||
say(gameforge.cube_opener_list._050_say)
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
when
|
||||
20383.take or
|
||||
20018.take or
|
||||
20017.take or
|
||||
20015.take
|
||||
begin
|
||||
|
||||
command("cube open")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
557
gamefiles/data/quest/devilcatacomb_zone.quest
Normal file
557
gamefiles/data/quest/devilcatacomb_zone.quest
Normal file
@ -0,0 +1,557 @@
|
||||
quest devilcatacomb_zone begin
|
||||
state start begin
|
||||
|
||||
function is_closed()
|
||||
return (game.get_event_flag("dc_closed") > 0) --close dialog
|
||||
end
|
||||
|
||||
function setting()
|
||||
return
|
||||
{
|
||||
|
||||
["base"]={["x"] = 3072 , ["y"]= 12032 ,},
|
||||
["floor1_s"] = { ["x"] = 20, ["y"] = 20, },
|
||||
["floor1_e"] = { ["x"] = 500, ["y"] = 470,},
|
||||
["floor2_s"] = { ["x"] = 510, ["y"] = 18, },
|
||||
["floor2_e"] = { ["x"] = 978, ["y"] = 470,},
|
||||
["floor1_entry"] = {["x"] = 73, ["y"] = 63,},
|
||||
["floor2_entry"] = {["x"] = 550, ["y"] = 45,},
|
||||
["floor3_entry"] = {["x"] = 1378, ["y"] = 249,},
|
||||
["floor4_entry"] = {["x"] = 70, ["y"] = 592,},
|
||||
["floor5_entry"] = {["x"] = 846, ["y"] = 898},
|
||||
["floor6_entry"] = {["x"] = 1362, ["y"] = 666},
|
||||
["floor7_entry"] = {["x"] = 73, ["y"] = 1156},
|
||||
|
||||
["map_idx"] = 216,
|
||||
["rag"] = 30311,
|
||||
|
||||
["devil_king"] = 2591,
|
||||
|
||||
["reapers_credit1"] = 30319,
|
||||
["reapers_credit2"] = 30320,
|
||||
["reapers_credit3"] = 76002,
|
||||
|
||||
["floor3_stone"] = 8038,
|
||||
["floor3_stone_pos"] = {
|
||||
{1366, 150},
|
||||
{1366, 351},
|
||||
{1234, 365},
|
||||
{1234, 140},
|
||||
{1150, 135},
|
||||
{1130, 365},
|
||||
{1135, 253}
|
||||
},
|
||||
|
||||
["mob_regen_file_path"] = "data/dungeon/devilcatacomb/",
|
||||
["floor4_regen_file"] = {"devilcatacomb_floor4_regen1.txt",
|
||||
"devilcatacomb_floor4_regen2.txt",
|
||||
"devilcatacomb_floor4_regen3.txt",
|
||||
"devilcatacomb_floor4_regen4.txt",
|
||||
"devilcatacomb_floor4_regen5.txt"} ,
|
||||
|
||||
["credit_stone"] = 30101,
|
||||
["credit_stone_pos"] = {307,323},
|
||||
["floor2_stone"] = 30103,
|
||||
["floor2_stone_pos"] = {741,217},
|
||||
["floor2_merchant_npc"] = 20368,
|
||||
["floor2_merchant_npc_pos"] = {734,214},
|
||||
|
||||
["floor4_npc"] = 30104,
|
||||
["floor4_npc_pos"] = {500, 717},
|
||||
|
||||
["devil_king_pos"] = {{673,829},{691,638},{848,568},{1026,642},{1008,862}},
|
||||
|
||||
["unlock_stone"] = 30312,
|
||||
["floor5_stone"] = 30102,
|
||||
["floor5_stone_pos"] = {848, 735},
|
||||
|
||||
["devil_great_king"] = 2597 ,
|
||||
["devil_great_king_pos"] = {1303,704},
|
||||
["devil_emperor"] = 2598,
|
||||
["devil_emperor_pos"] = {74,1103},
|
||||
|
||||
["dc2_door_set_size"] = {4,2,3,2},
|
||||
["dc2_door_set1"] = {
|
||||
{{30111, 566, 117, 5},{30112, 562, 311, 5,},{30118, 663, 434, 7},{30119, 881, 434, 7}},
|
||||
{{30116, 743, 390, 3},{30119, 612, 251, 1,}},
|
||||
{{30113, 654, 211, 5},{30111, 707, 338, 7,},{30112, 775, 336, 7}},
|
||||
{{30117, 733, 294, 3},{30113, 694, 271, 1,}}
|
||||
},
|
||||
["dc2_door_set2"] = {
|
||||
{{30115, 942, 141, 5},{30116, 942, 245, 5},{30117, 942, 321, 5},{30115, 763, 64, 7}},
|
||||
{{30118, 643, 116, 3},{30114, 900, 167, 1}},
|
||||
{{30114, 850, 293, 5},{30113, 715, 164, 7},{30114, 817, 162, 7}},
|
||||
{{30111, 802, 277, 1},{30112, 800, 241, 1}}
|
||||
},
|
||||
}
|
||||
end
|
||||
when login begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
local idx = pc.get_map_index()
|
||||
if idx >= (setting.map_idx * 10000) and idx < ((setting.map_idx + 1) * 10000) then
|
||||
-- pc.set_warp_location(65, 5914, 992) -----------<2D>Ʊ͵<C6B1><CDB5><EFBFBD> <20><>ǥ<EFBFBD><C7A5>
|
||||
local level = d.getf("level")
|
||||
-- warp location<6F><6E> 0,0 <20≯<EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
d.set_warp_location (0, 0, 0)
|
||||
|
||||
if level == 2 then
|
||||
say(gameforge.devilcatacomb_zone._10_say)
|
||||
say(string.format(gameforge.devilcatacomb_zone._20_say, 60))
|
||||
elseif level == pc.getqf ("level") then
|
||||
-- say ("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7>Ͻʽÿ<CABD>.")
|
||||
say(gameforge.devilcatacomb_zone._30_say)
|
||||
else
|
||||
say(gameforge.devilcatacomb_zone._40_say)
|
||||
-- say ("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>մϴ<D5B4>.")
|
||||
timer ("devilcatacomb_ban_timer", 5)
|
||||
end
|
||||
end
|
||||
if idx == setting.map_idx then
|
||||
pc.setf("devilcatacomb_zone","last_exit_time", get_global_time())
|
||||
-- 2<><32><EFBFBD>̻<EFBFBD><CCBB≯<EFBFBD>, <20>Ѱܳ<D1B0>
|
||||
if pc.get_x() < setting.floor1_s.x + setting.base.x
|
||||
or pc.get_y() < setting.floor1_s.y + setting.base.y
|
||||
or pc.get_x() > setting.floor1_e.x + setting.base.x
|
||||
or pc.get_y() > setting.floor1_e.y + setting.base.y
|
||||
then
|
||||
-- <20>Ʊ͵<C6B1><CDB5><EFBFBD> <20>Ա<EFBFBD><D4B1><EFBFBD>
|
||||
-- if not is_test_server() then
|
||||
say(gameforge.devilcatacomb_zone._40_say)
|
||||
timer ("devilcatacomb_ban_timer", 5)
|
||||
-- end
|
||||
else
|
||||
-- <20>Ʊ͵<C6B1><CDB5><EFBFBD> <20>Ա<EFBFBD><D4B1><EFBFBD>
|
||||
-- pc.set_warp_location(65, 5914, 992)
|
||||
say(gameforge.devilcatacomb_zone._50_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when logout begin
|
||||
local idx = pc.get_map_index()
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
if idx == setting.map_idx or idx >= (setting.map_idx * 10000) and idx < ((setting.map_idx + 1) * 10000) then
|
||||
pc.setf("devilcatacomb_zone","last_exit_time", get_global_time())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_ban_timer.timer begin
|
||||
pc.warp((5914)*100, (992)*100, 65)
|
||||
end
|
||||
|
||||
when warp_timer.timer begin
|
||||
local level = d.getf("level")
|
||||
local level_switch = {
|
||||
[3] = gameforge.devilcatacomb_zone._60_say,
|
||||
[4] = gameforge.devilcatacomb_zone._70_say,
|
||||
[5] = gameforge.devilcatacomb_zone._80_say,
|
||||
[6] = gameforge.devilcatacomb_zone._90_say,
|
||||
}
|
||||
local t = 3600 -(get_global_time() - d.getf("enter_time"))
|
||||
local t_r = math.mod (t, 60)
|
||||
local t_m = (t - t_r) / 60
|
||||
d.notice ( level_switch[level] )
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, t_m))
|
||||
d.set_warp_location (0, 0, 0)
|
||||
end
|
||||
|
||||
when devilcatacomb_man.chat.gameforge.devilcatacomb_zone._100_npcChat with not devilcatacomb_zone.is_closed() begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
if pc.get_level() < 75 then
|
||||
say(gameforge.devilcatacomb_zone._110_say)
|
||||
elseif pc.getf("deviltower_zone","9_done") == 0 then
|
||||
say(gameforge.devilcatacomb_zone._120_say)
|
||||
elseif ((get_global_time() - pc.getf("devilcatacomb_zone","last_exit_time")) < 1800) then
|
||||
say(gameforge.devilcatacomb_zone._130_say)
|
||||
else
|
||||
say(gameforge.devilcatacomb_zone._140_say)
|
||||
local s = select(gameforge.devilcatacomb_zone._150_select, gameforge.devilcatacomb_zone._160_select)
|
||||
if s == 1 then
|
||||
pc.warp ((setting.floor1_entry.x + setting.base.x )* 100, (setting.floor1_entry.y + setting.base.y) * 100)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DFBB>ϴ<EFBFBD> <20>̺<EFBFBD>Ʈ.
|
||||
when kill begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
-- <20>Ʊ͵<C6B1><CDB5><EFBFBD> 1<><31><EFBFBD≯<EFBFBD> 1% Ȯ<><C8AE><EFBFBD><EFBFBD> <20>ݽð<DDBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
if pc.get_x() > setting.floor1_s.x + setting.base.x
|
||||
and pc.get_y() > setting.floor1_s.y + setting.base.y
|
||||
and pc.get_x() < setting.floor1_e.x + setting.base.x
|
||||
and pc.get_y() < setting.floor1_e.y + setting.base.y then
|
||||
local j = number(1, 100)
|
||||
if j == 1 then
|
||||
game.drop_item (setting.rag, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function spawn_doors ()
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
for i = 1, 4 do
|
||||
local mob_set = setting.dc2_door_set1[i]
|
||||
local set_size = setting.dc2_door_set_size[i]
|
||||
for j = 1, set_size do
|
||||
d.set_unique (i.."_1_"..j, d.spawn_mob_dir (mob_set[j][1], mob_set[j][2], mob_set[j][3], mob_set[j][4]))
|
||||
end
|
||||
mob_set = setting.dc2_door_set2[i]
|
||||
for j = 1, set_size do
|
||||
d.set_unique (i.."_2_"..j, d.spawn_mob_dir (mob_set[j][1], mob_set[j][2], mob_set[j][3], mob_set[j][4]))
|
||||
end
|
||||
end
|
||||
end
|
||||
-- <20>ݽð<DDBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>巡<EFBFBD><E5B7A1><EFBFBD>ϸ<EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. 2<><32><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
when devilcatacomb_credit_stone. take begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
|
||||
if item.vnum == setting.rag then
|
||||
if not party.is_party() then
|
||||
say(gameforge.devilcatacomb_zone._170_say)
|
||||
return
|
||||
elseif party.is_in_dungeon() then
|
||||
say(gameforge.devilcatacomb_zone._180_say)
|
||||
return
|
||||
end
|
||||
|
||||
item.remove()
|
||||
say(gameforge.devilcatacomb_zone._190_say)
|
||||
wait()
|
||||
say(gameforge.devilcatacomb_zone._200_say)
|
||||
wait()
|
||||
d.new_jump_party (setting.map_idx, setting.floor2_entry.x + setting.base.x , setting.floor2_entry.y + setting.base.y )
|
||||
d.setqf2("devilcatacomb_zone","level", 2)
|
||||
d.setf ("level",2)
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_2f_regen.txt")
|
||||
|
||||
d.spawn_mob (setting.floor2_merchant_npc, setting.floor2_merchant_npc_pos[1], setting.floor2_merchant_npc_pos[2])
|
||||
d.spawn_mob (setting.floor2_stone, setting.floor2_stone_pos[1], setting.floor2_stone_pos[2])
|
||||
|
||||
devilcatacomb_zone.spawn_doors ()
|
||||
server_timer('devilcatacomb_45m_left_timer',60 * 15, d.get_map_index())
|
||||
d.setf("enter_time", get_global_time())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_45m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, 45))
|
||||
server_timer('devilcatacomb_30m_left_timer', 60 * 15, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_30m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, 30))
|
||||
server_timer('devilcatacomb_15m_left_timer', 60 * 15, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_15m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, 15))
|
||||
server_timer('devilcatacomb_5m_left_timer', 60 * 10, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_5m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, 5))
|
||||
server_timer('devilcatacomb_1m_left_timer', 60 * 4, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_1m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, 1))
|
||||
server_timer ("devilcatacomb_0m_left_timer", 60 * 1, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_0m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.notice (gameforge.devilcatacomb_zone._210_dNotice)
|
||||
d.set_warp_location (65, 5914, 992)
|
||||
server_timer('devilcatacomb_exit_timer', 7, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
function is_dc2_doors_clear ()
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
local clear = true
|
||||
for i = 1, 4 do
|
||||
local set_clear = true
|
||||
local mob_set = setting.dc2_door_set1[i]
|
||||
local set_size = setting.dc2_door_set_size[i]
|
||||
for j = 1, set_size do
|
||||
set_clear = set_clear and d.is_unique_dead (i.."_1_"..j)
|
||||
end
|
||||
if not set_clear then
|
||||
set_clear = true
|
||||
mob_set = setting.dc2_door_set2[i]
|
||||
for j = 1, set_size do
|
||||
set_clear = set_clear and d.is_unique_dead (i.."_2_"..j)
|
||||
end
|
||||
end
|
||||
clear = clear and set_clear
|
||||
end
|
||||
|
||||
return clear
|
||||
end
|
||||
|
||||
-- <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>ϸ<EFBFBD> 3<><33> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ְ<EFBFBD>
|
||||
-- <20><><EFBFBD>Խ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǥ<EFBFBD><C7A5> <20>˻<EFBFBD><CBBB>Ѵ<EFBFBD>.
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ<EFBFBD><C7A5> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||
when devilcatacomb_floor2_stone.click begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
|
||||
if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then
|
||||
if not devilcatacomb_zone.is_dc2_doors_clear () then
|
||||
say(gameforge.devilcatacomb_zone._220_say)
|
||||
wait ()
|
||||
return
|
||||
end
|
||||
say(gameforge.devilcatacomb_zone._230_say)
|
||||
wait()
|
||||
say(gameforge.devilcatacomb_zone._240_say)
|
||||
wait()
|
||||
local s = select(gameforge.devilcatacomb_zone._150_select, gameforge.devilcatacomb_zone._160_select)
|
||||
if s == 1 then
|
||||
if d.getf("devilcatacomb_floor2_stone_clicked") == 0 then
|
||||
d.setf("devilcatacomb_floor2_stone_clicked", 1)
|
||||
d.setqf2("devilcatacomb_zone","last_exit_time", get_global_time())
|
||||
d.set_item_group ("reapers_credit", 3, setting.reapers_credit3, 1, setting.reapers_credit2, 1, setting.reapers_credit1, 1)
|
||||
d.say_diff_by_item_group("reapers_credit", gameforge.devilcatacomb_zone._250_say, gameforge.devilcatacomb_zone._260_say)
|
||||
timer ("devilcatacomb_floor3_enter_timer", 7)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(gameforge.devilcatacomb_zone._270_say)
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_floor3_enter_timer.timer begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
d.set_warp_location (65, 5914, 992)
|
||||
d.exit_all_by_item_group ("reapers_credit")
|
||||
d.delete_item_in_item_group_from_all ("reapers_credit")
|
||||
d.purge ()
|
||||
d.jump_all (setting.floor3_entry.x + setting.base.x , setting.floor3_entry.y + setting.base.y)
|
||||
d.setf("level",3)
|
||||
d.setqf2("devilcatacomb_zone","level", 3)
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_3f_regen.txt")
|
||||
timer("warp_timer",3)
|
||||
|
||||
local position = setting.floor3_stone_pos
|
||||
|
||||
local n = number(1,7)
|
||||
for i = 1, 7 do
|
||||
if (i != n)
|
||||
then
|
||||
d.set_unique("fake"..i, d.spawn_mob( setting.floor3_stone, position[i][1], position[i][2]))
|
||||
end
|
||||
end
|
||||
|
||||
local vid = d.spawn_mob( setting.floor3_stone, position[n][1], position[n][2])
|
||||
d.set_unique ("real",vid)
|
||||
if (is_test_server()) then
|
||||
-- real stone pos
|
||||
chat (position[n][1],position[n][2])
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when devilcatacomb3_stone.kill begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
-- <20><><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1>Ǹ<EFBFBD> <20><>¥<EFBFBD><C2A5> <20><EFBFBD><D7BE><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>.
|
||||
-- <20><>¥<EFBFBD><C2A5> <20><EFBFBD><D7BE><EFBFBD><EFBFBD><EFBFBD> 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>Ѵ<EFBFBD>.
|
||||
if d.is_unique_dead("real") then
|
||||
d.notice(gameforge.devilcatacomb_zone._280_dNotice)
|
||||
|
||||
d.setf ("level",4)
|
||||
d.setqf2("devilcatacomb_zone","level", 4)
|
||||
timer ("devilcatacomb_floor4_enter_timer", 3)
|
||||
else
|
||||
d.notice(gameforge.devilcatacomb_zone._290_dNotice)
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_floor4_enter_timer.timer begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
local i = number (1, 5)
|
||||
timer("warp_timer",3)
|
||||
d.purge ()
|
||||
d.jump_all (setting.floor4_entry.x + setting.base.x , setting.floor4_entry.y + setting.base.y)
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_4f_regen.txt")
|
||||
d.regen_file (setting.mob_regen_file_path..setting.floor4_regen_file[i])
|
||||
if (is_test_server()) then
|
||||
d.notice (setting.floor4_regen_file[i])
|
||||
end
|
||||
d.spawn_mob (setting.floor4_npc, setting.floor4_npc_pos[1], setting.floor4_npc_pos[2])
|
||||
end
|
||||
|
||||
-- devilcatacomb_floor4_stone<6E><65> Ŭ<><C5AC> <20><> 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 5<><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD>Ű<EFBFBD><C5B0> npc<70>̴<EFBFBD>.
|
||||
when devilcatacomb_floor4_stone.click begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
local n = number (1,5)
|
||||
say(gameforge.devilcatacomb_zone._300_say)
|
||||
wait()
|
||||
if (is_test_server()) then
|
||||
-- devil_king pos
|
||||
chat (setting.devil_king_pos[n][1], setting.devil_king_pos[n][2])
|
||||
end
|
||||
d.purge ()
|
||||
d.jump_all (setting.floor5_entry.x + setting.base.x, setting.floor5_entry.y + setting.base.y )
|
||||
d.setf ("level",5)
|
||||
d.setqf2("devilcatacomb_zone","level", 5)
|
||||
timer("warp_timer",3)
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_5f_regen.txt")
|
||||
d.spawn_mob (setting.devil_king, setting.devil_king_pos[n][1], setting.devil_king_pos[n][2])
|
||||
d.spawn_mob (setting.floor5_stone, setting.floor5_stone_pos[1], setting.floor5_stone_pos[2])
|
||||
end
|
||||
|
||||
-- <20>ƱͿ<C6B1>(2591)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD>
|
||||
when devilcatacomb_devil_king.kill begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
game.drop_item (setting.unlock_stone, 1)
|
||||
end
|
||||
|
||||
-- <20><><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>(30102)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>巡<EFBFBD><E5B7A1><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̰<EFBFBD>
|
||||
-- 6<><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>ϴ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD>۽<EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
when devilcatacomb_floor5_stone.take begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
if item.vnum == setting.unlock_stone then
|
||||
item.remove ()
|
||||
d.notice(gameforge.devilcatacomb_zone._310_dNotice)
|
||||
-- 6<><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
|
||||
d.clear_regen()
|
||||
d.purge()
|
||||
timer("devilcatacomb_floor6_timer",2)
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_floor6_timer.timer begin
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
d.setf("level",6)
|
||||
d.setqf2("devilcatacomb_zone","level", 6)
|
||||
d.jump_all (setting.floor6_entry.x + setting.base.x, setting.floor6_entry.y + setting.base.y )
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_6f_regen.txt")
|
||||
d.spawn_mob (setting.devil_great_king, setting.devil_great_king_pos[1], setting.devil_great_king_pos[2])
|
||||
timer("warp_timer",3)
|
||||
end
|
||||
|
||||
-- <20>ư<EFBFBD>(2597)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 6<><36><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD>1<EFBFBD><31> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
when devilcatacomb_devil_great_king.kill begin
|
||||
server_timer ("floor6_eli_check_timer_1", 5,d.get_map_index())
|
||||
end
|
||||
|
||||
-- 6<><36><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD>1<EFBFBD><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
-- 0<≯<EFBFBD> 7<><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
-- <20>ٷ<EFBFBD> 7<><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>غ<EFBFBD><D8BA><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ֱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC>̴<EFBFBD>.
|
||||
-- 1<≯<EFBFBD> Ÿ<≯<EFBFBD>2<EFBFBD><32> <20><><EFBFBD>۽<EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
-- Ÿ<≯<EFBFBD>1<EFBFBD><31> recursive<76>ϰ<EFBFBD> <20><><EFBFBD>۽<EFBFBD>Ű<EFBFBD><C5B0> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
-- <20><EFBFBD> <20><><EFBFBD><EFBFBD> reset<65><74> Ÿ<≯<EFBFBD>1<EFBFBD><31> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾұ<CABE> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
when floor6_eli_check_timer_1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() == 0 then
|
||||
say_in_map (get_server_timer_arg(), gameforge.devilcatacomb_zone._320_say)
|
||||
server_timer ("devilcatacomb_floor7_timer", 3, get_server_timer_arg())
|
||||
else
|
||||
server_timer ("floor6_eli_check_timer_2", 5, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when floor6_eli_check_timer_2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() == 0 then
|
||||
say_in_map (get_server_timer_arg(), gameforge.devilcatacomb_zone._320_say)
|
||||
server_timer("devilcatacomb_floor7_timer", 3, get_server_timer_arg())
|
||||
else
|
||||
server_timer ("floor6_eli_check_timer_1", 5, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_floor7_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
local setting = devilcatacomb_zone.setting()
|
||||
|
||||
d.setf("level",7)
|
||||
d.setqf2("devilcatacomb_zone","level", 7)
|
||||
d.jump_all (setting.floor7_entry.x + setting.base.x, setting.floor7_entry.y + setting.base.y )
|
||||
d.regen_file (setting.mob_regen_file_path.."dc_7f_regen.txt")
|
||||
d.spawn_mob (setting.devil_emperor, setting.devil_emperor_pos[1], setting.devil_emperor_pos[2])
|
||||
server_timer ("devilcatacomb_floor7_say_timer", 2, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_floor7_say_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
|
||||
local t = 3600 -(get_global_time() - d.getf("enter_time"))
|
||||
local t_r = math.mod (t, 60)
|
||||
local t_m = (t - t_r) / 60
|
||||
d.notice(gameforge.devilcatacomb_zone._330_dNotice)
|
||||
d.notice(string.format(gameforge.devilcatacomb_zone._20_say, t_m))
|
||||
d.set_warp_location (0, 0, 0)
|
||||
end
|
||||
end
|
||||
|
||||
-- 6<><36><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>縶<EFBFBD><E7B8B6>(2598)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
-- 7<><37><EFBFBD><EFBFBD> Ÿ<≯Ӱ<CCB8> <20>۵<EFBFBD><DBB5>Ѵ<EFBFBD>.
|
||||
when devilcatacomb_devil_emperor.kill begin
|
||||
server_timer ("floor7_eli_check_timer_1", 5, d.get_map_index())
|
||||
end
|
||||
|
||||
-- 7<><37><EFBFBD><EFBFBD> Ÿ<≯Ӵ<CCB8> 6<><36> Ÿ<≯ӿ<CCB8> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD>,
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڰ<EFBFBD> 0<≯<EFBFBD> exit Ÿ<≯Ӹ<CCB8> <20><EFBFBD><DFBB><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
-- <20>ٷ<EFBFBD> exit<69><74><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>鿡<EFBFBD><E9BFA1> <20>غ<EFBFBD><D8BA><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20>ֱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC>̴<EFBFBD>.
|
||||
when floor7_eli_check_timer_1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() == 0 then
|
||||
d.set_warp_location (65, 5914, 992)
|
||||
d.setqf2("devilcatacomb_zone","done", 1)
|
||||
say_in_map (get_server_timer_arg(), gameforge.devilcatacomb_zone._340_say)
|
||||
clear_server_timer ("devilcatacomb_0m_left_timer", get_server_timer_arg())
|
||||
server_timer("devilcatacomb_exit_timer", 60, get_server_timer_arg())
|
||||
else
|
||||
server_timer ("floor7_eli_check_timer_2", 5, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when floor7_eli_check_timer_2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() == 0 then
|
||||
d.set_warp_location (65, 5914, 992)
|
||||
d.setqf2("devilcatacomb_zone","done", 1)
|
||||
say_in_map (get_server_timer_arg(), gameforge.devilcatacomb_zone._340_say)
|
||||
clear_server_timer ("devilcatacomb_0m_left_timer", get_server_timer_arg())
|
||||
server_timer("devilcatacomb_exit_timer", 60, get_server_timer_arg())
|
||||
else
|
||||
server_timer ("floor7_eli_check_timer_1", 5, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when devilcatacomb_exit_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
d.setqf2("devilcatacomb_zone","level", 0)
|
||||
d.setqf2("devilcatacomb_zone","last_exit_time", get_global_time())
|
||||
clear_server_timer("devilcatacomb_5m_left_timer", get_server_timer_arg())
|
||||
clear_server_timer("devilcatacomb_1m_left_timer", get_server_timer_arg())
|
||||
clear_server_timer("devilcatacomb_0m_left_timer", get_server_timer_arg())
|
||||
clear_server_timer("floor6_eli_check_timer_1", get_server_timer_arg())
|
||||
clear_server_timer("floor6_eli_check_timer_2", get_server_timer_arg())
|
||||
clear_server_timer("floor7_eli_check_timer_1", get_server_timer_arg())
|
||||
clear_server_timer("floor7_eli_check_timer_2", get_server_timer_arg())
|
||||
clear_server_timer("devilcatacomb_floor7_say_timer", get_server_timer_arg())
|
||||
clear_server_timer("devilcatacomb_floor7_timer", 3, get_server_timer_arg())
|
||||
d.clear_regen()
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
end --state
|
||||
end --quest
|
||||
|
464
gamefiles/data/quest/deviltower_2.quest
Normal file
464
gamefiles/data/quest/deviltower_2.quest
Normal file
@ -0,0 +1,464 @@
|
||||
quest deviltower_zone begin
|
||||
state start begin
|
||||
when login begin
|
||||
if pc.get_map_index() == 66 then
|
||||
if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then
|
||||
pc.warp((5376+532)*100, (512+596+4)*100, 65)
|
||||
end
|
||||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||||
elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
|
||||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||||
end
|
||||
end
|
||||
|
||||
when logout begin
|
||||
if pc.count_item(30300) >= 1 then
|
||||
pc.remove_item(30300, pc.count_item(30300))
|
||||
end
|
||||
-- not used in the game
|
||||
-- pc.remove_item(30301, pc.count_item(30301))
|
||||
if pc.count_item(30302) >= 1 then
|
||||
pc.remove_item(30302, pc.count_item(30302))
|
||||
end
|
||||
end
|
||||
|
||||
when deviltower_man.chat.gameforge.deviltower_zone._10_npcChat begin
|
||||
if pc.get_level() < 40 then
|
||||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||||
say(gameforge.deviltower_zone._30_say)
|
||||
else
|
||||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||||
say(gameforge.deviltower_zone._40_say)
|
||||
local s = select(gameforge.locale.monkey_dungeon.enter, gameforge.locale.monkey_dungeon.no_enter)
|
||||
if s == 1 then
|
||||
pc.warp(216500,727000)
|
||||
end
|
||||
end
|
||||
end
|
||||
when devil_stone1.kill begin
|
||||
timer("devil_stone1_1", 6)
|
||||
end
|
||||
when devil_stone1_1.timer begin
|
||||
d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2])
|
||||
d.regen_file("data/dungeon/deviltower2_regen.txt")
|
||||
d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt")
|
||||
end
|
||||
when devil_stone3.kill begin
|
||||
d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt")
|
||||
d.check_eliminated()
|
||||
end
|
||||
|
||||
function get_4floor_stone_pos()
|
||||
local positions =
|
||||
{
|
||||
{368, 629}, {419, 630}, {428, 653}, {422, 679},
|
||||
{395, 689}, {369, 679}, {361, 658},
|
||||
}
|
||||
for i = 1, 6 do
|
||||
local j = number(i, 7)
|
||||
if i != j then
|
||||
local t = positions[i];
|
||||
positions[i] = positions[j];
|
||||
positions[j] = t;
|
||||
end
|
||||
end
|
||||
return positions
|
||||
end
|
||||
|
||||
when 8016.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.setf("level", 4)
|
||||
local positions = deviltower_zone.get_4floor_stone_pos()
|
||||
|
||||
for i = 1, 6 do
|
||||
chat(positions[i][1], positions[i][2])
|
||||
d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2]))
|
||||
end
|
||||
|
||||
chat(positions[7][1], positions[7][2])
|
||||
|
||||
local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])
|
||||
chat(vid)
|
||||
d.set_unique("real", vid)
|
||||
server_loop_timer('devil_stone4_update', 10, pc.get_map_index())
|
||||
server_timer('devil_stone4_fail1', 5*60, pc.get_map_index())
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._50_dNotice,d.notice)
|
||||
|
||||
end
|
||||
|
||||
when devil_stone4_fail1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||||
server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_fail2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||||
server_timer('devil_stone4_fail', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_fail.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||||
d.exit_all()
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_update.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if not d.is_unique_dead("real") then
|
||||
for i = 1, 6 do
|
||||
if d.getf("fakedead" .. i) == 0 then
|
||||
if d.unique_get_hp_perc("fake" .. i) < 50 then
|
||||
d.purge_unique("fake" .. i)
|
||||
d.setf("fakedead" .. i, 1)
|
||||
notice_multiline(gameforge.deviltower_zone._90_dNotice,d.notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
server_timer("devil_stone4_end", 5, get_server_timer_arg())
|
||||
d.kill_all()
|
||||
notice_multiline(gameforge.deviltower_zone._100_dNotice,d.notice)
|
||||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||||
end
|
||||
else
|
||||
server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_stop_timer.server_timer begin
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
end
|
||||
|
||||
when devil_stone4_end.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||||
|
||||
d.setf("level", 5)
|
||||
d.setf("stone_count", 5)
|
||||
notice_multiline(gameforge.deviltower_zone._110_dNotice,d.notice)
|
||||
d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
|
||||
server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
|
||||
d.set_regen_file("data/dungeon/deviltower5_regen.txt")
|
||||
|
||||
d.spawn_mob(20073, 421, 452)
|
||||
d.spawn_mob(20073, 380, 460)
|
||||
d.spawn_mob(20073, 428, 414)
|
||||
d.spawn_mob(20073, 398, 392)
|
||||
d.spawn_mob(20073, 359, 426)
|
||||
end
|
||||
end
|
||||
when devil_stone5_fail1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._120_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail3.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
|
||||
local KILL_COUNT_FOR_DROP_KEY = 50
|
||||
local n =d.getf("count") + 1
|
||||
d.setf("count", n)
|
||||
if n == KILL_COUNT_FOR_DROP_KEY then
|
||||
game.drop_item(50084, 1)
|
||||
d.setf("count", 0)
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5.take with item.vnum == 50084 begin
|
||||
npc.purge()
|
||||
item.remove()
|
||||
d.setf("stone_count", d.getf("stone_count") - 1)
|
||||
if d.getf("stone_count") <= 0 then
|
||||
d.setf("level", 6)
|
||||
d.clear_regen()
|
||||
d.regen_file("data/dungeon/deviltower6_regen.txt")
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._130_dNotice,d.notice)
|
||||
d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
|
||||
clear_server_timer('devil_stone5_fail1', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone5_fail2', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone5_fail3', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone5_fail', get_server_timer_arg())
|
||||
else
|
||||
d.notice(string.format(gameforge.deviltower_zone._140_dNotice, d.getf("stone_count")))
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone6.kill begin
|
||||
d.kill_all()
|
||||
notice_multiline(gameforge.deviltower_zone._150_dNotice,d.notice)
|
||||
d.check_eliminated()
|
||||
notice_multiline(gameforge.deviltower_zone._160_dNotice,d.notice)
|
||||
local reward_alchemist = {20074, 20075, 20076}
|
||||
d.spawn_mob(reward_alchemist[number(1,3)], 425, 216);
|
||||
d.setqf("can_refine", 1)
|
||||
end
|
||||
|
||||
|
||||
when 20074.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20074))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20074))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.locale.cancel, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20074))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
|
||||
when 20075.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20075))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20075))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20075))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
when 20076.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20076))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20076))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20076))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
when devil_jump_7.timer begin
|
||||
d.clear_regen()
|
||||
|
||||
d.spawn_mob(8018, 639, 658)
|
||||
d.spawn_mob(8018, 611, 637)
|
||||
d.spawn_mob(8018, 596, 674)
|
||||
d.spawn_mob(8018, 629, 670)
|
||||
|
||||
d.setf("level", 7)
|
||||
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._240_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+638)
|
||||
end
|
||||
|
||||
when 8018.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
local cont = d.getf("7_stone_kill") + 1
|
||||
d.setf("7_stone_kill", cont)
|
||||
|
||||
if cont >= 4 then
|
||||
d.setf("7_stone_kill", 0)
|
||||
d.regen_file("data/dungeon/deviltower7_regen.txt")
|
||||
end
|
||||
end
|
||||
|
||||
when 8019.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
game.drop_item(30300, 1)
|
||||
d.clear_regen()
|
||||
d.kill_all()
|
||||
say("<22><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD><EEBAB8>")
|
||||
say("")
|
||||
d.spawn_mob(33001, 620, 635)
|
||||
end
|
||||
|
||||
when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
pc.remove_item("30300", 1)
|
||||
|
||||
local pct = number(1,10)
|
||||
|
||||
if pct == 1 then
|
||||
game.drop_item(30302, 1)
|
||||
d.notice("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>");
|
||||
else
|
||||
game.drop_item(30301, 1)
|
||||
d.regen_file("data/dungeon/deviltower7_regen.txt")
|
||||
end
|
||||
end
|
||||
when 33001.chat."<22><> <20>ذ<EFBFBD><D8B0><EFBFBD>..." with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20><><EFBFBD><EFBFBD>..")
|
||||
say("<22>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>..")
|
||||
say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20>ذ<EFBFBD>ó<EFBFBD><C3B3> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƴұ<C6B4>..")
|
||||
say("<22><EFBFBD><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ذ<EFBFBD><D8B0><EFBFBD><EFBFBD><EFBFBD>???")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
say("<22>ذ<EFBFBD><D8B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?")
|
||||
say("")
|
||||
|
||||
if 1 == select("<22><>", "<22>ƴϿ<C6B4>") then
|
||||
say("...")
|
||||
say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>")
|
||||
say("....")
|
||||
say("<22><>!")
|
||||
|
||||
wait()
|
||||
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
|
||||
when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
if d.getf( "level" ) != 7 then
|
||||
say("<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>")
|
||||
say("")
|
||||
pc.remove_item( "30302", 1)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.blacksmith._40_sayTitle)
|
||||
say(gameforge.deviltower_zone._250_say)
|
||||
pc.remove_item("30302", 1)
|
||||
timer("devil_jump_8", 6)
|
||||
d.clear_regen()
|
||||
end
|
||||
|
||||
when devil_jump_8.timer begin
|
||||
d.setf("level", 8)
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._260_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+403)
|
||||
d.set_regen_file("data/dungeon/deviltower8_regen.txt")
|
||||
pc.remove_item(30302, pc.count_item(30302))
|
||||
end
|
||||
|
||||
when 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and d.getf("level") == 8 begin
|
||||
if number(1, 5) == 1 then
|
||||
if number(1, 10) == 1 then
|
||||
game.drop_item(30304, 1)
|
||||
d.clear_regen()
|
||||
d.kill_all()
|
||||
d.spawn_mob(20366, 640, 460)
|
||||
else
|
||||
game.drop_item(30303, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20366.take with item.vnum == 30304 and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.clear_regen()
|
||||
d.kill_all()
|
||||
npc.purge()
|
||||
item.remove()
|
||||
timer("devil_jump_9", 6)
|
||||
end
|
||||
|
||||
when 20366.chat."<22><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD>!!?" with pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
say("")
|
||||
say("<22><> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD>鱺, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>⸦ <20><><EFBFBD><EFBFBD>߰ھ<DFB0>..")
|
||||
say("")
|
||||
wait()
|
||||
|
||||
d.exit_all()
|
||||
end
|
||||
when devil_jump_9.timer begin
|
||||
d.setf("level", 9)
|
||||
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._270_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+155)
|
||||
d.regen_file("data/dungeon/deviltower9_regen.txt")
|
||||
end
|
||||
|
||||
when 1093.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.kill_all()
|
||||
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._280_dNotice,d.notice)
|
||||
timer("devil_end_jump", 60)
|
||||
end
|
||||
|
||||
when devil_end_jump.timer begin
|
||||
d.clear_regen()
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
end
|
436
gamefiles/data/quest/deviltower_zone.quest
Normal file
436
gamefiles/data/quest/deviltower_zone.quest
Normal file
@ -0,0 +1,436 @@
|
||||
quest deviltower_zone begin
|
||||
state start begin
|
||||
when login begin
|
||||
if pc.get_map_index() == 66 then
|
||||
if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then
|
||||
pc.warp((5376+532)*100, (512+596+4)*100, 65)
|
||||
end
|
||||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||||
elseif pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 then
|
||||
pc.set_warp_location(65, 5376+532, 512+596+4)
|
||||
end
|
||||
end
|
||||
|
||||
when logout begin
|
||||
if pc.count_item(30300) >= 1 then
|
||||
pc.remove_item(30300, pc.count_item(30300))
|
||||
end
|
||||
-- not used in the game
|
||||
-- pc.remove_item(30301, pc.count_item(30301))
|
||||
if pc.count_item(30302) >= 1 then
|
||||
pc.remove_item(30302, pc.count_item(30302))
|
||||
end
|
||||
end
|
||||
|
||||
when deviltower_man.chat.gameforge.deviltower_zone._10_npcChat begin
|
||||
if pc.get_level() < 40 then
|
||||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||||
say(gameforge.deviltower_zone._30_say)
|
||||
else
|
||||
say_title(gameforge.deviltower_zone._20_sayTitle)
|
||||
say(gameforge.deviltower_zone._40_say)
|
||||
local s = select(gameforge.locale.monkey_dungeon.enter, gameforge.locale.monkey_dungeon.no_enter)
|
||||
if s == 1 then
|
||||
pc.warp(216500,727000)
|
||||
end
|
||||
end
|
||||
end
|
||||
when devil_stone1.kill begin
|
||||
timer("devil_stone1_1", 6)
|
||||
end
|
||||
when devil_stone1_1.timer begin
|
||||
d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2])
|
||||
d.regen_file("data/dungeon/deviltower2_regen.txt")
|
||||
d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt")
|
||||
end
|
||||
when devil_stone3.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt")
|
||||
d.check_eliminated()
|
||||
end
|
||||
|
||||
function get_4floor_stone_pos()
|
||||
local positions =
|
||||
{
|
||||
{368, 629}, {419, 630}, {428, 653}, {422, 679},
|
||||
{395, 689}, {369, 679}, {361, 658},
|
||||
}
|
||||
for i = 1, 6 do
|
||||
local j = number(i, 7)
|
||||
if i != j then
|
||||
local t = positions[i];
|
||||
positions[i] = positions[j];
|
||||
positions[j] = t;
|
||||
end
|
||||
end
|
||||
return positions
|
||||
end
|
||||
|
||||
when 8016.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.setf("level", 4)
|
||||
local positions = deviltower_zone.get_4floor_stone_pos()
|
||||
|
||||
for i = 1, 6 do
|
||||
test_chat(positions[i][1], positions[i][2])
|
||||
d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2]))
|
||||
end
|
||||
|
||||
test_chat(positions[7][1], positions[7][2])
|
||||
|
||||
local vid = d.spawn_mob(8017, positions[7][1], positions[7][2])
|
||||
test_chat(vid)
|
||||
d.set_unique("real", vid)
|
||||
server_loop_timer('devil_stone4_update', 10, pc.get_map_index())
|
||||
server_timer('devil_stone4_fail1', 5*60, pc.get_map_index())
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._50_dNotice,d.notice)
|
||||
|
||||
end
|
||||
|
||||
when devil_stone4_fail1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||||
server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_fail2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||||
server_timer('devil_stone4_fail', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_fail.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||||
d.clear_regen()
|
||||
d.exit_all()
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_update.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if not d.is_unique_dead("real") then
|
||||
for i = 1, 6 do
|
||||
if d.getf("fakedead" .. i) == 0 then
|
||||
if d.unique_get_hp_perc("fake" .. i) < 50 then
|
||||
d.purge_unique("fake" .. i)
|
||||
d.setf("fakedead" .. i, 1)
|
||||
notice_multiline(gameforge.deviltower_zone._90_dNotice,d.notice)
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
server_timer("devil_stone4_end", 5, get_server_timer_arg())
|
||||
--d.kill_all()
|
||||
d.purge()
|
||||
notice_multiline(gameforge.deviltower_zone._100_dNotice,d.notice)
|
||||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||||
end
|
||||
else
|
||||
server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone4_stop_timer.server_timer begin
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
end
|
||||
|
||||
when devil_stone4_end.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail1', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail2', get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_fail', get_server_timer_arg())
|
||||
|
||||
-- clear regen from memory when exit
|
||||
d.clear_regen()
|
||||
|
||||
d.setf("level", 5)
|
||||
d.setf("stone_count", 5)
|
||||
notice_multiline(gameforge.deviltower_zone._110_dNotice,d.notice)
|
||||
d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2])
|
||||
server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg())
|
||||
clear_server_timer('devil_stone4_update', get_server_timer_arg())
|
||||
|
||||
d.set_regen_file("data/dungeon/deviltower5_regen.txt")
|
||||
|
||||
d.spawn_mob(20073, 421, 452)
|
||||
d.spawn_mob(20073, 380, 460)
|
||||
d.spawn_mob(20073, 428, 414)
|
||||
d.spawn_mob(20073, 398, 392)
|
||||
d.spawn_mob(20073, 359, 426)
|
||||
end
|
||||
end
|
||||
when devil_stone5_fail1.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._120_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail2.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._60_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail3.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._70_dNotice,d.notice)
|
||||
server_timer('devil_stone5_fail', 5*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5_fail.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.deviltower_zone._80_dNotice,d.notice)
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin
|
||||
local KILL_COUNT_FOR_DROP_KEY = 50
|
||||
local n =d.getf("count") + 1
|
||||
d.setf("count", n)
|
||||
if n == KILL_COUNT_FOR_DROP_KEY then
|
||||
game.drop_item(50084, 1)
|
||||
d.setf("count", 0)
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone5.take with item.vnum == 50084 begin
|
||||
npc.purge()
|
||||
item.remove()
|
||||
d.setf("stone_count", d.getf("stone_count") - 1)
|
||||
if d.getf("stone_count") <= 0 then
|
||||
d.setf("level", 6)
|
||||
d.clear_regen()
|
||||
d.regen_file("data/dungeon/deviltower6_regen.txt")
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._130_dNotice,d.notice)
|
||||
d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2])
|
||||
local server_arg = d.get_map_index()
|
||||
clear_server_timer('devil_stone5_fail1', server_arg)
|
||||
clear_server_timer('devil_stone5_fail2', server_arg)
|
||||
clear_server_timer('devil_stone5_fail3', server_arg)
|
||||
clear_server_timer('devil_stone5_fail', server_arg)
|
||||
else
|
||||
d.notice(string.format(gameforge.deviltower_zone._140_dNotice, d.getf("stone_count")))
|
||||
end
|
||||
end
|
||||
|
||||
when devil_stone6.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and d.getf("level") == 6 begin
|
||||
d.kill_all()
|
||||
notice_multiline(gameforge.deviltower_zone._150_dNotice,d.notice)
|
||||
d.check_eliminated()
|
||||
notice_multiline(gameforge.deviltower_zone._160_dNotice,d.notice)
|
||||
local reward_alchemist = {20074, 20075, 20076}
|
||||
d.spawn_mob(reward_alchemist[number(1,3)], 425, 216);
|
||||
d.setqf2("deviltower_zone","can_refine", 1)
|
||||
end
|
||||
|
||||
|
||||
when 20074.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20074))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20074))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.locale.cancel, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110900)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20074))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
|
||||
when 20075.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20075))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20075))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110900)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20075))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
when 20076.chat.gameforge.deviltower_zone._170_npcChat with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 and npc.lock() begin
|
||||
say_title(mob_name(20076))
|
||||
say(gameforge.deviltower_zone._190_say)
|
||||
wait()
|
||||
if pc.level >=75 then
|
||||
say_title(mob_name(20076))
|
||||
|
||||
say(gameforge.deviltower_zone._200_say)
|
||||
local s= select(gameforge.deviltower_zone._210_select, gameforge.deviltower_zone._220_select)
|
||||
if s==3 then
|
||||
pc.warp(590500, 110900)
|
||||
return
|
||||
end
|
||||
if s==2 then
|
||||
return
|
||||
end
|
||||
|
||||
timer("devil_jump_7", 6)
|
||||
npc.unlock()
|
||||
d.purge()
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20076))
|
||||
say(gameforge.deviltower_zone._230_say)
|
||||
wait()
|
||||
pc.warp(590500, 110500)
|
||||
return
|
||||
end
|
||||
when devil_jump_7.timer begin
|
||||
d.clear_regen()
|
||||
|
||||
d.spawn_mob(8018, 639, 658)
|
||||
d.spawn_mob(8018, 611, 637)
|
||||
d.spawn_mob(8018, 596, 674)
|
||||
d.spawn_mob(8018, 629, 670)
|
||||
|
||||
d.setf("level", 7)
|
||||
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._240_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+638)
|
||||
end
|
||||
|
||||
when 8018.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
local cont = d.getf("7_stone_kill") + 1
|
||||
d.setf("7_stone_kill", cont)
|
||||
|
||||
if cont >= 4 then
|
||||
d.setf("7_stone_kill", 0)
|
||||
d.set_regen_file("data/dungeon/deviltower7_regen.txt")
|
||||
end
|
||||
end
|
||||
|
||||
when 8019.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
game.drop_item(30300, 1)
|
||||
end
|
||||
|
||||
when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
pc.remove_item("30300", 1)
|
||||
|
||||
local pct = number(1,10)
|
||||
|
||||
if pct == 1 then
|
||||
game.drop_item(30302, 1)
|
||||
d.clear_regen()
|
||||
else
|
||||
-- nothing happens cause the items isnt used in the game
|
||||
-- game.drop_item(30301, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
if d.getf( "level" ) != 7 then
|
||||
pc.remove_item( "30302", 1)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.blacksmith._40_sayTitle)
|
||||
say(gameforge.deviltower_zone._250_say)
|
||||
pc.remove_item("30302", 1)
|
||||
timer("devil_jump_8", 6)
|
||||
d.clear_regen()
|
||||
end
|
||||
|
||||
when devil_jump_8.timer begin
|
||||
d.setf("level", 8)
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._260_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+403)
|
||||
d.set_regen_file("data/dungeon/deviltower8_regen.txt")
|
||||
d.spawn_mob(20366, 640, 460)
|
||||
local _count = pc.count_item(30302)
|
||||
pc.remove_item(30302,_count)
|
||||
|
||||
end
|
||||
|
||||
when 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
local pct1 = number(1, 5)
|
||||
if pct1 == 1 then
|
||||
local pct2 = number(1, 10)
|
||||
if pct2 == 1 then
|
||||
game.drop_item(30304, 1)
|
||||
else
|
||||
game.drop_item(30303, 1)
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
when 20366.take with item.vnum == 30304 begin
|
||||
npc.purge()
|
||||
item.remove()
|
||||
timer("devil_jump_9", 6)
|
||||
end
|
||||
|
||||
when devil_jump_9.timer begin
|
||||
d.setf("level", 9)
|
||||
|
||||
|
||||
notice_multiline(gameforge.deviltower_zone._270_dNotice,d.notice)
|
||||
d.jump_all(2048+590, 6656+155)
|
||||
d.regen_file("data/dungeon/deviltower9_regen.txt")
|
||||
end
|
||||
|
||||
when 1093.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin
|
||||
d.kill_all()
|
||||
d.setqf2("deviltower_zone","9_done", 1)
|
||||
notice_multiline(gameforge.deviltower_zone._280_dNotice,d.notice)
|
||||
notice_multiline(gameforge.deviltower_zone._290_dNotice,d.notice)
|
||||
server_timer("devil_end_jump", 60, d.get_map_index())
|
||||
end
|
||||
|
||||
when devil_end_jump.server_timer begin
|
||||
if d.select (get_server_timer_arg()) then
|
||||
d.clear_regen()
|
||||
d.exit_all()
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
18
gamefiles/data/quest/dragon_lair.quest
Normal file
18
gamefiles/data/quest/dragon_lair.quest
Normal file
@ -0,0 +1,18 @@
|
||||
quest dragon_lair begin
|
||||
state start begin
|
||||
when 8031.kill or 8032.kill or 8033.kill or 8034.kill begin
|
||||
-- spawns a group of mobs at the area of the player with a chance of 1/3
|
||||
if (math.random(3) == 1) then
|
||||
local group_group = {
|
||||
2425, 2425,
|
||||
2426, 2426,
|
||||
2427
|
||||
}
|
||||
local group_num = math.random(table.getn(group_group))
|
||||
local group_vnum = group_group[group_num]
|
||||
mob.spawn_group(group_vnum, pc.get_local_x(), pc.get_local_y(), 1, 1, 1) -- spawn a group of monsters
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
330
gamefiles/data/quest/dragon_lair_access.quest
Normal file
330
gamefiles/data/quest/dragon_lair_access.quest
Normal file
@ -0,0 +1,330 @@
|
||||
quest dragon_lair_access begin
|
||||
state start begin
|
||||
|
||||
function get_settings()
|
||||
local settings = {}
|
||||
settings.cooldown_time = 3600 -- when can the dragon be killed again?
|
||||
settings.group_time = 300 -- how long can players enter after the first one is in the dragon's lair?
|
||||
settings.access_item = 30179 -- "Dragon God Symbols"
|
||||
settings.dragon_vnum = 2430
|
||||
|
||||
settings.spawn = {}
|
||||
settings.spawn.x = 181
|
||||
settings.spawn.y = 173
|
||||
|
||||
settings.warp_in = {}
|
||||
settings.warp_in.first = {}
|
||||
settings.warp_in.last = {}
|
||||
settings.warp_in.first.x = 843677
|
||||
settings.warp_in.first.y = 1066206
|
||||
settings.warp_in.last.x = 844027
|
||||
settings.warp_in.last.y = 1067599
|
||||
|
||||
settings.warp_out = {}
|
||||
settings.warp_out.first = {}
|
||||
settings.warp_out.last = {}
|
||||
settings.warp_out.first.x = 9200
|
||||
settings.warp_out.first.y = 1206400
|
||||
settings.warp_out.last.x = 10900
|
||||
settings.warp_out.last.y = 1209100
|
||||
|
||||
settings.room_area = {}
|
||||
settings.room_area.first = {}
|
||||
settings.room_area.last = {}
|
||||
settings.room_area.first.x = 833000
|
||||
settings.room_area.first.y = 1062500
|
||||
settings.room_area.last.x = 844100
|
||||
settings.room_area.last.y = 1071500
|
||||
|
||||
settings.access_item_amount = game.get_event_flag("dragon_lair_amount")
|
||||
if (settings.access_item_amount == 0) then
|
||||
settings.access_item_amount = 3 -- default value when event flag is not set
|
||||
elseif (settings.access_item_amount == -1) then
|
||||
settings.access_item_amount = 0 -- no dragon marks needed when event flag -1 (special case)
|
||||
end
|
||||
|
||||
return settings
|
||||
end
|
||||
|
||||
function get_random_point(area_coordinates)
|
||||
return math.random(area_coordinates.first.x, area_coordinates.last.x), math.random(area_coordinates.first.y, area_coordinates.last.y)
|
||||
end
|
||||
|
||||
function warp_to_lair()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
local x, y = dragon_lair_access.get_random_point(settings.warp_in)
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPTOLAIR: x:'.. x ..', y:' .. y)
|
||||
pc.warp(x,y)
|
||||
end
|
||||
|
||||
function warp_from_lair()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
local x, y = dragon_lair_access.get_random_point(settings.warp_out)
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' WARPFROMLAIR: x:'.. x ..', y:' .. y)
|
||||
pc.warp(x,y)
|
||||
end
|
||||
|
||||
function warp_all_from_lair()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
warp_all_in_area_to_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y, settings.warp_out.first.x, settings.warp_out.first.y, settings.warp_out.last.x, settings.warp_out.last.y)
|
||||
game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
|
||||
char_log(0, 'LAIR', 'WARP ALL')
|
||||
end
|
||||
|
||||
function get_time_remaining()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
return (game.get_event_flag("dragon_lair_time") + settings.cooldown_time - get_global_time())
|
||||
end
|
||||
|
||||
function give_item_to_ghost()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._130_say)
|
||||
say(settings.access_item_amount.."x: ")
|
||||
say_item_vnum(settings.access_item)
|
||||
local give_item = select(gameforge.dragon_lair_access._140_select, gameforge.locale.cancel)
|
||||
if give_item == 1 then
|
||||
pc.remove_item(settings.access_item, settings.access_item_amount)
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' GIVE ITEM')
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function show_time_remaining(time_remaining)
|
||||
q.set_title(gameforge.dragon_lair_access._165_sendLetter)
|
||||
send_letter(gameforge.dragon_lair_access._165_sendLetter)
|
||||
q.set_clock(gameforge.locale.monkey_dungeon.quest_rest_time, time_remaining)
|
||||
timer("dragon_lair_timer", time_remaining)
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, time_remaining / 60), notice)
|
||||
q.start()
|
||||
end
|
||||
|
||||
when enter or login begin
|
||||
pc.setqf("is_leader", 0)
|
||||
q.done()
|
||||
if pc.get_map_index() == 208 and not pc.is_gm() then
|
||||
dragon_lair_access.warp_from_lair()
|
||||
end
|
||||
end
|
||||
|
||||
when blue_dragon_timer.server_timer begin
|
||||
game.set_event_flag("dragon_lair_timer_used", 0)
|
||||
if game.get_event_flag("dragon_lair_alive") == 1 then
|
||||
notice_multiline(gameforge.dragon_lair_access._150_notice, notice_all)
|
||||
else
|
||||
notice_multiline(gameforge.dragon_lair_access._160_notice, notice_all)
|
||||
end
|
||||
dragon_lair_access.warp_all_from_lair()
|
||||
end
|
||||
|
||||
when 30121.chat.gameforge.dragon_lair_access._010_npcChat with pc.get_map_index() != 208 begin
|
||||
|
||||
local starttime = game.get_event_flag("dragon_lair_time")
|
||||
local current_time = get_global_time()
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
local time_remaining = dragon_lair_access.get_time_remaining()
|
||||
|
||||
if pc.count_item(settings.access_item) >= settings.access_item_amount then
|
||||
if starttime + settings.group_time >= current_time then
|
||||
local password_input;
|
||||
repeat
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._020_say)
|
||||
password_input = tonumber(input())
|
||||
if password_input != game.get_event_flag("dragon_lair_password") then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._030_say)
|
||||
local again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
|
||||
if again == 2 then
|
||||
return
|
||||
end
|
||||
end
|
||||
until password_input == game.get_event_flag("dragon_lair_password")
|
||||
if not dragon_lair_access.give_item_to_ghost() then
|
||||
return
|
||||
end
|
||||
|
||||
-- right password
|
||||
pc.setqf("time", starttime)
|
||||
dragon_lair_access.warp_to_lair()
|
||||
set_state(kill_dragon)
|
||||
elseif time_remaining < 0 and npc.lock() then -- it is the first player talking with the ghost
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._050_say)
|
||||
local abort = select(gameforge.dragon_lair_access._060_select, gameforge.locale.cancel)
|
||||
|
||||
if abort == 2 then
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
local password_number;
|
||||
repeat
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._070_say)
|
||||
password_number = tonumber(input())
|
||||
local again;
|
||||
if type(password_number) != 'number' then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._080_say)
|
||||
again = select(gameforge.dragon_lair_access._040_select, gameforge.locale.cancel)
|
||||
if again == 2 then
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
end
|
||||
until type(password_number) == 'number'
|
||||
|
||||
if not dragon_lair_access.give_item_to_ghost() then
|
||||
npc.unlock()
|
||||
return
|
||||
end
|
||||
|
||||
if dragon_lair_access.get_time_remaining() > 0 then
|
||||
pc.give_item2(settings.access_item, settings.access_item_amount)
|
||||
npc.unlock()
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._120_say)
|
||||
return
|
||||
end
|
||||
|
||||
pc.setqf("password", password_number)
|
||||
timer("dragon_lair_warptimer", pc.get_channel_id()*2)
|
||||
|
||||
npc.unlock()
|
||||
else
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._120_say)
|
||||
return
|
||||
end
|
||||
|
||||
else
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._100_say)
|
||||
say(gameforge.dragon_lair_access._105_say)
|
||||
say(settings.access_item_amount.."x: ")
|
||||
say_item_vnum(settings.access_item)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._115_say)
|
||||
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
|
||||
if warp == 1 then
|
||||
dragon_lair_access.warp_from_lair() -- so that GMs get ported out, too
|
||||
set_state(start)
|
||||
end
|
||||
end
|
||||
|
||||
when dragon_lair_warptimer.timer begin
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
if dragon_lair_access.get_time_remaining() < 0 then
|
||||
local starttime = get_global_time()
|
||||
game.set_event_flag("dragon_lair_time", starttime) -- set start time
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET STARTTIME: ' .. starttime)
|
||||
pc.setqf("time", starttime)
|
||||
|
||||
pc.setqf("is_leader", 1)
|
||||
game.set_event_flag("dragon_lair_password", pc.getqf("password")) -- set password
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SET PASSWORD: '.. pc.getqf("password"))
|
||||
|
||||
server_timer("blue_dragon_timer", settings.cooldown_time)
|
||||
|
||||
dragon_lair_access.warp_to_lair()
|
||||
set_state(spawn_dragon)
|
||||
else
|
||||
pc.give_item2(settings.access_item, settings.access_item_amount)
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._120_say)
|
||||
end
|
||||
pc.setqf("password", 0)
|
||||
end
|
||||
end
|
||||
|
||||
state spawn_dragon begin
|
||||
when login begin
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._090_notice, pc.name), notice_all)
|
||||
|
||||
-- spawn all mobs needed
|
||||
regen_in_map(208, "locale/_master/map/metin2_map_skipia_dungeon_boss/regen.txt")
|
||||
mob.spawn_group(settings.dragon_vnum, settings.spawn.x, settings.spawn.y, 1, 1, 1) -- spawn the dragon
|
||||
|
||||
|
||||
game.set_event_flag("dragon_lair_alive", 1) -- dragon is alive
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' SPAWN DRAGON')
|
||||
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
|
||||
dragon_lair_access.show_time_remaining(settings.cooldown_time)
|
||||
|
||||
set_state(kill_dragon)
|
||||
end
|
||||
|
||||
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._115_say)
|
||||
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
|
||||
if warp == 1 then
|
||||
dragon_lair_access.warp_from_lair()
|
||||
set_state(start)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state kill_dragon begin
|
||||
|
||||
when dragon_lair_timer.timer begin
|
||||
set_state(start)
|
||||
end
|
||||
|
||||
when login begin
|
||||
if pc.getqf("time") != game.get_event_flag("dragon_lair_time") or dragon_lair_access.get_time_remaining() <= 0 then
|
||||
set_state(start)
|
||||
else
|
||||
dragon_lair_access.show_time_remaining(dragon_lair_access.get_time_remaining())
|
||||
end
|
||||
end
|
||||
|
||||
when button or info begin
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._170_notice, dragon_lair_access.get_time_remaining() / 60), notice)
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
if (pc.getqf("is_leader") == 1 and settings.cooldown_time-dragon_lair_access.get_time_remaining() < settings.group_time) then
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._145_notice, game.get_event_flag("dragon_lair_password")), notice)
|
||||
end
|
||||
end
|
||||
|
||||
when 30121.chat.gameforge.dragon_lair_access._110_npcChat with pc.get_map_index() == 208 begin
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.dragon_lair_access._115_say)
|
||||
local warp = select(gameforge.dragon_lair_access._116_select, gameforge.dragon_lair_access._117_select)
|
||||
if warp == 1 then
|
||||
dragon_lair_access.warp_from_lair()
|
||||
set_state(start)
|
||||
end
|
||||
end
|
||||
|
||||
when 20009.chat.gameforge.dragon_lair_access._190_npcChat or 9012.chat.gameforge.dragon_lair_access._190_npcChat or 30121.chat.gameforge.dragon_lair_access._190_npcChat with pc.get_map_index() != 208 begin
|
||||
if pc.getqf("time") > 0 and pc.getqf("time") == game.get_event_flag("dragon_lair_time") then
|
||||
dragon_lair_access.warp_to_lair()
|
||||
else
|
||||
say_title(gameforge.neutral_warp._20_sayTitle)
|
||||
say(gameforge.dragon_lair_access._120_say)
|
||||
set_state(start)
|
||||
end
|
||||
end
|
||||
when 2493.kill with pc.get_map_index() == 208 begin
|
||||
char_log(pc.get_player_id(), 'LAIR', pc.get_channel_id() ..' DRAGON KILLED')
|
||||
game.set_event_flag("dragon_lair_alive", 0) -- dragon is dead
|
||||
game.drop_item_with_ownership(71123, 1) -- dropping dragon scale
|
||||
game.drop_item_with_ownership(71129, 1) -- dropping toe nail
|
||||
notice_multiline(string.format(gameforge.dragon_lair_access._180_notice, pc.name), notice_all) -- the dragon has been killed by <name>!
|
||||
local settings = dragon_lair_access.get_settings()
|
||||
purge_area(settings.room_area.first.x, settings.room_area.first.y, settings.room_area.last.x, settings.room_area.last.y)
|
||||
end
|
||||
end
|
||||
end
|
249
gamefiles/data/quest/dragon_lair_weekly.quest
Normal file
249
gamefiles/data/quest/dragon_lair_weekly.quest
Normal file
@ -0,0 +1,249 @@
|
||||
quest dragon_lair_weekly begin
|
||||
state start begin
|
||||
|
||||
function set_settings()
|
||||
local settings = { }
|
||||
-- how long the player has to wait until he can do the quest again
|
||||
settings.cooldown_time = 561600 -- 60 seconds * 60 minutes * 24 hours * 6.5 days
|
||||
-- how long the player has time to get the items
|
||||
settings.time_to_hunt = 7200 -- 2 hours
|
||||
|
||||
-- those items should be hunted
|
||||
settings.items_to_hunt = {
|
||||
30198,
|
||||
30199,
|
||||
50721,
|
||||
50722,
|
||||
50723,
|
||||
50725,
|
||||
50726,
|
||||
50727
|
||||
}
|
||||
-- the amount of items to be hunted. Array field relate to settings.items_to_hunt
|
||||
settings.amount_to_hunt = {
|
||||
10,
|
||||
10,
|
||||
50,
|
||||
50,
|
||||
50,
|
||||
50,
|
||||
50,
|
||||
50
|
||||
}
|
||||
|
||||
settings.amount_to_pay = 150000
|
||||
|
||||
-- Rewards:
|
||||
-- how often he gets a normal item instead of a poly marble
|
||||
settings.normal_items_rate = 50 -- in percent
|
||||
|
||||
-- reward tables follow the rules: {vnum, quantity, mininum level, maximum level}
|
||||
|
||||
-- reward items when giving a normal item
|
||||
settings.normal_items = {
|
||||
{70008, 1}
|
||||
}
|
||||
|
||||
-- vnum of the poly marble (to show an icon to the player)
|
||||
settings.poly_item_vnum = 71093
|
||||
|
||||
-- mobs to give in a poly marble
|
||||
settings.poly_mobs = {
|
||||
{175, 6},
|
||||
{184, 6},
|
||||
{501, 4},
|
||||
{502, 4},
|
||||
{552, 2, 85},
|
||||
{771, 6},
|
||||
{1601, 2, 95},
|
||||
{2001, 4},
|
||||
{2051, 2, 90},
|
||||
{2061, 2, 90},
|
||||
{2131, 6},
|
||||
{5003, 6}
|
||||
}
|
||||
|
||||
return settings
|
||||
end
|
||||
|
||||
when login or enter or levelup with pc.get_level() >= 85 begin
|
||||
set_state(getquest)
|
||||
end
|
||||
end
|
||||
|
||||
state getquest begin
|
||||
|
||||
when enter begin
|
||||
pc.setqf("item_to_hunt", 0)
|
||||
pc.setqf("amount_to_hunt", 0)
|
||||
end
|
||||
|
||||
-- "Give me polymorph items!"
|
||||
when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
|
||||
local settings = dragon_lair_weekly.set_settings()
|
||||
local time_to_wait = pc.getqf("lasttime") - get_global_time() + settings.cooldown_time
|
||||
-- "Ghost of a warrior: "
|
||||
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
|
||||
if time_to_wait < 0 then
|
||||
-- the player has no cooldown any longer
|
||||
local item_to_hunt = pc.getqf("item_to_hunt")
|
||||
local amount_to_hunt = pc.getqf("amount_to_hunt")
|
||||
if item_to_hunt == 0 then
|
||||
local table_number = math.random(table.getn(settings.items_to_hunt))
|
||||
item_to_hunt = settings.items_to_hunt[table_number]
|
||||
amount_to_hunt = settings.amount_to_hunt[table_number]
|
||||
pc.setqf("item_to_hunt", item_to_hunt)
|
||||
pc.setqf("amount_to_hunt", amount_to_hunt)
|
||||
end
|
||||
|
||||
-- "You have to collect %s:"
|
||||
say(string.format(gameforge.dragon_lair_weekly._030_say, amount_to_hunt))
|
||||
say_item_vnum(item_to_hunt)
|
||||
-- "Then I will give you polymorph!"
|
||||
say(gameforge.dragon_lair_weekly._040_say)
|
||||
-- yes / no
|
||||
local accept = select(gameforge.dragon_lair_weekly._050_select, gameforge.dragon_lair_weekly._060_select)
|
||||
if accept == 1 then
|
||||
set_state(hunt_item)
|
||||
else
|
||||
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
|
||||
-- "You are mean to me!"
|
||||
say(gameforge.dragon_lair_weekly._070_say)
|
||||
end
|
||||
else
|
||||
-- player still has cooldown
|
||||
-- "You have to wait %s longer!"
|
||||
say(string.format(gameforge.dragon_lair_weekly._080_say, get_time_remaining(time_to_wait)))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
state hunt_item begin
|
||||
|
||||
-- returns the amount of items the player still has to hunt
|
||||
function get_amount_remaining()
|
||||
return (pc.getqf("amount_to_hunt") - pc.count_item(pc.getqf("item_to_hunt")))
|
||||
end
|
||||
|
||||
-- returns the time in seconds the player has left collecting the items.
|
||||
function get_time_remaining()
|
||||
local settings = dragon_lair_weekly.set_settings()
|
||||
return (pc.getqf("lasttime") - get_global_time() + settings.time_to_hunt)
|
||||
end
|
||||
|
||||
when login begin
|
||||
-- add a quest icon and timer
|
||||
local time_remaining = dragon_lair_weekly.get_time_remaining()
|
||||
q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will be shown to the player
|
||||
timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
|
||||
if dragon_lair_weekly.get_amount_remaining() > 0 then
|
||||
-- "Collect things!"
|
||||
send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
|
||||
q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
|
||||
else
|
||||
-- "Things collected!"
|
||||
send_letter(gameforge.dragon_lair_weekly._120_sendLetter)
|
||||
q.set_title(gameforge.dragon_lair_weekly._130_sayTitle)
|
||||
end
|
||||
q.start()
|
||||
end
|
||||
|
||||
when enter begin
|
||||
local settings = dragon_lair_weekly.set_settings()
|
||||
local time_remaining = settings.time_to_hunt
|
||||
pc.setqf("lasttime", get_global_time()) -- reset the cooldown
|
||||
-- "Collect things!"
|
||||
send_letter(gameforge.dragon_lair_weekly._100_sendLetter)
|
||||
q.set_title(gameforge.dragon_lair_weekly._110_sayTitle)
|
||||
q.set_clock(gameforge.dragon_lair_weekly._090_questRest, time_remaining) -- timer that will trigger the failing of this quest
|
||||
timer("dragon_lair_weekly_timer", time_remaining) -- timer that will trigger the failing of this quest
|
||||
q.start()
|
||||
end
|
||||
|
||||
when info or button begin
|
||||
local settings = dragon_lair_weekly.set_settings()
|
||||
local amount_remaining = dragon_lair_weekly.get_amount_remaining()
|
||||
if (amount_remaining > 0) then
|
||||
local time_remaining = dragon_lair_weekly.get_time_remaining()
|
||||
if (time_remaining > 0) then
|
||||
-- player still has to collect items
|
||||
say_title(gameforge.dragon_lair_weekly._110_sayTitle) -- quest title
|
||||
-- "You still have to collect %s:"
|
||||
say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
|
||||
say_item_vnum(pc.getqf("item_to_hunt"))
|
||||
say("")
|
||||
say(gameforge.dragon_lair_weekly._090_questRest .. get_time_remaining(time_remaining))
|
||||
else
|
||||
-- player did not collect the items in time
|
||||
|
||||
-- "You failed collecting the items in time!"
|
||||
notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
|
||||
q.done()
|
||||
set_state(getquest) -- reset the quest, but the cooldown remains
|
||||
end
|
||||
else
|
||||
say_title(gameforge.dragon_lair_weekly._130_sayTitle) -- quest title
|
||||
-- "You have all needed items. Go back to the warrior Ghost! He is in heavens cave 2"
|
||||
say(gameforge.dragon_lair_weekly._150_say)
|
||||
end
|
||||
end
|
||||
|
||||
when dragon_lair_weekly_timer.timer begin
|
||||
-- the player did not collect the items in time
|
||||
|
||||
-- "You failed collecting the items in time!"
|
||||
notice_multiline(gameforge.dragon_lair_weekly._160_notice,notice)
|
||||
q.done()
|
||||
set_state(getquest) -- reset the quest, but the cooldown remains
|
||||
end
|
||||
|
||||
|
||||
when 30122.chat.gameforge.dragon_lair_weekly._010_chat with pc.get_map_index() == 73 begin
|
||||
local settings = dragon_lair_weekly.set_settings()
|
||||
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
|
||||
|
||||
local amount_remaining = dragon_lair_weekly.get_amount_remaining()
|
||||
if amount_remaining > 0 then
|
||||
-- the player did not collect enough items
|
||||
-- "You still have to collect %s:"
|
||||
say(string.format(gameforge.dragon_lair_weekly._140_say, amount_remaining))
|
||||
say_item_vnum(pc.getqf("item_to_hunt"))
|
||||
|
||||
-- "Then I will give you polymorph!"
|
||||
say(gameforge.dragon_lair_weekly._040_say)
|
||||
elseif pc.money < settings.amount_to_pay then
|
||||
-- you don't have enough yang to pay
|
||||
say(gameforge.dragon_lair_weekly._175_say)
|
||||
else
|
||||
-- "You want to give me %s ?: "
|
||||
say(string.format(gameforge.dragon_lair_weekly._170_say, pc.getqf("amount_to_hunt")))
|
||||
say_item_vnum(pc.getqf("item_to_hunt"))
|
||||
-- "Yes" / "No"
|
||||
local give_item = select(gameforge.dragon_lair_weekly._180_select, gameforge.dragon_lair_weekly._190_select)
|
||||
say_title(gameforge.dragon_lair_weekly._020_sayTitle)
|
||||
if (give_item == 1) then
|
||||
-- "Thanks, now you get this from me: "
|
||||
-- see if a normal item, or a polymorph item should be given
|
||||
if math.random(100) < settings.normal_items_rate then -- normal item
|
||||
say(gameforge.dragon_lair_weekly._205_sayReward)
|
||||
local award_vnum = get_random_vnum_from_table(settings.normal_items)
|
||||
say_item_vnum(award_vnum)
|
||||
pc.give_item2(award_vnum)
|
||||
else -- polymorph item
|
||||
say(gameforge.dragon_lair_weekly._200_sayReward)
|
||||
local award_vnum = get_random_vnum_from_table(settings.poly_mobs)
|
||||
say_item(item_name(settings.poly_item_vnum), settings.poly_item_vnum, mob_name(award_vnum))
|
||||
pc.give_poly_marble(award_vnum) -- give a poly morph item with this mob vnum in it
|
||||
end
|
||||
|
||||
pc.remove_item(pc.getqf("item_to_hunt"), pc.getqf("amount_to_hunt")) -- remove the questitems from inventory
|
||||
pc.changemoney(settings.amount_to_pay) -- player pays yang for the item
|
||||
q.done()
|
||||
set_state(getquest)
|
||||
else
|
||||
say(gameforge.dragon_lair_weekly._210_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
159
gamefiles/data/quest/dragon_soul.quest
Normal file
159
gamefiles/data/quest/dragon_soul.quest
Normal file
@ -0,0 +1,159 @@
|
||||
define gemstone 30270
|
||||
define alchemist 20001
|
||||
define reward_box 50255
|
||||
define gemstone_need_count 10
|
||||
define gemstone_trade_max_per_day 10
|
||||
define dragon_soul_can_use_level 30
|
||||
define drop_flag "ds_drop"
|
||||
|
||||
quest dragon_soul begin
|
||||
state start begin
|
||||
when levelup or letter with pc.level >= dragon_soul_can_use_level begin
|
||||
send_letter(gameforge.dragon_soul._1010_sendLetter)
|
||||
local v = find_npc_by_vnum(alchemist)
|
||||
|
||||
if 0 != v then
|
||||
target.vid("__TARGET__", v, mob_name(alchemist))
|
||||
end
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1020_say)
|
||||
end
|
||||
|
||||
when alchemist.chat.gameforge.dragon_soul._1030_npcChat with pc.level >= dragon_soul_can_use_level begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(mob_name(alchemist))
|
||||
say(gameforge.dragon_soul._1040_say)
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_learning begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1050_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1060_say)
|
||||
end
|
||||
when kill begin
|
||||
if npc.is_pc() then
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(gemstone) < gemstone_need_count then
|
||||
if drop_gamble_with_flag(drop_flag) then
|
||||
game.drop_item_with_ownership(gemstone, 1, 300)
|
||||
end
|
||||
end
|
||||
end
|
||||
when alchemist.chat.gameforge.dragon_soul._1050_sendLetter begin
|
||||
say_title(mob_name(alchemist))
|
||||
if pc.count_item(gemstone) >= gemstone_need_count then
|
||||
say(gameforge.dragon_soul._1070_say)
|
||||
pc.remove_item(gemstone, gemstone_need_count)
|
||||
ds.give_qualification()
|
||||
char_log(pc.get_player_id(), 'DS_QUALIFICATION', 'SUCCESS')
|
||||
pc.give_item2(reward_box)
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 9)
|
||||
set_state(state_farming)
|
||||
else
|
||||
say(gameforge.dragon_soul._1080_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state_farming begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1090_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(string.format(gameforge.dragon_soul._1100_say, pc.getf("dragon_soul", "eye_left")))
|
||||
end
|
||||
when kill begin
|
||||
if npc.is_pc() then
|
||||
return
|
||||
end
|
||||
|
||||
if drop_gamble_with_flag(drop_flag) then
|
||||
local eye_left = pc.getf("dragon_soul", "eye_left")
|
||||
local haved_gemstone_number = pc.count_item(gemstone)
|
||||
|
||||
if eye_left > haved_gemstone_number / gemstone_need_count then
|
||||
game.drop_item_with_ownership(gemstone, 1, 300)
|
||||
end
|
||||
end
|
||||
end
|
||||
when gemstone.pick begin
|
||||
local eye_left = pc.getf("dragon_soul", "eye_left")
|
||||
if eye_left <= 0 then
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(gemstone) >= gemstone_need_count then
|
||||
pc.setf("dragon_soul", "eye_left", eye_left - 1)
|
||||
pc.remove_item(gemstone, gemstone_need_count)
|
||||
pc.give_item2(reward_box)
|
||||
if 1 == eye_left then
|
||||
notice_multiline(gameforge.dragon_soul._1110_notice, notice)
|
||||
set_state(state_closed_season)
|
||||
end
|
||||
end
|
||||
end
|
||||
when alchemist.chat.gameforge.dragon_soul._1120_npcChat begin
|
||||
say_title(mob_name(alchemist))
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1130_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1140_say)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 10)
|
||||
end
|
||||
end
|
||||
end
|
||||
state state_closed_season begin
|
||||
when letter begin
|
||||
send_letter(gameforge.dragon_soul._1150_sendLetter)
|
||||
end
|
||||
when info or button begin
|
||||
say(gameforge.dragon_soul._1160_say)
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1170_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1180_say)
|
||||
end
|
||||
end
|
||||
|
||||
when alchemist.chat.gameforge.dragon_soul._1090_sendLetter begin
|
||||
say_title(mob_name(alchemist))
|
||||
local today = math.floor(get_global_time() / 86400)
|
||||
if today == pc.getf("dragon_soul", "eye_timestamp") then
|
||||
say(gameforge.dragon_soul._1130_say)
|
||||
else
|
||||
say(gameforge.dragon_soul._1140_say)
|
||||
pc.setf("dragon_soul", "eye_timestamp", today)
|
||||
pc.setf("dragon_soul", "eye_left", 10)
|
||||
set_state(state_farming)
|
||||
end
|
||||
end
|
||||
end
|
||||
-- deprecated states. so, jump to new state.
|
||||
state state_1 begin
|
||||
when login begin
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_2 begin
|
||||
when login begin
|
||||
set_state(state_learning)
|
||||
end
|
||||
end
|
||||
state state_3 begin
|
||||
when login begin
|
||||
set_state(state_closed_season)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
43
gamefiles/data/quest/dragon_soul_daily_gift.quest
Normal file
43
gamefiles/data/quest/dragon_soul_daily_gift.quest
Normal file
@ -0,0 +1,43 @@
|
||||
define checker 20001
|
||||
define level_limit 50
|
||||
quest dragon_soul_daily_gift begin
|
||||
state start begin
|
||||
function is_event_on()
|
||||
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> dragon_soul_daily_gift_mgr.quest<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local now = os.time()
|
||||
return now > s_time and now < e_time
|
||||
end
|
||||
|
||||
when checker.chat.gameforge.dragon_soul_daily_gift._010_npcChat with dragon_soul_daily_gift.is_event_on() begin
|
||||
local event_id = game.get_event_flag("ds_dg_id")
|
||||
if pc.getqf("event_id") != event_id then
|
||||
say_title(mob_name(checker))
|
||||
if pc.level < level_limit then
|
||||
say(gameforge.dragon_soul_daily_gift._020_say)
|
||||
return
|
||||
elseif 0 == ds.is_qualified() then
|
||||
say(gameforge.dragon_soul_daily_gift._030_say)
|
||||
return
|
||||
else
|
||||
say(gameforge.dragon_soul_daily_gift._040_say)
|
||||
pc.setqf("event_id", event_id)
|
||||
wait()
|
||||
end
|
||||
end
|
||||
|
||||
say_title(mob_name(checker))
|
||||
if 0 == get_today_count("dragon_soul_daily_gift", "gift") then
|
||||
-- <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
say(gameforge.dragon_soul_daily_gift._050_say)
|
||||
local gift_vnum = game.get_event_flag("ds_dg_item")
|
||||
pc.give_item2(gift_vnum)
|
||||
inc_today_count("dragon_soul_daily_gift", "gift")
|
||||
else
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><>.
|
||||
say(gameforge.dragon_soul_daily_gift._060_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
91
gamefiles/data/quest/dragon_soul_daily_gift_mgr.quest
Normal file
91
gamefiles/data/quest/dragon_soul_daily_gift_mgr.quest
Normal file
@ -0,0 +1,91 @@
|
||||
define checker 20001
|
||||
quest dragon_soul_daily_gift_mgr begin
|
||||
state start begin
|
||||
function is_event_on()
|
||||
-- <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> dragon_soul_daily_gift_mgr.quest<73><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>뿪<EFBFBD><EBBFAA><EFBFBD><EFBFBD> Ȯ<><C8AE>.
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local now = os.time()
|
||||
return now > s_time and now < e_time
|
||||
end
|
||||
function date_getter()
|
||||
say(gameforge.dragon_soul_gift_mgr._040_say)
|
||||
say("yy-mm-dd hh:mm")
|
||||
local date = input()
|
||||
local _, _, y, m, d, hour, min = string.find(date, "(%d+)-(%d+)-(%d+) (%d+):(%d+)")
|
||||
return y, m, d, hour, min
|
||||
end
|
||||
function print_quest_info()
|
||||
local s_time = game.get_event_flag("ds_dg_st")
|
||||
local e_time = game.get_event_flag("ds_dg_et")
|
||||
local gift_vnum = game.get_event_flag("ds_dg_item")
|
||||
|
||||
say(os.date("start time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", s_time))
|
||||
say(os.date(" end time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", e_time))
|
||||
|
||||
say(string.format("gift item[ENTER] vnum : %d", gift_vnum))
|
||||
say_item_vnum(gift_vnum)
|
||||
end
|
||||
when checker.chat.gameforge.dragon_soul_gift_mgr._010_npcChat with pc.is_gm() begin
|
||||
local sel = 0
|
||||
if dragon_soul_daily_gift_mgr.is_event_on() then
|
||||
say(locale.event_on_going)
|
||||
local sel = select(locale.event_modify, locale.event_info_print, locale.event_cancel, locale.close)
|
||||
if 2 == sel then
|
||||
dragon_soul_daily_gift_mgr.print_quest_info()
|
||||
return
|
||||
elseif 3 == sel then
|
||||
game.set_event_flag("ds_dg_et", 0)
|
||||
return
|
||||
elseif 4 == sel then
|
||||
return
|
||||
end
|
||||
|
||||
end
|
||||
-- Get start time and end time.
|
||||
local s_y, s_m, s_d, s_hour, s_min
|
||||
repeat
|
||||
say(gameforge.dragon_soul_gift_mgr._020_say)
|
||||
s_y, s_m, s_d, s_hour, s_min = dragon_soul_daily_gift_mgr.date_getter()
|
||||
s_y = s_y + 2000
|
||||
say(string.format("year:%d month:%d day:%d hour:%d min:%d", s_y, s_m, s_d, s_hour, s_min))
|
||||
until 1 == select(gameforge.locale.yes, gameforge.locale.no)
|
||||
local e_y, e_m, e_d, e_hour, e_min
|
||||
repeat
|
||||
say(gameforge.dragon_soul_gift_mgr._030_say)
|
||||
e_y, e_m, e_d, e_hour, e_min = dragon_soul_daily_gift_mgr.date_getter()
|
||||
e_y = e_y + 2000
|
||||
say(string.format("year:%d month:%d day:%d hour:%d min:%d", e_y, e_m, e_d, e_hour, e_min))
|
||||
until 1 == select(gameforge.locale.yes, gameforge.locale.no)
|
||||
|
||||
local s_time = os.time{year=s_y, month=s_m, day=s_d, hour=s_hour, min=s_min}
|
||||
local e_time = os.time{year=e_y, month=e_m, day=e_d, hour=e_hour, min=e_min}
|
||||
|
||||
-- Get gift item vnum
|
||||
local gift_vnum = input_number("gift vnum")
|
||||
|
||||
-- Print settings and confirm.
|
||||
say(os.date("start time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", s_time))
|
||||
say(os.date(" end time[ENTER] year:%Y, month:%m, day:%d hour:%H minite:%M", e_time))
|
||||
|
||||
say(string.format("gift item[ENTER] vnum : %d", gift_vnum))
|
||||
say_item_vnum(gift_vnum)
|
||||
|
||||
say(gameforge.dragon_soul_gift_mgr._050_say)
|
||||
if 2 == select(gameforge.locale.yes, gameforge.locale.no) then
|
||||
return
|
||||
end
|
||||
|
||||
-- <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> event_id<69><64> <20>ٲٸ<D9B2> <20>ȵ<EFBFBD>.
|
||||
if 0 == sel then
|
||||
local event_id = game.get_event_flag("ds_dg_id")
|
||||
game.set_event_flag("ds_dg_id", event_id + 1)
|
||||
end
|
||||
game.set_event_flag("ds_dg_st", s_time)
|
||||
game.set_event_flag("ds_dg_et", e_time)
|
||||
game.set_event_flag("ds_dg_item", gift_vnum)
|
||||
|
||||
say (gameforge.dragon_soul_gift_mgr._060_say)
|
||||
end
|
||||
end
|
||||
end
|
10
gamefiles/data/quest/dragon_soul_refine.quest
Normal file
10
gamefiles/data/quest/dragon_soul_refine.quest
Normal file
@ -0,0 +1,10 @@
|
||||
define alchemist 20001
|
||||
quest dragon_soul_refine begin
|
||||
state start begin
|
||||
when alchemist.chat.gameforge.dragon_soul_refine._010_npcChat with ds.is_qualified() != 0 begin
|
||||
say_title(mob_name(alchemist))
|
||||
say (gameforge.dragon_soul_refine._020_say)
|
||||
ds.open_refine_window()
|
||||
end
|
||||
end
|
||||
end
|
10
gamefiles/data/quest/dragon_soul_shop.quest
Normal file
10
gamefiles/data/quest/dragon_soul_shop.quest
Normal file
@ -0,0 +1,10 @@
|
||||
define alchemist 20001
|
||||
define dragon_soul_shop_vnum 13
|
||||
quest dragon_soul_shop begin
|
||||
state start begin
|
||||
when alchemist.chat.gameforge.dragon_soul._100_npcChat with ds.is_qualified() begin
|
||||
say (gameforge.dragon_soul._110_say)
|
||||
npc.open_shop(dragon_soul_shop_vnum)
|
||||
end
|
||||
end
|
||||
end
|
172
gamefiles/data/quest/energy_system.quest
Normal file
172
gamefiles/data/quest/energy_system.quest
Normal file
@ -0,0 +1,172 @@
|
||||
quest energy_system begin
|
||||
state start begin
|
||||
when alchemist.chat.gameforge.energy_system._001_npcChat begin
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._010_say)
|
||||
wait()
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._020_say)
|
||||
wait()
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._030_say)
|
||||
setstate(can_make)
|
||||
end
|
||||
end
|
||||
|
||||
state can_make begin
|
||||
function setting ()
|
||||
return
|
||||
{
|
||||
["prob_acc_table"] =
|
||||
{
|
||||
["35to50"] = {30,55,70,80,90,95,97,98,99,100},
|
||||
["51to70"] = {20,40,60,75,85,91,96,98,99,100},
|
||||
["upto70"] = {10,25,45,65,80,88,94,97,99,100}
|
||||
},
|
||||
["item_num_table"] ={0,1,2,3,4,6,8,10,12,15},
|
||||
["energy_stone"] = 51001,
|
||||
["charging_stone"] = 51002
|
||||
}
|
||||
end
|
||||
function getItemNum ( str, r )
|
||||
local setting = energy_system.setting()
|
||||
for i = 1, 10 do
|
||||
if r < setting.prob_acc_table[str][i] then
|
||||
return setting.item_num_table[i]
|
||||
end
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
when alchemist.chat.gameforge.energy_system._035_npcChat begin
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._040_say)
|
||||
wait()
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._050_say)
|
||||
wait()
|
||||
if pc.get_level() < 35 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._060_say)
|
||||
else
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._070_say)
|
||||
end
|
||||
end
|
||||
|
||||
when alchemist.take begin
|
||||
if pc.get_level() < 35 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._080_say)
|
||||
return
|
||||
end
|
||||
local item_vnum = item.vnum
|
||||
local levelLimit = item.get_level_limit(item_vnum)
|
||||
local setting = energy_system.setting()
|
||||
|
||||
if levelLimit == nil then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._090_say)
|
||||
wait()
|
||||
elseif item.get_type() == ITEM_WEAPON and item.get_sub_type() == WEAPON_ARROW then
|
||||
say_title (mob_name(20001))
|
||||
say (gameforge.energy_system._090_say)
|
||||
wait()
|
||||
elseif levelLimit < 35 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._100_say)
|
||||
else
|
||||
say_title(mob_name(20001))
|
||||
say(item_name(item_vnum))
|
||||
say(gameforge.energy_system._110_say)
|
||||
local s = select (gameforge.energy_system._120_select,gameforge.energy_system._130_select)
|
||||
if s == 1 then
|
||||
item.remove()
|
||||
local r = number(1, 100)
|
||||
local n
|
||||
if levelLimit >= 35 and levelLimit <= 50 then
|
||||
n = energy_system.getItemNum ("35to50",r)
|
||||
elseif levelLimit > 50 and levelLimit <= 70 then
|
||||
n = energy_system.getItemNum ("51to70",r)
|
||||
else
|
||||
n = energy_system.getItemNum ("upto70",r)
|
||||
end
|
||||
if (n == 0) then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._140_say)
|
||||
else
|
||||
pc.give_item2(setting.energy_stone, n)
|
||||
say_title(mob_name(20001))
|
||||
say(string.format(gameforge.energy_system._150_say,n))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when alchemist.chat.gameforge.energy_system._160_npcChat begin
|
||||
local setting = energy_system.setting()
|
||||
local need = 30
|
||||
say_title(mob_name(20001))
|
||||
say(string.format(gameforge.energy_system._170_say,need))
|
||||
wait()
|
||||
|
||||
if pc.get_level() < 35 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._060_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item(setting.energy_stone) < need then
|
||||
say_title(mob_name(20001))
|
||||
say(string.format(gameforge.energy_system._180_say,need))
|
||||
return
|
||||
else
|
||||
say_title(mob_name(20001))
|
||||
say(string.format(gameforge.energy_system._190_say, need))
|
||||
wait()
|
||||
end
|
||||
|
||||
local charge = 1000
|
||||
say_title(mob_name(20001))
|
||||
say(string.format(gameforge.energy_system._200_say, charge))
|
||||
local s = select (gameforge.energy_system._210_select,gameforge.energy_system._220_select)
|
||||
if s == 2 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._230_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.get_gold() < charge then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._240_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.count_item (setting.energy_stone) < need then
|
||||
return
|
||||
end
|
||||
|
||||
pc.change_gold(-charge)
|
||||
pc.remove_item(setting.energy_stone, need)
|
||||
|
||||
if pc.getqf("hasExperience") == 0 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._250_say)
|
||||
pc.give_item2 (setting.charging_stone, 1)
|
||||
pc.setqf("hasExperience", 1)
|
||||
return
|
||||
end
|
||||
|
||||
local r = number (1, 100)
|
||||
if r > 30 then
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._260_say)
|
||||
return
|
||||
end
|
||||
say_title(mob_name(20001))
|
||||
say(gameforge.energy_system._270_say)
|
||||
pc.give_item2(setting.charging_stone, 1)
|
||||
|
||||
end
|
||||
end
|
||||
end
|
227
gamefiles/data/quest/entry_event_map.quest
Normal file
227
gamefiles/data/quest/entry_event_map.quest
Normal file
@ -0,0 +1,227 @@
|
||||
quest entry_event_map begin
|
||||
state start begin
|
||||
|
||||
function enter_level (vnum1,vnum2)
|
||||
lv_range={}
|
||||
lv_range[1] ={15,39}
|
||||
lv_range[2] ={40,64}
|
||||
lv_range[3] ={65,84}
|
||||
lv_range[4] ={85,99}
|
||||
lv_range[5] ={100,105}
|
||||
return lv_range [vnum1][vnum2]
|
||||
end
|
||||
|
||||
function warp_to_map(modu)
|
||||
if modu == 1 then
|
||||
pc.warp(903*100, 83*100, 200)
|
||||
elseif modu == 2 then
|
||||
pc.warp(1025*100, 95*100, 200)
|
||||
else
|
||||
pc.warp(959*100, 176*100, 200)
|
||||
end
|
||||
end
|
||||
|
||||
function check_limit()
|
||||
if game.get_event_flag("event_map_login_counter") == game.get_event_flag("event_map_player_max") then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
end
|
||||
end
|
||||
|
||||
function player_dialog()
|
||||
if pc.get_map_index() == 200 then
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._020_say)
|
||||
|
||||
local sub_sel = select (gameforge.locale.yes, gameforge.locale.no)
|
||||
|
||||
if sub_sel == 2 then
|
||||
return
|
||||
end
|
||||
|
||||
warp_to_village()
|
||||
|
||||
local counter = game.get_event_flag("event_map_login_counter")
|
||||
game.set_event_flag("event_map_login_counter", counter-1)
|
||||
end
|
||||
|
||||
if game.get_event_flag("event_map_active") == 0 then
|
||||
say(locale.forked_man_say_cant)
|
||||
else
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._030_say)
|
||||
|
||||
local s = select(locale.forked_enter, locale.forked_no_enter)
|
||||
local min = game.get_event_flag("event_map_level_min")
|
||||
local max = game.get_event_flag("event_map_level_max")
|
||||
local empire = game.get_event_flag("event_map_empire")
|
||||
|
||||
if s == 1 then
|
||||
if pc.level < min or pc.level > max then
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say_reward(string.format(gameforge.entry_event_map._040_say, min, max))
|
||||
return
|
||||
end
|
||||
|
||||
if pc.get_empire() != empire and empire != 0 then
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._050_say)
|
||||
return
|
||||
end
|
||||
|
||||
if entry_event_map.check_limit() == 0 then
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._060_say)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._070_say)
|
||||
|
||||
if empire == 0 then
|
||||
entry_event_map.warp_to_map(pc.get_empire())
|
||||
else
|
||||
local modu = math.mod(pc.get_player_id(),2)
|
||||
entry_event_map.warp_to_map(modu)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function gm_exit_check()
|
||||
if pc.get_map_index() == 200 and pc.get_gm_level()== 5 then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter begin
|
||||
|
||||
if pc.get_map_index() == 200 then
|
||||
|
||||
if game.get_event_flag("event_map_active") == 0 then
|
||||
warp_to_village()
|
||||
end
|
||||
|
||||
local counter = game.get_event_flag("event_map_login_counter")
|
||||
game.set_event_flag("event_map_login_counter", counter+1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 11001.chat.gameforge.entry_event_map._080_npcChat or 11003.chat.gameforge.entry_event_map._080_npcChat or 11005.chat.gameforge.entry_event_map._080_npcChat with game.get_event_flag("event_map_active") == 1 begin
|
||||
entry_event_map.player_dialog()
|
||||
end
|
||||
|
||||
|
||||
|
||||
when 11001.chat.gameforge.entry_event_map._090_npcChat or 11003.chat.gameforge.entry_event_map._090_npcChat or 11005.chat.gameforge.entry_event_map._090_npcChat with pc.get_gm_level()== 5 begin
|
||||
local s = select(gameforge.entry_event_map._100_select, gameforge.entry_event_map._110_select, gameforge.entry_event_map._120_select, gameforge.locale.cancel)
|
||||
|
||||
if s == 3 then
|
||||
if entry_event_map.gm_exit_check() == 1 then
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._130_say)
|
||||
|
||||
-- reset all setting for this event and nobody can enter it
|
||||
game.set_event_flag("event_map_active", 0)
|
||||
game.set_event_flag("event_map_choice", 0)
|
||||
game.set_event_flag("event_map_level_min", 0)
|
||||
game.set_event_flag("event_map_level_max", 0)
|
||||
game.set_event_flag("event_map_player_max",0)
|
||||
game.set_event_flag("event_map_empire", 0)
|
||||
game.set_event_flag("event_map_login_counter",0)
|
||||
|
||||
-- teleport all out from the map
|
||||
warp_all_to_village(200, 30)
|
||||
else
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._140_say)
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
if s == 1 then
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._150_say)
|
||||
local choice = select ("1> min "..entry_event_map.enter_level(1,1).." max "..entry_event_map.enter_level(1,2),"2> min "..entry_event_map.enter_level(2,1).." max "..entry_event_map.enter_level(2,2), "3> min "..entry_event_map.enter_level(3,1).." max "..entry_event_map.enter_level(3,2), "4> min "..entry_event_map.enter_level(4,1).." max "..entry_event_map.enter_level(4,2), "5> min "..entry_event_map.enter_level(5,1).." max "..entry_event_map.enter_level(5,2), gameforge.locale.cancel)
|
||||
|
||||
if choice == 6 then
|
||||
return
|
||||
end
|
||||
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._160_say)
|
||||
local amount_choice = input_number(gameforge.entry_event_map._240_say)
|
||||
|
||||
if amount_choice > 200 or amount_choice <= 0 then
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._250_say)
|
||||
return
|
||||
end
|
||||
|
||||
local empire_names =
|
||||
{
|
||||
[0] = gameforge.priv_empire._33_array,
|
||||
[1] = gameforge.locale.empire_names_2,
|
||||
[2] = gameforge.locale.empire_names_3,
|
||||
[3] = gameforge.locale.empire_names_4,
|
||||
}
|
||||
|
||||
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._170_say)
|
||||
local kingdom_sub_set = select(empire_names[1], empire_names[2], empire_names[3], empire_names[0], gameforge.locale.cancel)
|
||||
|
||||
if kingdom_sub_set == 5 then
|
||||
return
|
||||
end
|
||||
|
||||
if kingdom_sub_set == 4 then
|
||||
kingdom_sub_set = 0
|
||||
end
|
||||
|
||||
say_title("GM: "..gameforge.entry_event_map._010_sayTitle)
|
||||
say(gameforge.entry_event_map._180_say)
|
||||
say(gameforge.entry_event_map._190_say .. " " .. entry_event_map.enter_level(choice,1).. " - " ..entry_event_map.enter_level(choice,2))
|
||||
say(gameforge.entry_event_map._200_say .. " " .. amount_choice)
|
||||
say(gameforge.entry_event_map._210_say .. " " .. empire_names[kingdom_sub_set])
|
||||
|
||||
local t = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
|
||||
if t == 2 then
|
||||
return
|
||||
end
|
||||
|
||||
game.set_event_flag("event_map_active", 1)
|
||||
game.set_event_flag("event_map_choice", choice)
|
||||
game.set_event_flag("event_map_level_min",entry_event_map.enter_level(choice,1))
|
||||
game.set_event_flag("event_map_level_max",entry_event_map.enter_level(choice,2))
|
||||
game.set_event_flag("event_map_player_max",amount_choice)
|
||||
game.set_event_flag("event_map_empire", kingdom_sub_set)
|
||||
|
||||
if kingdom_sub_set == 0 then
|
||||
notice_multiline(string.format(gameforge.entry_event_map._220_notice_all, entry_event_map.enter_level(choice,1),entry_event_map.enter_level(choice,2)),notice_all)
|
||||
else
|
||||
notice_multiline(string.format(gameforge.entry_event_map._230_notice_all, empire_names[kingdom_sub_set], entry_event_map.enter_level(choice,1),entry_event_map.enter_level(choice,2)),notice_all)
|
||||
end
|
||||
elseif s== 2 then
|
||||
|
||||
game.set_event_flag("event_map_active", 0)
|
||||
game.set_event_flag("event_map_choice", 0)
|
||||
game.set_event_flag("event_map_level_min", 0)
|
||||
game.set_event_flag("event_map_level_max", 0)
|
||||
game.set_event_flag("event_map_player_max",0)
|
||||
game.set_event_flag("event_map_empire", 0)
|
||||
game.set_event_flag("event_map_login_counter",0)
|
||||
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
end
|
452
gamefiles/data/quest/event_easter.quest
Normal file
452
gamefiles/data/quest/event_easter.quest
Normal file
@ -0,0 +1,452 @@
|
||||
quest event_easter begin
|
||||
state start begin
|
||||
function is_running()
|
||||
return (game.get_event_flag("easter_drop") > 0)
|
||||
end
|
||||
|
||||
function has_rabbit()
|
||||
return (game.get_event_flag("easter_rabbit") > 0)
|
||||
end
|
||||
|
||||
function get_settings()
|
||||
local spawnPromille = game.get_event_flag("easter_spawn_chance")
|
||||
if spawnPromille <= 0 then
|
||||
spawnPromille = 5
|
||||
end
|
||||
return {
|
||||
["eggvnums"] = {
|
||||
["first"] = 50160,
|
||||
["last"] = 50179,
|
||||
},
|
||||
["baskets"] = {
|
||||
["full"] = 50181,
|
||||
["empty"] = 50180,
|
||||
},
|
||||
["metins"] = {
|
||||
[8041] = 10,
|
||||
[8042] = 20,
|
||||
[8043] = 30,
|
||||
[8044] = 40,
|
||||
[8045] = 50,
|
||||
[8046] = 60,
|
||||
[8047] = 70,
|
||||
[8048] = 80,
|
||||
[8049] = 90,
|
||||
[8050] = 95
|
||||
},
|
||||
["max_level_difference"] = 15,
|
||||
["rabbit"] = 30129,
|
||||
["spawn"] = {
|
||||
["kill"] = 50,
|
||||
["cooldown"] = 3600,
|
||||
["promille"] = spawnPromille,
|
||||
["maps"] = {
|
||||
[1] = {
|
||||
[10] = {1, 3, 4, 69},
|
||||
[20] = {1, 3, 4, 5, 69},
|
||||
[30] = {3, 4, 5, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
},
|
||||
[2] = {
|
||||
[10] = {21, 23, 24, 69},
|
||||
[20] = {21, 23, 24, 25, 69},
|
||||
[30] = {23, 24, 25, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
|
||||
},
|
||||
[3] = {
|
||||
[10] = {41, 43, 44, 69},
|
||||
[20] = {41, 43, 44, 45, 69},
|
||||
[30] = {43, 44, 45, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function get_reward_table_for_item()
|
||||
-- for each level range there is a different reward
|
||||
local playerlevel = pc.get_level()
|
||||
if playerlevel <= 18 then
|
||||
return {
|
||||
{27002, 13},
|
||||
{27005, 13},
|
||||
{27100, 8},
|
||||
{27103, 8},
|
||||
{50721, 4},
|
||||
{30053, 9, 20},
|
||||
{30073, 9, 20},
|
||||
{30033, 9, 20},
|
||||
{30010, 9, 20},
|
||||
{30031, 9, 20},
|
||||
{30032, 9, 20}
|
||||
}
|
||||
elseif playerlevel > 18 and playerlevel <= 30 then
|
||||
return {
|
||||
{27002, 18},
|
||||
{27005, 18},
|
||||
{27100, 7},
|
||||
{27103, 7},
|
||||
{27101, 3},
|
||||
{27104, 3},
|
||||
{50721, 8},
|
||||
{50722, 8},
|
||||
{50723, 8},
|
||||
{50724, 8},
|
||||
{50300, 2, 20},
|
||||
{30196, 5, 20},
|
||||
{30090, 5, 20}
|
||||
}
|
||||
elseif playerlevel > 30 and playerlevel <= 52 then
|
||||
return {
|
||||
{27101, 8},
|
||||
{27104, 8},
|
||||
{27003, 17},
|
||||
{27006, 17},
|
||||
{27102, 3},
|
||||
{27105, 3},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30195, 4, 20},
|
||||
{30197, 4, 20},
|
||||
{30193, 3, 20}
|
||||
}
|
||||
elseif playerlevel > 53 and playerlevel <= 74 then
|
||||
return {
|
||||
{27003, 14},
|
||||
{27006, 14},
|
||||
{27102, 9},
|
||||
{27105, 9},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30198, 4, 20},
|
||||
{30199, 4, 20},
|
||||
{08005, 3},
|
||||
}
|
||||
else
|
||||
return {
|
||||
{27102, 11},
|
||||
{27105, 11},
|
||||
{50091, 15},
|
||||
{50092, 15},
|
||||
{50093, 15},
|
||||
{50094, 15},
|
||||
{50300, 4, 20},
|
||||
{50060, 6, 20},
|
||||
{08005, 4},
|
||||
{30196, 2, 20},
|
||||
{30090, 2, 20},
|
||||
{30195, 2, 20},
|
||||
{30197, 2, 20},
|
||||
{30198, 2, 20},
|
||||
{30199, 2, 20}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
function get_reward_for_basket()
|
||||
local reward_table = {
|
||||
{70102, 6},
|
||||
{27808, 12},
|
||||
{27816, 12},
|
||||
{27992, 8},
|
||||
{27993, 6},
|
||||
{27994, 4},
|
||||
{27987, 8},
|
||||
{72018, 3},
|
||||
{71113, 4},
|
||||
{71004, 3},
|
||||
{71012, 3},
|
||||
{71083, 3},
|
||||
{70035, 4},
|
||||
{70038, 2},
|
||||
{71029, 6},
|
||||
{71030, 6},
|
||||
{71094, 5},
|
||||
{25040, 5}
|
||||
}
|
||||
return get_random_vnum_from_table(reward_table)
|
||||
end
|
||||
|
||||
function get_reward_amount_for_vnum(reward_table, vnum_to_search)
|
||||
local amount_needed = 1
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemVnum = item[1]
|
||||
if itemVnum == vnum_to_search then
|
||||
if table.getn(item) > 2 then
|
||||
amount_needed = item[3]
|
||||
else
|
||||
amount_needed = 1
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
)
|
||||
return amount_needed
|
||||
end
|
||||
|
||||
function get_number_of_eggs()
|
||||
local settings = event_easter.get_settings()
|
||||
return count_item_range(settings.eggvnums.first, settings.eggvnums.last)
|
||||
end
|
||||
|
||||
function get_random_reward_vnum(reward_table)
|
||||
local temp_table = {}
|
||||
local easterEggCount = event_easter.get_number_of_eggs()
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemProbability = item[2]
|
||||
local itemVnum = item[1]
|
||||
local meetsAmountLimit = true
|
||||
-- check if we need more than one easter egg
|
||||
if table.getn(item) > 2 then
|
||||
if easterEggCount < item[3] then
|
||||
-- player does not have enough eggs for this item
|
||||
meetsAmountLimit = false
|
||||
end
|
||||
end
|
||||
if meetsAmountLimit then
|
||||
for amount = 1, itemProbability do
|
||||
table.insert(temp_table, itemVnum)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
return temp_table[math.random(table.getn(temp_table))]
|
||||
end
|
||||
|
||||
function spawn_metin(level, empire)
|
||||
if pc.is_gm() then
|
||||
return
|
||||
end
|
||||
|
||||
local settings = event_easter.get_settings()
|
||||
if level >= 10 and level < 95 then
|
||||
level = math.floor(level / 10) * 10
|
||||
elseif level >= 95 then
|
||||
level = 95
|
||||
else
|
||||
return
|
||||
end
|
||||
local randomMap = math.random(table.getn(settings.spawn.maps[empire][level]))
|
||||
local mapNumber = settings.spawn.maps[empire][level][randomMap]
|
||||
regen_in_map(mapNumber, "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
|
||||
|
||||
-- We have show a notice when logging is enabled (1)
|
||||
local logging = game.get_event_flag("easter_logging")
|
||||
if logging == 1 then
|
||||
notice(string.format("metin spawn in map %d, level: %d", mapNumber, level))
|
||||
end
|
||||
end
|
||||
|
||||
function spawn_metin_at_login()
|
||||
local settings = event_easter.get_settings()
|
||||
|
||||
local timestamp = get_global_time()
|
||||
local cooldownRemaining = pc.getqf("cooldown") + settings.spawn.cooldown - timestamp
|
||||
if cooldownRemaining <= 0 then
|
||||
pc.setqf("cooldown", timestamp)
|
||||
if cooldownRemaining > -43200 then
|
||||
if math.random(1000) <= settings.spawn.promille then
|
||||
event_easter.spawn_metin(pc.get_level(), pc.get_empire())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function metin_killed(vnum)
|
||||
local settings = event_easter.get_settings()
|
||||
local level = settings.metins[vnum]
|
||||
event_easter.spawn_metin_at_login()
|
||||
if level < pc.get_level() - settings.max_level_difference then
|
||||
-- don't drop an egg when the player who killed the easter egg is more than 15 levels higher
|
||||
event_easter.spawn_metin(level, pc.get_empire())
|
||||
else
|
||||
game.drop_item_with_ownership(settings.baskets.full, 1) -- full basket
|
||||
if math.random(1, 100) <= settings.spawn.kill then
|
||||
event_easter.spawn_metin(level, pc.get_empire())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter with event_easter.has_rabbit() begin
|
||||
-- spawn rabbit if he is not there
|
||||
local settings = event_easter.get_settings()
|
||||
local mapIndex = pc.get_map_index()
|
||||
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
|
||||
if find_npc_by_vnum(settings.rabbit) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(settings.rabbit, 591, 472, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(settings.rabbit, 517, 742, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(settings.rabbit, 306, 828, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter with event_easter.is_running() begin
|
||||
|
||||
event_easter.spawn_metin_at_login()
|
||||
end
|
||||
|
||||
-- "Was machst du hier?"
|
||||
--when 30129.chat.gameforge.event_easter._010_chat with event_easter.get_number_of_eggs() == 0 begin
|
||||
when 30129.chat.gameforge.main_quest_lv2._10_npcChat with event_easter.get_number_of_eggs() == 0 begin
|
||||
event_easter.spawn_metin_at_login()
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._030_say) -- "Ich verstecke Ostereier. Wenn du welche findest und mir zur<75>ck bringst, belohne ich dich toll!"
|
||||
say(gameforge.event_easter._035_say)
|
||||
if not event_easter.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end
|
||||
|
||||
-- "Ich hab Eier gefunden!"
|
||||
when 30129.chat.gameforge.event_easter._040_chat with event_easter.get_number_of_eggs() > 0 begin
|
||||
event_easter.spawn_metin_at_login()
|
||||
local settings = event_easter.get_settings()
|
||||
|
||||
local reward_table = event_easter.get_reward_table_for_item()
|
||||
local amount_to_remove = 0
|
||||
local amount_to_give = 0
|
||||
local vnum_to_give = 0
|
||||
local number_of_eggs = event_easter.get_number_of_eggs()
|
||||
local wants_items = 2
|
||||
while wants_items == 2 do
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
vnum_to_give = event_easter.get_random_reward_vnum(reward_table)
|
||||
local amount_needed = event_easter.get_reward_amount_for_vnum(reward_table, vnum_to_give)
|
||||
if amount_needed == 20 then
|
||||
amount_to_remove = 20
|
||||
amount_to_give = 1
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"
|
||||
say_item_vnum(vnum_to_give)
|
||||
say(string.format(gameforge.event_easter._065_say, amount_to_remove)) -- "Daf<61>r musst du mir %d Eier geben! M<>chtest du das tun?"
|
||||
say("")
|
||||
-- "Okay, das nehme ich!" / "Nein, das will ich nicht!"
|
||||
wants_items = select(gameforge.event_easter._070_select, gameforge.event_easter._071_select)
|
||||
else
|
||||
if number_of_eggs > 20 then
|
||||
amount_to_remove = 20
|
||||
else
|
||||
amount_to_remove = number_of_eggs
|
||||
end
|
||||
if vnum_to_give < 27200 then
|
||||
amount_to_give = amount_to_remove * 3
|
||||
else
|
||||
amount_to_give = amount_to_remove * 5
|
||||
end
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"
|
||||
say_item_vnum(vnum_to_give)
|
||||
say(string.format(gameforge.event_easter._060_say, amount_to_remove)) -- "Daf<61>r musst du mir %d Eier geben!"
|
||||
wants_items = 1
|
||||
end
|
||||
|
||||
end
|
||||
if (remove_item_range(amount_to_remove, settings.eggvnums.first, settings.eggvnums.last)) then
|
||||
pc.give_item2(vnum_to_give, amount_to_give)
|
||||
end
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._080_say) -- "Danke f<>r die Eier, ich hoffe du hast Spa<70> mit dem was du bekommen hast"
|
||||
|
||||
if not event_easter.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end
|
||||
|
||||
when 8041.kill begin
|
||||
event_easter.metin_killed(8041)
|
||||
end
|
||||
when 8042.kill begin
|
||||
event_easter.metin_killed(8042)
|
||||
end
|
||||
when 8043.kill begin
|
||||
event_easter.metin_killed(8043)
|
||||
end
|
||||
when 8044.kill begin
|
||||
event_easter.metin_killed(8044)
|
||||
end
|
||||
when 8045.kill begin
|
||||
event_easter.metin_killed(8045)
|
||||
end
|
||||
when 8046.kill begin
|
||||
event_easter.metin_killed(8046)
|
||||
end
|
||||
when 8047.kill begin
|
||||
event_easter.metin_killed(8047)
|
||||
end
|
||||
when 8048.kill begin
|
||||
event_easter.metin_killed(8048)
|
||||
end
|
||||
when 8049.kill begin
|
||||
event_easter.metin_killed(8049)
|
||||
end
|
||||
when 8050.kill begin
|
||||
event_easter.metin_killed(8050)
|
||||
end
|
||||
|
||||
-- empty basket, not the right vnum right now
|
||||
when 50180.use begin
|
||||
event_easter.spawn_metin_at_login()
|
||||
if event_easter.get_number_of_eggs() > 0 then
|
||||
local settings = event_easter.get_settings()
|
||||
-- remove one easter egg and the empty basket and give player a full basket
|
||||
if (remove_item_range(1, settings.eggvnums.first, settings.eggvnums.last)) then
|
||||
pc.remove_item(settings.baskets.empty)
|
||||
pc.give_item2(settings.baskets.full, 1)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.event_easter._090_sayTitle) -- "Leerer Korb: "
|
||||
say(gameforge.event_easter._100_say) -- "Du hast kein Osterei, das du in den Korb legen k<>nntest."
|
||||
end
|
||||
end
|
||||
|
||||
-- full basket, not the right
|
||||
when 50181.use begin
|
||||
event_easter.spawn_metin_at_login()
|
||||
local settings = event_easter.get_settings()
|
||||
pc.remove_item(settings.baskets.full)
|
||||
pc.give_item2(event_easter.get_reward_for_basket(), 1)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
398
gamefiles/data/quest/event_easter_2012.quest
Normal file
398
gamefiles/data/quest/event_easter_2012.quest
Normal file
@ -0,0 +1,398 @@
|
||||
quest event_easter_2012 begin
|
||||
state start begin
|
||||
function is_running()
|
||||
return (game.get_event_flag("easter_drop") > 0)
|
||||
end
|
||||
function has_rabbit()
|
||||
return (game.get_event_flag("easter_rabbit") > 0)
|
||||
end
|
||||
function get_settings()
|
||||
local spawnPromille = game.get_event_flag("easter_spawn_chance")
|
||||
if spawnPromille <= 0 then
|
||||
spawnPromille = 5
|
||||
end
|
||||
local magicEggPercent = game.get_event_flag("easter_magicegg_chance")
|
||||
if magicEggPercent <= 0 then
|
||||
magicEggPercent = 5
|
||||
end
|
||||
return {
|
||||
["eggvnums"] = {
|
||||
["first"] = 50160,
|
||||
["last"] = 50179,
|
||||
},
|
||||
["magicegg"] = {
|
||||
["vnum"] = 71150,
|
||||
["pct"] = magicEggPercent,
|
||||
},
|
||||
["metins"] = {
|
||||
[8041] = 10,
|
||||
[8042] = 20,
|
||||
[8043] = 30,
|
||||
[8044] = 40,
|
||||
[8045] = 50,
|
||||
[8046] = 60,
|
||||
[8047] = 70,
|
||||
[8048] = 80,
|
||||
[8049] = 90,
|
||||
[8050] = 95
|
||||
},
|
||||
["max_level_difference"] = 15,
|
||||
["rabbit"] = 30129,
|
||||
["spawn"] = {
|
||||
["kill"] = 100,
|
||||
["cooldown"] = 60,
|
||||
["promille"] = spawnPromille,
|
||||
["maps"] = {
|
||||
[1] = {
|
||||
[10] = {1, 3, 4, 69},
|
||||
[20] = {1, 3, 4, 5, 69},
|
||||
[30] = {3, 4, 5, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
},
|
||||
[2] = {
|
||||
[10] = {21, 23, 24, 69},
|
||||
[20] = {21, 23, 24, 25, 69},
|
||||
[30] = {23, 24, 25, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
|
||||
},
|
||||
[3] = {
|
||||
[10] = {41, 43, 44, 69},
|
||||
[20] = {41, 43, 44, 45, 69},
|
||||
[30] = {43, 44, 45, 63, 64, 108},
|
||||
[40] = {63, 64, 108, 65},
|
||||
[50] = {63, 64, 108, 65, 61, 107, 109},
|
||||
[60] = {65, 61, 107, 109, 62, 67, 69, 71, 70},
|
||||
[70] = {65, 61, 62, 67, 69, 71, 70, 68, 72, 73},
|
||||
[80] = {67, 69, 70, 68, 72},
|
||||
[90] = {70, 68, 72, 73},
|
||||
[95] = {70, 68, 73},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
function get_reward_table_for_item()
|
||||
-- for each level range there is a different reward
|
||||
local playerlevel = pc.get_level()
|
||||
if playerlevel <= 18 then
|
||||
return {
|
||||
{27002, 13},
|
||||
{27005, 13},
|
||||
{27100, 8},
|
||||
{27103, 8},
|
||||
{50721, 4},
|
||||
{30053, 9, 20},
|
||||
{30073, 9, 20},
|
||||
{30033, 9, 20},
|
||||
{30010, 9, 20},
|
||||
{30031, 9, 20},
|
||||
{30032, 9, 20}
|
||||
}
|
||||
elseif playerlevel > 18 and playerlevel <= 30 then
|
||||
return {
|
||||
{27002, 18},
|
||||
{27005, 18},
|
||||
{27100, 7},
|
||||
{27103, 7},
|
||||
{27101, 3},
|
||||
{27104, 3},
|
||||
{50721, 8},
|
||||
{50722, 8},
|
||||
{50723, 8},
|
||||
{50724, 8},
|
||||
{50300, 2, 20},
|
||||
{30196, 5, 20},
|
||||
{30090, 5, 20}
|
||||
}
|
||||
elseif playerlevel > 30 and playerlevel <= 52 then
|
||||
return {
|
||||
{27101, 8},
|
||||
{27104, 8},
|
||||
{27003, 17},
|
||||
{27006, 17},
|
||||
{27102, 3},
|
||||
{27105, 3},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30195, 4, 20},
|
||||
{30197, 4, 20},
|
||||
{30193, 3, 20}
|
||||
}
|
||||
elseif playerlevel > 52 and playerlevel <= 74 then
|
||||
return {
|
||||
{27003, 14},
|
||||
{27006, 14},
|
||||
{27102, 9},
|
||||
{27105, 9},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30198, 4, 20},
|
||||
{30199, 4, 20},
|
||||
{08005, 3},
|
||||
}
|
||||
else
|
||||
return {
|
||||
{27102, 11},
|
||||
{27105, 11},
|
||||
{50091, 15},
|
||||
{50092, 15},
|
||||
{50093, 15},
|
||||
{50094, 15},
|
||||
{50300, 4, 20},
|
||||
{50060, 6, 20},
|
||||
{08005, 4},
|
||||
{30196, 2, 20},
|
||||
{30090, 2, 20},
|
||||
{30195, 2, 20},
|
||||
{30197, 2, 20},
|
||||
{30198, 2, 20},
|
||||
{30199, 2, 20}
|
||||
}
|
||||
end
|
||||
end
|
||||
function get_reward_amount_for_vnum(reward_table, vnum_to_search)
|
||||
local amount_needed = 1
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemVnum = item[1]
|
||||
if itemVnum == vnum_to_search then
|
||||
if table.getn(item) > 2 then
|
||||
amount_needed = item[3]
|
||||
else
|
||||
amount_needed = 1
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
)
|
||||
return amount_needed
|
||||
end
|
||||
function get_number_of_eggs()
|
||||
local settings = event_easter_2012.get_settings()
|
||||
return count_item_range(settings.eggvnums.first, settings.eggvnums.last)
|
||||
end
|
||||
function get_random_reward_vnum(reward_table)
|
||||
local temp_table = {}
|
||||
local easterEggCount = event_easter_2012.get_number_of_eggs()
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemProbability = item[2]
|
||||
local itemVnum = item[1]
|
||||
local meetsAmountLimit = true
|
||||
-- check if we need more than one easter egg
|
||||
if table.getn(item) > 2 then
|
||||
if easterEggCount < item[3] then
|
||||
-- player does not have enough eggs for this item
|
||||
meetsAmountLimit = false
|
||||
end
|
||||
end
|
||||
if meetsAmountLimit then
|
||||
for amount = 1, itemProbability do
|
||||
table.insert(temp_table, itemVnum)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
return temp_table[math.random(table.getn(temp_table))]
|
||||
end
|
||||
function spawn_metin(level, empire)
|
||||
--if pc.is_gm() then
|
||||
-- return
|
||||
--end
|
||||
|
||||
local settings = event_easter_2012.get_settings()
|
||||
if level >= 10 and level < 95 then
|
||||
level = math.floor(level / 10) * 10
|
||||
elseif level >= 95 then
|
||||
level = 95
|
||||
else
|
||||
return
|
||||
end
|
||||
local randomMap = math.random(table.getn(settings.spawn.maps[empire][level]))
|
||||
local mapNumber = settings.spawn.maps[empire][level][randomMap]
|
||||
regen_in_map(mapNumber, "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
|
||||
|
||||
-- We have show a notice when logging is enabled (1)
|
||||
local logging = game.get_event_flag("easter_logging")
|
||||
if logging == 1 then
|
||||
notice(string.format("metin spawn in map %d, level: %d", mapNumber, level))
|
||||
end
|
||||
end
|
||||
function spawn_metin_at_login()
|
||||
local settings = event_easter_2012.get_settings()
|
||||
|
||||
local timestamp = get_global_time()
|
||||
local cooldownRemaining = pc.getqf("cooldown") + settings.spawn.cooldown - timestamp
|
||||
if cooldownRemaining <= 0 then
|
||||
pc.setqf("cooldown", timestamp)
|
||||
if cooldownRemaining > -43200 then
|
||||
if math.random(1000) <= settings.spawn.promille then
|
||||
event_easter_2012.spawn_metin(pc.get_level(), pc.get_empire())
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
function metin_killed(vnum)
|
||||
local settings = event_easter_2012.get_settings()
|
||||
local level = settings.metins[vnum]
|
||||
event_easter_2012.spawn_metin_at_login()
|
||||
if level < pc.get_level() - settings.max_level_difference then
|
||||
-- don't drop an egg when the player who killed the easter egg is more than 15 levels higher
|
||||
event_easter_2012.spawn_metin(level, pc.get_empire())
|
||||
else
|
||||
local eggVnum = math.random(50160, 50179)
|
||||
game.drop_item_with_ownership(eggVnum, 1)
|
||||
if math.random(1, 100) <= settings.magicegg.pct then
|
||||
game.drop_item_with_ownership(settings.magicegg.vnum, 1)
|
||||
end
|
||||
if math.random(1, 100) <= settings.spawn.kill then
|
||||
event_easter_2012.spawn_metin(level, pc.get_empire())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter with event_easter_2012.has_rabbit() begin
|
||||
-- spawn rabbit if he is not there
|
||||
local settings = event_easter_2012.get_settings()
|
||||
local mapIndex = pc.get_map_index()
|
||||
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
|
||||
if find_npc_by_vnum(settings.rabbit) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(settings.rabbit, 591, 472, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(settings.rabbit, 517, 742, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(settings.rabbit, 306, 828, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter with event_easter_2012.is_running() begin
|
||||
|
||||
event_easter_2012.spawn_metin_at_login()
|
||||
end
|
||||
|
||||
-- "Was machst du hier?"
|
||||
|
||||
when 30129.chat.gameforge.main_quest_lv2._10_npcChat with event_easter_2012.get_number_of_eggs() == 0 begin
|
||||
event_easter_2012.spawn_metin_at_login()
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._030_say) -- "Ich verstecke Ostereier. Wenn du welche findest und mir zur<75>ck bringst, belohne ich dich toll!"
|
||||
say(gameforge.event_easter._035_say)
|
||||
if not event_easter_2012.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
|
||||
when 30129.chat.gameforge.event_easter._040_chat with event_easter_2012.get_number_of_eggs() > 0 begin
|
||||
event_easter_2012.spawn_metin_at_login()
|
||||
local settings = event_easter_2012.get_settings()
|
||||
local reward_table = event_easter_2012.get_reward_table_for_item()
|
||||
local amount_to_remove = 0
|
||||
local amount_to_give = 0
|
||||
local vnum_to_give = 0
|
||||
local number_of_eggs = event_easter_2012.get_number_of_eggs()
|
||||
local wants_items = 2
|
||||
while wants_items == 2 do
|
||||
vnum_to_give = event_easter_2012.get_random_reward_vnum(reward_table)
|
||||
local amount_needed = event_easter_2012.get_reward_amount_for_vnum(reward_table, vnum_to_give)
|
||||
if amount_needed == 20 then
|
||||
amount_to_remove = 20
|
||||
amount_to_give = 1
|
||||
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"
|
||||
say_item_vnum(vnum_to_give)
|
||||
say(string.format(gameforge.event_easter._065_say, amount_to_remove)) -- "Daf<61>r musst du mir %d Eier geben! M<>chtest du das tun?"
|
||||
else
|
||||
if number_of_eggs > 20 then
|
||||
amount_to_remove = 20
|
||||
else
|
||||
amount_to_remove = number_of_eggs
|
||||
end
|
||||
if vnum_to_give < 27200 then
|
||||
amount_to_give = amount_to_remove * 3
|
||||
else
|
||||
amount_to_give = amount_to_remove * 5
|
||||
end
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"a
|
||||
say_item_vnum(vnum_to_give)
|
||||
say(string.format(gameforge.event_easter._065_say, amount_to_remove)) -- "Daf<61>r musst du mir %d Eier geben! M<>chtest du das tun?"
|
||||
end
|
||||
wants_items = 1
|
||||
end
|
||||
|
||||
if (remove_item_range(amount_to_remove, settings.eggvnums.first, settings.eggvnums.last)) then
|
||||
pc.give_item2(vnum_to_give, amount_to_give)
|
||||
end
|
||||
wait()
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._080_say) -- "Danke f<>r die Eier, ich hoffe du hast Spa<70> mit dem was du bekommen hast"
|
||||
if not event_easter_2012.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
when 8041.kill begin
|
||||
event_easter_2012.metin_killed(8041)
|
||||
end
|
||||
when 8042.kill begin
|
||||
event_easter_2012.metin_killed(8042)
|
||||
end
|
||||
when 8043.kill begin
|
||||
event_easter_2012.metin_killed(8043)
|
||||
end
|
||||
when 8044.kill begin
|
||||
event_easter_2012.metin_killed(8044)
|
||||
end
|
||||
when 8045.kill begin
|
||||
event_easter_2012.metin_killed(8045)
|
||||
end
|
||||
when 8046.kill begin
|
||||
event_easter_2012.metin_killed(8046)
|
||||
end
|
||||
when 8047.kill begin
|
||||
event_easter_2012.metin_killed(8047)
|
||||
end
|
||||
when 8048.kill begin
|
||||
event_easter_2012.metin_killed(8048)
|
||||
end
|
||||
when 8049.kill begin
|
||||
event_easter_2012.metin_killed(8049)
|
||||
end
|
||||
when 8050.kill begin
|
||||
event_easter_2012.metin_killed(8050)
|
||||
end
|
||||
|
||||
end --state
|
||||
end --quest
|
381
gamefiles/data/quest/event_easter_2013.quest
Normal file
381
gamefiles/data/quest/event_easter_2013.quest
Normal file
@ -0,0 +1,381 @@
|
||||
|
||||
quest event_easter_2013 begin
|
||||
state start begin
|
||||
-- 2013 --
|
||||
function spawn_metin(map_index)
|
||||
local settings = event_easter_2013.get_settings()
|
||||
local level_table = settings.spawn.maps[map_index]
|
||||
if level_table == nil then
|
||||
return
|
||||
end
|
||||
table.foreach(level_table,
|
||||
function(index, level)
|
||||
for i=0, 5 do
|
||||
regen_in_map(map_index, "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
|
||||
end
|
||||
end
|
||||
)
|
||||
mob.spawn(20352, 1, 1, 1, 1, 1)
|
||||
end
|
||||
function metin_killed(vnum)
|
||||
local settings = event_easter_2013.get_settings()
|
||||
local level = settings.metins[vnum]
|
||||
|
||||
regen_in_map(pc.get_map_index(), "locale/_master/map/easter/metin_regen_level" .. level .. ".txt")
|
||||
if level < pc.get_level() - settings.max_level_difference then
|
||||
return
|
||||
else
|
||||
local eggVnum = math.random(50160, 50179)
|
||||
game.drop_item_with_ownership(eggVnum, 1)
|
||||
if math.random(1, 100) <= settings.magicegg.pct then
|
||||
game.drop_item_with_ownership(settings.magicegg.vnum, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- 2012 --
|
||||
function is_running()
|
||||
return (game.get_event_flag("easter_drop") > 0)
|
||||
end
|
||||
function has_rabbit()
|
||||
return (game.get_event_flag("easter_rabbit") > 0)
|
||||
end
|
||||
function get_settings()
|
||||
local spawnPromille = game.get_event_flag("easter_spawn_chance")
|
||||
if spawnPromille <= 0 then
|
||||
spawnPromille = 5
|
||||
end
|
||||
local magicEggPercent = game.get_event_flag("easter_magicegg_chance")
|
||||
if magicEggPercent <= 0 then
|
||||
magicEggPercent = 5
|
||||
end
|
||||
return {
|
||||
["eggvnums"] = {
|
||||
["first"] = 50160,
|
||||
["last"] = 50179,
|
||||
},
|
||||
["baskets"] = {
|
||||
["full"] = 50181,
|
||||
["empty"] = 50180,
|
||||
},
|
||||
["magicegg"] = {
|
||||
["vnum"] = 71150,
|
||||
["pct"] = magicEggPercent,
|
||||
},
|
||||
["metins"] = {
|
||||
[8041] = 10,
|
||||
[8042] = 20,
|
||||
[8043] = 30,
|
||||
[8044] = 40,
|
||||
[8045] = 50,
|
||||
[8046] = 60,
|
||||
[8047] = 70,
|
||||
[8048] = 80,
|
||||
[8049] = 90,
|
||||
[8050] = 95
|
||||
},
|
||||
["max_level_difference"] = 15,
|
||||
["rabbit"] = 30129,
|
||||
["spawn"] = {
|
||||
["kill"] = 100,
|
||||
["cooldown"] = 60,
|
||||
["promille"] = spawnPromille,
|
||||
["maps"] = {
|
||||
[1] = {10, 20},
|
||||
[3] = {20, 30},
|
||||
[21] = {10, 20},
|
||||
[23] = {20, 30},
|
||||
[41] = {10, 20},
|
||||
[43] = {20, 30},
|
||||
[61] = {50, 60},
|
||||
[62] = {50, 60},
|
||||
[63] = {40, 50},
|
||||
[64] = {30, 40},
|
||||
[65] = {40, 50},
|
||||
[67] = {60, 70},
|
||||
[68] = {70, 80},
|
||||
[69] = {60, 70},
|
||||
[70] = {70, 80},
|
||||
[301] = {90, 95},
|
||||
[302] = {90, 95},
|
||||
[303] = {90, 95},
|
||||
[304] = {90, 95},
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
function get_reward_table_for_item()
|
||||
-- for each level range there is a different reward
|
||||
local playerlevel = pc.get_level()
|
||||
if playerlevel <= 18 then
|
||||
return {
|
||||
{27002, 13},
|
||||
{27005, 13},
|
||||
{27100, 8},
|
||||
{27103, 8},
|
||||
{50721, 4},
|
||||
{30053, 9, 20},
|
||||
{30073, 9, 20},
|
||||
{30033, 9, 20},
|
||||
{30010, 9, 20},
|
||||
{30031, 9, 20},
|
||||
{30032, 9, 20}
|
||||
}
|
||||
elseif playerlevel > 18 and playerlevel <= 30 then
|
||||
return {
|
||||
{27002, 18},
|
||||
{27005, 18},
|
||||
{27100, 7},
|
||||
{27103, 7},
|
||||
{27101, 3},
|
||||
{27104, 3},
|
||||
{50721, 8},
|
||||
{50722, 8},
|
||||
{50723, 8},
|
||||
{50724, 8},
|
||||
{50300, 2, 20},
|
||||
{30196, 5, 20},
|
||||
{30090, 5, 20}
|
||||
}
|
||||
elseif playerlevel > 30 and playerlevel <= 52 then
|
||||
return {
|
||||
{27101, 8},
|
||||
{27104, 8},
|
||||
{27003, 17},
|
||||
{27006, 17},
|
||||
{27102, 3},
|
||||
{27105, 3},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30195, 4, 20},
|
||||
{30197, 4, 20},
|
||||
{30193, 3, 20}
|
||||
}
|
||||
elseif playerlevel > 52 and playerlevel <= 74 then
|
||||
return {
|
||||
{27003, 14},
|
||||
{27006, 14},
|
||||
{27102, 9},
|
||||
{27105, 9},
|
||||
{50721, 5},
|
||||
{50722, 5},
|
||||
{50723, 5},
|
||||
{50724, 5},
|
||||
{50725, 5},
|
||||
{50726, 5},
|
||||
{50727, 5},
|
||||
{50728, 5},
|
||||
{50300, 1, 20},
|
||||
{30198, 4, 20},
|
||||
{30199, 4, 20},
|
||||
{08005, 3},
|
||||
}
|
||||
else
|
||||
return {
|
||||
{27102, 11},
|
||||
{27105, 11},
|
||||
{50091, 15},
|
||||
{50092, 15},
|
||||
{50093, 15},
|
||||
{50094, 15},
|
||||
{50300, 4, 20},
|
||||
{50060, 6, 20},
|
||||
{08005, 4},
|
||||
{30196, 2, 20},
|
||||
{30090, 2, 20},
|
||||
{30195, 2, 20},
|
||||
{30197, 2, 20},
|
||||
{30198, 2, 20},
|
||||
{30199, 2, 20}
|
||||
}
|
||||
end
|
||||
end
|
||||
function get_reward_amount_for_vnum(reward_table, vnum_to_search)
|
||||
local amount_needed = 1
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemVnum = item[1]
|
||||
if itemVnum == vnum_to_search then
|
||||
if table.getn(item) > 2 then
|
||||
amount_needed = item[3]
|
||||
else
|
||||
amount_needed = 1
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
)
|
||||
return amount_needed
|
||||
end
|
||||
function get_number_of_eggs()
|
||||
local settings = event_easter_2013.get_settings()
|
||||
return count_item_range(settings.eggvnums.first, settings.eggvnums.last)
|
||||
end
|
||||
function get_random_reward_vnum(reward_table)
|
||||
local temp_table = {}
|
||||
local easterEggCount = event_easter_2013.get_number_of_eggs()
|
||||
table.foreachi(reward_table,
|
||||
function(index, item)
|
||||
local itemProbability = item[2]
|
||||
local itemVnum = item[1]
|
||||
local meetsAmountLimit = true
|
||||
-- check if we need more than one easter egg
|
||||
if table.getn(item) > 2 then
|
||||
if easterEggCount < item[3] then
|
||||
-- player does not have enough eggs for this item
|
||||
meetsAmountLimit = false
|
||||
end
|
||||
end
|
||||
if meetsAmountLimit then
|
||||
for amount = 1, itemProbability do
|
||||
table.insert(temp_table, itemVnum)
|
||||
end
|
||||
end
|
||||
end
|
||||
)
|
||||
return temp_table[math.random(table.getn(temp_table))]
|
||||
end
|
||||
|
||||
|
||||
when login or enter with event_easter_2013.has_rabbit() begin
|
||||
-- spawn rabbit if he is not there
|
||||
local settings = event_easter_2013.get_settings()
|
||||
local mapIndex = pc.get_map_index()
|
||||
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
|
||||
if find_npc_by_vnum(settings.rabbit) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(settings.rabbit, 591, 472, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(settings.rabbit, 517, 742, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(settings.rabbit, 306, 828, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
if find_npc_by_vnum(20352) == 0 then
|
||||
event_easter_2013.spawn_metin(pc.get_map_index())
|
||||
end
|
||||
end
|
||||
|
||||
-- 2013 --
|
||||
-- when login or enter with event_easter_2013.is_running() begin
|
||||
-- if is_test_server() then
|
||||
-- notice("test1")
|
||||
-- end
|
||||
-- if find_npc_by_vnum(20352) == 0 then
|
||||
-- event_easter_2013.spawn_metin(pc.get_map_index())
|
||||
-- if is_test_server() then
|
||||
-- notice("test2")
|
||||
-- end
|
||||
-- end
|
||||
-- end
|
||||
|
||||
-- "Was machst du hier?"
|
||||
when 30129.chat.gameforge.main_quest_lv2._10_npcChat with event_easter_2013.get_number_of_eggs() == 0 begin
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._030_say) -- "Ich verstecke Ostereier. Wenn du welche findest und mir zur?k bringst, belohne ich dich toll!"
|
||||
say(gameforge.event_easter._035_say)
|
||||
if not event_easter_2013.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
|
||||
when 30129.chat.gameforge.event_easter._040_chat with event_easter_2013.get_number_of_eggs() > 0 begin
|
||||
local settings = event_easter_2013.get_settings()
|
||||
local reward_table = event_easter_2013.get_reward_table_for_item()
|
||||
local amount_to_remove = 0
|
||||
local amount_to_give = 0
|
||||
local vnum_to_give = 0
|
||||
local number_of_eggs = event_easter_2013.get_number_of_eggs()
|
||||
local wants_items = 2
|
||||
while wants_items == 2 do
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
vnum_to_give = event_easter_2013.get_random_reward_vnum(reward_table)
|
||||
local amount_needed = event_easter_2013.get_reward_amount_for_vnum(reward_table, vnum_to_give)
|
||||
if amount_needed == 20 then
|
||||
amount_to_remove = 20
|
||||
amount_to_give = 1
|
||||
say(gameforge.event_easter._060_say)
|
||||
say(string.format(gameforge.event_easter._065_say, amount_to_remove)) -- "Daf? musst du mir %d Eier geben! M?htest du das tun?"
|
||||
|
||||
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give)) -- "Ich gebe dir %d hiervon:"
|
||||
say_item_vnum(vnum_to_give)
|
||||
|
||||
|
||||
say(gameforge.event_easter._100_say)
|
||||
else
|
||||
if number_of_eggs > 20 then
|
||||
amount_to_remove = 20
|
||||
else
|
||||
amount_to_remove = number_of_eggs
|
||||
end
|
||||
if vnum_to_give < 27200 then
|
||||
amount_to_give = amount_to_remove * 3
|
||||
else
|
||||
amount_to_give = amount_to_remove * 5
|
||||
end
|
||||
say(gameforge.event_easter._060_say)
|
||||
say(string.format(gameforge.event_easter._055_say, event_easter_2013.get_number_of_eggs()) )
|
||||
|
||||
say(string.format(gameforge.event_easter._050_say, amount_to_give))
|
||||
say_item_vnum(vnum_to_give)
|
||||
|
||||
|
||||
say(gameforge.event_easter._100_say)
|
||||
end
|
||||
end
|
||||
|
||||
if (remove_item_range(amount_to_remove, settings.eggvnums.first, settings.eggvnums.last)) then
|
||||
pc.give_item2(vnum_to_give, amount_to_give)
|
||||
end
|
||||
say_title(gameforge.event_easter._020_sayTitle) -- "Osterhase: "
|
||||
say(gameforge.event_easter._080_say) -- "Danke f? die Eier, ich hoffe du hast Spa?mit dem was du bekommen hast"
|
||||
say("")
|
||||
if not event_easter_2013.has_rabbit() then
|
||||
-- purge the rabbit if the event has finished
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
when 8041.kill begin
|
||||
event_easter_2013.metin_killed(8041)
|
||||
end
|
||||
when 8042.kill begin
|
||||
event_easter_2013.metin_killed(8042)
|
||||
end
|
||||
when 8043.kill begin
|
||||
event_easter_2013.metin_killed(8043)
|
||||
end
|
||||
when 8044.kill begin
|
||||
event_easter_2013.metin_killed(8044)
|
||||
end
|
||||
when 8045.kill begin
|
||||
event_easter_2013.metin_killed(8045)
|
||||
end
|
||||
when 8046.kill begin
|
||||
event_easter_2013.metin_killed(8046)
|
||||
end
|
||||
when 8047.kill begin
|
||||
event_easter_2013.metin_killed(8047)
|
||||
end
|
||||
when 8048.kill begin
|
||||
event_easter_2013.metin_killed(8048)
|
||||
end
|
||||
when 8049.kill begin
|
||||
event_easter_2013.metin_killed(8049)
|
||||
end
|
||||
when 8050.kill begin
|
||||
event_easter_2013.metin_killed(8050)
|
||||
end
|
||||
|
||||
end --state
|
||||
end --quest
|
119
gamefiles/data/quest/event_flame_dungeon_open.quest
Normal file
119
gamefiles/data/quest/event_flame_dungeon_open.quest
Normal file
@ -0,0 +1,119 @@
|
||||
define EVENT_NPC 20381
|
||||
define TELEPORT_ITEM 71173
|
||||
define TELEPORT_ITEM_CNT 1
|
||||
define PASS_ITEM 71174
|
||||
define PASS_ITEM_CNT 3
|
||||
define ENTRY_MAP_INDEX 62
|
||||
define ENTRY_MAP_X 614200
|
||||
define ENTRY_MAP_Y 706800
|
||||
define KILL_MOB1 3101
|
||||
define KILL_MOB2 3102
|
||||
define KILL_MOB3 3103
|
||||
define KILL_MOB4 3104
|
||||
define KILL_MOB5 3105
|
||||
define KILL_MOB6 3190
|
||||
define KILL_MOB7 3191
|
||||
|
||||
quest event_flame_dungeon_open begin
|
||||
state start begin
|
||||
when EVENT_NPC.chat.gameforge.event_flame_dungeon_open._010_npcChat with pc.get_level() >= 90 begin
|
||||
say(gameforge.event_flame_dungeon_open._020_say)
|
||||
wait()
|
||||
say(gameforge.event_flame_dungeon_open._030_say)
|
||||
wait()
|
||||
say(gameforge.event_flame_dungeon_open._080_say)
|
||||
pc.setqf("event_FD_time", 0)
|
||||
set_state(run)
|
||||
end
|
||||
end
|
||||
|
||||
state run begin
|
||||
when EVENT_NPC.chat.gameforge.event_flame_dungeon_open._040_npcChat with game.get_event_flag("w21open_event")>0 begin
|
||||
say(gameforge.event_flame_dungeon_open._050_say)
|
||||
wait()
|
||||
|
||||
local t = pc.getqf("event_FD_time")
|
||||
local killcount = pc.getqf("kill_done")
|
||||
if killcount == 0 then
|
||||
say(gameforge.event_flame_dungeon_open._080_say)
|
||||
elseif (t==0) or (t+86400 < get_global_time()) then
|
||||
say(gameforge.event_flame_dungeon_open._060_say)
|
||||
pc.give_item2(TELEPORT_ITEM, TELEPORT_ITEM_CNT)
|
||||
pc.give_item2(PASS_ITEM, PASS_ITEM_CNT)
|
||||
pc.setqf("event_FD_time", get_global_time())
|
||||
pc.setqf("kill_count_1", 0)
|
||||
else
|
||||
say(gameforge.event_flame_dungeon_open._070_say)
|
||||
end
|
||||
end
|
||||
|
||||
when letter with game.get_event_flag("w21open_event")>0 begin
|
||||
send_letter(gameforge.event_flame_dungeon_open._010_npcChat)
|
||||
--<2D><><EFBFBD><EFBFBD> óġ <20><> <20>ȳ<EFBFBD><C8B3><EFBFBD>
|
||||
q.set_counter_name(gameforge.main_quest_lv98._680_counterName)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when button or info with game.get_event_flag("w21open_event")>0 begin
|
||||
say_title(gameforge.event_flame_dungeon_open._010_npcChat)
|
||||
say(string.format(gameforge.levelup._26_say, 100 - pc.getqf("kill_count_1")))
|
||||
end
|
||||
|
||||
when KILL_MOB1.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB2.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB3.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB4.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB5.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB6.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when KILL_MOB7.kill begin
|
||||
local kill_count = pc.getqf("kill_count_1")
|
||||
pc.setqf("kill_count_1", kill_count+1)
|
||||
event_flame_dungeon_open.kill_count()
|
||||
end
|
||||
|
||||
when TELEPORT_ITEM.use begin
|
||||
pc.warp(ENTRY_MAP_X, ENTRY_MAP_Y, ENTRY_MAP_INDEX)
|
||||
pc.remove_item(TELEPORT_ITEM, 1)
|
||||
end
|
||||
|
||||
function kill_count()
|
||||
local total_remain = 100
|
||||
local remain1 = pc.getqf("kill_count_1")
|
||||
local remain_count = total_remain - remain1
|
||||
q.set_counter_value(remain_count)
|
||||
if total_remain == 0 then
|
||||
pc.setqf("kill_done", 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
223
gamefiles/data/quest/event_halloween_hair.quest
Normal file
223
gamefiles/data/quest/event_halloween_hair.quest
Normal file
@ -0,0 +1,223 @@
|
||||
quest event_halloween_hair begin
|
||||
state start begin
|
||||
function is_running()
|
||||
return (game.get_event_flag("halloween_hair") > 0) --npc spawn
|
||||
end
|
||||
|
||||
function setting()
|
||||
return {
|
||||
["pumpkin"] = 30321, -- Halloween Pumpkin
|
||||
["wand"] = 30322, -- Halloween magic wand
|
||||
["coupon"] = 30323, -- Hair coupon
|
||||
["box"] = 50215, -- Halloween giftbox
|
||||
["pumpkin_head"]= 33008 -- Pumpkin head NPC
|
||||
}
|
||||
end
|
||||
|
||||
function get_hair_option(index)
|
||||
local option_list = {
|
||||
{
|
||||
["apply"] = apply.ATTBONUS_MONSTER,
|
||||
["value"] = 10,
|
||||
["duration"] = 604800, -- 7 days
|
||||
},
|
||||
{
|
||||
["apply"] = apply.ATTBONUS_SURA,
|
||||
["value"] = 10,
|
||||
["duration"] = 604800, -- 7 days
|
||||
},
|
||||
{
|
||||
["apply"] = apply.ATTBONUS_SHAMAN,
|
||||
["value"] = 10,
|
||||
["duration"] = 604800, -- 7 days
|
||||
},
|
||||
{
|
||||
["apply"] = apply.ATTBONUS_WARRIOR,
|
||||
["value"] = 10,
|
||||
["duration"] = 604800, -- 7 days
|
||||
},
|
||||
{
|
||||
["apply"] = apply.ATTBONUS_ASSASSIN,
|
||||
["value"] = 10,
|
||||
["duration"] = 604800, -- 7 days
|
||||
},
|
||||
{
|
||||
["apply"] = apply.MAX_HP_PCT,
|
||||
["value"] = 1,
|
||||
["duration"] = 21600, -- 6 hours
|
||||
},
|
||||
{
|
||||
["apply"] = apply.MAX_SP_PCT,
|
||||
["value"] = 1,
|
||||
["duration"] = 86400, -- 24 hours
|
||||
},
|
||||
}
|
||||
|
||||
return option_list[index]
|
||||
end
|
||||
|
||||
function get_random_hair_option_index()
|
||||
local index = 1
|
||||
|
||||
-- hair_option[1] ~ [5] : 5%
|
||||
-- hair_option[6] : 15%
|
||||
-- hair_option[7] ~ 80%
|
||||
|
||||
local rand = number(1, 100)
|
||||
if rand <= 5 then
|
||||
index = rand
|
||||
elseif rand <= 85 then
|
||||
index = 7
|
||||
else
|
||||
index = 6
|
||||
end
|
||||
|
||||
return index
|
||||
end
|
||||
|
||||
function get_hair_info_by_race(race)
|
||||
hair_info_by_race = {
|
||||
-- VNUM, SHAPE
|
||||
{ 74020, 1018 }, -- 1 : Warrior(M)
|
||||
{ 74270, 2018 }, -- 2 : Assassin(W)
|
||||
{ 74520, 3018 }, -- 3 : Sura(M)
|
||||
{ 74770, 4018 }, -- 4 : Shaman(W)
|
||||
{ 75020, 1018 }, -- 5 : Warrior(W)
|
||||
{ 75220, 2018 }, -- 6 : Assassin(M)
|
||||
{ 75420, 3018 }, -- 7 : Sura(W)
|
||||
{ 75620, 4018 }, -- 8 : Shaman(M)
|
||||
}
|
||||
|
||||
return hair_info_by_race[race]
|
||||
end
|
||||
|
||||
when login or enter with game.get_event_flag("halloween_hair") > 0 begin
|
||||
local setting = event_halloween_hair.setting()
|
||||
local mapIndex = pc.get_map_index()
|
||||
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
|
||||
if find_npc_by_vnum(setting.pumpkin_head) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.pumpkin_head, 608, 617, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.pumpkin_head, 596, 610, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.pumpkin_head, 357, 743, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when 33008.chat.gameforge.event_halloween_hair._10_npcChat with pc.getqf("first_notice") < 1 begin
|
||||
local setting = event_halloween_hair.setting()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._30_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._40_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._50_say)
|
||||
|
||||
pc.setqf("first_notice", 1)
|
||||
|
||||
if not event_halloween_hair.is_running() then
|
||||
npc.purge()
|
||||
end
|
||||
end
|
||||
|
||||
when 33008.chat.gameforge.event_halloween_hair._60_npcChat with pc.getqf("first_notice") == 1 begin
|
||||
local setting = event_halloween_hair.setting()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._70_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._80_say)
|
||||
wait()
|
||||
|
||||
if pc.count_item(setting.coupon) == 0 then
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._90_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._100_say)
|
||||
wait()
|
||||
else
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._110_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_halloween_hair._20_sayTitle)
|
||||
say(gameforge.event_halloween_hair._120_say)
|
||||
wait()
|
||||
say(gameforge.event_halloween_hair._130_say)
|
||||
local s = select(gameforge.event_halloween_hair._140_select_1, gameforge.event_halloween_hair._140_select_2)
|
||||
if s == 2 then
|
||||
return
|
||||
end
|
||||
-- remove a hair coupon
|
||||
pc.remove_item(setting.coupon, 1)
|
||||
|
||||
-- Give a hair item to user, and prepare for setting random options to it
|
||||
local race = pc.get_race() + 1
|
||||
local index = event_halloween_hair.get_random_hair_option_index() --
|
||||
local option= event_halloween_hair.get_hair_option(index) -- hair option (apply, value, duration)
|
||||
local hair_info = event_halloween_hair.get_hair_info_by_race(race)
|
||||
local vnum, shape = hair_info[1], hair_info[2]
|
||||
|
||||
pc.give_item2_select(vnum)
|
||||
item.set_socket(0, option.duration)
|
||||
item.set_value(0, option.apply, option.value)
|
||||
end -- if
|
||||
|
||||
if not event_halloween_hair.is_running() then
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
|
||||
|
||||
-- When using 'Halloween magic wand'
|
||||
when 30322.use begin
|
||||
local setting = event_halloween_hair.setting()
|
||||
if pc.count_item(setting.pumpkin) > 0 then
|
||||
pc.remove_item(setting.pumpkin, 1)
|
||||
pc.remove_item(setting.wand, 1)
|
||||
pc.give_item2(setting.box, 1)
|
||||
end
|
||||
end
|
||||
|
||||
when 74020.use or 74270.use or 74520.use or 74770.use or 75020.use or 75220.use or 75420.use or 75620.use begin
|
||||
|
||||
local index = item.get_socket(1)
|
||||
|
||||
-- If this item was created by command(ex: /i 74020) then socket value is zero. Thus, give a random option.
|
||||
if 0 == index then
|
||||
index = event_halloween_hair.get_random_hair_option_index()
|
||||
end
|
||||
|
||||
local option = event_halloween_hair.get_hair_option(index)
|
||||
local hair_info = event_halloween_hair.get_hair_info_by_race(pc.get_race() + 1)
|
||||
local vnum, shape = hair_info[1], hair_info[2]
|
||||
|
||||
pc.set_part(PART_HAIR, shape)
|
||||
affect.remove_hair()
|
||||
affect.add_hair(option.apply, option.value, option.duration)
|
||||
|
||||
pc.setf("hair", "limit_time", get_time() + option.duration)
|
||||
|
||||
-- Copied from "hair.leave_log" function in "hair.quest" file
|
||||
char_log(0, "CHANGE_HAIR", string.format("USE_ITEM(%d)", vnum))
|
||||
char_log(0, "CHANGE_HAIR", string.format("END_SEC(%d)", get_time() + option.duration))
|
||||
char_log(0, "CHANGE_HAIR", "CHANGE_HAIR_END")
|
||||
|
||||
item.remove()
|
||||
end
|
||||
end --state
|
||||
end --quest
|
||||
|
113
gamefiles/data/quest/event_mob_invasion.quest
Normal file
113
gamefiles/data/quest/event_mob_invasion.quest
Normal file
@ -0,0 +1,113 @@
|
||||
--[[
|
||||
Different invasion types can be definied with different mobs (devil, undead, milygo, ...)
|
||||
When you introduce a new type you must create the correspending regen.txt in the
|
||||
locale/_master/map/mob_invasion/mobs_regen_MAPID_ file
|
||||
The file must be created and named:
|
||||
mobs_regen_[MAP_ID (1,21,41)]_TYPE_WAVE.txt
|
||||
|
||||
An Event have 3 different waves. A wave means spawning from one kind of mobs
|
||||
The idea behind:
|
||||
1 wave = low level mobs
|
||||
2 wave = aggro mobs from the same type
|
||||
3 wave = Boss from the mob type
|
||||
--]]
|
||||
quest event_mob_invasion begin
|
||||
state start begin
|
||||
function is_running()
|
||||
return (game.get_event_flag("mob_invasion") > 0)
|
||||
end
|
||||
|
||||
|
||||
--[[
|
||||
We can adjust the time how long the waves should run
|
||||
--]]
|
||||
function get_wave_duration()
|
||||
local wave_duration = game.get_event_flag("mob_invasion_wave_duration")
|
||||
if (wave_duration == 0) then
|
||||
-- default will be one hour
|
||||
wave_duration = 3600
|
||||
else
|
||||
-- the wave_time is a multiplicator in this case for hours ;-)
|
||||
wave_duration = wave_duration*3600
|
||||
end
|
||||
-- Return value is hardcodet for prototyping
|
||||
return 10
|
||||
-- return wave_duration
|
||||
end
|
||||
|
||||
|
||||
|
||||
function spawn_mobs(invasion_type, wave, target_map)
|
||||
|
||||
if invasion_type == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
if target_map == 1 then
|
||||
regen_in_map(1, "locale/_master/map/mob_invasion/mobs_regen_1_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
-- For prototyping only one map is enough :-D
|
||||
--regen_in_map(21, "locale/_master/map/mob_invasion/mobs_regen_21_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
--regen_in_map(41, "locale/_master/map/mob_invasion/mobs_regen_41_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
elseif target_map == 2 then
|
||||
regen_in_map(3, "locale/_master/map/mob_invasion/mobs_regen_3_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
-- For prototyping only one map is enough :-D
|
||||
--regen_in_map(23, "locale/_master/map/mob_invasion/mobs_regen_23_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
--regen_in_map(43, "locale/_master/map/mob_invasion/mobs_regen_43_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
else
|
||||
regen_in_map(target_map, "locale/_master/map/mob_invasion/mobs_regen_" .. target_map .. "_" .. invasion_type .. "_" .. wave ..".txt")
|
||||
end
|
||||
end
|
||||
|
||||
--[[ not clearified till now
|
||||
when info or button begin
|
||||
|
||||
end
|
||||
--]]
|
||||
|
||||
when login or enter with event_mob_invasion.is_running() begin
|
||||
|
||||
local wave = game.get_event_flag("mob_invasion_wave")
|
||||
local wave_duration = event_mob_invasion.get_wave_duration()
|
||||
|
||||
if (wave == 0) then
|
||||
game.set_event_flag("mob_invasion_wave_time",get_time()+60*30)--------- in 10 seconds will the next player activate the spawn
|
||||
game.set_event_flag("mob_invasion_wave", wave+1)
|
||||
|
||||
--[[ premium feature prepare
|
||||
|
||||
if pc.count_item(71124) > 1 then
|
||||
notice ("hier geht gleich was AB")
|
||||
end
|
||||
--]]
|
||||
elseif (wave == 1) then
|
||||
|
||||
elseif (wave == 2) then
|
||||
|
||||
elseif (wave == 3) then
|
||||
|
||||
else (wave > 3) then
|
||||
return
|
||||
end
|
||||
|
||||
if get_time() > game.get_event_flag("mob_invasion_wave_time") then
|
||||
game.set_event_flag("mob_invasion_wave_time",get_time()+wave_duration)---------1 hour default
|
||||
game.set_event_flag("mob_invasion_wave", wave+1)
|
||||
event_mob_invasion.spawn_mobs(game.get_event_flag("mob_invasion_type"), wave, game.get_event_flag("mob_invasion_target_map"))
|
||||
end
|
||||
end
|
||||
|
||||
--[[
|
||||
We will clean up if the event is not running and reset all needed flags to 0
|
||||
--]]
|
||||
when login or enter with not event_mob_invasion.is_running() begin
|
||||
if (game.get_event_flag("mob_invasion_wave") == 4) then
|
||||
game.set_event_flag("mob_invasion_wave", 0)
|
||||
game.set_event_flag("mob_invasion_wave_duration", 0)
|
||||
game.set_event_flag("mob_invasion_type", 0)
|
||||
game.set_event_flag("mob_invasion_target_map", 0)
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
286
gamefiles/data/quest/event_mystery_box.quest
Normal file
286
gamefiles/data/quest/event_mystery_box.quest
Normal file
@ -0,0 +1,286 @@
|
||||
quest event_mystery_box begin
|
||||
state start begin
|
||||
|
||||
function drop_box(operator, mob)
|
||||
if game.get_event_flag("mystery_box_drop") != 1 then
|
||||
return
|
||||
end
|
||||
|
||||
local prob = game.get_event_flag("mystery_box_prob")
|
||||
local box_vnum = game.get_event_flag("mystery_box_vnum")
|
||||
local logging = game.get_event_flag("mystery_box_logging")
|
||||
|
||||
if box_vnum == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
prob = math.floor(prob*operator)
|
||||
|
||||
local s = number(1, prob)
|
||||
if s == 1 then
|
||||
game.drop_item_with_ownership(box_vnum, 1)
|
||||
if logging == 1 then
|
||||
char_log(mob, 'EVENT_MB_DROP_SUCCESS', box_vnum ..' box dropped with prob:'.. prob)
|
||||
end
|
||||
else
|
||||
if logging == 1 then
|
||||
char_log(mob, 'EVENT_MB_DROP_FAIL', box_vnum ..' box not dropped with prob:'.. prob)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when login or enter begin
|
||||
set_state(go_sleep)
|
||||
end
|
||||
end
|
||||
|
||||
state go_sleep begin
|
||||
|
||||
when login or enter with game.get_event_flag("mystery_box_drop") == 1 begin
|
||||
set_state(run_state)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
state run_state begin
|
||||
|
||||
when login or enter with game.get_event_flag("mystery_box_drop") != 1 begin
|
||||
set_state(go_sleep)
|
||||
end
|
||||
|
||||
when 8001.kill with pc.get_level() >=1 and pc.get_level() <= 10 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,8001)
|
||||
end
|
||||
when 8002.kill with pc.get_level() >=5 and pc.get_level() <= 15 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,8002)
|
||||
end
|
||||
when 8003.kill with pc.get_level() >=10 and pc.get_level() <= 20 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8003)
|
||||
end
|
||||
when 8004.kill with pc.get_level() >=15 and pc.get_level() <= 25 begin
|
||||
local operator = 0.3
|
||||
event_mystery_box.drop_box(operator,8004)
|
||||
end
|
||||
when 8005.kill with pc.get_level() >=20 and pc.get_level() <= 30 begin
|
||||
local operator = 17
|
||||
event_mystery_box.drop_box(operator,8005)
|
||||
end
|
||||
when 8006.kill with pc.get_level() >=25 and pc.get_level() <= 35 begin
|
||||
local operator = 13
|
||||
event_mystery_box.drop_box(operator,8006)
|
||||
end
|
||||
when 8007.kill with pc.get_level() >=30 and pc.get_level() <= 40 begin
|
||||
local operator = 13
|
||||
event_mystery_box.drop_box(operator,8007)
|
||||
end
|
||||
when 8008.kill with pc.get_level() >=35 and pc.get_level() <= 45 begin
|
||||
local operator = 0.2
|
||||
event_mystery_box.drop_box(operator,8008)
|
||||
end
|
||||
when 8009.kill with pc.get_level() >=40 and pc.get_level() <= 50 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,8009)
|
||||
end
|
||||
when 8010.kill with pc.get_level() >=45 and pc.get_level() <= 55 begin
|
||||
local operator = 0.3
|
||||
event_mystery_box.drop_box(operator,8010)
|
||||
end
|
||||
when 8011.kill with pc.get_level() >=50 and pc.get_level() <= 60 begin
|
||||
local operator = 0.2
|
||||
event_mystery_box.drop_box(operator,8011)
|
||||
end
|
||||
when 8012.kill with pc.get_level() >= 55 and pc.get_level() <= 65 begin
|
||||
local operator = 100
|
||||
event_mystery_box.drop_box(operator,8012)
|
||||
end
|
||||
when 8013.kill with pc.get_level() >= 60 and pc.get_level() <= 70 begin
|
||||
local operator = 0.3
|
||||
event_mystery_box.drop_box(operator,8013)
|
||||
end
|
||||
when 8014.kill with pc.get_level() >= 65 and pc.get_level() <= 75 begin
|
||||
local operator = 0.25
|
||||
event_mystery_box.drop_box(operator,8014)
|
||||
end
|
||||
when 8024.kill with pc.get_level() >=70 and pc.get_level() <= 80 begin
|
||||
local operator = 0.3
|
||||
event_mystery_box.drop_box(operator,8024)
|
||||
end
|
||||
when 8025.kill with pc.get_level() >=75 and pc.get_level() <= 85 begin
|
||||
local operator = 0.3
|
||||
event_mystery_box.drop_box(operator,8025)
|
||||
end
|
||||
when 8026.kill with pc.get_level() >=85 and pc.get_level() <= 95 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,8026)
|
||||
end
|
||||
when 8051.kill with pc.get_level() >=90 and pc.get_level() <= 100 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8051)
|
||||
end
|
||||
when 8052.kill with pc.get_level() >=90 and pc.get_level() <= 100 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8052)
|
||||
end
|
||||
when 8053.kill with pc.get_level() >=95 and pc.get_level() <= 105 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8053)
|
||||
end
|
||||
when 8054.kill with pc.get_level() >=95 and pc.get_level() <= 105 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8054)
|
||||
end
|
||||
when 8055.kill with pc.get_level() >=100 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8055)
|
||||
end
|
||||
when 8056.kill with pc.get_level() >=100 begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,8056)
|
||||
end
|
||||
when 8027.kill with pc.get_level() >=90 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,8027)
|
||||
end
|
||||
when 5161.kill with pc.get_level() <= 30 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,5161)
|
||||
end
|
||||
when 591.kill with pc.get_level() <= 35 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,591)
|
||||
end
|
||||
when 5162.kill with pc.get_level() <= 40 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,5162)
|
||||
end
|
||||
when 691.kill with pc.get_level() <= 45 begin
|
||||
local operator = 1.25
|
||||
event_mystery_box.drop_box(operator,691)
|
||||
end
|
||||
when 5163.kill with pc.get_level() <= 60 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,5163)
|
||||
end
|
||||
when 2091.kill with pc.get_level() <= 65 begin
|
||||
local operator = 1.25
|
||||
event_mystery_box.drop_box(operator,2091)
|
||||
end
|
||||
when 792.kill with pc.get_level() <= 65 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,792)
|
||||
end
|
||||
when 793.kill with pc.get_level() <= 75 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,793)
|
||||
end
|
||||
when 2191.kill with pc.get_level() <= 65 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,2191)
|
||||
end
|
||||
when 1901.kill with pc.get_level() <= 75 begin
|
||||
local operator = 1
|
||||
event_mystery_box.drop_box(operator,1901)
|
||||
end
|
||||
when 2206.kill with pc.get_level() <= 85 begin
|
||||
local operator = 10
|
||||
event_mystery_box.drop_box(operator,2206)
|
||||
end
|
||||
when 1091.kill with pc.get_level() <= 75 begin
|
||||
local operator = 10
|
||||
event_mystery_box.drop_box(operator,1091)
|
||||
end
|
||||
when 1092.kill with pc.get_level() <= 75 begin
|
||||
local operator = 10
|
||||
event_mystery_box.drop_box(operator,1092)
|
||||
end
|
||||
when 1304.kill with pc.get_level() <= 80 begin
|
||||
local operator = 0.5
|
||||
event_mystery_box.drop_box(operator,1304)
|
||||
end
|
||||
when 1093.kill with pc.get_level() <= 95 begin
|
||||
local operator = 0.2
|
||||
event_mystery_box.drop_box(operator,1093)
|
||||
end
|
||||
|
||||
|
||||
|
||||
-- now the bosses
|
||||
when 5002.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,5002)
|
||||
end
|
||||
when 2092.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,2092)
|
||||
end
|
||||
when 1192.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,1192)
|
||||
end
|
||||
when 2291.kill begin
|
||||
local operator = 2.5
|
||||
event_mystery_box.drop_box(operator,2291)
|
||||
end
|
||||
when 2307.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,2307)
|
||||
end
|
||||
when 2306.kill begin
|
||||
local operator = 15
|
||||
event_mystery_box.drop_box(operator,2306)
|
||||
end
|
||||
|
||||
when 3091.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3091)
|
||||
end
|
||||
|
||||
when 3191.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3191)
|
||||
end
|
||||
|
||||
when 3291.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3291)
|
||||
end
|
||||
|
||||
when 3391.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3391)
|
||||
end
|
||||
|
||||
when 3491.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3491)
|
||||
end
|
||||
|
||||
when 3591.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3591)
|
||||
end
|
||||
|
||||
when 3595.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3595)
|
||||
end
|
||||
|
||||
when 3691.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3691)
|
||||
end
|
||||
|
||||
when 3791.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3791)
|
||||
end
|
||||
|
||||
when 3891.kill begin
|
||||
local operator = 2
|
||||
event_mystery_box.drop_box(operator,3891)
|
||||
end
|
||||
end
|
||||
end
|
315
gamefiles/data/quest/event_ramadan.quest
Normal file
315
gamefiles/data/quest/event_ramadan.quest
Normal file
@ -0,0 +1,315 @@
|
||||
quest event_ramadan begin
|
||||
state start begin
|
||||
function is_running()
|
||||
return (game.get_event_flag("ramadan_drop") > 0) --npc spawn
|
||||
end
|
||||
function reward_period()
|
||||
return (game.get_event_flag("ramadan_reward") > 0) --reward menu appear
|
||||
end
|
||||
|
||||
|
||||
function setting()
|
||||
return {
|
||||
["bread"] = 30315,
|
||||
["candy"] = 50183,
|
||||
["plate"] = 30316,
|
||||
["iftar"] = 30317,
|
||||
["fruit"] = 30318,
|
||||
["box"] = 50182,
|
||||
["horse1"] = 71131,
|
||||
["horse2"] = 71132,
|
||||
["horse3"] = 71133,
|
||||
["horse4"] = 71134,
|
||||
["historian"] = 33002,
|
||||
["beggar1"] = 33003,
|
||||
["beggar2"] = 33004,
|
||||
["beggar3"] = 33005,
|
||||
["beggar4"] = 33006,
|
||||
["beggar5"] = 33007
|
||||
}
|
||||
end
|
||||
|
||||
when login or enter with event_ramadan.is_running() begin
|
||||
local setting = event_ramadan.setting()
|
||||
local mapIndex = pc.get_map_index()
|
||||
if mapIndex == 1 or mapIndex == 21 or mapIndex == 41 then
|
||||
if find_npc_by_vnum(setting.historian) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.historian, 608, 617, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.historian, 596, 610, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.historian, 357, 743, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
|
||||
if find_npc_by_vnum(setting.beggar1) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.beggar1, 619, 701, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.beggar1, 564, 613, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.beggar1, 344, 723, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
if find_npc_by_vnum(setting.beggar2) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.beggar2, 697, 580, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.beggar2, 699, 658, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.beggar2, 443, 733, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
if find_npc_by_vnum(setting.beggar3) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.beggar3, 646, 515, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.beggar3, 613, 715, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.beggar3, 428, 651, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
if find_npc_by_vnum(setting.beggar4) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.beggar4, 554, 550, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.beggar4, 635, 539, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.beggar4, 303, 587, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
if find_npc_by_vnum(setting.beggar5) == 0 then
|
||||
if mapIndex == 1 then
|
||||
mob.spawn(setting.beggar5, 702, 629, 1, 1, 1)
|
||||
elseif mapIndex == 21 then
|
||||
mob.spawn(setting.beggar5, 529, 547, 1, 1, 1)
|
||||
elseif mapIndex == 41 then
|
||||
mob.spawn(setting.beggar5, 456, 673, 1, 1, 1)
|
||||
end
|
||||
end
|
||||
end --if
|
||||
end --when
|
||||
|
||||
--gameforge.event_ramadan._010_npcChat Historiker?
|
||||
-- (Referenz 33002 Mob)
|
||||
when 33002.chat.gameforge.event_ramadan._010_npcChat with pc.getf("event_ramadan","first_notice")==0 begin
|
||||
local setting = event_ramadan.setting()
|
||||
--gameforge.event_ramadan._020_sayTitle Historiker: (referenz auf mob: 33002)
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._030_say review the old and learn the new! why do you find me ?
|
||||
say("")
|
||||
say(gameforge.event_ramadan._030_say)
|
||||
wait()
|
||||
|
||||
say_pc_name()
|
||||
-- gameforge.event_ramadan._040_say Tut mir leid, kennen wir uns?
|
||||
say(gameforge.event_ramadan._040_say)
|
||||
wait()
|
||||
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
--gameforge.event_ramadan._050_say Entschuldige, ich vergaß mich vorzustellen. Ich bin der viel gereiste Historiker.
|
||||
-- Wenn du Fragen zur Geschichte hast scheue dich nicht mich zu fragen.
|
||||
say(gameforge.event_ramadan._050_say)
|
||||
wait()
|
||||
|
||||
say_pc_name()
|
||||
-- gameforge.event_ramadan._060_say Es ehrt mich dich kennen zu lernen. Ich sollte dich öfter aufsuchen
|
||||
say(gameforge.event_ramadan._060_say)
|
||||
|
||||
|
||||
pc.setqf("first_notice",1)
|
||||
end
|
||||
|
||||
-- Brot: Brotkringel
|
||||
-- Süßigkeit: Haloa, baklawa, irgendwas süßes (ihr wisst bescheid)
|
||||
-- gameforge.event_ramadan._070_npcChat Was Süßes
|
||||
when 33002.chat.gameforge.event_ramadan._070_npcChat with pc.getf("event_ramadan","first_notice")==1 begin
|
||||
|
||||
local setting = event_ramadan.setting()
|
||||
if pc.count_item(setting.bread) == 0 then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._80_say Kennst du dich mit Süßigkeiten aus? Es wird Baklava (bitte absprechen und referenz auf item: 50183) genannt.
|
||||
say(gameforge.event_ramadan._80_say)
|
||||
-- gameforge.event_ramadan._90_select_1 Ja, das kenne ich
|
||||
-- gameforge.event_ramadan._90_select_2 Nein, tut mir leid
|
||||
local s=select(gameforge.event_ramadan._90_select_1 ,gameforge.event_ramadan._90_select_2)
|
||||
if 2==s then
|
||||
--gameforge.event_ramadan._020_sayTitle Historiker:
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
--gameforge.event_ramadan._100_say Schade, bis zum nächsten mal.
|
||||
say(gameforge.event_ramadan._100_say)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
--gameforge.event_ramadan._110_say Dann weißt du ja was ich meine. Wenn ein solches erhalten willst bringe mir bitte ein Brot (bitte abspreche und referenz auf item: 30315).
|
||||
say(gameforge.event_ramadan._110_say)
|
||||
wait()
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._120_say Ich würde dir gerne ein Baklava (item: 50183) für 10 Brote (item: 30315) geben. Bist du damit einverstanden?
|
||||
say(gameforge.event_ramadan._120_say)
|
||||
-- gameforge.event_ramadan._130_select_1 Gerne
|
||||
-- gameforge.event_ramadan._130_select_2 Hab keine Zeit
|
||||
local s=select(gameforge.event_ramadan._130_select_1,gameforge.event_ramadan._130_select_2)
|
||||
if 2==s then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say(gameforge.event_ramadan._100_say)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._140_say Ich würde dir gerne ein Baklava (item: 50183) für 10 Brote (item: 30315) geben. Bist du damit einverstanden?
|
||||
say(gameforge.event_ramadan._140_say)
|
||||
elseif pc.count_item(setting.bread) > 0 and pc.count_item(setting.bread) < 10 then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._150_say Das sind zu wenig Brote, ich kann damit nicht viel anfangen.
|
||||
say(gameforge.event_ramadan._150_say)
|
||||
elseif pc.count_item(setting.bread) >= 10 then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._160_say Das sind genug Brote, dafür kann ich dir gerne das Baklava geben.
|
||||
say(gameforge.event_ramadan._160_say)
|
||||
wait()
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._170_say Sammle mehr und ich kann dir mehr davon bereiten
|
||||
say(gameforge.event_ramadan._170_say)
|
||||
pc.give_item2(setting.candy,1)
|
||||
pc.remove_item(setting.bread,10)
|
||||
end --if
|
||||
if not event_ramadan.is_running() then
|
||||
npc.purge()
|
||||
end
|
||||
end --when
|
||||
-- gameforge.event_ramadan._180_npcChat Leckeres Brot (item: 30315)
|
||||
when 33002.chat.gameforge.event_ramadan._180_npcChat with pc.getqf("first_notice")== 1 begin
|
||||
local setting = event_ramadan.setting()
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._180_say Ich bin gesättigt mit dem leckeren Brot das du mir brachtest
|
||||
say(gameforge.event_ramadan._180_say)
|
||||
-- gameforge.event_ramadan._190_say Hast du gewusst das es viele Bettler gibt die Hunger haben? Es wäre schön wenn du auch mit Ihnen das Fastenbrechen begehen würdest
|
||||
say(gameforge.event_ramadan._190_say)
|
||||
-- gameforge.event_ramadan._200_say Bringe es Ihnen am besten auf einem Teller (bitte absprechen und refernz auf item:30316)
|
||||
say(gameforge.event_ramadan._200_say)
|
||||
say_item_vnum(setting.plate)
|
||||
wait()
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._210_say Danke für dein Brot es ist gut. So eine weise Person sollte auch Barmherzig sein. Man wird es dir vergelten.
|
||||
say(gameforge.event_ramadan._210_say)
|
||||
end
|
||||
-- gameforge.event_ramadan._220_npcChat Hunger ...
|
||||
when 33003.chat.gameforge.event_ramadan._220_npcChat or 33004.chat.gameforge.event_ramadan._220_npcChat or 33005.chat.gameforge.event_ramadan._220_npcChat or 33006.chat.gameforge.event_ramadan._220_npcChat or 33007.chat.gameforge.event_ramadan._220_npcChat begin
|
||||
local setting = event_ramadan.setting()
|
||||
if pc.count_item(setting.iftar) == 0 then
|
||||
-- gameforge.event_ramadan._230_sayTitle Bettler: (referenz auf Mob: 33003~33007)
|
||||
say_title(gameforge.event_ramadan._230_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._240_say Ich bin wirklich hungrig. Habe erbarmen und bringe mir ein Iftar (bitte mit Abdel absprechen und referenz auf item: 30317). Bitte bringe es mir, damit ich nicht verhungere.
|
||||
say(gameforge.event_ramadan._240_say)
|
||||
|
||||
elseif pc.count_item(setting.iftar) > 0 then
|
||||
|
||||
say_title(gameforge.event_ramadan._230_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._250_say Das ist doch ein Iftar (referenz: 30317)? Ein warmes leckeres Brot (referenz entsprechend). Willst du diese mir geben? Es wäre mir wertvoll!
|
||||
say(gameforge.event_ramadan._250_say)
|
||||
-- gameforge.event_ramadan._260_select_1 Nimm du Hungriger
|
||||
-- gameforge.event_ramadan._260_select_2 Nein, ich behalte es
|
||||
local s = select(gameforge.event_ramadan._260_select_1,gameforge.event_ramadan._260_select_2)
|
||||
if 2==s then
|
||||
say_title(gameforge.event_ramadan._230_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._270_say Du Unbarmherziger sei nicht so geizig mit deinem Essen. Falls du deine Meinung änderst, weißt du wo du mich findest.
|
||||
say(gameforge.event_ramadan._270_say)
|
||||
return
|
||||
end
|
||||
-- reward
|
||||
say_title(gameforge.event_ramadan._230_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._280_say Es sei dir gedankt. Du bist wahrlich eine weise Person. Möge deine gute Tat hiermit belohnt sein.
|
||||
say(gameforge.event_ramadan._280_say)
|
||||
|
||||
pc.give_item2(setting.box,1)
|
||||
pc.remove_item(setting.iftar,1)
|
||||
end --if
|
||||
|
||||
if not event_ramadan.is_running() then
|
||||
npc.purge()
|
||||
end
|
||||
end
|
||||
|
||||
-- gameforge.event_ramadan._290_npcChat Die Frucht des Segens
|
||||
when 33002.chat.gameforge.event_ramadan._290_npcChat with pc.getf("event_ramadan","fig_exchange")==0 begin
|
||||
local setting = event_ramadan.setting()
|
||||
if get_time() > pc.getqf("duration") then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._300_say Ich hab auf meinen Reisen die "Frucht des Segens" (bitte Item: 30318 referenzien und ändern) kennen gelernt. Diese Frucht belohnt den Fleißigen der regelmäßig zur selben Stunde wiederkehrt.
|
||||
say(gameforge.event_ramadan._300_say)
|
||||
pc.give_item2(setting.fruit)
|
||||
pc.setqf("duration",get_time()+60*60*24) --24h
|
||||
else
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
-- gameforge.event_ramadan._310_say Entschuldige, dich hab ich heute gesehen und du wurdest schon belohnt. Denk daran: Nur der wahrlich geduldige erreicht sein Ziel.
|
||||
say(gameforge.event_ramadan._310_say)
|
||||
end
|
||||
end
|
||||
-- gameforge.event_ramadan._320_npcChat Das Glück des Tüchtigen
|
||||
when 33002.chat.gameforge.event_ramadan._320_npcChat with event_ramadan.reward_period() and pc.getf("event_ramadan","fig_exchange")==0 begin
|
||||
local setting = event_ramadan.setting()
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._330_say Ich habe dich schon erwartet. Meine Zeit hier geht zu Ende und ich ziehe in die Welt um neue Geschichten zu lernen.
|
||||
say(gameforge.event_ramadan._330_say)
|
||||
wait()
|
||||
if pc.count_item(setting.fruit)>= 5 then --more than 5
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._340_say Du hast %d Früchte des Segens (Item: 30318) für mich verwahrt.
|
||||
say(string.format(gameforge.event_ramadan._340_say, pc.count_item(setting.fruit)))
|
||||
-- gameforge.event_ramadan._350_say Würdest du mir diese geben für meine Reise? Ich will es dir auch entlohnen.
|
||||
say(gameforge.event_ramadan._350_say)
|
||||
-- gameforge.event_ramadan._360_select_1 Hier nimm
|
||||
-- gameforge.event_ramadan._360_select_2 Nein
|
||||
local s=select(gameforge.event_ramadan._360_select_1, gameforge.event_ramadan._360_select_2)
|
||||
if 2==s then
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._370_say Überlege es dir und ich warte auch dich.
|
||||
say(gameforge.event_ramadan._370_say)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._380_say Danke für deine Großzügigkeit und deinen Fleiß. Bitte nehme dieses:
|
||||
say(gameforge.event_ramadan._380_say)
|
||||
-- Item: Siegel des Rappen
|
||||
-- gameforge.event_ramadan._390_sayReward Siegel des Rappen (referenz auf items:71131~4)
|
||||
say_reward(gameforge.event_ramadan._390_sayReward)
|
||||
say("")
|
||||
if pc.count_item(setting.fruit)>= 5 and pc.count_item(setting.fruit)<= 10 then
|
||||
pc.give_item2(setting.horse1,1)
|
||||
elseif pc.count_item(setting.fruit)>= 11 and pc.count_item(setting.fruit)<= 19 then
|
||||
pc.give_item2(setting.horse2,1)
|
||||
elseif pc.count_item(setting.fruit)>= 20 and pc.count_item(setting.fruit)<= 27 then
|
||||
pc.give_item2(setting.horse3,1)
|
||||
elseif pc.count_item(setting.fruit)>= 28 then
|
||||
pc.give_item2(setting.horse4,1)
|
||||
end
|
||||
pc.remove_item(setting.fruit,pc.count_item(setting.fruit))
|
||||
pc.setqf("fig_exchange",1)
|
||||
else --less than 5
|
||||
say_title(gameforge.event_ramadan._020_sayTitle)
|
||||
say("")
|
||||
-- gameforge.event_ramadan._400_say Du hast weniger als 5? Schade damit kann ich nicht viel anfangen. Vielleicht beim nächsten mal.
|
||||
say(gameforge.event_ramadan._400_say)
|
||||
end
|
||||
end
|
||||
when 30316.use begin
|
||||
local setting = event_ramadan.setting()
|
||||
if pc.count_item(setting.bread) >= 10 then
|
||||
pc.remove_item(setting.bread, 10)
|
||||
pc.remove_item(setting.plate, 1)
|
||||
pc.give_item2(setting.iftar, 1)
|
||||
end
|
||||
end
|
||||
|
||||
end --state
|
||||
end --quest
|
9
gamefiles/data/quest/extractKeys.sh
Normal file
9
gamefiles/data/quest/extractKeys.sh
Normal file
@ -0,0 +1,9 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$1" == "-c" ]; then
|
||||
param="-c"
|
||||
fi
|
||||
|
||||
(sed -n 's/\.\./#/g;s/gameforg[.a-z0-9_]\+/\
|
||||
(&)\
|
||||
/gp' *.quest | sed -n 's/(\(gameforge[.a-z0-9_]\+\))/\1/p') | sort | uniq $param | sort -n
|
131
gamefiles/data/quest/find_brother_article.quest
Normal file
131
gamefiles/data/quest/find_brother_article.quest
Normal file
@ -0,0 +1,131 @@
|
||||
quest find_brother_article begin
|
||||
state start begin
|
||||
when 20006.chat.gameforge.find_brother_article._10_npcChat with pc.get_level()>=23 and pc.get_level()<=26 begin
|
||||
say_title(gameforge.find_brother_article._20_sayTitle)
|
||||
say(gameforge.find_brother_article._30_say)
|
||||
wait()
|
||||
say_pc_name()
|
||||
say(gameforge.find_brother_article._40_say)
|
||||
wait()
|
||||
say_title(gameforge.find_brother_article._20_sayTitle)
|
||||
say(gameforge.find_brother_article._50_say)
|
||||
wait()
|
||||
say_title(gameforge.find_brother_article._60_sayTitle)
|
||||
say(gameforge.find_brother_article._70_say)
|
||||
say_reward(gameforge.find_brother_article._80_sayReward)
|
||||
local s= select(gameforge.find_brother_article._90_select, gameforge.find_brother_article._100_select)
|
||||
if 1==s then
|
||||
say_pc_name()
|
||||
say(gameforge.find_brother_article._110_say)
|
||||
set_state(accept)
|
||||
elseif 2==s then
|
||||
say_pc_name()
|
||||
say(gameforge.find_brother_article._120_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state accept begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_brother_article._130_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.find_brother_article._130_sendLetter)
|
||||
say(gameforge.find_brother_article._140_sayReward)
|
||||
end
|
||||
when 20006.chat.gameforge.find_brother_article._150_npcChat with pc.count_item(30032)==0 begin
|
||||
say_title(gameforge.find_brother_article._60_sayTitle)
|
||||
say(gameforge.find_brother_article._160_say)
|
||||
local s= select(gameforge.locale.levelup.prev_quest_go, gameforge.find_brother_article._170_select)
|
||||
if 1==s then
|
||||
say_title(gameforge.blacksmith._40_sayTitle)
|
||||
say_reward(gameforge.find_brother_article._180_sayReward)
|
||||
else
|
||||
say_pc_name()
|
||||
say(gameforge.find_brother_article._190_say)
|
||||
wait()
|
||||
say_title(gameforge.find_brother_article._60_sayTitle)
|
||||
say(gameforge.find_brother_article._200_say)
|
||||
say_reward(gameforge.find_brother_article._205_sayReward)
|
||||
local s= select(gameforge.find_brother_article._210_select, gameforge.find_brother_article._170_select)
|
||||
if 1==s then
|
||||
say_pc_name()
|
||||
say(gameforge.find_brother_article._220_say)
|
||||
elseif 2==s then
|
||||
say_title(gameforge.find_brother_article._60_sayTitle)
|
||||
say(gameforge.find_brother_article._230_say)
|
||||
set_state(__FAILURE__)
|
||||
end
|
||||
end
|
||||
end
|
||||
when 20006.chat.gameforge.find_brother_article._240_npcChat with pc.count_item(30032)>=1 begin
|
||||
say_title(gameforge.find_brother_article._60_sayTitle)
|
||||
say(gameforge.find_brother_article._250_say)
|
||||
say_reward(gameforge.find_brother_article._260_sayReward)
|
||||
|
||||
pc.remove_item(30032)
|
||||
set_state(reward)
|
||||
end
|
||||
end
|
||||
state reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_brother_article._270_sendLetter)
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.find_brother_article._270_sendLetter)
|
||||
say(gameforge.find_brother_article._280_say)
|
||||
wait()
|
||||
say(gameforge.find_brother_article._290_say)
|
||||
say_reward(gameforge.find_brother_article._300_sayReward)
|
||||
set_state(repair)
|
||||
end
|
||||
end
|
||||
state repair begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_brother_article._310_sendLetter)
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.find_brother_article._310_sendLetter)
|
||||
say(gameforge.find_brother_article._320_say)
|
||||
end
|
||||
when letter begin
|
||||
local v=find_npc_by_vnum(20016)
|
||||
if v!=0 then
|
||||
target.vid("__TARGET__", v, gameforge.find_brother_article._330_targetVid)
|
||||
end
|
||||
end
|
||||
when __TARGET__.target.click or 20016.chat.gameforge.find_brother_article._340_npcChat begin
|
||||
target.delete("__TARGET__")
|
||||
|
||||
say_title(gameforge.blacksmith._20_sayTitle)
|
||||
say(gameforge.find_brother_article._350_say)
|
||||
wait()
|
||||
say_title(gameforge.blacksmith._20_sayTitle)
|
||||
say(gameforge.find_brother_article._360_say)
|
||||
|
||||
local r=number(1, 4)
|
||||
if 1==r then
|
||||
say_reward(gameforge.find_brother_article._370_sayReward)
|
||||
pc.give_item2(00062)
|
||||
elseif 2==r then
|
||||
say_reward(gameforge.find_brother_article._380_sayReward)
|
||||
pc.give_item2(00072)
|
||||
elseif 3==r then
|
||||
say_reward(gameforge.find_brother_article._390_sayReward)
|
||||
pc.give_item2(00082)
|
||||
elseif 4==r then
|
||||
say_reward(gameforge.find_brother_article._400_sayReward)
|
||||
pc.give_item2(00092)
|
||||
end
|
||||
clear_letter()
|
||||
set_state(__COMPLETE__)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
state __FAILURE__ begin
|
||||
end
|
||||
end
|
||||
|
||||
|
104
gamefiles/data/quest/find_senior_soldier.quest
Normal file
104
gamefiles/data/quest/find_senior_soldier.quest
Normal file
@ -0,0 +1,104 @@
|
||||
quest find_senior_soldier begin
|
||||
state start begin
|
||||
when 20300.chat.gameforge.find_senior_soldier._10_npcChat or 20301.chat.gameforge.find_senior_soldier._10_npcChat or 20302.chat.gameforge.find_senior_soldier._10_npcChat or 20303.chat.gameforge.find_senior_soldier._10_npcChat or 20304.chat.gameforge.find_senior_soldier._10_npcChat or 20305.chat.gameforge.find_senior_soldier._10_npcChat or 20306.chat.gameforge.find_senior_soldier._10_npcChat or 20307.chat.gameforge.find_senior_soldier._10_npcChat or 20320.chat.gameforge.find_senior_soldier._10_npcChat or 20321.chat.gameforge.find_senior_soldier._10_npcChat or 20322.chat.gameforge.find_senior_soldier._10_npcChat or 20323.chat.gameforge.find_senior_soldier._10_npcChat or 20324.chat.gameforge.find_senior_soldier._10_npcChat or 20325.chat.gameforge.find_senior_soldier._10_npcChat or 20326.chat.gameforge.find_senior_soldier._10_npcChat or 20327.chat.gameforge.find_senior_soldier._10_npcChat or 20340.chat.gameforge.find_senior_soldier._10_npcChat or 20341.chat.gameforge.find_senior_soldier._10_npcChat or 20342.chat.gameforge.find_senior_soldier._10_npcChat or 20343.chat.gameforge.find_senior_soldier._10_npcChat or 20344.chat.gameforge.find_senior_soldier._10_npcChat or 20345.chat.gameforge.find_senior_soldier._10_npcChat or 20346.chat.gameforge.find_senior_soldier._10_npcChat or 20347.chat.gameforge.find_senior_soldier._10_npcChat with pc_is_novice() and npc_is_same_empire() and npc_is_same_job() and pc.get_level()<=10 begin
|
||||
if not next_time_is_now() then
|
||||
say_title(gameforge.find_senior_soldier._20_sayTitle)
|
||||
say(gameforge.find_senior_soldier._30_say)
|
||||
else
|
||||
say(gameforge.find_senior_soldier._40_say)
|
||||
wait()
|
||||
say_title(gameforge.find_senior_soldier._20_sayTitle)
|
||||
say(gameforge.find_senior_soldier._50_say)
|
||||
find_senior_soldier.save_target_cond()
|
||||
next_time_set(time_hour_to_sec(1), 10)
|
||||
set_state(find)
|
||||
end
|
||||
end
|
||||
end
|
||||
state failure begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_senior_soldier._60_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.find_senior_soldier._70_sayReward)
|
||||
say_reward(gameforge.find_senior_soldier._80_sayReward)
|
||||
restart_quest()
|
||||
end
|
||||
end
|
||||
state find begin
|
||||
when letter begin
|
||||
local v=find_senior_soldier.find_target()
|
||||
test_chat(string.format(gameforge.find_senior_soldier._90_chat, v))
|
||||
if v==0 then
|
||||
set_state(failure)
|
||||
else
|
||||
target.vid("__TARGET__", v, gameforge.find_senior_soldier._100_targetVid)
|
||||
send_letter(gameforge.find_senior_soldier._100_targetVid)
|
||||
end
|
||||
end
|
||||
when button or info begin
|
||||
-----------"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.find_senior_soldier._110_sayTitle)
|
||||
say_reward(gameforge.find_senior_soldier._120_sayReward)
|
||||
end
|
||||
when __TARGET__.target.die begin
|
||||
----------"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.find_senior_soldier._130_sayReward)
|
||||
say_reward(gameforge.find_senior_soldier._80_sayReward)
|
||||
restart_quest()
|
||||
end
|
||||
when __TARGET__.target.click begin
|
||||
----------"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.find_senior_soldier._140_sayTitle)
|
||||
say_reward(gameforge.find_senior_soldier._150_sayReward)
|
||||
say(gameforge.find_senior_soldier._160_say)
|
||||
target.delete("__TARGET__")
|
||||
find_senior_soldier.clear_target_cond()
|
||||
set_state(reward)
|
||||
end
|
||||
end
|
||||
state reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_senior_soldier._170_sendLetter)
|
||||
end
|
||||
when button begin
|
||||
----------"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.find_senior_soldier._180_sayTitle)
|
||||
say(gameforge.find_senior_soldier._190_say)
|
||||
|
||||
local funcList={
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._191_say, apply.MAX_HP, 100) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._192_say, apply.HP_REGEN, 50) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._193_say, apply.STR, 5) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._194_say, apply.CON, 5) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._195_say, apply.CRITICAL_PCT, 10) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._196_say, apply.ATT_SPEED, 10) end,
|
||||
function() find_senior_soldier.apply_affect(gameforge.find_senior_soldier._197_say, apply.ATTBONUS_ANIMAL, 10) end,
|
||||
}
|
||||
table_get_random_item(funcList)()
|
||||
restart_quest()
|
||||
end
|
||||
end
|
||||
state __FUNC__ begin
|
||||
function clear_target_cond()
|
||||
pc.setqf("Ziel_Beding", 0)
|
||||
end
|
||||
function save_target_cond()
|
||||
test_chat(string.format(gameforge.find_senior_soldier._200_chat, npc_get_job()))
|
||||
pc.setqf("Ziel_Beding", npc_get_job())
|
||||
end
|
||||
function find_target()
|
||||
return find_pc_cond(5, 100, pc.getqf("Ziel_Beding"))
|
||||
end
|
||||
function apply_affect(name, type, value)
|
||||
say_title(gameforge.blacksmith._40_sayTitle)
|
||||
say_reward(name)
|
||||
say_reward(gameforge.find_senior_soldier._210_sayReward)
|
||||
affect.add(type, value, 5*60)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
146
gamefiles/data/quest/find_squareguard.quest
Normal file
146
gamefiles/data/quest/find_squareguard.quest
Normal file
@ -0,0 +1,146 @@
|
||||
quest find_squareguard begin
|
||||
state start begin
|
||||
end
|
||||
|
||||
state run begin
|
||||
when login with pc.level<=5 begin
|
||||
set_state(find)
|
||||
end
|
||||
end
|
||||
state find begin
|
||||
when letter begin
|
||||
local find_npc_vnum = 0
|
||||
if pc.get_empire()==1 then
|
||||
find_npc_vnum = 11000
|
||||
elseif pc.get_empire()==2 then
|
||||
find_npc_vnum = 11002
|
||||
elseif pc.get_empire()==3 then
|
||||
find_npc_vnum = 11004
|
||||
end
|
||||
|
||||
local v=find_npc_by_vnum(find_npc_vnum)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__1", v, gameforge.find_squareguard._10_targetVid)
|
||||
end
|
||||
end
|
||||
when letter begin
|
||||
send_letter(gameforge.find_squareguard._10_targetVid)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.find_squareguard._20_sayReward)
|
||||
end
|
||||
when __TARGET__1.target.click begin
|
||||
target.delete("__TARGET__1")
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(gameforge.find_squareguard._40_say)
|
||||
local b= select(gameforge.find_squareguard._50_select)
|
||||
if 1==b then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.find_squareguard._60_sayReward)
|
||||
pc.changemoney(200)
|
||||
set_state(buy)
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state buy begin
|
||||
when letter begin
|
||||
send_letter(gameforge.find_squareguard._80_sendLetter)
|
||||
|
||||
local v=find_npc_by_vnum(9003)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__", v, gameforge.find_squareguard._131_targetVid )
|
||||
end
|
||||
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.find_squareguard._90_sayReward)
|
||||
end
|
||||
when 11000.chat.gameforge.find_squareguard._100_npcChat or 11002.chat.gameforge.find_squareguard._100_npcChat or 11004.chat.gameforge.find_squareguard._100_npcChat begin
|
||||
say_title(gameforge.find_squareguard._110_sayTitle)
|
||||
say(gameforge.find_squareguard._120_say)
|
||||
end
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.find_squareguard._130_sayTitle)
|
||||
say(gameforge.find_squareguard._140_say)
|
||||
wait()
|
||||
say_title(gameforge.find_squareguard._130_sayTitle)
|
||||
say(gameforge.find_squareguard._150_say)
|
||||
wait()
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.find_squareguard._160_sayReward)
|
||||
----------"12345678901234567890123456789012345678901234567890"|
|
||||
say_reward(gameforge.find_squareguard._170_sayReward)
|
||||
pc.give_item2(27001,5)
|
||||
setstate(deliver)
|
||||
end
|
||||
end
|
||||
state deliver begin
|
||||
when letter begin
|
||||
local find_npc_vnum = 0
|
||||
if pc.get_empire()==1 then
|
||||
find_npc_vnum = 11000
|
||||
elseif pc.get_empire()==2 then
|
||||
find_npc_vnum = 11002
|
||||
elseif pc.get_empire()==3 then
|
||||
find_npc_vnum = 11004
|
||||
end
|
||||
|
||||
local v=find_npc_by_vnum(find_npc_vnum)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__1", v, gameforge.find_squareguard._10_targetVid)
|
||||
end
|
||||
end
|
||||
when letter begin
|
||||
send_letter(gameforge.find_squareguard._180_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.find_squareguard._190_sayReward)
|
||||
end
|
||||
|
||||
when __TARGET__1.target.click with pc.countitem("27001")<1 begin
|
||||
target.delete("__TARGET__1")
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(gameforge.find_squareguard._200_say)
|
||||
-- genereate a error, we have another quest for the skills. Here are the orignal korean linked
|
||||
-- set_quest_state("find_skillteacher", "find")
|
||||
clear_letter()
|
||||
set_state(__COMPLETE__)
|
||||
end
|
||||
when __TARGET__1.target.click with pc.countitem("27001")>=1 begin
|
||||
target.delete("__TARGET__1")
|
||||
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(gameforge.find_squareguard._210_say)
|
||||
wait()
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(gameforge.find_squareguard._220_say)
|
||||
if pc.countitem("27001")>=1 then
|
||||
pc.removeitem("27001", 1)
|
||||
local r=number(1, 3)
|
||||
if r==1 then
|
||||
pc.give_item2("14000", 1)
|
||||
elseif r==2 then
|
||||
pc.give_item2("16000", 1)
|
||||
elseif r==3 then
|
||||
pc.give_item2("17000", 1)
|
||||
end
|
||||
end
|
||||
clear_letter()
|
||||
set_state(__COMPLETE__)
|
||||
-- genereate a error, we have another quest for the skills. Here are the orignal korean linked
|
||||
-- set_quest_state("find_skillteacher", "find")
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
57
gamefiles/data/quest/fisher.quest
Normal file
57
gamefiles/data/quest/fisher.quest
Normal file
@ -0,0 +1,57 @@
|
||||
quest fisher begin
|
||||
state start begin
|
||||
when 9009.chat.gameforge.fisher._10_npcChat begin
|
||||
npc.open_shop()
|
||||
setskin(NOWINDOW)
|
||||
end
|
||||
|
||||
when 9009.chat.gameforge.fisher._20_npcChat begin
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._40_say)
|
||||
end
|
||||
|
||||
when 9009.take with item.vnum < 27400 or item.vnum > 27590 begin
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._50_say)
|
||||
end
|
||||
|
||||
when 9009.take with item.vnum == 27590 begin
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._60_say)
|
||||
end
|
||||
|
||||
when 9009.take with item.vnum >= 27400 and item.vnum < 27590 and item.get_socket(0)!= item.get_value(2) begin
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._70_say)
|
||||
end
|
||||
|
||||
when 9009.take with item.vnum >= 27400 and item.vnum < 27590 and item.get_socket(0) == item.get_value(2) begin
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._80_say)
|
||||
say(string.format(gameforge.fisher._90_say, item.get_value(0) / 10))
|
||||
say(gameforge.fisher._100_say)
|
||||
say(string.format(gameforge.fisher._110_say, 100 - item.get_value(3)))
|
||||
say(gameforge.fisher._120_say)
|
||||
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
|
||||
if s == 1 then
|
||||
local f = __fish_real_refine_rod(item.get_cell())
|
||||
if f == 2 then
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._130_say)
|
||||
elseif f == 1 then
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._140_say)
|
||||
else
|
||||
say(gameforge.fisher._150_say)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.fisher._30_sayTitle)
|
||||
say(gameforge.fisher._160_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
739
gamefiles/data/quest/flame_dungeon.quest
Normal file
739
gamefiles/data/quest/flame_dungeon.quest
Normal file
@ -0,0 +1,739 @@
|
||||
define BLOCK_DOOR 20387
|
||||
define DUNGEON_MAN 20385
|
||||
define DUNGEON_MAN_DIR 0
|
||||
define DUNGEON_MAP_INDEX 351
|
||||
define ENTER_LIMIT_TIME 30
|
||||
define ENTRY_MAN 20394
|
||||
define ENTRY_MAP_INDEX 62
|
||||
define FINAL_BOSS 6091
|
||||
define LEVEL2_KEY 30329
|
||||
define LEVEL2_STONE 20386
|
||||
define LEVEL4_TARGET 6051
|
||||
define LEVEL5_REALKEY 30330
|
||||
define LEVEL5_STONE 20386
|
||||
define LEVEL5_GEN_LIMIT 100
|
||||
define LEVEL6_TARGET 8057
|
||||
define LEVEL_CUT 100
|
||||
define MOB_REGEN_FILE_PATH = "data/dungeon/flame_dungeon/"
|
||||
define IN_DOOR 20388
|
||||
define NPC_REGEN_FILE_PATH = "data/dungeon/flame_dungeon/npc.txt"
|
||||
define TICKET_GROUP 10033
|
||||
define LIMITED_PASS_TICKET 71175
|
||||
|
||||
quest flame_dungeon begin
|
||||
state start begin
|
||||
--when ENTRY_MAN.click with pc.get_level() >= 90 begin
|
||||
--pc.give_item2(LIMITED_PASS_TICKET, 1)
|
||||
--set_state(run)
|
||||
--end
|
||||
--end
|
||||
|
||||
--state run begin
|
||||
|
||||
function setting()
|
||||
return
|
||||
{
|
||||
["bossroom_entry_pos"] = {8109,6867},
|
||||
["boss_pos"] = {686,637},
|
||||
["doors_pos"] = {
|
||||
{320,394},
|
||||
{293,359},
|
||||
{333,321},
|
||||
{378,320},
|
||||
{400,355},
|
||||
{394,401}
|
||||
},
|
||||
["idoors_pos"] = {
|
||||
{268,447},
|
||||
{234,359},
|
||||
{300,264},
|
||||
{454,217},
|
||||
{470,355},
|
||||
{467,469}
|
||||
},
|
||||
["doors_dir"] = {135,90,210,152,90,223},
|
||||
["idoors_dir"] = {135,90,210,135,90,239},
|
||||
["dungeon_entry_pos"] = {7762, 6739},-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
["DUNGEON_MAN_bpos"] = {690,722},
|
||||
["DUNGEON_MAN_pos"] = {354,362},
|
||||
["LEVEL2_STONE_pos"] = {195,352},
|
||||
["LEVEL4_TARGET_pos"] = {470,175},
|
||||
["LEVEL5_STONE_pos"] = {
|
||||
{486, 345},
|
||||
{511, 336},
|
||||
{525, 349},
|
||||
{521, 365},
|
||||
{503, 372},
|
||||
{486, 365},
|
||||
{500, 354}
|
||||
},
|
||||
["LEVEL6_TARGET_pos"] = {511,480},
|
||||
["outside_entry_pos"] = {6142,7068}, --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ¾<D6B4> <20><><EFBFBD>ִ<EFBFBD> <20><>
|
||||
["YAK_pos"] = {376, 397} -- <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
end
|
||||
function is_flamed(idx) -- <20><><EFBFBD>漺<EFBFBD><E6BCBA> <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE>
|
||||
return idx >= DUNGEON_MAP_INDEX * 10000 and idx < (DUNGEON_MAP_INDEX + 1) *10000
|
||||
end
|
||||
function make_dungeon() -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
d.new_jump_party(DUNGEON_MAP_INDEX, setting.dungeon_entry_pos[1], setting.dungeon_entry_pos[2])
|
||||
-- d.spawn_mob_ac_dir(DUNGEON_MAN, setting.DUNGEON_MAN_pos[1], setting.DUNGEON_MAN_pos[2],DUNGEON_MAN_DIR)
|
||||
-- d.spawn_mob(YAK,setting.YAK_pos[1],setting.YAK_pos[2])
|
||||
d.regen_file(NPC_REGEN_FILE_PATH)
|
||||
d.setf("level",0)
|
||||
for i=1,6 do
|
||||
d.set_unique("door"..i, d.spawn_mob_ac_dir(BLOCK_DOOR, setting.doors_pos[i][1], setting.doors_pos[i][2],setting.doors_dir[i]))
|
||||
end
|
||||
for i=1,6 do
|
||||
d.set_unique("idoor"..i, d.spawn_mob_ac_dir(IN_DOOR, setting.idoors_pos[i][1], setting.idoors_pos[i][2],setting.idoors_dir[i]))
|
||||
end
|
||||
d.setf("clear_count",0)
|
||||
d.setf("started",0)
|
||||
d.setf("dungeon_enter",0) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD>? // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 0 <20><><EFBFBD><EFBFBD> : 1 // ƨ<><C6A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
end
|
||||
function go_boss() -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if pc.get_level() < 104 then --<2D><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE>
|
||||
-- syschat(gameforge.flame_dungeon._580_notice)
|
||||
say(gameforge.flame_dungeon._580_notice)
|
||||
return
|
||||
else
|
||||
--if pc.getf("main_quest_flame_lv103", "__status")==main_quest_flame_lv103.__COMPLETE__ then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ Ȯ<><C8AE>
|
||||
-- -- say_title(gameforge.flame_dungeon._010_say)
|
||||
say(gameforge.flame_dungeon._010_say)
|
||||
local warp = select(gameforge.flame_dungeon._020_select,gameforge.flame_dungeon._030_select)
|
||||
if warp == 1 then
|
||||
d.setf("level",17)
|
||||
d.jump_all(setting.bossroom_entry_pos[1],setting.bossroom_entry_pos[2])
|
||||
d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_fild_boss.txt")
|
||||
-- d.spawn_mob(DUNGEON_MAN,setting.DUNGEON_MAN_bpos[1],setting.DUNGEON_MAN_bpos[2])
|
||||
d.spawn_mob(FINAL_BOSS,setting.boss_pos[1],setting.boss_pos[2])
|
||||
end
|
||||
-- else
|
||||
-- -- syschat(gameforge.flame_dungeon._040_notice)
|
||||
-- say(gameforge.flame_dungeon._040_notice)
|
||||
-- return
|
||||
-- end
|
||||
end
|
||||
end
|
||||
function level_clear() -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD><EFBFBD>
|
||||
d.setf("level",0)
|
||||
d.clear_regen()
|
||||
d.purge_area(750000,620000,817400,689400) -- <20><><EFBFBD><EFBFBD>ü -- d.purge() <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
end
|
||||
function clear_timer(inx) -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
clear_server_timer ("flame_dungeon_0m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_1m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_5m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_10m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_15m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_30m_left_timer", inx)
|
||||
clear_server_timer ("flame_dungeon_45m_left_timer", inx)
|
||||
clear_server_timer ("killed_A_1", inx)
|
||||
clear_server_timer ("killed_A_2", inx)
|
||||
clear_server_timer ("flame_dungeon_ticket_remove", inx)
|
||||
end
|
||||
|
||||
when login begin
|
||||
local idx = pc.get_map_index()
|
||||
local setting = flame_dungeon.setting()
|
||||
if idx == DUNGEON_MAP_INDEX then
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
|
||||
elseif flame_dungeon.is_flamed(idx) then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
--<2D>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>ƿ´<C6BF>. <20>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>.
|
||||
--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>ƿ<EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>漺<EFBFBD><E6BCBA><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD><C9BC><EFBFBD> Ȱ<><C8B0>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
-- pc.set_warp_location(0, 0 , 0) --ƨ<><C6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>κ<EFBFBD>
|
||||
pc.set_warp_location(ENTRY_MAP_INDEX, setting.outside_entry_pos[1] , setting.outside_entry_pos[2]) -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
if d.getf("dungeon_enter") == 0 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4>
|
||||
local canPass = false
|
||||
for i=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
|
||||
canPass = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if get_global_time() - pc.getf("flame_dungeon","exit_time") < ENTER_LIMIT_TIME * 60 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.flame_dungeon._050_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._060_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
elseif not canPass then
|
||||
notice_multiline(gameforge.flame_dungeon._070_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._080_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
elseif pc.get_level() < 100 then
|
||||
notice_multiline(gameforge.flame_dungeon._090_notice,d.notice)
|
||||
say(gameforge.flame_dungeon._100_say)
|
||||
timer("flame_dungeon_warp_timer", 5)
|
||||
end
|
||||
elseif pc.getf("flame_dungeon","ticket_delete") == 0 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
for i=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[i]) >= ticketGroup[i+1] then
|
||||
pc.remove_item(ticketGroup[i], ticketGroup[i+1])
|
||||
break
|
||||
end
|
||||
end
|
||||
pc.setf("flame_dungeon","ticket_delete",1)
|
||||
end
|
||||
else
|
||||
pc.setf("flame_dungeon","ticket_delete",0)
|
||||
end
|
||||
end
|
||||
when flame_dungeon_warp_timer.timer begin
|
||||
local setting = flame_dungeon.setting()
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
|
||||
end
|
||||
when logout begin
|
||||
local idx = pc.get_map_index()
|
||||
if flame_dungeon.is_flamed(idx) then
|
||||
if d.getf("dungeon_enter") == 1 then -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>αƿ<D7BE>
|
||||
pc.setf("flame_dungeon","exit_time",get_global_time()) -- <20>ν<EFBFBD><CEBD>Ͻ<EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ٵ<EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> or <20>׳<EFBFBD> ƨ<><C6A8><EFBFBD>Ÿ<EFBFBD> <20>ȱ<EFBFBD><C8B1><EFBFBD>
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
when ENTRY_MAN.chat.gameforge.flame_dungeon._110_npcChat begin
|
||||
|
||||
local setting = flame_dungeon.setting()
|
||||
if party.is_party() then
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
|
||||
local party_check = 0
|
||||
if d.find(party.getf("dungeon_index")) then
|
||||
party_check = (d.getf_from_map_index("party_leader_pid", party.getf("dungeon_index")) == party.get_leader_pid())
|
||||
end
|
||||
|
||||
if d.find(party.getf("dungeon_index")) and party_check then
|
||||
if get_global_time() - pc.getf("flame_dungeon","exit_time") < 5 * 60 then -- <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 5<><35> <20><>?
|
||||
local dungeon_level = d.getf_from_map_index("level", party.getf("dungeon_index"))
|
||||
if dungeon_level == 17 then -- <20><><EFBFBD><EFBFBD>
|
||||
pc.warp(setting.bossroom_entry_pos[1] * 100, setting.bossroom_entry_pos[2] * 100, party.getf("dungeon_index"))
|
||||
else
|
||||
pc.warp(setting.dungeon_entry_pos[1] * 100, setting.dungeon_entry_pos[2] * 100, party.getf("dungeon_index"))
|
||||
end
|
||||
else -- 5<><35> <20>ʰ<EFBFBD><CAB0>Ͽ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>
|
||||
say_title(mob_name(ENTRY_MAN))
|
||||
say(gameforge.flame_dungeon._590_say)
|
||||
end
|
||||
else
|
||||
local pids = {party.get_member_pids()}
|
||||
local noTicketMembers = {}
|
||||
local notEnoughLevelMembers = {}
|
||||
local ticketCheck = true
|
||||
local levelCheck = true
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
for i, pid in next, pids, nil do
|
||||
q.begin_other_pc_block(pid)
|
||||
local canPass = false
|
||||
for idx=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
|
||||
canPass = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not canPass then
|
||||
table.insert(noTicketMembers, pc.get_name())
|
||||
ticketCheck = false
|
||||
end
|
||||
if pc.level < LEVEL_CUT then
|
||||
table.insert(notEnoughLevelMembers, pc.get_name())
|
||||
levelCheck = false
|
||||
end
|
||||
q.end_other_pc_block()
|
||||
end
|
||||
|
||||
if not ticketCheck then
|
||||
say_title(mob_name(ENTRY_MAN))
|
||||
say(gameforge.flame_dungeon._610_say)
|
||||
for i, name in next, noTicketMembers, nil do
|
||||
say(color(1,1,0), " "..name)
|
||||
end
|
||||
if levelCheck then
|
||||
return
|
||||
else
|
||||
wait()
|
||||
end
|
||||
end
|
||||
|
||||
if not levelCheck then
|
||||
say_title(mob_name(ENTRY_MAN))
|
||||
say(gameforge.flame_dungeon._630_say)
|
||||
for i, name in next, notEnoughLevelMembers, nil do
|
||||
say(color(1,1,0), " "..name)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if party.is_leader() then
|
||||
say(gameforge.flame_dungeon._120_say)
|
||||
local warp = select(gameforge.flame_dungeon._130_select,gameforge.flame_dungeon._140_select)
|
||||
if warp == 1 then
|
||||
if party.is_map_member_flag_lt("exit_time", get_global_time() - ENTER_LIMIT_TIME * 60 ) then
|
||||
flame_dungeon.make_dungeon()
|
||||
else
|
||||
--say("test : <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ѽð<D1BD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҽ<CABE><D2BD>ϴ<EFBFBD>.")
|
||||
say(gameforge.flame_dungeon._600_say)
|
||||
end
|
||||
end
|
||||
|
||||
party.setf("flame_dungeon_boss_kill_count", 0)
|
||||
|
||||
else
|
||||
say(gameforge.flame_dungeon._150_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(gameforge.flame_dungeon._160_say)
|
||||
end
|
||||
end
|
||||
-- when ENTRY_MAN.chat."Test : <20><><EFBFBD>ҽ<EFBFBD>Ȯ<EFBFBD><C8AE>" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- local setting = flame_dungeon.setting()
|
||||
-- pc.setf("flame_dungeon","fdRtest",1)
|
||||
-- pc.warp( setting.dungeon_entry_pos[1]*100, setting.dungeon_entry_pos[2]*100, DUNGEON_MAP_INDEX)
|
||||
-- end
|
||||
|
||||
|
||||
when ENTRY_MAN.chat."TEST : Init time limit init" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
pc.setf("flame_dungeon","exit_time",get_global_time()-1800)
|
||||
say("Done")
|
||||
end
|
||||
-- when DUNGEON_MAN.chat."Test : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- say("<22><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : "..d.count_monster())
|
||||
-- say("level : "..d.getf("level"))
|
||||
-- say("Dmap index : "..d.get_map_index())
|
||||
-- say("Pmap index : "..pc.get_map_index())
|
||||
-- say("access limit : "..pc.getf("flame_dungeon","exit_time"))
|
||||
-- say("global time : "..get_global_time())
|
||||
-- if flame_dungeon.is_flamed(d.get_map_index()) then
|
||||
-- say("in dungeon") -- is_flamed <20>Լ<EFBFBD> üũ
|
||||
-- end
|
||||
-- if d.is_unique_dead("stone1") then
|
||||
-- say("stone1 is dead")
|
||||
-- else
|
||||
-- say("stone1 is not dead")
|
||||
-- end
|
||||
-- end
|
||||
-- when DUNGEON_MAN.chat."ó<><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
-- say("<22>ʱ<EFBFBD>ȭ <20>մϴ<D5B4>")
|
||||
-- flame_dungeon.clear_timer(d.get_map_index())
|
||||
-- flame_dungeon.make_dungeon()
|
||||
-- end
|
||||
when DUNGEON_MAN.chat."Test : Boss Room" with is_test_server() begin -- <20><EFBFBD>Ʈ<EFBFBD><C6AE>
|
||||
flame_dungeon.go_boss()
|
||||
end
|
||||
|
||||
-- < <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD>>
|
||||
-- when DUNGEON_MAN.chat."<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" begin -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ
|
||||
-- local setting = flame_dungeon.setting()
|
||||
-- say("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ðڽ<C3B0><DABD>ϱ<EFBFBD>?")
|
||||
-- local warp = select("Ȯ<><C8AE>","<22><><EFBFBD><EFBFBD>")
|
||||
-- if warp == 1 then
|
||||
-- pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
|
||||
-- end
|
||||
-- end
|
||||
when flame_dungeon_45m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 45),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_30m_left_timer', 15*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_30m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 30),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_15m_left_timer', 15*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_15m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 15),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_5m_left_timer', 10*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_5m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 5),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer('flame_dungeon_1m_left_timer', 4*60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_1m_left_timer.server_timer begin
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(string.format(gameforge.flame_dungeon._180_notice, 1),d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
server_timer ("flame_dungeon_0m_left_timer", 60, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
when flame_dungeon_0m_left_timer.server_timer begin
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.select(get_server_timer_arg()) then
|
||||
notice_multiline(gameforge.flame_dungeon._190_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._200_notice,d.notice)
|
||||
server_timer("dungeon_end_timer",10,d.get_map_index())
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- <<<< <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>>>>> --
|
||||
when DUNGEON_MAN.chat.gameforge.flame_dungeon._210_npcChat with npc.lock() begin -- '0x'<27><> x<><78>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> , '1x'<27><> x<><78>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.getf("started") == 0 then
|
||||
say(gameforge.flame_dungeon._230_say)
|
||||
say(gameforge.flame_dungeon._240_say)
|
||||
wait()
|
||||
d.setf("started",1)
|
||||
-- <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> ƨ<>ܹ<EFBFBD><DCB9>ȴµ<C8B4> <20>ڱ⸸ <20><><EFBFBD>Ƽ<EFBFBD> exit timer<65><72> <20><><EFBFBD>µǸ<C2B5> <20>ȵǴϱ<C7B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD><D2B6><EFBFBD> <20><>
|
||||
server_timer ("flame_dungeon_45m_left_timer",15*60, d.get_map_index())
|
||||
notice_multiline(gameforge.flame_dungeon._250_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._170_notice,d.notice)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> ó<><C3B3>
|
||||
-- <20><><EFBFBD><EFBFBD> <20>Ŀ<EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<>ܳ<EFBFBD><DCB3><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> Ÿ<≯Ӹ<CCB8> <20>̿<EFBFBD><CCBF><EFBFBD> Ƽ<><C6BC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
local pids = {party.get_member_pids()}
|
||||
local ticketGroup = {71095, 1, 71130, 1}
|
||||
for i, pid in next, pids, nil do
|
||||
q.begin_other_pc_block(pid)
|
||||
local canPass = false
|
||||
for idx=1, table.getn(ticketGroup),2 do
|
||||
if pc.count_item(ticketGroup[idx]) >= ticketGroup[idx+1] then
|
||||
canPass = true
|
||||
pc.remove_item(ticketGroup[idx], ticketGroup[idx+1])
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not canPass then
|
||||
pc.warp(setting.outside_entry_pos[1]*100, setting.outside_entry_pos[2] * 100, ENTRY_MAP_INDEX)
|
||||
end
|
||||
q.end_other_pc_block()
|
||||
end
|
||||
d.setqf2("flame_dungeon","ticket_delete",1)
|
||||
d.setf("dungeon_enter",1)
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
party.setf("dungeon_index", d.get_map_index())
|
||||
d.setf("party_leader_pid", party.get_leader_pid())
|
||||
end
|
||||
if d.getf("level") < 7 then --<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4>
|
||||
if d.getf("clear_count") == 6 then -- <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
d.setf("level",7)
|
||||
else
|
||||
local rand = number(1,6)--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>湮üũ<C3BC><C5A9> <20><><EFBFBD><EFBFBD> <20>迭<EFBFBD><E8BFAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> üũ<C3BC><C5A9>
|
||||
local setlev = 0
|
||||
d.setf("level",7) -- Ȥ<><C8A4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>츦 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
for i=1,50 do
|
||||
setlev = setlev + 1
|
||||
if setlev > 6 then
|
||||
setlev = 1
|
||||
end
|
||||
if not d.is_unique_dead("door"..setlev) then
|
||||
rand = rand - 1
|
||||
if rand == 0 then
|
||||
d.setf("level",setlev)
|
||||
d.setf("clear_count",d.getf("clear_count")+1)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if d.getf("level") == 1 then
|
||||
say(gameforge.flame_dungeon._260_say)
|
||||
notice_multiline(gameforge.flame_dungeon._260_say,d.notice)
|
||||
d.kill_unique("door1")
|
||||
d.kill_unique("idoor1")
|
||||
d.setf("level",11)
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_a.txt")
|
||||
|
||||
server_timer ("killed_A_1", 12, d.get_map_index())
|
||||
elseif d.getf("level") == 11 then
|
||||
say(gameforge.flame_dungeon._270_say)
|
||||
say_title(gameforge.flame_dungeon._280_sayTitle .. d.count_monster())
|
||||
elseif d.getf("level") == 2 then
|
||||
say(gameforge.flame_dungeon._290_say)
|
||||
say(gameforge.flame_dungeon._300_say)
|
||||
notice_multiline(gameforge.flame_dungeon._290_say,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._300_say,d.notice)
|
||||
d.spawn_mob(LEVEL2_STONE, setting.LEVEL2_STONE_pos[1], setting.LEVEL2_STONE_pos[2]) -- <20><><EFBFBD>μ<EFBFBD> <20><>ȯ
|
||||
d.kill_unique("door2")
|
||||
d.kill_unique("idoor2")
|
||||
d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_b.txt")
|
||||
d.setf("level",12)
|
||||
elseif d.getf("level") == 12 then
|
||||
say(gameforge.flame_dungeon._310_say)
|
||||
elseif d.getf("level") == 3 then
|
||||
say(gameforge.flame_dungeon._260_say)
|
||||
notice_multiline(gameforge.flame_dungeon._260_say,d.notice)
|
||||
d.kill_unique("door3")
|
||||
d.kill_unique("idoor3")
|
||||
d.setf("level",13)
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_c.txt")
|
||||
server_timer ("killed_A_1", 12, d.get_map_index())
|
||||
elseif d.getf("level") == 13 then
|
||||
say(gameforge.flame_dungeon._270_say)
|
||||
say_title(gameforge.flame_dungeon._280_sayTitle..d.count_monster())
|
||||
elseif d.getf("level") == 4 then -- 474 178
|
||||
say(gameforge.flame_dungeon._320_notice)
|
||||
notice_multiline(gameforge.flame_dungeon._320_notice,d.notice)
|
||||
d.setf("level",14)
|
||||
d.kill_unique("door4")
|
||||
d.kill_unique("idoor4")
|
||||
d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_d.txt")
|
||||
d.spawn_mob(LEVEL4_TARGET,setting.LEVEL4_TARGET_pos[1],setting.LEVEL4_TARGET_pos[2] ) -- Ÿ<>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
elseif d.getf("level") == 14 then
|
||||
say(gameforge.flame_dungeon._330_say)
|
||||
say(gameforge.flame_dungeon._340_say)
|
||||
elseif d.getf("level") == 5 then -- 510 355
|
||||
say(gameforge.flame_dungeon._350_say)
|
||||
say(gameforge.flame_dungeon._360_say)
|
||||
notice_multiline(gameforge.flame_dungeon._350_say,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._360_say,d.notice)
|
||||
d.kill_unique("door5")
|
||||
d.kill_unique("idoor5")
|
||||
d.setf("level",15)
|
||||
d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
local vis = { 0,0,0,0,0,0,0}
|
||||
for i=1,7 do
|
||||
vis[i] = 0
|
||||
end
|
||||
for i = 1, 7 do -- <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>ȯ
|
||||
local ran = number(1,7)
|
||||
local st = 0
|
||||
for j = 1, 50 do
|
||||
st = st + 1
|
||||
if st > 7 then
|
||||
st = 1
|
||||
end
|
||||
if vis[st] == 0 then
|
||||
ran = ran - 1
|
||||
if ran == 0 then
|
||||
vis[st] = 1
|
||||
d.set_unique("stone5_"..st, d.spawn_mob(LEVEL5_STONE, setting.LEVEL5_STONE_pos[i][1], setting.LEVEL5_STONE_pos[i][2]))
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
elseif d.getf("level") == 15 then
|
||||
say(gameforge.flame_dungeon._370_say)
|
||||
elseif d.getf("level") == 6 then -- 507 490
|
||||
say(gameforge.flame_dungeon._380_say)
|
||||
notice_multiline(gameforge.flame_dungeon._380_say,d.notice)
|
||||
d.setf("level",16)
|
||||
d.kill_unique("door6")
|
||||
d.kill_unique("idoor6")
|
||||
d.set_regen_file (MOB_REGEN_FILE_PATH.."fd_f.txt")
|
||||
d.spawn_mob(LEVEL6_TARGET, setting.LEVEL6_TARGET_pos[1],setting.LEVEL6_TARGET_pos[2]) -- Ÿ<>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><>ȯ
|
||||
elseif d.getf("level") == 16 then
|
||||
say(gameforge.flame_dungeon._390_say)
|
||||
say(gameforge.flame_dungeon._400_say)
|
||||
elseif d.getf("level") == 7 then
|
||||
-- setskin(NOWINDOW)
|
||||
flame_dungeon.go_boss()
|
||||
else
|
||||
say(gameforge.flame_dungeon._410_say)
|
||||
end
|
||||
npc.unlock()
|
||||
end
|
||||
|
||||
|
||||
|
||||
when dungeon_end_timer.server_timer begin -- <20><><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD>)
|
||||
local setting = flame_dungeon.setting()
|
||||
if d.select(get_server_timer_arg()) then
|
||||
flame_dungeon.clear_timer(d.get_map_index())
|
||||
d.set_warp_location(ENTRY_MAP_INDEX, setting.outside_entry_pos[1] , setting.outside_entry_pos[2])
|
||||
d.exit_all()
|
||||
d.setf("party_leader_pid", 0)
|
||||
end
|
||||
end
|
||||
|
||||
when killed_A_1.server_timer begin -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 (level1,level3)
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() <= 0 then -- 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if d.getf("level") == 11 then
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
else
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
end
|
||||
d.setf("level",0)
|
||||
else
|
||||
server_timer ("killed_A_1", 6, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
when killed_A_2.server_timer begin -- Ÿ<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 (1<><31> 2 <20><><EFBFBD><EFBFBD><EFBFBD>ư<EFBFBD><C6B0>鼭 <20><><EFBFBD>ư<EFBFBD>)
|
||||
if d.select(get_server_timer_arg()) then
|
||||
if d.count_monster() <= 0 then -- 1<><31><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if d.getf("level") == 11 then
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
else
|
||||
notice_multiline(gameforge.flame_dungeon._420_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
end
|
||||
d.setf("level",0)
|
||||
else
|
||||
server_timer ("killed_A_2", 6, get_server_timer_arg())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 12 begin -- 2<><32><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local i = number(1, 100) -- 100<30><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
game.drop_item (LEVEL2_KEY, 1)
|
||||
end
|
||||
end
|
||||
when LEVEL2_STONE.take with flame_dungeon.is_flamed(pc.get_map_index()) and item.vnum == LEVEL2_KEY and d.getf("level") == 12 begin -- 2<><32><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
local i = number(1, 5) -- 5<><35><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><>¥ <20><><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
notice_multiline(gameforge.flame_dungeon._440_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._450_say)
|
||||
end
|
||||
end
|
||||
|
||||
when LEVEL4_TARGET.kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 14 begin
|
||||
notice_multiline(gameforge.flame_dungeon._460_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
end
|
||||
|
||||
when kill with flame_dungeon.is_flamed(pc.get_map_index()) and d.getf("level") == 15 begin -- 5<><35><EFBFBD><EFBFBD> <20><><EFBFBD>μ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
local i = number(1, 30) -- 30<33><30><EFBFBD><EFBFBD> 1 Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if i == 1 then
|
||||
game.drop_item (LEVEL5_REALKEY, 1)
|
||||
end
|
||||
end
|
||||
when LEVEL5_STONE.take with flame_dungeon.is_flamed(d.get_map_index()) and item.vnum == LEVEL5_REALKEY and d.getf("level") == 15 begin -- 5<><35><EFBFBD><EFBFBD> <20><>¥<EFBFBD><C2A5><EFBFBD><EFBFBD> <20>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD><EFBFBD>
|
||||
local setting = flame_dungeon.setting()
|
||||
if npc.get_vid() == d.get_unique_vid("stone5_1") then -- ù<><C3B9>° <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>ڸ<EFBFBD><DAB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._470_say)
|
||||
d.setf("stonekill",2) -- 2<><32> <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BF><EFBFBD>
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_2") then
|
||||
if d.getf("stonekill") == 2 then -- 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>˵<EFBFBD> 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>踦 <20>Կ<EFBFBD><D4BF><EFBFBD> <20><>
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._480_say)
|
||||
d.setf("stonekill",3)
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("2<><32>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_3") then
|
||||
if d.getf("stonekill") == 3 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._500_say)
|
||||
d.setf("stonekill",4)
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("3<><33>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_4") then
|
||||
if d.getf("stonekill") == 4 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._510_say)
|
||||
d.setf("stonekill",5)
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("4<><34>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_5") then
|
||||
if d.getf("stonekill") == 5 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._520_say)
|
||||
d.setf("stonekill",6)
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("5<><35>")
|
||||
end
|
||||
elseif npc.get_vid() == d.get_unique_vid("stone5_6") then
|
||||
if d.getf("stonekill") == 6 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._530_say)
|
||||
d.setf("stonekill",7)
|
||||
if d.count_monster() < LEVEL5_GEN_LIMIT then
|
||||
d.regen_file (MOB_REGEN_FILE_PATH.."fd_e.txt")
|
||||
end
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("6<><36>")
|
||||
end
|
||||
else
|
||||
if d.getf("stonekill") == 7 then
|
||||
npc.purge()
|
||||
item.remove()
|
||||
notice_multiline(gameforge.flame_dungeon._440_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
else
|
||||
item.remove()
|
||||
say(gameforge.flame_dungeon._490_say)
|
||||
-- say("7<><37>")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when LEVEL6_TARGET.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==16 begin -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
notice_multiline(gameforge.flame_dungeon._540_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._430_notice,d.notice)
|
||||
flame_dungeon.level_clear()
|
||||
end
|
||||
|
||||
when FINAL_BOSS.kill with flame_dungeon.is_flamed(d.get_map_index()) and d.getf("level") ==17 begin -- <20><><EFBFBD><EFBFBD> <20><EFBFBD><D7BF><EFBFBD><EFBFBD><EFBFBD>
|
||||
notice_multiline(gameforge.flame_dungeon._550_notice,d.notice)
|
||||
notice_multiline(gameforge.flame_dungeon._560_notice,d.notice)
|
||||
server_timer("dungeon_end_timer", 60,d.get_map_index())
|
||||
flame_dungeon.level_clear()
|
||||
|
||||
-- <20><>Ƽ<EFBFBD><C6BC> <20><>, <20>߸<EFBFBD>õ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ(104<30><34>, 105<30><35> <20><><EFBFBD><EFBFBD>Ʈ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ Ŭ<><C5AC><EFBFBD><EFBFBD> <20>ǵ<EFBFBD><C7B5><EFBFBD>.
|
||||
if party.is_party() then
|
||||
party.setf("flame_dungeon_boss_kill_count", 1)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
221
gamefiles/data/quest/forked_road.quest
Normal file
221
gamefiles/data/quest/forked_road.quest
Normal file
@ -0,0 +1,221 @@
|
||||
quest forked_road begin
|
||||
state start begin
|
||||
function enter_level (vnum1,vnum2)
|
||||
lv_range={}
|
||||
lv_range[1] ={15,39}
|
||||
lv_range[2] ={40,64}
|
||||
lv_range[3] ={65,84}
|
||||
lv_range[4] ={85,105}
|
||||
return lv_range [vnum1][vnum2]
|
||||
end
|
||||
when login with forked.isforkedmapindex( pc.get_map_index() ) == true begin
|
||||
if game.get_event_flag("threeway_war") == 0 then
|
||||
warp_to_village()
|
||||
else
|
||||
local noticeShow = false
|
||||
|
||||
if forked.is_registered_user() == false then
|
||||
forked.register_user()
|
||||
forked.setdeadcount()
|
||||
pc.remove_item(50089)
|
||||
noticeShow = true
|
||||
end
|
||||
|
||||
if forked.getdeadcount() <= 0 then
|
||||
warp_to_village()
|
||||
elseif true == noticeShow then
|
||||
if forked.issungzimapindex( pc.get_map_index() ) == true then
|
||||
say( locale.forked_condition2 )
|
||||
say( locale.NOTICE_COLOR..locale.forked_rule_sungzi )
|
||||
else
|
||||
say( locale.forked_condition )
|
||||
say( locale.NOTICE_COLOR..locale.forked_rule )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 11001.chat.locale.forked_man_chat or 11003.chat.locale.forked_man_chat or 11005.chat.locale.forked_man_chat begin
|
||||
if game.get_event_flag("threeway_war") == 0 then
|
||||
say(locale.forked_man_say_cant)
|
||||
else
|
||||
say(locale.forked_man_say)
|
||||
|
||||
local s = select(locale.forked_enter, locale.forked_no_enter)
|
||||
local min = game.get_event_flag("threeway_war_level_min")
|
||||
local max = game.get_event_flag("threeway_war_level_max")
|
||||
|
||||
if s == 1 then
|
||||
if pc.level < min or pc.level > max then
|
||||
say_title(gameforge.forked_road._10_sayTitle)
|
||||
say_reward(string.format(gameforge.forked_road._20_sayReward, min, max))
|
||||
return
|
||||
end
|
||||
|
||||
local canJoin = false
|
||||
|
||||
if (pc.getempire() == 1 and game.get_event_flag("threeway_war_open_gate1" ) != 0) or
|
||||
(pc.getempire() == 2 and game.get_event_flag("threeway_war_open_gate2" ) != 0) or
|
||||
(pc.getempire() == 3 and game.get_event_flag("threeway_war_open_gate3" ) != 0) then
|
||||
canJoin = true
|
||||
else
|
||||
say( locale.forked_man_say_you_cant2 )
|
||||
end
|
||||
|
||||
if true == canJoin then
|
||||
pc.warp( forked.get_pass_start_pos() )
|
||||
else
|
||||
if pc.getempire() == 1 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._30_say)
|
||||
elseif pc.getempire() == 2 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._40_say)
|
||||
elseif pc.getempire() == 3 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._50_say)
|
||||
else
|
||||
say(locale.forked_man_say_you_cant2 )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 1306.kill or 1308.kill or 1309.kill or 1310.kill with forked.isforkedmapindex(pc.get_map_index()) == true begin
|
||||
game.drop_item(50089, 1)
|
||||
|
||||
if pc.getempire() == 1 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._30_say)
|
||||
elseif pc.getempire() == 2 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._40_say)
|
||||
elseif pc.getempire() == 3 then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.forked_road._50_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 1902.kill or 1904.kill or 1905.kill or 1906.kill with forked.issungzimapindex(pc.get_map_index()) == true begin
|
||||
if 0 == game.get_event_flag("threeway_war") then
|
||||
return
|
||||
end
|
||||
|
||||
local remainBossCount = game.get_event_flag("threeway_war_boss_count") - 1
|
||||
|
||||
game.set_event_flag("threeway_war_boss_count", remainBossCount)
|
||||
|
||||
if remainBossCount > 1 then
|
||||
return
|
||||
end
|
||||
|
||||
game.set_event_flag("threeway_war", 0)
|
||||
|
||||
local nation = { "Shinsoo","Chunjo","Jinno" }
|
||||
notice_all(string.format(gameforge.forked_road._70_notice_all, nation[pc.getempire()] ))
|
||||
|
||||
warp_all_to_village(forked.getsungzimapindex(), 30)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(1), 30)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(2), 30)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(3), 30)
|
||||
end
|
||||
|
||||
when 20081.take with item.vnum == 50089 begin
|
||||
say_in_map(pc.get_map_index(), locale.forked_open_gate)
|
||||
npc.purge()
|
||||
item.remove()
|
||||
|
||||
forked.initkillcount()
|
||||
|
||||
if pc.getempire() == 1 then
|
||||
game.set_event_flag("threeway_war_open_gate1", 0)
|
||||
notice_multiline(gameforge.forked_road._80_notice_all,notice_all)
|
||||
elseif pc.getempire() == 2 then
|
||||
game.set_event_flag("threeway_war_open_gate2", 0)
|
||||
notice_multiline(gameforge.forked_road._90_notice_all,notice_all)
|
||||
elseif pc.getempire() == 3 then
|
||||
game.set_event_flag("threeway_war_open_gate3", 0)
|
||||
notice_multiline(gameforge.forked_road._100_notice_all,notice_all)
|
||||
else
|
||||
say(locale.forked_man_say_you_cant2 )
|
||||
end
|
||||
|
||||
local x, y = forked.get_sungzi_start_pos()
|
||||
forked.warp_all_in_map( pc.get_map_index(), forked.getsungzimapindex(), x, y, 10)
|
||||
end
|
||||
|
||||
when 11001.chat.gameforge.forked_road._110_npcChat or 11003.chat.gameforge.forked_road._110_npcChat or 11005.chat.gameforge.forked_road._110_npcChat with pc.get_gm_level()== 5 begin
|
||||
local s = select(gameforge.forked_road._120_select, gameforge.forked_road._130_select, gameforge.locale.cancel)
|
||||
|
||||
if s == 1 then
|
||||
say("1> min "..forked_road.enter_level(1,1).." max "..forked_road.enter_level(1,2))
|
||||
say("2> min "..forked_road.enter_level(2,1).." max "..forked_road.enter_level(2,2))
|
||||
say("3> min "..forked_road.enter_level(3,1).." max "..forked_road.enter_level(3,2))
|
||||
say("4> min "..forked_road.enter_level(4,1).." max "..forked_road.enter_level(4,2))
|
||||
say("input number")
|
||||
local choice = input_number("select player's level who will join ")
|
||||
|
||||
if choice > 4 or choice == 0 then
|
||||
say("Invalid number only 1 - 4 are allowed")
|
||||
return
|
||||
end
|
||||
|
||||
say(string.format(gameforge.forked_road._170_say, forked_road.enter_level(choice,1).." max level: "..forked_road.enter_level(choice,2)))
|
||||
local t = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
|
||||
if 1 == t then
|
||||
game.set_event_flag("threeway_war_choice", choice)
|
||||
game.set_event_flag("threeway_war_level_min",forked_road.enter_level(choice,1))
|
||||
game.set_event_flag("threeway_war_level_max",forked_road.enter_level(choice,2))
|
||||
|
||||
forked.purge_all_monsters()
|
||||
forked.initforked()
|
||||
|
||||
game.set_event_flag("threeway_war", 1)
|
||||
|
||||
--
|
||||
game.set_event_flag("threeway_war_dead_count", 25)
|
||||
|
||||
if true == is_test_server() then
|
||||
game.set_event_flag("threeway_war_kill_count", 5)
|
||||
else
|
||||
game.set_event_flag("threeway_war_kill_count", 250)
|
||||
end
|
||||
|
||||
game.set_event_flag("threeway_war_boss_count", 5)
|
||||
|
||||
game.set_event_flag("threeway_war_open_gate1", 1)
|
||||
game.set_event_flag("threeway_war_open_gate2", 1)
|
||||
game.set_event_flag("threeway_war_open_gate3", 1)
|
||||
|
||||
say("Event Started !!")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
--
|
||||
regen_in_map( forked.getpassmapindexbyempire(1), forked.getpasspathbyempire(1) .."regen00_"..choice..".txt" )
|
||||
regen_in_map( forked.getpassmapindexbyempire(1), forked.getpasspathbyempire(1) .."npc00.txt" )
|
||||
regen_in_map( forked.getpassmapindexbyempire(2), forked.getpasspathbyempire(2) .."regen00_"..choice..".txt" )
|
||||
regen_in_map( forked.getpassmapindexbyempire(2), forked.getpasspathbyempire(2) .."npc00.txt" )
|
||||
regen_in_map( forked.getpassmapindexbyempire(3), forked.getpasspathbyempire(3) .."regen00_"..choice..".txt" )
|
||||
regen_in_map( forked.getpassmapindexbyempire(3), forked.getpasspathbyempire(3) .."npc00.txt" )
|
||||
|
||||
notice_multiline(gameforge.forked_road._180_notice_all,notice_all)
|
||||
end
|
||||
elseif 2 == s then
|
||||
game.set_event_flag("threeway_war", 0)
|
||||
|
||||
notice_multiline(gameforge.forked_road._190_notice_all,notice_all)
|
||||
|
||||
forked.purge_all_monsters()
|
||||
|
||||
warp_all_to_village(forked.getsungzimapindex(), 1)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(1), 1)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(2), 1)
|
||||
warp_all_to_village(forked.getpassmapindexbyempire(3), 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
131
gamefiles/data/quest/fortune_telling.quest
Normal file
131
gamefiles/data/quest/fortune_telling.quest
Normal file
@ -0,0 +1,131 @@
|
||||
quest fortune_telling begin
|
||||
state start begin
|
||||
when oldwoman.chat.gameforge.fortune_telling._10_npcChat begin
|
||||
if pc.level<=20 then
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.fortune_telling._20_say)
|
||||
return
|
||||
end
|
||||
|
||||
if get_time()-pc.getqf("time") < 8*60*60 then
|
||||
local passed_time = get_time() - pc.getqf("time")
|
||||
say_title(gameforge.couple_ring._20_sayTitle)
|
||||
say(gameforge.fortune_telling._30_say)
|
||||
|
||||
wait()
|
||||
local idx = pc.getqf("idx")
|
||||
if idx!=0 then
|
||||
say_title(gameforge.fortune_telling._40_sayTitle)
|
||||
say(gameforge.fortune_telling._50_say)
|
||||
say(locale.fortune_words[idx][1])
|
||||
|
||||
wait()
|
||||
|
||||
if pc.getqf("talisman") == 0 and special.fortune_telling[idx][5] > 0 then
|
||||
local talisman_cost = special.fortune_telling[idx][5]
|
||||
say_title(gameforge.fortune_telling._40_sayTitle)
|
||||
say(gameforge.fortune_telling._60_say)
|
||||
|
||||
local s = select(gameforge.fortune_telling._70_select, gameforge.fortune_telling._80_select)
|
||||
if s == 1 then
|
||||
if pc.gold < talisman_cost then
|
||||
say_title(gameforge.fortune_telling._40_sayTitle)
|
||||
say(gameforge.fortune_telling._90_say)
|
||||
|
||||
pc.setqf("talisman", 0)
|
||||
else
|
||||
pc.give_item2(70052,1)
|
||||
pc.changegold(-talisman_cost)
|
||||
pc.setqf("talisman", 1)
|
||||
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local gold = 7777
|
||||
|
||||
say_title(gameforge.fortune_telling._100_sayTitle)
|
||||
|
||||
|
||||
say(gameforge.fortune_telling._110_say)
|
||||
local s = select(gameforge.fortune_telling._120_select, gameforge.fortune_telling._130_select)
|
||||
|
||||
if s == 2 then
|
||||
say_title(gameforge.fortune_telling._100_sayTitle)
|
||||
say(gameforge.fortune_telling._140_say)
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
local n = number(1, 10000)
|
||||
|
||||
local i
|
||||
local idx
|
||||
for i = 1, table.getn(special.fortune_telling) do
|
||||
if n<=special.fortune_telling[i][1] then
|
||||
idx = i
|
||||
break
|
||||
else
|
||||
n = n - special.fortune_telling[i][1]
|
||||
end
|
||||
end
|
||||
i = idx
|
||||
|
||||
say_title(gameforge.fortune_telling._100_sayTitle)
|
||||
say(locale.fortune_words[i][2])
|
||||
|
||||
local t = {}
|
||||
|
||||
n = 0
|
||||
local j
|
||||
for j = 2,4 do
|
||||
if special.fortune_telling[i][j] != 0 then
|
||||
n=n+1
|
||||
t[n] = j
|
||||
end
|
||||
end
|
||||
|
||||
if n > 0 then
|
||||
n = number(1, n)
|
||||
__give_char_priv(t[n]-1, special.fortune_telling[i][t[n]])
|
||||
end
|
||||
|
||||
pc.setqf("time", get_time())
|
||||
pc.setqf("idx", i)
|
||||
|
||||
if special.fortune_telling[i][5]>0 then
|
||||
wait()
|
||||
|
||||
say_title(gameforge.fortune_telling._100_sayTitle)
|
||||
say(locale.fortune_words[i][3])
|
||||
|
||||
local talisman_cost = special.fortune_telling[i][5]
|
||||
local s = select(gameforge.fortune_telling._150_select, gameforge.fortune_telling._160_select)
|
||||
if s == 1 then
|
||||
if pc.gold < talisman_cost then
|
||||
say(string.format(gameforge.fortune_telling._170_say, gold))
|
||||
pc.setqf("talisman", 0)
|
||||
|
||||
else
|
||||
pc.give_item2(70052,1)
|
||||
pc.changegold(-talisman_cost)
|
||||
pc.setqf("talisman", 1)
|
||||
|
||||
end
|
||||
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.fortune_telling._40_sayTitle)
|
||||
say(gameforge.fortune_telling._180_say)
|
||||
pc.setqf("talisman", 0)
|
||||
end
|
||||
end
|
||||
|
||||
end -- end_of_when
|
||||
end -- end_of_state
|
||||
end -- end_of_quest
|
44
gamefiles/data/quest/game_option.quest
Normal file
44
gamefiles/data/quest/game_option.quest
Normal file
@ -0,0 +1,44 @@
|
||||
quest game_option begin
|
||||
state start begin
|
||||
when login begin
|
||||
local val=0
|
||||
local msg = gameforge.game_option._100_say .. " "
|
||||
if pc.getqf("block_exchange") == 1 then
|
||||
msg = msg..gameforge.game_option._110_say
|
||||
val = val + 1
|
||||
end
|
||||
|
||||
if pc.getqf("block_guild_invite") == 1 then
|
||||
val = val + 4
|
||||
msg = msg .. gameforge.game_option._120_say .. " "
|
||||
end
|
||||
|
||||
if pc.getqf("block_messenger_invite") == 1 then
|
||||
msg = msg .. gameforge.game_option._130_say .. " "
|
||||
val = val + 16
|
||||
end
|
||||
|
||||
if pc.getqf("block_party_invite") == 1 then
|
||||
msg = msg .. gameforge.game_option._140_say .. " "
|
||||
val = val + 2
|
||||
end
|
||||
|
||||
if pc.getqf("block_party_request") == 1 then
|
||||
msg = msg .. gameforge.game_option._150_say .. " "
|
||||
val = val + 32
|
||||
end
|
||||
|
||||
if pc.getqf("block_whisper") == 1 then
|
||||
msg = msg .. gameforge.game_option._160_say .. " "
|
||||
val = val + 8
|
||||
end
|
||||
|
||||
if val != 0 then
|
||||
syschat(msg)
|
||||
end
|
||||
|
||||
pc.send_block_mode(val)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
186
gamefiles/data/quest/ghost_story.quest
Normal file
186
gamefiles/data/quest/ghost_story.quest
Normal file
@ -0,0 +1,186 @@
|
||||
quest ghost_story begin
|
||||
state start begin
|
||||
when 30121.chat.gameforge.ghost_story._020_npcChat with pc.get_map_index() == 73 begin
|
||||
local maindialog = 0
|
||||
local storymode = 0
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._030_say)
|
||||
repeat
|
||||
if pc.getqf("know_sura") == 1 then
|
||||
maindialog = select(gameforge.ghost_story._060_npcChat, gameforge.ghost_story._080_npcChat, gameforge.ghost_story._120_npcChat, gameforge.ghost_story._160_npcChat, gameforge.ghost_story._200_npcChat, gameforge.ghost_story._240_npcChat, gameforge.ghost_story._280_npcChat)
|
||||
if maindialog == 1 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._070_say)
|
||||
wait()
|
||||
elseif maindialog == 2 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._090_say )
|
||||
wait()
|
||||
elseif maindialog == 3 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._130_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._140_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._150_say)
|
||||
wait()
|
||||
elseif maindialog == 4 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._170_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._180_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._190_say)
|
||||
wait()
|
||||
elseif maindialog == 5 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._210_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._220_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._230_say)
|
||||
wait()
|
||||
elseif maindialog == 6 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._250_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._260_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._270_say)
|
||||
wait()
|
||||
else
|
||||
say(gameforge.ghost_story._290_say)
|
||||
end
|
||||
else
|
||||
maindialog = select(gameforge.ghost_story._060_npcChat, gameforge.ghost_story._040_npcChat)
|
||||
if maindialog == 1 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._070_say)
|
||||
wait()
|
||||
local subdialog1 = select(gameforge.ghost_story._080_npcChat)
|
||||
if subdialog1 == 1 then
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._090_say)
|
||||
pc.setqf("know_sura", 1)
|
||||
wait()
|
||||
end
|
||||
else
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._050_say)
|
||||
maindialog = 7
|
||||
end
|
||||
end
|
||||
until maindialog == 7
|
||||
return
|
||||
end
|
||||
when 30122.chat.gameforge.ghost_story._310_npcChat begin
|
||||
local maindialog = 0
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._320_say)
|
||||
repeat
|
||||
if pc.getqf("know_warrior") == 1 then
|
||||
maindialog = select(gameforge.ghost_story._350_npcChat, gameforge.ghost_story._370_npcChat, gameforge.ghost_story._390_npcChat, gameforge.ghost_story._430_npcChat, gameforge.ghost_story._480_npcChat)
|
||||
if maindialog == 1 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._360_say)
|
||||
wait()
|
||||
elseif maindialog == 2 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._380_say)
|
||||
wait()
|
||||
elseif maindialog == 3 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._400_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._410_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._420_say)
|
||||
wait()
|
||||
elseif maindialog == 4 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._440_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._450_say)
|
||||
storymode = select (gameforge.locale.levelup.prev_quest_go, gameforge.ghost_story._280_npcChat)
|
||||
if storymode == 2 then
|
||||
return
|
||||
end
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._460_say)
|
||||
wait()
|
||||
else
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._490_say)
|
||||
end
|
||||
else
|
||||
maindialog = select(gameforge.ghost_story._350_npcChat, gameforge.ghost_story._040_npcChat)
|
||||
if maindialog == 1 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._360_say)
|
||||
wait()
|
||||
local subdialog1 = select(gameforge.ghost_story._370_npcChat)
|
||||
if subdialog1 == 1 then
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._380_say)
|
||||
pc.setqf("know_warrior", 1)
|
||||
wait()
|
||||
end
|
||||
else
|
||||
say_title(gameforge.ghost_story._300_sayTitle)
|
||||
say(gameforge.ghost_story._050_say)
|
||||
maindialog = 5
|
||||
end
|
||||
end
|
||||
until maindialog == 5
|
||||
return
|
||||
end
|
||||
when 30121.chat.gameforge.ghost_story._100_npcChat with pc.get_map_index() == 73 begin
|
||||
say_title(gameforge.ghost_story._010_sayTitle)
|
||||
say(gameforge.ghost_story._110_say)
|
||||
end
|
||||
end
|
||||
end
|
30
gamefiles/data/quest/give_basic_weapon.quest
Normal file
30
gamefiles/data/quest/give_basic_weapon.quest
Normal file
@ -0,0 +1,30 @@
|
||||
quest give_basic_weapon begin
|
||||
state start begin
|
||||
when login begin
|
||||
if pc.getqf("basic_weapon") != 0 then -- old version support
|
||||
return
|
||||
end
|
||||
|
||||
local item_vnum = 10
|
||||
|
||||
if pc.job == 3 then -- shaman
|
||||
item_vnum = 7000
|
||||
elseif pc.job == 1 then -- assassin
|
||||
item_vnum = 1000
|
||||
end
|
||||
|
||||
local item_count = pc.countitem(item_vnum)
|
||||
local equip_weapon = pc.weapon
|
||||
if item_count == 0 and equip_weapon != item_vnum then
|
||||
pc.give_item2(item_vnum) -- jobtype weapon
|
||||
pc.give_item2(27001, 5) -- red potions
|
||||
set_state(__COMPLETE__)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
end
|
||||
end
|
||||
|
||||
|
23
gamefiles/data/quest/give_basic_weapon_new.quest
Normal file
23
gamefiles/data/quest/give_basic_weapon_new.quest
Normal file
@ -0,0 +1,23 @@
|
||||
quest give_basic_weapon begin
|
||||
state start begin
|
||||
function basic_item(job,index)
|
||||
item_list={}
|
||||
item_list[0] = {50187}
|
||||
item_list[1] = {50212}
|
||||
item_list[2] = {50187}
|
||||
item_list[3] = {50213}
|
||||
return item_list[job][index]
|
||||
end
|
||||
|
||||
when login begin
|
||||
if pc.getqf("basic_weapon") == 0 then
|
||||
pc.setqf("basic_weapon", 1)
|
||||
|
||||
if pc.countitem(item) == 0 and pc.weapon != item then
|
||||
pc.give_item2(give_basic_weapon.basic_item(pc.job,1) )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
195
gamefiles/data/quest/goldbar.quest
Normal file
195
gamefiles/data/quest/goldbar.quest
Normal file
@ -0,0 +1,195 @@
|
||||
quest goldbar_shop begin
|
||||
state start begin
|
||||
when 20020.chat.gameforge.goldbar._10_npcChat begin
|
||||
if pc.get_level() < 30 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._30_say)
|
||||
wait()
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.goldbar._40_sayReward)
|
||||
return
|
||||
end
|
||||
if game.get_event_flag("gold_trade_enable") == 0 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._50_say)
|
||||
wait()
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.goldbar._60_sayReward)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._70_say)
|
||||
|
||||
local s = select(gameforge.goldbar._80_select, gameforge.goldbar._90_select)
|
||||
|
||||
if s == 1 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._100_say)
|
||||
|
||||
wait()
|
||||
|
||||
local interval = game.get_event_flag("gold_trade_cycle")
|
||||
local unit = ""
|
||||
if interval <= 0 then interval = 360 end
|
||||
|
||||
if interval >= 60 then
|
||||
interval = interval / 60
|
||||
unit = gameforge.goldbar._104_say
|
||||
math.ceil(interval)
|
||||
else
|
||||
unit = gameforge.goldbar._108_say
|
||||
end
|
||||
|
||||
if interval < 1 then interval = 1 end
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(string.format(gameforge.goldbar._110_say, interval, unit))
|
||||
say(gameforge.goldbar._120_say)
|
||||
else
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._130_say)
|
||||
end
|
||||
|
||||
setstate(trade_goldbar)
|
||||
end
|
||||
end
|
||||
|
||||
state trade_goldbar begin
|
||||
when 20020.chat.gameforge.goldbar._140_npcChat begin
|
||||
if pc.get_level() < 30 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._150_say)
|
||||
setstate(start)
|
||||
return
|
||||
end
|
||||
if game.get_event_flag("gold_trade_enable") == 0 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._160_say)
|
||||
say_reward(gameforge.goldbar._170_sayReward)
|
||||
return
|
||||
end
|
||||
|
||||
local nexttime = pc.getqf("gold_buy_next_time")
|
||||
|
||||
local interval = game.get_event_flag("gold_trade_cycle")
|
||||
local unit = ""
|
||||
|
||||
if interval <= 0 then interval = 360 end
|
||||
|
||||
if get_time() < nexttime then
|
||||
nexttime = (nexttime / 60) - (get_time()/60)
|
||||
|
||||
if nexttime >= 60 then
|
||||
unit = gameforge.goldbar._104_say
|
||||
nexttime = nexttime / 60
|
||||
math.ceil(nexttime)
|
||||
else
|
||||
unit = gameforge.goldbar._108_say
|
||||
end
|
||||
|
||||
if nexttime < 1 then nexttime = 1 end
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._180_say)
|
||||
say(string.format(gameforge.goldbar._190_say, nexttime, unit))
|
||||
else
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._200_say)
|
||||
|
||||
local s = select(gameforge.buy_fishrod._40_select, gameforge.buy_fishrod._50_select)
|
||||
if s == 1 then
|
||||
if pc.money >= 2200000 then
|
||||
local goldbar_count = pc.count_item(80007)
|
||||
char_log(0, "GOLDBARREN", "KAUFEN ("..goldbar_count..")")
|
||||
pc.changemoney(-2200000)
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._210_say)
|
||||
pc.give_item2("80007", 1)
|
||||
pc.setqf("gold_buy_next_time", get_time() + time_min_to_sec(interval))
|
||||
else
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._220_say)
|
||||
end
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._230_say)
|
||||
else
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20020.chat.gameforge.goldbar._240_npcChat with pc.is_gm() begin
|
||||
say(gameforge.goldbar._250_say)
|
||||
pc.setqf("gold_buy_next_time", 0)
|
||||
pc.setqf("gold_sell_next_time", 0)
|
||||
end
|
||||
when 20020.chat.gameforge.goldbar._260_npcChat begin
|
||||
if pc.get_level() < 30 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._270_say)
|
||||
setstate(start)
|
||||
return
|
||||
end
|
||||
if game.get_event_flag("gold_trade_enable") == 0 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._280_say)
|
||||
say_reward(gameforge.goldbar._290_sayReward)
|
||||
return
|
||||
end
|
||||
|
||||
local nexttime = pc.getqf("gold_sell_next_time")
|
||||
|
||||
local interval = game.get_event_flag("gold_trade_cycle")
|
||||
local unit = ""
|
||||
|
||||
if interval <= 0 then interval = 360 end
|
||||
|
||||
if get_time() < nexttime then
|
||||
nexttime = (nexttime / 60) - (get_time()/60)
|
||||
|
||||
if nexttime >= 60 then
|
||||
unit = gameforge.goldbar._104_say
|
||||
nexttime = nexttime / 60
|
||||
math.ceil(nexttime)
|
||||
else
|
||||
unit = gameforge.goldbar._108_say
|
||||
end
|
||||
|
||||
if nexttime < 1 then nexttime = 1 end
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._300_say)
|
||||
say(string.format(gameforge.goldbar._310_say, nexttime, unit))
|
||||
else
|
||||
if pc.count_item(80007) <= 0 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._320_say)
|
||||
else
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._330_say)
|
||||
|
||||
local s = select(gameforge.goldbar._340_select, gameforge.goldbar._350_select)
|
||||
|
||||
if s == 1 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._360_say)
|
||||
|
||||
local goldbar_count = pc.count_item(80007)
|
||||
if goldbar_count >= 1 then
|
||||
char_log(0, "GOLDBARREN", "VERKAUFEN("..goldbar_count..")")
|
||||
pc.changemoney(2000000)
|
||||
pc.remove_item(80007)
|
||||
else
|
||||
char_log(0, "GOLDBARREN", "SELL_HACK")
|
||||
end
|
||||
pc.setqf("gold_sell_next_time", get_time() + time_min_to_sec(interval))
|
||||
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.goldbar._20_sayTitle)
|
||||
say(gameforge.goldbar._370_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
78
gamefiles/data/quest/goto_empire_castle.quest
Normal file
78
gamefiles/data/quest/goto_empire_castle.quest
Normal file
@ -0,0 +1,78 @@
|
||||
quest goto_empire_castle begin
|
||||
state start begin
|
||||
when 20097.chat.gameforge.goto_empire_castle._10_npcChat begin
|
||||
|
||||
local empire = pc.get_empire()
|
||||
if empire==1 then
|
||||
a= select(gameforge.goto_empire_castle._20_select, gameforge.goto_empire_castle._30_select, gameforge.goto_empire_castle._35_select, gameforge.locale.cancel)
|
||||
if 1==a then
|
||||
|
||||
say(gameforge.goto_empire_castle._40_say)
|
||||
wait()
|
||||
pc.warp(975200, 133000)
|
||||
elseif 2==a then
|
||||
say(gameforge.goto_empire_castle._50_say)
|
||||
wait()
|
||||
pc.warp(978000, 199500)
|
||||
elseif 3==a then
|
||||
say(gameforge.goto_empire_castle._60_say)
|
||||
wait()
|
||||
pc.warp(967900, 199400)
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
say(gameforge.goto_empire_castle._70_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 20098.chat.gameforge.goto_empire_castle._80_npcChat begin
|
||||
|
||||
local empire = pc.get_empire()
|
||||
if empire==2 then
|
||||
a= select(gameforge.goto_empire_castle._20_select, gameforge.goto_empire_castle._30_select, gameforge.goto_empire_castle._35_select, gameforge.locale.cancel)
|
||||
if 1==a then
|
||||
say(gameforge.goto_empire_castle._90_say)
|
||||
wait()
|
||||
pc.warp(977400, 150100)
|
||||
elseif 2==a then
|
||||
say(gameforge.goto_empire_castle._100_say)
|
||||
wait()
|
||||
pc.warp(977200, 185000)
|
||||
elseif 3==a then
|
||||
say(gameforge.goto_empire_castle._60_say)
|
||||
wait()
|
||||
pc.warp(925600, 201200)
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
say(gameforge.goto_empire_castle._110_say)
|
||||
end
|
||||
end
|
||||
when 20099.chat.gameforge.goto_empire_castle._10_npcChat begin
|
||||
|
||||
local empire = pc.get_empire()
|
||||
if empire==3 then
|
||||
a= select(gameforge.goto_empire_castle._20_select, gameforge.goto_empire_castle._30_select, gameforge.goto_empire_castle._35_select, gameforge.locale.cancel)
|
||||
if 1==a then
|
||||
say(gameforge.goto_empire_castle._90_say)
|
||||
wait()
|
||||
pc.warp(1018900, 148400)
|
||||
elseif 2==a then
|
||||
say(gameforge.goto_empire_castle._100_say)
|
||||
wait()
|
||||
pc.warp(1019000, 200200)
|
||||
elseif 3==a then
|
||||
say(gameforge.goto_empire_castle._60_say)
|
||||
wait()
|
||||
pc.warp(923900, 183600)
|
||||
else
|
||||
return
|
||||
end
|
||||
else
|
||||
say(gameforge.goto_empire_castle._120_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
65
gamefiles/data/quest/guild_building.quest
Normal file
65
gamefiles/data/quest/guild_building.quest
Normal file
@ -0,0 +1,65 @@
|
||||
quest guild_building begin
|
||||
state start begin
|
||||
when 20040.click begin
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._20_say)
|
||||
|
||||
local s = select(locale.yes, locale.no)
|
||||
|
||||
if s == 1 then
|
||||
if not pc.is_guild_master() then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._30_say)
|
||||
elseif building.has_land(pc.get_guild()) then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._40_say)
|
||||
else
|
||||
local land_id = building.get_land_id(pc.get_map_index(), pc.get_x()*100, pc.get_y()*100)
|
||||
|
||||
if land_id == 0 then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._50_say)
|
||||
else
|
||||
local price, owner, guild_level_limit = building.get_land_info(land_id)
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(string.format(gameforge.guild_building._60_say, guild_level_limit, price..locale.gold))
|
||||
|
||||
if guild.level(pc.get_guild()) < guild_level_limit then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._70_say)
|
||||
else
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._80_say)
|
||||
|
||||
s = select(locale.yes, locale.no)
|
||||
|
||||
if s == 1 then
|
||||
local price, owner, guild_level_limit = building.get_land_info(land_id)
|
||||
|
||||
if owner!= 0 then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._90_say)
|
||||
elseif pc.gold < price then
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._100_say)
|
||||
else
|
||||
pc.changegold(-price)
|
||||
building.set_land_owner(land_id, pc.get_guild())
|
||||
notice_multiline(string.format(gameforge.guild_building._105_say, guild.name(pc.get_guild())),notice)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._110_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
say_title(gameforge.guild_building._10_sayTitle)
|
||||
say(gameforge.guild_building._110_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
98
gamefiles/data/quest/guild_building_alter_of_power.quest
Normal file
98
gamefiles/data/quest/guild_building_alter_of_power.quest
Normal file
@ -0,0 +1,98 @@
|
||||
quest alter_of_power begin
|
||||
state start begin
|
||||
when 20077.click with npc.get_guild() == pc.get_guild() and pc.is_guild_master() begin
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._20_say)
|
||||
|
||||
if pc.getqf("build_level") == 0 then
|
||||
pc.setqf("build_level", guild.level(pc.get_guild()))
|
||||
end
|
||||
|
||||
wait()
|
||||
|
||||
say(gameforge.guild_building_alter_of_power._30_say)
|
||||
|
||||
if pc.getqf("build_level") < guild.level(pc.get_guild()) or guild.level(pc.get_guild()) >= 20 then
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._40_say)
|
||||
say_reward(gameforge.guild_building_alter_of_power._50_sayReward)
|
||||
|
||||
local s = select(gameforge.guild_building_alter_of_power._60_select, gameforge.guild_building_alter_of_power._70_select)
|
||||
|
||||
if s == 1 then
|
||||
if pc.count_item(90010) >= 10 and pc.count_item(90012) >= 15 and pc.count_item(90011) >= 10 and pc.get_gold() >= 25000000 then
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._80_say)
|
||||
building.reconstruct(14062)
|
||||
pc.setqf("build_level", guild.level(pc.get_guild()))
|
||||
char_log(0, "GUILD_BUILDING", "alter_of_power 14062 constructed")
|
||||
|
||||
pc.change_gold(-25000000)
|
||||
pc.remove_item("90010", 10)
|
||||
pc.remove_item("90011", 10)
|
||||
pc.remove_item("90012", 15)
|
||||
else
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._90_say)
|
||||
end
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._100_say)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._110_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 20078.click with npc.get_guild() == pc.get_guild() and pc.is_guild_master() begin
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._120_say)
|
||||
|
||||
wait()
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._130_say)
|
||||
|
||||
if pc.getqf("build_level") < guild.level(pc.get_guild()) or guild.level(pc.get_guild()) >= 20 then
|
||||
say(gameforge.guild_building_alter_of_power._140_say)
|
||||
say_reward(gameforge.guild_building_alter_of_power._150_sayReward)
|
||||
|
||||
local s = select(gameforge.guild_building_alter_of_power._60_select, gameforge.guild_building_alter_of_power._70_select)
|
||||
|
||||
if s == 1 then
|
||||
if pc.count_item(90010) >= 15 and pc.count_item(90012) >= 20 and pc.count_item(90011) >= 15 and pc.get_gold() >= 30000000 then
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._160_say)
|
||||
building.reconstruct(14063)
|
||||
pc.setqf("build_level", guild.level(pc.get_guild()))
|
||||
char_log(0, "GUILD_BUILDING", "alter_of_power 14063 constructed")
|
||||
|
||||
pc.change_gold(-30000000)
|
||||
pc.remove_item("90010", 15)
|
||||
pc.remove_item("90011", 20)
|
||||
pc.remove_item("90012", 20)
|
||||
else
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._90_say)
|
||||
end
|
||||
elseif s == 2 then
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._100_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20079.click with npc.get_guild() == pc.get_guild() and pc.is_guild_master() begin
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._170_say)
|
||||
end
|
||||
|
||||
when 20077.click or 20078.click or 20079.click with npc.get_guild() == pc.get_guild() and pc.is_guild_master()!= true begin
|
||||
say_title(gameforge.guild_building_alter_of_power._10_sayTitle)
|
||||
say(gameforge.guild_building_alter_of_power._180_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
256
gamefiles/data/quest/guild_building_melt.quest
Normal file
256
gamefiles/data/quest/guild_building_melt.quest
Normal file
@ -0,0 +1,256 @@
|
||||
quest guild_building_melt begin
|
||||
state start begin
|
||||
function GetOreRefineCost(cost)
|
||||
if pc.empire != npc.empire then
|
||||
return 3 * cost
|
||||
end
|
||||
if pc.get_guild() == npc.get_guild() then
|
||||
return cost * 0.9
|
||||
end
|
||||
return cost
|
||||
end
|
||||
|
||||
function GetOreRefineGoodPct()
|
||||
return 60
|
||||
end
|
||||
|
||||
function GetOreRefineBadPct()
|
||||
return 30
|
||||
end
|
||||
|
||||
function GetMyRefineNum(race)
|
||||
return({
|
||||
[20060] = 50601,
|
||||
[20061] = 50602,
|
||||
[20062] = 50603,
|
||||
[20063] = 50604,
|
||||
[20064] = 50605,
|
||||
[20065] = 50606,
|
||||
[20066] = 50607,
|
||||
[20067] = 50608,
|
||||
[20068] = 50609,
|
||||
[20069] = 50610,
|
||||
[20070] = 50611,
|
||||
[20071] = 50612,
|
||||
[20072] = 50613,
|
||||
[33009] = 50614,
|
||||
[33010] = 50615,
|
||||
[33011] = 50616,
|
||||
[33012] = 50617,
|
||||
[33013] = 50618
|
||||
})[race]
|
||||
--return race - 20060 + 50601 or race - 33009 + 50614
|
||||
end
|
||||
|
||||
function IsRefinableRawOre(vnum)
|
||||
return vnum >= 50601 and vnum <= 50618
|
||||
end
|
||||
|
||||
function DoRefineDiamond(pct)
|
||||
local from_postfix
|
||||
local from_name = item_name(item.vnum)
|
||||
local to_vnum = item.vnum + 20
|
||||
local to_name = item_name(to_vnum)
|
||||
local to_postfix
|
||||
|
||||
say(gameforge.guild_building_melt._10_say)
|
||||
|
||||
if item.count >= 100 then
|
||||
say(string.format(gameforge.guild_building_melt._20_say, pct, guild_building_melt.GetOreRefineCost(10000)))
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 1 then
|
||||
if pc.get_gold() < guild_building_melt.GetOreRefineCost(10000) then
|
||||
say(gameforge.guild_building_melt._30_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.diamond_refine(10000, pct) then
|
||||
say(gameforge.guild_building_melt._40_say)
|
||||
say_item(to_name, to_vnum, "")
|
||||
else
|
||||
say(gameforge.guild_building_melt._50_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.guild_building_melt._60_say,from_name))
|
||||
end
|
||||
end
|
||||
function DoRefine(pct)
|
||||
local from_postfix
|
||||
local from_name = item_name(item.vnum)
|
||||
local to_vnum = item.vnum + 20
|
||||
local to_name = item_name(to_vnum)
|
||||
local to_postfix
|
||||
|
||||
say(string.format(gameforge.guild_building_melt._70_say, from_name , to_name ))
|
||||
if item.count >= 100 then
|
||||
say(string.format(gameforge.guild_building_melt._20_say, pct, guild_building_melt.GetOreRefineCost(3000)))
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 1 then
|
||||
if pc.get_gold() < guild_building_melt.GetOreRefineCost(3000) then
|
||||
say(gameforge.guild_building_melt._30_say)
|
||||
return
|
||||
end
|
||||
|
||||
local selected_item_cell = select_item()
|
||||
if selected_item_cell == 0 then
|
||||
say(gameforge.guild_building_melt._90_say)
|
||||
return
|
||||
end
|
||||
local old_item = item.get_id()
|
||||
|
||||
if (not item.select_cell(selected_item_cell)) or item.vnum < 28000 or item.vnum >= 28300 then
|
||||
say(gameforge.guild_building_melt._100_say)
|
||||
return
|
||||
end
|
||||
|
||||
item. select(old_item , old_item )
|
||||
|
||||
if pc.ore_refine(3000, pct, selected_item_cell) then
|
||||
say(gameforge.guild_building_melt._120_say)
|
||||
say_item(to_name, to_vnum, "")
|
||||
else
|
||||
say(gameforge.guild_building_melt._50_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.guild_building_melt._60_say,from_name))
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.take or 20061.take or 20062.take or 20063.take or 20064.take or 20065.take or 20066.take or
|
||||
20067.take or 20068.take or 20069.take or 20070.take or 20071.take or 20072.take or
|
||||
33009.take or 33010.take or 33011.take or 33012.take or 33013.take
|
||||
with guild_building_melt.GetMyRefineNum(npc.race) == item.vnum
|
||||
begin
|
||||
if item.vnum == 50601 then
|
||||
guild_building_melt.DoRefineDiamond(guild_building_melt.GetOreRefineGoodPct())
|
||||
else
|
||||
guild_building_melt.DoRefine(guild_building_melt.GetOreRefineGoodPct())
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.take or 20061.take or 20062.take or 20063.take or 20064.take or 20065.take or 20066.take or
|
||||
20067.take or 20068.take or 20069.take or 20070.take or 20071.take or 20072.take or
|
||||
33009.take or 33010.take or 33011.take or 33012.take or 33013.take
|
||||
with guild_building_melt.IsRefinableRawOre(item.vnum) and
|
||||
guild_building_melt.GetMyRefineNum(npc.race) != item.vnum
|
||||
begin
|
||||
if item.vnum == 50601 then
|
||||
guild_building_melt.DoRefineDiamond(guild_building_melt.GetOreRefineBadPct())
|
||||
else
|
||||
guild_building_melt.DoRefine(guild_building_melt.GetOreRefineBadPct())
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.click or 20061.click or 20062.click or 20063.click or 20064.click or 20065.click or 20066.click or
|
||||
20067.click or 20068.click or 20069.click or 20070.click or 20071.click or 20072.click or
|
||||
33009.click or 33010.click or 33011.click or 33012.click or 33013.click
|
||||
with npc.get_guild() == pc.get_guild() and pc.isguildmaster()
|
||||
begin
|
||||
say_npc()
|
||||
say(gameforge.guild_building_melt._130_say)
|
||||
wait()
|
||||
if pc.get_gold() < 3000000 then
|
||||
say(gameforge.guild_building_melt._140_say)
|
||||
else
|
||||
-- say(gameforge.guild_building_melt._150_say)
|
||||
|
||||
-- local sel = 0
|
||||
|
||||
-- local timetable1 = {gameforge.guild_building_melt._180_say,
|
||||
-- gameforge.guild_building_melt._190_say,
|
||||
-- gameforge.guild_building_melt._200_say,
|
||||
-- gameforge.guild_building_melt._210_say,
|
||||
-- gameforge.guild_building_melt._220_say,
|
||||
-- gameforge.guild_building_melt._230_say,
|
||||
-- gameforge.locale.levelup.prev_quest_go,
|
||||
-- gameforge.guild_building_melt._170_say}
|
||||
-- local valuetable1 = {14043, 14045, 14046, 14047, 14048, 14049, 0, -1}
|
||||
|
||||
-- local timetable2 = {gameforge.guild_building_melt._240_say,
|
||||
-- gameforge.guild_building_melt._250_say,
|
||||
-- gameforge.guild_building_melt._260_say,
|
||||
-- gameforge.guild_building_melt._270_say,
|
||||
-- gameforge.guild_building_melt._280_say,
|
||||
-- gameforge.guild_building_melt._290_say,
|
||||
-- gameforge.locale.levelup.prev_quest_go,
|
||||
-- gameforge.guild_building_melt._170_say}
|
||||
-- local valuetable2 = {14050, 14051, 14052, 14053, 14054, 14055, 0, -1}
|
||||
|
||||
-- repeat
|
||||
-- local s = select_table(timetable1)
|
||||
-- sel = valuetable1[s]
|
||||
-- if sel == 0 then
|
||||
-- local s = select_table(timetable2)
|
||||
-- sel = valuetable2[s]
|
||||
-- end
|
||||
-- until sel != 0
|
||||
-- if sel != -1 then
|
||||
-- npc_num = sel + 20060 - 14043
|
||||
-- if npc_num == npc.get_race() then
|
||||
-- say(gameforge.guild_building_melt._160_say)
|
||||
-- else
|
||||
-- pc.changegold(-3000000)
|
||||
-- building.reconstruct(sel)
|
||||
-- end
|
||||
-- end
|
||||
|
||||
local sel = 0
|
||||
local timetable1 = {gameforge.guild_building_melt._180_say,
|
||||
gameforge.guild_building_melt._190_say,
|
||||
gameforge.guild_building_melt._200_say,
|
||||
gameforge.guild_building_melt._210_say,
|
||||
gameforge.guild_building_melt._220_say,
|
||||
gameforge.guild_building_melt._230_say,
|
||||
gameforge.locale.levelup.prev_quest_go,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable1 = {14043, 14045, 14046, 14047, 14048, 14049, 1, 3}
|
||||
local timetable2 = {gameforge.guild_building_melt._240_say,
|
||||
gameforge.guild_building_melt._250_say,
|
||||
gameforge.guild_building_melt._260_say,
|
||||
gameforge.guild_building_melt._270_say,
|
||||
gameforge.guild_building_melt._280_say,
|
||||
gameforge.locale.levelup.prev_quest_go,
|
||||
gameforge.map_warp._96_select,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable2 = {14050, 10451, 14052, 14053, 14054, 2, 0, 3}
|
||||
local timetable3 = {gameforge.guild_building_melt._290_say,
|
||||
"Soul crystal",
|
||||
"Rubin",
|
||||
"Garnet",
|
||||
"Smaragd",
|
||||
"Sapphire",
|
||||
gameforge.map_warp._96_select,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable3 = {14055, 26992, 26993, 26994, 26995, 26996, 1, 3}
|
||||
repeat
|
||||
say_npc()
|
||||
say(gameforge.guild_building_melt._150_say)
|
||||
if sel == 0 then
|
||||
local s = select_table(timetable1)
|
||||
sel = valuetable1[s]
|
||||
elseif sel == 1 then
|
||||
local s = select_table(timetable2)
|
||||
sel = valuetable2[s]
|
||||
elseif sel == 2 then
|
||||
local s = select_table(timetable3)
|
||||
sel = valuetable3[s]
|
||||
end
|
||||
until sel > 2
|
||||
if sel != 3 then
|
||||
npc_num = sel + 20060 - 14043
|
||||
--chat("#debug#sel:"..sel.."#npc_num:"..npc_num)
|
||||
if npc_num == npc.get_race() then
|
||||
say(gameforge.guild_building_melt._160_say)
|
||||
else
|
||||
pc.changegold(-3000000)
|
||||
building.reconstruct(sel)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
33
gamefiles/data/quest/guild_building_npc.quest
Normal file
33
gamefiles/data/quest/guild_building_npc.quest
Normal file
@ -0,0 +1,33 @@
|
||||
quest guild_building_npc begin
|
||||
state start begin
|
||||
when 20044.click begin
|
||||
if npc.get_guild() == pc.get_guild() then
|
||||
say_title(gameforge.guild_building_npc._10_sayTitle)
|
||||
say(gameforge.guild_building_npc._20_say)
|
||||
else
|
||||
say_title(gameforge.guild_building_npc._10_sayTitle)
|
||||
say(gameforge.guild_building_npc._30_say)
|
||||
end
|
||||
end
|
||||
when 20045.click begin
|
||||
if npc.get_guild() == pc.get_guild() then
|
||||
say_title(gameforge.guild_building_npc._40_sayTitle)
|
||||
say(gameforge.guild_building_npc._50_say)
|
||||
else
|
||||
say_title(gameforge.guild_building_npc._40_sayTitle)
|
||||
say(gameforge.guild_building_npc._60_say)
|
||||
end
|
||||
end
|
||||
when 20046.click begin
|
||||
if npc.get_guild() == pc.get_guild() then
|
||||
say_title(gameforge.guild_building_npc._70_sayTitle)
|
||||
say(gameforge.guild_building_npc._80_say)
|
||||
else
|
||||
say_title(gameforge.guild_building_npc._70_sayTitle)
|
||||
say(gameforge.guild_building_npc._90_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
33
gamefiles/data/quest/guild_create.quest
Normal file
33
gamefiles/data/quest/guild_create.quest
Normal file
@ -0,0 +1,33 @@
|
||||
quest guild_create begin
|
||||
state start begin
|
||||
end
|
||||
state run begin
|
||||
when letter begin
|
||||
send_letter(gameforge.guild_create._10_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
----"12345678901234567890123456789012345678901234567890"|
|
||||
say_title(gameforge.guild_create._10_sendLetter)
|
||||
say_reward(gameforge.guild_create._20_sayReward)
|
||||
say_item_vnum(70101)
|
||||
say_reward(gameforge.guild_create._30_sayReward)
|
||||
end
|
||||
when 691.party_kill begin
|
||||
set_state(reward)
|
||||
end
|
||||
end
|
||||
state reward begin
|
||||
when letter begin
|
||||
send_letter(gameforge.guild_create._40_sendLetter)
|
||||
end
|
||||
when button or info begin
|
||||
say_title(gameforge.guild_create._50_sayTitle)
|
||||
say_reward(gameforge.guild_create._60_sayReward)
|
||||
say_item_vnum(70101)
|
||||
say_reward(gameforge.guild_create._70_sayReward)
|
||||
set_state(start)
|
||||
pc.give_item2(70101)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
145
gamefiles/data/quest/guild_manage.quest
Normal file
145
gamefiles/data/quest/guild_manage.quest
Normal file
@ -0,0 +1,145 @@
|
||||
quest guild_building begin
|
||||
state start begin
|
||||
when guild_man1.chat.gameforge.guild_manage._10_npcChat or guild_man2.chat.gameforge.guild_manage._10_npcChat or guild_man3.chat.gameforge.guild_manage._10_npcChat with pc.is_gm() begin
|
||||
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._20_say)
|
||||
local u_name = input()
|
||||
local u_vid=find_pc_by_name(u_name)
|
||||
|
||||
if u_vid==0 then
|
||||
say_title(gameforge.guild_manage._30_sayTitle)
|
||||
say(u_name)
|
||||
return
|
||||
end
|
||||
|
||||
local old_vid = pc. select(u_vid , u_vid )
|
||||
u_withdrawTime=pc.getqf("new_withdraw_time")
|
||||
u_withdrawTime=pc.getqf("new_withdraw_time")
|
||||
pc. select(old_vid , old_vid )
|
||||
|
||||
withdrawDelay=game.get_event_flag("guild_withdraw_delay")
|
||||
disbandDelay=game.get_event_flag("guild_disband_delay")
|
||||
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._40_say)
|
||||
|
||||
if u_withdrawTime>0 then
|
||||
say(string.format(gameforge.guild_manage._50_say, time_to_str(u_withdrawTime)..gameforge.guild_manage._55_say.. withdrawDelay))
|
||||
end
|
||||
|
||||
if u_disbandTime>0 then
|
||||
say(string.format(gameforge.guild_manage._60_say, time_to_str(u_disbandTime)..gameforge.guild_manage._65_say.. disbandDelay))
|
||||
end
|
||||
|
||||
local retryTime1 = u_withdrawTime + withdrawDelay*86400
|
||||
local retryTime2 = u_withdrawTime + disbandDelay*86400
|
||||
|
||||
local retryTime = 0
|
||||
if retryTime1 > retryTime2 then
|
||||
retryTime = retryTime1
|
||||
else
|
||||
retryTime = retryTime2
|
||||
end
|
||||
|
||||
local curTime = get_time()
|
||||
if curTime < retryTime then
|
||||
say(string.format(gameforge.guild_manage._70_say, time_to_str(retryTime)..gameforge.guild_manage._75_say..((retryTime-curTime)/3600)))
|
||||
|
||||
if is_test_server() then
|
||||
local s= select(gameforge.guild_manage._80_select, gameforge.arena_manager._200_tableInsert)
|
||||
if s==1 then
|
||||
local old_vid = pc. select(u_vid , u_vid )
|
||||
local curTime=get_time()
|
||||
pc.setqf("new_withdraw_time", curTime-withdrawDelay*86400)
|
||||
pc.setqf("new_withdraw_time", curTime-disbandDelay*86400)
|
||||
pc. select(old_vid , old_vid )
|
||||
end
|
||||
end
|
||||
else
|
||||
say(gameforge.guild_manage._90_say)
|
||||
end
|
||||
end
|
||||
when guild_man1.chat.gameforge.guild_manage._100_npcChat or guild_man2.chat.gameforge.guild_manage._100_npcChat or guild_man3.chat.gameforge.guild_manage._100_npcChat with pc.is_gm() begin
|
||||
|
||||
test_chat(string.format(gameforge.guild_manage._110_chat, bool_to_str(pc.has_guild()).." [ENTER]pc.is_guildmaster: "..bool_to_str(pc.isguildmaster()).." [ENTER]pc.empire: "..pc.empire.." [ENTER]npc.empire: "..npc.empire))
|
||||
end
|
||||
when guild_man1.chat.gameforge.locale.guild.withdraw or guild_man2.chat.gameforge.locale.guild.withdraw or guild_man3.chat.gameforge.locale.guild.withdraw with pc.hasguild() and not pc.isguildmaster() and (pc.is_gm() or npc.empire == pc.empire) begin
|
||||
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._120_say)
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s==1 then
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._130_say)
|
||||
pc.remove_from_guild()
|
||||
pc.setqf("new_withdraw_time",get_global_time())
|
||||
end
|
||||
end
|
||||
|
||||
when guild_man1.chat.gameforge.locale.guild.disband or guild_man2.chat.gameforge.locale.guild.disband or guild_man3.chat.gameforge.locale.guild.disband with pc.hasguild() and pc.isguildmaster() and (pc.is_gm() or npc.empire == pc.empire) begin
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._140_say)
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s==1 then
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._150_say)
|
||||
pc.destroy_guild()
|
||||
pc.setqf("new_disband_time", get_global_time())
|
||||
pc.setqf("new_withdraw_time", get_global_time())
|
||||
end
|
||||
end
|
||||
|
||||
when guild_man1.chat.gameforge.guild_manage._160_npcChat or guild_man2.chat.gameforge.guild_manage._170_npcChat or guild_man3.chat.gameforge.guild_manage._170_npcChat begin
|
||||
local level_limit;
|
||||
local guild_create_item
|
||||
|
||||
level_limit = 40
|
||||
guild_create_item = false
|
||||
|
||||
if pc.hasguild() then
|
||||
return
|
||||
end
|
||||
if game.get_event_flag("guild_withdraw_delay")*86400 >
|
||||
get_global_time() - pc.getqf("new_withdraw_time") then
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._180_say)
|
||||
-- say(string.format(gameforge.guild_manage._190_say, game.get_event_flag("guild_withdraw_delay")))
|
||||
return
|
||||
end
|
||||
|
||||
if game.get_event_flag("guild_disband_delay")*86400 >
|
||||
get_global_time() - pc.getqf("new_withdraw_time") then
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._200_say)
|
||||
-- say(string.format(gameforge.guild_manage._190_say, game.get_event_flag("guild_disband_delay")))
|
||||
return
|
||||
end
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._210_say)
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 2 then
|
||||
return
|
||||
end
|
||||
|
||||
if pc.level >= 40 then
|
||||
if pc.gold >= 200000 then
|
||||
|
||||
if not guild_create_item or pc.countitem(guild_create_item)>0 then
|
||||
game.request_make_guild()
|
||||
end
|
||||
|
||||
else
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._220_say)
|
||||
return
|
||||
end
|
||||
else
|
||||
say_title(gameforge.find_squareguard._10_targetVid)
|
||||
say(gameforge.guild_manage._230_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
19
gamefiles/data/quest/guild_ranking.quest
Normal file
19
gamefiles/data/quest/guild_ranking.quest
Normal file
@ -0,0 +1,19 @@
|
||||
quest guild_ranking begin
|
||||
state start begin
|
||||
when guild_man1.chat.gameforge.locale.show_guild_ranking_around or guild_man2.chat.gameforge.locale.show_guild_ranking_around or guild_man3.chat.gameforge.locale.show_guild_ranking_around with pc.hasguild() begin
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(string.format(gameforge.guild_ranking._10_say, guild.around_ranking_string()))
|
||||
end
|
||||
when guild_man1.chat.gameforge.locale.show_guild_ranking_top or guild_man2.chat.gameforge.locale.show_guild_ranking_top or guild_man3.chat.gameforge.locale.show_guild_ranking_top with pc.hasguild() begin
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(string.format(gameforge.guild_ranking._20_say, guild.high_ranking_string()))
|
||||
end
|
||||
when guild_man1.chat.gameforge.locale.show_guild_cur_score or guild_man2.chat.gameforge.locale.show_guild_cur_score or guild_man3.chat.gameforge.locale.show_guild_cur_score with pc.hasguild() begin
|
||||
say_title(gameforge.find_squareguard._30_sayTitle)
|
||||
say(string.format(gameforge.guild_ranking._30_say, guild.get_rank()))
|
||||
say(string.format(gameforge.guild_ranking._35_say, guild.get_ladder_point()))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
77
gamefiles/data/quest/guild_war_bet.quest
Normal file
77
gamefiles/data/quest/guild_war_bet.quest
Normal file
@ -0,0 +1,77 @@
|
||||
quest guild_war_bet begin
|
||||
state start begin
|
||||
when guild_war_observer1.chat.gameforge.guild_war_bet._10_npcChat or guild_war_observer2.chat.gameforge.guild_war_bet._10_npcChat or guild_war_observer3.chat.gameforge.guild_war_bet._10_npcChat begin
|
||||
local info_counter = pc.getqf("info")
|
||||
|
||||
if info_counter < 3 then
|
||||
say_title(gameforge.guild_war_bet._20_sayTitle)
|
||||
say(gameforge.guild_war_bet._30_say)
|
||||
wait()
|
||||
end
|
||||
|
||||
local g = guild.get_reserve_war_table()
|
||||
local gname_table = {}
|
||||
|
||||
table.foreachi(g,
|
||||
function(n, p)
|
||||
gname_table[n] = guild.get_name(p[2])..gameforge.guild_war_bet._35_table..guild.get_name(p[3])
|
||||
end)
|
||||
|
||||
if table.getn(g) == 0 then
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
say(gameforge.guild_war_bet._50_say)
|
||||
else
|
||||
gname_table[table.getn(g)+1] = gameforge.locale.cancel
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
say(gameforge.guild_war_bet._60_say)
|
||||
|
||||
local s = select_table(gname_table)
|
||||
|
||||
if s != table.getn(gname_table) then
|
||||
if guild.is_bet(g[s][1]) then
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
say(gameforge.guild_war_bet._70_say)
|
||||
else
|
||||
local name1 = guild.get_name(g[s][2])
|
||||
local name2 = guild.get_name(g[s][3])
|
||||
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
say(string.format(gameforge.guild_war_bet._80_say, name1.." "..name2..gameforge.guild_war_bet._45_say..g[s][4]))
|
||||
local guild_s = select(name1, name1)
|
||||
|
||||
if guild_s != 3 then
|
||||
local bet_guild = g[s][guild_s+1]
|
||||
|
||||
say_title(gameforge.guild_war_bet._90_sayTitle)
|
||||
say(gameforge.locale.guild.war_bet_price)
|
||||
|
||||
local price_button_table = {}
|
||||
|
||||
table.foreachi(guild_war_bet_price_table,
|
||||
function(n, p)
|
||||
price_button_table[n] = p..gameforge.locale.gold
|
||||
end)
|
||||
|
||||
price_button_table[table.getn(price_button_table)+1] = gameforge.locale.cancel
|
||||
|
||||
local price_idx = select_table(price_button_table)
|
||||
|
||||
if price_idx != table.getn(price_button_table) then -- ? ??? ?? ??? ???
|
||||
if pc.gold < guild_war_bet_price_table[price_idx] then
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
say(gameforge.guild_war_bet._100_say)
|
||||
else
|
||||
say_title(gameforge.guild_war_bet._40_sayTitle)
|
||||
pc.changegold(-guild_war_bet_price_table[price_idx])
|
||||
guild.war_bet(g[s][1], bet_guild, guild_war_bet_price_table[price_idx])
|
||||
say(gameforge.guild_war_bet._110_say)
|
||||
end
|
||||
end
|
||||
end -- if guild_s != 3
|
||||
end -- if guild.is_bet(g[s][1])
|
||||
end -- if s != table.getn(gname_table)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
33
gamefiles/data/quest/guild_war_join.quest
Normal file
33
gamefiles/data/quest/guild_war_join.quest
Normal file
@ -0,0 +1,33 @@
|
||||
quest guild_war_join begin
|
||||
state start begin
|
||||
when letter with ( pc.get_map_index() != 71 and pc.get_map_index() != 104 and pc.get_map_index() != 72 and pc.get_map_index() != 73 and pc.get_map_index() != 208) and pc.get_map_index() <= 200 begin
|
||||
local e = guild.get_any_war()
|
||||
|
||||
if e != 0 and pc.get_war_map() == 0 then
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.locale.guild.war_join_request)
|
||||
end
|
||||
end
|
||||
|
||||
when button with ( pc.get_map_index() != 71 and pc.get_map_index() != 104 and pc.get_map_index() != 72 and pc.get_map_index() != 73 and pc.get_map_index() != 208) and pc.get_map_index() <= 200 begin
|
||||
local e = guild.get_any_war()
|
||||
|
||||
if e == 0 then
|
||||
say(gameforge.locale.guild.war_over)
|
||||
else
|
||||
say(string.format(gameforge.guild_war_join._10_say, guild.name(e)))
|
||||
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
|
||||
if s == 1 then
|
||||
guild.war_enter(e)
|
||||
else
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.locale.guild.war_join_request)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
70
gamefiles/data/quest/guild_war_observer.quest
Normal file
70
gamefiles/data/quest/guild_war_observer.quest
Normal file
@ -0,0 +1,70 @@
|
||||
quest guild_war_observer begin
|
||||
state start begin
|
||||
when guild_war_observer1.chat.locale.guild.war_list_button begin
|
||||
local g = guild.get_warp_war_list() -- return format {{1,2}, {3,4}}
|
||||
local gname_table = {}
|
||||
|
||||
table.foreachi(g,
|
||||
function(n, p)
|
||||
gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2])
|
||||
end)
|
||||
|
||||
if table.getn(g) == 0 then
|
||||
say(locale.guild.war_list_none)
|
||||
else
|
||||
gname_table[table.getn(g)+1] = locale.confirm
|
||||
say(locale.guild.war_list_choose)
|
||||
|
||||
local s = select_table(gname_table)
|
||||
|
||||
if s != table.getn(gname_table) then
|
||||
pc.warp_to_guild_war_observer_position(g[s][1], g[s][2])
|
||||
end
|
||||
end
|
||||
end
|
||||
when guild_war_observer2.chat.locale.guild.war_list_button begin
|
||||
local g = guild.get_warp_war_list() -- return format {{1,2}, {3,4}}
|
||||
local gname_table = {}
|
||||
|
||||
table.foreachi(g,
|
||||
function(n, p)
|
||||
gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2])
|
||||
end)
|
||||
|
||||
if table.getn(g) == 0 then
|
||||
say(locale.guild.war_list_none)
|
||||
else
|
||||
gname_table[table.getn(g)+1] = locale.confirm
|
||||
say(locale.guild.war_list_choose)
|
||||
|
||||
local s = select_table(gname_table)
|
||||
|
||||
if s != table.getn(gname_table) then
|
||||
pc.warp_to_guild_war_observer_position(g[s][1], g[s][2])
|
||||
end
|
||||
end
|
||||
end
|
||||
when guild_war_observer3.chat.locale.guild.war_list_button begin
|
||||
local g = guild.get_warp_war_list() -- return format {{1,2}, {3,4}}
|
||||
local gname_table = {}
|
||||
|
||||
table.foreachi(g,
|
||||
function(n, p)
|
||||
gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2])
|
||||
end)
|
||||
|
||||
if table.getn(g) == 0 then
|
||||
say(locale.guild.war_list_none)
|
||||
else
|
||||
gname_table[table.getn(g)+1] = locale.confirm
|
||||
say(locale.guild.war_list_choose)
|
||||
|
||||
local s = select_table(gname_table)
|
||||
|
||||
if s != table.getn(gname_table) then
|
||||
pc.warp_to_guild_war_observer_position(g[s][1], g[s][2])
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
520
gamefiles/data/quest/hair.quest
Normal file
520
gamefiles/data/quest/hair.quest
Normal file
@ -0,0 +1,520 @@
|
||||
quest hair begin
|
||||
state start begin
|
||||
function get_start_index_by_race(race)
|
||||
--[[
|
||||
-- 0 <09><><EFBFBD><EFBFBD> <20><>
|
||||
-- 1 <09>ڰ<EFBFBD> <20><>
|
||||
-- 2 <09><><EFBFBD><EFBFBD> <20><>
|
||||
-- 3 <09><><EFBFBD><EFBFBD> <20><>
|
||||
-- 4 <09><><EFBFBD><EFBFBD> <20><>
|
||||
-- 5 <09>ڰ<EFBFBD> <20><>
|
||||
-- 6 <09><><EFBFBD><EFBFBD> <20><>
|
||||
-- 7 <09><><EFBFBD><EFBFBD> <20><>
|
||||
--]]
|
||||
race_list = {}
|
||||
race_list[1] = 74001
|
||||
race_list[2] = 74251
|
||||
race_list[3] = 74501
|
||||
race_list[4] = 74751
|
||||
race_list[5] = 75001
|
||||
race_list[6] = 75201
|
||||
race_list[7] = 75401
|
||||
race_list[8] = 75601
|
||||
|
||||
return race_list[race]
|
||||
end
|
||||
|
||||
function point_to_apply(applyOn)
|
||||
apply_list = {}
|
||||
apply_list[53] = apply.ATTBONUS_MONSTER
|
||||
apply_list[54] = apply.ATTBONUS_WARRIOR
|
||||
apply_list[55] = apply.ATTBONUS_ASSASSIN
|
||||
apply_list[56] = apply.ATTBONUS_SURA
|
||||
apply_list[57] = apply.ATTBONUS_SHAMAN
|
||||
apply_list[119] = apply.MAX_HP_PCT
|
||||
apply_list[120] = apply.MAX_SP_PCT
|
||||
|
||||
if nil == apply_list[applyOn] then
|
||||
return nil
|
||||
end
|
||||
|
||||
return apply_list[applyOn]
|
||||
|
||||
end
|
||||
|
||||
function My_hair_item(vnum,index)
|
||||
hair_list={}
|
||||
-- vnum /hair/ option / howmuch / duration
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [74001] = {1001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74002] = {1002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74003] = {1003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74004] = {1004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74005] = {1005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74006] = {1006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74007] = {1007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74008] = {1008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74009] = {1009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74010] = {1010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74011] = {1011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74012] = {1012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74013] = {1013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74014] = {1013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74015] = {1014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74016] = {1014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74017] = {1015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74018] = {1016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74019] = {1017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20>ڰ<EFBFBD> <20><>
|
||||
hair_list [74251] = {2001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74252] = {2002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74253] = {2003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74254] = {2004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74255] = {2005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74256] = {2006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74257] = {2007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74258] = {2008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74259] = {2009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74260] = {2010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74261] = {2011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74262] = {2012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74263] = {2013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74264] = {2013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74265] = {2014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74266] = {2014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74267] = {2015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74268] = {2016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74269] = {2017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [74501] = {3001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74502] = {3002, apply.ATTBONUS_ASSASSIN,10, 2592000}
|
||||
hair_list [74503] = {3003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74504] = {3004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74505] = {3005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74506] = {3006, apply.ATTBONUS_ASSASSIN,10, 2592000}
|
||||
hair_list [74507] = {3007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74508] = {3008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74509] = {3009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74510] = {3010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74511] = {3011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74512] = {3012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74513] = {3013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74514] = {3013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74515] = {3014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74516] = {3014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74517] = {3015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74518] = {3016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74519] = {3017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [74751] = {4001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74752] = {4002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74753] = {4003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74754] = {4004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74755] = {4005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74756] = {4006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74757] = {4007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74758] = {4008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74759] = {4009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [74760] = {4010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [74761] = {4011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [74762] = {4012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [74763] = {4013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74764] = {4013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74765] = {4014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [74766] = {4014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [74767] = {4015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74768] = {4016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [74769] = {4017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [75001] = {1001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75002] = {1002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75003] = {1003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75004] = {1004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75005] = {1005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75006] = {1006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75007] = {1007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75008] = {1008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75009] = {1009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75010] = {1010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75011] = {1011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75012] = {1012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75013] = {1013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75014] = {1013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75015] = {1014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75016] = {1014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75017] = {1015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75018] = {1016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75019] = {1017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20>ڰ<EFBFBD> <20><>
|
||||
hair_list [75201] = {2001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75202] = {2002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75203] = {2003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75204] = {2004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75205] = {2005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75206] = {2006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75207] = {2007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75208] = {2008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75209] = {2009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75210] = {2010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75211] = {2011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75212] = {2012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75213] = {2013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75214] = {2013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75215] = {2014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75216] = {2014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75217] = {2015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75218] = {2016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75219] = {2017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [75401] = {3001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75402] = {3002, apply.ATTBONUS_ASSASSIN,10, 2592000}
|
||||
hair_list [75403] = {3003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75404] = {3004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75405] = {3005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75406] = {3006, apply.ATTBONUS_ASSASSIN,10, 2592000}
|
||||
hair_list [75407] = {3007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75408] = {3008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75409] = {3009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75410] = {3010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75411] = {3011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75412] = {3012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75413] = {3013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75414] = {3013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75415] = {3014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75416] = {3014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75417] = {3015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75418] = {3016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75419] = {3017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
-- <20><><EFBFBD><EFBFBD> <20><>
|
||||
hair_list [75601] = {4001, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75602] = {4002, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75603] = {4003, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75604] = {4004, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75605] = {4005, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75606] = {4006, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75607] = {4007, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75608] = {4008, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75609] = {4009, apply.ATTBONUS_WARRIOR, 10, 2592000}
|
||||
hair_list [75610] = {4010, apply.ATTBONUS_ASSASSIN, 10, 2592000}
|
||||
hair_list [75611] = {4011, apply.ATTBONUS_SURA, 10, 2592000}
|
||||
hair_list [75612] = {4012, apply.ATTBONUS_SHAMAN, 10, 2592000}
|
||||
hair_list [75613] = {4013, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75614] = {4013, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75615] = {4014, apply.MAX_HP_PCT, 1, 604800}
|
||||
hair_list [75616] = {4014, apply.MAX_SP_PCT, 1, 604800}
|
||||
hair_list [75617] = {4015, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75618] = {4016, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
hair_list [75619] = {4017, apply.ATTBONUS_MONSTER, 10, 604800}
|
||||
|
||||
if nil == hair_list[vnum] then
|
||||
return nil
|
||||
end
|
||||
|
||||
return hair_list[vnum][index]
|
||||
end
|
||||
|
||||
function leave_log(item_vnum)
|
||||
char_log(0, "CHANGE_HAIR", string.format("USE_ITEM(%d)",item_vnum)) -- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
char_log(0, "CHANGE_HAIR", string.format("END_SEC(%d)",get_time()+ hair.My_hair_item(item_vnum,4)) ) -- <20><><EFBFBD><EFBFBD><EFBFBD>Ⱓ <20>α<EFBFBD>
|
||||
char_log(0, "CHANGE_HAIR", "CHANGE_HAIR_END") -- <20><><EFBFBD><EFBFBD> <20>α<EFBFBD>
|
||||
end
|
||||
|
||||
when login begin
|
||||
-- Announce Mention
|
||||
if pc.getqf("limit_time") > get_time() then
|
||||
notice_multiline(gameforge.hair._110_notice,notice)
|
||||
else
|
||||
if pc.get_part( PART_HAIR ) > 1000 and nil == pc.get_wear(20) then
|
||||
--pc.set_part( PART_HAIR , 0 )
|
||||
pc.setqf( "limit_time", 0 )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
when 74001.use or 74002.use or 74003.use or 74004.use or 74005.use or 74006.use or
|
||||
74007.use or 74008.use or 74009.use or 74010.use or 74011.use or 74012.use or 74013.use or 74014.use or 74015.use or 74016.use or
|
||||
74017.use or 74018.use or 74019.use or
|
||||
75001.use or 75002.use or 75003.use or 75004.use or 75005.use or 75006.use or
|
||||
75007.use or 75008.use or 75009.use or 75010.use or 75011.use or 75012.use or 75013.use or 75014.use or 75015.use or 75016.use or
|
||||
75017.use or 75018.use or 75019.use with pc.get_job()==0 begin
|
||||
|
||||
pc.set_part(PART_HAIR, hair.My_hair_item(item.vnum,1))
|
||||
affect.remove_hair()
|
||||
affect.add_hair(hair.My_hair_item(item.vnum,2),hair.My_hair_item(item.vnum,3) , hair.My_hair_item(item.vnum,4))
|
||||
|
||||
pc.setqf("limit_time",get_time()+ hair.My_hair_item(item.vnum,4))
|
||||
hair.leave_log(item.vnum)
|
||||
item.remove()
|
||||
end
|
||||
|
||||
when 74251.use or 74252.use or 74253.use or 74254.use or 74255.use or 74256.use or
|
||||
74257.use or 74258.use or 74259.use or 74260.use or 74261.use or 74262.use or 74263.use or 74264.use or 74265.use or 74266.use or
|
||||
74267.use or 74268.use or 74269.use or
|
||||
75201.use or 75202.use or 75203.use or 75204.use or 75205.use or 75206.use or
|
||||
75207.use or 75208.use or 75209.use or 75210.use or 75211.use or 75212.use or 75213.use or 75214.use or 75215.use or 75216.use or
|
||||
75217.use or 75218.use or 75219.use with pc.get_job()==1 begin
|
||||
|
||||
pc.set_part(PART_HAIR, hair.My_hair_item(item.vnum,1))
|
||||
affect.remove_hair()
|
||||
affect.add_hair(hair.My_hair_item(item.vnum,2),hair.My_hair_item(item.vnum,3) , hair.My_hair_item(item.vnum,4))
|
||||
|
||||
pc.setqf("limit_time",get_time()+hair.My_hair_item(item.vnum,4))
|
||||
|
||||
hair.leave_log(item.vnum)
|
||||
item.remove()
|
||||
end
|
||||
|
||||
when 74501.use or 74502.use or 74503.use or 74504.use or 74505.use or 74506.use or
|
||||
74507.use or 74508.use or 74509.use or 74510.use or 74511.use or 74512.use or 74513.use or 74514.use or 74515.use or 74516.use or
|
||||
74517.use or 74518.use or 74519.use or
|
||||
75401.use or 75402.use or 75403.use or 75404.use or 75405.use or 75406.use or
|
||||
75407.use or 75408.use or 75409.use or 75410.use or 75411.use or 75412.use or 75413.use or 75414.use or 75415.use or 75416.use or
|
||||
75417.use or 75418.use or 75419.use with pc.get_job()==2 begin
|
||||
|
||||
|
||||
pc.set_part(PART_HAIR, hair.My_hair_item(item.vnum,1))
|
||||
affect.remove_hair()
|
||||
affect.add_hair(hair.My_hair_item(item.vnum,2),hair.My_hair_item(item.vnum,3) , hair.My_hair_item(item.vnum,4))
|
||||
|
||||
pc.setqf("limit_time",get_time()+hair.My_hair_item(item.vnum,4))
|
||||
|
||||
hair.leave_log(item.vnum)
|
||||
item.remove()
|
||||
end
|
||||
|
||||
when 74751.use or 74752.use or 74753.use or 74754.use or 74755.use or 74756.use or
|
||||
74757.use or 74758.use or 74759.use or 74760.use or 74761.use or 74762.use or 74763.use or 74764.use or 74765.use or 74766.use or
|
||||
74767.use or 74768.use or 74769.use or
|
||||
75601.use or 75602.use or 75603.use or 75604.use or 75605.use or 75606.use or
|
||||
75607.use or 75608.use or 75609.use or 75610.use or 75611.use or 75612.use or 75613.use or 75614.use or 75615.use or 75616.use or
|
||||
75617.use or 75618.use or 75619.use with pc.get_job()==3 begin
|
||||
|
||||
pc.set_part(PART_HAIR, hair.My_hair_item(item.vnum,1))
|
||||
affect.remove_hair()
|
||||
affect.add_hair(hair.My_hair_item(item.vnum,2),hair.My_hair_item(item.vnum,3) , hair.My_hair_item(item.vnum,4))
|
||||
|
||||
pc.setqf("limit_time",get_time()+ hair.My_hair_item(item.vnum,4))
|
||||
|
||||
hair.leave_log(item.vnum)
|
||||
item.remove()
|
||||
end
|
||||
|
||||
when 20355.chat.gameforge.hair._010_npcChat with is_test_server() begin
|
||||
say_title(gameforge.hair._011_sayTitle)
|
||||
say(gameforge.hair._012_say)
|
||||
say("")
|
||||
|
||||
local vnum = input_number()
|
||||
say_item_vnum(vnum)
|
||||
wait()
|
||||
|
||||
if hair.My_hair_item(vnum, 1) == nil and hair.My_hair_item(vnum - 1000, 1) then
|
||||
say("VNUM : " .. vnum .. gameforge.hair._013_say)
|
||||
return
|
||||
end
|
||||
|
||||
local race = pc.get_race() + 1
|
||||
local start_index = hair.get_start_index_by_race(race)
|
||||
|
||||
-- USING "AFFECT_HAIR" items.1261440000
|
||||
if vnum > 74000 then
|
||||
for i = 0, 20 do
|
||||
if start_index + i == vnum then
|
||||
pc.set_part(PART_HAIR, hair.My_hair_item(vnum,1))
|
||||
affect.remove_hair()
|
||||
affect.add_hair(hair.My_hair_item(vnum,2),hair.My_hair_item(vnum,3) , hair.My_hair_item(vnum,4))
|
||||
|
||||
pc.setqf("limit_time",get_time()+ hair.My_hair_item(vnum,4))
|
||||
|
||||
hair.leave_log(vnum)
|
||||
|
||||
return
|
||||
end
|
||||
end
|
||||
-- Just set to hair part.
|
||||
elseif vnum > 73000 and vnum <= 73762 then
|
||||
|
||||
local model = 0 -- hair model
|
||||
|
||||
start_index = start_index - 1000
|
||||
for i = 0, 12 do
|
||||
local index = start_index + i
|
||||
|
||||
if index == vnum then
|
||||
if 1 == race then
|
||||
model = vnum - 72000
|
||||
elseif 2 == race then
|
||||
model = vnum - 71250
|
||||
elseif 3 == race then
|
||||
model = vnum - 70500
|
||||
elseif 4 == race then
|
||||
model = vnum - 69750
|
||||
end
|
||||
|
||||
if 0 != model then
|
||||
pc.set_part(PART_HAIR, model)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
syschat(gameforge.hair._014_say)
|
||||
|
||||
end
|
||||
|
||||
|
||||
when 20355.chat.gameforge.hair._030_npcChat with pc.get_part(3) >= 1000 and pc.getqf("original_vnum") == 0 and nil == pc.get_wear(20) begin
|
||||
-- 514 : AFFECT_HAIR
|
||||
local applyOn = affect.get_apply_on(514)
|
||||
|
||||
local race = pc.get_race() + 1 -- PC's JOB
|
||||
local currentModel = pc.get_part(3) -- hair model type
|
||||
local start_index = hair.get_start_index_by_race(race)
|
||||
local vnum = 0
|
||||
local bFound = false
|
||||
local optionValue = 0
|
||||
local limitTime = pc.getqf("limit_time")
|
||||
|
||||
if pc.getqf("original_vnum") != 0 then
|
||||
notice("hier w<>re schluss sp<73>ter vielleicht!")
|
||||
end
|
||||
|
||||
notice(string.format("vnum: %d", vnum))
|
||||
notice( string.format("pc.get_wear: %d ", pc.get_wear(20)))
|
||||
notice(string.format("qf origianl_vnum: %d ", pc.getqf("original_vnum")))
|
||||
notice(string.format("pc.get_part: %d ", pc.get_part(3)))
|
||||
|
||||
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._040_say)
|
||||
say("")
|
||||
|
||||
local s = select(gameforge.locale.confirm, gameforge.locale.cancel)
|
||||
|
||||
if s == 2 then
|
||||
return
|
||||
end
|
||||
|
||||
if 0 == currentModel or pc.getqf("original_vnum") != 0 then
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._090_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
if nil == applyOn then
|
||||
local wearCostumeHair = pc.get_wear(20)
|
||||
|
||||
if 0 == currentModel or nil != wearCostumeHair then
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._050_say)
|
||||
say("")
|
||||
end
|
||||
|
||||
if pc.getqf("original_vnum") != 0 then
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._050_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
vnum = currentModel
|
||||
|
||||
if 1 == race or 5== race then vnum = vnum + 72000
|
||||
elseif 2 == race or 6 == race then vnum = vnum + 71250
|
||||
elseif 3 == race or 7 == race then vnum = vnum + 70500
|
||||
elseif 4 == race or 8 == race then vnum = vnum + 69750
|
||||
else
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._060_say)
|
||||
return
|
||||
end
|
||||
|
||||
bFound = true
|
||||
end
|
||||
|
||||
if false == bFound then
|
||||
local applyType = hair.point_to_apply(applyOn)
|
||||
|
||||
if nil == applyType then
|
||||
say(gameforge.hair._070_say)
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
for i = 0, 20 do
|
||||
local tempVnum = start_index + i
|
||||
modelType = hair.My_hair_item(tempVnum, 1)
|
||||
optionType = hair.My_hair_item(tempVnum, 2)
|
||||
optionValue = hair.My_hair_item(tempVnum, 3)
|
||||
|
||||
if modelType == currentModel and optionType == applyType then
|
||||
vnum = tempVnum
|
||||
bFound = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if false == bFound then
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._060_say)
|
||||
return
|
||||
end
|
||||
|
||||
if true == is_test_server() then
|
||||
say("This message only appears on Test Mode.")
|
||||
say(" Effect : " .. applyOn .. ", Value : " .. optionValue)
|
||||
say(" Model : " .. pc.get_part(3))
|
||||
say(" Left time (in second) : " .. (limitTime - get_time()))
|
||||
say(" VNUM : " .. vnum)
|
||||
say("")
|
||||
say("")
|
||||
local s = select("Next")
|
||||
end
|
||||
end
|
||||
|
||||
if vnum < 74000 then
|
||||
-- <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 10<31><30><EFBFBD>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>ڽ<EFBFBD>Ƭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD>. -_-;
|
||||
limitTime = 1261440000
|
||||
end
|
||||
|
||||
|
||||
local wearCostumeHair_check = pc.get_wear(20)
|
||||
|
||||
if nil == wearCostumeHair_check then
|
||||
return
|
||||
end
|
||||
|
||||
notice(string.format("vnum: %d", vnum))
|
||||
notice( string.format("pc.get_wear: %d ", pc.get_wear(20)))
|
||||
notice(string.format("qf origianl_vnum: %d ", pc.getqf("original_vnum")))
|
||||
notice(string.format("pc.get_part: %d ", pc.get_part(3)))
|
||||
|
||||
|
||||
local ret = pc.give_item2_select(vnum)
|
||||
item.set_socket(0, limitTime)
|
||||
item.set_socket(1, 1)
|
||||
item.start_realtime_expire()
|
||||
affect.remove_hair()
|
||||
pc.set_part(3, 0)
|
||||
pc.setqf( "limit_time", 0 )
|
||||
pc.setqf( "original_vnum", vnum )
|
||||
say_title(mob_name(20355))
|
||||
say(gameforge.hair._80_say)
|
||||
say_show_item(vnum)
|
||||
say(" " .. item_name(vnum) .. gameforge.hair._090_say)
|
||||
say("")
|
||||
say(gameforge.hair._100_say)
|
||||
end
|
||||
end
|
||||
end
|
40
gamefiles/data/quest/hair_shop.quest
Normal file
40
gamefiles/data/quest/hair_shop.quest
Normal file
@ -0,0 +1,40 @@
|
||||
quest hair_shop begin
|
||||
state start begin
|
||||
when 20021.chat.gameforge.hair_shop._10_npcChat with pc.get_part(PART_HAIR) >= 1001 begin
|
||||
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._30_say)
|
||||
|
||||
local a = select(gameforge.hair_shop._40_select, gameforge.hair_shop._50_select)
|
||||
if a == 1 then
|
||||
if pc.money >= 500000 then
|
||||
affect.remove_hair()
|
||||
pc.changemoney(-500000)
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._60_say)
|
||||
wait()
|
||||
say(gameforge.hair_shop._70_say)
|
||||
wait()
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._80_say)
|
||||
wait()
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._90_say)
|
||||
pc.set_part(PART_HAIR, 0)
|
||||
else
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._100_say)
|
||||
wait()
|
||||
q.done()
|
||||
end
|
||||
elseif a == 2 then
|
||||
say_title(gameforge.hair_shop._20_sayTitle)
|
||||
say(gameforge.hair_shop._110_say)
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, a))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
696
gamefiles/data/quest/harvest_festival.quest
Normal file
696
gamefiles/data/quest/harvest_festival.quest
Normal file
@ -0,0 +1,696 @@
|
||||
-- Chuseok Events
|
||||
quest harvest_festival begin
|
||||
state start begin
|
||||
|
||||
function reset_flags()
|
||||
if game.get_event_flag("harvest_festival") == 0 then
|
||||
q.setstate("information")
|
||||
pc.setqf("harvest_festival_count", 0)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("cake_count", 0)
|
||||
pc.setqf("rice_count", 0)
|
||||
pc.setqf("mob_kill1_count",0)
|
||||
pc.setqf("mob_kill2_count",0)
|
||||
pc.setqf("mob2_info", 0)
|
||||
pc.setqf("mob1_info", 0)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function kill_action(mob_vnum, kill_state)
|
||||
local kill_count
|
||||
if kill_state == 1 then
|
||||
kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
kill_finish = 30
|
||||
else
|
||||
kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
kill_finish = 60
|
||||
end
|
||||
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
if kill_count >= kill_finish then
|
||||
q.set_counter(gameforge.locale.levelup.remain_count, 0)
|
||||
else
|
||||
q.set_counter(gameforge.locale.levelup.remain_count, kill_finish - kill_count)
|
||||
end
|
||||
|
||||
if kill_count == kill_finish then
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
if kill_state == 2 then
|
||||
q.setstate("information")
|
||||
end
|
||||
|
||||
end -- end of if
|
||||
|
||||
end
|
||||
|
||||
|
||||
function get_random_rice(type)
|
||||
if (type == 1) then
|
||||
if (pc.get_level() >= 90) then
|
||||
random_rice = number(4, 7)
|
||||
elseif (pc.get_level() >= 70) then
|
||||
random_rice = number(3, 6)
|
||||
elseif (pc.get_level() >= 50) then
|
||||
random_rice = number(2, 4)
|
||||
elseif (pc.get_level() >= 30) then
|
||||
random_rice = number(1, 3)
|
||||
elseif (pc.get_level() >= 10) then
|
||||
random_rice = number(1, 2)
|
||||
else
|
||||
random_rice = number(1, 2)
|
||||
end -- end of if
|
||||
elseif (type == 2) then
|
||||
if (pc.get_level() >= 90) then
|
||||
random_rice = number(7, 10)
|
||||
elseif (pc.get_level() >= 70) then
|
||||
random_rice = number(6, 8)
|
||||
elseif (pc.get_level() >= 50) then
|
||||
random_rice = number(4, 6)
|
||||
elseif (pc.get_level() >= 30) then
|
||||
random_rice = number(2, 5)
|
||||
elseif (pc.get_level() >= 10) then
|
||||
random_rice = number(2, 4)
|
||||
else
|
||||
random_rice = number(2, 3)
|
||||
end -- end of if
|
||||
end
|
||||
|
||||
return random_rice
|
||||
|
||||
end
|
||||
|
||||
when login with pc.get_level() > 0 begin
|
||||
set_state(information)
|
||||
pc.setqf("harvest_festival_count", 0)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("cake_count", 0)
|
||||
pc.setqf("rice_count", 0)
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
-- Event Start
|
||||
state information begin
|
||||
when letter with game.get_event_flag("harvest_festival")>0 begin
|
||||
local v= find_npc_by_vnum(20086)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__", v, gameforge.harvest_festival._010_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
when login with game.get_event_flag("harvest_festival") == 0 begin
|
||||
harvest_festival.reset_flags()
|
||||
end
|
||||
|
||||
-- Glutinous rice in exchange for a gift
|
||||
when 20087.chat.gameforge.harvest_festival._025_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._030_say, rice_count))
|
||||
local reward_set = select(gameforge.harvest_festival._040_select, gameforge.harvest_festival._050_select)
|
||||
|
||||
if reward_set == 2 then
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._060_say)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._070_say)
|
||||
|
||||
-- local harvest_item_set = select("15x Glut", "15x Gl","35x Perle","35x Gluttrank","35x Gltes","Maybe later")
|
||||
local harvest_item_set = select(gameforge.harvest_festival._090_select,
|
||||
gameforge.harvest_festival._100_select,
|
||||
gameforge.harvest_festival._110_select,
|
||||
gameforge.harvest_festival._120_select,
|
||||
gameforge.harvest_festival._125_select,
|
||||
gameforge.harvest_festival._170_select)
|
||||
|
||||
if harvest_item_set == 6 then
|
||||
return
|
||||
end -- end of ifa
|
||||
|
||||
local harvest_item_set_2 = 0
|
||||
|
||||
if harvest_item_set == 5 then
|
||||
harvest_item_set_2 = select(gameforge.harvest_festival._130_select,
|
||||
gameforge.harvest_festival._135_select,
|
||||
gameforge.harvest_festival._140_select,
|
||||
gameforge.harvest_festival._150_select,
|
||||
gameforge.harvest_festival._160_select,
|
||||
gameforge.harvest_festival._170_select)
|
||||
end
|
||||
|
||||
if harvest_item_set_2 == 6 then
|
||||
return
|
||||
end
|
||||
|
||||
local harvest_item_name = ""
|
||||
local harvest_rice_count = 0
|
||||
|
||||
|
||||
if harvest_item_set == 1 then
|
||||
harvest_item_name = gameforge.harvest_festival._090_select
|
||||
harvest_rice_count = 55
|
||||
elseif harvest_item_set == 2 then
|
||||
harvest_item_name = gameforge.harvest_festival._100_select
|
||||
harvest_rice_count = 50
|
||||
elseif harvest_item_set == 3 then
|
||||
harvest_item_name = gameforge.harvest_festival._110_select
|
||||
harvest_rice_count = 45
|
||||
elseif harvest_item_set == 4 then
|
||||
harvest_item_name = gameforge.harvest_festival._120_select
|
||||
harvest_rice_count = 30
|
||||
elseif harvest_item_set_2 == 1 then
|
||||
harvest_item_name = gameforge.harvest_festival._130_select
|
||||
harvest_rice_count = 65
|
||||
elseif harvest_item_set_2 == 2 then
|
||||
harvest_item_name = gameforge.harvest_festival._135_select
|
||||
harvest_rice_count = 75
|
||||
elseif harvest_item_set_2 == 3 then
|
||||
harvest_item_name = gameforge.harvest_festival._140_select
|
||||
harvest_rice_count = 60
|
||||
elseif harvest_item_set_2 == 4 then
|
||||
harvest_item_name = gameforge.harvest_festival._150_select
|
||||
harvest_rice_count = 75
|
||||
elseif harvest_item_set_2 == 5 then
|
||||
harvest_item_name = gameforge.harvest_festival._160_select
|
||||
harvest_rice_count = 80
|
||||
end -- end of if
|
||||
|
||||
-- Check glutinous rice amount
|
||||
if rice_count < harvest_rice_count then
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._180_say)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._190_say)
|
||||
say("")
|
||||
say(string.format(gameforge.harvest_festival._200_say,harvest_rice_count, harvest_item_name))
|
||||
say(gameforge.harvest_festival._210_say)
|
||||
|
||||
local item_get_set = select(gameforge.harvest_festival._220_select, gameforge.harvest_festival._170_select)
|
||||
|
||||
if item_get_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- System to hand out the items
|
||||
if harvest_item_set == 1 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50109", 1)
|
||||
elseif harvest_item_set == 2 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50110", 1)
|
||||
elseif harvest_item_set == 3 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72728", 1)
|
||||
elseif harvest_item_set == 4 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50111", 1)
|
||||
elseif harvest_item_set_2 == 1 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50112", 1)
|
||||
elseif harvest_item_set_2 == 2 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50113", 1)
|
||||
elseif harvest_item_set_2 == 3 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72724", 1)
|
||||
elseif harvest_item_set_2 == 4 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50114", 1)
|
||||
elseif harvest_item_set_2 == 5 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50115", 1)
|
||||
end -- end of if
|
||||
|
||||
say_reward(string.format(gameforge.harvest_festival._230_say,harvest_item_name))
|
||||
say(gameforge.harvest_festival._240_say)
|
||||
|
||||
end -- end of when
|
||||
|
||||
when 20086.chat."Harvest Event Commands" with pc.get_gm_level() == 5 begin
|
||||
|
||||
if game.get_event_flag("harvest_festival") == 0 then
|
||||
|
||||
say("Current Status: ThanksGiving Event Results")
|
||||
say("")
|
||||
|
||||
local s = select("Start Event", "Cancel")
|
||||
if 1==s then
|
||||
game.set_event_flag("harvest_festival", 1)
|
||||
return
|
||||
end
|
||||
else
|
||||
say("Current Status: The event is currently active")
|
||||
say("")
|
||||
local s = select("Stop the Event", "Cancel")
|
||||
if 1==s then
|
||||
game.set_event_flag("harvest_festival", 0)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._250_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
target.delete("__TARGET__")
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._270_say)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you came back for this dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._280_say)
|
||||
wait()
|
||||
|
||||
-- Getting the Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._290_say, cake_count))
|
||||
wait()
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._300_say)
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._310_say)
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._320_say)
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._330_select, gameforge.harvest_festival._340_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._350_say)
|
||||
say(string.format(gameforge.harvest_festival._360_say, current_count))
|
||||
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you stop and do the quest again
|
||||
if quest_count > 0 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._360_say, quest_count))
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._390_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say, current_count))
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- here we must put the different mobnames
|
||||
if pc.get_level() >= 81 then
|
||||
pc.setqf("mob1_info", 6)
|
||||
mob1_name = gameforge.harvest_festival._410_say
|
||||
elseif pc.get_level() >= 61 then
|
||||
pc.setqf("mob1_info", 5)
|
||||
mob1_name = gameforge.harvest_festival._420_say
|
||||
elseif pc.get_level() >= 41 then
|
||||
pc.setqf("mob1_info", 4)
|
||||
mob1_name = gameforge.harvest_festival._430_say
|
||||
elseif pc.get_level() >= 21 then
|
||||
pc.setqf("mob1_info", 3)
|
||||
mob1_name = gameforge.harvest_festival._440_say
|
||||
elseif pc.get_level() >= 11 then
|
||||
pc.setqf("mob1_info", 2)
|
||||
mob1_name = gameforge.harvest_festival._450_say
|
||||
elseif pc.get_level() <= 10 then
|
||||
pc.setqf("mob1_info", 1)
|
||||
mob1_name = gameforge.harvest_festival._460_say
|
||||
end -- end of if
|
||||
|
||||
|
||||
-- When you start for the 1st time
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._470_say)
|
||||
say(string.format(gameforge.harvest_festival._480_say, mob1_name))
|
||||
|
||||
local main_set = select(gameforge.harvest_festival._490_select,gameforge.harvest_festival._500_select)
|
||||
if main_set == 2 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._510_say)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say, current_count))
|
||||
set_state(mob_kill1)
|
||||
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.harvest_festival._520_sendLetter)
|
||||
q.set_counter(gameforge.locale.levelup.remain_count, 30 - pc.getqf("mob_kill1_count"))
|
||||
end -- end of when
|
||||
|
||||
when login with game.get_event_flag("harvest_festival") == 0 begin
|
||||
harvest_festival.reset_flags()
|
||||
end
|
||||
|
||||
when info or button begin
|
||||
local mob1_info = pc.getqf("mob1_info")
|
||||
if mob1_info == 6 then
|
||||
mob1_name = gameforge.harvest_festival._410_say
|
||||
elseif mob1_info == 5 then
|
||||
mob1_name = gameforge.harvest_festival._420_say
|
||||
elseif mob1_info == 4 then
|
||||
mob1_name = gameforge.harvest_festival._430_say
|
||||
elseif mob1_info == 3 then
|
||||
mob1_name = gameforge.harvest_festival._440_say
|
||||
elseif mob1_info == 2 then
|
||||
mob1_name = gameforge.harvest_festival._450_say
|
||||
elseif mob1_info == 1 then
|
||||
mob1_name = gameforge.harvest_festival._460_say
|
||||
end -- end of ifa
|
||||
|
||||
say_title(gameforge.harvest_festival._520_sendLetter)
|
||||
say(string.format(gameforge.harvest_festival._530_say, mob1_name))
|
||||
|
||||
local gogo_set = select(gameforge.harvest_festival._330_select,gameforge.harvest_festival._540_select)
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._570_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count")
|
||||
if kill_count < 30 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._580_say)
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._590_say)
|
||||
local mob2_name = ""
|
||||
if pc.get_level() >= 91 then
|
||||
pc.setqf("mob2_info", 8)
|
||||
mob2_name = gameforge.harvest_festival._610_say
|
||||
elseif pc.get_level() >= 81 then
|
||||
pc.setqf("mob2_info", 7)
|
||||
mob2_name = gameforge.harvest_festival._600_say
|
||||
elseif pc.get_level() >= 71 then
|
||||
pc.setqf("mob2_info", 6)
|
||||
mob2_name = gameforge.harvest_festival._620_say
|
||||
elseif pc.get_level() >= 61 then
|
||||
pc.setqf("mob2_info", 5)
|
||||
mob2_name = gameforge.harvest_festival._630_say
|
||||
elseif pc.get_level() >= 51 then
|
||||
pc.setqf("mob2_info", 4)
|
||||
mob2_name = gameforge.harvest_festival._640_say
|
||||
elseif pc.get_level() >= 41 then
|
||||
pc.setqf("mob2_info", 3)
|
||||
mob2_name = gameforge.harvest_festival._650_say
|
||||
elseif pc.get_level() >= 31 then
|
||||
pc.setqf("mob2_info", 2)
|
||||
mob2_name = gameforge.harvest_festival._660_say
|
||||
elseif pc.get_level() >= 20 then
|
||||
pc.setqf("mob2_info", 1)
|
||||
mob2_name = gameforge.harvest_festival._670_say
|
||||
elseif pc.get_level() >= 10 then
|
||||
pc.setqf("mob2_info", 9)
|
||||
mob2_name = gameforge.harvest_festival._810_say
|
||||
else
|
||||
pc.setqf("mob2_info", 10)
|
||||
mob2_name = gameforge.harvest_festival._820_say
|
||||
end -- end of if
|
||||
|
||||
say(string.format(gameforge.harvest_festival._680_say, mob2_name))
|
||||
local sub_set = select(gameforge.harvest_festival._690_select,gameforge.harvest_festival._700_select)
|
||||
|
||||
if sub_set == 2 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._710_say)
|
||||
set_state(information)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._715_say, mob2_name))
|
||||
set_state(mob_kill2)
|
||||
end
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._550_select)
|
||||
end -- end of when
|
||||
|
||||
when 2502.kill with pc.getf("harvest_festival","mob1_info") == 6 begin
|
||||
harvest_festival.kill_action(2502,1)
|
||||
end
|
||||
|
||||
when 2202.kill with pc.getf("harvest_festival","mob1_info") == 5 begin
|
||||
harvest_festival.kill_action(2202,1)
|
||||
end
|
||||
|
||||
when 701.kill with pc.getf("harvest_festival","mob1_info") == 4 begin
|
||||
harvest_festival.kill_action(701,1)
|
||||
end
|
||||
|
||||
when 501.kill with pc.getf("harvest_festival","mob1_info") == 3 begin
|
||||
harvest_festival.kill_action(501,1)
|
||||
end
|
||||
|
||||
when 301.kill with pc.getf("harvest_festival","mob1_info") == 2 begin
|
||||
harvest_festival.kill_action(301,1)
|
||||
end -- end of when
|
||||
|
||||
when 105.kill with pc.getf("harvest_festival","mob1_info") == 1 begin
|
||||
harvest_festival.kill_action(105,1)
|
||||
end -- end of when
|
||||
|
||||
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill2 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.harvest_festival._520_sendLetter)
|
||||
q.set_counter(gameforge.locale.levelup.remain_count, 60 - pc.getqf("mob_kill2_count"))
|
||||
|
||||
end -- end of when
|
||||
|
||||
when login with game.get_event_flag("harvest_festival") == 0 begin
|
||||
harvest_festival.reset_flags()
|
||||
end
|
||||
|
||||
when info or button begin
|
||||
local mob2_info = pc.getqf("mob2_info")
|
||||
if mob2_info == 10 then
|
||||
mob2_name = gameforge.harvest_festival._820_say
|
||||
elseif mob2_info == 9 then
|
||||
mob2_name = gameforge.harvest_festival._810_say
|
||||
elseif mob2_info == 8 then
|
||||
mob2_name = gameforge.harvest_festival._610_say
|
||||
elseif mob2_info == 7 then
|
||||
mob2_name = gameforge.harvest_festival._600_say
|
||||
elseif mob2_info == 6 then
|
||||
mob2_name = gameforge.harvest_festival._620_say
|
||||
elseif mob2_info == 5 then
|
||||
mob2_name = gameforge.harvest_festival._630_say
|
||||
elseif mob2_info == 4 then
|
||||
mob2_name = gameforge.harvest_festival._640_say
|
||||
elseif mob2_info == 3 then
|
||||
mob2_name = gameforge.harvest_festival._650_say
|
||||
elseif mob2_info == 2 then
|
||||
mob2_name = gameforge.harvest_festival._660_say
|
||||
elseif mob2_info == 1 then
|
||||
mob2_name = gameforge.harvest_festival._670_say
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._520_sendLetter)
|
||||
say(string.format(gameforge.harvest_festival._720_say,mob2_name))
|
||||
|
||||
if party.is_party() then
|
||||
say(gameforge.harvest_festival._730_say)
|
||||
else
|
||||
say(gameforge.harvest_festival._740_say)
|
||||
end -- end of if
|
||||
|
||||
local gogo_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._540_select)
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._750_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you have finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._760_say)
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you come back for the dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._770_say)
|
||||
wait()
|
||||
|
||||
-- Getting Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._780_say,rice_count))
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._790_say)
|
||||
set_state(information)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._795_say)
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._390_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say,current_count))
|
||||
set_state(mob_kill1)
|
||||
return
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._800_say)
|
||||
end -- end of when
|
||||
|
||||
when 108.kill with pc.getf("harvest_festival","mob2_info") == 10 and party.is_party() begin
|
||||
harvest_festival.kill_action(108,2)
|
||||
end -- end of when
|
||||
|
||||
when 109.kill with pc.getf("harvest_festival","mob2_info") == 9 and party.is_party() begin
|
||||
harvest_festival.kill_action(109,2)
|
||||
end -- end of when
|
||||
|
||||
when 113.kill with pc.getf("harvest_festival","mob2_info") == 1 and party.is_party() begin
|
||||
harvest_festival.kill_action(113,2)
|
||||
end -- end of when
|
||||
|
||||
when 502.kill with pc.getf("harvest_festival","mob2_info") == 2 and party.is_party() begin
|
||||
harvest_festival.kill_action(502,2)
|
||||
end -- end of when
|
||||
|
||||
when 703.kill with pc.getf("harvest_festival","mob2_info") == 3 and party.is_party() begin
|
||||
harvest_festival.kill_action(703,2)
|
||||
end -- end of when
|
||||
|
||||
when 707.kill with pc.getf("harvest_festival","mob2_info") == 4 and party.is_party() begin
|
||||
harvest_festival.kill_action(707,2)
|
||||
end -- end of when
|
||||
|
||||
when 1305.kill with pc.getf("harvest_festival","mob2_info") == 5 and party.is_party() begin
|
||||
harvest_festival.kill_action(1305,2)
|
||||
end -- end of when
|
||||
|
||||
when 2205.kill with pc.getf("harvest_festival","mob2_info") == 6 and party.is_party() begin
|
||||
harvest_festival.kill_action(2205,2)
|
||||
end -- end of when
|
||||
|
||||
when 2501.kill with pc.getf("harvest_festival","mob2_info") == 7 and party.is_party() begin
|
||||
harvest_festival.kill_action(2501,2)
|
||||
end -- end of when
|
||||
|
||||
when 2503.kill with pc.getf("harvest_festival","mob2_info") == 8 and party.is_party() begin
|
||||
notice("Zombie tot")
|
||||
harvest_festival.kill_action(2503,2)
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
end -- end of quest
|
||||
|
829
gamefiles/data/quest/harvest_festival.quest.1
Normal file
829
gamefiles/data/quest/harvest_festival.quest.1
Normal file
@ -0,0 +1,829 @@
|
||||
-- Chuseok Events
|
||||
quest harvest_festival begin
|
||||
state start begin
|
||||
|
||||
function get_random_rice()
|
||||
if (pc.get_level() >= 56) then
|
||||
random_rice = number(4, 7)
|
||||
elseif (pc.get_level() >= 40) then
|
||||
random_rice = number(3, 7)
|
||||
elseif (pc.get_level() > 30) then
|
||||
random_rice = number(3, 5)
|
||||
else
|
||||
random_rice = number(2, 3)
|
||||
end -- end of if
|
||||
return random_rice
|
||||
|
||||
end
|
||||
|
||||
when login with pc.get_level() > 0 begin
|
||||
set_state(information)
|
||||
pc.setqf("harvest_festival_count", 0)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("cake_count", 0)
|
||||
pc.setqf("rice_count", 0)
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
-- Event Start
|
||||
state information begin
|
||||
when letter with game.get_event_flag("harvest_festival")>0 begin
|
||||
local v= find_npc_by_vnum(20086)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__", v, "Wondarim")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Glutinous rice in exchange for a gift
|
||||
when 20087.chat."Glutinous Rice Gets Lost?" with game.get_event_flag("harvest_festival")>0 begin
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
|
||||
say("Handueop: ")
|
||||
say("You have "..rice_count.." Glutinous rice!")
|
||||
say("")
|
||||
say("Not all of them are good, some are sticky!")
|
||||
say("")
|
||||
|
||||
local reward_set = select("I<>ll try it!","I<>ll get used glutinous rice raseo..")
|
||||
|
||||
if reward_set == 2 then
|
||||
say("Handueop: ")
|
||||
say("You can come back again when you change your mind..")
|
||||
say("")
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say("Handueop: ")
|
||||
say("glutinous rice can give different gifts..")
|
||||
say("Would you like to exchange it for something?")
|
||||
say("")
|
||||
|
||||
local harvest_item_set = select("15x Glut", "15x Gl","35x Perle","35x Gluttrank","35x Gltes","Maybe later")
|
||||
|
||||
if harvest_item_set == 6 then
|
||||
say("Handueop: ")
|
||||
say("Come back when you made up your mind.")
|
||||
say("")
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local harvest_item_name = ""
|
||||
local harvest_rice_count = 0
|
||||
|
||||
|
||||
if harvest_item_set == 1 then
|
||||
harvest_item_name = " Thief Gloves (10h)"
|
||||
harvest_rice_count = 15
|
||||
elseif harvest_item_set == 2 then
|
||||
harvest_item_name = " Experience Ring (10h)"
|
||||
harvest_rice_count = 15
|
||||
elseif harvest_item_set == 3 then
|
||||
harvest_item_name = "1x Wei<65>e Perle "
|
||||
harvest_rice_count = 35
|
||||
elseif harvest_item_set == 4 then
|
||||
harvest_item_name = "10x Geschwindigkeitstrank "
|
||||
harvest_rice_count = 35
|
||||
elseif harvest_item_set == 5 then
|
||||
harvest_item_name = "200x Schriftrolle des Ortes "
|
||||
harvest_rice_count = 35
|
||||
end -- end of if
|
||||
|
||||
-- Check glutinous rice amount
|
||||
if rice_count < harvest_rice_count then
|
||||
say("Handueop: ")
|
||||
say("You dont have enough glutinous rice..")
|
||||
say("Please collect more!")
|
||||
say("")
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say("Handueop: ")
|
||||
say("You choose a good gift..")
|
||||
say("")
|
||||
say("Want to trade "..harvest_rice_count.." for "..harvest_item_name)
|
||||
say("Do you want to make the exchange?")
|
||||
say("")
|
||||
|
||||
local item_get_set = select("Exchange the rice for the gifts!", "Ill come back later..")
|
||||
|
||||
if item_get_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- System to hand out the items
|
||||
if harvest_item_set == 1 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72004", 1)
|
||||
elseif harvest_item_set == 2 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72001", 1)
|
||||
elseif harvest_item_set == 3 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("27992", 1)
|
||||
elseif harvest_item_set == 4 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("71050", 10)
|
||||
elseif harvest_item_set == 5 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("22010", 200)
|
||||
end -- end of if
|
||||
|
||||
say_reward(harvest_item_name.." was the item that you got!")
|
||||
say("")
|
||||
say("I like this gift..")
|
||||
say("You should come back when you collect more rice !!")
|
||||
say("")
|
||||
|
||||
end -- end of when
|
||||
when 20086.chat."Harvest Event Commands" with pc.get_gm_level() == 5 begin
|
||||
|
||||
if game.get_event_flag("harvest_festival") == 0 then
|
||||
|
||||
say("Current Status: ThanksGiving Event Results")
|
||||
say("")
|
||||
|
||||
local s = select("Start Event", "Cancel")
|
||||
if 1==s then
|
||||
|
||||
game.set_event_flag("harvest_festival", 1)
|
||||
return
|
||||
end
|
||||
else
|
||||
|
||||
say("Current Status: The event is currently active")
|
||||
say("")
|
||||
local s = select("Stop the Event", "Cancel")
|
||||
if 1==s then
|
||||
|
||||
game.set_event_flag("harvest_festival", 0)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20086.chat."Find the lost Rice Cake!" with game.get_event_flag("harvest_festival")>0 begin
|
||||
target.delete("__TARGET__")
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say("Wondarim: ")
|
||||
say("Thank you for bringing me this dish")
|
||||
say("")
|
||||
say("Have a good Thanksgiving..")
|
||||
say("")
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you came back for this dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say("Wondarim: ")
|
||||
say("Oh, got to stop getting this dish back!!")
|
||||
say("")
|
||||
wait()
|
||||
|
||||
-- Getting the Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title("You have "..cake_count.."Glutinous Rice!")
|
||||
say("")
|
||||
say("Wondarim: ")
|
||||
say("In return for this dish, I'm here..")
|
||||
say("Glutinous am here..")
|
||||
say("Uncle reportedly handueop ")
|
||||
say("Glutinous Rice told me seek...")
|
||||
say("Please visit again later ")
|
||||
say("")
|
||||
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
|
||||
say("Wondarim: ")
|
||||
say("Meanwhile, Been so many things...")
|
||||
say("I think the occasion gonna stay enough")
|
||||
say("")
|
||||
|
||||
return
|
||||
else
|
||||
say("Wondarim: ")
|
||||
say("By the way ... I ")
|
||||
say("Still, the lack otto..")
|
||||
say("Thank you once again do not think?")
|
||||
say("")
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select("WHILE you're starting to help him continue to UD..","I<>ll help you later")
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say("Wondarim: ")
|
||||
say("I believe I'm going to wait.!")
|
||||
say("Please get you back ~")
|
||||
say("")
|
||||
say("Current Progress"..current_count)
|
||||
say("")
|
||||
say("Info> This quest can be repeated 10x.")
|
||||
say("")
|
||||
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you stop and do the quest again
|
||||
if quest_count > 0 then
|
||||
say("Wondarim: ")
|
||||
say("By the way ... I ")
|
||||
say("Dish, still lacks ")
|
||||
say("Would you mind once again keep up the excellent work?")
|
||||
say("")
|
||||
say("Please gather more..")
|
||||
say("")
|
||||
|
||||
local replay_set = select("Continue to help him..","I<>ll help you later")
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say("Wondarim: ")
|
||||
say("I believe I'm going to wait.!")
|
||||
say("Please get you back")
|
||||
say("")
|
||||
say("Current Progress"..current_count)
|
||||
say("")
|
||||
say("Info> This quest can be repeated 10x.")
|
||||
say("")
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- When you start for the 1st time
|
||||
say("Wondarim: ")
|
||||
say("Could you please do me a favor?")
|
||||
say("")
|
||||
say("The tigers came back to the village on the past days.")
|
||||
say("They have stolen all ingredients for our meal")
|
||||
say("")
|
||||
say("With those ingredients, we would be able to do our famous dish,")
|
||||
say("we can give you a little bit as a reward..")
|
||||
say("")
|
||||
say("Will you help us?")
|
||||
say("")
|
||||
|
||||
local main_set = select("Of course!.. I<>ll find it!!","I<>m very busy. Have a nice Thanks Giving day.")
|
||||
if main_set == 2 then
|
||||
say("Wondarim:")
|
||||
say("Oh, ok.")
|
||||
say("Thank you and nice Thanksgiving day")
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
if pc.get_level() < 20 then
|
||||
say("Wondarim: ")
|
||||
say("You need to improve your power before..")
|
||||
say("")
|
||||
say("You will need more than 20 minutes to solve our mistake.")
|
||||
say("")
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say("Wondarim: ")
|
||||
say("I think Im going to wait!")
|
||||
say("Please, return")
|
||||
say(current_count.." Quest Progress")
|
||||
set_state(mob_kill1)
|
||||
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill1 begin
|
||||
when letter begin
|
||||
send_letter("Please, get the dish back!")
|
||||
end -- end of when
|
||||
|
||||
when info or button begin
|
||||
say(locale.NOTICE_COLOR.." Get the dish back from the tigers!"..locale.NORMAL_COLOR)
|
||||
say("")
|
||||
say("Slay tigers to recover")
|
||||
say("30 rice cakes and deliver them to Wondarim!")
|
||||
say("")
|
||||
|
||||
local gogo_set = select("Accept!","Give up!")
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
when 20086.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say("Wondarim:")
|
||||
say("Please, get the dish back..")
|
||||
say("")
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say("Handueop:")
|
||||
say("I want to make glutinous rice cakes..")
|
||||
say("")
|
||||
say("Help out Wondarim to find the rice cakes")
|
||||
say("And she will reward you accordingly!")
|
||||
say("")
|
||||
end -- end of when
|
||||
|
||||
|
||||
when 114.kill begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = 0
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("tigers_remaining", 30 - kill_count);
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
|
||||
if (pc.get_level() >= 56) then
|
||||
random_rice = number(2, 3)
|
||||
elseif (pc.get_level() >= 40) then
|
||||
random_rice = number(1, 3)
|
||||
elseif (pc.get_level() > 30) then
|
||||
random_rice = number(1, 2)
|
||||
else
|
||||
random_rice = 1
|
||||
end -- end of if
|
||||
|
||||
local mob2_name = ""
|
||||
|
||||
if pc.get_level() >= 91 then
|
||||
pc.setqf("mob2_info", 8)
|
||||
mob2_name = "Setaou-Seherin (2403)"
|
||||
elseif pc.get_level() >= 81 then
|
||||
pc.setqf("mob2_info", 7)
|
||||
mob2_name = "Setaou-K<>mpfer (2401)"
|
||||
elseif pc.get_level() >= 71 then
|
||||
pc.setqf("mob2_info", 6)
|
||||
mob2_name = "Flame Warrior"
|
||||
elseif pc.get_level() >= 61 then
|
||||
pc.setqf("mob2_info", 5)
|
||||
mob2_name = "Bullfrog General"
|
||||
elseif pc.get_level() >= 51 then
|
||||
pc.setqf("mob2_info", 4)
|
||||
mob2_name = "Dark Summoner"
|
||||
elseif pc.get_level() >= 41 then
|
||||
pc.setqf("mob2_info", 3)
|
||||
mob2_name = "Esoteric Arahan Fighter"
|
||||
elseif pc.get_level() >= 31 then
|
||||
pc.setqf("mob2_info", 2)
|
||||
mob2_name = "Savage Minion"
|
||||
elseif pc.get_level() >= 20 then
|
||||
pc.setqf("mob2_info", 1)
|
||||
mob2_name = "Brown Bear"
|
||||
end -- end of if
|
||||
|
||||
say("Tiger: ")
|
||||
say("What was the name ...")
|
||||
say("of the monster that attacked us...")
|
||||
say("not so long ago?"..mob2_name.."!!")
|
||||
say("It looked very menacing...")
|
||||
say("And they took most of the rice cakes!")
|
||||
say("")
|
||||
say("And I couldn<64>t do much since I<>m alone..")
|
||||
say("")
|
||||
wait()
|
||||
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
|
||||
-- Check the second monster hunt
|
||||
say_title("The tigers looted everything, including "..random_rice.."!")
|
||||
say("")
|
||||
say("Hum.. I think someone is tricking us..")
|
||||
say("")
|
||||
say("Catch some"..mob2_name)
|
||||
say("To get one more dish..")
|
||||
say("")
|
||||
|
||||
local sub_set = select("Return to find more Rice Cakes..","Give it to Wondarim..")
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
|
||||
if sub_set == 2 then
|
||||
say_pc_name()
|
||||
say("Return to Wondarim with the dish")
|
||||
say("I<>ll replace it with glutinous rice")
|
||||
say("That will bring us good luck for Thanksgiving..")
|
||||
say("")
|
||||
set_state(information)
|
||||
return
|
||||
end
|
||||
say("Tiger: ")
|
||||
say("Go now for "..mob2_name.."!")
|
||||
say("Find a party..")
|
||||
say("")
|
||||
say("Dont understand this")
|
||||
say("")
|
||||
|
||||
set_state(mob_kill2)
|
||||
end
|
||||
end -- end of when
|
||||
|
||||
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill2 begin
|
||||
|
||||
when letter begin
|
||||
local mob2_info = pc.getqf("mob2_info")
|
||||
if mob2_info == 8 then
|
||||
mob2_name = "Fvdfdf"
|
||||
elseif mob2_info == 7 then
|
||||
mob2_name = "ibla"
|
||||
elseif mob2_info == 6 then
|
||||
mob2_name = "Flame Warrior"
|
||||
elseif mob2_info == 5 then
|
||||
mob2_name = "Bullfrog General"
|
||||
elseif mob2_info == 4 then
|
||||
mob2_name = "Dark Summoner"
|
||||
elseif mob2_info == 3 then
|
||||
mob2_name = "Esoteric Arahan Fighter"
|
||||
elseif mob2_info == 2 then
|
||||
mob2_name = "Savage Minion"
|
||||
elseif mob2_info == 1 then
|
||||
mob2_name = "Brown Bear"
|
||||
end -- end of if
|
||||
|
||||
send_letter("??? ???!")
|
||||
end -- end of when
|
||||
when info or button begin
|
||||
local mob2_info = pc.getqf("mob2_info")
|
||||
|
||||
if mob2_info == 8 then
|
||||
mob2_name = "BlaBloub"
|
||||
elseif mob2_info == 7 then
|
||||
mob2_name = "faaa"
|
||||
elseif mob2_info == 6 then
|
||||
mob2_name = "Flame Warrior"
|
||||
elseif mob2_info == 5 then
|
||||
mob2_name = "Bullfrog General"
|
||||
elseif mob2_info == 4 then
|
||||
mob2_name = "Dark Summoner"
|
||||
elseif mob2_info == 3 then
|
||||
mob2_name = "Esoteric Arahan Fighter"
|
||||
elseif mob2_info == 2 then
|
||||
mob2_name = "Savage Minion"
|
||||
elseif mob2_info == 1 then
|
||||
mob2_name = "Brown Bear"
|
||||
end -- end of if
|
||||
|
||||
say_title("Recover the dish!")
|
||||
say("")
|
||||
say("Slay 60 "..mob2_name)
|
||||
say("Recover the rice cake for Wondarim!")
|
||||
say("")
|
||||
|
||||
if party.is_party() then
|
||||
say("It was a good idea to form a party..")
|
||||
say("")
|
||||
else
|
||||
say("It is a condition to form up a party")
|
||||
say("As we talked previously, you<6F>ll have to find party members..")
|
||||
say("")
|
||||
end -- end of if
|
||||
|
||||
local gogo_set = select("I will continue!","I will give up!")
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
|
||||
when 20086.chat."Find it" with game.get_event_flag("harvest_festival")>0 begin
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you have finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say("Wondarim: ")
|
||||
say("Thank you for comming back with the dishes")
|
||||
say("Enjoy your Thanksgiving..")
|
||||
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you come back for the dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say("Wondarim: ")
|
||||
say("Oh, you have to stop returning this dish!")
|
||||
wait()
|
||||
|
||||
-- Getting Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title("I<>ve got "..cake_count.." glutinous rice!")
|
||||
say("Wondarim: ")
|
||||
say("I<>m here so that you can return this dish.")
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
|
||||
say("Wondarim: ")
|
||||
say("You<6F>ve already so many things...")
|
||||
say("I think that for now it is enough?")
|
||||
|
||||
set_state(information)
|
||||
return
|
||||
else
|
||||
say("Wondarim: ")
|
||||
say("We still need for you to do some things..")
|
||||
say("Would you mind the trouble once again?")
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select("Continue helping","Il help you later")
|
||||
|
||||
if replay_set == 2 then
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say("Wondarim: ")
|
||||
say("I believe I<>m going to wait!")
|
||||
say("Please come back later")
|
||||
say("Quest Progress: "..current_count..". ")
|
||||
say("tip This quest can be finished up to 10 times.")
|
||||
|
||||
set_state(mob_kill1)
|
||||
return
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say("Handueop:")
|
||||
say("I<>m looking to create Glutinous rice cakes..")
|
||||
say("As a favor to Wondarim")
|
||||
say("I will get your glutinous rice... since it is the good stuff!!")
|
||||
end -- end of when
|
||||
|
||||
when 113.kill with pc.getf("harvest_festival","mob2_info") == 1 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_113", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 502.kill with pc.getf("harvest_festival","mob2_info") == 2 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_502", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 703.kill with pc.getf("harvest_festival","mob2_info") == 3 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_703", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 707.kill with pc.getf("harvest_festival","mob2_info") == 4 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_707", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 1305.kill with pc.getf("harvest_festival","mob2_info") == 5 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_1305", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2205.kill with pc.getf("harvest_festival","mob2_info") == 6 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2205", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2401.kill with pc.getf("harvest_festival","mob2_info") == 7 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2401", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2403.kill with pc.getf("harvest_festival","mob2_info") == 8 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice()
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2403", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format("You have defeated the target Mob, you receive %s rice.[ENTER]Go back with this dish and tell Wondarim", random_rice), notice)
|
||||
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
end -- end of quest
|
||||
|
876
gamefiles/data/quest/harvest_festival.quest.2
Normal file
876
gamefiles/data/quest/harvest_festival.quest.2
Normal file
@ -0,0 +1,876 @@
|
||||
-- Chuseok Events
|
||||
quest harvest_festival begin
|
||||
state start begin
|
||||
function kill_action()
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2403", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
|
||||
end
|
||||
|
||||
|
||||
function get_random_rice(type)
|
||||
if (type == 1) then
|
||||
if (pc.get_level() >= 90) then
|
||||
random_rice = number(3, 6)
|
||||
elseif (pc.get_level() >= 70) then
|
||||
random_rice = number(2, 5)
|
||||
elseif (pc.get_level() >= 50) then
|
||||
random_rice = number(2, 4)
|
||||
elseif (pc.get_level() >= 30) then
|
||||
random_rice = number(1, 3)
|
||||
elseif (pc.get_level() >= 10) then
|
||||
random_rice = number(1, 2)
|
||||
else
|
||||
random_rice = number(1, 2)
|
||||
end -- end of if
|
||||
elseif (type == 2) then
|
||||
if (pc.get_level() >= 90) then
|
||||
random_rice = number(4, 8)
|
||||
elseif (pc.get_level() >= 70) then
|
||||
random_rice = number(3, 7)
|
||||
elseif (pc.get_level() >= 50) then
|
||||
random_rice = number(3, 6)
|
||||
elseif (pc.get_level() >= 30) then
|
||||
random_rice = number(2, 5)
|
||||
elseif (pc.get_level() >= 10) then
|
||||
random_rice = number(2, 4)
|
||||
else
|
||||
random_rice = number(2, 3)
|
||||
end -- end of if
|
||||
end
|
||||
|
||||
return random_rice
|
||||
|
||||
end
|
||||
|
||||
when login with pc.get_level() > 0 begin
|
||||
set_state(information)
|
||||
pc.setqf("harvest_festival_count", 0)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("cake_count", 0)
|
||||
pc.setqf("rice_count", 0)
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
-- Event Start
|
||||
state information begin
|
||||
when letter with game.get_event_flag("harvest_festival")>0 begin
|
||||
local v= find_npc_by_vnum(20086)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__", v, gameforge.harvest_festival._010_targetVid)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Glutinous rice in exchange for a gift
|
||||
when 20087.chat.gameforge.harvest_festival._025_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._030_say, rice_count))
|
||||
local reward_set = select(gameforge.harvest_festival._040_select, gameforge.harvest_festival._050_select)
|
||||
|
||||
if reward_set == 2 then
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._060_say)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._070_say)
|
||||
|
||||
-- local harvest_item_set = select("15x Glut", "15x Gl","35x Perle","35x Gluttrank","35x Gltes","Maybe later")
|
||||
local harvest_item_set = select(gameforge.harvest_festival._090_select,
|
||||
gameforge.harvest_festival._100_select,
|
||||
gameforge.harvest_festival._110_select,
|
||||
gameforge.harvest_festival._120_select,
|
||||
gameforge.harvest_festival._130_select,
|
||||
gameforge.harvest_festival._140_select,
|
||||
gameforge.harvest_festival._150_select,
|
||||
gameforge.harvest_festival._160_select,
|
||||
gameforge.harvest_festival._170_select)
|
||||
if harvest_item_set == 9 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local harvest_item_name = ""
|
||||
local harvest_rice_count = 0
|
||||
|
||||
|
||||
if harvest_item_set == 1 then
|
||||
harvest_item_name = gameforge.harvest_festival._090_select
|
||||
harvest_rice_count = 30
|
||||
elseif harvest_item_set == 2 then
|
||||
harvest_item_name = gameforge.harvest_festival._100_select
|
||||
harvest_rice_count = 45
|
||||
elseif harvest_item_set == 3 then
|
||||
harvest_item_name = gameforge.harvest_festival._110_select
|
||||
harvest_rice_count = 50
|
||||
elseif harvest_item_set == 4 then
|
||||
harvest_item_name = gameforge.harvest_festival._120_select
|
||||
harvest_rice_count = 55
|
||||
elseif harvest_item_set == 5 then
|
||||
harvest_item_name = gameforge.harvest_festival._130_select
|
||||
harvest_rice_count = 60
|
||||
elseif harvest_item_set == 6 then
|
||||
harvest_item_name = gameforge.harvest_festival._140_select
|
||||
harvest_rice_count = 70
|
||||
elseif harvest_item_set == 7 then
|
||||
harvest_item_name = gameforge.harvest_festival._150_select
|
||||
harvest_rice_count = 75
|
||||
elseif harvest_item_set == 8 then
|
||||
harvest_item_name = gameforge.harvest_festival._160_select
|
||||
harvest_rice_count = 80
|
||||
end -- end of if
|
||||
|
||||
-- Check glutinous rice amount
|
||||
if rice_count < harvest_rice_count then
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._180_say)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._190_say)
|
||||
say("")
|
||||
say(string.format(gameforge.harvest_festival._200_say,harvest_rice_count, harvest_item_name))
|
||||
say(gameforge.harvest_festival._210_say)
|
||||
|
||||
local item_get_set = select(gameforge.harvest_festival._220_select, gameforge.harvest_festival._170_select)
|
||||
|
||||
if item_get_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- System to hand out the items
|
||||
if harvest_item_set == 1 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50109", 1)
|
||||
elseif harvest_item_set == 2 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50110", 1)
|
||||
elseif harvest_item_set == 3 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72728", 1)
|
||||
elseif harvest_item_set == 4 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50111", 1)
|
||||
elseif harvest_item_set == 5 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50112", 1)
|
||||
elseif harvest_item_set == 6 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("72724", 1)
|
||||
elseif harvest_item_set == 7 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50114", 1)
|
||||
elseif harvest_item_set == 8 then
|
||||
pc.setqf("rice_count", rice_count - harvest_rice_count)
|
||||
pc.give_item2("50115", 1)
|
||||
end -- end of if
|
||||
|
||||
say_reward(string.format(gameforge.harvest_festival._230_say,harvest_item_name))
|
||||
say(gameforge.harvest_festival._240_say)
|
||||
|
||||
end -- end of when
|
||||
|
||||
when 20086.chat."Harvest Event Commands" with pc.get_gm_level() == 5 begin
|
||||
|
||||
if game.get_event_flag("harvest_festival") == 0 then
|
||||
|
||||
say("Current Status: ThanksGiving Event Results")
|
||||
say("")
|
||||
|
||||
local s = select("Start Event", "Cancel")
|
||||
if 1==s then
|
||||
|
||||
game.set_event_flag("harvest_festival", 1)
|
||||
return
|
||||
end
|
||||
else
|
||||
|
||||
say("Current Status: The event is currently active")
|
||||
say("")
|
||||
local s = select("Stop the Event", "Cancel")
|
||||
if 1==s then
|
||||
|
||||
game.set_event_flag("harvest_festival", 0)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._250_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
target.delete("__TARGET__")
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._270_say)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you came back for this dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._280_say)
|
||||
wait()
|
||||
|
||||
-- Getting the Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._290_say, cake_count))
|
||||
wait()
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._300_say)
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._310_say)
|
||||
|
||||
return
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._320_say)
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._330_select, gameforge.harvest_festival._340_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._350_say)
|
||||
say(string.format(gameforge.harvest_festival._360_say, current_count))
|
||||
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you stop and do the quest again
|
||||
if quest_count > 0 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._360_say)
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._390_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say, current_count))
|
||||
set_state(mob_kill1)
|
||||
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- here we must put the different mobnames
|
||||
if pc.get_level() >= 81 then
|
||||
pc.setqf("mob1_info", 6)
|
||||
mob1_name = gameforge.harvest_festival._410_say
|
||||
elseif pc.get_level() >= 61 then
|
||||
pc.setqf("mob1_info", 5)
|
||||
mob1_name = gameforge.harvest_festival._420_say
|
||||
elseif pc.get_level() >= 41 then
|
||||
pc.setqf("mob1_info", 4)
|
||||
mob1_name = gameforge.harvest_festival._430_say
|
||||
elseif pc.get_level() >= 21 then
|
||||
pc.setqf("mob1_info", 3)
|
||||
mob1_name = gameforge.harvest_festival._440_say
|
||||
elseif pc.get_level() >= 11 then
|
||||
pc.setqf("mob1_info", 2)
|
||||
mob1_name = gameforge.harvest_festival._450_say
|
||||
elseif pc.get_level() <= 10 then
|
||||
pc.setqf("mob1_info", 1)
|
||||
mob1_name = gameforge.harvest_festival._460_say
|
||||
end -- end of if
|
||||
|
||||
|
||||
-- When you start for the 1st time
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._470_say)
|
||||
say(string.format(gameforge.harvest_festival._480_say, mob1_name))
|
||||
|
||||
local main_set = select(gameforge.harvest_festival._490_select,gameforge.harvest_festival._500_select)
|
||||
if main_set == 2 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._510_select)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say, current_count))
|
||||
set_state(mob_kill1)
|
||||
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill1 begin
|
||||
when letter begin
|
||||
send_letter(gameforge.harvest_festival._520_sendLetter)
|
||||
end -- end of when
|
||||
|
||||
when info or button begin
|
||||
local mob1_info = pc.getqf("mob1_info")
|
||||
if mob1_info == 6 then
|
||||
mob1_name = gameforge.harvest_festival._410_say
|
||||
elseif mob1_info == 5 then
|
||||
mob1_name = gameforge.harvest_festival._420_say
|
||||
elseif mob1_info == 4 then
|
||||
mob1_name = gameforge.harvest_festival._430_say
|
||||
elseif mob1_info == 3 then
|
||||
mob1_name = gameforge.harvest_festival._440_say
|
||||
elseif mob1_info == 2 then
|
||||
mob1_name = gameforge.harvest_festival._450_say
|
||||
elseif mob1_info == 1 then
|
||||
mob1_name = gameforge.harvest_festival._460_say
|
||||
end -- end of if
|
||||
|
||||
say(gameforge.harvest_festival._520_sendLetter)
|
||||
say(string.format(gameforge.harvest_festival._530_say, mob1_info))
|
||||
|
||||
local gogo_set = select(gameforge.harvest_festival._540_select,gameforge.harvest_festival._550_select)
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._570_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count")
|
||||
if kill_count < 30 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._580_say)
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._590_say)
|
||||
local mob2_name = ""
|
||||
if pc.get_level() >= 91 then
|
||||
pc.setqf("mob2_info", 8)
|
||||
mob2_name = gameforge.harvest_festival._600_say
|
||||
elseif pc.get_level() >= 81 then
|
||||
pc.setqf("mob2_info", 7)
|
||||
mob2_name = gameforge.harvest_festival._610_say
|
||||
elseif pc.get_level() >= 71 then
|
||||
pc.setqf("mob2_info", 6)
|
||||
mob2_name = gameforge.harvest_festival._620_say
|
||||
elseif pc.get_level() >= 61 then
|
||||
pc.setqf("mob2_info", 5)
|
||||
mob2_name = gameforge.harvest_festival._630_say
|
||||
elseif pc.get_level() >= 51 then
|
||||
pc.setqf("mob2_info", 4)
|
||||
mob2_name = gameforge.harvest_festival._640_say
|
||||
elseif pc.get_level() >= 41 then
|
||||
pc.setqf("mob2_info", 3)
|
||||
mob2_name = gameforge.harvest_festival._650_say
|
||||
elseif pc.get_level() >= 31 then
|
||||
pc.setqf("mob2_info", 2)
|
||||
mob2_name = gameforge.harvest_festival._660_say
|
||||
elseif pc.get_level() >= 20 then
|
||||
pc.setqf("mob2_info", 1)
|
||||
mob2_name = gameforge.harvest_festival._670_say
|
||||
end -- end of if
|
||||
|
||||
say(string.format(gameforge.harvest_festival._680_say, mob2_name))
|
||||
local sub_set = select(gameforge.harvest_festival._690_select,gameforge.harvest_festival._700_select)
|
||||
|
||||
if sub_set == 2 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._710_say)
|
||||
set_state(information)
|
||||
return
|
||||
end
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._715_say, mob2_name))
|
||||
set_state(mob_kill2)
|
||||
end
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say_title(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._550_select)
|
||||
end -- end of when
|
||||
|
||||
when 1137.kill with pc.getf("harvest_festival","mob1_info") == 6 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_1137", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
when 2202.kill with pc.getf("harvest_festival","mob1_info") == 5 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2202", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when 701.kill with pc.getf("harvest_festival","mob1_info") == 4 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_701", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
when 501.kill with pc.getf("harvest_festival","mob1_info") == 3 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_501", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
when 301.kill with pc.getf("harvest_festival","mob1_info") == 2 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_301", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
end
|
||||
end -- end of when
|
||||
|
||||
when 105.kill with pc.getf("harvest_festival","mob1_info") == 1 begin
|
||||
local kill_count = pc.getqf("mob_kill1_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(1)
|
||||
pc.setqf("mob_kill1_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_105", 30 - kill_count)
|
||||
|
||||
if kill_count >= 30 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- How many dishes are needed
|
||||
pc.setqf("cake_count", random_rice)
|
||||
clear_letter()
|
||||
end
|
||||
end -- end of when
|
||||
|
||||
|
||||
end -- end of state
|
||||
|
||||
|
||||
state mob_kill2 begin
|
||||
|
||||
when letter begin
|
||||
send_letter(gameforge.harvest_festival._520_sendLetter)
|
||||
end -- end of when
|
||||
|
||||
when info or button begin
|
||||
local mob2_info = pc.getqf("mob2_info")
|
||||
if mob2_info == 8 then
|
||||
mob2_name = gameforge.harvest_festival._600_say
|
||||
elseif mob2_info == 7 then
|
||||
mob2_name = gameforge.harvest_festival._610_say
|
||||
elseif mob2_info == 6 then
|
||||
mob2_name = gameforge.harvest_festival._620_say
|
||||
elseif mob2_info == 5 then
|
||||
mob2_name = gameforge.harvest_festival._630_say
|
||||
elseif mob2_info == 4 then
|
||||
mob2_name = gameforge.harvest_festival._640_say
|
||||
elseif mob2_info == 3 then
|
||||
mob2_name = gameforge.harvest_festival._650_say
|
||||
elseif mob2_info == 2 then
|
||||
mob2_name = gameforge.harvest_festival._660_say
|
||||
elseif mob2_info == 1 then
|
||||
mob2_name = gameforge.harvest_festival._670_say
|
||||
end -- end of if
|
||||
|
||||
say_title(gameforge.harvest_festival._520_sendLetter)
|
||||
say(string.format(gameforge.harvest_festival._720_say,mob2_name))
|
||||
|
||||
if party.is_party() then
|
||||
say(gameforge.harvest_festival._730_say)
|
||||
else
|
||||
say(gameforge.harvest_festival._740_say)
|
||||
end -- end of if
|
||||
|
||||
local gogo_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._540_select)
|
||||
|
||||
if gogo_set == 2 then
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
end -- end of if
|
||||
|
||||
end -- end of when
|
||||
|
||||
|
||||
when 20086.chat.gameforge.harvest_festival._750_npcChat with game.get_event_flag("harvest_festival")>0 begin
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
local quest_complete = pc.getqf("harvest_festival_mob_complete")
|
||||
|
||||
-- When you have finished all the quests
|
||||
if quest_count >= 10 then
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._760_say)
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
-- If you come back for the dish
|
||||
if quest_complete == 1 then
|
||||
pc.setqf("harvest_festival_count", quest_count + 1)
|
||||
pc.setqf("harvest_festival_mob_complete", 0)
|
||||
pc.setqf("mob_kill1_count", 0)
|
||||
pc.setqf("mob_kill2_count", 0)
|
||||
|
||||
local quest_count = pc.getqf("harvest_festival_count")
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._770_say)
|
||||
wait()
|
||||
|
||||
-- Getting Glutinous Rice
|
||||
local rice_count = pc.getqf("rice_count")
|
||||
local cake_count = pc.getqf("cake_count")
|
||||
pc.setqf("rice_count", rice_count + cake_count)
|
||||
pc.setqf("cake_count", 0)
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._780_say)
|
||||
wait()
|
||||
|
||||
if quest_count >= 10 then
|
||||
char_log(0, "EVENT_RECORD", "harvest_festival clear")
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._790_say)
|
||||
set_state(information)
|
||||
return
|
||||
else
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(gameforge.harvest_festival._795_say)
|
||||
end -- end of if
|
||||
|
||||
local replay_set = select(gameforge.harvest_festival._380_select,gameforge.harvest_festival._390_select)
|
||||
|
||||
if replay_set == 2 then
|
||||
set_state(information)
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
local current_count = quest_count + 1
|
||||
|
||||
say_title(gameforge.harvest_festival._260_sayTitle)
|
||||
say(string.format(gameforge.harvest_festival._400_say,current_count))
|
||||
set_state(mob_kill1)
|
||||
return
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 20087.click with game.get_event_flag("harvest_festival")>0 begin
|
||||
say(gameforge.harvest_festival._020_sayTitle)
|
||||
say(gameforge.harvest_festival._800_say)
|
||||
end -- end of when
|
||||
|
||||
when 113.kill with pc.getf("harvest_festival","mob2_info") == 1 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_113", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 502.kill with pc.getf("harvest_festival","mob2_info") == 2 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_502", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 703.kill with pc.getf("harvest_festival","mob2_info") == 3 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_703", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 707.kill with pc.getf("harvest_festival","mob2_info") == 4 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_707", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 1305.kill with pc.getf("harvest_festival","mob2_info") == 5 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_1305", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2205.kill with pc.getf("harvest_festival","mob2_info") == 6 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2205", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2401.kill with pc.getf("harvest_festival","mob2_info") == 7 and party.is_party() begin
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2401", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
|
||||
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
|
||||
when 2403.kill with pc.getf("harvest_festival","mob2_info") == 8 and party.is_party() begin
|
||||
harvest_festival.kill_action(2403,2)
|
||||
local kill_count = pc.getqf("mob_kill2_count") + 1
|
||||
local random_rice = harvest_festival.get_random_rice(2)
|
||||
pc.setqf("mob_kill2_count", kill_count)
|
||||
|
||||
if kill_count < 0 then
|
||||
return
|
||||
end -- end of if
|
||||
|
||||
q.set_counter("remaining_2403", 60 - kill_count);
|
||||
|
||||
if kill_count >= 60 or kill_count < 0 then
|
||||
notice_multiline(string.format(gameforge.harvest_festival._560_notice, random_rice), notice)
|
||||
-- Getting the rice cake
|
||||
local cake_count = pc.getqf("cake_count") + random_rice
|
||||
pc.setqf("cake_count", cake_count)
|
||||
|
||||
pc.setqf("harvest_festival_mob_complete", 1)
|
||||
clear_letter()
|
||||
set_state(information)
|
||||
|
||||
end -- end of if
|
||||
end -- end of when
|
||||
end -- end of state
|
||||
end -- end of quest
|
||||
|
28
gamefiles/data/quest/heavens_cave_escape.quest
Normal file
28
gamefiles/data/quest/heavens_cave_escape.quest
Normal file
@ -0,0 +1,28 @@
|
||||
quest heavens_cave_escape begin
|
||||
state start begin
|
||||
when login or levelup with pc.level >=75 begin
|
||||
set_state(heavens_cave_escape)
|
||||
end
|
||||
end
|
||||
|
||||
state heavens_cave_escape begin
|
||||
when 20090.chat.gameforge.heavens_cave_escape._010_npcChat with pc.get_map_index() == 72 begin
|
||||
say_title(gameforge.heavens_cave_escape._020_say_title)
|
||||
|
||||
say(gameforge.heavens_cave_escape._030_say)
|
||||
local a= select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if 1==a then
|
||||
say_title(gameforge.heavens_cave_escape._020_say_title)
|
||||
|
||||
say(gameforge.heavens_cave_escape._040_say)
|
||||
wait()
|
||||
|
||||
pc.warp(284460, 810495)
|
||||
return
|
||||
end
|
||||
|
||||
say_title(gameforge.heavens_cave_escape._020_say_title)
|
||||
say(gameforge.heavens_cave_escape._050_say)
|
||||
end
|
||||
end
|
||||
end
|
854
gamefiles/data/quest/heavens_cave_keyquest.quest
Normal file
854
gamefiles/data/quest/heavens_cave_keyquest.quest
Normal file
@ -0,0 +1,854 @@
|
||||
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
|
25
gamefiles/data/quest/horse_exchange_ticket.quest
Normal file
25
gamefiles/data/quest/horse_exchange_ticket.quest
Normal file
@ -0,0 +1,25 @@
|
||||
quest horse_exchange_ticket begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_exchange_ticket._10_npcChat with pc.countitem("50005")>=1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_exchange_ticket._30_say)
|
||||
local b= select(gameforge.horse_exchange_ticket._40_select, gameforge.arena_manager._200_tableInsert)
|
||||
if 1==b then
|
||||
if pc.countitem("50005")>=1 then
|
||||
pc.removeitem("50005", 1)
|
||||
pc.give_item2("50050", 1)
|
||||
say(gameforge.horse_exchange_ticket._50_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
28
gamefiles/data/quest/horse_guard.quest
Normal file
28
gamefiles/data/quest/horse_guard.quest
Normal file
@ -0,0 +1,28 @@
|
||||
quest horse_guard begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_guard._10_npcChat begin
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
local s=number(1, 7)
|
||||
if 1>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._20_say)
|
||||
elseif 2>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._30_say)
|
||||
elseif 3>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._40_say)
|
||||
elseif 4>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._50_say)
|
||||
elseif 5>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._60_say)
|
||||
elseif 6>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._70_say)
|
||||
elseif 7>=s then -- 14.29% (1/7)
|
||||
say(gameforge.horse_guard._80_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
566
gamefiles/data/quest/horse_levelup.quest
Normal file
566
gamefiles/data/quest/horse_levelup.quest
Normal file
@ -0,0 +1,566 @@
|
||||
quest horse_levelup begin
|
||||
state training1 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_1_count, 5-pc.getqf("kill_count"))
|
||||
end
|
||||
when 492.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_1_count, 5-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._10_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._10_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._10_makequestbutton)
|
||||
say(gameforge.horse_levelup._20_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._10_makequestbutton)
|
||||
say(gameforge.horse_levelup._20_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
|
||||
end
|
||||
when 492.kill with pc.getqf("kill_count") >= 5 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training2 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_2_count, 5-pc.getqf("kill_count"))
|
||||
end
|
||||
when 494.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_2_count, 5-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._30_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._30_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._30_makequestbutton)
|
||||
say(gameforge.horse_levelup._40_say)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._30_makequestbutton)
|
||||
say(gameforge.horse_levelup._50_say)
|
||||
end
|
||||
when 494.kill with pc.getqf("kill_count") >= 5 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training3 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_3_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when 635.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_3_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._60_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._60_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._60_makequestbutton)
|
||||
say(gameforge.horse_levelup._70_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say(gameforge.horse_levelup._80_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 635.kill with pc.getqf("kill_count") >= 10 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training4 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_4_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when 636.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_4_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._90_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._90_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._90_makequestbutton)
|
||||
say(gameforge.horse_levelup._100_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._90_makequestbutton)
|
||||
say(gameforge.horse_levelup._100_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 636.kill with pc.getqf("kill_count") >= 10 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training5 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_5_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when 706.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_5_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._110_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._110_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._110_makequestbutton)
|
||||
say(gameforge.horse_levelup._120_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._110_makequestbutton)
|
||||
say(gameforge.horse_levelup._120_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 706.kill with pc.getqf("kill_count") >= 10 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training6 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_6_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when 2034.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_6_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._130_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._130_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._130_makequestbutton)
|
||||
say(gameforge.horse_levelup._140_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._130_makequestbutton)
|
||||
say(gameforge.horse_levelup._140_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 2034.kill with pc.getqf("kill_count") >= 10 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training7 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_7_count, 20-pc.getqf("kill_count"))
|
||||
end
|
||||
when 2108.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_7_count, 20-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._150_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._150_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._150_makequestbutton)
|
||||
say(gameforge.horse_levelup._160_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._150_makequestbutton)
|
||||
say(gameforge.horse_levelup._160_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 2108.kill with pc.getqf("kill_count") >= 20 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training8 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_8_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when 1107.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_8_count, 10-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._170_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._170_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._180_sayTitle)
|
||||
say(gameforge.horse_levelup._190_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._180_sayTitle)
|
||||
say(gameforge.horse_levelup._200_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 1107.kill with pc.getqf("kill_count") >= 10 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state training9 begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_levelup._training_9_count, 20-pc.getqf("kill_count"))
|
||||
end
|
||||
when 2203.kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_levelup._training_9_count, 20-pc.getqf("kill_count"))
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._210_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._210_makequestbutton)
|
||||
q.start()
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._210_makequestbutton)
|
||||
say(gameforge.horse_levelup._220_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._210_makequestbutton)
|
||||
say(gameforge.horse_levelup._220_say)
|
||||
if not pc.is_mount() then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 2203.kill with pc.getqf("kill_count") >= 20 begin
|
||||
setstate(report)
|
||||
end
|
||||
when unmount begin
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_levelup._230_npcChat with horse.get_grade()==2 begin
|
||||
if horse.get_level()==20 then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._250_say)
|
||||
elseif pc.countitem("50050")<1 then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._260_say)
|
||||
setstate(need_item50050)
|
||||
elseif get_time()<pc.getqf("next_time") then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._270_say)
|
||||
elseif horse.get_stamina_pct()<=10 then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._280_say)
|
||||
elseif horse.get_health_pct()<=10 then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._290_say)
|
||||
elseif horse.is_riding()==0 then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._300_say)
|
||||
elseif (horse.get_level()>=11 and horse.get_level()<=19) then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._310_say)
|
||||
if is_test_server() then
|
||||
pc.setqf("next_time", get_time()+10)
|
||||
else
|
||||
pc.setqf("next_time", get_time()+number(16, 32)*60*60)
|
||||
end
|
||||
if horse.get_level()==11 then
|
||||
setstate(training1)
|
||||
elseif horse.get_level()==12 then
|
||||
setstate(training2)
|
||||
elseif horse.get_level()==13 then
|
||||
setstate(training3)
|
||||
elseif horse.get_level()==14 then
|
||||
setstate(training4)
|
||||
elseif horse.get_level()==15 then
|
||||
setstate(training5)
|
||||
elseif horse.get_level()==16 then
|
||||
setstate(training6)
|
||||
elseif horse.get_level()==17 then
|
||||
setstate(training7)
|
||||
elseif horse.get_level()==18 then
|
||||
setstate(training8)
|
||||
elseif horse.get_level()==19 then
|
||||
setstate(training9)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
state need_item50050 begin
|
||||
when login or levelup or enter with pc.countitem("50050") >= 1 begin
|
||||
set_state(start)
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._320_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._320_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._320_makequestbutton)
|
||||
say(gameforge.horse_levelup._330_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._320_makequestbutton)
|
||||
say(gameforge.horse_levelup._330_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state failure begin
|
||||
when login or levelup or enter or letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._340_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._340_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._340_makequestbutton)
|
||||
say(gameforge.horse_levelup._350_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._340_makequestbutton)
|
||||
say(gameforge.horse_levelup._350_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state report begin
|
||||
when letter begin
|
||||
local v=find_npc_by_vnum(20349)
|
||||
if 0==v then
|
||||
else
|
||||
target.vid("__TARGET__", v, "")
|
||||
end
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._360_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._360_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._360_makequestbutton)
|
||||
say(gameforge.horse_levelup._370_say)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_levelup._360_makequestbutton)
|
||||
say(gameforge.horse_levelup._370_say)
|
||||
end
|
||||
when __TARGET__.target.click begin
|
||||
target.delete("__TARGET__")
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_levelup._380_say)
|
||||
setstate(reward)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state reward begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_levelup._390_makequestbutton)
|
||||
q.set_title(gameforge.horse_levelup._400_qSetTitle)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_levelup._400_qSetTitle)
|
||||
if horse.get_level()<=10 then
|
||||
say(gameforge.horse_levelup._410_say)
|
||||
elseif horse.get_level()>=20 then
|
||||
say(gameforge.horse_levelup._420_say)
|
||||
elseif (horse.get_level()>=11 and horse.get_level()<=19) then
|
||||
local s=number(1, 2)
|
||||
if 1>=s then -- 50.00% (1/2)
|
||||
say(gameforge.horse_levelup._430_say)
|
||||
pc.setqf("next_time", 0)
|
||||
elseif 2>=s then -- 50.00% (1/2)
|
||||
say(gameforge.horse_levelup._440_say)
|
||||
if pc.countitem("50050")>=1 then
|
||||
char_log(0, "HORSE_ADVANCE", "BEGIN")
|
||||
pc.removeitem("50050", 1)
|
||||
char_log(0, "HORSE_ADVANCE", "DEC 50050 1")
|
||||
horse.unride()
|
||||
horse.advance()
|
||||
horse.ride()
|
||||
char_log(0, "HORSE_ADVANCE", "INC horse_advance 1")
|
||||
char_log(0, "HORSE_ADVANCE", "END")
|
||||
say(string.format(gameforge.horse_levelup._450_say, (horse.get_level())))
|
||||
if horse.get_level()==20 then
|
||||
say(gameforge.horse_levelup._460_say)
|
||||
pc.setqf("next_time", 0)
|
||||
else
|
||||
say(gameforge.horse_levelup._470_say)
|
||||
end
|
||||
else
|
||||
say(gameforge.horse_levelup._480_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
105
gamefiles/data/quest/horse_menu.quest
Normal file
105
gamefiles/data/quest/horse_menu.quest
Normal file
@ -0,0 +1,105 @@
|
||||
quest horse_menu begin
|
||||
state start begin
|
||||
function horse_menu()
|
||||
if horse.is_mine() then
|
||||
say(locale.horse_menu.menu)
|
||||
say("")
|
||||
|
||||
local s = 6
|
||||
|
||||
if horse.is_dead() then
|
||||
s = select(locale.horse_menu.revive,locale.horse_menu.unsummon, locale.horse_menu.close)
|
||||
|
||||
if s == 1 then s = 0
|
||||
elseif s == 2 then s = 3
|
||||
elseif s == 3 then return
|
||||
end
|
||||
else
|
||||
s = select(
|
||||
locale.horse_menu.feed, locale.horse_menu.ride, locale.horse_menu.unsummon,gameforge.horse_menu._10_say ,gameforge.horse_menu._20_say,locale.horse_menu.close)
|
||||
end
|
||||
|
||||
if s == 0 then
|
||||
horse.revive()
|
||||
elseif s == 1 then
|
||||
local food = horse.get_grade() + 50054 - 1
|
||||
|
||||
if pc.countitem(food) > 0 then
|
||||
pc.removeitem(food, 1)
|
||||
horse.feed()
|
||||
else
|
||||
say(gameforge.horse_menu._30_say .. item_name(food))
|
||||
say("")
|
||||
end
|
||||
elseif (s == 2 and false == pc.is_riding()) then
|
||||
horse.ride()
|
||||
elseif s == 3 then
|
||||
horse.unsummon()
|
||||
elseif s == 4 then
|
||||
say(gameforge.horse_menu._40_say..horse.get_health_pct().."%")
|
||||
say(gameforge.horse_menu._50_say..horse.get_stamina_pct().."%")
|
||||
say("")
|
||||
elseif s == 5 then
|
||||
if pc.countitem("71110") <= 0 then
|
||||
say(gameforge.horse_menu._30_say .. item_name("71110"))
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
local old_horse_name = horse.get_name() ;
|
||||
if string.len(old_horse_name) == 0 then
|
||||
say(gameforge.horse_menu._60_say)
|
||||
else
|
||||
say(gameforge.horse_menu._70_say..old_horse_name)
|
||||
end
|
||||
|
||||
say(gameforge.horse_menu._80_say)
|
||||
say("")
|
||||
|
||||
local horse_name = input()
|
||||
|
||||
if string.len(horse_name) < 2 then
|
||||
say(gameforge.horse_menu._90_say)
|
||||
say("")
|
||||
return
|
||||
elseif string.len(horse_name) > 12 then
|
||||
say(gameforge.horse_menu._100_say)
|
||||
say("")
|
||||
return
|
||||
end
|
||||
|
||||
local ret = horse.set_name(horse_name)
|
||||
|
||||
if ret == 0 then
|
||||
say(gameforge.horse_menu._110_say)
|
||||
say("")
|
||||
elseif ret == 1 then
|
||||
say()
|
||||
say(gameforge.horse_menu._120_say)
|
||||
elseif ret == 2 then
|
||||
pc.remove_item("71110")
|
||||
|
||||
say(gameforge.horse_menu._130_say)
|
||||
say("")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
when 20030.click begin horse_menu.horse_menu() end
|
||||
when 20101.click begin horse_menu.horse_menu() end
|
||||
when 20102.click begin horse_menu.horse_menu() end
|
||||
when 20103.click begin horse_menu.horse_menu() end
|
||||
when 20104.click begin horse_menu.horse_menu() end
|
||||
when 20105.click begin horse_menu.horse_menu() end
|
||||
when 20106.click begin horse_menu.horse_menu() end
|
||||
when 20107.click begin horse_menu.horse_menu() end
|
||||
when 20108.click begin horse_menu.horse_menu() end
|
||||
when 20109.click begin horse_menu.horse_menu() end
|
||||
when 20119.click begin horse_menu.horse_menu() end
|
||||
when 20120.click begin horse_menu.horse_menu() end
|
||||
when 20121.click begin horse_menu.horse_menu() end
|
||||
when 20122.click begin horse_menu.horse_menu() end
|
||||
|
||||
end
|
||||
end
|
90
gamefiles/data/quest/horse_revive.quest
Normal file
90
gamefiles/data/quest/horse_revive.quest
Normal file
@ -0,0 +1,90 @@
|
||||
quest horse_revive begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_revive._10_npcChat with horse.get_grade()==3 and horse.is_dead() and pc.countitem("50059")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._20_say)
|
||||
if pc.countitem("50058")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._30_say)
|
||||
elseif pc.countitem("50057")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._40_say)
|
||||
end
|
||||
end
|
||||
when 20349.chat.gameforge.horse_revive._10_npcChat with horse.get_grade()==3 and horse.is_dead() and pc.countitem("50059")>=1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._50_say)
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._60_say)
|
||||
horse.summon()
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._70_say)
|
||||
if pc.countitem("50059")>=1 then
|
||||
pc.removeitem("50059", 1)
|
||||
horse.revive()
|
||||
end
|
||||
end
|
||||
when 20349.chat.gameforge.horse_revive._10_npcChat with horse.get_grade()==2 and horse.is_dead() and pc.countitem("50058")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._80_say)
|
||||
if pc.countitem("50059")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._90_say)
|
||||
elseif pc.countitem("50057")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._40_say)
|
||||
end
|
||||
end
|
||||
|
||||
when 20349.chat.gameforge.horse_revive._100_npcChat with horse.get_grade()==2 and horse.is_dead() and pc.countitem("50058")>=1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._110_say)
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._60_say)
|
||||
horse.summon()
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._70_say)
|
||||
if pc.countitem("50058")>=1 then
|
||||
pc.removeitem("50058", 1)
|
||||
horse.revive()
|
||||
end
|
||||
end
|
||||
|
||||
when 20349.chat.gameforge.horse_revive._100_npcChat with horse.get_grade()==1 and horse.is_dead() and pc.countitem("50057")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._120_say)
|
||||
if pc.countitem("50059")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._90_say)
|
||||
elseif pc.countitem("50058")>=1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._130_say)
|
||||
end
|
||||
end
|
||||
when 20349.chat.gameforge.horse_revive._10_npcChat with horse.get_grade()==1 and horse.is_dead() and pc.countitem("50057")>=1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._140_say)
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._60_say)
|
||||
horse.summon()
|
||||
wait()
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_revive._70_say)
|
||||
if pc.countitem("50057")>=1 then
|
||||
pc.removeitem("50057", 1)
|
||||
horse.revive()
|
||||
end
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
31
gamefiles/data/quest/horse_ride.quest
Normal file
31
gamefiles/data/quest/horse_ride.quest
Normal file
@ -0,0 +1,31 @@
|
||||
quest horse_ride begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_ride._10_npcChat with pc.level>=10 and not pc.is_mount() begin
|
||||
if get_global_time() - pc.getqf("Reitzeit") < 3600 then
|
||||
say(gameforge.horse_ride._15_say)
|
||||
else
|
||||
local msg =
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_ride._20_say)
|
||||
local horse_ticket_vnum = 50083
|
||||
say(msg)
|
||||
local s= select(gameforge.locale.quiz_5_3_choice, gameforge.horse_ride._30_select)
|
||||
if s==1 then
|
||||
if pc.countitem(horse_ticket_vnum)>0 then
|
||||
if true == horse.is_summon() then
|
||||
horse.unsummon()
|
||||
end
|
||||
|
||||
pc.removeitem(horse_ticket_vnum, 1)
|
||||
pc.mount(20030, 600)
|
||||
pc.setqf("Reitzeit", get_global_time())
|
||||
else
|
||||
say(gameforge.horse_ride._40_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
178
gamefiles/data/quest/horse_summon.quest
Normal file
178
gamefiles/data/quest/horse_summon.quest
Normal file
@ -0,0 +1,178 @@
|
||||
quest horse_summon begin
|
||||
state start begin
|
||||
|
||||
function get_horse_summon_prob_pct()
|
||||
local skill_level=pc.get_skill_level(131)
|
||||
if skill_level==1 then
|
||||
return 15
|
||||
elseif skill_level==2 then
|
||||
return 20
|
||||
elseif skill_level==3 then
|
||||
return 30
|
||||
elseif skill_level==4 then
|
||||
return 40
|
||||
elseif skill_level==5 then
|
||||
return 50
|
||||
elseif skill_level==6 then
|
||||
return 60
|
||||
elseif skill_level==7 then
|
||||
return 70
|
||||
elseif skill_level==8 then
|
||||
return 80
|
||||
elseif skill_level==9 then
|
||||
return 90
|
||||
elseif skill_level>=10 then
|
||||
return 100
|
||||
end
|
||||
return 10
|
||||
end
|
||||
|
||||
|
||||
when 20349.chat.gameforge.horse_summon._10_npcChat with horse.get_grade()==1 and pc.countitem("50051")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._20_say)
|
||||
local b= select(gameforge.find_squareguard._50_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.money>=400000 then
|
||||
pc.changemoney(-400000)
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._30_say)
|
||||
pc.give_item2("50051", 1)
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._40_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
end
|
||||
when 20349.chat.gameforge.horse_summon._50_npcChat with horse.get_grade()==2 and pc.countitem("50052")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._60_say)
|
||||
local b= select(gameforge.find_squareguard._50_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.money>=50000 then
|
||||
pc.changemoney(-50000)
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._70_say)
|
||||
pc.give_item2("50052", 1)
|
||||
else
|
||||
say(gameforge.horse_summon._80_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
end
|
||||
when 20349.chat.gameforge.horse_summon._90_npcChat with horse.get_grade()==3 and pc.countitem("50053")<1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._100_say)
|
||||
local b= select(gameforge.find_squareguard._50_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.money>=100000 then
|
||||
pc.changemoney(-100000)
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.horse_summon._110_say)
|
||||
pc.give_item2("50053", 1)
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_summon._80_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
end
|
||||
when 50051.use with horse.get_grade()==0 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.horse_summon._120_say)
|
||||
end
|
||||
when 50051.use with horse.get_grade()==1 begin
|
||||
if pc.getsp()>=100 then
|
||||
if number(1, 100)<=horse_summon.get_horse_summon_prob_pct() then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say(gameforge.horse_summon._130_say)
|
||||
horse.summon()
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._140_sayReward)
|
||||
end
|
||||
pc.change_sp(-100)
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._150_sayReward)
|
||||
end
|
||||
end
|
||||
when 50051.use with horse.get_grade()==2 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._160_sayReward)
|
||||
end
|
||||
when 50051.use with horse.get_grade()==3 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._170_sayReward)
|
||||
end
|
||||
when 50052.use with horse.get_grade()==0 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._180_sayReward)
|
||||
end
|
||||
when 50052.use with horse.get_grade()==1 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._190_sayReward)
|
||||
end
|
||||
when 50052.use with horse.get_grade()==2 begin
|
||||
if pc.getsp()>=200 then
|
||||
if number(1, 100)<=horse_summon.get_horse_summon_prob_pct() then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._200_sayReward)
|
||||
horse.summon()
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._210_sayReward)
|
||||
end
|
||||
pc.change_sp(-200)
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._220_sayReward)
|
||||
end
|
||||
end
|
||||
when 50052.use with horse.get_grade()==3 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._230_sayReward)
|
||||
end
|
||||
when 50053.use with horse.get_grade()==0 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._240_sayReward)
|
||||
end
|
||||
when 50053.use with horse.get_grade()==1 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._190_sayReward)
|
||||
end
|
||||
when 50053.use with horse.get_grade()==2 begin
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._250_sayReward)
|
||||
end
|
||||
when 50053.use with horse.get_grade()==3 begin
|
||||
if pc.getsp()>=300 then
|
||||
if number(1, 100)<=horse_summon.get_horse_summon_prob_pct() then
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._260_sayReward)
|
||||
horse.summon()
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._270_sayReward)
|
||||
end
|
||||
pc.change_sp(-300)
|
||||
else
|
||||
say_title(gameforge.buy_fishrod._210_sayTitle)
|
||||
say_reward(gameforge.horse_summon._280_sayReward)
|
||||
end
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
331
gamefiles/data/quest/horse_upgrade.quest
Normal file
331
gamefiles/data/quest/horse_upgrade.quest
Normal file
@ -0,0 +1,331 @@
|
||||
quest horse_upgrade begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_upgrade2._10_npcChat with horse.get_grade()==1 and horse.get_level()==10 begin
|
||||
if horse.is_dead() then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._10_say)
|
||||
elseif pc.level<=34 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._20_say)
|
||||
elseif horse.get_level()<=9 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._30_say)
|
||||
elseif pc.countitem("50050")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._50_say)
|
||||
setstate(need_item50050)
|
||||
elseif pc.countitem("50051")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._40_say)
|
||||
elseif horse.get_level()==10 and not horse.is_dead() and pc.countitem("50050")>=1 and pc.level>=35 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._50_say)
|
||||
local b= select(gameforge.find_brother_article._90_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.countitem("50050")>=1 then
|
||||
pc.removeitem("50050", 1)
|
||||
setstate(test)
|
||||
end
|
||||
elseif 2==b then
|
||||
say(gameforge.horse_upgrade._60_say)
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade._70_say, b))
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._80_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state need_item50050 begin
|
||||
when login or levelup or enter with pc.countitem("50050") >= 1 begin
|
||||
set_state(start)
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._90_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._90_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._10_npcChat with horse.get_grade()==1 and horse.get_level()==10 begin
|
||||
if horse.is_dead() then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._10_say)
|
||||
elseif pc.level<=34 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._20_say)
|
||||
elseif horse.get_level()<=9 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._30_say)
|
||||
elseif pc.countitem("50050")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._50_say)
|
||||
elseif pc.countitem("50051")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._40_say)
|
||||
elseif horse.get_level()==10 and not horse.is_dead() and pc.countitem("50050")>=1 and pc.level>=35 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._50_say)
|
||||
local b= select(gameforge.find_brother_article._90_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.countitem("50050")>=1 then
|
||||
pc.removeitem("50050", 1)
|
||||
setstate(test)
|
||||
end
|
||||
elseif 2==b then
|
||||
say(gameforge.horse_upgrade._60_say)
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade._70_say, b))
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._80_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state test begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_upgrade._test_2015_count, 100-pc.getqf("kill_count"))
|
||||
end
|
||||
when 2105.party_kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_upgrade._test_2015_count, 100-pc.getqf("kill_count"))
|
||||
if get_time()>=pc.getqf("limit_time") then
|
||||
setstate(failure)
|
||||
end
|
||||
end
|
||||
when 2107.party_kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_upgrade._test_2107_count, 100-pc.getqf("kill_count"))
|
||||
if get_time()>=pc.getqf("limit_time") then
|
||||
setstate(failure)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
when letter begin
|
||||
q.set_clock(gameforge.horse_upgrade2.rest_time, pc.getqf("limit_time")-get_time())
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("limit_time", get_time()+30*60)
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade._100_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade._100_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._110_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._140_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._110_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._140_sayReward)
|
||||
end
|
||||
when 2105.party_kill with pc.getqf("kill_count") >= 100 and pc.getqf("kill_count") >= 100 and pc.getqf("limit_time")>=get_time() begin
|
||||
setstate(report)
|
||||
end
|
||||
when 2107.party_kill with pc.getqf("kill_count") >= 100 and pc.getqf("kill_count") >= 100 and pc.getqf("limit_time")>=get_time() begin
|
||||
setstate(report)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade._120_npcChat begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._130_say)
|
||||
local b= select(gameforge.locale.levelup.prev_quest_go, gameforge.locale.cancel)
|
||||
if 1==b then
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._170_say)
|
||||
local b= select(gameforge.horse_upgrade2._180_select, gameforge.horse_upgrade2._190_select)
|
||||
if 1==b then
|
||||
say_title(gameforge.horse_levelup._240_sayTitle)
|
||||
say(gameforge.horse_upgrade2._200_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._140_say)
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state report begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._240_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._240_sayReward)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade._150_npcChat with horse.get_grade()!=1 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade._160_npcChat with horse.get_grade()==1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._170_say)
|
||||
if is_test_server() then
|
||||
pc.setqf("make_time", get_time()+10)
|
||||
else
|
||||
pc.setqf("make_time", get_time()+number(8, 16)*60*60)
|
||||
end
|
||||
setstate(wait)
|
||||
end
|
||||
end
|
||||
state wait begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade._180_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade._180_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade._180_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._190_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade._180_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._190_sayReward)
|
||||
end
|
||||
when login with get_time()>=pc.getqf("make_time") begin
|
||||
setstate(buy)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()!=1 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade._200_npcChat with horse.get_grade()==1 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._210_say)
|
||||
end
|
||||
end
|
||||
state buy begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._220_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._230_sayReward)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()!=1 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()==1 and horse.get_level()!=10 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade._240_npcChat with horse.get_grade()==1 and horse.get_level()==10 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._250_say)
|
||||
local b= select(gameforge.horse_upgrade2._370_select, gameforge.horse_upgrade2._380_select, gameforge.horse_upgrade2._385_select)
|
||||
if 1==b then
|
||||
if pc.money>=500000 then
|
||||
if pc.countitem("50051")>=1 then
|
||||
char_log(0, "HORSE_UPGRADE", "BEGIN")
|
||||
pc.changemoney(-500000)
|
||||
char_log(0, "HORSE_UPGRADE", "DEC money 500000")
|
||||
pc.removeitem("50051", 1)
|
||||
char_log(0, "HORSE_UPGRADE", "DEC 50051 1")
|
||||
horse.unride()
|
||||
horse.advance()
|
||||
horse.ride()
|
||||
char_log(0, "HORSE_UPGRADE", "INC horse_advance 1")
|
||||
pc.give_item2("50052", 1)
|
||||
char_log(0, "HORSE_UPGRADE", "INC 50052 1")
|
||||
char_log(0, "HORSE_UPGRADE", "END")
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._260_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._270_say)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._280_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._290_say)
|
||||
elseif 3==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade._300_say)
|
||||
local b= select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if 1==b then
|
||||
setstate(start)
|
||||
q.done()
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state failure begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._310_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._460_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade._310_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._460_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
322
gamefiles/data/quest/horse_upgrade2.quest
Normal file
322
gamefiles/data/quest/horse_upgrade2.quest
Normal file
@ -0,0 +1,322 @@
|
||||
quest horse_upgrade2 begin
|
||||
state start begin
|
||||
when 20349.chat.gameforge.horse_upgrade2._10_npcChat with horse.get_grade()==2 and horse.get_level()==20 begin
|
||||
if horse.is_dead() then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._20_say)
|
||||
elseif pc.level<=49 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._30_say)
|
||||
elseif horse.get_level()<=19 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._40_say)
|
||||
elseif pc.countitem("50050")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._50_say)
|
||||
setstate(need_item50050)
|
||||
elseif pc.countitem("50052")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._60_say)
|
||||
elseif horse.get_level()==20 and not horse.is_dead() and pc.countitem("50050")>=1 and pc.level>=50 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._70_say)
|
||||
local b= select(gameforge.find_brother_article._90_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.countitem("50050")>=1 then
|
||||
pc.removeitem("50050", 1)
|
||||
setstate(test)
|
||||
end
|
||||
elseif 2==b then
|
||||
say(gameforge.horse_upgrade2._80_say)
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._90_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state need_item50050 begin
|
||||
when login or levelup or enter with pc.countitem("50050") >= 1 begin
|
||||
set_state(start)
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._110_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._100_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._110_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._10_npcChat with horse.get_grade()==2 and horse.get_level()==20 begin
|
||||
if horse.is_dead() then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._20_say)
|
||||
elseif pc.level<=49 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._30_say)
|
||||
elseif horse.get_level()<=19 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._40_say)
|
||||
elseif pc.countitem("50050")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._50_say)
|
||||
elseif pc.countitem("50052")<1 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._60_say)
|
||||
elseif horse.get_level()==20 and not horse.is_dead() and pc.countitem("50050")>=1 and pc.level>=50 then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._70_say)
|
||||
local b= select(gameforge.find_brother_article._90_select, gameforge.find_brother_article._100_select)
|
||||
if 1==b then
|
||||
if pc.countitem("50050")>=1 then
|
||||
pc.removeitem("50050", 1)
|
||||
setstate(test)
|
||||
end
|
||||
elseif 2==b then
|
||||
say(gameforge.horse_upgrade2._80_say)
|
||||
else
|
||||
say(string.format(gameforge.buy_fishrod._80_say, b))
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._90_say)
|
||||
end
|
||||
end
|
||||
end
|
||||
state test begin
|
||||
when letter begin
|
||||
q.set_counter(gameforge.horse_upgrade2._test_1002_count, 300-pc.getqf("kill_count"))
|
||||
end
|
||||
when 1002.party_kill begin
|
||||
pc.setqf("kill_count", pc.getqf("kill_count")+1)
|
||||
q.set_counter(gameforge.horse_upgrade2._test_1002_count, 300-pc.getqf("kill_count"))
|
||||
if get_time()>=pc.getqf("limit_time") then
|
||||
setstate(failure)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
when letter begin
|
||||
q.set_clock(gameforge.horse_upgrade2.rest_time, pc.getqf("limit_time")-get_time())
|
||||
end
|
||||
when enter begin
|
||||
pc.setqf("limit_time", get_time()+30*60)
|
||||
pc.setqf("kill_count", 0)
|
||||
end
|
||||
when leave begin
|
||||
q.done()
|
||||
end
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._120_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._120_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._120_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._130_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._140_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._120_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._130_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._140_sayReward)
|
||||
end
|
||||
when 1002.party_kill with pc.getqf("kill_count") >= 300 and pc.getqf("limit_time")>=get_time() begin
|
||||
setstate(report)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._150_npcChat begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._160_say)
|
||||
local b= select(gameforge.locale.levelup.prev_quest_go, gameforge.locale.cancel)
|
||||
if 1==b then
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._170_say)
|
||||
local b= select(gameforge.horse_upgrade2._180_select, gameforge.horse_upgrade2._190_select)
|
||||
if 1==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._200_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._210_say)
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.horse_upgrade2._220_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state report begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._240_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._230_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._240_sayReward)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._250_npcChat with horse.get_grade()!=2 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._260_npcChat with horse.get_grade()==2 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._270_say)
|
||||
if is_test_server() then
|
||||
pc.setqf("make_time", get_time()+10)
|
||||
else
|
||||
pc.setqf("make_time", get_time()+number(8, 16)*60*60)
|
||||
end
|
||||
setstate(wait)
|
||||
end
|
||||
end
|
||||
state wait begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._280_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._280_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._280_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._290_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._280_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._290_sayReward)
|
||||
end
|
||||
when login with get_time()>=pc.getqf("make_time") begin
|
||||
setstate(buy)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()!=2 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._310_npcChat with horse.get_grade()==2 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._320_say)
|
||||
end
|
||||
end
|
||||
state buy begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._340_sayReward)
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._330_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._340_sayReward)
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()!=2 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._300_npcChat with horse.get_grade()==2 and horse.get_level()!=20 begin
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when 20349.chat.gameforge.horse_upgrade2._350_npcChat with horse.get_grade()==2 and horse.get_level()==20 begin
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._360_say)
|
||||
local b= select(gameforge.horse_upgrade2._370_select, gameforge.horse_upgrade2._380_select, gameforge.horse_upgrade2._385_select)
|
||||
if 1==b then
|
||||
if pc.money>=1000000 then
|
||||
if pc.countitem("50052")>=1 then
|
||||
char_log(0, "HORSE_UPGRADE2", "BEGIN")
|
||||
pc.changemoney(-1000000)
|
||||
char_log(0, "HORSE_UPGRADE2", "DEC money 1000000")
|
||||
pc.removeitem("50052", 1)
|
||||
char_log(0, "HORSE_UPGRADE2", "DEC 50052 1")
|
||||
horse.unride()
|
||||
horse.advance()
|
||||
horse.ride()
|
||||
char_log(0, "HORSE_UPGRADE2", "INC horse_advance 1")
|
||||
pc.give_item2("50053", 1)
|
||||
char_log(0, "HORSE_UPGRADE2", "INC 50053 1")
|
||||
pc.give_item2("50060", 1)
|
||||
char_log(0, "HORSE_UPGRADE2", "INC 50060 1")
|
||||
char_log(0, "HORSE_UPGRADE2", "END")
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._390_say)
|
||||
setstate(start)
|
||||
q.done()
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._400_say)
|
||||
end
|
||||
else
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._410_say)
|
||||
end
|
||||
elseif 2==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._420_say)
|
||||
elseif 3==b then
|
||||
say_title(gameforge.horse_exchange_ticket._20_sayTitle)
|
||||
say(gameforge.horse_upgrade2._430_say)
|
||||
local b= select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if 1==b then
|
||||
setstate(start)
|
||||
elseif 2==b then
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.find_squareguard._70_say, b))
|
||||
end
|
||||
end
|
||||
end
|
||||
state failure begin
|
||||
when letter begin
|
||||
setskin(NOWINDOW)
|
||||
makequestbutton(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
q.set_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
q.start()
|
||||
end
|
||||
when button begin
|
||||
say_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._450_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._460_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
when info begin
|
||||
say_title(gameforge.horse_upgrade2._440_makequestbutton)
|
||||
say_reward(gameforge.horse_upgrade2._450_sayReward)
|
||||
say_reward(gameforge.horse_upgrade2._460_sayReward)
|
||||
setstate(start)
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
state __COMPLETE__ begin
|
||||
when enter begin
|
||||
q.done()
|
||||
end
|
||||
end
|
||||
end
|
112
gamefiles/data/quest/ingame_message.quest
Normal file
112
gamefiles/data/quest/ingame_message.quest
Normal file
@ -0,0 +1,112 @@
|
||||
--[[
|
||||
This quest send the player a letter with Information about new Stuff
|
||||
At the Moment we have 3 possible options:
|
||||
1. Happy Hour in the shop
|
||||
2. New stuff in the shop
|
||||
3. security announce
|
||||
|
||||
Concept side: https://wiki.gameforge.de/bin/view/MMO/Metin2/ConceptIngameAnnounce
|
||||
Workflow ticket: https://mantis-i.gameforge.de/view.php?id=76862
|
||||
]]
|
||||
|
||||
quest ingame_message begin
|
||||
state start begin
|
||||
|
||||
-- return the unique message id for campaign
|
||||
function get_message_id()
|
||||
return (game.get_event_flag("message_id"))
|
||||
end --end function get_message_id
|
||||
|
||||
-- return which kind of message appear
|
||||
function get_message_type()
|
||||
return (game.get_event_flag("message_type"))
|
||||
end --end function get_message_type
|
||||
|
||||
-- return the displayed item vnum
|
||||
function get_announce_vnum()
|
||||
return (game.get_event_flag("message_item_vnum"))
|
||||
end --end function get_announce_vnum
|
||||
|
||||
-- return the vnum that can is the gift
|
||||
function get_gift_vnum()
|
||||
return (game.get_event_flag("message_gift_vnum"))
|
||||
end --end function get_gift_vnum
|
||||
|
||||
--[[
|
||||
Provide a duration time to have a option to show options often
|
||||
Value should be hours ;)
|
||||
]]
|
||||
function get_message_duration()
|
||||
local duration = game.get_event_flag("message_duration")
|
||||
-- if not duration is set, we will implement the standard 24h duration
|
||||
if duration == 0 then
|
||||
duration = 24
|
||||
end
|
||||
|
||||
return duration
|
||||
end --end function get_message_id
|
||||
|
||||
when info or button begin
|
||||
local message_type = ingame_message.get_message_type()
|
||||
if message_type == 1 then
|
||||
--local happyhour_start = game.get_event_flag("message_happyhour_start")
|
||||
--local happyhour_end = game.get_event_flag("message_happyhour_end")
|
||||
--say_size(250, 250)
|
||||
-- say_show_item(70029)
|
||||
-- Eine günstige Gelegenheit
|
||||
say_important_title(gameforge.ingame_message._010_sayTitle)
|
||||
--say_important(string.format("Heute von %s bis %s Happy Hour!", happyhour_start, happyhour_end))
|
||||
say("")
|
||||
-- Eine neue Aktion ist im Item-Shop gestartet! Verpasse nicht diese günstige Gelegenheit und besuche direkt den Item-Shop.
|
||||
say_important(gameforge.ingame_message._020_say)
|
||||
local c = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if 2 == c then
|
||||
return
|
||||
else
|
||||
game.open_web_mall()
|
||||
end
|
||||
elseif message_type == 2 then
|
||||
local new_item_vnum = ingame_message.get_announce_vnum()
|
||||
say_important_title(gameforge.ingame_message._030_sayTitle)
|
||||
say_item_vnum(new_item_vnum) -- icon of item
|
||||
say_important(gameforge.ingame_message._040_say)
|
||||
-- We will provide the user the option to select the gift
|
||||
local gift_vnum = ingame_message.get_gift_vnum()
|
||||
local message_id = ingame_message.get_message_id()
|
||||
local gift_check = pc.getqf("gift_" .. message_id .. "_" ..gift_vnum)
|
||||
|
||||
if gift_check < 1 and gift_vnum != 0 then
|
||||
wait()
|
||||
-- Ein Geschenk der Götter
|
||||
say_title(gameforge.important_message._050_sayTitle)
|
||||
say(gameforge.ingame_message._060_say)
|
||||
local gift = select(gameforge.ingame_message._070_select, gameforge.ingame_message._080_select)
|
||||
if gift == 1 then
|
||||
pc.give_item2(gift_vnum, 1)
|
||||
pc.setqf("gift_"..message_id.."_"..gift_vnum, 1)
|
||||
end -- gift vergeben
|
||||
end -- gift check
|
||||
|
||||
else
|
||||
say_important_title("GM News")
|
||||
say_important("Du wirst nie nach Login gefragt")
|
||||
end
|
||||
end --endbegin letter
|
||||
|
||||
when login with ingame_message.get_message_type() > 0 begin
|
||||
local message_type = ingame_message.get_message_type()
|
||||
local duration_time = ingame_message.get_message_duration()
|
||||
|
||||
if get_time() > pc.getqf("duration") then
|
||||
pc.setqf("duration",get_time()+60*60*duration_time)--------------24 Stunden
|
||||
if message_type == 1 then
|
||||
send_letter(gameforge.ingame_message._010_sayTitle)
|
||||
elseif message_type == 2 then
|
||||
send_letter(gameforge.ingame_message._030_sayTitle)
|
||||
else
|
||||
send_letter("GM News")
|
||||
end -- endif
|
||||
end -- endif duration
|
||||
end -- endif
|
||||
end -- endbegin state start
|
||||
end -- endbegin quest
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user