Importing Models and Custom Text - ItsDeltin/Overwatch-Script-To-Workshop GitHub Wiki

Creating the model

OSTW Code
import "C:\Users\HDdel\Desktop\Blender OSTW\cube.obj" as cube;

define playervar location;
define playervar cubeEffects = null;

rule: "Create Cube"
Event.OngoingPlayer
if (IsButtonHeld(EventPlayer(), Button.Interact))
{
    location = PositionOf();

    if (cubeEffects == null)
    {
        // Create the effect
        cubeEffects = ShowWireframe(cube, AllPlayers(), location, Vector(0, 0, 0), 1, EffectRev.VisibleToPositionAndRadius, true);
    }
}

rule: "Destroy Cube"
Event.OngoingPlayer
if (IsButtonHeld(EventPlayer(), Button.Ultimate))
{
    DestroyEffectArray(cubeEffects, 6);
    cubeEffects = null;
}
Workshop Code: Try it out! Copy into Overwatch.
// --- Variable Guide ---
// global A[0] INTERNAL : Multidimensional Array Builder
// player A[0] location
// player A[1] cubeEffects
// player A[2] INTERNAL : Model Effects
// player A[3] INTERNAL : DestroyEffectArray index
// player A[4] INTERNAL : ContinueSkip
// player A[5] INTERNAL : ContinueSkip temp holder

rule("INTERNAL : Initial Player Values")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	// Action count: 1
	actions
	{
		Set Player Variable At Index(Event Player, A, 1, Null);
	}
}


rule("Create Cube")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	conditions
	{
		Is Button Held(Event Player, Interact) == True;
	}
	
	// Action count: 28
	actions
	{
		Set Player Variable At Index(Event Player, A, 0, Position of(Event Player));
		Skip If(Not(Compare(Value In Array(Player Variable(Event Player, A), 1), ==, Null)), 26);
		Set Player Variable At Index(Event Player, A, 2, Empty Array);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, -1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, 1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, 1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, -1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, 1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, 1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, 1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-1, 1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, -1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(-0.9999, -1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, -1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, 1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1, -1, -1), 1)), Add(Value In Array(Player Variable(Event Player, A), 0), Multiply(Vector(1.0001, 1, -1), 1)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Set Player Variable At Index(Event Player, A, 1, Value In Array(Player Variable(Event Player, A), 2));
	}
}


rule("Destroy Cube")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	conditions
	{
		Is Button Held(Event Player, Ultimate) == True;
	}
	
	// Action count: 18
	actions
	{
		Wait(0.016, Ignore Condition); // ContinueSkip Wait
		Skip If(Compare(Value In Array(Player Variable(Event Player, A), 4), ==, 0), 3); // ContinueSkip Skipper
		Set Player Variable At Index(Event Player, A, 5, Value In Array(Player Variable(Event Player, A), 4));
		Set Player Variable At Index(Event Player, A, 4, 0);
		Skip(Value In Array(Player Variable(Event Player, A), 5));
		Set Player Variable At Index(Event Player, A, 3, 0);
		Skip If(Not(Compare(Value In Array(Player Variable(Event Player, A), 3), <, Count Of(Value In Array(Player Variable(Event Player, A), 1)))), 9);
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Value In Array(Player Variable(Event Player, A), 3)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 1)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 2)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 3)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 4)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 5)));
		Set Player Variable At Index(Event Player, A, 3, Add(Value In Array(Player Variable(Event Player, A), 3), 6));
		Set Player Variable At Index(Event Player, A, 4, 1);
		Loop;
		Set Player Variable At Index(Event Player, A, 4, 0);
		Set Player Variable At Index(Event Player, A, 1, Null);
	}
}

Models can be imported into Overwatch using the ShowWireframe method.

