forked from metin2/server
1
0
Fork 0
server/gamefiles/locale/english/quest/event_halloween_hair.quest

224 lines
6.3 KiB
Plaintext

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