Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion 2001/ze_bang_dream_mygo/accelerate_control.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ Instance.OnRoundEnd((event) => {
// 回合重启时恢复加速度参数
Instance.OnRoundStart(() => {
Instance.ServerCommand("sv_accelerate 5.5");
});
});
2 changes: 1 addition & 1 deletion 2001/ze_bang_dream_mygo/chat.js
Original file line number Diff line number Diff line change
Expand Up @@ -308,4 +308,4 @@ function getForward(angles) {
y: Math.sin(yawRadians) * hScale,
z: -Math.sin(pitchRadians)
};
}
}
37 changes: 37 additions & 0 deletions 2001/ze_bang_dream_mygo/duck.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { CSInputs, CSPlayerPawn, Instance } from "cs_script/point_script";

/**
* 蹲键落地脚本
* 此脚本由皮皮猫233编写
* 2026/3/10
*/

let detectSwitch = false;

Instance.OnScriptInput("Enable", () => {
detectSwitch = true;
Instance.SetNextThink(Instance.GetGameTime());
});

Instance.OnScriptInput("Disable", () => {
detectSwitch = false;
});

Instance.OnRoundStart(() => {
detectSwitch = false;
})

Instance.SetThink(() => {
if (!detectSwitch) return;

const players = /** @type {CSPlayerPawn[]} */ (Instance.FindEntitiesByClass("player"));
for (const player of players) {
if (player.WasInputJustPressed(CSInputs.DUCK)) {
if (!player || !player.IsValid() || !player.IsAlive() || player.GetTeamNumber() !== 3) continue;
const currentVelocity = player.GetAbsVelocity();
currentVelocity.z = -250;
player.Teleport({ velocity: currentVelocity });
}
}
Instance.SetNextThink(Instance.GetGameTime());
});
2 changes: 1 addition & 1 deletion 2001/ze_bang_dream_mygo/item_tomorrin.js
Original file line number Diff line number Diff line change
Expand Up @@ -271,4 +271,4 @@ Instance.OnPlayerDisconnect((event) => {
}
}
});
});
});
2 changes: 1 addition & 1 deletion 2001/ze_bang_dream_mygo/lv2_mg.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,4 +247,4 @@ function isAngleInRange(angle, center, range) {
} else {
return angle >= start && angle <= end;
}
}
}
12 changes: 10 additions & 2 deletions 2001/ze_bang_dream_mygo/music_game.js

Large diffs are not rendered by default.

11 changes: 8 additions & 3 deletions 2001/ze_bang_dream_mygo/music_list.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ import { Instance, PointTemplate } from "cs_script/point_script";
* 此脚本由皮皮猫233编写
* 仅供MyGO地图使用
* 交流学习请联系作者
* 2026/1/29
* 2026/3/10
*/

const pickNumber = 5;

let currentMusic = "";
const musicList = ["FireBird", "Odysseus", "ShukuseiLoliKamiRequiem", "Miiro", "NceSBurn", "MortalWithYou", "UniversalCollapse", "NeoAspect", "TakeRisshu", "DistortedFate", "RageStrikes", "IAlwaysDo", "MaleFemale", "DaDongBei", "Louder", "NamelessPassion", "BeethovenVirus", "YukiNoShizukuAmeNoOto", "TVsShark", "Oborozuki", "Jericho", "KimitoatsumatteSeizaninaretara", "MusicaCaelestis", "SeeYouAgain", "HatedByLife", "InternetOverdose", "FeastOfMouse", "CornerstoneCorolla", "Tanebi", "ImprisonedXII", "Refrain", "SilhouetteDance", "SpringSunshine", "Encoder", "NamaeNoNaiKaibutsu", "TheTempest", "TengokuJigokuguni", "Mayoiuta", "Hitoshizuku", "BeepBeepImASheep", "TheOtherSide", "MyDemons", "Mujinku", "Rrharil", "Terrasphere", "DossolesHoliday"];
const musicList = ["GongXiFaCai", "TheTaleOfACruelWorld", "NewYorkBackRaise", "TheFarSideStarSFarewell", "InternetYamero", "DearYou", "BraveShine", "SongIAm", "FireBird", "Odysseus", "ShukuseiLoliKamiRequiem", "Miiro", "NceSBurn", "MortalWithYou", "UniversalCollapse", "NeoAspect", "TakeRisshu", "DistortedFate", "RageStrikes", "IAlwaysDo", "MaleFemale", "DaDongBei", "Louder", "NamelessPassion", "BeethovenVirus", "YukiNoShizukuAmeNoOto", "TVsShark", "Oborozuki", "Jericho", "KimitoatsumatteSeizaninaretara", "MusicaCaelestis", "SeeYouAgain", "HatedByLife", "InternetOverdose", "FeastOfMouse", "CornerstoneCorolla", "Tanebi", "ImprisonedXII", "Refrain", "SilhouetteDance", "SpringSunshine", "Encoder", "NamaeNoNaiKaibutsu", "TheTempest", "TengokuJigokuguni", "Mayoiuta", "Hitoshizuku", "BeepBeepImASheep", "TheOtherSide", "MyDemons", "Mujinku", "Rrharil", "Terrasphere", "DossolesHoliday"];
const playedMusic = /** @type {Array<string>} */ ([]);

