From 6f96246a6fae04df6ebb7b858041b4c679f83b9d Mon Sep 17 00:00:00 2001 From: PiPiCat233 Date: Sun, 3 May 2026 17:01:24 +0800 Subject: [PATCH 1/3] 0503 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ·新增阿托斯脚本 --- 2001/ze_atos/database.js | 141 ++ 2001/ze_atos/function.js | 2827 +++++++++++++++++++++++++++++++++++ 2001/ze_atos/smooth_move.js | 520 +++++++ 2001/ze_atos/use_detect.js | 63 + 4 files changed, 3551 insertions(+) create mode 100644 2001/ze_atos/database.js create mode 100644 2001/ze_atos/function.js create mode 100644 2001/ze_atos/smooth_move.js create mode 100644 2001/ze_atos/use_detect.js 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..d766a9f --- /dev/null +++ b/2001/ze_atos/function.js @@ -0,0 +1,2827 @@ +import { Instance, Entity, CSPlayerPawn, CSGearSlot, PointTemplate } from "cs_script/point_script"; +/** + * 此脚本由皮皮猫233移植 + * 2026/3/27 + */ +// 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 (const target of targets) { + // if (target.GetTeam() == 2) { + 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); + }; + break; + } + } + } + } +} +/** + * + * @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); +} + +/** + * 旧版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..67dbbc4 --- /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/64; + 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..209e3e2 --- /dev/null +++ b/2001/ze_atos/use_detect.js @@ -0,0 +1,63 @@ +import { Instance, CSPlayerPawn, CSInputs, Entity } from "cs_script/point_script"; + +/** + * E键检测脚本 + * 此脚本由于解决移植地图中的button神器检测方式导致的各种bug + * 此脚本由皮皮猫233编写 + * 2026/3/26 + */ + +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()); +}); + +/** + * 检测该开关是否被本人按下 + * @param {Entity} button + */ +function CheckPressingButton(button) { + const player = /** @type {CSPlayerPawn|undefined} */ (button.GetParent()?.GetOwner()); + if (!player || !player.IsValid()) return; + if (player.WasInputJustPressed(CSInputs.USE)) { + Instance.EntFireAtTarget({ target: button, input: "Press", activator: player }); + } +} \ No newline at end of file From 2ef810286380515fed8b051983b229341ba401d3 Mon Sep 17 00:00:00 2001 From: PiPiCat233 Date: Thu, 7 May 2026 23:21:24 +0800 Subject: [PATCH 2/3] 0507 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ·优化闪电链演出效果 ·添加玩家死亡后的透明度重置 --- 2001/ze_atos/function.js | 84 +++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/2001/ze_atos/function.js b/2001/ze_atos/function.js index d766a9f..fbef7e6 100644 --- a/2001/ze_atos/function.js +++ b/2001/ze_atos/function.js @@ -1,7 +1,7 @@ import { Instance, Entity, CSPlayerPawn, CSGearSlot, PointTemplate } from "cs_script/point_script"; /** * 此脚本由皮皮猫233移植 - * 2026/3/27 + * 2026/5/7 */ // let item_arc_lightning_pos1 = null; Instance.OnScriptInput("item_arc_lightning_pos1 <- null;", () => item_arc_lightning_pos1 = Vector(0, 0, 0)); @@ -1142,46 +1142,48 @@ function SpawnArcLightning(flag, activator) { // } if (targets && targets.length !== 0) { // if (!isFind) { - for (const target of targets) { + for (let i = 0; i < targets.length; i++) { + const target = targets[i]; // if (target.GetTeam() == 2) { - 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); + 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); } - // 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); - }; - break; - } + } + }); } } } @@ -2622,6 +2624,10 @@ function DirectionDetect() { Delay(0.1, DirectionDetect); } +Instance.OnPlayerKill((event) => { + Instance.EntFireAtTarget({ target: event.player, input: "Alpha", value: 255 }); +}); + /** * 旧版csgo API支持 * @param {string} name From ef32b56f88fce3e82aa2ef98077278bcd49b8bc2 Mon Sep 17 00:00:00 2001 From: PiPiCat233 Date: Thu, 14 May 2026 23:48:47 +0800 Subject: [PATCH 3/3] 0514 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ·降低检测频率到10tick --- 2001/ze_atos/smooth_move.js | 2 +- 2001/ze_atos/use_detect.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/2001/ze_atos/smooth_move.js b/2001/ze_atos/smooth_move.js index 67dbbc4..10eeccc 100644 --- a/2001/ze_atos/smooth_move.js +++ b/2001/ze_atos/smooth_move.js @@ -65,7 +65,7 @@ class SmoothMoveManager { constructor() { this.activeMoves = new Map(); this.waitingMultiStage = new Map(); // 等待中的多阶段移动 - this.thinkInterval = 1/64; + this.thinkInterval = 1/10; this.setupEventHandlers(); this.setupThink(); } diff --git a/2001/ze_atos/use_detect.js b/2001/ze_atos/use_detect.js index 209e3e2..481d023 100644 --- a/2001/ze_atos/use_detect.js +++ b/2001/ze_atos/use_detect.js @@ -3,8 +3,9 @@ import { Instance, CSPlayerPawn, CSInputs, Entity } from "cs_script/point_script /** * E键检测脚本 * 此脚本由于解决移植地图中的button神器检测方式导致的各种bug + * 此脚本为针对fys降低检测频率后的特供版本 * 此脚本由皮皮猫233编写 - * 2026/3/26 + * 2026/5/14 */ const itemButtonName = [ @@ -47,7 +48,7 @@ Instance.SetThink(() => { } } } - Instance.SetNextThink(Instance.GetGameTime()); + Instance.SetNextThink(Instance.GetGameTime() + 0.1); }); /** @@ -57,7 +58,7 @@ Instance.SetThink(() => { function CheckPressingButton(button) { const player = /** @type {CSPlayerPawn|undefined} */ (button.GetParent()?.GetOwner()); if (!player || !player.IsValid()) return; - if (player.WasInputJustPressed(CSInputs.USE)) { + if (player.IsInputPressed(CSInputs.USE)) { Instance.EntFireAtTarget({ target: button, input: "Press", activator: player }); } } \ No newline at end of file