diff --git a/2001/ze_atos/database.js b/2001/ze_atos/database.js
new file mode 100644
index 0000000..fca8b2e
--- /dev/null
+++ b/2001/ze_atos/database.js
@@ -0,0 +1,141 @@
+import { Instance, Entity } from "cs_script/point_script";
+/**
+ * 此脚本由皮皮猫233移植
+ * 2026/3/20
+ */
+let difficulty = 1;
+let g_level = 2;
+Instance.OnScriptInput("g_boat++;", () => g_boat ++);
+let g_boat = 0;
+let g_fish_start = 0;
+Instance.OnScriptInput("Init()", Init);
+function Init() {
+ g_fish_start = 0;
+}
+// function PlayerConnect() {}
+// function PlayerDisconnect() {}
+// function PlayerSay() {}
+// function DoorMoving() {}
+Instance.OnScriptInput("difficulty<-4;LoadTrip5Diff();", () => {
+ difficulty = 4;
+ LoadTrip5Diff();
+});
+function LoadTrip5Diff(flag = 1, d = 1) {
+ if (flag) {
+ for (let i = 2; i <= difficulty; i++) LoadTrip5Diff(0, i);
+ } else {
+ switch (d) {
+ case 2:
+ EntFire("trip5_diff2_*", "Toggle", "", 5);
+ break;
+ case 3:
+ EntFire("trip5_trigger_111", "Enable", "", 5);
+ EntFire("trip5_diff3_1", "Toggle", "", 5);
+ break;
+ case 4:
+ // EntFire("trip5_diff4_1", "AddOutput", "renderamt 255", 5);
+ EntFire("trip5_diff4_1", "Alpha", "255", 5);
+ EntFire("trip5_diff4_2", "Toggle", "", 5);
+ break;
+ case 5:
+ EntFire("trip5_diff5_*", "Toggle", "", 5);
+ break;
+ }
+ }
+}
+Instance.OnScriptInput("LoadLevel()", LoadLevel);
+function LoadLevel() {
+ EntFire("stage" + g_level + "_relay", "Trigger", "");
+ // EntFire("sky_sunny_1", "Trigger", "");
+ EntFire("sky_rainy", "Disable", "");
+ EntFire("sky_sunny_2", "Disable", "");
+ EntFire("sky_sunny_1", "Enable", "");
+ if (g_level == 2) {
+ // EntFire("sky_rainy", "Trigger", "", 5);
+ EntFire("sky_sunny_1", "Disable", "", 5);
+ EntFire("sky_rainy", "Enable", "", 5);
+ EntFire("rain", "Start");
+ EntFire("rain_post", "Enable");
+ }
+ if (g_level == 6) {
+ // EntFire("sky_sunny_2", "Trigger", "", 5);
+ EntFire("sky_sunny_1", "Disable", "", 5);
+ EntFire("sky_sunny_2", "Enable", "", 5);
+ }
+}
+Instance.OnScriptInput("Win(1)", () => Win(1));
+Instance.OnScriptInput("Win(2)", () => Win(2));
+Instance.OnScriptInput("Win(3)", () => Win(3));
+Instance.OnScriptInput("Win(4)", () => Win(4));
+Instance.OnScriptInput("Win(5)", () => Win(5));
+Instance.OnScriptInput("Win(6)", () => Win(6));
+/**
+ *
+ * @param {number} nextLevel
+ */
+function Win(nextLevel) {
+ g_level = nextLevel;
+ EntFire("cmd", "Command", "say ▲TRIP FINISHED▲");
+ EntFire("bgm_timer*", "Kill", "");
+ // EntFire("functions", "RunScriptCode", "PlayBGM(14)");
+ EntFire("functions", "RunScriptInput", "PlayBGM(14)");
+}
+Instance.OnScriptInput("JumpToLevel(1)", () => JumpToLevel(1));
+Instance.OnScriptInput("JumpToLevel(2)", () => JumpToLevel(2));
+Instance.OnScriptInput("JumpToLevel(3)", () => JumpToLevel(3));
+Instance.OnScriptInput("JumpToLevel(4)", () => JumpToLevel(4));
+Instance.OnScriptInput("JumpToLevel(5)", () => JumpToLevel(5));
+Instance.OnScriptInput("JumpToLevel(6)", () => JumpToLevel(6));
+/**
+ *
+ * @param {number} level
+ */
+function JumpToLevel(level) {
+ g_level = level;
+ EntFire("map_parameters", "FireWinCondition", "0");
+}
+Instance.OnScriptInput("CheckMagicAndEarth()", CheckMagicAndEarth);
+function CheckMagicAndEarth() {
+ if (g_level > 1 && g_level < 5) {
+ // EntFire("item_magic_template", "AddOutput", "origin 12448 10112 48", 2);
+ EntFire("item_magic_template", "KeyValue", "origin 12448 10112 48", 2);
+ EntFire("item_magic_template", "ForceSpawn", "", 2.1);
+ // EntFire("item_scorched_earth_template", "AddOutput", "origin 11904 10112 48", 2);
+ EntFire("item_scorched_earth_template", "KeyValue", "origin 11904 10112 48", 2);
+ EntFire("item_scorched_earth_template", "ForceSpawn", "", 2.1);
+ }
+}
+Instance.OnScriptInput("CheckLaser()", CheckLaser);
+function CheckLaser() {
+ // EntFire("scene4_laser1_*", "AddOutput", "renderamt 255");
+ EntFire("scene4_laser1_*", "Alpha", "255");
+ EntFire("scene4_bridge1_*", "Open", "");
+ EntFire("scene4_laser1_*", "Open", "");
+ // EntFire("env_sound_global", "PlaySound", "");
+ EntFire("env_sound_global", "StartSound", "");
+ EntFire("env_sound_global", "StopSound", "", 2.99);
+ EntFire("scene4_bridge2_*", "Open", "", 3);
+ // EntFire("scene4_laser2_*", "AddOutput", "renderamt 255", 3);
+ EntFire("scene4_laser2_*", "Alpha", "255", 3);
+ EntFire("scene4_laser2_*", "Open", "", 3);
+ // EntFire("env_sound_global", "PlaySound", "", 3);
+ EntFire("env_sound_global", "StartSound", "", 3);
+}
+Instance.OnScriptInput("CheckBoat()", CheckBoat);
+function CheckBoat() {
+ if (g_boat > 2) {
+ EntFire("scene4_boatwall", "Toggle", "");
+ }
+}
+
+/**
+ * 旧版csgo API支持
+ * @param {string} name
+ * @param {string} input
+ * @param {import("cs_script/point_script").InputValue} value
+ * @param {number|undefined} delay
+ * @param {Entity|undefined} activator
+ */
+function EntFire(name, input, value = undefined, delay = undefined, activator = undefined) {
+ Instance.EntFireAtName({ name, input, value, delay, activator });
+}
\ No newline at end of file
diff --git a/2001/ze_atos/function.js b/2001/ze_atos/function.js
new file mode 100644
index 0000000..fbef7e6
--- /dev/null
+++ b/2001/ze_atos/function.js
@@ -0,0 +1,2833 @@
+import { Instance, Entity, CSPlayerPawn, CSGearSlot, PointTemplate } from "cs_script/point_script";
+/**
+ * 此脚本由皮皮猫233移植
+ * 2026/5/7
+ */
+// let item_arc_lightning_pos1 = null;
+Instance.OnScriptInput("item_arc_lightning_pos1 <- null;", () => item_arc_lightning_pos1 = Vector(0, 0, 0));
+let item_arc_lightning_pos1 = Vector(0, 0, 0);
+// let item_arc_lightning_pos2 = null;
+Instance.OnScriptInput("item_arc_lightning_pos2 <- null;", () => item_arc_lightning_pos2 = Vector(0, 0, 0));
+let item_arc_lightning_pos2 = Vector(0, 0, 0);
+Instance.OnScriptInput("item_arc_lightning_target.clear();", () => item_arc_lightning_target.length = 0);
+let item_arc_lightning_target = /** @type {Entity[]} */ ([]);
+let item_arc_lightning_sound = new Array(5).fill(null);
+let ITEM_ARC_LIGHTNING_MAXCOUNT = 5;
+let ITEM_BLACK_KING_BAR_MAXCOUNT = 3;
+let ITEM_FIRESTORM_MAXCOUNT = 5;
+let item_firestorm_origins = new Array(9).fill(null);
+let bgm = new Array(23).fill(null)
+let itemText = [
+ "[Health]\nRestores human health 40HP/s.\n[Duration]: 5\n[Radius]: 100\n[CD]: 90",
+ "[Wall]\nCreates a wall in front of you.\n[Max Use]: 3\n[CD]: 3",
+ "[Arc Lightning]\nHurls a bolt of lightning that\nleaps through zombies.\n[Max Bounces]: 5\n[Damage per Lightning]: 19000\n[Radius]: 512\n[CD]: 50",
+ "[Thunder Fire]\nSlams the ground and create\n4 fire storms in front of you.\n[Damage per Storm]: 500\n[Radius]: 200\n[CD]: 80",
+ "[BKB]\nZombie immunity.\nDuration decreases with each use.\n[Duration]: 5/4/3\n[CD]: 40",
+ "[Fire Storm]\nCalls down waves of fire that damage\nenemy units in the target area.\n[Number of Waves]: 5\n[Damage per Wave]: 500\n[Radius]: 200\n[CD]: 80",
+ "[Cure]\nRestores zombie health 5000HP/s.\nMax health is 30000.\n[Radius]: 400\n[Duration]: 6\n[CD]: 30",
+ "[Poison Nova]\nA spreading ring of poison\nthat does damage over time.\n[Damage]: 600HP/s\n[Duration]: 8\n[Radius]: 400\n[CD]: 80",
+ "[Fire Ball]\nCreates a fire ball moving forward\nand becomes a huge fire at the end.\n[Damage]: 300HP/s\n[Duration]: 5\n[Radius]: 300\n[CD]: 85",
+ "[War Stomp]\nSlams the ground, stunning and\ndamaging nearby zombies.\n[Damage]: 500\n[Duration]: 2\n[Radius]: 256\n[CD]: 40",
+ "[Shock]\nSpawns a push wave around you.\n[Radius]: 200\n[CD]: 10",
+ "[Alacrity]\nIncreases your speed.\n[Duration]: 3\n[CD]: 30",
+ "[Black Hole]\nPulls human around you.\n[Duration]: 3\n[Radius]: 200\n[CD]: 45",
+ "[Gift]\nPuts a christmas gift and\nhurts zombies when touching it.\n[Max Use]: 5\n[Damage]: 500\n[Radius]: 100\n[CD]: 5",
+ "[Water]\nCreates a water area around you.\n[Radius]: 300\n[Damage]: 400HP/s\n[Duration]: 6\n[CD]: 90",
+ "[Rock Monster]\nA monster consists of rock.\n[Beam(E) CD: 30]",
+ "[Knight]\nHe has mysterious force.\n[Push(RMB) CD: 5]\n[Sun Ray(SAWD+LMB) CD: 90]",
+ "[Rasengan]\nLaunches a ball and attacks\nhuman when colliding.\n[Radius]: 300\n[Duration]: 1.5\n[CD]: 35",
+ "[Rasen Shuriken]\nNaruto Uzumaki's unique skill.\n[Max Use]: 1\n[Radius]: 800\n[Duration]: 10",
+ "[Lightning]\nCreate a lightning area around you.\n[Radius]: 400\n[Damage]: 200HP/s\n[Duration]: 5\n[CD]: 80",
+ "[Scorched Earth]\nCarpets the nearby earth in flames\nwhich damage zombies.\n[Radius]: 400\n[Damage]: 400HP/s\n[Duration]: 5\n[CD]: 90",
+ "[Magic]\nCreates a magic power area\naround you.\n[Radius]: 300\n[Damage]: 200HP/s\n[Duration]: 5\n[CD]: 90",
+ "[Mini BKB]\nZombie immunity.\n[Duration]: 3\n[CD]: 40",
+ "[Juggernaut]\nHe can sprint into battle and \nrecklessly devastate enemies in an \nimpenetrable flurry of blades.\n[Push(RMB) CD: 5]\n[Blade Fury(DASW+LMB) CD: 90]",
+ "[Lightning Shield]\nCreates 3 lightning shields\naround you and blast\nwhen ending.\n[Damage]: 200*3HP/s\n[Duration]: 30\n[CD]: 60",
+ "[Particle Ball]\nLaunches a ball and\ncreates skyfire when colliding.\n[Damage]: 28\n[CD]: 10",
+ "[Kirin]\nAn extremely powerful Lightning Release\ntechnique created by Sasuke Uchiha\n[Max Use]: 1\n[Radius]: 800\n[Cast Time]: 10"
+];
+let TOTALSTAGES = 5;
+let item_human_origin = new Array(8).fill(null);
+let item_human_light = new Array(8).fill(null);
+let item_zombie_origin = new Array(8).fill(null);
+let item_zombie_light = new Array(8).fill(null);
+let item_cure_count = 2;
+let item_alacrity_count = 2;
+let item_blackhole_count = 1;
+let item_rasengan_count = 3;
+let item_particle_gun_count = 0;
+let item_rock_monster_count = 0;
+let item_zombie_template = [
+ "item_cure_template",
+ "item_alacrity_template",
+ "item_blackhole_template",
+ "item_rasengan_template",
+ "item_rock_monster_template",
+ "item_particle_gun_template"
+];
+let item_human_template = [
+ "item_arc_lightning_template",
+ "item_thunder_fire_template",
+ "item_black_king_bar_template",
+ "item_firestorm_template",
+ "item_poison_nova_template",
+ "item_fireball_template",
+ "item_war_stomp_template",
+ "item_shock_template",
+ "item_gift_template",
+ "item_water_template",
+ "item_lightning_template",
+ "item_lightning_shield_template"
+];
+let wk_user = null;
+Instance.OnScriptInput("boss_hp_total+=468;", () => boss_hp_total += 468);
+Instance.OnScriptInput("boss_hp_total+=720;", () => boss_hp_total += 720);
+Instance.OnScriptInput("boss_hp_total-=1;", () => boss_hp_total -= 1);
+Instance.OnScriptInput("boss_hp_total-=30;", () => boss_hp_total -= 30);
+let boss_hp_total = 720;
+Instance.OnScriptInput("boss_hp_section=boss_hp_total/36;", () => boss_hp_section = boss_hp_total / 10);
+let boss_hp_section = 0;
+let sea_witch_ball_count = 0;
+let sea_witch_ball_wave = /** @type {string[]} */ ([]);
+let sea_witch_pos = 0;
+let sea_witch_flag = 0;
+let sea_witch_flag_2 = 0;
+let sea_witch_die = 0;
+let g_juggLaser = 0;
+Instance.OnScriptInput("g_fish_counts[8]++;", () => g_fish_counts[8]++);
+let g_fish_counts = new Array(10).fill(0);
+let g_delay = 1.5;
+let g_player = /** @type {Entity[]} */ ([]);
+let g_inflaser_counts = 0;
+let g_inflaser_sound = 0;
+let g_time_hud = 1;
+let g_inflaser_level = 0;
+Instance.OnActivate(Precache);
+function Precache() {
+ // bgm[0] = "ze_atos/bgm/start.mp3";
+ // bgm[1] = "ze_atos/bgm/level1_1.mp3";
+ // bgm[2] = "ze_atos/bgm/level2_1.mp3";
+ // bgm[3] = "ze_atos/bgm/level2_4.mp3";
+ // bgm[4] = "ze_atos/bgm/level3_1.mp3";
+ // bgm[5] = "ze_atos/bgm/level3_2.mp3";
+ // bgm[6] = "ze_atos/bgm/level4_1.mp3";
+ // bgm[7] = "ze_atos/bgm/level4_2.mp3";
+ // bgm[8] = "ze_atos/bgm/level4_3.mp3";
+ // bgm[9] = "ze_atos/bgm/level4_4.mp3";
+ // bgm[10] = "ze_atos/bgm/level4_5.mp3";
+ // bgm[11] = "ze_atos/bgm/level4_6.mp3";
+ // bgm[12] = "ze_atos/bgm/level2_3.mp3";
+ // bgm[13] = "ze_atos/bgm/level4_7.mp3";
+ // bgm[14] = "ze_atos/bgm/win.mp3";
+ // bgm[15] = "ze_atos/bgm/level6_1.mp3";
+ // bgm[16] = "ze_atos/bgm/level1_2.mp3";
+ // bgm[17] = "ze_atos/bgm/level2_2.mp3";
+ // bgm[18] = "ze_atos/bgm/level1_3.mp3";
+ // bgm[19] = "ze_atos/bgm/level6_2.mp3";
+ // bgm[20] = "ze_atos/bgm/level6_3.mp3";
+ // bgm[21] = "ze_atos/bgm/level6_4.mp3";
+ // bgm[22] = "ze_atos/bgm/level6_5.mp3";
+ bgm[0] = "start";
+ bgm[1] = "level1_1";
+ bgm[2] = "level2_1";
+ bgm[3] = "level2_4";
+ bgm[4] = "level3_1";
+ bgm[5] = "level3_2";
+ bgm[6] = "level4_1";
+ bgm[7] = "level4_2";
+ bgm[8] = "level4_3";
+ bgm[9] = "level4_4";
+ bgm[10] = "level4_5";
+ bgm[11] = "level4_6";
+ bgm[12] = "level2_3";
+ bgm[13] = "level4_7";
+ bgm[14] = "win";
+ bgm[15] = "level6_1";
+ bgm[16] = "level1_2";
+ bgm[17] = "level2_2";
+ bgm[18] = "level1_3";
+ bgm[19] = "level6_2";
+ bgm[20] = "level6_3";
+ bgm[21] = "level6_4";
+ bgm[22] = "level6_5";
+ // ----------------- 预缓存(已失效) -----------------
+
+ // for (let i = 0; i < bgm.length; i++) {
+ // self.PrecacheSoundScript(bgm[i]);
+ // }
+ // self.PrecacheSoundScript("ze_atos/env/water_splash3.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/sea_witch_wave.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/sea_witch_ball.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/sea_witch_round.mp3");
+ // self.PrecacheSoundScript("ambient/weather/thunder2.wav");
+ // self.PrecacheSoundScript("ze_atos/env/dominating.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/unstoppable.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/godlike.mp3");
+ // self.PrecacheSoundScript("ze_atos/env/holyshit.mp3");
+ for (let i = 0; i < item_arc_lightning_sound.length; i++) {
+ item_arc_lightning_sound[i] = "item_arc_lightning_" + (i + 1).toString() + ".mp3";
+ }
+ for (let i = 0; i < item_human_origin.length; i++) {
+ item_human_origin[i] = (14680 + i * 96).toString() + " 15152 376";
+ item_zombie_origin[i] = (14680 + i * 96).toString() + " 14736 376";
+ item_human_light[i] = "item_human_light_" + (i + 1).toString();
+ item_zombie_light[i] = "item_zombie_light_" + (i + 1).toString();
+ }
+ // self.PrecacheModel("models/atos/lizard/lizard.mdl");
+ // self.PrecacheModel("models/atos/sea_witch/sea_witch.mdl");
+
+ // ----------------- 实体创建移植(已修复) -----------------
+
+ // let command = Entities.CreateByClassname("point_servercommand");
+ // command.__KeyValueFromString("targetname", "cmd");
+ // command = Entities.CreateByClassname("point_clientcommand");
+ // command.__KeyValueFromString("targetname", "client");
+ // let stripper = Entities.CreateByClassname("player_weaponstrip");
+ // stripper.__KeyValueFromString("targetname", "stripper");
+ // let speed = Entities.CreateByClassname("player_speedmod");
+ // speed.__KeyValueFromString("targetname", "speed");
+ // let global_hud = Entities.CreateByClassname("env_message");
+ // global_hud.__KeyValueFromString("targetname", "global_hud");
+ // global_hud.__KeyValueFromInt("spawnflags", 2);
+
+ // ----------------- 文本输出移植 -----------------
+
+ // SetGameText("global_text", "124 252 0", 0.65, -1, 0, 0, 2, 0, 1, 1);
+ // SetGameText("bosstime_text", "255 255 255", 0.1, -1, 0, 0, 2, 0, 1, 3);
+ // SetGameText("stage_text", "255 53 53", 0.85, -1, 0, 0, 2, 0, 1, 4);
+
+ // -----------------------------------------------
+ EntFire("cmd", "Command", "say ▲MAP BY 酸奶▲", 3);
+ EntFire("cmd", "Command", "say ▲PUT ON YOUR HEADPHONE AND ENJOY TRIPS▲", 7);
+ // EntFire("player", "AddOutput", "targetname hero", 2);
+ EntFire("player", "KeyValue", "targetname hero", 2);
+ EntFire("bgm_start_timer", "Enable", "", 3);
+ EntFire("bgm_start_timer", "FireTimer", "", 3.01);
+ // ----------------- 摄像机移植 -----------------
+
+ // EntFire("viewcontrol", "Disable", "");
+ // EntFire("viewtarget", "Kill", "");
+
+ // ---------------------------------------------
+ EntFire("vc*", "Disable", "");
+ EntFire("vt*", "Kill", "");
+ // 已失效
+ // EntFire("functions", "RunScriptCode", "ResetWK()", 2);
+ EntFire("stage_text_timer", "Enable", "", 4);
+ EntFire("start_hurt", "Enable", "", 45);
+ // if (ScriptIsWarmupPeriod()) {
+ if (Instance.IsWarmupPeriod()) {
+ EntFire("cmd", "Command", "mp_roundtime 60");
+ // EntFire("cmd", "Command", "sm_cvar mp_roundtime 60");
+ };
+ let target = Entities.FindByName(null, "scan_1");
+ // if (target != null) {
+ if (target && target.IsValid()) {
+ // 未找到该实体
+ // EntFire("listener", "RunScriptCode", "SetPlayerHandle()", 2);
+ };
+ target = Entities.FindByName(null, "rasen_shuriken_target_1");
+ // if (target != null) {
+ if (target && target.IsValid()) {
+ EntFire("scene1_counter_1", "Kill", "");
+ EntFire("scene1_button_11", "Lock", "", 2);
+ EntFire("scene1_button_12", "Lock", "", 2);
+ EntFire("scene1_button_13", "Lock", "", 2);
+ // EntFire("functions", "RunScriptCode", "PushUltimate()", 2);
+ EntFire("functions", "RunScriptInput", "PushUltimate()", 2);
+ };
+ // EntFire("database", "RunScriptCode", "CheckMagicAndEarth()", 2);
+ EntFire("database", "RunScriptInput", "CheckMagicAndEarth()", 2);
+ for (let i = 0; i < 32; i++) {
+ if (i < 8) {
+ sea_witch_ball_wave.push((9294 + i * 134) + " -11325 9257");
+ } else if (i > 7 && i < 16) {
+ sea_witch_ball_wave.push("8763 " + (-12778 + (i % 8) * 134) + " 9257");
+ } else if (i > 15 && i < 24) {
+ sea_witch_ball_wave.push((10232 - (i % 16) * 134) + " -13309 9257");
+ } else {
+ sea_witch_ball_wave.push("10763 " + (-11840 - (i % 24) * 134) + " 9257");
+ }
+ }
+}
+// ----------------- 文本输出移植 -----------------
+
+// function SetGameText(name, color, y, x, fadein, fadeout, holdtime, fxtime, spawnflags, channel) {
+// let gameText = Entities.CreateByClassname("game_text");
+// gameText.__KeyValueFromString("targetname", name);
+// gameText.__KeyValueFromString("color", color);
+// gameText.__KeyValueFromFloat("y", y);
+// gameText.__KeyValueFromFloat("x", x);
+// gameText.__KeyValueFromFloat("fadein", fadein);
+// gameText.__KeyValueFromFloat("fadeout", fadeout);
+// gameText.__KeyValueFromFloat("holdtime", holdtime);
+// gameText.__KeyValueFromFloat("fxtime", fxtime);
+// gameText.__KeyValueFromInt("spawnflags", spawnflags);
+// gameText.__KeyValueFromInt("channel", channel);
+// return gameText;
+// }
+
+// -----------------------------------------------
+
+// IncludeScript("ze_atos/init.nut");
+Instance.OnScriptInput("PlayBGM(0)", () => PlayBGM(0));
+Instance.OnScriptInput("PlayBGM(1)", () => PlayBGM(1));
+Instance.OnScriptInput("PlayBGM(2)", () => PlayBGM(2));
+Instance.OnScriptInput("PlayBGM(3)", () => PlayBGM(3));
+Instance.OnScriptInput("PlayBGM(4)", () => PlayBGM(4));
+Instance.OnScriptInput("PlayBGM(5)", () => PlayBGM(5));
+Instance.OnScriptInput("PlayBGM(6)", () => PlayBGM(6));
+Instance.OnScriptInput("PlayBGM(7)", () => PlayBGM(7));
+Instance.OnScriptInput("PlayBGM(8)", () => PlayBGM(8));
+Instance.OnScriptInput("PlayBGM(9)", () => PlayBGM(9));
+Instance.OnScriptInput("PlayBGM(10)", () => PlayBGM(10));
+Instance.OnScriptInput("PlayBGM(11)", () => PlayBGM(11));
+Instance.OnScriptInput("PlayBGM(12)", () => PlayBGM(12));
+Instance.OnScriptInput("PlayBGM(13)", () => PlayBGM(13));
+Instance.OnScriptInput("PlayBGM(14)", () => PlayBGM(14));
+Instance.OnScriptInput("PlayBGM(15)", () => PlayBGM(15));
+Instance.OnScriptInput("PlayBGM(16)", () => PlayBGM(16));
+Instance.OnScriptInput("PlayBGM(17)", () => PlayBGM(17));
+Instance.OnScriptInput("PlayBGM(18)", () => PlayBGM(18));
+Instance.OnScriptInput("PlayBGM(19)", () => PlayBGM(19));
+Instance.OnScriptInput("PlayBGM(20)", () => PlayBGM(20));
+Instance.OnScriptInput("PlayBGM(21)", () => PlayBGM(21));
+Instance.OnScriptInput("PlayBGM(22)", () => PlayBGM(22));
+/**
+ *
+ * @param {number} index
+ */
+function PlayBGM(index) {
+ // let message = "message " + bgm[index];
+ let message = bgm[index];
+ EntFire("bgm", "StopSound", "");
+ // EntFire("bgm", "AddOutput", message, 0.01);
+ EntFire("bgm", "SetSoundEventName", message, 0.01);
+ // EntFire("bgm", "PlaySound", "", 0.02);
+ EntFire("bgm", "StartSound", "", 0.02);
+}
+Instance.OnScriptInput("SpawnButton()", SpawnButton);
+function SpawnButton() {
+ let num = RandomInt(1, 1000);
+ let origin = null;
+ switch (num % 8) {
+ case 0:
+ origin = "-9253 8401 1320";
+ break;
+ case 1:
+ origin = "-8997 8401 1320";
+ break;
+ case 2:
+ origin = "-8741 8401 1320";
+ break;
+ case 3:
+ origin = "-8485 8401 1320";
+ break;
+ case 4:
+ origin = "-8229 8401 1320";
+ break;
+ case 5:
+ origin = "-7973 8401 1320";
+ break;
+ case 6:
+ origin = "-7717 8401 1320";
+ break;
+ case 7:
+ origin = "-7461 8401 1320";
+ break;
+ }
+ origin = "origin " + origin;
+ // EntFire("scene1_temp_1", "AddOutput", origin);
+ EntFire("scene1_temp_1", "KeyValue", origin);
+ EntFire("scene1_temp_1", "ForceSpawn", "", 0.1);
+}
+Instance.OnScriptInput("DisplayText(0)", () => DisplayText(0));
+/**
+ *
+ * @param {number} time
+ */
+function DisplayText(time) {
+ // -------------------------------- gametext待修复 ----------------------------------------------------
+ // EntFire("global_text", "Display", "", time + 0.01);
+ // EntFire("global_text", "Display", "", time + 1.01);
+ // EntFire("global_text", "Display", "", time + 2.01);
+ // ----------------------------------------------------------------------------------------------------
+}
+Instance.OnScriptInput("ShowTimeHUD(10)", () => ShowTimeHUD(10));
+Instance.OnScriptInput("ShowTimeHUD(15)", () => ShowTimeHUD(15));
+Instance.OnScriptInput("ShowTimeHUD(20)", () => ShowTimeHUD(20));
+Instance.OnScriptInput("ShowTimeHUD(25)", () => ShowTimeHUD(25));
+Instance.OnScriptInput("ShowTimeHUD(30)", () => ShowTimeHUD(30));
+Instance.OnScriptInput("ShowTimeHUD(35)", () => ShowTimeHUD(35));
+Instance.OnScriptInput("ShowTimeHUD(40)", () => ShowTimeHUD(40));
+Instance.OnScriptInput("ShowTimeHUD(60)", () => ShowTimeHUD(60));
+/**
+ *
+ * @param {number} second
+ */
+function ShowTimeHUD(second) {
+ let message, j = null;
+ for (let i = 0; i <= second; i++) {
+ j = second - i;
+ if (g_time_hud && j > 0) {
+ if(j > 1) message = j.toString() + " SECONDS LEFT";
+ else message = j.toString() + " SECOND LEFT";
+ } else {
+ if (j > 15) {
+ message = "" + j.toString() + " SECONDS LEFT";
+ } else if (j > 5 && j <= 15) {
+ message = "" + j.toString() + " SECONDS LEFT";
+ } else if (j > 1 && j <= 5) {
+ message = "" + j.toString() + " SECONDS LEFT";
+ }
+ else if (j == 1) {
+ message = "" + j.toString() + " SECOND LEFT";
+ }
+ };
+ // EntFire("global_hud", "AddOutput", message, i);
+ EntFire("global_hud", "SetMessage", message, i);
+ // EntFire("global_hud", "ShowMessage", "", i + 0.01);
+ EntFire("global_hud_zone", "CountPlayersInZone", "", i + 0.01);
+ }
+}
+Instance.OnScriptInput("EnableZMTeleport(1)", () => EnableZMTeleport(1));
+Instance.OnScriptInput("EnableZMTeleport(2)", () => EnableZMTeleport(2));
+Instance.OnScriptInput("EnableZMTeleport(3)", () => EnableZMTeleport(3));
+Instance.OnScriptInput("EnableZMTeleport(4)", () => EnableZMTeleport(4));
+Instance.OnScriptInput("EnableZMTeleport(5)", () => EnableZMTeleport(5));
+Instance.OnScriptInput("EnableZMTeleport(6)", () => EnableZMTeleport(6));
+Instance.OnScriptInput("EnableZMTeleport(7)", () => EnableZMTeleport(7));
+Instance.OnScriptInput("EnableZMTeleport(8)", () => EnableZMTeleport(8));
+Instance.OnScriptInput("EnableZMTeleport(9)", () => EnableZMTeleport(9));
+Instance.OnScriptInput("EnableZMTeleport(10)", () => EnableZMTeleport(10));
+Instance.OnScriptInput("EnableZMTeleport(11)", () => EnableZMTeleport(11));
+Instance.OnScriptInput("EnableZMTeleport(12)", () => EnableZMTeleport(12));
+Instance.OnScriptInput("EnableZMTeleport(13)", () => EnableZMTeleport(13));
+Instance.OnScriptInput("EnableZMTeleport(14)", () => EnableZMTeleport(14));
+Instance.OnScriptInput("EnableZMTeleport(15)", () => EnableZMTeleport(15));
+Instance.OnScriptInput("EnableZMTeleport(16)", () => EnableZMTeleport(16));
+Instance.OnScriptInput("EnableZMTeleport(17)", () => EnableZMTeleport(17));
+Instance.OnScriptInput("EnableZMTeleport(18)", () => EnableZMTeleport(18));
+Instance.OnScriptInput("EnableZMTeleport(19)", () => EnableZMTeleport(19));
+Instance.OnScriptInput("EnableZMTeleport(20)", () => EnableZMTeleport(20));
+Instance.OnScriptInput("EnableZMTeleport(21)", () => EnableZMTeleport(21));
+Instance.OnScriptInput("EnableZMTeleport(22)", () => EnableZMTeleport(22));
+Instance.OnScriptInput("EnableZMTeleport(23)", () => EnableZMTeleport(23));
+Instance.OnScriptInput("EnableZMTeleport(24)", () => EnableZMTeleport(24));
+Instance.OnScriptInput("EnableZMTeleport(25)", () => EnableZMTeleport(25));
+Instance.OnScriptInput("EnableZMTeleport(26)", () => EnableZMTeleport(26));
+Instance.OnScriptInput("EnableZMTeleport(27)", () => EnableZMTeleport(27));
+Instance.OnScriptInput("EnableZMTeleport(28)", () => EnableZMTeleport(28));
+Instance.OnScriptInput("EnableZMTeleport(29)", () => EnableZMTeleport(29));
+Instance.OnScriptInput("EnableZMTeleport(30)", () => EnableZMTeleport(30));
+Instance.OnScriptInput("EnableZMTeleport(31)", () => EnableZMTeleport(31));
+Instance.OnScriptInput("EnableZMTeleport(32)", () => EnableZMTeleport(32));
+Instance.OnScriptInput("EnableZMTeleport(33)", () => EnableZMTeleport(33));
+Instance.OnScriptInput("EnableZMTeleport(34)", () => EnableZMTeleport(34));
+Instance.OnScriptInput("EnableZMTeleport(35)", () => EnableZMTeleport(35));
+Instance.OnScriptInput("EnableZMTeleport(36)", () => EnableZMTeleport(36));
+/**
+ *
+ * @param {number} index
+ */
+function EnableZMTeleport(index) {
+ let num = RandomInt(0, 8);
+ let teleportName = "null";
+ switch (index) {
+ case 1:
+ teleportName = "scene1_teleport_1";
+ break;
+ case 2:
+ teleportName = "scene1_teleport_2";
+ break;
+ case 3:
+ teleportName = "scene1_teleport_4";
+ break;
+ case 4:
+ teleportName = "scene1_teleport_5";
+ break;
+ case 5:
+ teleportName = "scene1_teleport_6";
+ break;
+ case 6:
+ teleportName = "scene1_teleport_8";
+ break;
+ case 7:
+ teleportName = "scene1_teleport_9";
+ break;
+ case 8:
+ teleportName = "scene1_teleport_10";
+ break;
+ case 9:
+ teleportName = "scene1_teleport_12";
+ break;
+ case 10:
+ teleportName = "scene2_teleport_1";
+ break;
+ case 11:
+ teleportName = "scene2_teleport_2";
+ break;
+ case 12:
+ teleportName = "scene2_teleport_3";
+ break;
+ case 13:
+ teleportName = "scene3_teleport_1";
+ break;
+ case 14:
+ teleportName = "scene3_teleport_2";
+ break;
+ case 15:
+ teleportName = "scene3_teleport_3";
+ break;
+ case 16:
+ teleportName = "scene3_teleport_4";
+ break;
+ case 17:
+ teleportName = "scene3_teleport_5";
+ break;
+ case 18:
+ teleportName = "scene3_teleport_6";
+ break;
+ case 19:
+ teleportName = "scene3_teleport_8";
+ break;
+ case 20:
+ teleportName = "scene3_teleport_10";
+ break;
+ case 21:
+ teleportName = "scene3_teleport_11";
+ break;
+ case 22:
+ teleportName = "scene3_teleport_12";
+ break;
+ case 23:
+ teleportName = "scene2_teleport_4";
+ break;
+ case 24:
+ teleportName = "scene4_teleport_1";
+ break;
+ case 25:
+ teleportName = "scene4_teleport_2";
+ break;
+ case 26:
+ teleportName = "scene4_teleport_3";
+ break;
+ case 27:
+ teleportName = "scene4_teleport_4";
+ EntFire("scene4_break_extra_1", "Break", "", num + 5);
+ EntFire("scene4_wall_extra_1", "Kill", "", num + 5);
+ break;
+ case 28:
+ teleportName = "scene4_teleport_5";
+ break;
+ case 29:
+ teleportName = "scene4_teleport_6";
+ break;
+ case 30:
+ teleportName = "scene4_teleport_8";
+ break;
+ case 31:
+ teleportName = "scene4_teleport_9";
+ break;
+ case 32:
+ teleportName = "scene4_teleport_10";
+ break;
+ case 33:
+ teleportName = "scene4_teleport_11";
+ break;
+ case 34:
+ teleportName = "scene4_teleport_12";
+ break;
+ case 35:
+ teleportName = "scene3_teleport_14";
+ break;
+ case 36:
+ teleportName = "scene3_teleport_0";
+ break;
+ }
+ if (index === 1) {
+ EntFire("start_teleport_all", "Enable", "", num);
+ };
+ EntFire(teleportName, "Enable", "", num);
+}
+// 疑似未使用
+// function KillStageEntities(currentStage) {
+// let stages = [];
+// for (let i = 1; i <= TOTALSTAGES; i++) {
+// let temp = "kill_stage" + i.toString();
+// stages.append(temp);
+// }
+// for (let i = 0; i < stages.length; i++) {
+// let j = i + 1;
+// if (j != currentStage) {
+// EntFire(stages[i], "Trigger", "");
+// }
+// }
+// }
+// function SetStageBrush(currentStage) {
+// let brushes = [];
+// for (let i = 1; i <= TOTALSTAGES; i++) {
+// let temp = "stage" + i.toString() + "_brush";
+// brushes.append(temp);
+// }
+// for (let i = 0; i < brushes.length; i++) {
+// let j = i + 1;
+// if (j != (currentStage % 5) + 1) {
+// EntFire(brushes[i], "Enable", "");
+// } else {
+// EntFire(brushes[i], "Disable", "");
+// }
+// }
+// if (currentStage == 4) {
+// EntFire("cmd", "Command", "sm_g_cv_Money 1000");
+// EntFire("cmd", "Command", "sm_he_limit 1");
+// EntFire("cmd", "Command", "sm_smoke_limit 1");
+// EntFire("cmd", "Command", "sm_molotov_limit 0");
+// EntFire("cmd", "Command", "sm_taggrenade_limit 0");
+// EntFire("cmd", "Command", "sm_zeusweapons_decoy 0");
+// EntFire("cmd", "Command", "zr_class_modify zombies health 10000");
+// EntFire("cmd", "Command", "sm_cvar zr_class_modify zombies health 10000");
+// } else {
+// SetCvar();
+// }
+// }
+Instance.OnScriptInput("SetButtons(10)", () => SetButtons(10));
+Instance.OnScriptInput("SetButtons(15)", () => SetButtons(15));
+Instance.OnScriptInput("SetButtons(20)", () => SetButtons(20));
+Instance.OnScriptInput("SetButtons(25)", () => SetButtons(25));
+Instance.OnScriptInput("SetButtons(30)", () => SetButtons(30));
+Instance.OnScriptInput("SetButtons(35)", () => SetButtons(35));
+Instance.OnScriptInput("SetButtons(40)", () => SetButtons(40));
+Instance.OnScriptInput("SetButtons(45)", () => SetButtons(45));
+Instance.OnScriptInput("SetButtons(60)", () => SetButtons(60));
+Instance.OnScriptInput("SetButtons(180)", () => SetButtons(180));
+/**
+ *
+ * @param {number} second
+ */
+function SetButtons(second) {
+ let cmd = "▲HOLD FOR " + second.toString() + "S▲";
+ let fiveLeft = second - 5;
+ // ----------------------------------------- gametext待修复 -----------------------------------------
+ // EntFire("global_text", "SetText", cmd);
+ // -------------------------------------------------------------------------------------------------
+ cmd = "say " + cmd;
+ EntFire("cmd", "Command", cmd);
+ ShowTimeHUD(second);
+ // ----------------------------------------- gametext待修复 -----------------------------------------
+ // DisplayText(0);
+ // -------------------------------------------------------------------------------------------------
+ EntFire("cmd", "Command", "say ▲5 SECONDS LEFT▲", fiveLeft);
+}
+Instance.OnScriptInput("SetScene2Break()", SetScene2Break);
+function SetScene2Break() {
+ for (let i = 1; i <= 3; i = i + 2) {
+ let temp = "scene2_break_";
+ let num = RandomInt(0, 1000);
+ switch (num % 2) {
+ case 0:
+ temp = temp + i.toString();
+ break;
+ case 1:
+ temp = temp + ((i + 1).toString());
+ break;
+ }
+ EntFire(temp, "Break", "");
+ }
+}
+Instance.OnScriptInput("SpawnScene1Wall()", SpawnScene1Wall);
+function SpawnScene1Wall() {
+ let origin = "origin ";
+ let num = RandomInt(0, 1000);
+ switch (num % 3) {
+ case 0:
+ origin += "-8770 5760 1688";
+ break;
+ case 1:
+ origin += "-7362 8622 1656";
+ break;
+ case 2:
+ origin += "-7362 8820 1656";
+ break;
+ }
+ // EntFire("item_wall_weapon_template", "AddOutput", origin);
+ EntFire("item_wall_weapon_template", "KeyValue", origin);
+ EntFire("item_wall_weapon_template", "ForceSpawn", "", 0.01);
+}
+Instance.OnScriptInput("SpawnScene3Laser()", SpawnScene3Laser);
+function SpawnScene3Laser() {
+ g_juggLaser += 1;
+ if (g_juggLaser < 3) {
+ if (RandomInt(0, 1)) {
+ for (let i = 1; i < 5; i++) {
+ SetScene3LaserPath2(i);
+ }
+ };
+ EntFire("scene3_laser1_train", "StartForward", "", 0.01);
+ EntFire("scene3_laser1_sound", "PlaySound", "", 0.01);
+ return;
+ };
+ for (let i = 1; i < 6; i++) {
+ if (i == 5) {
+ EntFire("scene3_laser1_train", "StartForward", "", 0.01);
+ EntFire("scene3_laser1_sound", "PlaySound", "", 0.01);
+ } else {
+ SetScene3LaserPath(i);
+ }
+ }
+}
+/**
+ *
+ * @param {number} i
+ */
+function SetScene3LaserPath(i) {
+ let name = "scene3_laser1_path_" + i.toString();
+ let path = Entities.FindByName(null, name);
+ // if (path != null) {
+ if (path && path.IsValid()) {
+ // let origin = path.GetOrigin();
+ let origin = path.GetAbsOrigin();
+ let num = RandomInt(0, 100);
+ if (num % 2 != 0) {
+ origin = Vector(origin.x, origin.y, origin.z + 48);
+ // path.SetOrigin(origin);
+ path.Teleport({ position: origin });
+ }
+ }
+}
+/**
+ *
+ * @param {number} i
+ */
+function SetScene3LaserPath2(i) {
+ let name = "scene3_laser1_path_" + i.toString();
+ let path = Entities.FindByName(null, name);
+ // if (path != null) {
+ if (path && path.IsValid()) {
+ // let origin = path.GetOrigin();
+ let origin = path.GetAbsOrigin();
+ origin = Vector(origin.x, origin.y, origin.z + 48);
+ // path.SetOrigin(origin);
+ path.Teleport({ position: origin });
+ }
+}
+Instance.OnScriptInput("SpawnScene3Boss()", SpawnScene3Boss);
+function SpawnScene3Boss() {
+ boss_hp_total = 180;
+
+ // EntFire("functions", "RunScriptCode", "boss_hp_section=boss_hp_total/36;", 4);
+ EntFire("functions", "RunScriptInput", "boss_hp_section=boss_hp_total/36;", 4);
+
+ // ------------------------------------ 已修复 ------------------------------------
+ // SetGameText("boss_hp_bar", "255 0 0", 0.2, 0.3, 0, 0, 1, 0, 1, 2);
+ // ------------------------------------ 已修复 ------------------------------------
+
+ EntFire("boss_hp_bar_timer", "Enable", "", 10);
+ EntFire("boss_hp_bar_particle", "Start", "", 12);
+ EntFire("scene3_boss_box", "Enable", "", 11);
+ EntFire("scene3_boss_he_box", "Enable", "", 11);
+ EntFire("globalshake_255", "StartShake", "");
+
+ // ------------------------------------ 已修复 ------------------------------------
+ // SetTimer("scene3_boss_skill_timer", 1, 10);
+ // SetTimer("scene3_boss_hurt_timer", 1, 180);
+ // ------------------------------------ 已修复 ------------------------------------
+
+ // EntFire("scene3_boss_skill_timer", "AddOutput", "OnTimer functions:RunScriptCode:ChooseScene3BossSkills():0:0", 1);
+ EntFire("scene3_boss_skill_timer", "AddOutput", "OnTimer>functions>RunScriptInput>ChooseScene3BossSkills()>0>0", 1);
+ // EntFire("scene3_boss_hurt_timer", "AddOutput", "OnTimer scene3_boss_hurt:Enable::0:1", 1);
+ EntFire("scene3_boss_hurt_timer", "AddOutput", "OnTimer>scene3_boss_hurt>Enable>>0>1", 1);
+
+ // ------------------------------------ 已修复 ------------------------------------
+ // SpawnCameras(14, 280, 0, 4, 280, 0, Vector(-12002, -10300, 8384), Vector(-11927, -10886, 8384), 11);
+ EntFire("camera", "RunScriptInput", "atos_camera1");
+ EntFire("atos_camera", "KeyValue", "target atos_camera_target1")
+ EntFire("atos_camera", "EnableCameraAll");
+ EntFire("atos_camera", "DisableCameraAll", "", 11);
+ // ------------------------------------ 已修复 ------------------------------------
+
+ // ------------------------------------ 已修复 ------------------------------------
+ // let mdl = Entities.CreateByClassname("prop_dynamic");
+ // mdl.SetModel("models/atos/lizard/lizard.mdl");
+ // mdl.__KeyValueFromString("targetname", "scene3_boss_model");
+ // mdl.__KeyValueFromString("DefaultAnim", "idle");
+ // mdl.SetAngles(0, 90, 0);
+ // mdl.SetOrigin(Vector(-11852, -11318.4, 8233));
+ // ------------------------------------ 已修复 ------------------------------------
+
+ const mdlTemp = /** @type {PointTemplate} */ (Instance.FindEntityByName("scene3_boss_model_temp"));
+ const entities = mdlTemp.ForceSpawn();
+ if (!entities) return;
+ const mdl = entities[0];
+ EntFireByHandle(mdl, "SetAnimationLooping", "walk", 0, mdl, mdl);
+ EntFireByHandle(mdl, "SetParent", "scene3_boss_train", 0, mdl, mdl);
+ EntFire("scene3_boss_train", "StartForward", "");
+ EntFire("scene3_boss_sound", "PlaySound", "");
+ // EntFire("functions", "RunScriptCode", "ShowBossTime(180)", 11);
+ EntFire("functions", "RunScriptInput", "ShowBossTime(180)", 11);
+ EntFire("scene3_boss_skill_timer", "Enable", "", 11);
+ EntFire("scene3_boss_hurt_timer", "Enable", "", 11);
+}
+Instance.OnScriptInput("ShowScene3BossHP()", ShowScene3BossHP);
+function ShowScene3BossHP() {
+ // let h = ceil((boss_hp_total.tofloat() / boss_hp_section));
+ let h = Math.ceil((boss_hp_total / boss_hp_section));
+ if (h <= 0) {
+ // 已失效
+ // EntFire("tonemap", "SetAutoExposureMin", "1.25");
+ EntFire("scene3_hurt_4", "Kill", "");
+ EntFire("scene3_trigger_12", "Kill", "");
+ EntFire("scene3_boss_hurt", "Kill", "");
+ EntFire("scene3_spike*", "Kill", "");
+ EntFire("scene3_boss_push*", "Kill", "");
+ EntFire("scene3_boss_hurt_timer", "Kill", "");
+ EntFire("scene3_boss_skill_timer", "Kill", "");
+ EntFire("bosstime_text", "Kill", "");
+ EntFire("scene3_boss_sound", "PlaySound", "");
+ // EntFire("scene3_boss_push_sound", "Volume", "0");
+ EntFire("scene3_boss_push_sound_param", "SetFloatValue", "0");
+ EntFire("bgm_timer_4", "Enable", "");
+ EntFire("globalshake_255", "StartShake", "");
+ EntFire("scene3_wall_13", "Kill", "");
+ EntFire("scene3_push_*", "Kill", "");
+ EntFire("boss_hp_bar_timer", "Kill", "");
+ EntFire("scene3_boss_train", "StartForward", "", 0.01);
+ EntFire("scene3_boss_model", "SetAnimation", "run", 0.01);
+ EntFire("bgm_timer_4", "FireTimer", "", 0.01);
+ EntFire("scene3_break_7", "Break", "", 10);
+ EntFire("boss_hp_bar_particle", "Kill");
+ return;
+ };
+
+ // ------------------------------------ 已修复 ------------------------------------
+ // let t = "HP: ";
+ // for (let i = 0; i < h; i++) {
+ // t += "█";
+ // }
+ // EntFire("boss_hp_bar", "SetText", t, 0.1);
+ // EntFire("boss_hp_bar", "Display", "", 0.11);
+ // ------------------------------------ 已修复 ------------------------------------
+
+ EntFire("boss_hp_bar_particle", "SetDataControlPointX", h);
+}
+// ------------------------------------ 已修复 ------------------------------------
+// function SpawnCameras(x, y, z, x1, y1, z1, v1, v2, time) {
+// let viewcontrol = Entities.CreateByClassname("point_viewcontrol_multiplayer");
+// let viewtarget = Entities.CreateByClassname("info_target");
+// viewcontrol.__KeyValueFromString("targetname", "viewcontrol");
+// viewtarget.__KeyValueFromString("targetname", "viewtarget");
+// viewtarget.SetAngles(x, y, z);
+// viewtarget.SetOrigin(v1);
+// viewcontrol.SetAngles(x1, y1, z1);
+// viewcontrol.SetOrigin(v2);
+// viewcontrol.__KeyValueFromString("target_entity", "viewtarget");
+// viewcontrol.__KeyValueFromFloat("interp_time", time);
+// EntFireByHandle(viewcontrol, "Enable", "", 0, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "StartMovement", "", 0.01, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "Disable", "", time - 0.01, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "Kill", "", time, viewcontrol, viewcontrol);
+// EntFireByHandle(viewtarget, "Kill", "", time, viewtarget, viewtarget);
+// }
+// ------------------------------------ 已修复 ------------------------------------
+Instance.OnScriptInput("ChooseScene3BossSkills()", ChooseScene3BossSkills);
+function ChooseScene3BossSkills() {
+ let num = RandomInt(1, 1000);
+ switch (num % 3) {
+ case 0:
+ EntFire("scene3_boss_skill_timer", "Disable", "");
+ EntFire("scene3_boss_skill_timer", "Enable", "", 4.5);
+ EntFire("scene3_boss_model", "SetAnimation", "attack1");
+ EntFire("scene3_boss_push_template", "ForceSpawn", "");
+ break;
+ case 1:
+ EntFire("scene3_boss_model", "SetAnimation", "attack2");
+ SpawnSpikes2();
+ break;
+ case 2:
+ EntFire("scene3_boss_model", "SetAnimation", "attack2");
+ SpawnSpikes();
+ break;
+ }
+}
+function SpawnSpikes() {
+ EntFire("scene3_spike_sound", "PlaySound", "");
+ let spikes = [
+ "origin -12007 -9828 8592",
+ "origin -11836 -9828 8592",
+ "origin -11665 -9828 8592",
+ "origin -11665 -10084 8592",
+ "origin -11836 -10084 8592",
+ "origin -12007 -10084 8592"
+ ];
+ let index = ChooseNumbers(6, 5);
+ let template = Entities.FindByName(null, "scene3_spike_template");
+ for (let i = 0; i < 5; i++) {
+ // EntFireByHandle(template, "AddOutput", spikes[index[i]], i * 0.02, template, template);
+ EntFireByHandle(template, "KeyValuet", spikes[index[i]], i * 0.02, template, template);
+ EntFireByHandle(template, "ForceSpawn", "", i * 0.02 + 0.01, template, template);
+ }
+ Delay(0.1, () => {
+ EntFire("scene3_spike_move*", "Open", "", 3);
+ EntFire("scene3_spike_move*", "KillHierarchy", "", 4.5);
+ EntFire("scene3_spike_aim*", "Kill", "", 4.5);
+ });
+}
+function SpawnSpikes2() {
+ EntFire("scene3_spike_sound", "PlaySound", "");
+ let template = Entities.FindByName(null, "scene3_spike2_template");
+ for (let i = 0; i < 5; i++) {
+ let x = RandomInt(-12020, -11652);
+ let y = RandomInt(-10140, -9772);
+ let origin = "origin " + x.toString() + " " + y.toString() + " 7976";
+ // EntFireByHandle(template, "AddOutput", origin, i * 0.02, template, template);
+ EntFireByHandle(template, "KeyValue", origin, i * 0.02, template, template);
+ EntFireByHandle(template, "ForceSpawn", "", i * 0.02 + 0.01, template, template);
+ }
+ // EntFire("functions", "RunScriptCode", "RandomBaseVelocity()", 1);
+ Delay(0.1, () => {
+ EntFire("functions", "RunScriptInput", "RandomBaseVelocity()", 1);
+ EntFire("scene3_spike2_move*", "Open", "", 3);
+ });
+}
+Instance.OnScriptInput("RandomBaseVelocity()", RandomBaseVelocity);
+function RandomBaseVelocity() {
+ let num = RandomInt(1, 1000);
+ let output = "null";
+ switch (num % 4) {
+ // case 0:
+ // output = "OnStartTouch !activator:AddOutput:basevelocity -500 0 500:0:0";
+ // break;
+ // case 1:
+ // output = "OnStartTouch !activator:AddOutput:basevelocity 500 0 500";
+ // break;
+ // case 2:
+ // output = "OnStartTouch !activator:AddOutput:basevelocity 0 500 500";
+ // break;
+ // case 3:
+ // output = "OnStartTouch !activator:AddOutput:basevelocity 0 -500 500";
+ // break;
+ case 0:
+ output = "OnStartTouch>!activator>KeyValue>basevelocity -500 0 500>0>0";
+ break;
+ case 1:
+ output = "OnStartTouch>!activator>KeyValue>basevelocity 500 0 500>0>0";
+ break;
+ case 2:
+ output = "OnStartTouch>!activator>KeyValue>basevelocity 0 500 500>0>0";
+ break;
+ case 3:
+ output = "OnStartTouch>!activator>KeyValue>basevelocity 0 -500 500>0>0";
+ break;
+ }
+ EntFire("scene3_spike2_trigger*", "AddOutput", output);
+}
+Instance.OnScriptInput("RandomPushDir()", RandomPushDir);
+function RandomPushDir() {
+ let num = RandomInt(1, 1000);
+ switch (num % 4) {
+ case 0:
+ EntFire("scene3_boss_push_trigger", "SetPushDirection", "0 90 0");
+ break;
+ case 1:
+ EntFire("scene3_boss_push_trigger", "SetPushDirection", "0 0 0");
+ break;
+ case 2:
+ EntFire("scene3_boss_push_trigger", "SetPushDirection", "0 180 0");
+ break;
+ case 3:
+ EntFire("scene3_boss_push_trigger", "SetPushDirection", "0 270 0");
+ break;
+ }
+}
+/**
+ *
+ * @param {number} totalNumber
+ * @param {number} chooseNumber
+ * @returns
+ */
+function ChooseNumbers(totalNumber, chooseNumber) {
+ let index = /** @type {number[]} */ ([]);
+ let count = 0;
+ while (count < chooseNumber) {
+ let num = RandomInt(1, 1000);
+ num = num % totalNumber;
+ let flag = 1;
+ for (let j = 0; j < index.length; j++) {
+ if (num == index[j]) {
+ flag = 0;
+ break;
+ };
+ }
+ if (flag) {
+ index.push(num);
+ count += 1;
+ };
+ }
+ return index;
+}
+
+// ------------------------------------ 已修复 ------------------------------------
+// function SetTimer(targetname, StartDisabled, RefireTime) {
+// let timer = Entities.CreateByClassname("logic_timer");
+// timer.__KeyValueFromString("targetname", targetname);
+// timer.__KeyValueFromInt("StartDisabled", StartDisabled);
+// timer.__KeyValueFromFloat("RefireTime", RefireTime);
+// }
+// ------------------------------------ 已修复 ------------------------------------
+
+Instance.OnScriptInput("ShowBossTime(180)", () => ShowBossTime(180));
+/**
+ *
+ * @param {number} second
+ */
+function ShowBossTime(second) {
+ for (let i = 0; i <= second; i++) {
+ let message = null;
+ let j = second - i;
+ if (j == 0) {
+ break;
+ };
+ message = "Boss Time: " + j.toString();
+ // EntFire("bosstime_text", "SetText", message, i);
+ // EntFire("bosstime_text", "Display", "", i + 0.01);
+ EntFire("bosstime_text", "SetMessage", message, i);
+ EntFire("bosstime_text_zone", "CountPlayersInZone", "", i + 0.01);
+ }
+}
+Instance.OnScriptInput("StartScene3Laser()", StartScene3Laser);
+function StartScene3Laser() {
+ EntFire("scene3_laser1_template", "ForceSpawn", "");
+ let num = RandomInt(1, 1000);
+ switch (num % 3) {
+ case 0:
+ EntFire("scene3_laser_master", "SetAnimation", "attack1");
+ break;
+ case 1:
+ EntFire("scene3_laser_master", "SetAnimation", "attack3");
+ break;
+ case 2:
+ EntFire("scene3_laser_master", "SetAnimation", "attack4");
+ break;
+ }
+}
+Instance.OnScriptInput("SpawnScene2Grenade()", SpawnScene2Grenade);
+function SpawnScene2Grenade() {
+ let origin = ["origin 3756 -232 568", "origin 3840 -232 568", "origin 3920 -232 568"];
+ for (let i = 0; i < origin.length; i++) {
+ let num = RandomInt(1, 1000);
+ let temp = null;
+ switch (num % 2) {
+ case 0:
+ temp = "he_temp";
+ break;
+ case 1:
+ temp = "molotov_temp";
+ break;
+ }
+ if (temp != null) {
+ // EntFire(temp, "AddOutput", origin[i], i);
+ EntFire(temp, "KeyValue", origin[i], i);
+ EntFire(temp, "ForceSpawn", "", i + 0.01);
+ }
+ }
+}
+Instance.OnScriptInput("SpawnGhost()", SpawnGhost);
+function SpawnGhost() {
+ let h = GetRandomPlayer();
+ if (h != null) {
+ let temp = Entities.FindByName(null, "ghost_template");
+ if (!temp || !temp.IsValid()) return;
+ let origin = ModifyOriginZ(h.GetAbsOrigin(), 32);
+ // temp.SetOrigin(origin);
+ temp.Teleport({ position: origin });
+ EntFireByHandle(temp, "ForceSpawn", "", 0.01, temp, temp);
+ }
+}
+Instance.OnScriptInput("ShowItemText(1)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(1, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(2)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(2, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(3)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(3, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(4)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(4, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(5)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(5, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(6)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(6, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(7)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(7, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(8)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(8, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(9)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(9, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(10)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(10, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(11)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(11, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(12)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(12, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(13)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(13, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(14)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(14, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(15)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(15, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(16)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(16, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(17)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(17, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(18)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(18, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(19)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(19, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(20)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(20, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(21)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(21, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(22)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(22, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(23)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(23, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(24)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(24, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(25)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(25, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(26)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(26, inputData.activator) });
+Instance.OnScriptInput("ShowItemText(27)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) ShowItemText(27, inputData.activator) });
+/**
+ *
+ * @param {number} index
+ * @param {Entity} activator
+ */
+function ShowItemText(index, activator) {
+ // let global_text = SetGameText("", "255 255 0", 0.4, 0.2, 0.1, 0.1, 10, 0, 0, 3);
+ const origin = activator.GetEyePosition();
+ const angles = activator.GetEyeAngles();
+ const forward = getForwardIgnoreZ(angles);
+ const sideAngles = angles;
+ sideAngles.yaw += 90;
+ const side = getForwardIgnoreZ(sideAngles);
+ const newOrigin = vectorAdd(vectorAdd(origin, vectorScale(forward, 20)), vectorScale(side, 15));
+ newOrigin.z += 5;
+ const global_text_temp = /** @type {PointTemplate} */ (Instance.FindEntityByName("item_text_temp"));
+ const entities = global_text_temp.ForceSpawn(newOrigin, { pitch: 0, yaw: angles.yaw + 180, roll: 90 });
+ if (!entities) return;
+ const global_text = entities[0];
+ // if (global_text != null) {
+ if (global_text && global_text.IsValid()) {
+ // global_text.__KeyValueFromString("message", itemText[index - 1]);
+ // EntFireByHandle(global_text, "Display", "", 0.01, activator, global_text);
+ EntFireByHandle(global_text, "SetMessage", itemText[index - 1]);
+ EntFireByHandle(global_text, "SetParent", "!activator", 0, activator);
+ EntFireByHandle(global_text, "Kill", "", 11, global_text, global_text);
+ }
+}
+Instance.OnScriptInput("SpawnArcLightning(0)", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ SpawnArcLightning(0, inputData.activator);
+});
+Instance.OnScriptInput("SpawnArcLightning(1)", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ SpawnArcLightning(1, inputData.activator);
+});
+/**
+ *
+ * @param {number} flag
+ * @param {Entity} activator
+ */
+function SpawnArcLightning(flag, activator) {
+ if (!flag) {
+ // item_arc_lightning_pos1 = activator.GetOrigin();
+ item_arc_lightning_pos1 = activator.GetAbsOrigin();
+ item_arc_lightning_pos1 = ModifyOriginZ(item_arc_lightning_pos1, 48);
+ for (let i = 0; i < ITEM_ARC_LIGHTNING_MAXCOUNT; i++) {
+ // EntFire("functions", "RunScriptCode", "SpawnArcLightning(1)", i.tofloat() / 4);
+ EntFire("functions", "RunScriptInput", "SpawnArcLightning(1)", i / 4);
+ if (i == ITEM_ARC_LIGHTNING_MAXCOUNT - 1) {
+ // EntFire("functions", "RunScriptCode", "item_arc_lightning_pos1 <- null;", ITEM_ARC_LIGHTNING_MAXCOUNT.tofloat() / 4);
+ // EntFire("functions", "RunScriptCode", "item_arc_lightning_pos2 <- null;", ITEM_ARC_LIGHTNING_MAXCOUNT.tofloat() / 4);
+ // EntFire("functions", "RunScriptCode", "item_arc_lightning_target.clear();", ITEM_ARC_LIGHTNING_MAXCOUNT.tofloat() / 4);
+ EntFire("functions", "RunScriptInput", "item_arc_lightning_pos1 <- null;", ITEM_ARC_LIGHTNING_MAXCOUNT / 4);
+ EntFire("functions", "RunScriptInput", "item_arc_lightning_pos2 <- null;", ITEM_ARC_LIGHTNING_MAXCOUNT / 4);
+ EntFire("functions", "RunScriptInput", "item_arc_lightning_target.clear();", ITEM_ARC_LIGHTNING_MAXCOUNT / 4);
+ }
+ }
+ } else {
+ let lightning1 = Entities.FindByName(null, "item_arc_lightning_1");
+ let lightning2 = Entities.FindByName(null, "item_arc_lightning_2");
+ let targets = Entities.FindByClassnameWithin(null, "player", item_arc_lightning_pos1, 512);
+ // while ((target = Entities.FindByClassnameWithin(target, "player", item_arc_lightning_pos1, 512)) != null) {
+ // let isFind = 0;
+ // for (let i = 0; i < item_arc_lightning_target.length; i++) {
+ // if (target == item_arc_lightning_target[i]) {
+ // isFind = 1;
+ // break;
+ // }
+ // }
+ if (targets && targets.length !== 0) {
+ // if (!isFind) {
+ for (let i = 0; i < targets.length; i++) {
+ const target = targets[i];
+ // if (target.GetTeam() == 2) {
+ Delay(i * 0.1, () => {
+ if (target.GetTeamNumber() === 2) {
+ // item_arc_lightning_target.push(target);
+ // item_arc_lightning_pos2 = target.GetOrigin();
+ item_arc_lightning_pos2 = target.GetAbsOrigin();
+ item_arc_lightning_pos2 = ModifyOriginZ(item_arc_lightning_pos2, 48);
+ if (lightning1 && lightning2) {
+ // let name = target.GetName();
+ let name = target.GetEntityName();
+ if (name == "cure_user"
+ || name == "alacrity_user"
+ || name == "blackhole_user"
+ || name == "rock_monster_user"
+ || name == "rasengan_user"
+ || name == "particle_gun_user") {
+ target.SetHealth(Math.ceil(target.GetHealth() / 2));
+ } else {
+ target.SetHealth(1000);
+ }
+ // lightning1.SetOrigin(item_arc_lightning_pos1);
+ // lightning2.SetOrigin(item_arc_lightning_pos2);
+ lightning1.Teleport({ position: item_arc_lightning_pos1 });
+ lightning2.Teleport({ position: item_arc_lightning_pos2 });
+ item_arc_lightning_pos1 = item_arc_lightning_pos2;
+ // EntFire("item_arc_lightning_beam", "TurnOn", "");
+ // EntFire("item_arc_lightning_beam", "TurnOff", "", 0.24);
+ EntFire("item_arc_lightning_beam", "Start", "");
+ EntFire("item_arc_lightning_beam", "Stop", "", 0.24);
+ for (let i = 0; i < 10; i++) {
+ // EntFire("speed", "ModifySpeed", "0", i * 0.1, target);
+ EntFireByHandle(target, "KeyValue", "speed 0.01", i * 0.1);
+ }
+ // EntFire("speed", "ModifySpeed", "1", 1, target);
+ EntFireByHandle(target, "KeyValue", "speed 1", 1);
+ EntFire("item_arc_lightning_sound", "SetLocalOrigin", ConvertOrigin(item_arc_lightning_pos1));
+ ChooseArcLightningSound(item_arc_lightning_target.length);
+ }
+ }
+ });
+ }
+ }
+ }
+}
+/**
+ *
+ * @param {number} index
+ */
+function ChooseArcLightningSound(index) {
+ let sound = Entities.FindByName(null, "item_arc_lightning_sound");
+ // if (sound != null) {
+ EntFireByHandle(sound, "StopSound", "", 0, sound, sound);
+ // sound.__KeyValueFromString("message", item_arc_lightning_sound[index - 1]);
+ EntFireByHandle(sound, "SetSoundEventName", item_arc_lightning_sound[index - 1]);
+ // EntFireByHandle(sound, "PlaySound", "", 0.01, sound, sound);
+ EntFireByHandle(sound, "StartSound", "", 0.01, sound, sound);
+}
+Instance.OnScriptInput("SpawnThunderFire()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ SpawnThunderFire(inputData.activator);
+});
+/**
+ *
+ * @param {Entity} activator
+ */
+function SpawnThunderFire(activator) {
+ EntFire("item_thunder_fire_particle", "Start", "");
+ EntFire("item_thunder_fire_particle", "Stop", "", 0.8);
+ // let anglesY = activator.GetAngles().y;
+ let anglesY = activator.GetAbsAngles().yaw;
+ let c = null;
+ // let s = null;
+ let s = 0;
+ if (anglesY == 0 || anglesY == 180) {
+ s = 1;
+ };
+ if (anglesY == 90 || anglesY == 270) {
+ c = 1;
+ } else {
+ anglesY = anglesY * Math.PI / 180;
+ c = Math.cos(anglesY);
+ s = Math.sin(anglesY);
+ };
+ // let origin = activator.GetOrigin();
+ let origin = activator.GetAbsOrigin();
+ for (let i = 0; i < 4; i++) {
+ let dist = 400;
+ if (i == 0) {
+ dist = 0;
+ };
+ let point = Vector(dist * c + origin.x, dist * s + origin.y, origin.z);
+ let temp = ConvertOrigin(point);
+ temp = "origin " + temp;
+ // EntFire("item_thunder_fire_move_template", "AddOutput", temp, i * 0.2);
+ EntFire("item_thunder_fire_move_template", "KeyValue", temp, i * 0.2);
+ EntFire("item_thunder_fire_move_template", "ForceSpawn", "", i * 0.2 + 0.01);
+ origin = point;
+ }
+}
+/**
+ *
+ * @param {import("cs_script/point_script").Vector} item
+ * @returns
+ */
+function ConvertOrigin(item) {
+ let newOrigin = (item.x).toString() + " " + (item.y).toString() + " " + (item.z).toString();
+ return newOrigin;
+}
+/**
+ *
+ * @param {import("cs_script/point_script").Vector} item
+ * @param {number} distance
+ * @returns
+ */
+function ModifyOriginZ(item, distance) {
+ item = Vector(item.x, item.y, item.z + distance);
+ return item;
+}
+Instance.OnScriptInput("SpawnFirestorm(0)", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ SpawnFirestorm(0, inputData.activator);
+});
+Instance.OnScriptInput("SpawnFirestorm(1)", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ SpawnFirestorm(1, inputData.activator);
+});
+/**
+ *
+ * @param {number} flag
+ * @param {Entity} activator
+ * @returns
+ */
+function SpawnFirestorm(flag, activator) {
+ if (flag) {
+ // let origin = activator.GetOrigin();
+ let origin = activator.GetAbsOrigin();
+ let hurt = Entities.FindByName(null, "item_firestorm_hurt");
+ let sound = Entities.FindByName(null, "item_firestorm_sound");
+ // sound.SetOrigin(origin);
+ sound?.Teleport({ position: origin });
+ // hurt.SetOrigin(origin);
+ hurt?.Teleport({ position: origin });
+ // EntFireByHandle(sound, "PlaySound", "", 0, null, null);
+ EntFireByHandle(sound, "PlaySound", "", 0);
+ item_firestorm_origins = [
+ Vector(origin.x - 200, origin.y, origin.z),
+ Vector(origin.x + 200, origin.y, origin.z),
+ Vector(origin.x, origin.y - 200, origin.z),
+ Vector(origin.x, origin.y + 200, origin.z),
+ Vector(origin.x + 160, origin.y + 100, origin.z),
+ Vector(origin.x - 50, origin.y - 60, origin.z),
+ Vector(origin.x + 130, origin.y - 100, origin.z),
+ Vector(origin.x - 100, origin.y + 140, origin.z),
+ origin
+ ];
+ for (let i = 0; i < ITEM_FIRESTORM_MAXCOUNT; i++) {
+ // EntFire("functions", "RunScriptCode", "SpawnFirestorm(0)", i * 1.8 + 0.01);
+ EntFire("functions", "RunScriptInput", "SpawnFirestorm(0)", i * 1.8 + 0.01);
+ // EntFireByHandle(hurt, "Enable", "", i * 1.8 + 1.5, null, null);
+ // EntFireByHandle(hurt, "Disable", "", i * 1.8 + 1.8, null, null);
+ EntFireByHandle(hurt, "Enable", "", i * 1.8 + 1.5);
+ EntFireByHandle(hurt, "Disable", "", i * 1.8 + 1.8);
+ }
+ return;
+ };
+ for (let i = 0; i < item_firestorm_origins.length; i++) {
+ let origin = "origin " + ConvertOrigin(item_firestorm_origins[i]);
+ // EntFire("item_firestorm_model_template", "AddOutput", origin, i * 0.02);
+ EntFire("item_firestorm_model_template", "KeyValue", origin, i * 0.02);
+ EntFire("item_firestorm_model_template", "ForceSpawn", origin, i * 0.02 + 0.01);
+ }
+ Delay(0.5, () => {
+ EntFire("item_firestorm_move*", "Open");
+ EntFire("item_firestorm_particle*", "Start");
+ });
+}
+Instance.OnScriptInput("SpawnParticle(1)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(1, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(2)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(2, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(3)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(3, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(4)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(4, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(5)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(5, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(6)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(6, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(7)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(7, inputData.activator) });
+Instance.OnScriptInput("SpawnParticle(8)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) SpawnParticle(8, inputData.activator) });
+/**
+ *
+ * @param {number} index
+ * @param {Entity} activator
+ */
+function SpawnParticle(index, activator) {
+ // let name = null;
+ let name = "null";
+ switch (index) {
+ case 1:
+ name = "item_poison_nova_particle_template";
+ break;
+ case 2:
+ name = "item_gift_model_template";
+ break;
+ case 3:
+ name = "item_water_particle_template";
+ break;
+ case 4:
+ name = "item_wind_rasengan_particle_template";
+ break;
+ case 5:
+ name = "item_lightning_particle_template";
+ break;
+ case 6:
+ name = "item_scorched_earth_particle_template";
+ break;
+ case 7:
+ name = "item_magic_particle_template";
+ break;
+ case 8:
+ name = "item_kirin_particle_template";
+ break;
+ }
+ let template = Entities.FindByName(null, name);
+ // template.SetOrigin(activator.GetOrigin());
+ template?.Teleport({ position: activator.GetAbsOrigin() });
+ // EntFireByHandle(template, "ForceSpawn", "", 0.01, null, null);
+ EntFireByHandle(template, "ForceSpawn", "", 0.01);
+}
+Instance.OnScriptInput("FilterZombieName()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ FilterZombieName(inputData.activator);
+});
+/**
+ *
+ * @param {Entity} activator
+ */
+function FilterZombieName(activator) {
+ // EntFire("stripper", "StripWeaponsAndSuit", "", 0, activator);
+ EntFire("stripper", "Use", "", 0, activator);
+}
+Instance.OnScriptInput("FreezePlayer()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ FreezePlayer(inputData.activator);
+});
+/**
+ *
+ * @param {Entity} activator
+ */
+function FreezePlayer(activator) {
+ for (let i = 0; i < 11; i++) {
+ // EntFire("speed", "modifyspeed", "0", i * 0.1, activator);
+ EntFireByHandle(activator, "KeyValue", "speed 0.01", i * 0.1);
+ }
+ // EntFire("speed", "modifyspeed", "1", 6, activator);
+ EntFireByHandle(activator, "KeyValue", "speed 1", 6);
+}
+Instance.OnScriptInput("GetItemPre(1)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(1, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(2)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(2, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(3)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(3, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(4)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(4, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(5)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(5, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(6)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(6, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(7)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(7, inputData.activator) });
+Instance.OnScriptInput("GetItemPre(8)", (inputData) => { if (inputData.activator && inputData.activator.IsValid()) GetItemPre(8, inputData.activator) });
+/**
+ *
+ * @param {number} index
+ * @param {Entity} activator
+ */
+function GetItemPre(index, activator) {
+ index -= 1;
+ // let team = activator.GetTeam();
+ let team = activator.GetTeamNumber();
+ // let dest = null;
+ let dest = "null";
+ let light = null;
+ if (team == 2) {
+ dest = "item_zombie_destination_" + (index + 1).toString();
+ light = item_zombie_light[index];
+ } else if (team == 3) {
+ // EntFire("stripper", "StripWeaponsAndSuit", "", 0, activator);
+ EntFire("stripper", "Use", "", 0, activator);
+ // EntFire("item_supply", "Use", "", 0.1, activator);
+ // @ts-ignore
+ Delay(1, () => GiveWeapon(activator));
+ light = item_human_light[index];
+ dest = "item_human_destination_" + (index + 1).toString();
+ };
+ EntFire(light, "Kill", "");
+ EntFire(dest, "Kill", "", 5);
+ // EntFire("!activator", "RunScriptCode", "self.SetVelocity(Vector(0,0,0));", 0, activator);
+ activator.Teleport({ velocity: Vector(0, 0, 0) });
+ // EntFire("speed", "ModifySpeed", "0", 0, activator);
+ // EntFire("speed", "ModifySpeed", "0", 0.1, activator);
+ // EntFire("speed", "ModifySpeed", "1", 1, activator);
+ EntFireByHandle(activator, "KeyValue", "speed 0.01", 0);
+ EntFireByHandle(activator, "KeyValue", "speed 0.01", 0.1);
+ EntFireByHandle(activator, "KeyValue", "speed 1", 1);
+}
+Instance.OnScriptInput("GetItem()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ GetItem(inputData.activator);
+})
+/**
+ *
+ * @param {Entity} activator
+ */
+function GetItem(activator) {
+ // let team = activator.GetTeam();
+ let team = activator.GetTeamNumber();
+ // let origin = null;
+ // let angles = null;
+ let origin = "null";
+ let angles = "null";
+ if (team === 2) {
+ origin = "origin 11008 11648 80";
+ // angles = "self.SetAngles(0 330 0);";
+ angles = "angles 0 330 0";
+ } else if (team === 3) {
+ origin = "origin 13312 11648 80";
+ // angles = "self.SetAngles(0 225 0);";
+ angles = "angles 0 225 0";
+ };
+ // EntFireByHandle(activator, "AddOutput", origin, 1, null, null);
+ // EntFireByHandle(activator, "RunScriptCode", angles, 1, null, null);
+ EntFireByHandle(activator, "KeyValue", origin, 1);
+ EntFireByHandle(activator, "KeyValue", angles, 1);
+}
+Instance.OnScriptInput("item_particle_gun_count<-1;item_rasengan_count<-2;item_cure_count<-1;item_rock_monster_count<-2;item_alacrity_count<-1;SpawnZombieItem();", () => {
+ item_particle_gun_count = 1; item_rasengan_count = 2; item_cure_count = 1; item_rock_monster_count = 2; item_alacrity_count = 1; SpawnZombieItem();
+});
+Instance.OnScriptInput("item_blackhole_count<-0;item_rasengan_count<-8;item_cure_count<-0;item_alacrity_count<-0;SpawnZombieItem();", () => {
+ item_blackhole_count = 0; item_rasengan_count = 8; item_cure_count = 0; item_alacrity_count = 0; SpawnZombieItem();
+});
+Instance.OnScriptInput("item_particle_gun_count<-1;item_rasengan_count<-2;item_cure_count<-1;item_rock_monster_count<-1;SpawnZombieItem();", () => {
+ item_particle_gun_count = 1; item_rasengan_count = 2; item_cure_count = 1; item_rock_monster_count = 1; SpawnZombieItem();
+});
+Instance.OnScriptInput("item_particle_gun_count<-1;item_rasengan_count<-2;item_blackhole_count<-0;item_cure_count<-1;item_rock_monster_count<-2;SpawnZombieItem();", () => {
+ item_particle_gun_count = 1; item_rasengan_count = 2; item_blackhole_count = 0; item_cure_count = 1; item_rock_monster_count = 2; SpawnZombieItem();
+});
+function SpawnZombieItem() {
+ for (let i = 0; i < 8; i++) {
+ let template = null;
+ while (template == null) {
+ let num = RandomInt(0, item_zombie_template.length - 1);
+ template = item_zombie_template[num];
+ if (template === "item_cure_template") {
+ if (item_cure_count - 1 > -1) {
+ item_cure_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ } else if (template === "item_alacrity_template") {
+ if (item_alacrity_count - 1 > -1) {
+ item_alacrity_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ } else if (template === "item_blackhole_template") {
+ if (item_blackhole_count - 1 > -1) {
+ item_blackhole_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ } else if (template === "item_rasengan_template") {
+ if (item_rasengan_count - 1 > -1) {
+ item_rasengan_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ } else if (template === "item_rock_monster_template") {
+ if (item_rock_monster_count - 1 > -1) {
+ item_rock_monster_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ } else if (template === "item_particle_gun_template") {
+ if (item_particle_gun_count - 1 > -1) {
+ item_particle_gun_count -= 1;
+ } else {
+ // item_zombie_template.remove(num);
+ item_zombie_template.splice(num, 1);
+ template = null;
+ }
+ }
+ }
+ // EntFire(template, "AddOutput", "origin " + item_zombie_origin[i], i);
+ EntFire(template, "KeyValue", "origin " + item_zombie_origin[i], i);
+ EntFire(template, "ForceSpawn", "", i + 0.01);
+ }
+}
+Instance.OnScriptInput("SpawnHumanItem(1 0);", () => SpawnHumanItem(1, 0));
+Instance.OnScriptInput("SpawnHumanItem(0 5)", () => SpawnHumanItem(0, 5));
+Instance.OnScriptInput("SpawnHumanItem(1)", () => SpawnHumanItem(1));
+Instance.OnScriptInput("SpawnHumanItem(1 2)", () => SpawnHumanItem(1, 2));
+/**
+ *
+ * @param {number} flag
+ * @param {number} health
+ * @returns
+ */
+function SpawnHumanItem(flag, health = 1) {
+ if (health == 1) {
+ // EntFire("item_health_human_template", "AddOutput", "origin -8021 7409 1324");
+ EntFire("item_health_human_template", "KeyValue", "origin -8021 7409 1324");
+ EntFire("item_health_human_template", "ForceSpawn", "", 0.01);
+ } else if (health == 2) {
+ let n = RandomInt(0, 1);
+ let o = "origin -8480 -4688 328";
+ if (n) {
+ o = "origin -6128 -2000 1104";
+ }
+ // EntFire("item_health_human_template", "AddOutput", o);
+ EntFire("item_health_human_template", "KeyValue", o);
+ EntFire("item_health_human_template", "ForceSpawn", "", 0.01);
+ } else if (health == 5) {
+ for (let i = 0; i < 8; i++) {
+ // EntFire("item_bkb_template", "AddOutput", "origin " + item_human_origin[i], i);
+ EntFire("item_bkb_template", "KeyValue", "origin " + item_human_origin[i], i)
+ EntFire("item_bkb_template", "ForceSpawn", "", i + 0.01);
+ }
+ return;
+ };
+ if (flag) {
+ let n = RandomInt(0, 100);
+ n = n % 2;
+ if (n) {
+ item_human_template.push("wk_template");
+ } else {
+ item_human_template.push("item_jugg_template");
+ }
+ };
+ let index = ChooseNumbers(item_human_template.length, 8);
+ for (let i = 0; i < 8; i++) {
+ let template = item_human_template[index[i]];
+ // EntFire(template, "AddOutput", "origin " + item_human_origin[i], i);
+ EntFire(template, "KeyValue", "origin " + item_human_origin[i], i);
+ EntFire(template, "ForceSpawn", "", i + 0.01);
+ }
+}
+/**
+ * 重名函数
+ * @param {number} totalNumber
+ * @param {number} chooseNumber
+ * @returns
+ */
+// function ChooseNumbers(totalNumber, chooseNumber) {
+// let index = /** @type {number[]} */ ([]);
+// let count = 0;
+// while (count < chooseNumber) {
+// let num = RandomInt(1, 1000);
+// num = num % totalNumber;
+// let flag = 1;
+// for (let j = 0; j < index.length; j++) {
+// if (num == index[j]) {
+// flag = 0;
+// break;
+// }
+// }
+// if (flag) {
+// index.push(num);
+// count += 1;
+// }
+// }
+// return index;
+// }
+Instance.OnScriptInput("SpawnScene3Item()", SpawnScene3Item);
+function SpawnScene3Item() {
+ let o = ["-8784 -3220 7896", "-10684 -2636 7952", "-11420 -4872 7888", "-12144 -5100 7880"];
+ let num = RandomInt(0, 3);
+ // EntFire("item_health_human_template", "AddOutput", "origin " + o[num % 4]);
+ EntFire("item_health_human_template", "KeyValue", "origin " + o[num % 4]);
+ EntFire("item_health_human_template", "ForceSpawn", "", 0.01);
+}
+Instance.OnScriptInput("PushUltimate()", PushUltimate);
+function PushUltimate() {
+ if (RandomInt(1, 100) % 2 == 0) {
+ item_human_template.push("item_wind_rasengan_template");
+ } else {
+ item_human_template.push("item_kirin_template");
+ }
+}
+Instance.OnScriptInput("SetBlackKingBar()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ // @ts-ignore
+ SetBlackKingBar(inputData.activator);
+});
+/**
+ *
+ * @param {CSPlayerPawn} activator
+ * @returns
+ */
+function SetBlackKingBar(activator) {
+ EntFire("item_black_king_bar_button", "Lock", "");
+ EntFire("item_black_king_bar_sound", "PlaySound", "");
+ // EntFire("item_black_king_bar_icon", "ToggleSprite", "");
+ EntFire("item_black_king_bar_icon", "Stop", "");
+ EntFire("item_black_king_bar_button", "Unlock", "", 40);
+ // EntFire("item_black_king_bar_icon", "ToggleSprite", "", 40);
+ EntFire("item_black_king_bar_icon", "Start", "", 40);
+ if (ITEM_BLACK_KING_BAR_MAXCOUNT) {
+ ITEM_BLACK_KING_BAR_MAXCOUNT -= 1;
+ };
+ // ----------------------- 已使用context代替 -----------------------
+ // if (activator.ValidateScriptScope()) {
+ // let e = activator.GetScriptScope();
+ // if ("wk" in e) {
+ // if (e.wk == 1) {
+ // return;
+ // }
+ // };
+ // ----------------------- 已使用context代替 -----------------------
+ // EntFire("!activator", "SetDamageFilter", "nofallandzombie", 0, activator);
+ // EntFire("!activator", "SetDamageFilter", "nofall", ITEM_BLACK_KING_BAR_MAXCOUNT + 3, activator);
+ EntFireByHandle(activator, "SetDamageFilter", "nofallandzombie", 0);
+ EntFireByHandle(activator, "SetDamageFilter", "nofall", ITEM_BLACK_KING_BAR_MAXCOUNT + 3);
+ // }
+}
+// 获取玩家脚本域---已失效
+// function ResetWK() {
+// let handle = null;
+// while (null != (handle = Entities.FindInSphere(handle, self.GetOrigin(), 500000))) {
+// if (handle.GetClassname() == "player") {
+// if (handle.ValidateScriptScope()) {
+// let e = handle.GetScriptScope();
+// if ("wk" in e) {
+// e.wk = 0;
+// };
+// EntFire("!activator", "RunScriptCode", "btn<-[];", 0, handle);
+// }
+// }
+// }
+// }
+// function Ban() {
+// if (activator.ValidateScriptScope()) {
+// let e = activator.GetScriptScope();
+// if ("ban" in e) {
+// if (e.ban == 1) {
+// EntFire("!activator", "AddOutput", "origin 15872 14944 112", 1, activator);
+// }
+// }
+// }
+// }
+Instance.OnScriptInput("SetWKHealth()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ // @ts-ignore
+ SetWKHealth(inputData.activator);
+});
+/**
+ *
+ * @param {CSPlayerPawn} activator
+ */
+function SetWKHealth(activator) {
+ // ----------------------- 已使用context代替 -----------------------
+ // if (activator.ValidateScriptScope()) {
+ // let e = activator.GetScriptScope();
+ // if ("wk" in e) {
+ // if (e.wk == 1) {
+ // ----------------------- 已使用context代替 -----------------------
+ // EntFire("!activator", "AddOutput", "health 200", 0, activator);
+ EntFireByHandle(activator, "KeyValue", "health 200");
+ EntFire("scene3_wk_trigger", "Kill", "");
+ // }
+ // }
+ // }
+}
+Instance.OnScriptInput("ButtonCount()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ if (!inputData.caller || !inputData.caller.IsValid()) return;
+ ButtonCount(inputData.activator, inputData.caller);
+});
+const btnData = new Map(); // key: player; value: Set(btns[])
+/**
+ *
+ * @param {Entity} activator
+ * @param {Entity} caller
+ */
+function ButtonCount(activator, caller) {
+ // if (activator.ValidateScriptScope()) {
+ // let e = activator.GetScriptScope();
+ // let b = caller.GetName();
+ // if ("btn" in e) {
+ // for (let i = 0; i < e.btn.length; i++) {
+ // if (e.btn[i] == b) {
+ // return;
+ // }
+ // }
+ // e.btn.push(b);
+ // if (e.btn.length == 3) {
+ // e.btn.clear();
+ // EntFire("!activator", "AddOutput", "origin -2296 -11202 8450", 0, activator);
+ // EntFire("!activator", "RunScriptCode", "self.SetVelocity(Vector(0,0,0));", 0, activator);
+ // }
+ // }
+ // }
+ if (!btnData.has(activator)) {
+ btnData.set(activator, { btns: new Set([caller]) });
+ } else {
+ if (!btnData.get(activator).btns.has(caller)) {
+ btnData.get(activator).btns.add(caller);
+ if (btnData.get(activator).btns.size === 3) {
+ btnData.get(activator).btns.clear();
+ EntFireByHandle(activator, "KeyValue", "origin -2296 -11202 8450");
+ activator.Teleport({ velocity: Vector(0, 0, 0) });
+ }
+ }
+ }
+}
+Instance.OnScriptInput("CBreakCounter(10)", () => CBreakCounter(10));
+/**
+ *
+ * @param {number} m
+ * @param {number} flag
+ * @param {string} n
+ * @returns
+ */
+function CBreakCounter(m, flag = 1, n = "n") {
+ if (flag) {
+ for (let i = 100; i < 115; i++) {
+ EntFire("trip5_trigger_" + i, "Enable", "");
+ if (i == 104 || i == 103 || i == 112) {
+ CBreakCounter(16, 0, "trip5_counter_" + i);
+ } else if (i == 106) {
+ CBreakCounter(6, 0, "trip5_counter_106");
+ } else {
+ CBreakCounter(11, 0, "trip5_counter_" + i);
+ }
+ }
+ return;
+ };
+
+ // ----------------------------------------- 已修复 -----------------------------------------
+ // let mc = Entities.CreateByClassname("math_counter");
+ // mc.__KeyValueFromInt("max", m);
+ // mc.__KeyValueFromString("targetname", n);
+ // ----------------------------------------- 已修复 -----------------------------------------
+
+ const counterTemp = /** @type {PointTemplate} */ (Instance.FindEntityByName("trip5_counter_temp"));
+ const entities = counterTemp.ForceSpawn();
+ if (!entities) return;
+ const mc = entities[0];
+ mc.SetEntityName(n);
+ EntFireByHandle(mc, "SetHitMax", m);
+ let t = n.slice(n.length - 3, n.length);
+ EntFire(n, "AddOutput", "OnHitMax>!self>Kill>>0>1");
+ EntFire(n, "AddOutput", "OnHitMax>trip5_break_" + t + ">Break>>0>1");
+ EntFire(n, "AddOutput", "OnHitMax>trip5_trigger_" + t + ">FireUser2>>0>1");
+ if (n == "trip5_counter_114") {
+ EntFire(n, "AddOutput", "OnHitMax>trip5_hurt_0>Enable>>0>1");
+ }
+}
+Instance.OnScriptInput("CountPlayer()", (inputData) => {
+ if (!inputData.caller || !inputData.caller.IsValid()) return;
+ CountPlayer(inputData.caller);
+});
+/**
+ *
+ * @param {Entity} caller
+ */
+function CountPlayer(caller) {
+ // let n = caller.GetName();
+ let n = caller.GetEntityName();
+ n = n.slice(n.length - 3, n.length);
+ EntFire("trip5_counter_" + n, "Add", "1");
+}
+Instance.OnScriptInput("CountPlayer2()", (inputData) => {
+ if (!inputData.caller || !inputData.caller.IsValid()) return;
+ CountPlayer2(inputData.caller);
+});
+/**
+ *
+ * @param {Entity} caller
+ */
+function CountPlayer2(caller) {
+ // let n = caller.GetName();
+ let n = caller.GetEntityName();
+ n = n.slice(n.length - 3, n.length);
+ EntFire("trip5_counter_" + n, "SetValue", "0");
+}
+Instance.OnScriptInput("ChooseTrip5BGM()", ChooseTrip5BGM);
+function ChooseTrip5BGM() {
+ let n = RandomInt(2, 4);
+ EntFire("bgm_timer_" + n, "Enable", "");
+ EntFire("bgm_timer_" + n, "FireTimer", "", 0.01);
+}
+// zr参数设置---已失效
+// function SetCvar() {
+// EntFire("cmd", "Command", "sm_g_cv_Money 10000");
+// EntFire("cmd", "Command", "sm_he_limit 4");
+// EntFire("cmd", "Command", "sm_smoke_limit 3");
+// EntFire("cmd", "Command", "sm_molotov_limit 2");
+// EntFire("cmd", "Command", "sm_taggrenade_limit 1");
+// EntFire("cmd", "Command", "sm_zeusweapons_decoy 1");
+// EntFire("cmd", "Command", "zr_class_modify zombies health 15000");
+// EntFire("cmd", "Command", "sm_cvar zr_class_modify zombies health 15000");
+// }
+Instance.OnScriptInput("PhysicsDetect()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ PhysicsDetect(inputData.activator);
+});
+/**
+ *
+ * @param {Entity} activator
+ */
+function PhysicsDetect(activator) {
+ // let n = activator.GetName();
+ let n = activator.GetEntityName();
+ if (n.indexOf("item_particle_gun_proj") === 0 || n.indexOf("item_rasengan_box") === 0) {
+ // EntFire("!activator", "Break", "", 0, activator);
+ EntFireByHandle(activator, "Break", "", 0);
+ }
+}
+Instance.OnScriptInput("StartRain()", StartRain);
+function StartRain() {
+ let max, min, p, p2, p3, p4 = null;
+ for (let i = 1; i < 21; i++) {
+ max = 1.75 - i * 0.0775;
+ min = 1.25 - i * 0.0525;
+ p = 400 - i * 40;
+ p2 = i * 12.75;
+ p3 = 0.8 + i * 0.01;
+ p4 = 9900 - i * 370;
+
+ // ----------------------------------------- 已失效 -----------------------------------------
+ // EntFire("tonemap", "SetAutoExposureMax", max.toString(), i);
+ // EntFire("tonemap", "SetAutoExposureMin", min.toString(), i);
+ // ----------------------------------------- 已失效 -----------------------------------------
+
+ EntFire("fog_controller", "SetStartDist", p.toString(), i);
+ EntFire("fog_controller", "SetMaxDensity", p3.toString(), i);
+ EntFire("fog_controller", "SetEndDist", p4.toString(), i);
+ // EntFire("scene4_cloudy_model", "AddOutput", "renderamt " + p2.toString(), i);
+ EntFire("skybox_scene4_cloudy_model", "Alpha", p2, i);
+ if (i > 10) {
+ p3 = (i - 10) * 10;
+ // EntFire("scene4_rain_area", "AddOutput", "renderamt " + p3.toString(), i);
+ EntFire("scene4_rain_area", "Alpha", p3, i);
+ }
+ }
+ // EntFire("env_sound_global", "PlaySound", "", 11);
+ EntFire("env_sound_global", "StartSound", "", 11);
+ // EntFire("bgm", "Volume", "5", 11);
+ EntFire("bgm_param", "SetFloatValue", "0.5", 11);
+ EntFire("rain", "Start");
+ EntFire("rain_post", "Enable");
+
+ // ----------------------------------------- 已失效 -----------------------------------------
+ // EntFire("shadow", "SetShadowsDisabled", "1", 15);
+ // ----------------------------------------- 已失效 -----------------------------------------
+
+ // EntFire("sun", "TurnOff", "", 15);
+ EntFire("sun", "Disable", "", 15);
+ // EntFire("skycamera_3", "ActivateSkybox", "", 20);
+
+ // EntFire("sky_rainy", "Trigger", "", 20);
+ EntFire("sky_sunny_2", "Disable", "", 20);
+ EntFire("sky_rainy", "Enable", "", 20);
+}
+Instance.OnScriptInput("EndRain()", EndRain);
+function EndRain() {
+ let max, min, p, p2, p3, p4 = null;
+ for (let i = 1; i < 21; i++) {
+ max = 0.2 + i * 0.0775;
+ min = 0.2 + i * 0.0525;
+ p = i * 40 - 400;
+ p2 = 255 - i * 12.75;
+ p3 = 1 - i * 0.01;
+ p4 = 2500 + i * 370;
+
+ // ----------------------------------------- 已失效 -----------------------------------------
+ // EntFire("tonemap", "SetAutoExposureMax", max.toString(), i);
+ // EntFire("tonemap", "SetAutoExposureMin", min.toString(), i);
+ // ----------------------------------------- 已失效 -----------------------------------------
+
+ EntFire("fog_controller", "SetStartDist", p.toString(), i);
+ EntFire("fog_controller", "SetEndDist", p4.toString(), i);
+ EntFire("fog_controller", "SetMaxDensity", p3.toString(), i);
+ // EntFire("scene4_cloudy_model", "AddOutput", "renderamt " + p2.toString(), i);
+ EntFire("skybox_scene4_cloudy_model", "Alpha", p2, i);
+ if (i < 11) {
+ p3 = 100 - i * 10;
+ // EntFire("scene4_rain_area", "AddOutput", "renderamt " + p3.toString(), i);
+ EntFire("scene4_rain_area", "Alpha", p3, i);
+ }
+ }
+ EntFire("env_sound_global", "StopSound", "", 11);
+ // EntFire("bgm", "Volume", "10", 11);
+ EntFire("bgm_param", "SetFloatValue", "1", 11);
+ EntFire("scene4_rain_area", "Kill", "", 11);
+ EntFire("rain", "Stop");
+ EntFire("rain_post", "Disable");
+
+ // ----------------------------------------- 已失效 -----------------------------------------
+ // EntFire("shadow", "SetShadowsDisabled", "0", 20);
+ // ----------------------------------------- 已失效 -----------------------------------------
+
+ // EntFire("sun", "TurnOn", "", 15);
+ EntFire("sun", "Enable", "", 15);
+ // EntFire("skycamera_1", "ActivateSkybox", "", 20);
+ EntFire("sky_rainy", "Disable", "", 20);
+ EntFire("sky_sunny_2", "Enable", "", 20);
+}
+Instance.OnScriptInput("SeaWitch()", SeaWitch);
+function SeaWitch() {
+ // let mdl = Entities.CreateByClassname("prop_dynamic");
+ // mdl.SetModel("models/atos/sea_witch/sea_witch.mdl");
+ // mdl.__KeyValueFromString("targetname", "scene4_sea_witch");
+ // mdl.__KeyValueFromString("DefaultAnim", "idle");
+ // mdl.SetAngles(0, 270, 0);
+ // mdl.SetOrigin(Vector(9789, -11417, 9127));
+ const mdlTemp = /** @type {PointTemplate} */ (Instance.FindEntityByName("scene4_sea_witch_temp"));
+ const entities = mdlTemp.ForceSpawn();
+ if (!entities) return;
+ const mdl = entities[0];
+ EntFireByHandle(mdl, "SetAnimation", "start", 0, mdl, mdl);
+ EntFireByHandle(mdl, "SetParent", "scene4_sea_witch_parent", 0, mdl, mdl);
+ EntFire("bgm_timer_3", "Enable", "");
+ EntFire("bgm_timer_3", "FireTimer", "", 0.01);
+ // EntFire("bgm", "Volume", "7", 0.1);
+ EntFire("bgm_param", "SetFloatValue", "0.7", 0.1);
+ EntFire("scene4_break_17", "Kill", "", 0.1);
+ EntFire("scene4_break_21", "Break", "", 0.1);
+ EntFire("scene4_jumpad_3", "Kill", "", 0.1);
+ EntFire("scene4_sea_witch_hp_add", "Enable", "");
+ EntFire("scene4_sea_witch_hp_add", "Kill", "", 0.5);
+ // EntFire("functions", "RunScriptCode", "boss_hp_section=boss_hp_total/36;", 3);
+ EntFire("functions", "RunScriptInput", "boss_hp_section=boss_hp_total/36;", 3);
+ EntFire("scene4_sea_witch_start_particle", "Start", "");
+ EntFire("scene4_sea_witch_splash", "Start", "", 3);
+ EntFire("scene4_sea_witch_start_particle", "Stop", "", 6);
+ // EntFire("scene4_sea_witch_box", "Enable", "", 6);
+ EntFire("scene4_sea_witch_box", "SetDamageFilter", "nogeneric", 6);
+ EntFire("scene4_sea_witch_skill_timer", "Enable", "", 6);
+
+ // ----------------------------------------- 已修复 -----------------------------------------
+ // SpawnCameras2("vc1", "vt1", 0, 90, 0, 0, 90, 0, Vector(9802, -11711, 9597.125), Vector(9802, -12315.099609, 9219.216003), 1, 1, 0);
+ // SpawnCameras2("vc2", "vt2", 0, 90, 0, 0, 90, 0, Vector(9802, -12003.700195, 9259.593994), Vector(9802, -11711, 9597), 5, 1, 1);
+ // ----------------------------------------- 已修复 -----------------------------------------
+
+ EntFire("camera", "RunScriptInput", "atos_camera_2");
+ EntFire("atos_camera", "KeyValue", "target atos_camera_target2")
+ EntFire("atos_camera", "EnableCameraAll");
+ EntFire("atos_camera", "DisableCameraAll", "", 6);
+ // SetGameText("boss_hp_bar", "255 0 0", 0.2, 0.3, 0, 0, 1, 0, 1, 2);
+ EntFire("boss_hp_bar_timer", "Enable", "", 5);
+ EntFire("boss_hp_bar_particle", "Start", "", 7);
+
+ // ----------------------------------------- 已修复 -----------------------------------------
+}
+// function SpawnCameras2(n1, n2, x, y, z, x1, y1, z1, v1, v2, time, flag, starttime) {
+// let viewcontrol = Entities.CreateByClassname("point_viewcontrol_multiplayer");
+// let viewtarget = Entities.CreateByClassname("info_target");
+// viewcontrol.__KeyValueFromString("targetname", n1);
+// viewtarget.__KeyValueFromString("targetname", n2);
+// viewtarget.SetAngles(x, y, z);
+// viewtarget.SetOrigin(v1);
+// viewcontrol.SetAngles(x1, y1, z1);
+// viewcontrol.SetOrigin(v2);
+// viewcontrol.__KeyValueFromString("target_entity", n2);
+// viewcontrol.__KeyValueFromFloat("interp_time", time);
+// viewcontrol.__KeyValueFromInt("spawnflags", flag);
+// EntFireByHandle(viewcontrol, "Enable", "", starttime, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "StartMovement", "", starttime + 0.01, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "Disable", "", starttime + time - 0.01, viewcontrol, viewcontrol);
+// EntFireByHandle(viewcontrol, "Kill", "", starttime + time + 0.01, viewcontrol, viewcontrol);
+// EntFireByHandle(viewtarget, "Kill", "", starttime + time + 0.01, viewtarget, viewtarget);
+// }
+// ----------------------------------------- 已修复 -----------------------------------------
+
+Instance.OnScriptInput("ShowBossHP()", ShowBossHP);
+function ShowBossHP() {
+ // let h = ceil((boss_hp_total.tofloat() / boss_hp_section))
+ let h = Math.ceil((boss_hp_total / boss_hp_section));
+ if (h <= 0) {
+ sea_witch_die = 1;
+ EntFire("scene4_sea_witch*", "Kill", "");
+ EntFire("boss_hp_bar_timer", "Kill", "");
+ EntFire("scene4_watermelon_land_train", "StartForward", "", 5);
+ EntFire("bgm_timer_4", "Enable", "");
+ EntFire("bgm_timer_4", "FireTimer", "", 0.01);
+ EntFire("boss_hp_bar_particle", "Kill");
+ EndRain();
+ return;
+ }
+ if (h == 18) {
+ if (!sea_witch_flag) {
+ sea_witch_flag = 1;
+ sea_witch_flag_2 = 1;
+ }
+ }
+
+ // ----------------------------------------- 已修复 -----------------------------------------
+ // let t = "HP: "
+ // for (let i = 0; i < h; i++) {
+ // t += "█"
+ // }
+ // EntFire("boss_hp_bar", "SetText", t, 0.1);
+ // EntFire("boss_hp_bar", "Display", "", 0.11);
+ // ----------------------------------------- 已修复 -----------------------------------------
+
+ EntFire("boss_hp_bar_particle", "SetDataControlPointX", h);
+}
+Instance.OnScriptInput("SeaWitchSkill()", SeaWitchSkill);
+function SeaWitchSkill() {
+ EntFire("boss_env_sound", "StopSound", "");
+ if (sea_witch_flag_2) {
+ sea_witch_flag_2 = 0;
+ SeaWitchChangePos();
+ return;
+ }
+ let num = RandomInt(1, 1000);
+ switch (num % 4) {
+ case 0:
+ let o = Entities.FindByName(null, "scene4_sea_witch_box");
+ if (o && o.IsValid()) {
+ // o.SetAbsOrigin(ModifyOriginZ(o.GetOrigin(), 92));
+ o.Teleport({ position: ModifyOriginZ(o.GetAbsOrigin(), 92) });
+ }
+ EntFire("scene4_sea_witch_splash", "Stop", "");
+ EntFire("scene4_sea_witch_skill_timer", "Disable", "");
+ EntFire("scene4_sea_witch", "SetDefaultAnimation", "");
+ EntFire("scene4_sea_witch", "SetAnimation", "attack2_1");
+ EntFire("scene4_sea_witch_ball", "Start", "", 0.8);
+ // EntFire("boss_env_sound", "AddOutput", "message ze_atos/env/sea_witch_ball.mp3");
+ EntFire("boss_env_sound", "SetSoundEventName", "sea_witch_ball");
+ // EntFire("boss_env_sound", "PlaySound", "", 0.8);
+ EntFire("boss_env_sound", "StartSound", "", 0.8);
+ EntFire("scene4_sea_witch_ball_trigger", "Enable", "", 3.8);
+ break;
+ case 1:
+ // EntFire("boss_env_sound", "AddOutput", "message ze_atos/env/sea_witch_wave.mp3");
+ EntFire("boss_env_sound", "SetSoundEventName", "sea_witch_wave");
+ EntFire("scene4_sea_witch", "SetAnimation", "attack1");
+ let idx = ChooseNumbers(8, 7);
+ for (let i = 0; i < 7; i++) {
+ // EntFire("scene4_sea_witch_wave_tp", "AddOutput", "origin " + sea_witch_ball_wave[idx[i] + 8 * sea_witch_pos], i * 0.02);
+ EntFire("scene4_sea_witch_wave_tp", "KeyValue", "origin " + sea_witch_ball_wave[idx[i] + 8 * sea_witch_pos], i * 0.02);
+ EntFire("scene4_sea_witch_wave_tp", "ForceSpawn", "", i * 0.02 + 0.01);
+ }
+ Delay(0.1, () => {
+ EntFire("scene4_sea_witch_wave_particle*", "Start", "", 0.5);
+ EntFire("scene4_sea_witch_wave*", "Open", "", 3.5);
+ // EntFire("boss_env_sound", "PlaySound", "", 3.5);
+ EntFire("boss_env_sound", "StartSound", "", 3.5);
+ });
+ break;
+ case 2:
+ SeaWitchChangePos();
+ break;
+ case 3:
+ // EntFire("scene4_sea_witch_box", "Disable", "");
+ EntFire("scene4_sea_witch_box", "SetDamageFilter", "god");
+ EntFire("scene4_sea_witch_skill_timer", "Disable", "");
+ EntFire("scene4_sea_witch_splash", "Stop", "");
+ EntFire("scene4_sea_witch", "SetAnimation", "round");
+ EntFire("scene4_sea_witch_around", "Start", "", 1.5);
+ // EntFire("scene4_sea_witch_box", "Enable", "", 8.8);
+ EntFire("scene4_sea_witch_box", "SetDamageFilter", "nogeneric", 8.8);
+ EntFire("scene4_sea_witch_splash", "Start", "", 8.8);
+ EntFire("scene4_sea_witch_around", "Stop", "", 16.5);
+ for (let i = 0; i < 3; i++) {
+ EntFire("scene4_sea_witch_round_trigger", "Enable", "", 2.5 + 5 * i);
+ }
+ EntFire("scene4_sea_witch_skill_timer", "Enable", "", 10);
+ break;
+ }
+}
+Instance.OnScriptInput("SeaWitchBall()", SeaWitchBall);
+function SeaWitchBall() {
+ sea_witch_ball_count += 1;
+ let h = Entities.FindByName(null, "scene4_sea_witch_ball");
+ if (sea_witch_ball_count < 4 && h != null) {
+ let p = GetRandomPlayer();
+ if (p != null) {
+ // let distance = GetDistance(p.GetOrigin(), h.GetOrigin());
+ let distance = GetDistance(p.GetAbsOrigin(), h.GetAbsOrigin());
+ // distance = distance.tointeger();
+ distance = Math.round(distance);
+ EntFire("scene4_sea_witch_ball_train", "SetMaxSpeed", distance.toString());
+ // EntFire("scene4_sea_witch_ball_track_1", "AddOutput", "origin " + ConvertOrigin(h.GetOrigin()));
+ // EntFire("scene4_sea_witch_ball_track_2", "AddOutput", "origin " + ConvertOrigin(p.GetOrigin()));
+ // EntFire("scene4_sea_witch_ball_damage_tp", "AddOutput", "origin " + ConvertOrigin(p.GetOrigin()));
+ EntFire("scene4_sea_witch_ball_track_1", "KeyValue", "origin " + ConvertOrigin(h.GetAbsOrigin()));
+ EntFire("scene4_sea_witch_ball_track_2", "KeyValue", "origin " + ConvertOrigin(p.GetAbsOrigin()));
+ EntFire("scene4_sea_witch_ball_damage_tp", "KeyValue", "origin " + ConvertOrigin(p.GetAbsOrigin()));
+ EntFire("scene4_sea_witch_ball_damage_tp", "ForceSpawn", "", 0.01);
+ // EntFire("scene4_sea_witch_ball_beam", "TurnOn", "", 0.1);
+ EntFire("scene4_sea_witch_ball_beam", "Start", "", 0.1);
+ EntFire("scene4_sea_witch_ball_train", "TeleportToPathNode", "scene4_sea_witch_ball_track_1", 1);
+ EntFire("scene4_sea_witch_ball_train", "StartForward", "", 1.1);
+ EntFire("scene4_sea_witch_ball_move", "Start", "", 1.1);
+ }
+ } else {
+ let o = Entities.FindByName(null, "scene4_sea_witch_box");
+ if (o && o.IsValid()) {
+ // o.SetAbsOrigin(ModifyOriginZ(o.GetOrigin(), -92));
+ o.Teleport({ position: ModifyOriginZ(o.GetAbsOrigin(), -92) });
+ }
+ EntFire("scene4_sea_witch_splash", "Start", "", 0.5);
+ sea_witch_ball_count = 0;
+ // EntFire("scene4_sea_witch", "SetDefaultAnimation", "idle");
+ EntFire("scene4_sea_witch", "SetIdleAnimationLooping", "idle");
+ EntFire("scene4_sea_witch", "SetAnimation", "attack2_2");
+ EntFire("scene4_sea_witch_ball", "Stop", "");
+ EntFire("scene4_sea_witch_skill_timer", "Enable", "");
+ g_player.length = 0;
+ }
+}
+function SeaWitchChangePos() {
+ if (sea_witch_flag) {
+ EntFire("scene4_sea_witch_splash", "Stop", "");
+ EntFire("scene4_sea_witch_skill_timer", "Disable", "");
+ EntFire("scene4_sea_witch_skill_timer", "Enable", "", 1);
+ let origin = "9763 -11109 9257";
+ EntFire("scene4_sea_witch", "SetDefaultAnimation", "");
+ EntFire("scene4_sea_witch", "SetAnimation", "down");
+ // EntFire("scene4_sea_witch_box", "Disable", "");
+ EntFire("scene4_sea_witch_box", "SetDamageFilter", "god");
+ sea_witch_pos = RandomInt(1, 1000) % 4;
+ switch (sea_witch_pos) {
+ case 1:
+ origin = "8547 -12309 9257";
+ break;
+ case 2:
+ origin = "9763 -13525 9257";
+ break;
+ case 3:
+ origin = "10979 -12309 9257";
+ break;
+ }
+ // EntFire("scene4_sea_witch_parent", "AddOutput", "origin " + origin, 3);
+ // EntFire("scene4_sea_witch_parent", "AddOutput", "angles 0 " + (sea_witch_pos * 90) + " 0", 3);
+ // EntFire("scene4_sea_witch_wave_tp", "AddOutput", "angles 0 " + (sea_witch_pos * 90) + " 0", 3);
+ EntFire("scene4_sea_witch_parent", "KeyValue", "origin " + origin, 3);
+ EntFire("scene4_sea_witch_parent", "KeyValue", "angles 0 " + (sea_witch_pos * 90) + " 0", 3);
+ EntFire("scene4_sea_witch_wave_tp", "KeyValue", "angles 0 " + (sea_witch_pos * 90) + " 0", 3);
+ // EntFire("scene4_sea_witch", "SetDefaultAnimation", "idle", 4);
+ EntFire("scene4_sea_witch", "SetIdleAnimationLooping", "idle", 4);
+ EntFire("scene4_sea_witch", "SetAnimation", "up", 4);
+ EntFire("scene4_sea_witch_start_particle", "Start", "", 4.2);
+ EntFire("scene4_sea_witch_start_particle", "Stop", "", 8);
+ EntFire("scene4_sea_witch_splash", "Start", "", 4.5);
+ // EntFire("scene4_sea_witch_box", "Enable", "", 5);
+ EntFire("scene4_sea_witch_box", "SetDamageFilter", "nogeneric", 5);
+ } else {
+ SeaWitchSkill();
+ }
+}
+Instance.OnScriptInput("SeaWitchAround()", SeaWitchAround);
+function SeaWitchAround() {
+ if (sea_witch_die != 1) {
+ EntFire("boss_env_sound", "StopSound", "");
+ // EntFire("boss_env_sound", "AddOutput", "message ze_atos/env/sea_witch_round.mp3");
+ EntFire("boss_env_sound", "SetSoundEventName", "sea_witch_round");
+ // EntFire("boss_env_sound", "PlaySound", "", 2);
+ EntFire("boss_env_sound", "StartSound", "", 2);
+ let p = GetRandomPlayer();
+ if (p != null) {
+ // EntFire("scene4_sea_witch_around_tp", "AddOutput", "origin " + ConvertOrigin(p.GetOrigin()));
+ EntFire("scene4_sea_witch_around_tp", "KeyValue", "origin " + ConvertOrigin(p.GetAbsOrigin()));
+ EntFire("scene4_sea_witch_around_tp", "ForceSpawn", "", 0.01);
+ // if (GetDistance(p.GetOrigin(), Vector(9769, -12322, 9249)) >= 200) {
+ if (GetDistance(p.GetAbsOrigin(), Vector(9769, -12322, 9249)) >= 200) {
+ // let n = (19538 - p.GetOrigin().x) + " " + (-24644 - p.GetOrigin().y) + " " + p.GetOrigin().z;
+ let n = (19538 - p.GetAbsOrigin().x) + " " + (-24644 - p.GetAbsOrigin().y) + " " + p.GetAbsOrigin().z;
+ // EntFire("scene4_sea_witch_around_tp", "AddOutput", "origin " + n, 0.02);
+ EntFire("scene4_sea_witch_around_tp", "KeyValue", "origin " + n, 0.02);
+ EntFire("scene4_sea_witch_around_tp", "ForceSpawn", "", 0.03);
+ };
+ Delay(0.1, () => {
+ EntFire("scene4_sea_witch_around_particle*", "Start", "", 1);
+ EntFire("scene4_sea_witch_around_hurt*", "Enable", "", 4);
+ EntFire("scene4_sea_witch_around_hurt*", "Kill", "", 4.3);
+ EntFire("scene4_sea_witch_around_particle*", "Kill", "", 4.9);
+ });
+ }
+ }
+}
+/**
+ *
+ * @param {import("cs_script/point_script").Vector} v1
+ * @param {import("cs_script/point_script").Vector} v2
+ * @returns
+ */
+function GetDistance(v1, v2) {
+ return Math.sqrt(Math.pow((v1.x - v2.x), 2) + Math.pow((v1.y - v2.y), 2) + Math.pow((v1.z - v2.z), 2));
+}
+Instance.OnScriptInput("SpawnFishLaser()", SpawnFishLaser);
+function SpawnFishLaser() {
+ EntFire("cmd", "Command", "say ▲OH!FISH ATTACKS▲");
+ let a = g_fish_counts.slice(0);
+ a.sort(function (a, b) {
+ return b - a;
+ });
+ if (a[0] > 0) {
+ for (let i = 0; i < g_fish_counts.length; i++) {
+ if (a[0] == g_fish_counts[i]) {
+ EntFire("scene4_trigger_19", "Enable", "", i * g_delay + 2);
+ if (i != g_fish_counts.length - 1) {
+ EntFire("scene4_fishlaser_template", "Kill", "", i * g_delay + 1);
+ EntFire("scene4_wavelaser_template", "Kill", "", i * g_delay);
+ break;
+ }
+ }
+ }
+ };
+ for (let i = 0; i < 9; i++) {
+ EntFire("scene4_fishlaser_template", "ForceSpawn", "", i * g_delay + 0.1);
+ if (i == 0 || i == 8) {
+ // EntFire("scene4_fishlaser_template", "AddOutput", "origin 10035 -14410 9137", i * g_delay);
+ // EntFire("scene4_fishlaser_template", "AddOutput", "angles 0 0 0", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "origin 10035 -14410 9137", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "angles 0 0 0", i * g_delay);
+ };
+ if (i == 1 || i == 7) {
+ // EntFire("scene4_fishlaser_template", "AddOutput", "origin 10242 -13361 9137", i * g_delay);
+ // EntFire("scene4_fishlaser_template", "AddOutput", "angles 0 -22.597 0", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "origin 10242 -13361 9137", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "angles 0 -22.597 0", i * g_delay);
+ };
+ if (i == 2 || i == 6) {
+ // EntFire("scene4_fishlaser_template", "AddOutput", "origin 10831 -12479 9137", i * g_delay);
+ // EntFire("scene4_fishlaser_template", "AddOutput", "angles 0 -45.209 0", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "origin 10831 -12479 9137", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "angles 0 -45.209 0", i * g_delay);
+ };
+ if (i == 3 || i == 5) {
+ // EntFire("scene4_fishlaser_template", "AddOutput", "origin 11713 -11889 9137", i * g_delay);
+ // EntFire("scene4_fishlaser_template", "AddOutput", "angles 0 -67.498 0", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "origin 11713 -11889 9137", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "angles 0 -67.498 0", i * g_delay);
+ };
+ if (i == 4) {
+ // EntFire("scene4_fishlaser_template", "AddOutput", "origin 14679 -12478 9137", i * g_delay);
+ // EntFire("scene4_fishlaser_template", "AddOutput", "angles 0 -134.943 0", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "origin 14679 -12478 9137", i * g_delay);
+ EntFire("scene4_fishlaser_template", "KeyValue", "angles 0 -134.943 0", i * g_delay);
+ }
+ }
+ EntFire("scene4_wavelaser_template", "ForceSpawn", "", 9 * g_delay);
+}
+Instance.OnScriptInput("SetFishLaser()", (inputData) => {
+ if (!inputData.caller || !inputData.caller.IsValid()) return;
+ SetFishLaser(inputData.caller);
+});
+/**
+ *
+ * @param {Entity} caller
+ */
+function SetFishLaser(caller) {
+ let n = RandomInt(0, 2);
+ if (n == 1) {
+ // EntFireByHandle(caller, "AddOutput", "origin " + ConvertOrigin(ModifyOriginZ(caller.GetOrigin(), 40)), 0, null, null);
+ EntFireByHandle(caller, "KeyValue", "origin " + ConvertOrigin(ModifyOriginZ(caller.GetAbsOrigin(), 40)), 0);
+ }
+ if (n == 2) {
+ // EntFireByHandle(caller, "AddOutput", "origin " + ConvertOrigin(ModifyOriginZ(caller.GetOrigin(), 168)), 0, null, null);
+ EntFireByHandle(caller, "KeyValue", "origin " + ConvertOrigin(ModifyOriginZ(caller.GetAbsOrigin(), 168)), 0);
+ }
+ n = RandomInt(0, 4);
+ // let c = null;
+ let c = "null";
+ switch (n) {
+ case 0:
+ c = "255 0 0";
+ break;
+ case 1:
+ c = "0 255 0";
+ break;
+ case 2:
+ c = "0 0 255";
+ break;
+ case 3:
+ c = "128 0 255";
+ break;
+ case 4:
+ c = "0 0 0";
+ break;
+ }
+ // EntFireByHandle(caller, "AddOutput", "rendercolor " + c, 0, null, null);
+ EntFireByHandle(caller, "Color", c, 0);
+}
+Instance.OnScriptInput("SpawnWaveLaser()", SpawnWaveLaser);
+function SpawnWaveLaser() {
+ for (let i = 1; i < 7; i++) {
+ if (i === 6) {
+ EntFire("scene4_wavelaser_fish", "SetAnimation", "jump_slow_far", 0.01);
+ // EntFire("scene4_wavelaser_move", "AddOutput", "renderamt 255", 0.81);
+ EntFire("scene4_wavelaser_move", "Alpha", "255", 0.81);
+ EntFire("scene4_wavelaser_hurt", "Enable", "", 0.81);
+ EntFire("scene4_wavelaser_train", "StartForward", "", 0.81);
+ EntFire("scene4_wavelaser_sound", "PlaySound", "", 0.81);
+ EntFire("scene4_wavelaser_splash", "Start", "", 1.5);
+ EntFire("scene4_wavelaser_splash", "Kill", "", 2.5);
+ EntFire("scene4_wavelaser_fish", "Kill", "", 2.01);
+ } else {
+ let name = "scene4_wavelaser_path_" + i.toString();
+ let path = Entities.FindByName(null, name);
+ if (path != null) {
+ // let origin = path.GetOrigin();
+ let origin = path.GetAbsOrigin();
+ let num = RandomInt(0, 100);
+ if (num % 2 != 0) {
+ origin = Vector(origin.x, origin.y, origin.z + 100);
+ // path.SetOrigin(origin);
+ path.Teleport({ position: origin });
+ }
+ }
+ }
+ }
+}
+Instance.OnScriptInput("SpawnScene4Item()", SpawnScene4Item);
+function SpawnScene4Item() {
+ let o = ["4649 -8827 9168", "6039 -12251 9240", "4963 -11893 9290"];
+ let p = [
+ "6269 -10293 9277",
+ "6269 -9781 9277",
+ "6269 -9269 9277",
+ "5505 -9269 9277",
+ "5505 -9781 9277",
+ "5505 -10293 9277"
+ ];
+ let num = RandomInt(0, 2);
+ // EntFire("item_health_human_template", "AddOutput", "origin " + o[num]);
+ EntFire("item_health_human_template", "KeyValue", "origin " + o[num]);
+ EntFire("item_health_human_template", "ForceSpawn", "", 0.01);
+ let n = ChooseNumbers(p.length, 2);
+ // EntFire("item_magic_template", "AddOutput", "origin " + p[n[0]]);
+ EntFire("item_magic_template", "KeyValue", "origin " + p[n[0]]);
+ EntFire("item_magic_template", "ForceSpawn", "", 0.01);
+ // EntFire("item_scorched_earth_template", "AddOutput", "origin " + p[n[1]]);
+ EntFire("item_scorched_earth_template", "KeyValue", "origin " + p[n[1]]);
+ EntFire("item_scorched_earth_template", "ForceSpawn", "", 0.01);
+}
+Instance.OnScriptInput("PushPlayer()", (inputData) => {
+ if (!inputData.activator || !inputData.activator.IsValid()) return;
+ PushPlayer(inputData.activator);
+});
+/**
+ *
+ * @param {Entity} activator
+ */
+function PushPlayer(activator) {
+ g_player.push(activator);
+}
+function GetRandomPlayer() {
+ let h = null;
+ if (g_player.length !== 0) {
+ h = g_player[RandomInt(0, g_player.length - 1)];
+ };
+ // g_player.clear();
+ g_player.length = 0;
+ return h;
+}
+Instance.OnScriptInput("SpawnLightning()", SpawnLightning);
+function SpawnLightning() {
+ let h = GetRandomPlayer();
+ if (h != null) {
+ // EntFire("lightning_template", "AddOutput", "origin " + ConvertOrigin(h.GetOrigin()));
+ EntFire("lightning_template", "KeyValue", "origin " + ConvertOrigin(h.GetAbsOrigin()));
+ EntFire("lightning_template", "ForceSpawn", "", 0.01);
+ }
+}
+Instance.OnScriptInput("SpawnInfLaser()", SpawnInfLaser);
+function SpawnInfLaser() {
+ g_inflaser_sound = 0;
+ g_inflaser_counts++;
+ EntFire("scene4_score_trigger", "Enable", "");
+ EntFire("scene4_score_trigger", "Disable", "", 0.2);
+ SetInfLaser("scene4_inflaser_left_path_");
+ SetInfLaser("scene4_inflaser_right_path_");
+ EntFire("env_sound_global", "StopSound", "");
+ // EntFire("env_sound_global", "PlaySound", "", 0.1);
+ EntFire("env_sound_global", "StartSound", "", 0.1);
+ EntFire("scene4_inflaser_left_train", "StartForward", "", 0.1);
+ EntFire("scene4_inflaser_right_train", "StartForward", "", 0.1);
+ if (g_inflaser_counts > 50) {
+ for (let i = 1; i < 151; i++) {
+ // EntFire("scene4_inflaser_left", "AddOutput", "renderamt " + (255 - 1.7 * i), 0.01 * i + 0.1);
+ // EntFire("scene4_inflaser_right", "AddOutput", "renderamt " + (255 - 1.7 * i), 0.01 * i + 0.1);
+ EntFire("scene4_inflaser_left", "Alpha", (255 - 1.7 * i), 0.01 * i + 0.1);
+ EntFire("scene4_inflaser_right", "Alpha", (255 - 1.7 * i), 0.01 * i + 0.1);
+ }
+ };
+ for (let i = 1; i < 151; i++) {
+ // EntFire("scene4_inflaser_left_train", "AddOutput", "angles " + (-0.2 * i) + " 0 0", 0.01 * i + 0.1);
+ // EntFire("scene4_inflaser_right_train", "AddOutput", "angles " + 0.2 * i + " 0 0", 0.01 * i + 0.1);
+ EntFire("scene4_inflaser_left_train", "KeyValue", "angles " + (-0.2 * i) + " 0 0", 0.01 * i + 0.1);
+ EntFire("scene4_inflaser_right_train", "KeyValue", "angles " + 0.2 * i + " 0 0", 0.01 * i + 0.1);
+ }
+}
+/**
+ *
+ * @param {string} path
+ */
+function SetInfLaser(path) {
+ let flag = 0;
+ for (let i = 2; i < 5; i++) {
+ let h = Entities.FindByName(null, path + i.toString());
+ if (h != null) {
+ // let o = h.GetOrigin();
+ let o = h.GetAbsOrigin();
+ if (flag || RandomInt(0, 100) % 2 != 0) {
+ o = Vector(o.x, o.y, o.z + 66.12);
+ // h.SetOrigin(o);
+ h.Teleport({ position: o });
+ if (i == 3) {
+ flag = 1;
+ }
+ }
+ }
+ }
+}
+Instance.OnScriptInput("ShowInfLaserCount()", ShowInfLaserCount);
+function ShowInfLaserCount() {
+ let n = g_inflaser_counts - 1;
+ if (n == 10) {
+ // PlayEnvSound("ze_atos/env/dominating.mp3");
+ PlayEnvSound("dominating");
+ }
+ if (n == 30) {
+ // PlayEnvSound("ze_atos/env/unstoppable.mp3");
+ PlayEnvSound("unstoppable");
+ }
+ if (n == 50) {
+ // PlayEnvSound("ze_atos/env/godlike.mp3");
+ PlayEnvSound("godlike");
+ }
+ if (n == 100) {
+ // PlayEnvSound("ze_atos/env/holyshit.mp3");
+ PlayEnvSound("holyshit");
+ }
+
+ // ---------------------------------------- 待修复 ----------------------------------------
+ // EntFire("global_text", "AddOutput", "y 0.75");
+ // EntFire("global_text", "SetText", "Infinite Laser: " + n);
+ // EntFire("global_text", "Display", "", 0.01);
+ // ---------------------------------------- 待修复 ----------------------------------------
+ EntFire("global_hud", "SetMessage", "INFINITE LASER: " + n);
+ EntFire("global_hud_zone", "CountPlayersInZone", "", 0.01);
+}
+Instance.OnScriptInput("ShowInfLaserModel()", ShowInfLaserModel);
+function ShowInfLaserModel() {
+
+ // ---------------------------------------- 已修复 ----------------------------------------
+ // let mdl = Entities.CreateByClassname("prop_dynamic");
+ // mdl.SetModel("models/atos/sea_witch/sea_witch.mdl");
+ // mdl.__KeyValueFromString("targetname", "scene4_sea_witch_inflaser");
+ // mdl.__KeyValueFromString("DefaultAnim", "idle");
+ // mdl.SetAngles(0, 270, 0);
+ // mdl.SetOrigin(Vector(12726, -10895, 9165));
+ // ---------------------------------------- 已修复 ----------------------------------------
+
+ const mdlTemp = /** @type {PointTemplate} */ (Instance.FindEntityByName("temp_scene4_sea_witch_inflaser"));
+ const entities = mdlTemp.ForceSpawn();
+ if (!entities) return;
+ const mdl = entities[0];
+ EntFireByHandle(mdl, "SetAnimation", "start", 0, mdl, mdl);
+ EntFireByHandle(mdl, "SetDefaultAnimation", "", 2, mdl, mdl);
+ EntFireByHandle(mdl, "SetAnimation", "attack2_1", 2, mdl, mdl);
+}
+/**
+ *
+ * @param {string} msg
+ * @returns
+ */
+function PlayEnvSound(msg) {
+ if (g_inflaser_sound == 1) {
+ return;
+ }
+ EntFire("boss_env_sound", "StopSound", "");
+ // EntFire("boss_env_sound", "AddOutput", "message " + msg, 0.01);
+ // EntFire("boss_env_sound", "PlaySound", "", 0.02);
+ EntFire("boss_env_sound", "SetSoundEventName", msg, 0.01);
+ EntFire("boss_env_sound", "StartSound", "", 0.02);
+ g_inflaser_sound = 1;
+}
+Instance.OnScriptInput("SetRandomDest()", SetRandomDest);
+function SetRandomDest() {
+ let p1 = [];
+ let p2 = [];
+ for (let i = 1; i < 9; i++) {
+ let t1 = Entities.FindByName(null, "item_human_destination_" + i);
+ let t2 = Entities.FindByName(null, "item_zombie_destination_" + i);
+ if (t1 != null && t2 != null) {
+ // p1.push(t1.GetOrigin());
+ // p2.push(t2.GetOrigin());
+ p1.push(t1.GetAbsOrigin());
+ p2.push(t2.GetAbsOrigin());
+ }
+ }
+ if (p1.length != 0 && p2.length != 0) {
+ for (let i = 1; i < 9; i++) {
+ let h1 = Entities.FindByName(null, "item_human_destination_" + i);
+ let h2 = Entities.FindByName(null, "item_zombie_destination_" + i);
+ if (h1 != null && h2 != null) {
+ let n1 = RandomInt(0, p1.length - 1);
+ let n2 = RandomInt(0, p2.length - 1);
+ // h1.SetOrigin(p1[n1]);
+ // h2.SetOrigin(p2[n2]);
+ h1.Teleport({ position: p1[n1] });
+ h2.Teleport({ position: p2[n2] });
+ // p1.remove(n1);
+ // p2.remove(n2);
+ p1.splice(n1, 1);
+ p2.splice(n2, 1);
+ }
+ }
+ }
+}
+Instance.OnScriptInput("MeasureFireBall()", MeasureFireBall);
+function MeasureFireBall() {
+ let h = Entities.FindByName(null, "item_fireball_measure_target");
+ if (h != null) {
+ // let p = h.GetMoveParent();
+ let p = h.GetParent();
+ if (p != null) {
+ let t = p.GetOwner();
+ if (t != null) {
+ EntFire("item_fireball_measure", "Enable", "");
+ } else {
+ EntFire("item_fireball_measure", "Disable", "");
+ }
+ }
+ }
+}
+
+Instance.OnScriptInput("Health", (inputData) => {
+ const player = inputData.activator;
+ if (!player || !player.IsValid()) return;
+ player.SetHealth(Math.min(player.GetMaxHealth(), player.GetHealth() + 20));
+});
+
+let directionDetectSwitch = false;
+const detectPlayers = new Set();
+Instance.OnScriptInput("StartDirectionDetect", () => {
+ directionDetectSwitch = true;
+ DirectionDetect();
+});
+
+Instance.OnScriptInput("StopDirectionDetect", () => {
+ directionDetectSwitch = false;
+});
+
+Instance.OnScriptInput("AddPlayerInDirectionDetect", (inputData) => {
+ const player = inputData.activator;
+ if (!player || !player.IsValid()) return;
+ detectPlayers.add(player);
+});
+
+Instance.OnScriptInput("RemovePlayerInDirectionDetect", (inputData) => {
+ const player = inputData.activator;
+ if (!player || !player.IsValid()) return;
+ detectPlayers.delete(player);
+});
+
+function DirectionDetect() {
+ if (!directionDetectSwitch) return;
+ detectPlayers.forEach((player, player2, set) => {
+ if (!player || !player.IsValid() || !player.IsAlive()) {
+ detectPlayers.delete(player);
+ return;
+ } else {
+ const angles = player.GetAbsAngles();
+ if (angles.yaw < 0 && angles.yaw > -180) {
+ const velocity = player.GetAbsVelocity();
+ velocity.y = Math.max(velocity.y - 10, 0);
+ player.Teleport({ velocity: velocity });
+ }
+ }
+ });
+ Delay(0.1, DirectionDetect);
+}
+
+Instance.OnPlayerKill((event) => {
+ Instance.EntFireAtTarget({ target: event.player, input: "Alpha", value: 255 });
+});
+
+/**
+ * 旧版csgo API支持
+ * @param {string} name
+ * @param {string} input
+ * @param {import("cs_script/point_script").InputValue} value
+ * @param {number|undefined} delay
+ * @param {Entity|undefined} activator
+ */
+function EntFire(name, input, value = undefined, delay = undefined, activator = undefined) {
+ Instance.EntFireAtName({ name, input, value, delay, activator });
+}
+
+/**
+ * 旧版csgo API支持
+ * @param {Entity|undefined} target
+ * @param {string} input
+ * @param {import("cs_script/point_script").InputValue} value
+ * @param {number|undefined} delay
+ * @param {Entity|undefined} activator
+ * @param {Entity|undefined} caller
+ */
+function EntFireByHandle(target = undefined, input, value = undefined, delay = undefined, activator = undefined, caller = undefined) {
+ if (!target || !target.IsValid()) return;
+ Instance.EntFireAtTarget({ target, input, value, delay, activator, caller });
+}
+
+/**
+ * 旧版csgo API支持
+ * @param {number} min
+ * @param {number} max
+ * @returns {number}
+ */
+function RandomInt(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+/**
+ * 旧版csgo API支持
+ * @param {number} x
+ * @param {number} y
+ * @param {number} z
+ * @returns {import("cs_script/point_script").Vector}
+ */
+function Vector(x, y, z) {
+ return { x, y, z };
+}
+
+class Entities {
+ /**
+ * 旧版csgo API支持
+ * @param {any} previous
+ * @param {string} name
+ * @returns {Entity|undefined}
+ */
+ static FindByName(previous, name) {
+ return Instance.FindEntityByName(name);
+ }
+ /**
+ *
+ * @param {any} previous
+ * @param {string} classname
+ * @param {import("cs_script/point_script").Vector} origin
+ * @param {number} radius
+ * @returns
+ */
+ static FindByClassnameWithin(previous, classname, origin, radius) {
+ const entities = Instance.FindEntitiesByClass(classname);
+ const satisfyEntities = /** @type {Entity[]} */ ([]);
+ for (const entity of entities) {
+ if (!entity || !entity.IsValid()) continue;
+ const entityOrigin = entity.GetAbsOrigin();
+ const distance = VectorDistance(origin, entityOrigin);
+ if (distance <= radius) {
+ satisfyEntities.push(entity);
+ }
+ }
+ if (satisfyEntities) return satisfyEntities;
+ }
+}
+
+/**
+ * 给予玩家不同类型的武器
+ * @param {CSPlayerPawn} player
+ */
+function GiveWeapon(player) {
+ if (!player.FindWeaponBySlot(CSGearSlot.KNIFE)) player.GiveNamedItem("weapon_knife");
+ if (!player.FindWeaponBySlot(CSGearSlot.PISTOL)) player.GiveNamedItem("weapon_elite");
+ if (!player.FindWeaponBySlot(CSGearSlot.RIFLE)) player.GiveNamedItem("weapon_bizon");
+}
+
+/**
+ * @param {import("cs_script/point_script").Vector} vec1
+ * @param {import("cs_script/point_script").Vector} vec2
+ * @returns {import("cs_script/point_script").Vector}
+ */
+function vectorAdd(vec1, vec2) {
+ return { x: vec1.x + vec2.x, y: vec1.y + vec2.y, z: vec1.z + vec2.z };
+}
+
+/**
+ * @param {import("cs_script/point_script").Vector} vec
+ * @param {number} scale
+ * @returns {import("cs_script/point_script").Vector}
+ */
+function vectorScale(vec, scale) {
+ return { x: vec.x * scale, y: vec.y * scale, z: vec.z * scale };
+}
+
+/**
+ * @param {import("cs_script/point_script").QAngle} angles
+ * @returns {import("cs_script/point_script").Vector}
+ */
+function getForwardIgnoreZ(angles) {
+ const { yaw } = angles;
+ const x = Math.cos(yaw);
+ const y = Math.sin(yaw);
+ return { x, y, z: 0 };
+}
+
+/** @type {{ time: number, callback: () => void }[]} */
+const thinkQueue = [];
+
+/**
+ * 延迟执行函数
+ * @param {number} delaySeconds 延迟的秒数
+ * @param {() => void} callback 回调函数
+ */
+function Delay(delaySeconds, callback) {
+ const executeTime = Instance.GetGameTime() + delaySeconds;
+ QueueThink(executeTime, callback);
+}
+
+/**
+ * 异步延迟函数,返回Promise
+ * @param {number} delaySeconds 延迟的秒数
+ * @returns {Promise}
+ */
+function DelayAsync(delaySeconds) {
+ return new Promise((resolve) => {
+ Delay(delaySeconds, resolve);
+ });
+}
+
+/**
+ * 将think任务加入队列
+ * @param {number} time 执行时间
+ * @param {() => void} callback 回调函数
+ */
+function QueueThink(time, callback) {
+ // 查找插入位置(按时间排序)
+ let insertIndex = 0;
+ for (let i = thinkQueue.length - 1; i >= 0; i--) {
+ if (thinkQueue[i].time <= time) {
+ insertIndex = i + 1;
+ break;
+ }
+ }
+
+ // 插入到合适位置
+ thinkQueue.splice(insertIndex, 0, { time, callback });
+
+ // 如果新任务是最早的,则更新think
+ if (insertIndex === 0) {
+ Instance.SetNextThink(time);
+ }
+}
+
+/**
+ * Think循环处理函数
+ */
+function RunThinkQueue() {
+ const currentTime = Instance.GetGameTime();
+
+ // 执行所有到期的任务
+ while (thinkQueue.length > 0 && thinkQueue[0].time <= currentTime) {
+ const task = thinkQueue.shift();
+ if (!task) continue;
+ task.callback();
+ }
+
+ // 更新下一次think
+ if (thinkQueue.length > 0) {
+ Instance.SetNextThink(thinkQueue[0].time);
+ }
+}
+
+// 设置Think循环
+Instance.SetThink(RunThinkQueue);
+
+/**
+ * 计算两点之间的距离
+ * @param {import("cs_script/point_script").Vector} v1 - 第一个点
+ * @param {import("cs_script/point_script").Vector} v2 - 第二个点
+ * @returns {number} 距离
+ */
+function VectorDistance(v1, v2) {
+ const dx = v1.x - v2.x;
+ const dy = v1.y - v2.y;
+ const dz = v1.z - v2.z;
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
+}
\ No newline at end of file
diff --git a/2001/ze_atos/smooth_move.js b/2001/ze_atos/smooth_move.js
new file mode 100644
index 0000000..10eeccc
--- /dev/null
+++ b/2001/ze_atos/smooth_move.js
@@ -0,0 +1,520 @@
+import { Instance } from "cs_script/point_script";
+
+// =============================================
+// 平滑移动系统(支持阶段间隔 + 镜头抖动)
+// =============================================
+
+const EASING_TYPES = {
+ LINEAR: "linear", // 线性匀速
+ EASE_IN: "easeIn", // 缓入(加速)
+ EASE_OUT: "easeOut", // 缓出(减速)
+ EASE_IN_OUT: "easeInOut",// 缓入缓出(先加速后减速)
+ BOUNCE: "bounce", // 弹跳效果
+ ELASTIC: "elastic" // 弹性效果
+};
+
+const MOVEMENT_CONFIGS = {
+ // 原版相机移动(现支持数组写法,以下示例已改为数组)
+ "atos_camera1": {
+ entity: "atos_camera_target1",
+ type: "multi_stage",
+ stages: [
+ {
+ targetPos: [-11927, -10886, 8384],
+ targetAng: [4, 280, 0],
+ duration: 0.01,
+ easing: "linear",
+ },
+ {
+ targetPos: [-12002, -10300, 8384],
+ targetAng: [14, 280, 0],
+ duration: 11,
+ easing: "easeInOut",
+ jitter: { start: 0, end: 5, amplitude: 3, fade: 5 },
+ }
+ ]
+ },
+
+ "atos_camera_2": {
+ entity: "atos_camera_target2",
+ type: "multi_stage",
+ stages: [
+ {
+ targetPos: [9802, -12315.099609, 9219.216003],
+ targetAng: [0, 90, 0],
+ duration: 0.01,
+ easing: "linear",
+ },
+ {
+ targetPos: [9802, -11711, 9597],
+ targetAng: [0, 90, 0],
+ duration: 1,
+ easing: "easeInOut",
+ },
+ {
+ targetPos: [9802, -12003.700195, 9259.593994],
+ targetAng: [0, 90, 0],
+ duration: 5,
+ easing: "easeInOut",
+ }
+ ]
+ },
+};
+
+class SmoothMoveManager {
+ constructor() {
+ this.activeMoves = new Map();
+ this.waitingMultiStage = new Map(); // 等待中的多阶段移动
+ this.thinkInterval = 1/10;
+ this.setupEventHandlers();
+ this.setupThink();
+ }
+
+ setupEventHandlers() {
+ for (const configName in MOVEMENT_CONFIGS) {
+ Instance.OnScriptInput(configName, (data) => this.handlePredefinedMove(configName, data));
+ }
+ Instance.OnScriptInput("stop_all_moves", () => this.stopAllMoves());
+ Instance.OnScriptInput("stop_move", (data) => this.handleStopMove(data));
+ Instance.OnScriptInput("check_moving", (data) => this.handleCheckMoving(data));
+ Instance.OnScriptInput("get_remaining_time", (data) => this.handleGetRemainingTime(data));
+ Instance.OnScriptInput("pause_move", (data) => this.handlePauseMove(data));
+ Instance.OnScriptInput("resume_move", (data) => this.handleResumeMove(data));
+ }
+
+ setupThink() {
+ Instance.SetThink(() => this.think());
+ Instance.SetNextThink(Instance.GetGameTime() + this.thinkInterval);
+ }
+
+ think() {
+ const currentTime = Instance.GetGameTime();
+
+ // 更新活跃移动
+ for (const [entity, moveData] of this.activeMoves) {
+ if (!entity?.IsValid()) { this.activeMoves.delete(entity); continue; }
+ if (!moveData.isPaused) this.updateMove(entity, moveData, currentTime);
+ }
+
+ // 处理等待中的多阶段移动
+ for (const [entity, waitInfo] of this.waitingMultiStage) {
+ if (!entity?.IsValid()) {
+ this.waitingMultiStage.delete(entity);
+ continue;
+ }
+ if (currentTime >= waitInfo.resumeTime) {
+ this.waitingMultiStage.delete(entity);
+ this.continueMultiStage(entity, waitInfo.config, waitInfo.configName, waitInfo.currentStage);
+ }
+ }
+
+ Instance.SetNextThink(currentTime + this.thinkInterval);
+ }
+
+ // 辅助函数:将字符串/数组/对象统一转换为 {x,y,z} 格式
+ normalizeVector(vec) {
+ if (typeof vec === 'string') {
+ const parts = vec.trim().split(/\s+/);
+ if (parts.length === 3) {
+ return {
+ x: parseFloat(parts[0]),
+ y: parseFloat(parts[1]),
+ z: parseFloat(parts[2])
+ };
+ }
+ this.print(`警告: 字符串格式应为 "x y z",当前: ${vec}`);
+ return { x: 0, y: 0, z: 0 };
+ }
+ if (Array.isArray(vec) && vec.length >= 3) {
+ return { x: vec[0], y: vec[1], z: vec[2] };
+ }
+ if (vec && typeof vec === 'object' && 'x' in vec && 'y' in vec && 'z' in vec) {
+ return vec; // 已经是标准对象
+ }
+ this.print(`警告: 无效的向量格式: ${JSON.stringify(vec)}`);
+ return { x: 0, y: 0, z: 0 };
+ }
+
+ // 辅助函数:将字符串/数组/对象统一转换为 {pitch,yaw,roll} 格式
+ normalizeAngles(ang) {
+ if (typeof ang === 'string') {
+ const parts = ang.trim().split(/\s+/);
+ if (parts.length === 3) {
+ return {
+ pitch: parseFloat(parts[0]),
+ yaw: parseFloat(parts[1]),
+ roll: parseFloat(parts[2])
+ };
+ }
+ this.print(`警告: 字符串格式应为 "pitch yaw roll",当前: ${ang}`);
+ return { pitch: 0, yaw: 0, roll: 0 };
+ }
+ if (Array.isArray(ang) && ang.length >= 3) {
+ return { pitch: ang[0], yaw: ang[1], roll: ang[2] };
+ }
+ if (ang && typeof ang === 'object' && 'pitch' in ang && 'yaw' in ang && 'roll' in ang) {
+ return ang;
+ }
+ this.print(`警告: 无效的角度格式: ${JSON.stringify(ang)}`);
+ return { pitch: 0, yaw: 0, roll: 0 };
+ }
+
+ handlePredefinedMove(configName, data) {
+ const config = MOVEMENT_CONFIGS[configName];
+ if (!config) { this.print(`错误: 未找到配置: ${configName}`); return; }
+ const entity = Instance.FindEntityByName(config.entity);
+ if (!entity?.IsValid()) { this.print(`错误: 未找到实体: ${config.entity}`); return; }
+
+ // 停止该实体可能正在进行的任何移动或等待
+ if (this.activeMoves.has(entity)) {
+ this.activeMoves.delete(entity);
+ }
+ if (this.waitingMultiStage.has(entity)) {
+ this.waitingMultiStage.delete(entity);
+ }
+
+ if (config.type) {
+ this.handleSpecialRotation(config, entity, configName);
+ return;
+ }
+
+ const currentPos = entity.GetAbsOrigin();
+ const currentAng = entity.GetAbsAngles();
+
+ // 标准化目标位置和角度
+ const targetPos = config.targetPos ? this.normalizeVector(config.targetPos) : null;
+ const targetAng = config.targetAng ? this.normalizeAngles(config.targetAng) : null;
+
+ if (config.targetEntity) {
+ const target = Instance.FindEntityByName(config.targetEntity);
+ if (target?.IsValid()) {
+ this.moveEntity(entity, target.GetAbsOrigin(), target.GetAbsAngles(), config.duration, config.easing, null, null);
+ }
+ } else if (config.offset) {
+ this.moveEntity(entity,
+ { x: currentPos.x + config.offset.x, y: currentPos.y + config.offset.y, z: currentPos.z + config.offset.z },
+ { pitch: currentAng.pitch + (config.angleOffset?.pitch || 0), yaw: currentAng.yaw + (config.angleOffset?.yaw || 0), roll: currentAng.roll + (config.angleOffset?.roll || 0) },
+ config.duration, config.easing, null, null);
+ } else if (!targetPos) { // 仅旋转
+ this.moveEntity(entity, currentPos, targetAng || currentAng, config.duration, config.easing, null, null);
+ } else {
+ this.moveEntity(entity, targetPos, targetAng, config.duration, config.easing, null, null);
+ }
+ this.print(`开始: ${configName}`);
+ }
+
+ handleSpecialRotation(config, entity, configName) {
+ if (config.type === "pendulum") {
+ // 将 rotations 数组中的每个角度标准化
+ const rotations = config.rotations.map(ang => this.normalizeAngles(ang));
+ let stage = 0;
+ const runStage = () => {
+ if (stage >= rotations.length - 1) { if (!config.loop) return; stage = 0; }
+ this.moveEntity(entity, entity.GetAbsOrigin(), rotations[stage + 1], config.segmentDurations[stage], config.easing, () => { stage++; runStage(); }, null);
+ };
+ runStage();
+ } else if (config.type === "circular") {
+ const endAng = this.normalizeAngles(config.endAng);
+ this.moveEntity(entity, entity.GetAbsOrigin(), endAng, config.duration, config.easing, null, null);
+ } else if (config.type === "multi_stage") {
+ this.continueMultiStage(entity, config, configName, 0);
+ }
+ }
+
+ continueMultiStage(entity, config, configName, currentStage) {
+ if (currentStage >= config.stages.length) {
+ this.print(`多阶段旋转完成: ${configName}`);
+ return;
+ }
+ const stage = config.stages[currentStage];
+ // 标准化当前阶段的 targetPos 和 targetAng
+ const targetPos = stage.targetPos ? this.normalizeVector(stage.targetPos) : entity.GetAbsOrigin();
+ const targetAng = this.normalizeAngles(stage.targetAng);
+ this.print(`阶段 ${currentStage+1}/${config.stages.length}: 移动到 (${targetPos.x}, ${targetPos.y}, ${targetPos.z}),旋转到 (${targetAng.pitch}, ${targetAng.yaw}, ${targetAng.roll})`);
+ this.moveEntity(
+ entity,
+ targetPos,
+ targetAng,
+ stage.duration,
+ stage.easing,
+ () => {
+ // 阶段完成回调
+ this.print(`阶段 ${currentStage+1}/${config.stages.length}: 完成`);
+ // 检查是否有后延迟
+ const postDelay = stage.postDelay || 0;
+ if (postDelay > 0) {
+ this.print(`等待 ${postDelay} 秒后进入下一阶段...`);
+ const resumeTime = Instance.GetGameTime() + postDelay;
+ this.waitingMultiStage.set(entity, {
+ config,
+ configName,
+ currentStage: currentStage + 1,
+ resumeTime
+ });
+ } else {
+ // 无延迟,继续下一阶段
+ this.continueMultiStage(entity, config, configName, currentStage + 1);
+ }
+ },
+ stage.jitter // 传递抖动参数
+ );
+ }
+
+ handleStopMove(data) {
+ const entity = this.getEntityFromData(data);
+ if (entity) {
+ if (this.stopMove(entity)) this.print(`停止移动: ${entity.GetEntityName()}`);
+ if (this.waitingMultiStage.delete(entity)) this.print(`取消等待: ${entity.GetEntityName()}`);
+ }
+ }
+
+ handlePauseMove(data) {
+ const entity = this.getEntityFromData(data);
+ if (entity && this.activeMoves.has(entity)) {
+ this.activeMoves.get(entity).isPaused = true;
+ this.activeMoves.get(entity).pauseTime = Instance.GetGameTime();
+ this.print(`暂停移动: ${entity.GetEntityName()}`);
+ }
+ }
+
+ handleResumeMove(data) {
+ const entity = this.getEntityFromData(data);
+ if (entity && this.activeMoves.has(entity)) {
+ const m = this.activeMoves.get(entity);
+ if (m.isPaused) { m.startTime += Instance.GetGameTime() - m.pauseTime; m.isPaused = false; this.print(`恢复移动: ${entity.GetEntityName()}`); }
+ }
+ }
+
+ handleCheckMoving(data) {
+ const entity = this.getEntityFromData(data);
+ if (entity) {
+ const moving = this.activeMoves.has(entity);
+ const waiting = this.waitingMultiStage.has(entity);
+ const paused = moving && this.activeMoves.get(entity).isPaused;
+ let status = '静止';
+ if (waiting) status = '等待中';
+ else if (paused) status = '暂停';
+ else if (moving) status = '移动中';
+ this.print(`${entity.GetEntityName()}: ${status}`);
+ }
+ }
+
+ handleGetRemainingTime(data) {
+ const entity = this.getEntityFromData(data);
+ if (entity) {
+ if (this.activeMoves.has(entity)) {
+ this.print(`${entity.GetEntityName()} 剩余移动时间: ${this.getRemainingTime(entity).toFixed(2)}秒`);
+ } else if (this.waitingMultiStage.has(entity)) {
+ const waitInfo = this.waitingMultiStage.get(entity);
+ const remaining = waitInfo.resumeTime - Instance.GetGameTime();
+ this.print(`${entity.GetEntityName()} 剩余等待时间: ${remaining.toFixed(2)}秒`);
+ } else {
+ this.print(`${entity.GetEntityName()} 没有进行中的移动`);
+ }
+ }
+ }
+
+ getEntityFromData(data) {
+ const name = data.caller?.GetEntityName() || data.activator?.GetEntityName();
+ return name ? Instance.FindEntityByName(name) : null;
+ }
+
+ stopAllMoves() {
+ const count = this.activeMoves.size;
+ const waitCount = this.waitingMultiStage.size;
+ this.activeMoves.clear();
+ this.waitingMultiStage.clear();
+ this.print(`已停止 ${count} 个移动,取消 ${waitCount} 个等待`);
+ }
+
+ stopMove(entity) { return this.activeMoves.delete(entity); }
+
+ // moveEntity 增加 jitter 参数
+ moveEntity(entity, targetPos, targetAng, duration, easing, onComplete = null, jitter = null) {
+ if (!entity?.IsValid()) { this.print("错误: 实体无效,无法移动"); return false; }
+ if (this.activeMoves.has(entity)) {
+ this.print(`警告: 实体正在移动中,将覆盖之前的移动`);
+ this.activeMoves.delete(entity);
+ }
+ this.activeMoves.set(entity, {
+ startPos: entity.GetAbsOrigin(),
+ targetPos, startAng: entity.GetAbsAngles(), targetAng,
+ startTime: Instance.GetGameTime(), duration, easing,
+ onComplete, isCompleted: false, isPaused: false,
+ jitter
+ });
+ return true;
+ }
+
+ updateMove(entity, moveData, currentTime) {
+ const elapsed = currentTime - moveData.startTime;
+ const progress = Math.min(elapsed / moveData.duration, 1.0);
+ const eased = this.applyEasing(progress, moveData.easing);
+
+ // 基础插值位置和角度
+ const basePos = this.lerpVector(moveData.startPos, moveData.targetPos, eased);
+ let baseAng = this.lerpAngles(moveData.startAng, moveData.targetAng, eased);
+
+ // 应用抖动(基于局部轴)
+ if (moveData.jitter) {
+ const j = moveData.jitter;
+ const startSec = j.start;
+ const endSec = j.end;
+ if (elapsed >= startSec && elapsed <= endSec) {
+ const jitterRemaining = endSec - elapsed;
+ const fadeTime = j.fade !== undefined ? j.fade : 0.5;
+ let fadeFactor = 1.0;
+ if (jitterRemaining < fadeTime) {
+ fadeFactor = jitterRemaining / fadeTime;
+ }
+ const effectiveAmplitude = j.amplitude * fadeFactor;
+
+ // 生成绕局部右轴 (X) 和局部上轴 (Z) 的随机偏移
+ const deltaPitch = (Math.random() * 2 - 1) * effectiveAmplitude;
+ const deltaYaw = (Math.random() * 2 - 1) * effectiveAmplitude;
+
+ // 应用局部抖动
+ baseAng = this.applyLocalJitter(baseAng, deltaPitch, deltaYaw);
+ }
+ }
+
+ entity.Teleport(basePos, baseAng);
+
+ if (progress >= 1.0 && !moveData.isCompleted) {
+ moveData.isCompleted = true;
+ entity.Teleport(moveData.targetPos, moveData.targetAng);
+ this.activeMoves.delete(entity);
+ if (moveData.onComplete) {
+ moveData.onComplete(entity);
+ }
+ }
+ }
+
+ // ---------- 新增:局部抖动辅助函数 ----------
+ applyLocalJitter(angles, deltaPitch, deltaYaw) {
+ let qBase = SmoothMoveManager.quaternionFromEuler(angles.pitch, angles.yaw, angles.roll);
+ let qPitch = SmoothMoveManager.quaternionFromAxisAngle({x:1, y:0, z:0}, deltaPitch);
+ let qYaw = SmoothMoveManager.quaternionFromAxisAngle({x:0, y:0, z:1}, deltaYaw);
+ // 先绕 X 再绕 Z(顺序可互换,小幅度时影响不大)
+ let qJitter = SmoothMoveManager.quaternionMultiply(qYaw, qPitch);
+ let qFinal = SmoothMoveManager.quaternionMultiply(qBase, qJitter);
+ return SmoothMoveManager.quaternionToEuler(qFinal);
+ }
+
+ // ---------- 静态四元数工具 ----------
+ static degToRad = Math.PI / 180;
+ static radToDeg = 180 / Math.PI;
+
+ static quaternionFromAxisAngle(axis, angleDeg) {
+ let half = angleDeg * this.degToRad * 0.5;
+ let s = Math.sin(half);
+ return {
+ x: axis.x * s,
+ y: axis.y * s,
+ z: axis.z * s,
+ w: Math.cos(half)
+ };
+ }
+
+ static quaternionFromEuler(pitch, yaw, roll) {
+ let cy = Math.cos(yaw * this.degToRad * 0.5);
+ let sy = Math.sin(yaw * this.degToRad * 0.5);
+ let cp = Math.cos(pitch * this.degToRad * 0.5);
+ let sp = Math.sin(pitch * this.degToRad * 0.5);
+ let cr = Math.cos(roll * this.degToRad * 0.5);
+ let sr = Math.sin(roll * this.degToRad * 0.5);
+ // ZYX order: yaw * pitch * roll
+ return {
+ w: cy * cp * cr + sy * sp * sr,
+ x: cy * cp * sr - sy * sp * cr,
+ y: cy * sp * cr + sy * cp * sr,
+ z: sy * cp * cr - cy * sp * sr
+ };
+ }
+
+ static quaternionMultiply(q1, q2) {
+ return {
+ w: q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,
+ x: q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,
+ y: q1.w * q2.y - q1.x * q2.z + q1.y * q2.w + q1.z * q2.x,
+ z: q1.w * q2.z + q1.x * q2.y - q1.y * q2.x + q1.z * q2.w
+ };
+ }
+
+ static quaternionToEuler(q) {
+ let sinr_cosp = 2 * (q.w * q.x + q.y * q.z);
+ let cosr_cosp = 1 - 2 * (q.x * q.x + q.y * q.y);
+ let roll = Math.atan2(sinr_cosp, cosr_cosp) * this.radToDeg;
+
+ let sinp = 2 * (q.w * q.y - q.z * q.x);
+ let pitch;
+ if (Math.abs(sinp) >= 1)
+ pitch = Math.sign(sinp) * 90; // 限制在 ±90°
+ else
+ pitch = Math.asin(sinp) * this.radToDeg;
+
+ let siny_cosp = 2 * (q.w * q.z + q.x * q.y);
+ let cosy_cosp = 1 - 2 * (q.y * q.y + q.z * q.z);
+ let yaw = Math.atan2(siny_cosp, cosy_cosp) * this.radToDeg;
+
+ return { pitch, yaw, roll };
+ }
+ // -----------------------------------------
+
+ lerpVector(a, b, t) {
+ return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t, z: a.z + (b.z - a.z) * t };
+ }
+
+ lerpAngles(a, b, t) {
+ const lerp = (a, b) => { let d = b - a; if (d > 180) d -= 360; if (d < -180) d += 360; return a + d * t; };
+ return { pitch: lerp(a.pitch, b.pitch), yaw: lerp(a.yaw, b.yaw), roll: lerp(a.roll, b.roll) };
+ }
+
+ applyEasing(t, type) {
+ switch(type) {
+ case "easeIn": return t*t;
+ case "easeOut": return 1-(1-t)*(1-t);
+ case "easeInOut": return t<0.5?2*t*t:1-Math.pow(-2*t+2,2)/2;
+ case "bounce":
+ if (t<1/2.75) return 7.5625*t*t;
+ if (t<2/2.75) return 7.5625*(t-=1.5/2.75)*t+0.75;
+ if (t<2.5/2.75) return 7.5625*(t-=2.25/2.75)*t+0.9375;
+ return 7.5625*(t-=2.625/2.75)*t+0.984375;
+ case "elastic":
+ return t===0?0:t===1?1:-Math.pow(2,10*t-10)*Math.sin((t*10-10.75)*(2*Math.PI)/3);
+ default: return t;
+ }
+ }
+
+ getRemainingTime(entity) {
+ if (!this.activeMoves.has(entity)) return 0;
+ const m = this.activeMoves.get(entity);
+ if (m.isPaused) return m.duration - (m.pauseTime - m.startTime);
+ return Math.max(0, m.duration - (Instance.GetGameTime() - m.startTime));
+ }
+
+ print(text) { Instance.Msg("[平滑移动] " + text); }
+}
+
+// =============================================
+// 初始化
+// =============================================
+
+const smoothMoveManager = new SmoothMoveManager();
+
+Instance.Msg("=====================================");
+Instance.Msg("平滑移动系统 v2.8 已加载 (支持阶段间隔 + 局部轴抖动)");
+Instance.Msg("=====================================");
+Instance.Msg("新增功能:");
+Instance.Msg("- targetPos / targetAng 现支持数组写法,例如 [x,y,z] 或 [pitch,yaw,roll]");
+Instance.Msg("- 每个阶段可设置 postDelay 实现间隔");
+Instance.Msg("- 每个阶段可设置 jitter 实现镜头抖动(格式:{ start: 秒数, end: 秒数, amplitude: 度数 })");
+Instance.Msg("- 抖动基于镜头自身的局部轴(绕右轴上下晃动,绕上轴左右晃动)");
+Instance.Msg("- 抖动幅度在剩余时间 <0.5秒时自动线性衰减至0");
+Instance.Msg("示例: senlin_camera0 第3阶段演示了抖动效果 (0.5秒~1.8秒抖动)");
+Instance.Msg("可用命令:");
+Instance.Msg("- rotate_camera_look_up_down_smooth");
+Instance.Msg("- rotate_camera_look_up_down_bounce");
+Instance.Msg("- senlin_camera0 (带间隔+抖动的复合运镜)");
+Instance.Msg("其他命令同上版本");
+Instance.Msg("=====================================");
\ No newline at end of file
diff --git a/2001/ze_atos/use_detect.js b/2001/ze_atos/use_detect.js
new file mode 100644
index 0000000..481d023
--- /dev/null
+++ b/2001/ze_atos/use_detect.js
@@ -0,0 +1,64 @@
+import { Instance, CSPlayerPawn, CSInputs, Entity } from "cs_script/point_script";
+
+/**
+ * E键检测脚本
+ * 此脚本由于解决移植地图中的button神器检测方式导致的各种bug
+ * 此脚本为针对fys降低检测频率后的特供版本
+ * 此脚本由皮皮猫233编写
+ * 2026/5/14
+ */
+
+const itemButtonName = [
+ "item_kirin_button",
+ "item_particle_gun_button",
+ "item_fireball_button",
+ "item_lightning_shield_button",
+ "item_bkb_button",
+ "item_magic_button",
+ "item_scorched_earth_button",
+ "item_lightning_button",
+ "item_wind_rasengan_button",
+ "item_rasengan_button",
+ "item_rock_monster_button",
+ "item_water_button",
+ "item_gift_button",
+ "item_blackhole_button",
+ "item_alacrity_button",
+ "item_war_stomp_button",
+ "item_poison_nova_button",
+ "item_cure_button",
+ "item_firestorm_button",
+ "item_black_king_bar_button",
+ "item_thunder_fire_button",
+ "item_arc_lightning_button",
+ "item_health_human_button",
+ "item_wall_button"
+];
+
+Instance.SetNextThink(Instance.GetGameTime());
+Instance.SetThink(() => {
+ for (const buttonName of itemButtonName) {
+ const buttons = Instance.FindEntitiesByName(buttonName + "*");
+ if (buttons.length === 1) {
+ const button = buttons[0];
+ CheckPressingButton(button);
+ } else if (buttons.length > 1) {
+ for (const button of buttons) {
+ CheckPressingButton(button);
+ }
+ }
+ }
+ Instance.SetNextThink(Instance.GetGameTime() + 0.1);
+});
+
+/**
+ * 检测该开关是否被本人按下
+ * @param {Entity} button
+ */
+function CheckPressingButton(button) {
+ const player = /** @type {CSPlayerPawn|undefined} */ (button.GetParent()?.GetOwner());
+ if (!player || !player.IsValid()) return;
+ if (player.IsInputPressed(CSInputs.USE)) {
+ Instance.EntFireAtTarget({ target: button, input: "Press", activator: player });
+ }
+}
\ No newline at end of file