Skip to main content

Testing Setup

A script which sets up a testing environment with infinite round time, and showcases the OnBeforePlayerDamage event.

found at Counter-Strike Global Offensive\content\csgo\maps\editor\zoo\scripts\setup.js

import { CSDamageFlags, CSDamageTypes, Entity, Instance } from "cs_script/point_script";

Instance.ServerCommand("sv_cheats 1");
Instance.ServerCommand("mp_warmup_offline_enabled 1");
Instance.ServerCommand("mp_warmup_pausetimer 1");

let bFirstActivate = true;
Instance.OnPlayerActivate(({ player }) => {
if (bFirstActivate) {
bFirstActivate = false;
player.JoinTeam(2);
Instance.ServerCommand("bot_stop 1");
Instance.ServerCommand("bot_add");
}

ShowWelcome(player.GetPlayerSlot());
});

Instance.OnModifyPlayerDamage(({ player }) => {
if (player.GetOriginalPlayerController().IsBot()) {
return { damageFlags: CSDamageFlags.PREVENT_DEATH };
}
});

Instance.OnPlayerDamage((event) => {
if (event.damageTypes == CSDamageTypes.SLASH) {
Instance.QueueAfterThinks(() => {
const velocity = event.player.GetAbsVelocity();
velocity.z += 500;
event.player.Teleport({ velocity });
});
}
});

let welcomeLayout = null;
function GetWelcomeLayout() {
if (!(welcomeLayout instanceof Entity) || !welcomeLayout.IsValid()) {
welcomeLayout = Instance.FindEntitiesByName("welcome_layout")[0];
}
return Instance.FindEntitiesByName("welcome_layout")[0];
}

function ShowWelcome(playerSlot) {
GetWelcomeLayout().SetHasClassForPlayer(playerSlot, "dialog", "Dismissed", false);
GetWelcomeLayout().SetInputCaptureEnabled(playerSlot, true);
}

function HideWelcome(playerSlot) {
GetWelcomeLayout().SetHasClassForPlayer(playerSlot, "dialog", "Dismissed", true);
GetWelcomeLayout().SetInputCaptureEnabled(playerSlot, false);
}

Instance.OnCustomHudClicked((event) => {
if (event.layout === GetWelcomeLayout() && event.buttonId === "dismiss_button") {
HideWelcome(event.player.GetPlayerSlot());
}
});

Instance.RegisterCheatCommand("script_zoo_show_welcome", () => {
for (const player of Instance.GetAllPlayerControllers()) {
ShowWelcome(player.GetPlayerSlot());
}
});