UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - daedra descent

Apparently 1TB of disk space, 8GB of System memory, and 2GB of Vram just isn't enough for World at War:

8 years ago
Apparently, there is a limit on how many different hintstrings you can have. This includes hinstrings that might change on map restart(via menu):

Code Snippet
Plaintext
******* script runtime error *******
Too many different hintstring values. Max allowed is 48 different strings: (file 'maps/_soviet/soviet_weapons.gsc', line 61)
  trig sethintstring("Press F for weapon " + self.script_noteworthy + "[" + self.cost  + level.soviet["cType"] + " required for weapon, " + (self.ammo_cost) + " for ammo]");
       *
Error: called from:
(file 'common_scripts/utility.gsc', line 586)
  entities[ keys[ i ] ] thread [[ process ]]();
                                  *
Error: called from:
(file 'maps/_soviet/soviet_weapons.gsc', line 14)
 array_thread(level.weapon["weapons"], ::init_guns);
 *
Error: called from:
(file 'maps/_soviet/soviet.gsc', line 150)
 maps\_soviet\soviet_weapons::init();
 *
Error: called from:
(file 'maps/_soviet/soviet.gsc', line 105)
 thread common_init();
        *
Error: called from:
(file 'maps/_soviet/soviet.gsc', line 60)
 mod_init();
 *
Error: started from:
(file 'maps/_soviet/soviet_utility.gsc', line 15)
  wait(1);

Anyone know how to get the game to reset the current string variants on restart?
8 years ago
Anyone know of any?
8 years ago
Source code for the Soviet mod. Feel free to create your own versions(please rename differently than the official version if you do!).

soviet:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_utility;
#include maps\_soviet\soviet_backend;
#include maps\_soviet\soviet_dev;

// Script inits all required scripts for all gamemodes
init()
{
flag_wait( "all_players_connected" );

dev();
dev_create_playback("soviet");
dev_create_playback("ctf");
dev_create_playback("hotzone");
dev_create_playback("bots");
dev_create_playback("weapons");
dev_create_playback("perks");

dev_add_playback("soviet", "Soviet mod initalized");

setDvar( "soviet_gamemode", "deathmatch" );
setDvar( "soviet_dif", "normal" );


if(!isdefined(level.soviet))
level.soviet = [];

level.soviet["mod_version"] = 1.3;

dev_add_playback("soviet", "Using soviet mod version " + level.soviet["mod_version"] + ".");

threadedTasks = [];
threadedTasks[0] = ::hide_ctf;
threadedTasks[1] = maps\_soviet\soviet_weapons::init_weapon_affects;

do_threaded_tasks(threadedTasks);

players_connect_opening();

script_wait_message(15, "Use the console to select your gamemode by typing soviet_gamemode <gamemode>", "Locking current gamemode in ", "Current gamemode locked in!");


level.soviet["gamemode"] = getdvar("soviet_gamemode");
level.soviet["max_ai"] = 8;


if(!is_valid_gamemode())
{
iprintln("Gamemode not valid! Changing gamemode to deathmatch!");

dev_add_playback("soviet", "Gamemode dvar not valid. The gamemode has been set to deathmatch.");
level.soviet["gamemode"] = "deathmatch";
}

mod_version_Check();

mod_dif();

mod_init();
}
mod_init()
{

if(level.soviet["gamemode"] == "deathmatch")
{
[[level.deathmatch_settings]]();
level.soviet["cType"] = " kills";
level.soviet["gamemode_text"] = "Kills: ";
thread deathmatch_init();
}
else if(level.soviet["gamemode"] == "ctf")
{
[[level.ctf_settings]]();
level.soviet["cType"] = " captures";
level.soviet["gamemode_text"] = "Captures: ";
thread ctf_init();
}
else if(level.soviet["gamemode"] == "hotzone")
{
[[level.hotzone_settings]]();
level.soviet["cType"] = " hotzones";
level.soviet["gamemode_text"] = "Hotzone: ";
thread hotzone_init();
}
else if(level.soviet["gamemode"] == "quake_deathmatch")
{
[[level.quake_deathmatch_settings]]();
level.soviet["cType"] = " score";
level.soviet["gamemode_text"] = "Score: ";
thread quake_deathmatch_init();
}
else if(level.soviet["gamemode"] == "null")
return;
else
{
assertMsg("Gamemode " + level.soviet["gamemode"] + " is not valid!");
return;
}

level.gamemode = level.soviet["gamemode"];
level.cType = level.soviet["cType"];

[[level.common_settings]]();
thread common_init();
thread gamemode_hud();
}
mod_dif()
{
dif = getDvar("soviet_dif");

if(dif == "easy")
level.soviet["max_ai"] = 4;
else if(dif == "hard")
level.soviet["max_ai"] = 12;
else if(dif == "extreme")
level.soviet["max_ai"] = 16;
else
level.soviet["max_ai"] = 8;


}