ShowWireframe(Model Model, Player Visible To, Vector Location, Vector Rotation, Number Scale, EffectRev Reevaluation const bool Get Effect IDs)

  • Model: The variable containing the model constant.
  • Visible To: The players the model is visible to.
  • Location: The location the model will be displayed.
  • Rotation: The rotation of the model as a directional vector. If it is a vector constant, the rotation will be pre-calulated and will consume less server load (much less).
  • Scale: The scale of the model.
  • Reevaluation: Specifies which of this methods inputs will be continuously reevaluated, the model will keep asking for and using new values from reevaluated inputs.
  • Get Effect IDs: If true, the method will return the effect IDs used to create the model. Use DestroyEffectArray() to destroy the effect. This is a boolean constant.

Overwatch has a maximum of 128 effects. Each line in the model requires 1 effect. Be aware of how many lines your model has.

Collision, physics and interacting with the model

Using dummy bots, you can make the model have collision.

OSTW Code
import "C:\Users\HDdel\Desktop\Blender OSTW\ico_sphere.obj" as ballModel;

define globalvar ballLocation = Vector(121.99, 11.50, -227.77);
define globalvar dummy;

rule: "Create Ball"
{
    // Create the dummy bot and store it into a variable.
    CreateDummyBot(Hero.Torbjorn, Team.All, 1, ballLocation);
    dummy = PlayersInSlot(1, Team.All);

    // Make the dummy invisible
    SetInvisible(dummy, InvisibleTo.All);

    // Make the dummy immortal
    SetStatus(dummy, null, Status.Invincible, 9999);

    // Create the effect
    ShowWireframe(ballModel, AllPlayers(), PositionOf(dummy) + Vector(0, 0.75, 0), Vector(0, 0, 0), 1, EffectRev.VisibleToPositionAndRadius, false);
}

rule: "TP to arena"
Event.OngoingPlayer
if (IsAlive() & HasSpawned() & EventPlayer() != dummy)
{
    Teleport(EventPlayer(), Vector(111.422, 12.673, -217.379));
}
Workshop Code: Try it out! Copy into Overwatch.
// --- Variable Guide ---
// global A[0] INTERNAL : Multidimensional Array Builder
// global A[1] ballLocation
// global A[2] dummy

rule("INTERNAL : Initial Global Values")
{

	event
	{
		Ongoing - Global;
	}
	
	// Action count: 1
	actions
	{
		Set Global Variable At Index(A, 1, Vector(121.99, 11.5, -227.77));
	}
}


rule("Create Ball")
{

	event
	{
		Ongoing - Global;
	}
	
	// Action count: 35
	actions
	{
		Create Dummy Bot(Hero(Torbjörn), Team(All), 1, Value In Array(Global Variable(A), 1), Vector(0, 0, 0));
		Set Global Variable At Index(A, 2, Players In Slot(1, Team(All)));
		Set Invisible(Value In Array(Global Variable(A), 2), All);
		Set Status(Value In Array(Global Variable(A), 2), Null, Invincible, 9999);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, -1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, 0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, 0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, 0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, -1, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, -1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, -0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, 0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.894425, -0.447215, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.894425, -0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, -1, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.894425, -0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, -0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, -0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, -1, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, -0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, -0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.894425, 0.447215, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.894425, 0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, 0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, 0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, 0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, 0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, 0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, 0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.894425, -0.447215, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.894425, -0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, -0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, -0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.276385, -0.447215, -0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, -0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, -0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.7236, -0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.894425, 0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, 0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, 0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, 0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, -0.52572), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, -0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, -0.85064), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.894425, 0.447215, 0), 1)), Red, Visible To Position And Radius);
		Wait(0.016, Ignore Condition);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.894425, 0.447215, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, 1, 0), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, 1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, 0.85064), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, 1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, 0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, 1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(-0.7236, 0.447215, -0.52572), 1)), Red, Visible To Position And Radius);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0, 1, 0), 1)), Add(Add(Position of(Value In Array(Global Variable(A), 2)), Vector(0, 0.75, 0)), Multiply(Vector(0.276385, 0.447215, -0.85064), 1)), Red, Visible To Position And Radius);
	}
}


rule("TP to arena")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	conditions
	{
		And(And(Is Alive(Event Player), Has Spawned(Event Player)), Compare(Event Player, !=, Value In Array(Global Variable(A), 2))) == True;
	}
	
	// Action count: 1
	actions
	{
		Teleport(Event Player, Vector(111.422, 12.673, -217.379));
	}
}

