Files
2026-06-01 12:46:52 +02:00

204 lines
8.4 KiB
Lua

-- Circus module
-- *add_instance_dungeon_monster( monsterRespawnID, dungeonID, layer ): Spawns a monster group with the given respawn ID in the specified dungeon layer*
-- Script used to handle the next dungeon stage when a specific monster group in the Circus dungeon is completely defeated
function circus_check_respawn_group_clear( monster_group, layer )
-- Count alive monsters in the specified monster_group; if all dead, proceed to next dungeon stage
local cnt = get_alive_instance_respawn_group_monster_count( 50000, layer, monster_group )
local monsterGroupObjHandle = { 10, 13, 13, 23, 19 }
-- Handle counting
broadcast_mission_objective_progress( 1, 0, monsterGroupObjHandle[monster_group] - cnt, 50000, layer )
-- Total count
if cnt == 0 then
if monster_group == 1 then -- If the defeated group is #1
broadcast_notice( 1, "@90606228", 50000, layer )
add_field_prop( 60186, 0, 38958, 137159, layer, 0, 0, 0, 1.5, 0.3, 0.3, 0.3 ) -- Create prop at small room entrance
-- Respawn Group 2
add_instance_dungeon_monster( 50023, 50000, layer )
add_instance_dungeon_monster( 50024, 50000, layer )
add_instance_dungeon_monster( 50025, 50000, layer )
add_instance_dungeon_monster( 50026, 50000, layer )
add_instance_dungeon_monster( 50027, 50000, layer )
add_instance_dungeon_monster( 50028, 50000, layer )
add_instance_dungeon_monster( 50029, 50000, layer )
broadcast_mission_title( 1, '@9901', 50000, layer )
broadcast_mission_objective( 1, 0, 13, '@1224', 50000, layer )
elseif monster_group == 2 then -- If the defeated group is #2
broadcast_notice( 1, "@90606229", 50000, layer )
add_field_prop( 60187, 0, 38836, 137150, layer, 0, 0, 0, -1.5, 0.3, 0.3, 0.3 ) -- Create prop at small room exit
-- Respawn Group 3
add_instance_dungeon_monster( 50030, 50000, layer)
add_instance_dungeon_monster( 50031, 50000, layer)
add_instance_dungeon_monster( 50032, 50000, layer)
add_instance_dungeon_monster( 50033, 50000, layer)
add_instance_dungeon_monster( 50034, 50000, layer)
add_instance_dungeon_monster( 50035, 50000, layer)
broadcast_mission_title( 1, '@9902', 50000, layer )
broadcast_mission_objective( 1, 0, 13, '@1224', 50000, layer )
elseif monster_group == 3 then -- If the defeated group is #3
broadcast_notice( 1, "@90606230", 50000, layer )
add_field_prop( 60188, 0, 40155, 137132, layer, 0, 0, 0, -1.5, 0.3, 0.3, 0.3 ) -- Create prop at mid-boss room entrance
-- Respawn Group 4
add_instance_dungeon_monster( 50036, 50000, layer)
add_instance_dungeon_monster( 50037, 50000, layer)
add_instance_dungeon_monster( 50038, 50000, layer)
add_instance_dungeon_monster( 50039, 50000, layer)
add_instance_dungeon_monster( 50040, 50000, layer)
add_instance_dungeon_monster( 50041, 50000, layer)
add_instance_dungeon_monster( 50042, 50000, layer)
add_instance_dungeon_monster( 50043, 50000, layer)
add_instance_dungeon_monster( 50044, 50000, layer)
add_instance_dungeon_monster( 50045, 50000, layer)
add_instance_dungeon_monster( 50046, 50000, layer)
add_instance_dungeon_monster( 50047, 50000, layer)
add_instance_dungeon_monster( 50048, 50000, layer)
broadcast_mission_title( 1, '@9903', 50000, layer )
broadcast_mission_objective( 1, 0, 23, '@1224', 50000, layer )
elseif monster_group == 4 then -- If the defeated group is #4
broadcast_notice( 1, "@90606231", 50000, layer )
add_field_prop( 60189, 0, 40271, 136657, layer, 0, 0, 0, 1.5, 0.3, 0.3, 0.3 ) -- Mid-boss room exit
add_field_prop( 60190, 0, 39554, 136281, layer, 0, 0, 0, 0, 0.3, 0.3, 0.3 ) -- Boss room entrance
-- Respawn Group 5
add_instance_dungeon_monster( 50049, 50000, layer)
add_instance_dungeon_monster( 50050, 50000, layer)
add_instance_dungeon_monster( 50051, 50000, layer)
add_instance_dungeon_monster( 50052, 50000, layer)
add_instance_dungeon_monster( 50053, 50000, layer)
add_instance_dungeon_monster( 50054, 50000, layer)
add_instance_dungeon_monster( 50055, 50000, layer)
add_instance_dungeon_monster( 50056, 50000, layer)
add_instance_dungeon_monster( 50057, 50000, layer)
broadcast_mission_title( 1, '@9904', 50000, layer )
broadcast_mission_objective( 1, 0, 19, '@1224', 50000, layer )
elseif monster_group == 5 then -- If the defeated group is #5 (dungeon cleared)
add_field_prop( 60191, 0, 39552, 136341, layer, 0, 0, 0, 3, 0.3, 0.3, 0.3 ) -- Boss room exit
if get_instance_dungeon_type_id( 50000, layer ) == 3 then
add_field_prop( 9006, 0, 39556, 137014, layer, -3, 0, 0, 0, 1, 1, 1 ) -- Boss room exit
broadcast_notice( 1, "@90610144", 50000, layer ) -- The revived boss will appear after activating the strange pillar.
end
broadcast_mission_title( 1, '', 50000, layer )
broadcast_notice( 1, "@90606232", 50000, layer ) -- The main stage of the Red Spider Circus is cleared.<br>If you take this new portal, you will be teleported to the entrance of the Circus.
end
end
end
function circus_entrance_NPC_init()
local minimumRequiredLevel = tonumber(get_env("game.circus_required_level")) or 160
local playerLevel = gv("level")
local isAutoUser = is_auto_user()
dlg_title( "@90606149" )
if isAutoUser then
dlg_text("@37100001") -- You are currently in our blacklist. Consider changing your behavior
else
if playerLevel < minimumRequiredLevel then
-- It's too dangerous here. Please leave! If you're not at least level 150, you'll end up like the drained villagers.
dlg_text(sconv("@90605763", "#@level@#", minimumRequiredLevel))
elseif playerLevel >= minimumRequiredLevel then
-- You came to a very dangerous place. A number of Rondo Guards searched the area with no luck. What I heard is you have to be careful about her eyes. I don't know what it means, but I know you can lift the curse on this Circus. We trust you.
dlg_text( "@90606148" )
dlg_menu("@690000141", "warp_to_instance_dungeon(50000, 0)") -- Stage 1
dlg_menu("@690000142", "warp_to_instance_dungeon(50000, 1)") -- Stage 2
if playerLevel >= minimumRequiredLevel + 10 then
dlg_menu("@690000143", "warp_to_instance_dungeon(50000, 2)") -- Stage 3
dlg_menu("@690000144", "warp_to_instance_dungeon(50000, 3)") -- Stage 4
end
end
end
dlg_end()
end
function on_create_circus( layer )
end
function on_join_circus( layer )
local cnt_1 = get_alive_instance_respawn_group_monster_count( 50000, layer, 1 )
local cnt_2 = get_alive_instance_respawn_group_monster_count( 50000, layer, 2 )
local cnt_3 = get_alive_instance_respawn_group_monster_count( 50000, layer, 3 )
local cnt_4 = get_alive_instance_respawn_group_monster_count( 50000, layer, 4 )
local cnt_5 = get_alive_instance_respawn_group_monster_count( 50000, layer, 5 )
-- Currently on mission #1
if( cnt_1 > 0 ) then
send_mission_title( '@9900' ) -- Eliminate the monsters in the warehouse
send_mission_objective( 0, 10, '@1224' ) -- Kill them all!
send_mission_objective_progress( 0, 10 - cnt_1 )
-- Currently on mission #2
elseif( cnt_2 > 0 ) then
send_mission_title( '@9901' ) -- Eliminate the monsters in the changing room
send_mission_objective( 0, 13, '@1224' ) -- Kill them all!
send_mission_objective_progress( 0, 13 - cnt_2 )
-- Currently on mission #3
elseif( cnt_3 > 0 ) then
send_mission_title( '@9902' ) -- Eliminate the monsters that have escaped from their cages
send_mission_objective( 0, 13, '@1224' ) -- Kill them all!
send_mission_objective_progress( 0, 13 - cnt_3 )
-- Currently on mission #4
elseif( cnt_4 > 0 ) then
send_mission_title( '@9903' ) -- Eliminate the monsters in the training hall
send_mission_objective( 0, 20, '@1224' ) -- Kill them all!
send_mission_objective_progress( 0, 20 - cnt_4 )
-- Currently on mission #5
elseif( cnt_5 > 0 ) then
send_mission_title( '@9904' ) -- Eliminate the monsters in the performance theater
send_mission_objective( 0, 19, '@1224' ) -- Kill them all!
send_mission_objective_progress( 0, 19 - cnt_5 )
end
end
function on_leave_circus( layer )
end
function circus_portal_activate()
local playerLevel = gv("level")
local minimumRequiredLevel = tonumber(get_env("game.circus_required_level")) or 160
if playerLevel >= minimumRequiredLevel then
dlg_special( 'confirm_window', 'warp(35692 , 120963 )', '@9852' ) -- Are you ready to move to the deepest Pitch Black Woods area?
else
cprint(sconv("@9254"), "#@level@#", minimumRequiredLevel) -- Required Level: #@level@#.
end
end