common_init()
{
players = get_players();
for(i=0;i<players.size;i++)
{
players[i].score = 0;
players[i].kills = 0;
}

maps\_soviet\soviet_perks::init();
maps\_soviet\soviet_weapons::init();
}
deathmatch_init()
{
maps\_soviet\soviet_bots::init();

while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
players[i].score = players[i].kills;
wait(.75);
}

}
ctf_init()
{
maps\_soviet\soviet_ctf::init();
maps\_soviet\soviet_bots::init();
}
hotzone_init()
{
maps\_soviet\soviet_hotzone::init();
maps\_soviet\soviet_bots::init();
}
quake_deathmatch_init()
{
maps\_soviet\soviet_bots::init("spawner", maps\_soviet\soviet_bots::quake_deathmatch);

while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
players[i].score = players[i].kills;
wait(.75);
}
}

Soviet_backend:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_utility;
#include maps\_soviet\soviet_dev;

// This script is for functions that are used once in other scripts. Placing this stuff here will just make other scripts shorter and clutter free.
mod_integrity_check()
{
if(!isdefined(level.cost[level.soviet["gamemode"]]))
assertmsg("No weapon cost for gamemode: " + level.soviet["gamemode"]);
if(!isdefined(level.delay[level.soviet["gamemode"]]))
assertmsg("No spawner delays for gamemode: " + level.soviet["gamemode"]);
if(!isdefined(level.shader))
assertmsg("shader array not defined!");
}
is_valid_gamemode()
{
if(!isdefined(level.compatibility) || !isArray(level.compatibility))
return false;

if(level.soviet["gamemode"] == "null")
return true;

return search_array(level.compatibility, level.soviet["gamemode"]);
}
mod_Version_Check()
{
if(!isDefined(level.soviet["map_mod_version"]))
return;

if(level.soviet["mod_version"] < level.soviet["map_mod_version"])
iprintln("[Warning] This map requires a newer version of the Soviet Mod.");
}
hide_ctf()
{
home_flag = getent("home_flag","targetname");
enemy_flags = getentarray("enemy_flag", "targetname");

if(!isdefined(home_flag) || !isdefined(enemy_flags))
return;

home_flag hide();

for(i=0;i<enemy_flags.size;i++)
enemy_flags[i] hide();
}
players_connect_opening()
{
flag_wait( "all_players_connected" );
players = get_players();
for( i = 0; i < players.size; i++ )
{
players[i] allowstand(true);
players[i] allowcrouch(true);
players[i] allowprone(true);
players[i] setstance("stand");
players[i] SetClientDvar( "hud_showStance", "0" );
players[i] SetClientDvar( "compass", "0");
players[i] SetClientDvar( "ammoCounterHide", "1" );
players[i] setClientDvar( "miniscoreboardhide", "0" );
}
level thread coop_player_spawn_placement();
}

coop_player_spawn_placement()
{
structs = getstructarray( "initial_spawn_points", "targetname" );

//chrisp - adding support for overriding the default spawning method

players = get_players();

for( i = 0; i < players.size; i++ )
{
players[i] setorigin( structs[i].origin ); 
players[i].spectator_respawn = structs[i];
}
}
gamemode_hud()
{
hud = create_simple_hud();
hud.alignX = "left";
hud.alignY = "bottom";
hud.horzAlign = "left";
hud.vertAlign = "bottom";
hud.alpha = 1;
hud.x = 20;
Hud.y = -35;
hud.font = "big";
hud.fontscale = 2.0;
hud.color = ( 1, 1, 0.5 );

while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
{
hud SetText(level.soviet["gamemode_text"] + players[i].score );
}
wait(.5);
}
}

Soviet_bots:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_utility;
#include maps\_soviet\soviet_dev;

