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