Import code: N6DEH

The dummy bot must be on the opposite team in order for it to have collision. Since the model is linked to the dummy's location, it can be affected by knockback abilities. To make it immovable, have the model set to a constant location and a rule that teleports the dummy bot back to the right position if it is moved.

Ball

Custom Text

OSTW Code
define playervar Location;
define playervar effectIDs = null;

rule: "Create Text"
Event.OngoingPlayer
if (IsButtonHeld(EventPlayer(), Button.Interact))
{
    Location = PositionOf();
    if (effectIDs == null)
        effectIDs = CreateText("Custom Text!", AllPlayers(), Location, Vector(0, 180, 0), 1, EffectRev.VisibleToPositionAndRadius, true);
}

rule: "Destroy Text"
Event.OngoingPlayer
if (IsButtonHeld(EventPlayer(), Button.Ultimate))
{
    DestroyEffectArray(effectIDs, 2);
    effectIDs = null;
}
Workshop Code: Try it out! Copy into Overwatch.
// --- Variable Guide ---
// global A[0] INTERNAL : Multidimensional Array Builder
// global A[1] INTERNAL : Class Indexes
// player A[0] Location
// player A[1] effectIDs
// player A[2] INTERNAL : Model Effects
// player A[3] INTERNAL : DestroyEffectArray index
// player A[4] INTERNAL : ContinueSkip
// player A[5] INTERNAL : ContinueSkip temp holder

rule("INTERNAL : Initial Player Values")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	// Action count: 1
	actions
	{
		Set Player Variable At Index(Event Player, A, 1, Null);
	}
}


rule("Create Text")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	conditions
	{
		Is Button Held(Event Player, Interact) == True;
	}
	
	// Action count: 62
	actions
	{
		Set Player Variable At Index(Event Player, A, 0, Position of(Event Player));
		Skip If(Not(Compare(Value In Array(Player Variable(Event Player, A), 1), ==, Null)), 60);
		Set Player Variable At Index(Event Player, A, 2, Empty Array);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(2.2238554736, 0.620319, -2.9770535517)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.8527096895, 0.078339, -2.4802043239)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Wait(0.016, Ignore Condition);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.8527096895, 1.1623, -2.4802043239)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(2.2238554736, 0.620319, -2.9770535517)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.699328563, 0.010105, -2.2748745115)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.7629406791, 0.481901, -2.3600314286)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.5447822348, 0.010105, -2.0679848548)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.699328563, 0.010105, -2.2748745115)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.4811707171, 0.481901, -1.9828287389)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.5447822348, 0.010105, -2.0679848548)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.2281824952, 0.015142, -1.6441558829)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.2281226492, 0.595708, -1.6440757676)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.3914017068, 0.186392, -1.8626558435)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.2281824952, 0.015142, -1.6441558829)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.2281824952, 0.595708, -1.6441558829)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(1.0421888857, 0.433972, -1.3951680587)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.8445959232, 0.010125, -1.1306522941)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.8445360772, 0.874723, -1.1305721788)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.9524198754, 0.651474, -1.2749951633)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.7367749633, 0.651474, -0.9863134306)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.6470059529, 0, -0.8661405352)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.5324134174, 0.594751, -0.7127366297)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.4178232757, 0, -0.5593359288)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.6470059529, 0, -0.8661405352)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.5324134174, 0.594751, -0.7127366297)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.4178232757, 0, -0.5593359288)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.274891262, 0.423914, -0.3679942413)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-0.191703517, -0.011083, 0.2566316215)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.3280542653, -0.011083, -0.4391630334)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.274891262, 0.423914, -0.3679942413)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.274891262, 0.423914, -0.3679942413)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(0.0681753741, -0.011083, -0.091265706)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-0.9091398416, 0.067256, 1.2170566058)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-0.9091996876, 1.151217, 1.2171367211)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-0.5807025619, 1.126072, 0.7773808347)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.2375765229, 1.126072, 1.6567315758)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.3643704624, 0.169271, 1.8264693813)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.5426385508, 0.209127, 2.0651151261)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.5426385508, 0.209127, 2.0651151261)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.4305505706, 0.487279, 1.9150640443)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.4305505706, 0.487279, 1.9150640443)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.3273455333, 0, 1.7769044711)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.3273455333, 0, 1.7769044711)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.5602129292, 0.014858, 2.0886417744)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.6499819396, 0.002894, 2.2088146697)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.8286725408, 0.450125, 2.4480260283)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.8286725408, 0.002894, 2.4480260283)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.6499819396, 0.450125, 2.2088146697)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.0262655034, 0.010125, 2.7125417929)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.0263253494, 0.874723, 2.7126219082)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-1.9184415512, 0.651474, 2.5681989237)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.1340864632, 0.651474, 2.8568806564)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Wait(0.016, Ignore Condition);
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.2238554736, 0.917514, 2.9770535517)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.2239153196, 0.293021, 2.977133667)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Create Beam Effect(All Players(Team(All)), Grapple Beam, Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.2238554736, 0.144243, 2.9770535517)), Add(Value In Array(Player Variable(Event Player, A), 0), Vector(-2.2239153196, 0.06782, 2.977133667)), Red, Visible To Position And Radius);
		Set Player Variable At Index(Event Player, A, 2, Append To Array(Value In Array(Player Variable(Event Player, A), 2), Last Created Entity));
		Set Player Variable At Index(Event Player, A, 1, Value In Array(Player Variable(Event Player, A), 2));
	}
}