init(spawners, func, forcemove)
{
if(isdefined(spawners))
level.spawner["valid_spawners"] = getentarray(spawners,"targetname");
else
level.spawner["valid_spawners"] = getentarray("spawner","targetname");

if(!isdefined(level.spawner["valid_spawners"]))
assertmsg("No spawners!");

for(i=0;i<level.spawner["valid_spawners"].size;i++)
if(!isdefined(level.spawner["valid_spawners"][i].script_noteworthy))
assertmsg("Spawner at origin: " + level.spawner["valid_spawners"][i].origin + " doesn't have a script_noteworthy!");

if(isdefined(func))
thread [[func]]();
else
thread loop_spawn();

if(!isdefined(forcemove) || forcemove)
thread ai_move();
}
loop_spawn()
{
while(1)
{
ai = getaiarray("axis");
if(ai.size < level.soviet["max_ai"])
{
a = randomint(level.spawner["valid_spawners"].size);
waitTime = level.delay[level.soviet["gamemode"]][level.spawner["valid_spawners"][a].script_noteworthy];

guy = level.spawner["valid_spawners"][a] dospawn();

if(isDefined(guy))
guy.dropweapon = false;


dev_add_playback("bots", "Spawned AI at origin: " + level.spawner["valid_spawners"][a].origin + " with wait time: " + waitTime);
wait(waitTime);
}
else if(ai.size > level.soviet["max_ai"])
assertmsg("Over max AI limit!");
wait(1);
}
}
quake_deathmatch()
{
players = get_players();

for(i=0;i<players.size;i++)
{
players[i] setMoveSpeedScale( 1.6 );
players[i] allowCrouch(false);
players[i] allowProne(false);
players[i] allowSprint(false);
players[i] allowAds(false);
}
thread loop_spawn();
}
ai_move()
{
while(1)
{

ai = getaiarray("axis");
players = get_players();

if(isdefined(ai))
{
for(i=0;i<players.size;i++)
{
for(k=0;k<ai.size;k++)
{
ai[k].closest_player = get_Closest_player(ai[k].origin);
nodes = GetAllNodes();
goal_node = getClosest(ai[k].closest_player.origin, nodes );
ai[k] SetGoalNode( goal_node );
}
}
}
wait(.25);
}
}

Soviet_dev:

Code Snippet
Plaintext
//////////////////////////////////////////////
//
// Script Playback System
// Version: 1.2
// Tracks in-game scripted events
// ONLY FOR DEVELOPER MODE
//
// Scripted by BlueSoviet
//
//////////////////////////////////////////////


#include maps\_utility;
#include common_scripts\utility;

dev()
{
/#
level.playback = [];
SetDvar( "dev_playback", "" );
thread dev_dvar_playback();
#/
}
dev_dvar_playback()
{
while(1)
{
cmd = getdvar("dev_playback");
if(isdefined(level.playback[cmd]))
dev_print_playback(cmd);
SetDvar("dev_playback", "");
wait(.1);
}
}

dev_create_playback(script)
{
/#
// *** BEGIN MAIN PLAYBACK VAR ***
level.playback[script] = [];
level.playback[script][0] = "***DEV SCRIPT PLAYBACK INIT***";
level.playback[script][1] = "DEV SCRIPT: " + script;
level.num[script] = level.playback[script].size;
// *** END MAIN PLAYBACK VAR ***
#/
}
dev_add_playback(script, playback)
{
/#
if(!isdefined(level.playback[script]) || !isdefined(level.num[script]))
assertmsg("UNDEFINED PLAYBACK SCRIPT");
level.playback[script][level.num[script]] = playback;
level.num[script]++;
#/
}
dev_print_playback(script, alert)
{
/#
if(!isdefined(level.playback[script]))
assertmsg("UNDEFINED PLAYBACK SCRIPT");

println("Script Playback Size: " + level.playback[script].size);
for(i=0;i<level.playback[script].size;i++)
{
if(isdefined(alert) && isstring(alert))
println(alert + " Playback " + i + ": " + level.playback[script][i]);
else
println("Playback " + i + ": " + level.playback[script][i]);
}
#/
}
dev_assert(desc, file, line, script)
{
/#
dev_add_playback(script, "SCRIPT FAIL! Desc: " + desc + " File: " + file + " Line: " + line);
assertmsg("SCRIPT FAIL! Desc: " + desc + " File: " + file + " Line: " + line);
#/
}


Soviet_ctf:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_dev;

init()
{
level.flags = [];
level.flags["home"] = getent("home_flag","targetname");
level.flags["enemy"] = getentarray("enemy_flag", "targetname");

if(!isdefined(level.flags["home"]) || !isdefined(level.flags["enemy"]))
assertmsg("No home or enemy flags!");

level.flags["home"] show();

players = get_players();
for(i=0;i<players.size;i++)
{
players[i].has_flag = false;
dev_add_playback("ctf", ".has_flag set to false for: " + players[i].playername);
}
thread flags_init();
}
flags_init()
{
level.sa = true;

home_trig = spawn("trigger_radius", level.flags["home"].origin,0,32,32);
home_trig thread home_init();
flag_hide();

dev_add_playback("ctf", "Home flag set at origin: " + home_trig.origin + ". All enemy flags have been hidden.");

while(1)
{
if(level.sa)
{
dev_add_playback("ctf", "initializing new flag");
change_flag();
wait(1);
level.flags["current_flag"] enemy_init();
level.sa = false;
}
wait(1);
}
}
change_flag()
{
a_flag = randomint(level.flags["enemy"].size);
level.flags["current_flag"] = level.flags["enemy"][a_flag];
level.flags["current_trig"] = spawn("trigger_radius", level.flags["current_flag"].origin, 0, 32, 32);
level.flags["current_trig"] show();
}
flag_hide()
{
for(i=0;i<level.flags["enemy"].size;i++)
{
dev_add_playback("ctf", "Hiding flag at origin: " + level.flags["enemy"][i].origin);
level.flags["enemy"][i] hide();
}
}

