local NightCity_MapId=881225265 local NightCity_Y=23094 local NightCity_Mobs={9010424,9010425,9010426,2010433} function NightCity_SpawnRandom(typeId,instanceId,cx,cy,cz,count,radius) for i=1,count do map.MapCreateCreature(NightCity_MapId,instanceId,typeId,cx+math.random(-radius,radius),cy,cz+math.random(-radius,radius)) end end function NightCity_StartWave(instanceId,wave) local cx=map.GetMapScriptData(NightCity_MapId,instanceId,1,5) or 612 local cz=map.GetMapScriptData(NightCity_MapId,instanceId,1,6) or 672 map.SetMapScriptData(NightCity_MapId,instanceId,1,2,wave) map.SetMapScriptData(NightCity_MapId,instanceId,1,3,0) map.SetMapScriptData(NightCity_MapId,instanceId,1,4,0) if wave==10 then map.MapCreateCreature(NightCity_MapId,instanceId,9010421,cx,NightCity_Y,cz) elseif wave==20 then map.MapCreateCreature(NightCity_MapId,instanceId,9010422,cx,NightCity_Y,cz) elseif wave>=30 then map.MapCreateCreature(NightCity_MapId,instanceId,9010423,cx,NightCity_Y,cz) else local idx=((wave-1)%4)+1 local mainMob=NightCity_Mobs[idx] local extraMob=NightCity_Mobs[idx%4+1] local countMain=6+math.floor(wave*0.7) if countMain>24 then countMain=24 end NightCity_SpawnRandom(mainMob,instanceId,cx,NightCity_Y,cz,countMain,20) NightCity_SpawnRandom(extraMob,instanceId,cx,NightCity_Y,cz,4,20) map.SetMapScriptData(NightCity_MapId,instanceId,1,4,countMain+4) end end function NightCity_BeginEvent(instanceId,x,z) map.SetMapScriptData(NightCity_MapId,instanceId,1,1,1) map.SetMapScriptData(NightCity_MapId,instanceId,1,5,x) map.SetMapScriptData(NightCity_MapId,instanceId,1,6,z) NightCity_StartWave(instanceId,1) end function NightCity_OnMobDie(mapId,instanceId,creatureId,creatureTypeId,killerId) local wave=map.GetMapScriptData(NightCity_MapId,instanceId,1,2) or 0 local target=map.GetMapScriptData(NightCity_MapId,instanceId,1,4) or 0 if wave>0 and target>0 then local kills=(map.GetMapScriptData(NightCity_MapId,instanceId,1,3) or 0)+1 map.SetMapScriptData(NightCity_MapId,instanceId,1,3,kills) if kills>=target then map.SetMapScriptData(NightCity_MapId,instanceId,1,4,0) NightCity_StartWave(instanceId,wave+1) end end end function NightCity_OnBossDie(mapId,instanceId,creatureId,creatureTypeId,killerId) local wave=map.GetMapScriptData(NightCity_MapId,instanceId,1,2) or 0 local x,y,z=unit.GetPosition(mapId,instanceId,creatureId) if creatureTypeId==9010421 then if wave==10 then NightCity_StartWave(instanceId,11) end role.AddRoleItem(mapId,instanceId,killerId,1350235,1,-1,8,420) role.AddRoleItem(mapId,instanceId,killerId,7101277,5,-1,8,420) elseif creatureTypeId==9010422 then if wave==20 then NightCity_StartWave(instanceId,21) end role.AddRoleItem(mapId,instanceId,killerId,1350236,1,-1,8,420) role.AddRoleItem(mapId,instanceId,killerId,7101277,10,-1,8,420) elseif creatureTypeId==9010423 then map.MapCreateCreature(NightCity_MapId,instanceId,9010420,x,y,z) role.AddRoleItem(mapId,instanceId,killerId,6610604,1,-1,8,420) role.AddRoleItem(mapId,instanceId,killerId,7101277,20,-1,8,420) end end function NightCity_OnPlayerEnter(mapId,instanceId,roleId) local state=map.GetMapScriptData(NightCity_MapId,instanceId,1,1) if state==nil or state==0 then local x,_,z=unit.GetPosition(mapId,instanceId,roleId) NightCity_BeginEvent(instanceId,x,z) end end aux.RegisterMapEvent("s02_2",2,"NightCity_OnPlayerEnter") for _,id in ipairs(NightCity_Mobs) do aux.RegisterCreatureEvent(id,4,"NightCity_OnMobDie") end for _,id in ipairs({9010421,9010422,9010423}) do aux.RegisterCreatureEvent(id,4,"NightCity_OnBossDie") end