From 6898506b5135035d28b483a395a9f2b12c035767 Mon Sep 17 00:00:00 2001 From: bgkillas Date: Fri, 27 Sep 2024 16:51:35 -0400 Subject: [PATCH] fix some more issues with end fight, dont allow player collision/material sucker after game ends, fix a notpalyer error --- ewext/Cargo.lock | 45 +++++--------- ewext/Cargo.toml | 2 +- noita-proxy/Cargo.lock | 47 +++++---------- quant.ew/files/system/end_fight/end_fight.lua | 24 ++++++-- .../system/local_health/local_health.lua | 4 ++ .../system/notplayer_ai/notplayer_ai.lua | 60 ++----------------- .../system/player_tether/player_tether.lua | 58 +++++++++++++++++- 7 files changed, 115 insertions(+), 125 deletions(-) diff --git a/ewext/Cargo.lock b/ewext/Cargo.lock index d9fcad73..88e4ca02 100644 --- a/ewext/Cargo.lock +++ b/ewext/Cargo.lock @@ -4,41 +4,32 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", -] - -[[package]] -name = "cc" -version = "1.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ac837cdb5cb22e10a256099b4fc502b1dfe560cb282963a974d7abd80e476" -dependencies = [ - "shlex", + "windows-targets", ] [[package]] @@ -57,15 +48,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libloading" @@ -85,11 +76,11 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] @@ -107,12 +98,6 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "windows-targets" version = "0.52.6" diff --git a/ewext/Cargo.toml b/ewext/Cargo.toml index 57e28e5c..61ba6076 100644 --- a/ewext/Cargo.toml +++ b/ewext/Cargo.toml @@ -12,4 +12,4 @@ crate-type = ["cdylib"] [dependencies] libloading = "0.8.5" -backtrace = "0.3" +backtrace = "0.3.74" diff --git a/noita-proxy/Cargo.lock b/noita-proxy/Cargo.lock index 843299ba..29d5e1cb 100644 --- a/noita-proxy/Cargo.lock +++ b/noita-proxy/Cargo.lock @@ -37,12 +37,6 @@ dependencies = [ "gimli", ] -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "adler2" version = "2.0.0" @@ -191,9 +185,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -204,7 +198,7 @@ dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide 0.8.0", + "miniz_oxide", "object", "rustc-demangle", "windows-targets 0.52.6", @@ -442,9 +436,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.21" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "jobserver", "libc", @@ -1099,12 +1093,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", - "miniz_oxide 0.8.0", + "miniz_oxide", ] [[package]] @@ -1932,16 +1926,6 @@ dependencies = [ "unicase", ] -[[package]] -name = "miniz_oxide" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" -dependencies = [ - "adler", - "simd-adler32", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -1949,6 +1933,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -2378,15 +2363,15 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.4", + "miniz_oxide", ] [[package]] @@ -2855,9 +2840,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" [[package]] name = "rustls-platform-verifier" @@ -3245,9 +3230,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", diff --git a/quant.ew/files/system/end_fight/end_fight.lua b/quant.ew/files/system/end_fight/end_fight.lua index e235bf3d..443c5b24 100644 --- a/quant.ew/files/system/end_fight/end_fight.lua +++ b/quant.ew/files/system/end_fight/end_fight.lua @@ -11,6 +11,8 @@ ModTextFileSetContent("data/entities/animals/boss_centipede/ending/gold_effect.x ModTextFileSetContent("data/entities/animals/boss_centipede/ending/midas_sand.xml", "") ModTextFileSetContent("data/entities/animals/boss_centipede/ending/midas_chunks.xml", "") +local dont_effect = {} + local function teleport_random() SetRandomSeed(5, 5) local my_num = Random(1,100) @@ -49,6 +51,7 @@ end rpc.opts_everywhere() function rpc.try_kill(x, y) EntityLoad("mods/quant.ew/files/system/end_fight/gold_effect.xml", x, y ) + done = true end function end_fight.on_world_update() @@ -98,24 +101,33 @@ function end_fight.on_world_update() local x, y = EntityGetTransform(ctx.my_player.entity) rpc.try_kill(x, y) done = true + return elseif try_kill == -1 then try_kill = GameGetFrameNum() + 180 end else try_kill = -1 end - for _, player_data in pairs(ctx.players) do - local entity = player_data.entity - EntitySetComponentsWithTagEnabled(entity, "health_bar", false) - EntitySetComponentsWithTagEnabled(entity, "health_bar_back", false) - if EntityHasTag(entity, "ew_notplayer") then + end + for _, player_data in pairs(ctx.players) do + local entity = player_data.entity + EntitySetComponentsWithTagEnabled(entity, "health_bar", false) + EntitySetComponentsWithTagEnabled(entity, "health_bar_back", false) + if EntityHasTag(entity, "ew_notplayer") and not table.contains(dont_effect, entity) then + table.insert(dont_effect, entity) + async(function() + wait(2) for _, com in ipairs(EntityGetComponent(entity, "SpriteComponent") or {}) do EntitySetComponentIsEnabled(entity, com, false) end + local collision = EntityGetFirstComponentIncludingDisabled(entity, "PlayerCollisionComponent") + local suck = EntityGetFirstComponentIncludingDisabled(entity, "MaterialSuckerComponent") + EntitySetComponentIsEnabled(entity, suck, false) + EntitySetComponentIsEnabled(entity, collision, false) for _, child in ipairs(EntityGetAllChildren(entity) or {}) do EntityKill(child) end - end + end) end end end diff --git a/quant.ew/files/system/local_health/local_health.lua b/quant.ew/files/system/local_health/local_health.lua index e1f9f3f2..20b8a19b 100644 --- a/quant.ew/files/system/local_health/local_health.lua +++ b/quant.ew/files/system/local_health/local_health.lua @@ -309,6 +309,10 @@ function rpc.trigger_game_over(message) for _, com in ipairs(EntityGetComponent(entity, "SpriteComponent") or {}) do EntitySetComponentIsEnabled(entity, com, false) end + local suck = EntityGetFirstComponentIncludingDisabled(entity, "MaterialSuckerComponent") + local collision = EntityGetFirstComponentIncludingDisabled(entity, "PlayerCollisionComponent") + EntitySetComponentIsEnabled(entity, suck, false) + EntitySetComponentIsEnabled(entity, collision, false) for _, child in ipairs(EntityGetAllChildren(entity) or {}) do EntityKill(child) end diff --git a/quant.ew/files/system/notplayer_ai/notplayer_ai.lua b/quant.ew/files/system/notplayer_ai/notplayer_ai.lua index e9a67b80..59bfa1fd 100644 --- a/quant.ew/files/system/notplayer_ai/notplayer_ai.lua +++ b/quant.ew/files/system/notplayer_ai/notplayer_ai.lua @@ -1,5 +1,6 @@ local ctx = dofile_once("mods/quant.ew/files/core/ctx.lua") local wandfinder = dofile_once("mods/quant.ew/files/system/notplayer_ai/wandfinder.lua") +dofile_once("mods/quant.ew/files/system/player_tether/player_tether.lua") local MAX_RADIUS = 128*4 @@ -208,6 +209,9 @@ end local function has_ambrosia(entity) local com = EntityGetFirstComponentIncludingDisabled(entity, "StatusEffectDataComponent") + if com == nil then + return + end local stains = ComponentGetValue2(com, "stain_effects") return stains ~= nil and stains[24] ~= nil and stains[24] >= 0.15 end @@ -622,62 +626,6 @@ local function is_in_box(x1, x2, y1, y2, x, y) return x1 < x and x < x2 and y1 < y and y < y2 end -local function position_to_area_number(x, y) - if np.GetGameModeNr() == 2 then - if y < 1199 then - return 1 - elseif y < 3759 then - return 2 - elseif y < 6319 then - return 3 - elseif y < 10415 then - return 4 - elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then - return 5 - elseif is_in_box(5632, 7168, 14336, 15872, x, y) then - return 10 - else - return 6 - end - elseif tonumber(SessionNumbersGetValue("NEW_GAME_PLUS_COUNT")) > 0 then - if y < 1199 then - return 1 - elseif y < 2735 then - return 2 - elseif y < 6319 then - return 3 - elseif y < 10415 then - return 4 - elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then - return 5 - elseif is_in_box(5632, 7168, 14336, 15872, x, y) then - return 10 - else - return 6 - end - else - if y < 1199 then - return 1 - elseif y < 2735 then - return 2 - elseif y < 4783 then - return 3 - elseif y < 6319 then - return 4 - elseif y < 8367 then - return 5 - elseif y < 10415 then - return 6 - elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then - return 7 - elseif is_in_box(5632, 7168, 14336, 15872, x, y) then - return 10 - else - return 8 - end - end -end - local function teleport_to_area(area) async(function() if np.GetGameModeNr() == 2 then diff --git a/quant.ew/files/system/player_tether/player_tether.lua b/quant.ew/files/system/player_tether/player_tether.lua index c88c4a0a..15910db0 100644 --- a/quant.ew/files/system/player_tether/player_tether.lua +++ b/quant.ew/files/system/player_tether/player_tether.lua @@ -6,7 +6,63 @@ local tether_length_2 = tether_length + 128 local module = {} -local function is_in_box(x1, x2, y1, y2, x, y) +function position_to_area_number(x, y) + if np.GetGameModeNr() == 2 then + if y < 1199 then + return 1 + elseif y < 3759 then + return 2 + elseif y < 6319 then + return 3 + elseif y < 10415 then + return 4 + elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then + return 5 + elseif is_in_box(5632, 7168, 14336, 15872, x, y) then + return 10 + else + return 6 + end + elseif tonumber(SessionNumbersGetValue("NEW_GAME_PLUS_COUNT")) > 0 then + if y < 1199 then + return 1 + elseif y < 2735 then + return 2 + elseif y < 6319 then + return 3 + elseif y < 10415 then + return 4 + elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then + return 5 + elseif is_in_box(5632, 7168, 14336, 15872, x, y) then + return 10 + else + return 6 + end + else + if y < 1199 then + return 1 + elseif y < 2735 then + return 2 + elseif y < 4783 then + return 3 + elseif y < 6319 then + return 4 + elseif y < 8367 then + return 5 + elseif y < 10415 then + return 6 + elseif y < 12975 and (x < 2726 or x > 4135 or y < 12800) then + return 7 + elseif is_in_box(5632, 7168, 14336, 15872, x, y) then + return 10 + else + return 8 + end + end +end + +function is_in_box(x1, x2, y1, y2, x, y) return x1 < x and x < x2 and y1 < y and y < y2 end