forked from metin2/server
114 lines
3.8 KiB
Plaintext
114 lines
3.8 KiB
Plaintext
--[[
|
|
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
|