home_init()
{
level.flags["home_trig"] = spawn("trigger_radius", level.flags["home"].origin,0,32,32);
dev_add_playback("ctf", "Spawned trigger radius for home flag.");
while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
{
if(players[i].has_flag == true && players[i] istouching(self))
{
dev_add_playback("ctf", "Player: " + players[i].playername + " captured flag!");
players[i].has_flag = false;
level.fh = false;
players[i].score++;
players[i] iprintln("Flag captured!");
dev_add_playback("ctf", "Level.sa set to true!");
level.sa = true;

}
}
wait(.1);
}
}
enemy_init()
{
self endon("flag_taken");
self show();
// org = spawn("script_model", self.origin);
// org setModel("tag_origin");
// org moveTo(org groundPos(org.origin), .005);
// playFxOnTag(level.fx["pickupAvailableEffect"], org, "tag_origin");
// org.angles = org.angles + (0,180,0);
// iprintln("tag: " + org getTagAngles("tag_origin") + " Flag: " + self.angles);
while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
{
if(players[i].has_flag == false && players[i] istouching(self))
{
dev_add_playback("ctf", "Player: " + players[i].playername + " has a flag!");
self hide();
players[i].has_flag = true;
players[i] iprintln("Flag taken!");
dev_add_playback("ctf", "Deleting current_trig and ending script execution for current flag!");
// org delete();
self notify("flag_taken");
self delete();
}
}
wait(.01);
}
}

Soviet_hotzone(unfinished/not working):
Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_dev;

init()
{
flag_wait( "all_players_connected" );

level.hotzones = getentarray("hotzone", "targetname");
if(!isdefined(level.hotzones))
{
dev_assert("No hotzones!", "Soviet_hotzone", 12, "hotzone");
return;
}
else if(!isdefined(level.shader["obj_capture"]) || !isdefined(level.shader["obj_capture"]))
{
dev_assert("A hotzone shader is not defined!", "Soviet_hotzone", 17, "hotzone");
return;
}
else if(!isdefined(level.cost["hotzone"]["hotzone_count"]))
{
dev_assert("Hotzone count cost not defined!", "Soviet_hotzone", 22, "hotzone");
}

thread hotzone_init();
}
hotzone_init()
{
level.hotzone_spawn = true;
while(1)
{
if(level.hotzone_spawn)
{
dev_add_playback("hotzone", "initializing new hotzone");
dynamic_change_hotzone();
level.c_hotzone hotzone_think();
level.hotzone_spawn = false;
}
wait(1);
}
}
dynamic_change_hotzone()
{
a_hotzone = randomint(level.hotzones.size);
level.c_hotzone = level.hotzones[a_hotzone];
}
hotzone_think()
{
self endon("count_done");
if(!isdefined(self.radius) || !isdefined(self.height))
{
self.radius = 256;
self.height = 128;
}
count = 0;
hud = newHudElem();
hud.hideWhenInMenu = true;
hud SetTargetEnt(self);
hud setshader(level.shader["obj_capture"]);
hud SetWayPoint( true, level.shader["obj_capture"]);
while(1)
{
players = get_players();
for(i=0;i<players.size;i++)
{
if(players[i] istouching(self))
{
count++;
hud setshader(level.shader["obj_defend"]);
hud SetTargetEnt(self);
if(count == level.cost["hotzone"]["hotzone_count"])
{
hud destroy();
players[i].score++;
level.hotzone_spawn = true;
self notify("count_done");
}
}
else
{
hud setshader(level.shader["obj_capture"]);
hud SetTargetEnt(self);
}

}
wait(1);
}
}

Soviet_perks:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_utility;
#include maps\_soviet\soviet_dev;