rule("Destroy Text")
{

	event
	{
		Ongoing - Each Player;
		All;
		All;
	}
	
	conditions
	{
		Is Button Held(Event Player, Ultimate) == True;
	}
	
	// Action count: 14
	actions
	{
		Wait(0.016, Ignore Condition); // ContinueSkip Wait
		Skip If(Compare(Value In Array(Player Variable(Event Player, A), 4), ==, 0), 3); // ContinueSkip Skipper
		Set Player Variable At Index(Event Player, A, 5, Value In Array(Player Variable(Event Player, A), 4));
		Set Player Variable At Index(Event Player, A, 4, 0);
		Skip(Value In Array(Player Variable(Event Player, A), 5));
		Set Player Variable At Index(Event Player, A, 3, 0);
		Skip If(Not(Compare(Value In Array(Player Variable(Event Player, A), 3), <, Count Of(Value In Array(Player Variable(Event Player, A), 1)))), 5);
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Value In Array(Player Variable(Event Player, A), 3)));
		Destroy Effect(Value In Array(Value In Array(Player Variable(Event Player, A), 1), Add(Value In Array(Player Variable(Event Player, A), 3), 1)));
		Set Player Variable At Index(Event Player, A, 3, Add(Value In Array(Player Variable(Event Player, A), 3), 2));
		Set Player Variable At Index(Event Player, A, 4, 1);
		Loop;
		Set Player Variable At Index(Event Player, A, 4, 0);
		Set Player Variable At Index(Event Player, A, 1, Null);
	}
}

Custom text can be created with these methods.

CreateText(const string Text, Player Visible To, Vector Location, Vector Rotation, Number Scale, EffectRev Reevaluation, const bool Get Effect IDs)

CreateTextFancy(const string Text, Player Visible To, Vector Location, Vector Rotation, Number Scale, EffectRev Reevaluation, const bool Get Effect IDs)

  • Text: The string to display. Must be a string constant.
  • Visible To: The players the text is visible to.
  • Location: The location to display the text.
  • Rotation: The rotation of the model as a directional vector. If it is a vector constant, the rotation will be pre-calulated and will consume less server load (much less).
  • Scale: The scale of the text.
  • Reevaluation: Specifies which of this methods inputs will be continuously reevaluated, the text will keep asking for and using new values from reevaluated inputs.
  • Get Effect IDs: If true, the method will return the effect IDs used to create the text. Use DestroyEffectArray() to destroy the effect. This is a boolean constant.
⚠️ **GitHub.com Fallback** ⚠️