// 设置最新谱面
Instance.OnScriptInput("New", (inputData) => {
currentMusic = "SongIAm";
currentMusic = "UmapyoiDensetsu";
Instance.EntFireAtName({ name: "music_game_soundevent", input: "SetSoundEventName", value: currentMusic });
});

Expand Down Expand Up @@ -80,6 +80,11 @@ Instance.OnScriptInput("SpringSunshine", (inputData) => {
Instance.EntFireAtName({ name: "music_game_soundevent", input: "SetSoundEventName", value: currentMusic });
});

Instance.OnScriptInput("GongXiFaCai", (inputData) => {
currentMusic = "GongXiFaCai";
Instance.EntFireAtName({ name: "music_game_soundevent", input: "SetSoundEventName", value: currentMusic });
});

/**
* 无放回抽样
* @param {Array<string>} array
Expand Down
142 changes: 142 additions & 0 deletions 2001/ze_bang_dream_mygo/rank_data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
import { CSPlayerPawn, Instance } from "cs_script/point_script";

/**
* 排行榜脚本
* 此脚本部分内容由DeepSeek生成
* 2026/3/2
*/

/**
* 排行记录对象
* @typedef {Object} RankData
* @property {string} class - 数据类型
* @property {Object.<string, number>} players - 玩家记录
*/

// Instance.OnScriptInput("ShowRank", () => {

// // 判断是否为json对象
// const data = tryParseJSON(Instance.GetSaveData());

// if (data.class !== "rank") return;
// const showers = getTopPlayers(data);
// let show = "";
// for (const shower of showers) {
// show = show + shower.name + ":" + shower.count + "\n";
// }
// Instance.EntFireAtName({ name: "rank_data_text", input: "SetMessage", value: show });
// });

// Instance.OnScriptInput("UpdataRank", () => {
// let rank = /** @type {RankData} */ ({});

// // 判断是否为json对象
// const data = tryParseJSON(Instance.GetSaveData());

// // 若数据类型不相符,则新建一个对象
// if (data.class !== "rank") {
// rank = {
// "class": "rank",
// "players": {}
// }
// } else rank = data;

// const players = /** @type {CSPlayerPawn[]} */ (Instance.FindEntitiesByClass("player"));
// for (const player of players) {
// if (!player || !player.IsValid() || !player.IsAlive() || player.GetTeamNumber() !== 3) continue;
// const name = player.GetPlayerController()?.GetPlayerName();
// if (!name) continue;
// increaseClearCount(name, rank);
// }
// const json = JSON.stringify(rank, null, 2);
// Instance.SetSaveData(json);
// });

// 开局时显示计分板
Instance.OnRoundStart(() => {

// 判断是否为json对象
const data = tryParseJSON(Instance.GetSaveData());

if (data.class !== "rank") return;
const showers = getTopPlayers(data);
let show = "";
for (const shower of showers) {
show = show + shower.name + ":" + shower.count + "\n";
}
Instance.EntFireAtName({ name: "rank_data_text", input: "SetMessage", value: show });
});


// 人类胜利时更新排行榜
Instance.OnRoundEnd((event) => {
if (event.winningTeam !== 3) return;
let rank = /** @type {RankData} */ ({});

// 判断是否为json对象
const data = tryParseJSON(Instance.GetSaveData());

// 若数据类型不相符,则新建一个对象
if (data.class !== "rank") {
rank = {
"class": "rank",
"players": {}
}
} else rank = data;

const players = /** @type {CSPlayerPawn[]} */ (Instance.FindEntitiesByClass("player"));
for (const player of players) {
if (!player || !player.IsValid() || !player.IsAlive() || player.GetTeamNumber() !== 3) continue;
const name = player.GetPlayerController()?.GetPlayerName();
if (!name) continue;
increaseClearCount(name, rank);
}
const json = JSON.stringify(rank, null, 2);
Instance.SetSaveData(json);
});

/**
* 检查并解析json内容
* @param {*} str
* @returns
*/
function tryParseJSON(str) {
try {
return JSON.parse(str);
} catch (e) {
return {};
}
}

/**
* 增加指定玩家的通关次数。
* 如果玩家不存在,则自动注册并将通关次数初始化为 1。
* @param {string} playerName - 玩家名称
* @param {RankData} rank - 玩家记录
* @returns {number} 更新后的通关次数
*/
function increaseClearCount(playerName, rank) {
if (typeof playerName !== 'string' || playerName.trim() === '') return 0;

if (rank.players.hasOwnProperty(playerName)) {
rank.players[playerName] += 1;
} else {
rank.players[playerName] = 1;
}
return rank.players[playerName];
}

/**
* 获取当前通关次数排名前五的玩家信息。
* 返回按通关次数降序排列的前五名玩家数组,若不足五人则返回全部。
* @param {RankData} rank - 玩家记录
* @returns {Array.<{name: string, count: number}>} 前五名玩家列表
*/
function getTopPlayers(rank) {
const entries = Object.entries(rank.players); // [name, count]
const sorted = entries
.map(([name, count]) => ({ name, count }))
.sort((a, b) => b.count - a.count); // 降序排序

return sorted.slice(0, 5);
}