init()
{
if(!isDefined(level.perks))
level.perks = [];

level.perks["trigger_use_array"] = getEntArray("perk_trig","targetname");


if(!isdefined(level.perks["trigger_use_array"]))
return;

array_thread(level.perks["trigger_use_array"], ::perk_init );
array_thread(level.perks["trigger_use_array"], ::effects_init );
}
perk_init()
{
if(!isdefined(self.script_noteworthy))
assertmsg("No script_noteworthy for perk trigger at " + self.origin);

self.cost = level.cost[level.soviet["gamemode"]][self.script_noteworthy];

if(!isdefined(self.cost))
assertmsg("Undefined cost for perk: " + self.script_noteworthy + " at origin: " + self.origin);

string = level.string[level.soviet["gamemode"]][self.script_noteworthy];

if(!isdefined(string))
assertmsg("Undefined string for perk: " + self.script_noteworthy + " at origin: " + self.origin);

self sethintstring(string);
self SetCursorHint( "HINT_NOICON" );

while(1)
{
who = undefined;
self waittill("trigger", who);

if(who.score >= self.cost && !who hasperk(self.script_noteworthy) && isPlayer(who) && who usebuttonpressed())
who give_perk(self.script_noteworthy);
wait(.001);
}
}
give_perk(perk)
{
self setperk(perk);
if(perk == "specialty_fastreload")
self SetClientDvar("perk_weapReloadMultiplier", .75);
else if(perk == "specialty_rof")
self SetClientDvar("perk_weapratemultiplier", .94);
self perk_hud_create(perk);
self perk_think(perk);
}
perk_hud_create( perk )
{
if ( !IsDefined( self.perk_hud ) )
self.perk_hud = [];

shader = level.shader[perk];

hud = create_simple_hud( self );
hud.foreground = true;
hud.sort = 1;
hud.hidewheninmenu = false;
hud.alignX = "left";
hud.alignY = "bottom";
hud.horzAlign = "left";
hud.vertAlign = "bottom";
hud.x = self.perk_hud.size * 30;
hud.y = hud.y - 70;
hud.alpha = 1;
hud SetShader( shader, 24, 24 );

self.perk_hud[ perk ] = hud;
}
perk_think( perk )
{
self waittill_any( "fake_death", "death", "player_downed" );

self UnsetPerk( perk );
self.maxhealth = 100;
self perk_hud_destroy( perk );
}
perk_hud_destroy( perk )
{
self.perk_hud[ perk ] destroy_hud();
self.perk_hud[ perk ] = undefined;
}
destroy_hud()
{
self Destroy();
}
effects_init()
{
if(!isdefined(self.target) || !isdefined(level._effect[self.script_noteworthy]))
return;

origin = getent(self.target, "targetname");
playfx(level._effect[self.script_noteworthy], origin.origin);
origin playloopsound("perks_machine_loop");
}

Soviet_utility:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_dev;

