forked from metin2/server
Restructured gamefiles, locale data loading refactoring, docker build fixes
This commit is contained in:
256
gamefiles/data/quest/guild_building_melt.quest
Normal file
256
gamefiles/data/quest/guild_building_melt.quest
Normal file
@ -0,0 +1,256 @@
|
||||
quest guild_building_melt begin
|
||||
state start begin
|
||||
function GetOreRefineCost(cost)
|
||||
if pc.empire != npc.empire then
|
||||
return 3 * cost
|
||||
end
|
||||
if pc.get_guild() == npc.get_guild() then
|
||||
return cost * 0.9
|
||||
end
|
||||
return cost
|
||||
end
|
||||
|
||||
function GetOreRefineGoodPct()
|
||||
return 60
|
||||
end
|
||||
|
||||
function GetOreRefineBadPct()
|
||||
return 30
|
||||
end
|
||||
|
||||
function GetMyRefineNum(race)
|
||||
return({
|
||||
[20060] = 50601,
|
||||
[20061] = 50602,
|
||||
[20062] = 50603,
|
||||
[20063] = 50604,
|
||||
[20064] = 50605,
|
||||
[20065] = 50606,
|
||||
[20066] = 50607,
|
||||
[20067] = 50608,
|
||||
[20068] = 50609,
|
||||
[20069] = 50610,
|
||||
[20070] = 50611,
|
||||
[20071] = 50612,
|
||||
[20072] = 50613,
|
||||
[33009] = 50614,
|
||||
[33010] = 50615,
|
||||
[33011] = 50616,
|
||||
[33012] = 50617,
|
||||
[33013] = 50618
|
||||
})[race]
|
||||
--return race - 20060 + 50601 or race - 33009 + 50614
|
||||
end
|
||||
|
||||
function IsRefinableRawOre(vnum)
|
||||
return vnum >= 50601 and vnum <= 50618
|
||||
end
|
||||
|
||||
function DoRefineDiamond(pct)
|
||||
local from_postfix
|
||||
local from_name = item_name(item.vnum)
|
||||
local to_vnum = item.vnum + 20
|
||||
local to_name = item_name(to_vnum)
|
||||
local to_postfix
|
||||
|
||||
say(gameforge.guild_building_melt._10_say)
|
||||
|
||||
if item.count >= 100 then
|
||||
say(string.format(gameforge.guild_building_melt._20_say, pct, guild_building_melt.GetOreRefineCost(10000)))
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 1 then
|
||||
if pc.get_gold() < guild_building_melt.GetOreRefineCost(10000) then
|
||||
say(gameforge.guild_building_melt._30_say)
|
||||
return
|
||||
end
|
||||
|
||||
if pc.diamond_refine(10000, pct) then
|
||||
say(gameforge.guild_building_melt._40_say)
|
||||
say_item(to_name, to_vnum, "")
|
||||
else
|
||||
say(gameforge.guild_building_melt._50_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.guild_building_melt._60_say,from_name))
|
||||
end
|
||||
end
|
||||
function DoRefine(pct)
|
||||
local from_postfix
|
||||
local from_name = item_name(item.vnum)
|
||||
local to_vnum = item.vnum + 20
|
||||
local to_name = item_name(to_vnum)
|
||||
local to_postfix
|
||||
|
||||
say(string.format(gameforge.guild_building_melt._70_say, from_name , to_name ))
|
||||
if item.count >= 100 then
|
||||
say(string.format(gameforge.guild_building_melt._20_say, pct, guild_building_melt.GetOreRefineCost(3000)))
|
||||
local s = select(gameforge.locale.guild.yes, gameforge.locale.guild.no)
|
||||
if s == 1 then
|
||||
if pc.get_gold() < guild_building_melt.GetOreRefineCost(3000) then
|
||||
say(gameforge.guild_building_melt._30_say)
|
||||
return
|
||||
end
|
||||
|
||||
local selected_item_cell = select_item()
|
||||
if selected_item_cell == 0 then
|
||||
say(gameforge.guild_building_melt._90_say)
|
||||
return
|
||||
end
|
||||
local old_item = item.get_id()
|
||||
|
||||
if (not item.select_cell(selected_item_cell)) or item.vnum < 28000 or item.vnum >= 28300 then
|
||||
say(gameforge.guild_building_melt._100_say)
|
||||
return
|
||||
end
|
||||
|
||||
item. select(old_item , old_item )
|
||||
|
||||
if pc.ore_refine(3000, pct, selected_item_cell) then
|
||||
say(gameforge.guild_building_melt._120_say)
|
||||
say_item(to_name, to_vnum, "")
|
||||
else
|
||||
say(gameforge.guild_building_melt._50_say)
|
||||
end
|
||||
end
|
||||
else
|
||||
say(string.format(gameforge.guild_building_melt._60_say,from_name))
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.take or 20061.take or 20062.take or 20063.take or 20064.take or 20065.take or 20066.take or
|
||||
20067.take or 20068.take or 20069.take or 20070.take or 20071.take or 20072.take or
|
||||
33009.take or 33010.take or 33011.take or 33012.take or 33013.take
|
||||
with guild_building_melt.GetMyRefineNum(npc.race) == item.vnum
|
||||
begin
|
||||
if item.vnum == 50601 then
|
||||
guild_building_melt.DoRefineDiamond(guild_building_melt.GetOreRefineGoodPct())
|
||||
else
|
||||
guild_building_melt.DoRefine(guild_building_melt.GetOreRefineGoodPct())
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.take or 20061.take or 20062.take or 20063.take or 20064.take or 20065.take or 20066.take or
|
||||
20067.take or 20068.take or 20069.take or 20070.take or 20071.take or 20072.take or
|
||||
33009.take or 33010.take or 33011.take or 33012.take or 33013.take
|
||||
with guild_building_melt.IsRefinableRawOre(item.vnum) and
|
||||
guild_building_melt.GetMyRefineNum(npc.race) != item.vnum
|
||||
begin
|
||||
if item.vnum == 50601 then
|
||||
guild_building_melt.DoRefineDiamond(guild_building_melt.GetOreRefineBadPct())
|
||||
else
|
||||
guild_building_melt.DoRefine(guild_building_melt.GetOreRefineBadPct())
|
||||
end
|
||||
end
|
||||
|
||||
when 20060.click or 20061.click or 20062.click or 20063.click or 20064.click or 20065.click or 20066.click or
|
||||
20067.click or 20068.click or 20069.click or 20070.click or 20071.click or 20072.click or
|
||||
33009.click or 33010.click or 33011.click or 33012.click or 33013.click
|
||||
with npc.get_guild() == pc.get_guild() and pc.isguildmaster()
|
||||
begin
|
||||
say_npc()
|
||||
say(gameforge.guild_building_melt._130_say)
|
||||
wait()
|
||||
if pc.get_gold() < 3000000 then
|
||||
say(gameforge.guild_building_melt._140_say)
|
||||
else
|
||||
-- say(gameforge.guild_building_melt._150_say)
|
||||
|
||||
-- local sel = 0
|
||||
|
||||
-- local timetable1 = {gameforge.guild_building_melt._180_say,
|
||||
-- gameforge.guild_building_melt._190_say,
|
||||
-- gameforge.guild_building_melt._200_say,
|
||||
-- gameforge.guild_building_melt._210_say,
|
||||
-- gameforge.guild_building_melt._220_say,
|
||||
-- gameforge.guild_building_melt._230_say,
|
||||
-- gameforge.locale.levelup.prev_quest_go,
|
||||
-- gameforge.guild_building_melt._170_say}
|
||||
-- local valuetable1 = {14043, 14045, 14046, 14047, 14048, 14049, 0, -1}
|
||||
|
||||
-- local timetable2 = {gameforge.guild_building_melt._240_say,
|
||||
-- gameforge.guild_building_melt._250_say,
|
||||
-- gameforge.guild_building_melt._260_say,
|
||||
-- gameforge.guild_building_melt._270_say,
|
||||
-- gameforge.guild_building_melt._280_say,
|
||||
-- gameforge.guild_building_melt._290_say,
|
||||
-- gameforge.locale.levelup.prev_quest_go,
|
||||
-- gameforge.guild_building_melt._170_say}
|
||||
-- local valuetable2 = {14050, 14051, 14052, 14053, 14054, 14055, 0, -1}
|
||||
|
||||
-- repeat
|
||||
-- local s = select_table(timetable1)
|
||||
-- sel = valuetable1[s]
|
||||
-- if sel == 0 then
|
||||
-- local s = select_table(timetable2)
|
||||
-- sel = valuetable2[s]
|
||||
-- end
|
||||
-- until sel != 0
|
||||
-- if sel != -1 then
|
||||
-- npc_num = sel + 20060 - 14043
|
||||
-- if npc_num == npc.get_race() then
|
||||
-- say(gameforge.guild_building_melt._160_say)
|
||||
-- else
|
||||
-- pc.changegold(-3000000)
|
||||
-- building.reconstruct(sel)
|
||||
-- end
|
||||
-- end
|
||||
|
||||
local sel = 0
|
||||
local timetable1 = {gameforge.guild_building_melt._180_say,
|
||||
gameforge.guild_building_melt._190_say,
|
||||
gameforge.guild_building_melt._200_say,
|
||||
gameforge.guild_building_melt._210_say,
|
||||
gameforge.guild_building_melt._220_say,
|
||||
gameforge.guild_building_melt._230_say,
|
||||
gameforge.locale.levelup.prev_quest_go,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable1 = {14043, 14045, 14046, 14047, 14048, 14049, 1, 3}
|
||||
local timetable2 = {gameforge.guild_building_melt._240_say,
|
||||
gameforge.guild_building_melt._250_say,
|
||||
gameforge.guild_building_melt._260_say,
|
||||
gameforge.guild_building_melt._270_say,
|
||||
gameforge.guild_building_melt._280_say,
|
||||
gameforge.locale.levelup.prev_quest_go,
|
||||
gameforge.map_warp._96_select,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable2 = {14050, 10451, 14052, 14053, 14054, 2, 0, 3}
|
||||
local timetable3 = {gameforge.guild_building_melt._290_say,
|
||||
"Soul crystal",
|
||||
"Rubin",
|
||||
"Garnet",
|
||||
"Smaragd",
|
||||
"Sapphire",
|
||||
gameforge.map_warp._96_select,
|
||||
gameforge.guild_building_melt._170_say}
|
||||
local valuetable3 = {14055, 26992, 26993, 26994, 26995, 26996, 1, 3}
|
||||
repeat
|
||||
say_npc()
|
||||
say(gameforge.guild_building_melt._150_say)
|
||||
if sel == 0 then
|
||||
local s = select_table(timetable1)
|
||||
sel = valuetable1[s]
|
||||
elseif sel == 1 then
|
||||
local s = select_table(timetable2)
|
||||
sel = valuetable2[s]
|
||||
elseif sel == 2 then
|
||||
local s = select_table(timetable3)
|
||||
sel = valuetable3[s]
|
||||
end
|
||||
until sel > 2
|
||||
if sel != 3 then
|
||||
npc_num = sel + 20060 - 14043
|
||||
--chat("#debug#sel:"..sel.."#npc_num:"..npc_num)
|
||||
if npc_num == npc.get_race() then
|
||||
say(gameforge.guild_building_melt._160_say)
|
||||
else
|
||||
pc.changegold(-3000000)
|
||||
building.reconstruct(sel)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user