UGX-Mods

Call of Duty 5: World at War => Help Desk => Scripting => Topic started by: trebeltom1 on March 22, 2013, 08:38:57 am

Title: easy fx
Post by: trebeltom1 on March 22, 2013, 08:38:57 am
here is my easy fx script, the thread trigger_progress_fx, is meant to trigger an effect when a level notify occurs with the same name as the script_struct's script_string. I'm not sure this is right though, and I wasn't sure how to show a script_string of progress(with a number after it)...

some guidance is needed, thanks




Code Snippet
Plaintext
fx_setup() //This is where the FX are precached. Any FX you want to use must be added to your mapname_patch.csv as well as listed below. 
{
//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

//Usage: level._effect["alias"] = loadFX("path/to/fx/name");
//Where 'alias' is your personal name for the fx that you will use later in the code, and 'path/to/fx/name' is the file location + name of the fx you want to assign to the variable. See below for examples:
//When entering the fx path, be sure to only include folder names that are within /raw/fx, and make sure to leave off the file extension (.efx).
//If you want to preview any of these FX, open Launcher, click the EffectsEd button, then File>Open the file you wish to preview. Then press the green play button.

//Fire\\
level._effect["fire1"] = loadFX("env/fire/fx_fire_brush_smolder_sm");
level._effect["fire2"] = loadFX("env/fire/fx_fire_detail_fade_14");
level._effect["fire3"] = loadFX("env/fire/fx_fire_blown_md_blk_smk_distant_w");
level._effect["fire4"] = loadFX("env/fire/fx_fire_oil_md");
level._effect["fire5"] = loadFX("env/fire/fx_fire_campfire_small");
level._effect["fire6"] = loadFX("env/fire/fx_fire_player_torso");
//End Fire\\

//Smoke/Smolder\\
level._effect["smoke1"] = loadFX("env/smoke/fx_smoke_smolder_sm_blk");
level._effect["smoke2"] = loadFX("env/smoke/fx_smoke_smolder_md_gry");
level._effect["smoke3"] = loadFX("env/smoke/fx_smoke_smolder_lg_gry");
level._effect["smoke4"] = loadFX("env/smoke/fx_smoke_wood_chimney_med");
//End Smoke/Smolder\\
level._effect["bogsmoke"] = loadFX("smoke/tunnel_smoke_bog_a");

//Explosions\\
level._effect["explosion1"] = loadFX("explosions/fx_default_explosion"); //non stationary
level._effect["explosion2"] = loadFX("explosions/tank_impact_dirt"); //non stationary
//End Explosions\\


//Light Rays\\
level._effect["light1"] = loadFX("env/light/fx_glow_hanginglamp");
level._effect["light2"] = loadFX("env/light/fx_glow_emergency_red_blink");
//End Light Rays\\


//Electrical\\
level._effect["electric1"] = loadFX("env/electrical/fx_elec_player_md"); // 1.4 only!
level._effect["electric2"] = loadFX("maps/zombie/fx_zombie_wire_spark"); // 1.4 only!
//End Electrical\\


//User-Additions\\
//Place your fx lines below this line, or below other fx in their respective sections.
level._effect["bugs1"] = loadFX("bio/insects/fx_insect_carcass_flies");
level._effect["meteor1"] = loadFX("maps/zombie/fx_meteor_ambient");
level._effect["lazer"] = loadFX("maps/zombie/fx_zombie_lght_marker");
level._effect["battle1"] = loadFX("env/smoke/fx_battlefield_smokebank_low_thick");
level._effect["beach1"] = loadFX("env/smoke/fx_battlefield_beach_smokebank_ling_lg");
level._effect["billow1"] = loadFX("maps/ber3b/fx_smk_plume_xlg_slow_blk_3b");
//End User-Additions\\

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//DEBUG SETTING:

level.fx_debug = 1; // '1' = ON, 'undefined' = OFF

//|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
//Do not edit or add anything below this line.
}

fx_start()
{
fx_spots = getstructarray("fx","targetname");

if(isDefined(level.fx_debug))
{
if(fx_spots.size == 0 || !isDefined(fx_spots))
iPrintLn("Easy-FX: ^1ERROR: ^7No FX structs were found! Ensure that you used SCRIPT_STRUCTS and you gave them the correct TARGETNAME.");
else
iPrintLn("Easy-FX found "+fx_spots.size+" fx structs in your level.");
}


for(i=0;i<fx_spots.size;i++)
{
usage = fx_spots[i].script_string;
if(usage == "stationary")
fx_spots[i] thread stationary_fx();
if(usage == "stationary_loop")
fx_spots[i] thread stationary_fx(true);
else if(usage == "touch")
fx_spots[i] thread triggered_touch_fx();
else if(usage == "use")
fx_spots[i] thread triggered_use_fx();
else if(usage == "use_loop")
fx_spots[i] thread triggered_use_fx(true);
else if(usage == "touch_loop")
fx_spots[i] thread triggered_touch_fx(true);
else if(usage == "damage")
fx_spots[i] thread triggered_damage_fx(true);
else if(usage == "progress[i]")
fx_spots[i] thread triggered_progress_fx(true);
else if(!isDefined(fx_spots[i].script_string))
if(isDefined(level.fx_debug)) iPrintLn("Easy-FX: ^1ERROR: ^7FX struct at origin "+fx_spots[i].origin+" is missing its stript_string for fx usage! Set it as stationary, use, or touch.");
}
}