//delays the script by looping until the time var hits zero
script_wait_message(seconds, string1, string2, string3)
{
level endon("wait_done");
iprintln(string1);

time = seconds;
while(1)
{
iprintln(string2 + time + " seconds!");
wait(1);
time--;;
if(time == 0)
{
if(isdefined(string3))
iprintln(string3);
level notify("wait_done");

}
}
}
// creates simple HUD element
create_simple_hud( client )
{
if( IsDefined( client ) )
{
hud = NewClientHudElem( client );
}
else
{
hud = NewHudElem();
}

hud.foreground = true;
hud.sort = 1;
hud.hidewheninmenu = true;

return hud;
}
// prints the vars array keys to the console
print_array_keys(var)
{
if(!isDefined(var))
assertMsg("Var is undefined ");

if(!isarray(var))
assertmsg("Var is not an array");

keys = GetArrayKeys( var );

if(!isdefined(keys))
return "no_key";

for(i=0;i<keys.size;i++)
iprintln(keys[i]);
}
object_float(height, time)
{
if(!isDefined(self) || !isDefined(height) || !isDefined(time))
return undefined;

self moveTo(self groundPos(self.origin) + (0,0,height), time);
}
do_threaded_tasks(tasks)
{
if(!isDefined(tasks))
assertMsg("Tasks not defined!");
if(!isArray(tasks))
assertMsg("Tasks is not an array!");

for(i=0;i<tasks.size;i++)
thread [[tasks[i]]]();


dev_add_playback("soviet", "Threaded tasks have all been initalized");
}
// Searches through an array for something and returns either the index or a boolean
// Args:
// Array = the array you want to search
// item = the thing your trying to find in the array. MUST be the same data type as whats stored in the array
// type = what to return if true. Currently just allows to return the index spot(i) or a boolean.
//
search_array(array, item, type)
{
for(i=0;i<array.size;i++)
{
if(array[i] == item)
{
if(isDefined(type) && type == "index")
return i;
else
return true;
}
}
return false;
}
// Name: spawn_trig_on_notify
// Purpose: To spawn a trigger_radius at the given origin with the given radius, height, and flags
//
// Arguments(name(dataType), description:
// notifyStr(String): The string to wait for before spawning the trig
// Origin(origin): The origin of the trig you want to spawn
// radius(int): radius of the trigger
// height(int): height of the trigger
// spawnflags(int): the spawnflags that you want the trigger to spawn with
//
// Example code:
// trig = spawn_trig_on_notify("ee_blocker_open", self.origin, 24, 24, 0);
//
spawn_trig_on_notify(notifyStr, origin, radius, height, spawnflags)
{
level waittill(notifyStr);

trig = spawn("trigger_radius", origin, spawnflags, radius, height);
trig SetCursorHint("HINT_NOICON");

for(i=0;i<get_players().size;i++)
trig setVisibleToPlayer(get_players()[i]);

return trig;
}
get_basic_entity_info()
{
if(!isDefined(self))
return undefined;

info = [];

if(isDefined(self.targetname))
info["targetname"] = self.targetname;

if(isDefined(self.script_noteworthy))
info["script_noteworthy"] = self.script_noteworthy;

if(isDefined(self.script_string))
info["script_string"] = self.script_string;

if(isDefined(self.script_sound))
info["script_sound"] = self.script_sound;

if(isDefined(self.script_activated))
info["script_activated"] = self.script_activated;

if(isDefined(self.target))
info["target"] = self.target;

return info;
}
set_basic_entity_info(infoArray)
{

if(!isDefined(self) || !isDefined(infoArray))
return;

if(isDefined(infoArray["targetname"]))
self.targetname = infoArray["targetname"];

if(isDefined(infoArray["script_noteworthy"]))
self.script_noteworthy = infoArray["script_noteworthy"];

if(isDefined(infoArray["script_string"]))
self.script_string = infoArray["script_string"];

if(isDefined(infoArray["script_sound"]))
self.script_sound = infoArray["script_sound"];

if(isDefined(self.script_activated))
self.script_activated = infoArray["script_activated"];

if(isDefined(infoArray["target"]))
self.target = infoArray["target"];

}
// returns all the spawners with the same script_noteworthy
get_spawner_array_group(script_noteworthy)
{
return getentarray(script_noteworthy, "script_noteworthy");
}
/*
MATH SECTION
*/
get_percent_increase(change, original)
{
return (change * 100) / original;
}
get_increase_amount(percent, original)
{
return (percent * original) / 100;
}
get_original_amount(percent, increase)
{
return (increase * 100) / percent;
}
roundOff(int, mod, mid)
{
if(!isDefined(int) || !isDefined(mod) || !isDefined(mid))
return undefined;

while(int % mod != 0)
{
if(int % mod >= mid)
int++;
else
int--;
}
return int;
}


Soviet_weapons:

Code Snippet
Plaintext
#include maps\_utility; 
#include common_scripts\utility;
#include maps\_soviet\soviet_utility;
#include maps\_soviet\soviet_dev;

init()
{
if(!isdefined(level.weapon))
level.weapon = [];

level.weapon["weapons"] = getentarray("weapon","targetname");
if(!isdefined(level.weapon["weapons"]))
assertMsg("No Weapons!");
array_thread(level.weapon["weapons"], ::init_guns);

}
init_guns()
{
if(!isdefined(self.script_noteworthy))
assertMsg("No script noteworthy for weapon at " + self.origin);


self.cost = level.cost[level.soviet["gamemode"]][self.script_noteworthy];

if(!isdefined(self.cost))
assertMsg("Cost not defined for weapon: " + self.script_noteworthy);

trig = spawn("trigger_radius",self.origin,0,20,20);
trig SetCursorHint("HINT_NOICON");

for(i=0;i<get_players().size;i++)
trig setVisibleToPlayer(get_players()[i]);

script_noteworthy_old = self.script_noteworthy;

if(strTok(self.script_noteworthy, "_").size > 1)
self.script_noteworthy = strTok(self.script_noteworthy, "_")[0] + " " + strTok(self.script_noteworthy, "_")[1];

trig sethintstring("Press F for weapon " + self.script_noteworthy + "[" + self.cost + level.ctype + " required for weapon, " + (self.cost + 30) + " for ammo]");


while(1)
{
trig waittill("trigger", player);
if(player istouching(trig) && !player hasweapon(script_noteworthy_old) && player usebuttonpressed())
{
if(player.score >= self.cost)
{
player takeweapon(player getcurrentweapon());
player giveweapon(script_noteworthy_old);
player switchtoweapon(script_noteworthy_old);
}
}
else if(player istouching(trig) && player hasweapon(script_noteworthy_old) && player getCurrentWeapon() == script_noteworthy_old && player usebuttonpressed())
{
if(player.score >= self.cost + 30)
player giveMaxAmmo(player getCurrentWeapon());
}


}
}
init_weapon_affects()
{
if(!isDefined(level.soviet["allow_weapon_rotation"]) || isDefined(level.soviet["allow_weapon_rotation"]) && level.soviet["allow_weapon_rotation"] == false)
return;


if(!isDefined(getentarray("weapon","targetname")))
assertMsg("No Weapons in the map to rotate!");


array_thread(getEntArray("weapon", "targetname"), ::affects_think);
}
affects_think()
{
if(!isDefined(level.fx["pickupAvailableEffect"]))
assertMsg("No pickup effect defined!");

if(isDefined(level.soviet["fixedWeaponHeight"]) && level.soviet["fixedWeaponHeight"])
self object_float(45, .001);

playFx(level.fx["pickupAvailableEffect"], self groundPos(self.origin));
while(1)
{
self rotateYaw(-180, 2);
wait(2);

}
}
ammoRegen(weapon, type)
{


while(1)
{

}
}

