Restructured gamefiles, locale data loading refactoring, docker build fixes

This commit is contained in:
2024-05-25 20:00:26 +03:00
parent 27108d629a
commit 48ee253534
1046 changed files with 84 additions and 12989 deletions

12
gamefiles/data/quest/.gitignore vendored Normal file
View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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