Game Modding | Call of Duty: Black Ops 3 | Scripting
ModmeBot:
Thread By: modric
Ok so my easter egg will be using other people's scripts but the first step to initiate the ee is custom. The problem is that I am not good at scripting in the slightest so I need help getting it sorted. Basically I want to have a trigger with a hintstring make other models/triggers appear to collect and then the rest of the ee is other scripts. So really i just need to figure out how to make the trigs waittill one trig is used before they show. Here is what i have so far:
function tony_ee()
{
start_trig = GetEnt("ee_start_trig", "targetname");
start_trig SetHintString("Press to start quest");
tony_trigs = GetEntArray("tony_trig", "targetname");
tony_trigs hide();
//also want tony_trigs model to be hidden/shown with trigs
self waittill(//start trig is triggered)
Show tony_trigs (); //and tony trigs models
//these tony trigs are already working trigs from another script and the rest of the ee is figured out.
}
ModmeBot:
Reply By: mathfag
Here you go:
function tony_ee()
{
start_trig = GetEnt("ee_start_trig", "targetname");
start_trig SetHintString("Press to start quest");
tony_trigs = GetEntArray("tony_trig", "targetname");
tony_model = GetEntArray("tony_model", "targetname");
foreach(trig in tony_trigs)
{
trig TriggerEnable(0); //you could use Hide();
IPrintLnBold("trigger hidden");
}
foreach(trig in tony_model)
{
trig Hide();
IPrintLnBold("model hidden");
}
//also want tony_trigs model to be hidden/shown with trigs
start_trig waittill("trigger", player);
foreach(trig in tony_trigs)
{
trig TriggerEnable(1); //you could use Show();
IPrintLnBold("trigger shown");
}
foreach(trig in tony_model)
{
trig Show();
IPrintLnBold("model shown");
}
}
ModmeBot:
Reply By: modric
Didn't work, the hidden trigs and objects were visible the whole time and every trig including the start ee one says not available. Do i need to thread something?
ModmeBot:
Reply By: mathfag
modric
Didn't work, the hidden trigs and objects were visible the whole time and every trig including the start ee one says not available. Do i need to thread something?
Press to start quest
trig SetHintString("");
trig SetCursorHint("HINT_NOICON");
trig SetHintString("insert text here");
ModmeBot:
Reply By: modric
Ok thanks so far so good, but I think it would be easier to just seperate this ee step from others to make it easier to script. Could I make the tony objects and triggers disappear once triggered? also could I make them only triggered by a trigger damage with a specific gun? like the ray gun or something?
ModmeBot:
Reply By: mathfag
Here's an update. Add trigger_damages and make the model the target of the trigger. Make the trigger and model into a prefab (you don't need to) and copy paste it where ever you want as many times as you want. And make sure the models DON'T HAVE A TARGETNAME. It has to be autogenerated when you make them targets. To autogenerate shift click on the trigger then shift click on the model and press W.
function tony_ee()
{
start_trig = GetEnt("ee_start_trig", "targetname");
start_trig SetHintString("Press to start quest");
tony_trigs = GetEntArray("tony_trig", "targetname");
level.tonytrigs_total = tony_trigs.size;
level.tonytrigs_current = 0;
foreach(trig in tony_trigs)
{
trig TriggerEnable(0); //you could use Hide();
IPrintLnBold("trigger hidden");
hide_model(); //calling the hdie_model() function
}
start_trig waittill("trigger", player);
foreach(trig in tony_trigs)
{
trig TriggerEnable(1); //you could use Show();
IPrintLnBold("trigger shown");
trig thread shoot_tony();
}
}
function hide_model()
{
model = GetEnt( self.target, "targetname" );
model Hide();
IPrintLnBold("model hidden");
}
function shoot_tony()
{
model = GetEnt( self.target, "targetname" );
model Show();
IPrintLnBold("model shown");
while(1)
{
self waittill( "damage", amount, attacker, direction_vec, point, type, tagName, modelName, partName, weapon, dFlags, inflictor, chargeLevel );
if(weapon == GetWeapon("INSERT GUN NAME HERE"))
{
PlayFX("fx name/path",model.origin);
model PlaySound("sound aliat");
wait(0.05); //only is you're playing sound
model Delete();
trig Delete();
level.tonytrigs_current++;
IPrintLnBold("Collected "+level.tonytrigs_current+"/"+level.tonytrigs_total);
break;
}
}
}
ModmeBot:
Reply By: modric
Wow thank you this script is awesome. I just want to ask though , for the final reward, would it be possible to have a simple door move as one of the "rewards" for collecting all 3? just a simple script model to move or disappear would be awesome
ModmeBot:
Reply By: mathfag
In the last function after the iprintlnbold and before the break; add thread tony_reward();
and this to the bottom:
function tony_reward()
{
perk_struct = struct::get("perk_struct", "targetname");
doors = GetEntArray("tony_doors","targetname");
rewards = array("door", "powerup", "perk"); //remove what you don't want
doordis = 1; //door disappear = 1, move = 0
drop = "fire_sale"; //check bellow and delete the line if you want a random drop
perk = "specialty_armorvest"; //check _zm_perks.gsh
if(level.tonytrigs_current == level.tonytrigs_total)
{
foreach(reward in rewards)
{
if(reward == "door")
{
if(doordis == 1)
{
foreach(door in doors)
door Delete();
}
else
{
door MoveZ(-200,0.5,0.1,0.1); //MoveZ(<point>,<time>,[acceleration time],[deceleration time])
}
}
if(reward == "powerup")
{ //drop is defined above, delete the line you don't want
zm_powerups::specific_powerup_drop(drop, perk_struct.origin,undefined ,undefined ,undefined , undefined, true);
zm_powerups::powerup_drop(perk_struct.origin);
}
if(reward == "perk")
{
foreach(player in GetPlayers())
{
player zm_perks::give_perk(perk)
}
}
}
}
} </time></point>
I made is so you can open multiple doors but you can place only 1 (or 0) if you want.
Also I wrote this in 5 mins so hope it works.
ModmeBot:
Reply By: Harry Bo21
you need to run
entity connectPaths()
on the blocker before removing it or zombies will derp out if a player goes in there