I always disliked the Radiant triggers, so I created my own triggers, which I could also place in custom maps.
Random dump of the script files used to create custom triggers with example code just re-discovered via Everything.exe:
UTILS.gsc
PHP Code:
spawnXmodel(name, position, dir)
{
model = spawn("script_model", position);
model.angles = (0, dir, 0);
model setModel(name);
return model;
}
entityToGround()
{
entity = self;
trace = bullettrace(entity.origin, entity.origin-(0,0,10000), false, undefined);
if (trace["fraction"] < 1)
entity.origin = trace["position"];
}
RANDOMBOX.gsc
PHP Code:
#include maps\BTM\UTILS;
#include maps\BTM\TRIGGER;
precache()
{
// init()
game["hintstring_randombox_allies"] = &"^6Press {USE} to buy something!";
game["hintstring_randombox_axis"] = &"^6You cant buy something!";
// precache()
precacheModel("xmodel/furniture_bathtub");
precacheString(game["hintstring_randombox_allies"]);
precacheString(game["hintstring_randombox_axis"]);
}
addRandomBox(pos, dir)
{
box = spawnXmodel("xmodel/furniture_bathtub", pos, dir);
box.angles = (0, dir+90, 0);
box entityToGround();
box spawnUseTrigger(
::BOX_onUse,
game["hintstring_randombox_allies"],
game["hintstring_randombox_axis"]
);
}
BOX_onUse(player)
{
if (player.pers["team"] == "allies")
{
player iprintln("^6NICE DONE HUNTER");
player openMenu("weapon_german");
}
if (player.pers["team"] == "axis")
{
player iprintln("^6NICE DONE ZOMBIE");
}
}
TRIGGER.gsc
PHP Code:
#include maps\BTM\UTILS;
#include maps\BTM\HINTSTRING;
spawnUseTrigger(function, hintstring_allies, hintstring_axis)
{
entity = self;
entity.useTrigger = true;
trigger = spawn("trigger_radius", entity.origin, 0, 50, 50);
entity.trigger = trigger; // for later movement/deletion etc.
while (1)
{
trigger waittill("trigger", player);
if (entity.useTrigger == false)
{
wait 0.10;
continue;
}
if (player.pers["team"] == "allies")
player thread displayHintString(hintstring_allies, entity);
if (player.pers["team"] == "axis")
player thread displayHintString(hintstring_axis, entity);
if (player safeUseButtonPressed())
{
entity [[function]](player);
while (player safeUseButtonPressed())
wait 0.05;
}
}
}
spawnRadiusTrigger(function)
{
entity = self;
entity.useTrigger = true;
trigger = spawn("trigger_radius", entity.origin, 0, 50, 50);
entity.trigger = trigger; // for later movement/deletion etc.
while (1)
{
trigger waittill("trigger", player);
if (entity.useTrigger == false)
{
wait 0.10;
continue;
}
entity [[function]](player);
wait 0.10;
}
}
spawnMeleeTrigger(function, hintstring_allies, hintstring_axis)
{
entity = self;
entity endon("endTriggerThread");
entity.useTrigger = true;
trigger = spawn("trigger_radius", entity.origin, 0, 50, 50);
entity.trigger = trigger; // for later movement/deletion etc.
while (1)
{
trigger waittill("trigger", player);
if (entity.useTrigger == false)
{
wait 0.10;
continue;
}
if (player.pers["team"] == "allies")
player thread displayHintString(hintstring_allies, entity);
if (player.pers["team"] == "axis")
player thread displayHintString(hintstring_axis, entity);
if (player safeMeleeButtonPressed())
{
entity [[function]](player);
while (player safeMeleeButtonPressed())
wait 0.05;
}
}
}
HINTSTRING.gsc
PHP Code:
displayHintString(hintstring, entity)
{
player = self;
if ( ! isDefined(player))
return;
if ( ! isDefined(hintstring))
return;
if (isdefined(player.hintstring))
return;
player.hintstring = newClientHudElem(player);
player.hintstring.horzAlign = "fullscreen";
player.hintstring.vertAlign = "fullscreen";
player.hintstring.alignX = "center";
player.hintstring.alignY = "middle";
player.hintstring.x = 320; // 640
player.hintstring.y = 300; // 480
player.hintstring.fontScale = 1.6; // 1.1
player.hintstring.alpha = 1; // zero to one
player.hintstring setText(hintstring);
player thread deleteHintString(entity);
}
deleteHintString(entity)
{
player = self;
while (isdefined(player) && isdefined(player.hintstring))
{
if (player isTouching(entity.trigger))
{
wait 0.10;
continue;
}
player.hintstring destroy();
}
}
For the custom damage trigger stuff, libcod is needed: https://znation.nl/cod4script/setalive.htm