stationary_fx(loop) //These are untriggered FX that will play on loop while the level is running.
{

fx = self.script_noteworthy;
if(!isDefined(fx) && isDefined(level.fx_debug)) iPrintLn("Easy-FX: ^1ERROR: ^7 FX struct at origin "+self.origin+" is missing its script_noteworthy for fx name!");

    fxTag = "tag_origin";
   
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );

if(isDefined(loop))
{
if(!isDefined(self.speed))
{
self.speed = 1;
if(isDefined(level.fx_debug))iPrintLn("Easy-FX: ^1ERROR: ^7No speed was specified on the struct at origin "+self.origin+". It has defaulted to 1 second.");
}
PlayLoopedFX(level._effect[fx], self.speed, self.origin);
}
else
PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}

triggered_touch_fx(loop) //These are triggered FX. They are triggered when the player walks though a trigger_multiple that you create in Radiant.
{
trigger = getEnt(self.target,"targetname");
if(!isDefined(trigger.script_string))
trigger.script_string = "SET THIS TEXT USING THE SCRIPT_STRING KVP ON THE TRIGGER";
trigger setHintString(trigger.script_string);
trigger SetCursorHint("HINT_NOICON");
fx = self.script_noteworthy;
trigger waittill("trigger");

fxTag = "tag_origin";
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );

if(isDefined(loop))
{
if(!isDefined(self.speed))
{
self.speed = 1;
if(isDefined(level.fx_debug))iPrintLn("Easy-FX: ^1ERROR: ^7No speed was specified on the struct at origin "+self.origin+". It has defaulted to 1 second.");
}
PlayLoopedFX(level._effect[fx], self.speed, self.origin);
}
else
PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}

triggered_use_fx(loop) //These are triggered FX. They are triggered when the player uses a trigger (by pressing F) that you create in Radiant.
{
trigger = getEnt(self.target,"targetname");
if(!isDefined(trigger.script_string))
trigger.script_string = "SET THIS TEXT USING THE SCRIPT_STRING KVP ON THE TRIGGER";
trigger setHintString(trigger.script_string);
trigger SetCursorHint("HINT_NOICON");
fx = self.script_noteworthy;
trigger waittill("trigger");

fxTag = "tag_origin";
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );

if(isDefined(loop))
{
if(!isDefined(self.speed))
{
self.speed = 0.5;
if(isDefined(level.fx_debug))iPrintLn("Easy-FX: ^1ERROR: ^7No speed was specified on the struct at origin "+self.origin+". It has defaulted to 0.5 seconds");
}
PlayLoopedFX(level._effect[fx], self.speed, self.origin);
}
else
PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}
triggered_damage_fx(loop)
{
trigger = getEnt(self.target,"targetname");
fx = self.script_noteworthy;
trigger waittill("trigger");

fxTag = "tag_origin";
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );

PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}
triggered_progress_fx (true)
{
self waittill("self.script_string");
fx = self.script_noteworthy;


fxTag = "tag_origin";
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );

PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}
Title: Re: easy fx
Post by: treminaor on March 22, 2013, 04:00:40 pm
If it's a level notify you want to wait for, then you do level waittill, not self waittill. You also want to have waittill(self.script_string);. If you put a variable in quotes, it is no longer a variable...

I think PHP and its derivatives are the only language that allow you to use variables in quotes.

Code Snippet
Plaintext
triggered_progress_fx (true)
{
level waittill(self.script_string);
fx = self.script_noteworthy;
   
   
    fxTag = "tag_origin";
    self.fx = Spawn( "script_model", self.origin );
    self.fx SetModel( "tag_origin" );
    self.fx.angles = self.angles;
    self.fx.origin = self.origin;
    self.fx LinkTo( self, fxTag );
   
    PlayFxOnTag( level._effect[fx], self.fx, fxTag );
}
Title: Re: easy fx
Post by: trebeltom1 on March 22, 2013, 04:53:16 pm
cheers thanks a lot