forked from metin2/server
257 lines
8.2 KiB
Plaintext
257 lines
8.2 KiB
Plaintext
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
|
|
|