diff --git a/2001/ze_amdaporkeep/camera_control.js b/2001/ze_amdaporkeep/camera_control.js new file mode 100644 index 0000000..367a3bf --- /dev/null +++ b/2001/ze_amdaporkeep/camera_control.js @@ -0,0 +1,120 @@ +//⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⢀⢠⡀⠐⠂⠀⠀⠒⠒⠒⠠⠀⠠⠤⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⣠⠐⠌⠋⠑⣂⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⡄⠀⠀⠀⣰⡆⠀⠀⠀⠀⣠⠕⠏⠀⠀⠀⠀⠀⠀⠈⠉⠙⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⡀⠀⠀⠀⠀⠀⠀ +//⠅⠀⠀⠐⠀⠇⠀⠀⢀⠞⠁⡠⠄⢀⠄⣀⣠⣤⣶⣶⣶⣾⣿⣿⣷⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀ +//⠸⠀⠀⠀⠀⡀⠀⠐⠁⢠⠞⡁⣠⣶⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣿⠿⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀ +// ⣆⢀⠀⢀⠀⠂⠀⢰⣯⣴⣿⣿⣿⣿⠿⠛⣉⠁⠀⢂⠀⠀⠀⠈⠃⠀⠈⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⡀⠀ +// ⠊⠳⣢⠁⠀⢠⣿⣿⣿⣿⠟⠉⠂⠀⠀⠠⠂⠀⠀⢂⠀⠀⠀⠀⠈⠂⠀⠱⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣀⠀⠀ +// ⠀⣰⠃⠀⠀⣾⣿⡿⢋⢿⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⢢⠀⠀⠀⠀⠀⠐⠀⠘⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠐⣂⠀ +// ⢤⠍⠀⠀⢰⣿⡟⠀⠸⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀⠀⠀⠀⠈⢀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⢂ +//⠀⠁⡾⠢⠀⠀⣼⢇⠁⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⡀⠀⠀⠀⠀⠀⠂⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀ +//⢀⣸⡓⠀⠀⢀⡧⠈⠀⠀⠀⡄⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠁⠀⢀⣀⣀⠀⠀⠰⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀ +//⣵⣟⠄⠀⠀⢸⡁⠂⠀⠀⠀⢀⠠⠀⠁⠀⠀⠀⠀⠀⠐⠀⠀⠐⠃⠉⠀⠀⢄⠀⠀⠀⠀⠉⣥⠀⠀⠀⢀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀ +//⡧⣃⠈⠀⠰⢸⠁⠀⠀⠀⠘⠀⠂⠂⠠⠀⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠊⡄⠀⠀⠈⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀ +//⡼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠌⠄⠀⠀⠀⠀⠀⠀⢰⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⣐⠄⢱⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀ +//⣏⠄⡇⠀⠀⠀⠀⠀⠀⢀⠔⠎⠀⡈⡌⠄⠀⠀⠀⠀⠆⢸⡄⡅⠸⠠⠔⡀⢅⣰⣤⣤⣾⣿⣷⣾⣤⢤⠀⠀⠀⠀⠀⢸⡀⠀⠀⠀⠀⠀ +//⠃⢀⠇⠀⠰⢠⡀⠀⠔⠁⠈⢠⠀⠠⠀⢊⠀⠀⠀⠀⠀⢸⠀⢀⠀⠐⡨⣶⢿⢿⣿⣿⣿⣿⣿⢻⡇⠀⠂⠄⠠⡀⣀⣸⡙⡀⠀⠀⠀⠀ +//⠉⡯⠀⠀⠀⠸⠁⠂⠀⠀⠀⡘⠤⠀⢆⠀⠱⡠⡀⠀⡀⠘⢠⠸⠄⠈⠊⠉⠀⠸⣽⣿⣿⣿⡿⠈⠇⠀⢈⠀⠀⠀⠀⠘⢇⠀⠀⠀⠀⠀ +//⠀⠀⠄⠀⠀⠀⡒⠠⠀⠀⠀⢀⠏⣀⠘⡂⠀⠈⠈⠦⠳⠸⠸⡤⠀⠀⠀⠀⠀⠀⠛⠛⠉⠉⠁⠀⠀⠀⠄⠀⠀⠀⠈⡜⠜⠀⠀⠀⠀⠀ +// ⢱⠡⠀⠀⠐⠐⠀⠄⠀⠀⠀⣠⣲⣦⡶⣶⡒⠀⢀⠬⠃⠈⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠑⠀⠈⠀⡄⠀⠀⠀⡀⢆⠀⢀⠀⠀⠀⠀⠀ +// ⢿⠐⠆⠀⡈⣁⠐⡐⠀⠀⣴⡾⠿⣷⣿⣿⣷⠇⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠠⢁⣒⠁⠀⠀⢀⠠⠈⢀⡌⠀⠀⠀⠀⠀ +//⠀⠼⡆⠓⠄⠐⡀⠀⠐⡨⢟⣟⠖⡃⠘⢿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢑⠗⡂⠀⠀⠀⠌⠆⠑⢹⠐⠀⡄⠀⠀⠰ +//⠀⠀⡲⠈⢉⢀⠀⢍⡆⠘⢔⣿⢮⡁⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠜⠡⠀⠀⠀⡀⠼⡈⠀⢸⠀⠀⡇⠀⠀⠀ +// ⠀⠆⠆⠀⠦⡀⠀⠈⢑⣦⠲⡉⡳⡀⠀⠄⠀⠀⠀⠀⠀⠰⠿⠗⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠂⠀⠀⠄⡬⢲⠦⠀⡌⢰⡄⢇⠀⠀⠆ +// ⢱⣄⣀⠨⠐⠀⢀⣀⠙⣂⠉⢰⢖⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡂⡊⠀⡠⠂⠊⠑⠈⠐⠢⠱⡪⢂⠸⠀⠀⢠ +// ⣆⢤⡮⠋⠔⠁⠀⠈⠤⠀⢊⠈⠢⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⣐⡙⠠⢪⠃⠀⠊⠀⠀⠀⠀⠀⢰⣕⡀⠀⠀⢠ +// ⡭⠋⠴⢁⠈⠘⠀⡀⠈⢖⠀⢢⠀⠀⢫⠀⠒⠀⢠⠄⠀⢀⢠⣴⢞⣡⣴⣶⣓⠀⢀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⡜⡍⠄⢠⢸ +//⠰⣄⢇⢟⠑⠃⢀⠀⠈⠐⠀⠀⠀⢀⠋⡼⠀⠨⢹⠂⠀⠠⠁⠄⠀⠀⢪⣿⣿⣿⣿⡑⠁⠀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡘⢊⢸⡞ +//⠀⣻⡂⡀⠄⠀⠀⠈⠀⠀⠀⠠⠀⠀⠈⠣⠾⢣⡀⠉⠄⠀⠀⠁⡄⠀⠀⠸⡟⣫⠂⢀⢔⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠽⠺⣇ +//⡄⢱⣧⠰⠌⣠⠀⠀⠠⠀⠃⠀⠀⢀⠀⠑⠀⠤⡃⡲⡒⠒⢀⣶⠞⠉⢁⡀⠱⣱⣞⠑⣻⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠳⣿ +//⠘⡼⣵⡄⠾⠟⠊⠁⠀⠀⠀⠀⠀⠀⠀⠁⢡⢡⠷⢞⣳⢀⣿⠛⠤⠀⡀⡠⠎⠝⠉⣼⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⣇ +//⠈⠱⡀⠒⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠙⠡⠘⠻⠀⠀⠀⠉⠀⠈⠀⠀⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢙ +//⠀⠡⢱⣀⢡⡀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠶⠀⠀⠀⠀⠀⠸⡧⠇⠀⠀⠀⠀⠀⠀⢠⣿⣃⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⢿⢣⠠⢐⠀⠀⠀⠀⠈⡀⠀⠀⠐⠀⠀⠀⠀⠀⠀⢻⡶⢅⠄⠀⠀⠀⠀⠀⠘⡃⠀⠀⠀⠀⠀⠁⠂⠄⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀ +//⠀⠀⢸⢌⠁⢇⠀⡀⠄⠐⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⢠⠡⢁⡀⡘⠀⠀⡀⠀⢀⠵⠪⠁⠀⠀⠉⠀⠀⠀⠐⠈⠐⠄⠀⠀⡐⠀⠀⠀⠀ +//⠀⢀⣾⢄⠀⠀⠑⠌⠀⠀⠀⠐⠁⠀⠀⠀⠀⠀⠀⠀⡄⡩⢈⠊⢢⡀⠐⠁⠠⠁⠠⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠘⢅⠀⠀⠀⠀ +//⠀⢨⠏⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡁⡀⢀⠀⢄⡖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠄⠀⠀⠢⠀⠀ +//⠀⢸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⡇⠈⠃⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⢀⠀⠁⠐⢀⠀⠁ +//⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠆⡄⠠⡀⠀⠀⠁⠠⠀⢀⠀⠠⠀⠀⠐⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⠂ +//⠀⠀⠀⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⠀⢈⢀⠄⠔⠠⠀⠐⠀⠈⠀⠀⠈⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠐ +//⠀⠀⠀⠘⡼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡂⠀⠀⠰⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⡚⠀⠀⠀ +//⠀⠀⠀⠀⢠⠹⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁⢨⠂⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡇⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⡀⠀⠈⠀⠀⠛⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⢀⠁⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⣿⠴⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠌⠀⠀⢠⡄⠀⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠄⠀⠀⠀⠀⢀ +//⠀⠀⠀⠐⢀⠉⠗⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠁⠀⠀⠀⠌⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠐⠀⠀⠀⠀⠔⠁ +//⠀⠀⠀⠀⠆⡀⢀⢚⡄⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠂⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⠀⠌⠁⠘ +//⠀⠀⠀⢠⣸⠃⡸⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⢠⠀⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠐⡀⢀⠖⠀⠀⠀ +//⠀⠀⠀⠈⠹⠀⠀⠀⠀⢃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⣠⣇⠠⠀⠂⠉ +//⠀⠀⠀⢰⠁⠀⢣⠃⠀⠀⠀⢂⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠈⡀⠀⠀⠀⠀⠀⢀⠂⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠠⠀⠀⠓⠔⡀⠀⠀⠀⢂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠀⡐⠂⠀⣠⠞⠦⠀⢀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡰⠐⢱⡀⠄⢀⠀⠀⢂⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⢀⠞⠁⠀⠀⠀⠀⠀⠁⠀⠂⠀⠄ +//⠀⠀⠀⠀⠀⡧⠄⠡⢖⠐⡀⠀⡀⠀⠄⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠈⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠃⠃⠢⠀⠩⢆⠀⠄⠚⢤⣈⡄⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +import { Instance } from "cs_script/point_script"; + + const center = Instance.FindEntityByName("Platform_Omega_Edge_Particle"); + const centerpos = center.GetAbsOrigin(); + centerpos.z = centerpos.z + 300; + let Model = null; + let Camera = null; + let StartTime = 0; + +Instance.SetThink(Middle); + +Instance.OnScriptInput("Camera1",() => { + Model = Instance.FindEntityByName("Omega_M_Model"); + Camera = Instance.FindEntityByName("Omega_Start_Camera1"); + Instance.EntFireAtName({name: "Omega_Start_Camera1", input: "Startforward"}); + Instance.EntFireAtName({name: "Omega_Start_Camera1_Con", input: "EnableCameraAll"}); + StartTime = Instance.GetGameTime(); + Instance.SetNextThink(StartTime); +}); + +function Middle() { + const Time = Instance.GetGameTime(); + const Camerapos = Camera.GetAbsOrigin(); + const Flag = Instance.FindEntityByName("Omega_Start_Camera1_Path1"); + if (Time - StartTime > 15) return; + else if(!Flag) { + const Modelpos = Model.GetAbsOrigin(); + Modelpos.z = Modelpos.z + 50; + const Vector = Normalization(Modelpos, Camerapos); + const Angle = ReturnAngles(Vector); + Camera.Teleport({angles: Angle}); + + } + else { + const Vector = Normalization(centerpos, Camerapos); + const Angle = ReturnAngles(Vector); + Camera.Teleport({angles: Angle}); + } + Instance.SetNextThink(Time); +} + +function Normalization(vec1, vec2) { + const dx = vec1.x - vec2.x; + const dy = vec1.y - vec2.y; + const dz = vec1.z - vec2.z; + const dis = Math.sqrt(dx * dx + dy * dy + dz * dz); + return { + x: dx / dis, + y: dy / dis, + z: dz / dis + }; +} + +function ReturnAngles(vec) { + const yawRadians = 180 * Math.atan2(vec.y, vec.x) / Math.PI; + const pitchRadians = -180 * Math.asin(vec.z) / Math.PI; + const Time = Instance.GetGameTime() - StartTime; + let rollRadians = 0; + if (Time < 10) { + rollRadians = 10 - Time; + } + return { + pitch: pitchRadians, + yaw: yawRadians, + roll: rollRadians + }; +} \ No newline at end of file diff --git a/2001/ze_amdaporkeep/defence.js b/2001/ze_amdaporkeep/defence.js new file mode 100644 index 0000000..e7a9982 --- /dev/null +++ b/2001/ze_amdaporkeep/defence.js @@ -0,0 +1,128 @@ +//⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⢀⢠⡀⠐⠂⠀⠀⠒⠒⠒⠠⠀⠠⠤⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⣠⠐⠌⠋⠑⣂⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⡄⠀⠀⠀⣰⡆⠀⠀⠀⠀⣠⠕⠏⠀⠀⠀⠀⠀⠀⠈⠉⠙⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⡀⠀⠀⠀⠀⠀⠀ +//⠅⠀⠀⠐⠀⠇⠀⠀⢀⠞⠁⡠⠄⢀⠄⣀⣠⣤⣶⣶⣶⣾⣿⣿⣷⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀ +//⠸⠀⠀⠀⠀⡀⠀⠐⠁⢠⠞⡁⣠⣶⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣿⠿⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀ +// ⣆⢀⠀⢀⠀⠂⠀⢰⣯⣴⣿⣿⣿⣿⠿⠛⣉⠁⠀⢂⠀⠀⠀⠈⠃⠀⠈⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⡀⠀ +// ⠊⠳⣢⠁⠀⢠⣿⣿⣿⣿⠟⠉⠂⠀⠀⠠⠂⠀⠀⢂⠀⠀⠀⠀⠈⠂⠀⠱⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣀⠀⠀ +// ⠀⣰⠃⠀⠀⣾⣿⡿⢋⢿⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⢢⠀⠀⠀⠀⠀⠐⠀⠘⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠐⣂⠀ +// ⢤⠍⠀⠀⢰⣿⡟⠀⠸⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀⠀⠀⠀⠈⢀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⢂ +//⠀⠁⡾⠢⠀⠀⣼⢇⠁⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⡀⠀⠀⠀⠀⠀⠂⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀ +//⢀⣸⡓⠀⠀⢀⡧⠈⠀⠀⠀⡄⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠁⠀⢀⣀⣀⠀⠀⠰⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀ +//⣵⣟⠄⠀⠀⢸⡁⠂⠀⠀⠀⢀⠠⠀⠁⠀⠀⠀⠀⠀⠐⠀⠀⠐⠃⠉⠀⠀⢄⠀⠀⠀⠀⠉⣥⠀⠀⠀⢀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀ +//⡧⣃⠈⠀⠰⢸⠁⠀⠀⠀⠘⠀⠂⠂⠠⠀⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠊⡄⠀⠀⠈⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀ +//⡼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠌⠄⠀⠀⠀⠀⠀⠀⢰⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⣐⠄⢱⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀ +//⣏⠄⡇⠀⠀⠀⠀⠀⠀⢀⠔⠎⠀⡈⡌⠄⠀⠀⠀⠀⠆⢸⡄⡅⠸⠠⠔⡀⢅⣰⣤⣤⣾⣿⣷⣾⣤⢤⠀⠀⠀⠀⠀⢸⡀⠀⠀⠀⠀⠀ +//⠃⢀⠇⠀⠰⢠⡀⠀⠔⠁⠈⢠⠀⠠⠀⢊⠀⠀⠀⠀⠀⢸⠀⢀⠀⠐⡨⣶⢿⢿⣿⣿⣿⣿⣿⢻⡇⠀⠂⠄⠠⡀⣀⣸⡙⡀⠀⠀⠀⠀ +//⠉⡯⠀⠀⠀⠸⠁⠂⠀⠀⠀⡘⠤⠀⢆⠀⠱⡠⡀⠀⡀⠘⢠⠸⠄⠈⠊⠉⠀⠸⣽⣿⣿⣿⡿⠈⠇⠀⢈⠀⠀⠀⠀⠘⢇⠀⠀⠀⠀⠀ +//⠀⠀⠄⠀⠀⠀⡒⠠⠀⠀⠀⢀⠏⣀⠘⡂⠀⠈⠈⠦⠳⠸⠸⡤⠀⠀⠀⠀⠀⠀⠛⠛⠉⠉⠁⠀⠀⠀⠄⠀⠀⠀⠈⡜⠜⠀⠀⠀⠀⠀ +// ⢱⠡⠀⠀⠐⠐⠀⠄⠀⠀⠀⣠⣲⣦⡶⣶⡒⠀⢀⠬⠃⠈⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠑⠀⠈⠀⡄⠀⠀⠀⡀⢆⠀⢀⠀⠀⠀⠀⠀ +// ⢿⠐⠆⠀⡈⣁⠐⡐⠀⠀⣴⡾⠿⣷⣿⣿⣷⠇⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠠⢁⣒⠁⠀⠀⢀⠠⠈⢀⡌⠀⠀⠀⠀⠀ +//⠀⠼⡆⠓⠄⠐⡀⠀⠐⡨⢟⣟⠖⡃⠘⢿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢑⠗⡂⠀⠀⠀⠌⠆⠑⢹⠐⠀⡄⠀⠀⠰ +//⠀⠀⡲⠈⢉⢀⠀⢍⡆⠘⢔⣿⢮⡁⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠜⠡⠀⠀⠀⡀⠼⡈⠀⢸⠀⠀⡇⠀⠀⠀ +// ⠀⠆⠆⠀⠦⡀⠀⠈⢑⣦⠲⡉⡳⡀⠀⠄⠀⠀⠀⠀⠀⠰⠿⠗⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠂⠀⠀⠄⡬⢲⠦⠀⡌⢰⡄⢇⠀⠀⠆ +// ⢱⣄⣀⠨⠐⠀⢀⣀⠙⣂⠉⢰⢖⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡂⡊⠀⡠⠂⠊⠑⠈⠐⠢⠱⡪⢂⠸⠀⠀⢠ +// ⣆⢤⡮⠋⠔⠁⠀⠈⠤⠀⢊⠈⠢⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⣐⡙⠠⢪⠃⠀⠊⠀⠀⠀⠀⠀⢰⣕⡀⠀⠀⢠ +// ⡭⠋⠴⢁⠈⠘⠀⡀⠈⢖⠀⢢⠀⠀⢫⠀⠒⠀⢠⠄⠀⢀⢠⣴⢞⣡⣴⣶⣓⠀⢀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⡜⡍⠄⢠⢸ +//⠰⣄⢇⢟⠑⠃⢀⠀⠈⠐⠀⠀⠀⢀⠋⡼⠀⠨⢹⠂⠀⠠⠁⠄⠀⠀⢪⣿⣿⣿⣿⡑⠁⠀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡘⢊⢸⡞ +//⠀⣻⡂⡀⠄⠀⠀⠈⠀⠀⠀⠠⠀⠀⠈⠣⠾⢣⡀⠉⠄⠀⠀⠁⡄⠀⠀⠸⡟⣫⠂⢀⢔⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠽⠺⣇ +//⡄⢱⣧⠰⠌⣠⠀⠀⠠⠀⠃⠀⠀⢀⠀⠑⠀⠤⡃⡲⡒⠒⢀⣶⠞⠉⢁⡀⠱⣱⣞⠑⣻⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠳⣿ +//⠘⡼⣵⡄⠾⠟⠊⠁⠀⠀⠀⠀⠀⠀⠀⠁⢡⢡⠷⢞⣳⢀⣿⠛⠤⠀⡀⡠⠎⠝⠉⣼⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⣇ +//⠈⠱⡀⠒⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠙⠡⠘⠻⠀⠀⠀⠉⠀⠈⠀⠀⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢙ +//⠀⠡⢱⣀⢡⡀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠶⠀⠀⠀⠀⠀⠸⡧⠇⠀⠀⠀⠀⠀⠀⢠⣿⣃⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⢿⢣⠠⢐⠀⠀⠀⠀⠈⡀⠀⠀⠐⠀⠀⠀⠀⠀⠀⢻⡶⢅⠄⠀⠀⠀⠀⠀⠘⡃⠀⠀⠀⠀⠀⠁⠂⠄⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀ +//⠀⠀⢸⢌⠁⢇⠀⡀⠄⠐⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⢠⠡⢁⡀⡘⠀⠀⡀⠀⢀⠵⠪⠁⠀⠀⠉⠀⠀⠀⠐⠈⠐⠄⠀⠀⡐⠀⠀⠀⠀ +//⠀⢀⣾⢄⠀⠀⠑⠌⠀⠀⠀⠐⠁⠀⠀⠀⠀⠀⠀⠀⡄⡩⢈⠊⢢⡀⠐⠁⠠⠁⠠⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠘⢅⠀⠀⠀⠀ +//⠀⢨⠏⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡁⡀⢀⠀⢄⡖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠄⠀⠀⠢⠀⠀ +//⠀⢸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⡇⠈⠃⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⢀⠀⠁⠐⢀⠀⠁ +//⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠆⡄⠠⡀⠀⠀⠁⠠⠀⢀⠀⠠⠀⠀⠐⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⠂ +//⠀⠀⠀⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⠀⢈⢀⠄⠔⠠⠀⠐⠀⠈⠀⠀⠈⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠐ +//⠀⠀⠀⠘⡼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡂⠀⠀⠰⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⡚⠀⠀⠀ +//⠀⠀⠀⠀⢠⠹⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁⢨⠂⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡇⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⡀⠀⠈⠀⠀⠛⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⢀⠁⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⣿⠴⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠌⠀⠀⢠⡄⠀⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠄⠀⠀⠀⠀⢀ +//⠀⠀⠀⠐⢀⠉⠗⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠁⠀⠀⠀⠌⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠐⠀⠀⠀⠀⠔⠁ +//⠀⠀⠀⠀⠆⡀⢀⢚⡄⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠂⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⠀⠌⠁⠘ +//⠀⠀⠀⢠⣸⠃⡸⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⢠⠀⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠐⡀⢀⠖⠀⠀⠀ +//⠀⠀⠀⠈⠹⠀⠀⠀⠀⢃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⣠⣇⠠⠀⠂⠉ +//⠀⠀⠀⠀⡀⠀⡅⡆⠀⠀⢂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⢀⠔⠁⠀⠀⠀⠀⠀ +//⠀⠀⠀⢰⠁⠀⢣⠃⠀⠀⠀⢂⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠈⡀⠀⠀⠀⠀⠀⢀⠂⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠠⠀⠀⠓⠔⡀⠀⠀⠀⢂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠀⡐⠂⠀⣠⠞⠦⠀⢀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡰⠐⢱⡀⠄⢀⠀⠀⢂⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⢀⠞⠁⠀⠀⠀⠀⠀⠁⠀⠂⠀⠄ +//⠀⠀⠀⠀⠀⡧⠄⠡⢖⠐⡀⠀⡀⠀⠄⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠈⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠃⠃⠢⠀⠩⢆⠀⠄⠚⢤⣈⡄⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +import { Instance } from "cs_script/point_script"; + +const Distance = 512; + +Instance.SetThink(EliminateFlyingEntity); + +Instance.OnScriptInput("Defence",() => { + const Time = Instance.GetGameTime(); + Instance.SetNextThink(Time); +}); + +Instance.OnBeforePlayerDamage(({ player, damage }) => { + + if (!player || !player.IsValid()) return; + + const playerPos = player.GetAbsOrigin(); + const TG = Instance.FindEntityByName("Item_Scholar_Shield_Particle"); + const TGPos = TG.GetAbsOrigin(); + const Dis = VectorDistance(playerPos, TGPos); + + if (Dis < Distance && player.GetTeamNumber() == 3) { + return { damage: damage / 2 }; + } + else return { damage: damage }; +}); + +function EliminateFlyingEntity() { + const TG = Instance.FindEntityByName("Item_Scholar_Shield_Particle"); + if (!TG) return; + const C_O_D = Instance.FindEntityByName("ZM_C_O_D_Magic_Movelinear"); + const Storm = Instance.FindEntityByName("ZM_Storm_Movelinear"); + const Push = Instance.FindEntityByName("Storm_Push_System"); + const TGPos = TG.GetAbsOrigin(); + if (C_O_D) { + const Pos1 = C_O_D.GetAbsOrigin(); + const DisCOD = VectorDistance(TGPos, Pos1); + if (DisCOD < Distance) EliminateCOD(); + } + if (Storm) { + const Pos2 = Storm.GetAbsOrigin(); + const DisStorm = VectorDistance(TGPos, Pos2); + if (DisStorm < Distance) EliminateStorm(); + } + if (Push) { + const Pos3 = Push.GetAbsOrigin(); + const DisPush = VectorDistance(TGPos, Pos3); + if (DisPush < Distance) EliminatePush(); + } + const Time = Instance.GetGameTime(); + Instance.SetNextThink(Time); +} + +function EliminateCOD(){ + Instance.EntFireAtName({name: "ZM_C_O_D_Magic_Movelinear", input: "KillHierarchy"}); + Instance.EntFireAtName({ name: "ZM_C_O_D_Magic_Maker", input: "Kill"}); + return; +} + +function EliminateStorm(){ + Instance.EntFireAtName({name: "ZM_Storm_Movelinear", input: "KillHierarchy"}); + return; +} + +function EliminatePush(){ + Instance.EntFireAtName({name: "Storm_Push_System", input: "FireUser4"}); + return; +} + +function VectorDistance(vec1, vec2) { + const dx = vec1.x - vec2.x; + const dy = vec1.y - vec2.y; + const dz = vec1.z - vec2.z; + return Math.sqrt(dx * dx + dy * dy + dz * dz); +} \ No newline at end of file diff --git a/2001/ze_amdaporkeep/reflection.js b/2001/ze_amdaporkeep/reflection.js new file mode 100644 index 0000000..80cf962 --- /dev/null +++ b/2001/ze_amdaporkeep/reflection.js @@ -0,0 +1,191 @@ +//⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⢀⢠⡀⠐⠂⠀⠀⠒⠒⠒⠠⠀⠠⠤⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⣠⠐⠌⠋⠑⣂⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⡄⠀⠀⠀⣰⡆⠀⠀⠀⠀⣠⠕⠏⠀⠀⠀⠀⠀⠀⠈⠉⠙⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⡀⠀⠀⠀⠀⠀⠀ +//⠅⠀⠀⠐⠀⠇⠀⠀⢀⠞⠁⡠⠄⢀⠄⣀⣠⣤⣶⣶⣶⣾⣿⣿⣷⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀ +//⠸⠀⠀⠀⠀⡀⠀⠐⠁⢠⠞⡁⣠⣶⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣿⠿⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀ +// ⣆⢀⠀⢀⠀⠂⠀⢰⣯⣴⣿⣿⣿⣿⠿⠛⣉⠁⠀⢂⠀⠀⠀⠈⠃⠀⠈⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⡀⠀ +// ⠊⠳⣢⠁⠀⢠⣿⣿⣿⣿⠟⠉⠂⠀⠀⠠⠂⠀⠀⢂⠀⠀⠀⠀⠈⠂⠀⠱⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣀⠀⠀ +// ⠀⣰⠃⠀⠀⣾⣿⡿⢋⢿⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⢢⠀⠀⠀⠀⠀⠐⠀⠘⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠐⣂⠀ +// ⢤⠍⠀⠀⢰⣿⡟⠀⠸⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀⠀⠀⠀⠈⢀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⢂ +//⠀⠁⡾⠢⠀⠀⣼⢇⠁⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⡀⠀⠀⠀⠀⠀⠂⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀ +//⢀⣸⡓⠀⠀⢀⡧⠈⠀⠀⠀⡄⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠁⠀⢀⣀⣀⠀⠀⠰⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀ +//⣵⣟⠄⠀⠀⢸⡁⠂⠀⠀⠀⢀⠠⠀⠁⠀⠀⠀⠀⠀⠐⠀⠀⠐⠃⠉⠀⠀⢄⠀⠀⠀⠀⠉⣥⠀⠀⠀⢀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀ +//⡧⣃⠈⠀⠰⢸⠁⠀⠀⠀⠘⠀⠂⠂⠠⠀⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠊⡄⠀⠀⠈⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀ +//⡼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠌⠄⠀⠀⠀⠀⠀⠀⢰⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⣐⠄⢱⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀ +//⣏⠄⡇⠀⠀⠀⠀⠀⠀⢀⠔⠎⠀⡈⡌⠄⠀⠀⠀⠀⠆⢸⡄⡅⠸⠠⠔⡀⢅⣰⣤⣤⣾⣿⣷⣾⣤⢤⠀⠀⠀⠀⠀⢸⡀⠀⠀⠀⠀⠀ +//⠃⢀⠇⠀⠰⢠⡀⠀⠔⠁⠈⢠⠀⠠⠀⢊⠀⠀⠀⠀⠀⢸⠀⢀⠀⠐⡨⣶⢿⢿⣿⣿⣿⣿⣿⢻⡇⠀⠂⠄⠠⡀⣀⣸⡙⡀⠀⠀⠀⠀ +//⠉⡯⠀⠀⠀⠸⠁⠂⠀⠀⠀⡘⠤⠀⢆⠀⠱⡠⡀⠀⡀⠘⢠⠸⠄⠈⠊⠉⠀⠸⣽⣿⣿⣿⡿⠈⠇⠀⢈⠀⠀⠀⠀⠘⢇⠀⠀⠀⠀⠀ +//⠀⠀⠄⠀⠀⠀⡒⠠⠀⠀⠀⢀⠏⣀⠘⡂⠀⠈⠈⠦⠳⠸⠸⡤⠀⠀⠀⠀⠀⠀⠛⠛⠉⠉⠁⠀⠀⠀⠄⠀⠀⠀⠈⡜⠜⠀⠀⠀⠀⠀ +// ⢱⠡⠀⠀⠐⠐⠀⠄⠀⠀⠀⣠⣲⣦⡶⣶⡒⠀⢀⠬⠃⠈⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠑⠀⠈⠀⡄⠀⠀⠀⡀⢆⠀⢀⠀⠀⠀⠀⠀ +// ⢿⠐⠆⠀⡈⣁⠐⡐⠀⠀⣴⡾⠿⣷⣿⣿⣷⠇⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠠⢁⣒⠁⠀⠀⢀⠠⠈⢀⡌⠀⠀⠀⠀⠀ +//⠀⠼⡆⠓⠄⠐⡀⠀⠐⡨⢟⣟⠖⡃⠘⢿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢑⠗⡂⠀⠀⠀⠌⠆⠑⢹⠐⠀⡄⠀⠀⠰ +//⠀⠀⡲⠈⢉⢀⠀⢍⡆⠘⢔⣿⢮⡁⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠜⠡⠀⠀⠀⡀⠼⡈⠀⢸⠀⠀⡇⠀⠀⠀ +// ⠀⠆⠆⠀⠦⡀⠀⠈⢑⣦⠲⡉⡳⡀⠀⠄⠀⠀⠀⠀⠀⠰⠿⠗⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠂⠀⠀⠄⡬⢲⠦⠀⡌⢰⡄⢇⠀⠀⠆ +// ⢱⣄⣀⠨⠐⠀⢀⣀⠙⣂⠉⢰⢖⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡂⡊⠀⡠⠂⠊⠑⠈⠐⠢⠱⡪⢂⠸⠀⠀⢠ +// ⣆⢤⡮⠋⠔⠁⠀⠈⠤⠀⢊⠈⠢⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⣐⡙⠠⢪⠃⠀⠊⠀⠀⠀⠀⠀⢰⣕⡀⠀⠀⢠ +// ⡭⠋⠴⢁⠈⠘⠀⡀⠈⢖⠀⢢⠀⠀⢫⠀⠒⠀⢠⠄⠀⢀⢠⣴⢞⣡⣴⣶⣓⠀⢀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⡜⡍⠄⢠⢸ +//⠰⣄⢇⢟⠑⠃⢀⠀⠈⠐⠀⠀⠀⢀⠋⡼⠀⠨⢹⠂⠀⠠⠁⠄⠀⠀⢪⣿⣿⣿⣿⡑⠁⠀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡘⢊⢸⡞ +//⠀⣻⡂⡀⠄⠀⠀⠈⠀⠀⠀⠠⠀⠀⠈⠣⠾⢣⡀⠉⠄⠀⠀⠁⡄⠀⠀⠸⡟⣫⠂⢀⢔⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠽⠺⣇ +//⡄⢱⣧⠰⠌⣠⠀⠀⠠⠀⠃⠀⠀⢀⠀⠑⠀⠤⡃⡲⡒⠒⢀⣶⠞⠉⢁⡀⠱⣱⣞⠑⣻⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠳⣿ +//⠘⡼⣵⡄⠾⠟⠊⠁⠀⠀⠀⠀⠀⠀⠀⠁⢡⢡⠷⢞⣳⢀⣿⠛⠤⠀⡀⡠⠎⠝⠉⣼⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⣇ +//⠈⠱⡀⠒⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠙⠡⠘⠻⠀⠀⠀⠉⠀⠈⠀⠀⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢙ +//⠀⠡⢱⣀⢡⡀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠶⠀⠀⠀⠀⠀⠸⡧⠇⠀⠀⠀⠀⠀⠀⢠⣿⣃⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⢿⢣⠠⢐⠀⠀⠀⠀⠈⡀⠀⠀⠐⠀⠀⠀⠀⠀⠀⢻⡶⢅⠄⠀⠀⠀⠀⠀⠘⡃⠀⠀⠀⠀⠀⠁⠂⠄⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀ +//⠀⠀⢸⢌⠁⢇⠀⡀⠄⠐⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⢠⠡⢁⡀⡘⠀⠀⡀⠀⢀⠵⠪⠁⠀⠀⠉⠀⠀⠀⠐⠈⠐⠄⠀⠀⡐⠀⠀⠀⠀ +//⠀⢀⣾⢄⠀⠀⠑⠌⠀⠀⠀⠐⠁⠀⠀⠀⠀⠀⠀⠀⡄⡩⢈⠊⢢⡀⠐⠁⠠⠁⠠⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠘⢅⠀⠀⠀⠀ +//⠀⢨⠏⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡁⡀⢀⠀⢄⡖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠄⠀⠀⠢⠀⠀ +//⠀⢸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⡇⠈⠃⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⢀⠀⠁⠐⢀⠀⠁ +//⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠆⡄⠠⡀⠀⠀⠁⠠⠀⢀⠀⠠⠀⠀⠐⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⠂ +//⠀⠀⠀⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⠀⢈⢀⠄⠔⠠⠀⠐⠀⠈⠀⠀⠈⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠐ +//⠀⠀⠀⠘⡼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡂⠀⠀⠰⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⡚⠀⠀⠀ +//⠀⠀⠀⠀⢠⠹⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁⢨⠂⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡇⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⡀⠀⠈⠀⠀⠛⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⢀⠁⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⣿⠴⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠌⠀⠀⢠⡄⠀⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠄⠀⠀⠀⠀⢀ +//⠀⠀⠀⠐⢀⠉⠗⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠁⠀⠀⠀⠌⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠐⠀⠀⠀⠀⠔⠁ +//⠀⠀⠀⠀⠆⡀⢀⢚⡄⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠂⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⠀⠌⠁⠘ +//⠀⠀⠀⢠⣸⠃⡸⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⢠⠀⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠐⡀⢀⠖⠀⠀⠀ +//⠀⠀⠀⠈⠹⠀⠀⠀⠀⢃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⣠⣇⠠⠀⠂⠉ +//⠀⠀⠀⠀⡀⠀⡅⡆⠀⠀⢂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⢀⠔⠁⠀⠀⠀⠀⠀ +//⠀⠀⠀⢰⠁⠀⢣⠃⠀⠀⠀⢂⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠈⡀⠀⠀⠀⠀⠀⢀⠂⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠠⠀⠀⠓⠔⡀⠀⠀⠀⢂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠀⡐⠂⠀⣠⠞⠦⠀⢀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡰⠐⢱⡀⠄⢀⠀⠀⢂⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⢀⠞⠁⠀⠀⠀⠀⠀⠁⠀⠂⠀⠄ +//⠀⠀⠀⠀⠀⡧⠄⠡⢖⠐⡀⠀⡀⠀⠄⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠈⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠃⠃⠢⠀⠩⢆⠀⠄⠚⢤⣈⡄⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +import { Instance } from "cs_script/point_script"; + +const Ball = { + StartPos: null, + EndPos: null, + FVec: null, + RVec: null, + StartTime: 0 +}; + +const speed = 800; + +Instance.SetThink(Bounce); + +Instance.OnScriptInput("hyw", (pl) => { + const player = pl.activator; + if (!player || !player.IsValid()) return; + Ball.StartTime = Instance.GetGameTime(); + const ignoreButton = Instance.FindEntitiesByClass("func_button"); + Ball.StartPos = player.GetEyePosition(); + const Angle = player.GetEyeAngles(); + Angle.pitch = 0; + const Maker = Instance.FindEntityByName("ZM_C_O_D_Magic_Maker"); + Maker.Teleport({ position: Ball.StartPos, angles: Angle}); + Instance.EntFireAtName({name: "ZM_C_O_D_Magic_Maker", input: "ForceSpawn"}); + Ball.FVec = GetForward(Angle); + const EndP = VectorAdd(Ball.StartPos, VectorScale(Ball.FVec, 2400)); + const TraceResult = Instance.TraceSphere({ + radius: 20, + start: Ball.StartPos, + end: EndP, + ignoreEntity: ignoreButton, + ignorePlayers: true + }); + + if (!TraceResult.didHit) return; + let NVec = TraceResult.normal; + NVec = Whatisthis(NVec); + Ball.EndPos = TraceResult.end; + const TraceLenth = VectorDistance(Ball.StartPos, Ball.EndPos); + const TravelTime = TraceLenth / speed; + Ball.RVec = Reflect(Ball.FVec, NVec); + Instance.SetNextThink(Ball.StartTime + TravelTime); +}); + +function Bounce(){ + const Movelinear = Instance.FindEntityByName("ZM_C_O_D_Magic_Movelinear"); + if (!Movelinear) return; + Instance.EntFireAtName({ name: "ZM_C_O_D_Magic_Movelinear", input: "KillHierarchy"}); + Instance.EntFireAtName({ name: "ZM_C_O_D_Magic_Ext", input: "Trigger"}); + Ball.FVec = Ball.RVec; + Ball.StartPos = Ball.EndPos; + Ball.StartTime = Instance.GetGameTime(); + const Angle = ReturnAngles(Ball.RVec); + const Maker = Instance.FindEntityByName("ZM_C_O_D_Magic_Maker"); + Maker.Teleport({ position: Ball.StartPos, angles: Angle}); + Instance.EntFireAtName({name: "ZM_C_O_D_Magic_Maker", input: "ForceSpawn"}); + const EndP = VectorAdd(Ball.StartPos, VectorScale(Ball.FVec, 2400)); + const ignoreButton = Instance.FindEntitiesByClass("func_button"); + const TraceResult = Instance.TraceSphere({ + radius: 20, + start: Ball.StartPos, + end: EndP, + ignoreEntity: ignoreButton, + ignorePlayers: true + }); + if (!TraceResult.didHit) return; + let NVec = TraceResult.normal; + NVec = Whatisthis(NVec); + Ball.EndPos = TraceResult.end; + const TraceLenth = VectorDistance(Ball.StartPos, Ball.EndPos); + const TravelTime = TraceLenth / speed; + Ball.RVec = Reflect(Ball.FVec, NVec); + Instance.SetNextThink(Ball.StartTime + TravelTime); +} + +function GetForward(angles) { + const pitchRadians = (angles.pitch * Math.PI) / 180; + const yawRadians = (angles.yaw * Math.PI) / 180; + const hScale = Math.cos(pitchRadians); + return { + x: Math.cos(yawRadians) * hScale, + y: Math.sin(yawRadians) * hScale, + z: -Math.sin(pitchRadians), + }; +} + +function ReturnAngles(vec) { + const yawRadians = 180 * Math.atan2(vec.y, vec.x) / Math.PI; + const pitchRadians = -180 * Math.asin(vec.z) / Math.PI; + return { + pitch: pitchRadians, + yaw: yawRadians, + roll: 0 + }; +} + +function VectorAdd(vec1, vec2) { + return { + x: vec1.x + vec2.x, + y: vec1.y + vec2.y, + z: vec1.z + vec2.z + }; +} + +function VectorScale(vec, scale) { + return { + x: vec.x * scale, + y: vec.y * scale, + z: vec.z * scale + }; +} + +function VectorDistance(vec1, vec2) { + const dx = vec1.x - vec2.x; + const dy = vec1.y - vec2.y; + const dz = vec1.z - vec2.z; + return Math.sqrt(dx * dx + dy * dy + dz * dz); +} + +function Reflect(vec1, vec2) { + const k = vec1.x * vec2.x + vec1.y * vec2.y + vec1.z * vec2.z; + return { + x: vec1.x - 2 * k * vec2.x, + y: vec1.y - 2 * k * vec2.y, + z: vec1.z - 2 * k * vec2.z + } +} + +function Whatisthis(vec) { + const QAQ = Math.sqrt(vec.x * vec.x + vec.y * vec.y); + return { + x: vec.x / QAQ, + y: vec.y / QAQ, + z: 0 + }; +} \ No newline at end of file diff --git a/2001/ze_amdaporkeep/spawn_position.js b/2001/ze_amdaporkeep/spawn_position.js new file mode 100644 index 0000000..b683a9a --- /dev/null +++ b/2001/ze_amdaporkeep/spawn_position.js @@ -0,0 +1,221 @@ +//⠀⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⠀⠀⠀⠀⢀⢠⡀⠐⠂⠀⠀⠒⠒⠒⠠⠀⠠⠤⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⢠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⣠⠐⠌⠋⠑⣂⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⡄⠀⠀⠀⣰⡆⠀⠀⠀⠀⣠⠕⠏⠀⠀⠀⠀⠀⠀⠈⠉⠙⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⡀⠀⠀⠀⠀⠀⠀ +//⠅⠀⠀⠐⠀⠇⠀⠀⢀⠞⠁⡠⠄⢀⠄⣀⣠⣤⣶⣶⣶⣾⣿⣿⣷⣤⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢄⠀⠀⠀⠀ +//⠸⠀⠀⠀⠀⡀⠀⠐⠁⢠⠞⡁⣠⣶⣿⣿⣿⣿⣿⣿⣿⠿⠿⠿⣿⠿⠷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀ +// ⣆⢀⠀⢀⠀⠂⠀⢰⣯⣴⣿⣿⣿⣿⠿⠛⣉⠁⠀⢂⠀⠀⠀⠈⠃⠀⠈⢧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠃⡀⠀ +// ⠊⠳⣢⠁⠀⢠⣿⣿⣿⣿⠟⠉⠂⠀⠀⠠⠂⠀⠀⢂⠀⠀⠀⠀⠈⠂⠀⠱⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣀⠀⠀ +// ⠀⣰⠃⠀⠀⣾⣿⡿⢋⢿⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⢢⠀⠀⠀⠀⠀⠐⠀⠘⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠀⠐⣂⠀ +// ⢤⠍⠀⠀⢰⣿⡟⠀⠸⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣆⠀⠀⠀⠀⠀⠈⢀⠈⠄⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⢂ +//⠀⠁⡾⠢⠀⠀⣼⢇⠁⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⠋⡀⠀⠀⠀⠀⠀⠂⠘⡀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀ +//⢀⣸⡓⠀⠀⢀⡧⠈⠀⠀⠀⡄⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠁⠀⢀⣀⣀⠀⠀⠰⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⠀⠀⠀⠀⠀ +//⣵⣟⠄⠀⠀⢸⡁⠂⠀⠀⠀⢀⠠⠀⠁⠀⠀⠀⠀⠀⠐⠀⠀⠐⠃⠉⠀⠀⢄⠀⠀⠀⠀⠉⣥⠀⠀⠀⢀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀ +//⡧⣃⠈⠀⠰⢸⠁⠀⠀⠀⠘⠀⠂⠂⠠⠀⠀⠀⠀⠀⠀⠆⠀⠀⠀⠀⠀⠀⠀⠑⢄⠀⠀⠀⠊⡄⠀⠀⠈⠀⠀⠀⠀⠉⠀⠀⠀⠀⠀⠀ +//⡼⠙⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠌⠄⠀⠀⠀⠀⠀⠀⢰⠀⠀⢰⠀⠀⠀⠀⠀⠀⠀⠀⣐⠄⢱⠀⠀⠀⠀⠀⠀⠀⠈⠄⠀⠀⠀⠀⠀ +//⣏⠄⡇⠀⠀⠀⠀⠀⠀⢀⠔⠎⠀⡈⡌⠄⠀⠀⠀⠀⠆⢸⡄⡅⠸⠠⠔⡀⢅⣰⣤⣤⣾⣿⣷⣾⣤⢤⠀⠀⠀⠀⠀⢸⡀⠀⠀⠀⠀⠀ +//⠃⢀⠇⠀⠰⢠⡀⠀⠔⠁⠈⢠⠀⠠⠀⢊⠀⠀⠀⠀⠀⢸⠀⢀⠀⠐⡨⣶⢿⢿⣿⣿⣿⣿⣿⢻⡇⠀⠂⠄⠠⡀⣀⣸⡙⡀⠀⠀⠀⠀ +//⠉⡯⠀⠀⠀⠸⠁⠂⠀⠀⠀⡘⠤⠀⢆⠀⠱⡠⡀⠀⡀⠘⢠⠸⠄⠈⠊⠉⠀⠸⣽⣿⣿⣿⡿⠈⠇⠀⢈⠀⠀⠀⠀⠘⢇⠀⠀⠀⠀⠀ +//⠀⠀⠄⠀⠀⠀⡒⠠⠀⠀⠀⢀⠏⣀⠘⡂⠀⠈⠈⠦⠳⠸⠸⡤⠀⠀⠀⠀⠀⠀⠛⠛⠉⠉⠁⠀⠀⠀⠄⠀⠀⠀⠈⡜⠜⠀⠀⠀⠀⠀ +// ⢱⠡⠀⠀⠐⠐⠀⠄⠀⠀⠀⣠⣲⣦⡶⣶⡒⠀⢀⠬⠃⠈⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠑⠀⠈⠀⡄⠀⠀⠀⡀⢆⠀⢀⠀⠀⠀⠀⠀ +// ⢿⠐⠆⠀⡈⣁⠐⡐⠀⠀⣴⡾⠿⣷⣿⣿⣷⠇⠁⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠠⢁⣒⠁⠀⠀⢀⠠⠈⢀⡌⠀⠀⠀⠀⠀ +//⠀⠼⡆⠓⠄⠐⡀⠀⠐⡨⢟⣟⠖⡃⠘⢿⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢑⠗⡂⠀⠀⠀⠌⠆⠑⢹⠐⠀⡄⠀⠀⠰ +//⠀⠀⡲⠈⢉⢀⠀⢍⡆⠘⢔⣿⢮⡁⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠜⠡⠀⠀⠀⡀⠼⡈⠀⢸⠀⠀⡇⠀⠀⠀ +// ⠀⠆⠆⠀⠦⡀⠀⠈⢑⣦⠲⡉⡳⡀⠀⠄⠀⠀⠀⠀⠀⠰⠿⠗⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠂⠀⠀⠄⡬⢲⠦⠀⡌⢰⡄⢇⠀⠀⠆ +// ⢱⣄⣀⠨⠐⠀⢀⣀⠙⣂⠉⢰⢖⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡂⡊⠀⡠⠂⠊⠑⠈⠐⠢⠱⡪⢂⠸⠀⠀⢠ +// ⣆⢤⡮⠋⠔⠁⠀⠈⠤⠀⢊⠈⠢⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠄⠀⣐⡙⠠⢪⠃⠀⠊⠀⠀⠀⠀⠀⢰⣕⡀⠀⠀⢠ +// ⡭⠋⠴⢁⠈⠘⠀⡀⠈⢖⠀⢢⠀⠀⢫⠀⠒⠀⢠⠄⠀⢀⢠⣴⢞⣡⣴⣶⣓⠀⢀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⡜⡍⠄⢠⢸ +//⠰⣄⢇⢟⠑⠃⢀⠀⠈⠐⠀⠀⠀⢀⠋⡼⠀⠨⢹⠂⠀⠠⠁⠄⠀⠀⢪⣿⣿⣿⣿⡑⠁⠀⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠰⡘⢊⢸⡞ +//⠀⣻⡂⡀⠄⠀⠀⠈⠀⠀⠀⠠⠀⠀⠈⠣⠾⢣⡀⠉⠄⠀⠀⠁⡄⠀⠀⠸⡟⣫⠂⢀⢔⣾⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠽⠺⣇ +//⡄⢱⣧⠰⠌⣠⠀⠀⠠⠀⠃⠀⠀⢀⠀⠑⠀⠤⡃⡲⡒⠒⢀⣶⠞⠉⢁⡀⠱⣱⣞⠑⣻⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠳⣿ +//⠘⡼⣵⡄⠾⠟⠊⠁⠀⠀⠀⠀⠀⠀⠀⠁⢡⢡⠷⢞⣳⢀⣿⠛⠤⠀⡀⡠⠎⠝⠉⣼⣿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠊⣇ +//⠈⠱⡀⠒⡐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠙⠡⠘⠻⠀⠀⠀⠉⠀⠈⠀⠀⣿⡟⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢙ +//⠀⠡⢱⣀⢡⡀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠶⠀⠀⠀⠀⠀⠸⡧⠇⠀⠀⠀⠀⠀⠀⢠⣿⣃⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⢿⢣⠠⢐⠀⠀⠀⠀⠈⡀⠀⠀⠐⠀⠀⠀⠀⠀⠀⢻⡶⢅⠄⠀⠀⠀⠀⠀⠘⡃⠀⠀⠀⠀⠀⠁⠂⠄⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀ +//⠀⠀⢸⢌⠁⢇⠀⡀⠄⠐⠀⠀⠀⠈⠀⠀⠀⠀⠀⠀⢠⠡⢁⡀⡘⠀⠀⡀⠀⢀⠵⠪⠁⠀⠀⠉⠀⠀⠀⠐⠈⠐⠄⠀⠀⡐⠀⠀⠀⠀ +//⠀⢀⣾⢄⠀⠀⠑⠌⠀⠀⠀⠐⠁⠀⠀⠀⠀⠀⠀⠀⡄⡩⢈⠊⢢⡀⠐⠁⠠⠁⠠⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠈⠘⢅⠀⠀⠀⠀ +//⠀⢨⠏⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠣⡁⡀⢀⠀⢄⡖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠄⠀⠀⠢⠀⠀ +//⠀⢸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀⠀⡇⠈⠃⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⢀⠀⠁⠐⢀⠀⠁ +//⠀⠀⢷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠆⡄⠠⡀⠀⠀⠁⠠⠀⢀⠀⠠⠀⠀⠐⠁⠀⠁⠀⠀⠀⠀⠀⠀⠀⠂ +//⠀⠀⠀⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠅⠀⠀⠀⢈⢀⠄⠔⠠⠀⠐⠀⠈⠀⠀⠈⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠐ +//⠀⠀⠀⠘⡼⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡂⠀⠀⠰⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠑⠀⠀⠀⠀⠀⠀⠀⠀⠀⡚⠀⠀⠀ +//⠀⠀⠀⠀⢠⠹⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠁⢨⠂⠅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡇⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⡀⠀⠈⠀⠀⠛⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⠀⢀⠁⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⣿⠴⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠌⠀⠀⢠⡄⠀⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠄⠀⠀⠀⠀⢀ +//⠀⠀⠀⠐⢀⠉⠗⡃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠁⠀⠀⠀⠌⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠐⠀⠀⠀⠀⠔⠁ +//⠀⠀⠀⠀⠆⡀⢀⢚⡄⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠂⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⠀⠌⠁⠘ +//⠀⠀⠀⢠⣸⠃⡸⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⠀⠀⡄⠀⠀⠀⠀⢠⠀⠡⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠐⡀⢀⠖⠀⠀⠀ +//⠀⠀⠀⠈⠹⠀⠀⠀⠀⢃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⠀⣠⣇⠠⠀⠂⠉ +//⠀⠀⠀⠀⡀⠀⡅⡆⠀⠀⢂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠁⠀⢀⠔⠁⠀⠀⠀⠀⠀ +//⠀⠀⠀⢰⠁⠀⢣⠃⠀⠀⠀⢂⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⡀⠀⠀⠀⠈⡀⠀⠀⠀⠀⠀⢀⠂⠀⠀⡰⠁⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠠⠀⠀⠓⠔⡀⠀⠀⠀⢂⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡀⠀⠀⠀⡐⠂⠀⣠⠞⠦⠀⢀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠀⡰⠐⢱⡀⠄⢀⠀⠀⢂⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠐⠀⠀⠀⢀⠞⠁⠀⠀⠀⠀⠀⠁⠀⠂⠀⠄ +//⠀⠀⠀⠀⠀⡧⠄⠡⢖⠐⡀⠀⡀⠀⠄⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠈⢀⠔⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +//⠀⠀⠀⠀⠃⠃⠢⠀⠩⢆⠀⠄⠚⢤⣈⡄⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡠⣠⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +import { Instance } from "cs_script/point_script"; + +const R = 1150; +const r = 192; +let Scholar = null; +let Astrologer = null; +let FBoss = null; +let MBoss = null; + +Instance.OnScriptInput("Case01", () => { + Astrologer = Instance.FindEntityByName("Player_Astrologer"); + Scholar = Instance.FindEntityByName("Player_Scholar"); + MBoss = Instance.FindEntityByName("Boss_Physbox"); + FBoss = Instance.FindEntityByName("Boss2_Physbox"); + if (Astrologer) { + let APos = Astrologer.GetAbsOrigin(); + let AVec = RelativeDis(APos); + const ADis = Math.sqrt(AVec.x * AVec.x + AVec.y * AVec.y); + if (ADis > R) { + AVec.x = AVec.x * R / ADis; + AVec.y = AVec.y * R / ADis; + } + APos = ReturnPosM(AVec); + MBoss.Teleport({ position: APos }); + } + if (Scholar) { + let SPos = Scholar.GetAbsOrigin(); + let SVec = RelativeDis(SPos); + const SDis = Math.sqrt(SVec.x * SVec.x + SVec.y * SVec.y); + if (SDis > R) { + SVec.x = SVec.x * R / SDis; + SVec.y = SVec.y * R / SDis; + } + SPos = ReturnPosF(SVec); + FBoss.Teleport({ position: SPos }); + } +}); + +Instance.OnScriptInput("Case02", () => { + Astrologer = Instance.FindEntityByName("Player_Astrologer"); + Scholar = Instance.FindEntityByName("Player_Scholar"); + MBoss = Instance.FindEntityByName("Boss_Physbox"); + FBoss = Instance.FindEntityByName("Boss2_Physbox"); + if (Astrologer) { + let APos = Astrologer.GetAbsOrigin(); + let AVec = RelativeDis(APos); + const ADis = Math.sqrt(AVec.x * AVec.x + AVec.y * AVec.y); + if (ADis > R) { + AVec.x = AVec.x * R / ADis; + AVec.y = AVec.y * R / ADis; + } + APos = ReturnPosF(AVec); + FBoss.Teleport({ position: APos }); + } + if (Scholar) { + let SPos = Scholar.GetAbsOrigin(); + let SVec = RelativeDis(SPos); + const SDis = Math.sqrt(SVec.x * SVec.x + SVec.y * SVec.y); + if (SDis > R) { + SVec.x = SVec.x * R / SDis; + SVec.y = SVec.y * R / SDis; + } + SPos = ReturnPosM(SVec); + MBoss.Teleport({ position: SPos }); + } +}); + +Instance.SetThink(UpdatePosition); + +let TGpos = null; + +Instance.OnScriptInput("Omega_M_Shield", (pl) => { + + const TG = pl.activator; + if (!TG || !TG.IsValid()) return; + TGpos = TG.GetAbsOrigin(); + MBoss = Instance.FindEntityByName("Boss_Physbox"); + const Mpos = MBoss.GetAbsOrigin(); + const vector = VectorSubtract2d(TGpos, Mpos); + const Evec = Normalization2d(TGpos, Mpos); + const Dis = Math.sqrt(vector.x * vector.x + vector.y * vector.y ); + + if (Dis > r) { + const TGvec = TargetCalculate(vector, Evec); + TGpos = VectorAdd(Mpos, TGvec); + const Time = Instance.GetGameTime(); + Instance.EntFireAtName({name: "Omega_M_TP_Particle",input: "FireUser1"}); + Instance.SetNextThink(Time + 0.7); + } +}); + +Instance.OnScriptInput("Omega_Sagittarius_Arrow", () => { + + const DK = Instance.FindEntityByName("Player_Dark_Knight"); + if (DK && DK.IsValid() && DK.GetTeamNumber() == 3) + { + Instance.EntFireAtName({name: "Omega_Sagittarius_Arrow_Trigger",input: "Enable"}); + return; + } + Instance.EntFireAtName({name: "Omega_Sagittarius_Arrow_Trigger2",input: "Enable"}); + } +); + +function TargetCalculate(vec1, vec2) { + return { + x: vec1.x - vec2.x * r, + y: vec1.y - vec2.y * r, + z: 4 + }; +} + +function UpdatePosition() { + MBoss.Teleport({ position: TGpos }); + Instance.EntFireAtName({name: "Omega_M_TP_Particle2",input: "FireUser1"}); + return; +} + +function RelativeDis(vec) { + return { + x: vec.x - 9030.5, + y: vec.y + 6982.25, + z: vec.z + }; +} + +function ReturnPosF(vec) { + return { + x: vec.x + 9030.5, + y: vec.y - 6982.25, + z: -7520 + }; +} + +function ReturnPosM(vec) { + return { + x: vec.x + 9030.5, + y: vec.y - 6982.25, + z: -7485 + } +} + +function VectorSubtract2d(vec1, vec2) { + return { + x: vec1.x - vec2.x, + y: vec1.y - vec2.y, + z: 0 + } +} + +function VectorAdd(vec1, vec2) { + return { + x: vec1.x + vec2.x, + y: vec1.y + vec2.y, + z: vec1.z + vec2.z, + } +} + +function Normalization2d(vec1, vec2) { + const dx = vec1.x - vec2.x; + const dy = vec1.y - vec2.y; + const dis = Math.sqrt(dx * dx + dy * dy ); + return { + x: dx / dis, + y: dy / dis, + z: 0 + }; +} \ No newline at end of file