8 years ago
After much self debate, I've decided to continue developing my HTML5/CSS3 website and release it. The website will support more lower screen resolutions(such as 800x600) than the original version. A modern, HTML5/CSS3 browser is required(every browser released in the last 3 years atleast).

Suggestions for design and content welcome!

Some pictures(CONTENT NOR WEBSITE IS FINAL):

1080P at 100% zoom:



800x600 via add on:

8 years ago
Anyone have any experiences with it? Is it any good?
8 years ago
Heads up for anyone looking to upgrade their PC, Newegg is having their Black November sale right now.

Here are some of my personal picks:

EVGA GeForce GTX 960 4GB FTW

Reason: a hell of a card for 1080P 60FPS gaming. You won't have any trouble getting high/ultra settings with this card, especially if you overclock it!

Requirements: 400 watt or greater power supply. I'd also recommend 30Amps on the 12v rail.

Price: $190
Link: http://www.newegg.com/Product/Product.aspx?Item=N82E16814487164

EVGA GTX 750 TI SC

Reason: A small ultra power efficient graphics card that can be used to bring new life into a crappy OEM desktop. You won't have any trouble getting 60FPS on medium settings on this card. Not (really) overclockable due to not have additional power cables.

Requirement: 300 watt or greater Power supply. I'd also recommend having 24Amps on the 12v rail.

Price: $110
Link: http://www.newegg.com/Product/Product.aspx?Item=N82E16814487024

If anyone else spots any awesome deals(doesn't have to be graphics cards) make sure to post below so other people can check them out!
8 years ago
Utility function that spawns a trigger_radius that can then be used as a normal trigger. If you just want it to spawn and return a trigger you could just remove the notify stuff too.

Function may already exist somewhere in the bowels of the _utility scripts, but i'm too lazy to find it, so i made this instead.

Notice: Function DOES NOT check that each argument has been defined and is the correct datatype, so make sure you pass the correct information properly.

Code Snippet
Plaintext
//	Name: spawn_trig_on_notify
// Purpose: To spawn a trigger_radius at the given origin with the given radius, height, and flags
//
// Arguments(name(dataType): description):
// notifyStr(String): The string to wait for before spawning the trig
// Origin(origin): The origin of the trig you want to spawn
// radius(int): radius of the trigger
// height(int): height of the trigger
// spawnflags(int): the spawnflags that you want the trigger to spawn with
//
// Example code:
// trig = spawn_trig_on_notify("ee_blocker_open", self.origin, 24, 24, 0);
//
spawn_trig_on_notify(notifyStr, origin, radius, height, spawnflags)
{
level waittill(notifyStr);

trig = spawn("trigger_radius", origin, spawnflags, radius, height);
trig SetCursorHint("HINT_NOICON");

for(i=0;i<get_players().size;i++)
trig setVisibleToPlayer(get_players()[i]);

return trig;
}

You could possibly use this to spawn triggers on an entity only when a zone is opened, thus potentially reducing the amount of hintstrings in the map. Just a theory though, haven't test it.
8 years ago
Another function that some may find useful. This utility function will let you easily make an object float from its groundPos(). Might be handy if you need an easier way to set the height of an model or brushmodel from the ground for something your scripting.

Function:

Code Snippet
Plaintext
objectFloat(height)
{
if(!isDefined(self) || !isDefined(height))
return undefined;

self moveTo(self groundPos(self.origin) + (0,0,height), .001);
}

Example usage:

Code Snippet
Plaintext
self objectFloat(45); // gun model floats 45 units in the air

Edit, if you want you can also change the other coordinate values as well by adding more function arguments.
8 years ago
A good number of you only play maps now to find bugs / criticisms - thats not what its about. If a guy wanted you to "test" his map, he would ask you to "test" his map. I would be pretty annoyed myself if i "release" my map, and every comment after is "hey ill go find some bugs for you"

finding bugs along the way is one thing, "looking" for bugs, is just a waste of everyones time unless your asked to

mini rant regarding bugs in custom maps...

Spoiler: click to open...
Perhaps if said mappers would actually test their map, hold betas(and give it to people who actually test it), and use resources like the forum, it wouldn't be an issue. But no, people would rather just jump into the game a few times, hit a trigger, and assume everything is working correctly without ever even checking if it works under all conditions(like COOP).

I fully understand that not everyone has as much experience with GSC as me or other "scripters" in the community, but guys... World at War comes with ways to debug your scripts. Even if you know very little about GSC(or coding in general), you can still give the information that the developer and logfile dvars give you to someone who does and they can help you fix it.

Don't believe me? Perhaps you'd(being anyone) believe an actual Treyarch developer:

Looking at the WaW Scripting Support forum section, it seems like a lot of problems can be solved quite easily without much help if doing some debugging. This tutorial is easy enough that you don't need much scripting knowledge, if anything, it'll let you post valuable information when seeking help for people to better assist you.

tutorial link: http://ugx-mods.com/forum/index.php/topic,2891.0.html

and running your map with developer is more than just fixing errors that pop on the screen, there are functions that can be used for further debugging that only work in developer. These can be used to notify(in a sense) of something going wrong in your script that isn't an actual script error(runtime).

 

Honestly, i really just hope this isn't as big of an issue in BO3 custom maps(if they do decide to have mod tools).
8 years ago
Thought i'd share some personal, hopefully interesting, WaW memory observations. I'm not saying that these are 100% fact, just what I've observed.

1. Random errors can happen if the game fails to allocate enough memory.

2. In extreme cases, World at War will skip developer errors that would otherwise prevent you from loading the map with developer and developer_script enabled. Errors encountered in-game(such as assertMsg) will still kick you out though like normal. Yes, the errors that normally would kick you out of the map otherwise are legit.

3. World at War has less trouble allocating memory in full screen than in Windowed mode.

4. For whatever reason, World at War seems to load assets from other directories without being told to(via mod load and devmap or map command). This can cause a wide variety of script related issues.

5. World at War seems to load(compile) a map a little differently each time(see 1 & 2) you do it.
8 years ago
This tutorial will show you how to give a player a random amount of points using roundOff (avoiding the inaccurate HUD).

First thing you'l need is my roundOff() function here: http://ugx-mods.com/forum/index.php/topic,8679.0.html

I recommend pasting that in root/raw/maps/_utility.gsc, as it is a utility function, but you can just paste it in the bottom of whatever script your going to use it in(wouldn't recommend it though).

Next, copy this:

Code Snippet
Plaintext
<player> maps\_zombiemode_score::add_to_player_score(roundOff(randomIntRange(10, 2000), 10, 5));

to wherever you need it. Make sure to change <player> to whatever the script needs.

Finally, adjust the parameters of randomIntRange to return the random integer(number) that you want.



If the compressed version is too hard to read, you can also use this longer form:

Code Snippet
Plaintext
	int = randomIntRange(10, 4000);
int = roundOff(int, 10, 5)
maps\_zombiemode_score::add_to_player_score(int);



Want to verify that its working correctly? Use this version of the function to see what the original integer is and how its rounding:

Code Snippet
Plaintext
roundOff(int, mod, mid)
{
if(!isDefined(int) || !isDefined(mod) || !isDefined(mid))
return undefined;

while(int % mod != 0)
{
iprintln(int);
if(int % mod >= mid)
int++;
else
int--;
}
return int;
}

First integer it prints is the original that randomIntRange returns.
9 years ago
Code Snippet
Plaintext
/*
--SCRIPT DOC BEGIN--

Purpose: to round a uneven integer(int) to a even number based off of the given mod(mod) and using the provided middle integer(mid) to determine if the integer should be incremented positively or negatively.

Variables:
-int = Any number.
-mod = the modulus number to use.
-mid = the value to compare to determine if the function should add or subtract.

Example Usage:
iprintln(roundOff(375, 20, 10));

Example Usage Result:
360

--SCRIPT DOC END--
*/

roundOff(int, mod, mid)
{
if(!isDefined(int) || !isDefined(mod) || !isDefined(mid))
return undefined;

while(int % mod != 0)
{
if(int % mod >= mid)
int++;
else
int--;
}
return int;
}
Credit me if used.
9 years ago
Loading ...