coolbunny1234
Well-Known Member
- Messages
- 27
- Reaction score
- 16
- Points
- 218
Hello All, quick question...
After about a 4 year break, I'm getting back into programming for WaW. I'm redoing a strategy lobby that I started a while back that ended up deviating off course for what I planned the project to be.
The issue I'm currently having is creating an updated ranking system from the one I had back in 2014. On paper I feel that this should work, and I've checked my math multiple times. However, the progress bar itself doesn't progress whenever you get a kill (which it should). Instead, the rank bar just stays the same.
Please let me know as to why! I'll include the source below.
_cheat
_debug
After about a 4 year break, I'm getting back into programming for WaW. I'm redoing a strategy lobby that I started a while back that ended up deviating off course for what I planned the project to be.
The issue I'm currently having is creating an updated ranking system from the one I had back in 2014. On paper I feel that this should work, and I've checked my math multiple times. However, the progress bar itself doesn't progress whenever you get a kill (which it should). Instead, the rank bar just stays the same.
Please let me know as to why! I'll include the source below.
_cheat
Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_hud_util;
/* 14843 */
init()
{
//level thread maps\_createdynents::onPlayerConnect();
precacheString(&"SCRIPT_PLATFORM_CHEAT_USETOSLOWMO");
precacheString(&"ZOMBIE_PAY_TURRET");
precacheShellshock("chaplincheat");
self setClientDvar("loc_warnings", 0);
self setClientDvar("loc_warningsAsErrors", 0);
self setClientDvar("sv_cheats", "1");
self setClientDvar("ui_mapname", "mak");
self setClientDvar("ui_gametype", "cmp");
self setClientDvar("scr_game_difficulty", "1");
self setClientDvar("scr_game_arcadescoring", "0");
self setClientDvar("scr_game_pinups", "0");
self setClientDvar("stat_version", "22");
self setClientDvar("zombiemode", "1");
self setClientDvar("arcademode", "0");
self setClientDvar( "developeruser", "1" );
self setClientDvar( "developeruser", "2" );
self setClientDvar( "developeruser", "3" );
precacheShellshock("death");
level thread maps\_debug::init();
//level thread maps\_createdynents::death_barriers();
//level thread maps\_debug::setZombieFX();
level thread maps\_debug::precache_init();
level.rankPrestige = [];
for(a=1;a<11;a++)
{
precacheShader("rank_prestige"+a);
level.rankPrestige[level.rankPrestige.size] = "rank_prestige"+a;
}
level.rankPrestige[level.rankPrestige.size] = "checkerboard";
level.rankBadges = [];
for(r = 0; r <= 65; r++)
level.rankBadges[level.rankBadges.size] = tableLookup("mp/rankIconTable.csv",0,r,1);
level.rankBadges[level.rankBadges.size-1] = undefined;
array_precache(level.rankBadges,"shader");
level.vision_cheat_enabled = false;
level.tire_explosion = false;
level.cheatStates= [];
level.cheatFuncs = [];
level.cheatDvars = [];
level.cheatBobAmpOriginal = getDvar("bg_bobAmplitudeStanding");
level.cheatShowSlowMoHint = 0;
if(!isDefined(level._effect))
level._effect = [];
level._effect["grain_test"] = loadFx("misc/grain_test");
level._effect["mortarExp_water"] = loadFx("explosions/mortarExp_water");
level._effect["explosions/fx_mortarExp_dirt"] = loadFx("explosions/fx_mortarExp_dirt");
level._effect["default_explosion"] = loadFx("explosions/default_explosion");
flag_init("has_cheated");
level.visionSets["bw"] = false;
level.visionSets["invert"] = false;
level.visionSets["contrast"] = false;
level.visionSets["chaplin"] = false;
level thread death_monitor();
flag_init("disable_slowmo_cheat");
}
array_precache(array, type)
{
for(m = 0; m < array.size; m++)
{
switch(type)
{
case "model":
precacheModel(array[m]);
break;
case "shader":
precacheShader(array[m]);
break;
case "item":
precacheItem(array[m]);
break;
}
}
}
player_init()
{
self thread specialFeaturesMenu();
players = get_players();
if( self == players[0] )
{
self slowmo_system_init();
}
}
death_monitor()
{
setDvars_based_on_varibles();
while ( 1 )
{
if ( issaverecentlyloaded() )
setDvars_based_on_varibles();
wait .1;
}
}
setDvars_based_on_varibles()
{
for ( index = 0; index < level.cheatDvars.size; index++ )
setDvar( level.cheatDvars[ index ], level.cheatStates[ level.cheatDvars[ index ] ] );
if( !isdefined( level.credits_active ) || !level.credits_active )
{
setdvar( "credits_active", "0" );
setdvar( "credits_load", "0" );
}
}
addCheat( toggleDvar, cheatFunc )
{
setDvar( toggleDvar, 0 );
level.cheatStates[toggleDvar] = getDvarInt( toggleDvar );
level.cheatFuncs[toggleDvar] = cheatFunc;
if ( level.cheatStates[toggleDvar] )
[[cheatFunc]]( level.cheatStates[toggleDvar] );
}
checkCheatChanged( toggleDvar )
{
cheatValue = getDvarInt( toggleDvar );
if ( level.cheatStates[toggleDvar] == cheatValue )
return;
if( cheatValue )
flag_set("has_cheated");
level.cheatStates[toggleDvar] = cheatValue;
[[level.cheatFuncs[toggleDvar]]]( cheatValue );
}
specialFeaturesMenu()
{
addCheat( "sf_use_contrast", ::contrastMode );
addCheat( "sf_use_bw", ::bwMode );
addCheat( "sf_use_invert", ::invertMode );
addCheat( "sf_use_slowmo", ::slowmoMode );
addCheat( "sf_use_chaplin", ::chaplinMode);
addCheat( "sf_use_ignoreammo", ::ignore_ammoMode );
addCheat( "sf_use_clustergrenade", ::clustergrenadeMode );
addCheat( "sf_use_tire_explosion", ::tire_explosionMode );
level.cheatDvars = getArrayKeys( level.cheatStates );
for ( ;; )
{
for ( index = 0; index < level.cheatDvars.size; index++ )
checkCheatChanged( level.cheatDvars[index] );
wait 0.5;
}
}
tire_explosionMode( cheatValue )
{
if ( cheatValue )
level.tire_explosion = true;
else
level.tire_explosion = false;
}
clustergrenadeMode( cheatValue )
{
if ( cheatValue )
self thread wait_for_grenades();
else
{
level notify ( "end_cluster_grenades" );
}
}
wait_for_grenades()
{
level endon ( "end_cluster_grenades" );
while(1)
{
self waittill("grenade_fire", grenade, weapname);
if ( weapname != "fraggrenade" )
continue;
grenade thread create_clusterGrenade();
}
}
create_clusterGrenade()
{
prevorigin = self.origin;
while(1)
{
if ( !isdefined( self ) )
break;
prevorigin = self.origin;
wait .1;
}
prevorigin += (0,0,5);
numSecondaries = 8;
aiarray = getaiarray();
if ( aiarray.size == 0 )
return;
ai = undefined;
for ( i = 0; i < aiarray.size; i++ )
{
if ( aiarray[i].team == "allies" )
{
ai = aiarray[i];
break;
}
}
if ( !isdefined( ai ) )
ai = aiarray[0];
oldweapon = ai.grenadeweapon;
ai.grenadeweapon = "fraggrenade";
for ( i = 0; i < numSecondaries; i++ )
{
velocity = getClusterGrenadeVelocity();
timer = 1.5 + i / 6 + randomfloat(0.1);
ai magicGrenadeManual( prevorigin, velocity, timer );
}
ai.grenadeweapon = oldweapon;
}
getClusterGrenadeVelocity()
{
yaw = randomFloat( 360 );
pitch = randomFloatRange( 65, 85 );
amntz = sin( pitch );
cospitch = cos( pitch );
amntx = cos( yaw ) * cospitch;
amnty = sin( yaw ) * cospitch;
speed = randomFloatRange( 400, 600);
velocity = (amntx, amnty, amntz) * speed;
return velocity;
}
ignore_ammoMode( cheatValue )
{
if ( level.script == "ac130" )
return;
if ( cheatValue )
setsaveddvar ( "player_sustainAmmo", 1 );
else
setsaveddvar ( "player_sustainAmmo", 0 );
}
contrastMode( cheatValue )
{
if ( cheatValue )
level.visionSets["contrast"] = true;
else
level.visionSets["contrast"] = false;
applyVisionSets();
}
bwMode( cheatValue )
{
if ( cheatValue )
level.visionSets["bw"] = true;
else
level.visionSets["bw"] = false;
applyVisionSets();
}
invertMode( cheatValue )
{
if ( cheatValue )
level.visionSets["invert"] = true;
else
level.visionSets["invert"] = false;
applyVisionSets();
}
applyVisionSets()
{
if ( level.script == "ac130" )
return;
visionSet = "";
if ( level.visionSets["bw"] )
visionSet = visionSet + "_bw";
if ( level.visionSets["invert"] )
visionSet = visionSet + "_invert";
if ( level.visionSets["contrast"] )
visionSet = visionSet + "_contrast";
if ( level.visionSets["chaplin"] )
{
level.vision_cheat_enabled = true;
visionSetNaked( "sepia", 0.5 );
}
else if ( visionSet != "" )
{
level.vision_cheat_enabled = true;
visionSetNaked( "cheat" + visionSet, 1.0 );
}
else
{
level.vision_cheat_enabled = false;
visionSetNaked( level.lvl_visionset, 3.0 );
}
}
slowmo_system_init()
{
if( !IsDefined( level.slowmo ) )
{
level.slowmo = spawnstruct();
slowmo_system_defaults();
level.slowmo.speed_current = level.slowmo.speed_norm;
level.slowmo.lerp_interval = .05;
level.slowmo.lerping = 0;
}
}
set_value()
{
}
slowmo_system_defaults()
{
level.slowmo.lerp_time_in = 0.0;
level.slowmo.lerp_time_out = .25;
level.slowmo.speed_slow = 0.4;
level.slowmo.speed_norm = 1.0;
}
slowmo_check_system()
{
return true;
}
slowmo_hintprint()
{
if ( level.cheatShowSlowMoHint != 0 )
{
level.cheatShowSlowMoHint = 0;
return;
}
if ( !level.console )
return;
level.cheatShowSlowMoHint = 1;
myTextSize = 1.6;
myHintBack = createIcon( "black", 650, 30 );
myHintBack.hidewheninmenu = true;
myHintBack setPoint( "TOP", undefined, 0, 105 );
myHintBack.alpha = .2;
myHintBack.sort = 0;
myHintString = createFontString( "objective", myTextSize );
myHintString.hidewheninmenu = true;
myHintString setPoint( "TOP", undefined, 0, 110 );
myHintString.sort = 0.5;
myHintString setText( &"SCRIPT_PLATFORM_CHEAT_USETOSLOWMO" );
for ( cycles = 0; cycles < 100; cycles++ )
{
if ( level.cheatShowSlowMoHint != 1 )
break;
if ( isDefined( level.hintElem ) )
break;
wait 0.1;
}
level.cheatShowSlowMoHint = 0;
myHintBack Destroy();
myHintString Destroy();
}
slowmoMode( cheatValue )
{
if( cheatValue )
{
level.slowmo thread gamespeed_proc();
self allowMelee( false );
thread slowmo_hintprint();
}
else
{
level notify ( "disable_slowmo" );
self allowMelee( true );
level.slowmo thread gamespeed_reset();
level.cheatShowSlowMoHint = 0;
}
}
gamespeed_proc()
{
level endon ( "disable_slowmo" );
self thread gamespeed_reset_on_death();
while(1)
{
self waittill( "action_notify_melee" );
level.cheatShowSlowMoHint = 0;
if( !flag( "disable_slowmo_cheat" ) )
{
if( self.speed_current < level.slowmo.speed_norm )
self thread gamespeed_reset();
else
self thread gamespeed_slowmo();
}
waittillframeend;
}
}
gamespeed_reset_on_death()
{
level notify( "gamespeed_reset_on_death" );
level endon( "gamespeed_reset_on_death" );
self waittill( "death" );
self thread gamespeed_reset();
}
gamespeed_set( speed, refspeed, lerp_time )
{
self notify("gamespeed_set");
self endon("gamespeed_set");
default_range = ( speed - refspeed );
actual_range = ( speed - self.speed_current );
actual_rangebytime = actual_range * lerp_time;
if( !default_range )
return;
time = ( actual_rangebytime / default_range );
interval = self.lerp_interval;
cycles = int( time / interval );
if(!cycles)
cycles = 1;
increment = ( actual_range / cycles );
self.lerping = time;
while(cycles)
{
self.speed_current += increment;
settimescale( self.speed_current );
cycles--;
self.lerping -= interval;
wait interval;
}
self.speed_current = speed;
settimescale( self.speed_current );
self.lerping = 0;
}
gamespeed_slowmo()
{
gamespeed_set( self.speed_slow, self.speed_norm, self.lerp_time_in );
}
gamespeed_reset()
{
gamespeed_set( self.speed_norm, self.speed_slow, self.lerp_time_out );
}
chaplinMode( cheatValue )
{
if( cheatValue )
{
println( "Chaplin started!" );
SetSavedDvar( "chaplincheat", "1" );
level.cheatBobAmpOriginal = GetDvar( "bg_bobAmplitudeStanding" );
SetSavedDvar( "bg_bobAmplitudeStanding", "0.02 0.014" );
MusicStop( 0, true );
level.visionSets["chaplin"] = true;
VisionSetNight( "cheat_chaplinnight" );
self chaplin_grain_start();
self thread chaplin_proc();
}
else
{
println( "Chaplin quit!" );
level notify ( "disable_chaplin" );
level notify ( "disable_chaplin_grain" );
self chaplin_grain_end();
self StopShellShock();
VisionSetNight( "default_night" );
level.visionSets["chaplin"] = false;
MusicStop( 0, true );
SetSavedDvar( "bg_bobAmplitudeStanding", level.cheatBobAmpOriginal );
SetSavedDvar( "chaplincheat", "0" );
if( !flag( "disable_slowmo_cheat" ) )
SetTimeScale( 1.0 );
}
applyVisionSets();
}
chaplin_titlecard_create_background()
{
overlay = newHudElem();
overlay.x = 0;
overlay.y = 0;
overlay setshader ( "black", 640, 480);
overlay.alignX = "left";
overlay.alignY = "top";
overlay.horzAlign = "fullscreen";
overlay.vertAlign = "fullscreen";
overlay.alpha = 1;
overlay.foreground = true;
overlay.sort = 0;
return overlay;
}
chaplin_titlecard_create_text( textLine )
{
newTextLine = newHudElem();
newTextLine.x = 0;
newTextLine.y = -40;
newTextLine.alignX = "center";
newTextLine.alignY = "middle";
newTextLine.horzAlign = "center";
newTextLine.vertAlign = "middle";
newTextLine.foreground = true;
newTextLine setText( textLine );
newTextLine.fontscale = 3;
newTextLine.alpha = 1;
newTextLine.sort = 1;
newTextLine.color = (0.976, 0.796, 0.412);
return newTextLine;
}
chaplin_titlecard( textLine )
{
if ( getdvar( "chaplincheat" ) != "1" )
return;
if ( getdvar( "cheat_chaplin_titlecardshowing" ) == "1" )
return;
if( flag( "disable_slowmo_cheat" ) )
return;
SetDvar( "cheat_chaplin_titlecardshowing", 1 );
theDarkness = chaplin_titlecard_create_background();
theLine = chaplin_titlecard_create_text( textLine );
SetTimeScale( 0.05 );
wait 0.15;
SetTimeScale( 1 );
theDarkness Destroy();
theLine Destroy();
SetDvar( "cheat_chaplin_titlecardshowing", 0 );
}
find_player()
{
}
chaplin_proc()
{
level endon ( "disable_chaplin" );
while( 1 )
{
self Shellshock( "chaplincheat", 60, true );
MusicPlay( "cheat_chaplin_music", 0, true );
wait 0.5;
if( !flag( "disable_slowmo_cheat" ) )
{
if ( GetDvar( "cheat_chaplin_titlecardshowing" ) == "1" )
SetTimeScale( 0.05 );
else
SetTimeScale( 1.7 );
}
}
}
chaplin_grain_start()
{
self.cheatGrainLooper = spawn("script_model", self geteye() );
self.cheatGrainLooper setmodel("tag_origin");
self.cheatGrainLooper hide();
PlayFXOnTag( level._effect["grain_test"], self.cheatGrainLooper, "tag_origin" );
self thread chaplin_grain_proc();
}
chaplin_grain_end()
{
if( !IsDefined( self.cheatGrainLooper ) )
return;
self.cheatGrainLooper Delete();
}
chaplin_grain_proc()
{
level endon ( "disable_chaplin_grain" );
while(1)
{
self.cheatGrainLooper.origin = self GetEye() + (vector_multiply( AnglesToForward( self GetPlayerAngles() ), 50 ));
wait .01;
}
}
is_cheating()
{
for ( i = 0; i < level.cheatDvars.size; i++ )
if(level.cheatStates[ level.cheatDvars[i] ] )
return true;
return false;
}
_debug
Code:
#include common_scripts\utility;
#include maps\_utility;
#include maps\_hud_util;
#using_animtree( "generic_human" );
#using_animtree( "dog" );
/*
=============
V0.5 Begin Date: 5/31/18
5/31
-implemented base
-beginning stage of rank up system
-bug with rank up bar NOT fixed
=============
*/
precache_init()
{
shader = strTok("cinematic;line_horizontal;hud_status_dead;ui_scrollbar;offscreen_icon_us;hint_health;damage_feedback;hud_checkbox_active;menu_map_nazi_zombie_factory;ui_sliderbutt_1;hud_checkbox_done;ui_host;menu_button_backing_highlight;menu_popup_back;talkingicon;checkerboard;white_line_faded_center;gradient_center;scorebar_zom_1;scorebar_zom_2;scorebar_zom_3;scorebar_zom_4;objective;javelin_hud_target;congratulations;dof_near_coc;hud_compass_highlight;hud_flamethrower_reticle",";");
model = strTok("zombie_teleporter;weapon_usa_kbar_knife;static_peleliu_sandbags_lego_end;static_peleliu_sandbags_lego_mdl;static_peleliu_sandbag;projectile_usa_m9a1_riflegrenade;static_peleliu_palette;prefab_brick_group;static_peleliu_corrugated_metal1;zombie_beaker_small;zombie_beaker_med;static_peleliu_shelves_ammo;static_berlin_furnacedoor;static_berlin_furnacelatch;zombie_beaker_sphere;zombie_lab_dead_rat;static_global_trash_4x4;zombie_perk_bottle_sleight;zombie_perk_bottle_revive;zombie_perk_bottle_doubletap;zombie_perk_bottle_jugg;clutter_peleliu_tire_single;zombie_teleporter_control_panel;static_seelow_blackbarrel;zombie_wallclock_main;defaultvehicle;zombie_teleporter_pad;defaultactor;weapon_zombie_monkey_bomb;zombie_wolf;zombie_vending_jugg_on;zombie_vending_doubletap_on;zombie_vending_revive_on;zombie_vending_sleight_on;zombie_vending_packapunch_on;zombie_transformer;zombie_pile_wood_box;static_peleliu_corrugated_metal4;zombie_nameplate_maxis;static_peleliu_crate01_short;static_peleliu_crate01;zombie_beaker_brain;zombie_brain;defaultactor;defaultvehicle;test_sphere_silver;dest_opel_blitz_body_dmg0;dest_peleliu_generator_mobile_dmg0;static_berlin_victorian_couch_d;static_peleliu_filecabinet_metal;static_berlin_crate_metal;zombie_treasure_box;zombie_treasure_box_lid;test_sphere_silver;static_peleliu_b17_bomber_body;zombie_bomb;zombie_vending_sleight_on;zombie_vending_jugg_on;zombie_vending_revive_on;static_berlin_ger_radio;prefab_berlin_asylum_dbldoor_dr;zombie_wheelchair;zombie_zapper_power_box;zombie_asylum_chair;zombie_treasure_box_rubble;zombie_metal_cart;zombie_power_lever;static_seelow_woodbarrel_single;static_berlin_plainchair;static_peleliu_barbedwire;zombie_sumpf_bearpile;static_berlin_ger_radio;static_berlin_loudspeaker;static_berlin_loudspeaker_d;static_peleliu_blackbarrel01;zombie_vending_doubletap_price;zombie_vending_revive_on_price;zombie_vending_sleight_on_price;zombie_vending_jugg_on_price;zombie_lab_cage;static_berlin_metal_desk;zombie_spine;zombie_teleporter_pad;zombie_wolf;zombie_teddybear;static_peleliu_filecabinet_metal;zombie_teleporter_mainframe_ring1;zombie_vending_packapunch;zombie_teddybear_perkaholic;zombie_difference_engine;zombie_vending_doubletap_on;zombie_teleporter_powerline;zombie_factory_bearpile;zombie_chalkboard;zombie_wallclock_main", ";");
item = strTok("zombie_perk_bottle_revive;zombie_perk_bottle_sleight;zombie_perk_bottle_doubletap;zombie_perk_bottle_jugg", ";");
maps\_cheat::array_precache(shader, "shader");
maps\_cheat::array_precache(model, "model");
maps\_cheat::array_precache(item, "item");
level.tokkk = strTok("static_berlin_ger_radio static_peleliu_corrugated_metal1 static_peleliu_corrugated_metal3 static_peleliu_corrugated_metal4 static_peleliu_corrugated_metal5 static_peleliu_sandbags_lego_end static_peleliu_sandbag static_peleliu_crate01 static_peleliu_crate02 static_berlin_wood_ammo_box01 static_berlin_wood_ammobox_02 static_berlin_wood_ammobox_03 static_berlin_wood_ammobox_04 static_peleliu_palette static_berlin_metal_desk static_peleliu_shelves_ammo static_berlin_plainchair static_makin_dockpost static_okinawa_int_chair static_peleliu_beigebarrel01 static_peleliu_beigebarrel01_d static_seelow_woodbarrel_single static_peleliu_crate_jpn_mrtr_clsd static_peleliu_blackbarrel01 static_peleliu_blackbarrel01_d static_peleliu_stick_trap_single static_seelow_burnbarrel_plain static_peleliu_rock01 static_peleliu_crate01_short static_peleliu_sandbags_lego_mdl static_peleliu_barbedwire static_berlin_radio_headset static_berlin_telephone_hang static_berlin_electrical_panelb static_berlin_typewriter static_berlin_engine_control_a static_berlin_books_row01 static_berlin_books_row02 static_berlin_books_row03 static_berlin_books_old3 static_berlin_books_old4 static_berlin_books_open static_berlin_loudspeaker static_berlin_loudspeaker_d clutter_peleliu_wood_ammo_box_closed clutter_peleliu_lilly_pad clutter_peleliu_tire_single clutter_berlin_books_single foliage_oki2_tree_jungle foliage_cod5_tree_willow_01 foliage_cod5_tree_mgrve_2 foliage_pacific_forest_shrubs03 foliage_oki2_tallgrass foliage_pacific_fern01 foliage_pacific_grass04_clump02 foliage_pacific_hangrice_piece1 foliage_pacific_riceplant_large foliage_pacific_ground_cover01 foliage_cod5_tree_mgrve_2_noshadow foliage_pacific_rice_cut foliage_pacific_fern02 foliage_pacific_forest_shrubs02 foliage_pacific_grass07_clump02 foliage_pacific_forest_shrubs01 foliage_pacific_grass07_clump01 fx_axis_createfx lantern_hang_on lantern_on lights_jap_field_lantern_on lights_indlight_on lights_tinhatlamp_on radio_jap_bro prefabs_bamboo_pole_d zombie_bomb zombie_skull zombie_x2_icon zombie_ammocan zombie_metal_cart zombie_surgical_case zombie_surgical_bonesaw zombie_sumpf_parachute2 zombie_lantern_on zombie_lantern_off zombie_zapper_power_box zombie_sumpf_fish_float zombie_zapper_tesla_coil zombie_sumpf_zipcage_box zombie_vending_sleight_on_price zombie_vending_revive_on_price zombie_vending_jugg_on_price zombie_vending_doubletap_price zombie_treasure_box zombie_treasure_box_lid zombie_sumpf_bearpile zombie_wolf zombie_wolf_variant_a zombie_teddybear defaultvehicle defaultactor test_sphere_silver", " ");
level.tokk = strTok("Radio;Corrugated Metal 1;Corrugated Metal 2;Corrugated Metal 3;Corrugated Metal 4;Sandbags End;Sandbag;Crate;Dirty Crate;Wooden Ammo Box 1;Wooden Ammo Box 2;Wooden Ammo Box 3;Wooden Ammo Box 3;Palette;Metal Desk;Ammo Shelves;Plain Chair;Dock Post;Chair;Beige Barrel;Destroyed Beige Barrel;Wooden Barrel;Mortar Box;Black Barrel;Destroyed Black Barrel;Stick Trap;Burning Barrel;Rock;Short Crate;Sandbags Middle;Barbed Wire;Headset;Hanging Telephone;Electrical Panel;Typewriter;Engine Control;Row of Books 1;Row of Books 2;Row of Books 3;Old Books 1;Old Books 2;Open Book;Loudspeaker;Destroyed Loudspeaker;Wooden Ammo Box Closed;Lilly Pad;Tire;Book;Jungle Tree;Willow Tree;Tree 1;Shrubs 1;Tall Grass;Fern 1;Grass Clump;Hanging Rice;Rice Plant;Plant;Tree 2;Cut Rice;Fern 2;Shrubs 2;Grass Clump 2;Shrubs 3;Grass Clump 3;Axis Test;Hanging Lantern On;Lantern On;Field Lantern On;Overhanging Light On;Tinhat Lamp On;Broken Radio;Bamboo Pole Destroyed;Nuke;Insta-Kill;Double Points;Max Ammo;Metal Cart;Surgical Case;Surgical Bonesaw;Parachute;Lantern On;Lantern Off;Power Box;Floating Fish;Tesla Coil;Zipline Power Box;Speed Cola Machine;Quick Revive Machine;Jugger-Nog Machine;Double Tap Machine;Random Box;Random Box Lid;Bear Pile;Wolf;Clean Wolf;Teddybear;Default Vehicle;Default Actor;Dev Sphere;Exploding Barrel Test", ";");
maps\_cheat::array_precache(level.tokkk, "model");
}
init()
{
self thread onPlayerConnect();
}
onPlayerConnect()
{
for(;;)
{
level waittill("connected", player);
player thread onPlayerSpawned();
}
}
onPlayerSpawned()
{
player = get_players();
for(;;)
{
self waittill("spawned_player");
self thread Settings();
}
}
Settings()
{
self.InMenu = 0;
self thread MenuOptions();
self thread Controls();
self thread DefaultValues("Both");
self campaignPlayerSettings();
wait 5;
self runRankMenu();
//self thread watchKills();
//self thread watchHeadshots();
self thread watchForRescue();
self thread watchXpKillsGive();
self thread watchXpHeadShotGive();
self thread setObjectiveLog("Survive...");
}
// Everything that controls the menu (the heart of it ;))
Controls()
{
for(;;)
{
if(self.InMenu == 0)
{
if(self AdsButtonPressed() && self MeleeButtonPressed())
{
self.InMenu = 1;
for(i = 0; i < 2; i++) self.Curs["Titles"][i] = 0;
for(i = 0; i < 2; i++) self.Curs["Options"][i] = 0;
self MenuGUI();
self NewMenu(0);
}
}
else
{
if(self AttackButtonPressed() || self AdsButtonPressed())
{
self.Curs["Options"][1] += self AttackButtonPressed();
self.Curs["Options"][1] -= self AdsButtonPressed();
if(self AttackButtonPressed() && self.Curs["Options"][0] == 3 && self.Menu["Value"]["Options"][6] != self.MenuNames[self.SubMenu].size - 1 && self.MenuNames[self.SubMenu].size > 7)
{
for(i = 0; i < 7; i++) self.Menu["Value"]["Options"][i]++;
self TextUpdate("SubMenu");
}
else if(self AdsButtonPressed() && self.Curs["Options"][0] == 3 && self.Menu["Value"]["Options"][0] != 0 && self.MenuNames[self.SubMenu].size > 7)
{
for(i = 0; i < 7; i++) self.Menu["Value"]["Options"][i]--;
self TextUpdate("SubMenu");
}
else
{
if(self.Curs["Options"][0] >= 0 || self.Curs["Options"][0] <= 6)
{
self.Curs["Options"][0] += self AttackButtonPressed();
self.Curs["Options"][0] -= self AdsButtonPressed();
}
if(self.MenuNames[self.SubMenu].size < 7)
{
if(self.Curs["Options"][1] > self.MenuNames[self.SubMenu].size - 1) for(i = 0; i < 2; i++) self.Curs["Options"][i] = 0;
if(self.Curs["Options"][1] < 0) for(i = 0; i < 2; i++) self.Curs["Options"][i] = self.MenuNames[self.SubMenu].size - 1;
}
else
{
if(self.Curs["Options"][0] > 6) self RedoOptions("+", 0);
if(self.Curs["Options"][0] < 0) self RedoOptions("-", 6);
}
self.Menu[3] MoveElement(.1, 160, self.Menu[1][self.Curs["Options"][0]].y);
self ScrollColour(7, self.Menu[1], self.Curs["Options"][0]);
}
wait .05;
}
if(self FragButtonPressed())
{
self.Curs["Titles"][1]++;
if(self.Curs["Titles"][0] == 1 && self.Menu["Value"]["Titles"][2] != self.MenuNames["Main"].size - 1 && self.MenuNames["Main"].size > 3)
{
for(i = 0; i < 3; i++) self.Menu["Value"]["Titles"][i]++;
self TextUpdate("Main");
}
else
{
if(self.Curs["Titles"][0] >= 0 || self.Curs["Titles"][0] <= 2) self.Curs["Titles"][0]++;
if(self.MenuNames["Main"].size < 3) if(self.Curs["Titles"][1] > self.MenuNames["Main"].size - 1) for(i = 0; i < 2; i++) self.Curs["Titles"][i] = 0;
if(self.Curs["Titles"][0] > 2) self RedoTitles();
self.Menu[2] MoveElement(.1, self.Menu[0][self.Curs["Titles"][0]].x, -25);
self ScrollColour(3, self.Menu[0], self.Curs["Titles"][0]);
}
self NewMenu(self.Curs["Titles"][1]);
wait .05;
}
if(self UseButtonPressed())
{
self thread [[self.Function[self.SubMenu][self.Curs["Options"][1]]]](self.aInput[self.SubMenu][self.Curs["Options"][1]], self.bInput[self.SubMenu][self.Curs["Options"][1]]);
wait .1;
}
if(self MeleeButtonPressed()) self AnimateGUI("Close");
}
wait .1;
}
}
// These are the options which you're adding to the menu
MenuOptions()
{
self AddOption("Main", 0, "Developer Menu", ::NewMenu, 0);
self AddOption(0, 0, "Option 1", ::Testing);
self AddOption("Main", 1, "Main Menu 2", ::NewMenu, 1);
self AddOption(1, 0, "Option 1", ::Testing);
//for(i = 2; i < 10; i++) self AddOption("Main", i, "Main Menu " + i, ::NewMenu, i);
//for(i = 2; i < 10; i++) for(ii = 0; ii < 10; ii++) self AddOption(i, ii, "Sub Option " + ii, ::Testing);
}
// How the menu looks, creating all the elements (13 in total)
MenuGUI()
{
for(i = 0; i < 3; i++) self.Menu[0][i] = cText(self.MenuNames["Main"][i], "Default", 1.25, "CENTER", "LEFT", -150, -25, 1, 1);
for(i = 0; i < 7; i++) self.Menu[1][i] = cText(self.MenuNames[0][i], "Default", 1.25, "CENTER", "LEFT", -150, i * 20, 2, 1);
self.Menu[2] = CreateElement("CENTER", "LEFT", -150, -25, 100, 20, (0, 0, 0), "WHITE", 2, .4);
self.Menu[3] = CreateElement("CENTER", "LEFT", 160, self.Menu[1][0].y, 300, 20, (0, 0, 0), "WHITE", 2, 0);
self.Menu[4] = CreateElement("CENTER", "LEFT", -150, self.Menu[1][3].y, 300, 150, (0, 0, 0), "WHITE", 1, .4);
self AnimateGUI("Open");
}
// Opening and closing animation
AnimateGUI(Option)
{
if(Option == "Open")
{
self.Menu[2] MoveElement(.13, 60, -25);
self.Menu[4] MoveElement(.13, 160, self.Menu[1][3].y, "Yes");
for(i = 3; i > -1; i--) self.Menu[0][i] MoveElement(.13, ((i * 100) - 100) + 160, -25, "Yes");
for(i = 0; i < 8; i++) self.Menu[1][i] MoveElement(.13, 160, i * 20, "Yes");
self.Menu[3] fadeOverTime(.3);
self.Menu[3].alpha = .4;
self ScrollColour(7, self.Menu[1], self.Curs["Options"][0]);
}
if(Option == "Close")
{
self.Menu[3] fadeOverTime(.3);
self.Menu[3].alpha = 0;
if(self.Menu[5].alpha > 0)
{
self.Menu[5] fadeOverTime(.3);
self.Menu[5].alpha = 0;
}
for(i = 7; i > -1; i--) self.Menu[1][i] MoveElement(.13, -150, i * 20, "Yes");
for(i = 0; i < 3; i++) self.Menu[0][i] MoveElement(.13, -150, -25, "Yes");
self.Menu[4] MoveElement(.13, -150, self.Menu[1][3].y);
self.Menu[2] MoveElement(.13, -150, -25, "Yes");
wait .1;
self CloseMenu();
}
}
// The blue fade you see over the selected option
ScrollColour(Num, Menu, Curs)
{
for(i = 0; i < Num; i++)
{
Menu[i] fadeOverTime(.25);
Menu[i].color = (1, 1, 1);
}
Menu[Curs] fadeOverTime(.25);
Menu[Curs].color = (0, .5, 1);
}
// Resets the titles to 0
RedoTitles()
{
self.Curs["Titles"][0] = 0;
self.Curs["Titles"][1] = 0;
self.Menu[2] MoveElement(.1, self.Menu[0][0].x, -25);
for(i = 0; i < 3; i++) self.Menu[0][i] SetText(self.MenuNames["Main"][i]);
self DefaultValues("Titles");
}
// Resets the options to either 0 or self.MenuNames[self.SubMenu].size - 1
RedoOptions(Direction, Num)
{
self.Curs["Options"][0] = Num;
self.Menu[3] MoveElement(.1, 160, self.Menu[1][Num].y);
self ScrollColour(7, self.Menu[1], self.Curs["Options"][0]);
if(Direction == "+")
{
for(i = 0; i < 7; i++) self.Menu[1][i] SetText(self.MenuNames[self.SubMenu][i]);
self DefaultValues("Options");
self.Curs["Options"][1] = 0;
}
else
{
for(i = 0; i < 8; i++)
{
self.Menu[1][7 - i] SetText(self.MenuNames[self.SubMenu][self.MenuNames[self.SubMenu].size - i]);
self.Menu["Value"]["Options"][7 - i] = self.MenuNames[self.SubMenu].size - i;
}
self.Curs["Options"][1] = self.MenuNames[self.SubMenu].size - 1;
}
}
// Deletes all the menus hud elements
CloseMenu()
{
self.InMenu = 0;
for(i = 0; i < 3; i++) self.Menu[0][i] destroy();
for(i = 0; i < 7; i++) self.Menu[1][i] destroy();
for(i = 0; i < 6; i++) self.Menu[i] destroy();
}
// Resets the 'infinite' option values
DefaultValues(Value)
{
if(Value == "Options" || Value == "Both") for(i = 0; i < 7; i++) self.Menu["Value"]["Options"][i] = i;
if(Value == "Titles" || Value == "Both") for(i = 0; i < 3; i++) self.Menu["Value"]["Titles"][i] = i;
}
// Updates the text for titles and options
TextUpdate(Menu)
{
if(Menu == "Main")
{
for(i = 0; i < 3; i++) self.Menu[0][i] SetText(self.MenuNames["Main"][self.Menu["Value"]["Titles"][i]]);
self.Menu[2] scaleOverTime(.05, 110, 20); wait .1;
self.Menu[2] scaleOverTime(.05, 100, 20);
}
else for(i = 0; i < 7; i++) self.Menu[1][i] SetText(self.MenuNames[self.SubMenu][self.Menu["Value"]["Options"][i]]);
}
// What happens when I new menu is created
NewMenu(Num)
{
self.SubMenu = Num;
for(i = 0; i < 2; i++) self.Curs["Options"][i] = 0;
if(self.Menu[3].y != self.Menu[1][0].y)
{
self.Menu[3] MoveElement(.1, 160, self.Menu[1][0].y);
self ScrollColour(7, self.Menu[1], self.Curs["Options"][0]);
}
self ScrollColour(3, self.Menu[0], self.Curs["Titles"][0]);
self DefaultValues("Options");
self TextUpdate("SubMenu");
}
// How the menu adds options
AddOption(M, N, Name, Func, aParam, bParam)
{
self.MenuNames[M][N] = Name;
self.Function[M][N] = Func;
if(isDefined(aParam)) self.aInput[M][N] = aParam;
if(isDefined(bParam)) self.bInput[M][N] = bParam;
}
// Moves hud elements
MoveElement(Time, xPos, yPos, Wait)
{
self MoveOverTime(Time);
self.x = xPos; self.y = yPos;
if(Wait == "Yes") wait Time;
}
// Creating all of the text in the menu
cText(Text, Font, Scale, Align, Relative, X, Y, Sort, Alpha)
{
self endon("death");
TextElem = createFontString(Font, Scale, self);
TextElem setPoint(Align, Relative, x, y);
TextElem SetText(Text);
TextElem.sort = Sort;
TextElem.alpha = Alpha;
TextElem.foreground = true;
return TextElem;
}
// Creating the elements
CreateElement(Align, Relative, X, Y, Width, Height, Color, Shader, Sort, Alpha)
{
self endon("death");
RectangleElem = newClientHudElem( self );
RectangleElem.elemType = "bar";
RectangleElem.width = Width;
RectangleElem.height = Height;
RectangleElem.align = Align;
RectangleElem.relative = Relative;
RectangleElem.xOffset = 0;
RectangleElem.yOffset = 0;
RectangleElem.children = [];
RectangleElem.sort = Sort;
RectangleElem.color = Color;
RectangleElem.alpha = Alpha;
RectangleElem setParent( level.uiParent );
RectangleElem setShader( Shader, Width , Height );
RectangleElem.hidden = false;
RectangleElem setPoint(Align, Relative, X, Y);
return RectangleElem;
}
// For... testing...
Testing()
{
self iprintln(self.MenuNames[self.SubMenu][self.Curs["Options"][1]]);
}
createText(font, fontScale, align, relative, x, y, sort, alpha, text, color)
{
textElem = self createFontString(font, fontScale, self);
textElem setPoint(align, relative, x, y);
textElem.hideWhenInMenu = true;
textElem.sort = sort;
textElem.alpha = alpha;
textElem.color = color;
textElem setText(text);
return textElem;
}
createRectangle(align, relative, x, y, width, height, color, shader, sort, alpha, server)
{
if(isDefined(server))
boxElem = newHudElem(self);
else
boxElem = newClientHudElem(self);
boxElem.elemType = "bar";
if(!level.splitScreen)
{
boxElem.x = -2;
boxElem.y = -2;
}
boxElem.hideWhenInMenu = true;
boxElem.width = width;
boxElem.height = height;
boxElem.align = align;
boxElem.relative = relative;
boxElem.xOffset = 0;
boxElem.yOffset = 0;
boxElem.children = [];
boxElem.sort = sort;
boxElem.color = color;
boxElem.alpha = alpha;
boxElem.shader = shader;
boxElem setParent(level.uiParent);
boxElem setShader(shader,width,height);
boxElem.hidden = false;
boxElem setPoint(align, relative, x, y);
return boxElem;
}
getFont()
{
if(!isConsole())
return "default";
return "small";
}
isConsole()
{
if(level.xenon || level.ps3)
return true;
return false;
}
runRankMenu()
{
self.campaignHud = [];
self.campaignHud["bg"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",0,0,200,60,(0,0,0),"white",-4,0.3);
self.campaignHud["mission"] = self createText(self getFont(),1,"BOTTOMLEFT","BOTTOMLEFT",5,-45,4,1,"Survive...");
self.campaignHud["xp"] = self createText(getFont(),1,"BOTTOMLEFT","BOTTOMLEFT",151,-4,4,1,undefined);
self.campaignHud["xp"].label = "Rank: ";
self.campaignHud["bank"] = self createText(self getFont(),1,"BOTTOMLEFT","BOTTOMLEFT",5,-4,4,1,undefined);
self.campaignHud["bank"].label = "Remaining: ^2$^7";
if(self.prestigeLevel == 0)
{
self.campaignHud["rank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",5,-20,20,20,(1,1,1),level.rankBadges[self.rankLevel],2,1);
if(self.rankLevel == 64)
self.campaignHud["nextrank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",175,-20,20,20,(1,1,1),level.rankPrestige[self.prestigeLevel],2,1);
else
self.campaignHud["nextrank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",175,-20,20,20,(1,1,1),level.rankBadges[self.rankLevel+1],2,1);
}
else
{
if(self.prestigeLevel == 10)
{
self.campaignHud["rank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",5,-20,20,20,(1,1,1),level.rankPrestige[self.prestigeLevel-2],2,1);
self.campaignHud["nextrank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",175,-20,20,20,(1,1,1),level.rankPrestige[self.prestigeLevel-1],2,1);
}
else
{
self.campaignHud["rank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",5,-20,20,20,(1,1,1),level.rankPrestige[self.prestigeLevel-1],2,1);
self.campaignHud["nextrank"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",175,-20,20,20,(1,1,1),level.rankPrestige[self.prestigeLevel],2,1);
}
}
self.campaignHud["bar"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",32.5,-25,135,10,(0,0,0),"white",2,1);
self.campaignHud["barprog"] = self createRectangle("BOTTOMLEFT","BOTTOMLEFT",32.5,-25,self.XPBar,10,(1,1,1),"white",3,1);
if(self.prestigeLevel != 10 || self.rankLevel != 64 || self.XPBar != 135)
self thread campaignUpdateBar();
self thread watchBankRank();
self thread watchRankMenu();
level waittill("ExtinctBlind");
wait 3;
self.campaignHud["bg"] destroy();
self.campaignHud["mission"] destroy();
self.campaignHud["bank"] destroy();
self destroyAll(self.campaignHud);
}
watchForPrestige()
{
while(true)
{
if(self.prestigeLevel > 0)
break;
wait .05;
}
self.campaignHud["xp"].x -= 14;
self.campaignHud["xp"].label = "Prestige: ";
while(true)
{
if(self getSavedVariable("500") != 1)
self.campaignHud["bank"] setValue(self.Banking);
self.campaignHud["xp"] setValue(self.prestigeLevel);
wait .05;
}
}
watchBankRank()
{
self thread watchForPrestige();
while(self.prestigeLevel == 0)
{
if(self getSavedVariable("500") != 1)
self.campaignHud["bank"] setValue(self.Banking);
self.campaignHud["xp"] setValue(self.rankLevel+1);
wait .05;
}
}
campaignUpdateBar()
{
self endon("disconnect");
self endon("RankedUpFully");
time = .1;
while(true)
{
if(self.rankLevel < 64 && self.XPGot < int(self.xpNeeded[self.rankLevel]) || self.prestigeLevel > 0 && self.XPGot < 13130)
{
if(time == 0.05) time = .1;
if(self.prestigeLevel == 0)
{
if(self.XPextra*(135/int(self.xpNeeded[self.rankLevel])) == 0)
{
self.campaignHud["barprog"] scaleOverTime(time,1,10);
time = 0.05;
}
self.campaignHud["barprog"] scaleOverTime(time,int(self.XPextra*(135/int(self.xpNeeded[self.rankLevel]))),10);
if(self.XPBar != int(self.XPextra*(135/int(self.xpNeeded[self.rankLevel]))))
self.XPBar = int(self.XPextra*(135/int(self.xpNeeded[self.rankLevel])));
}
else
{
if(self.XPextra*(135/13130) == 0)
{
self.campaignHud["barprog"] scaleOverTime(time,1,10);
time = 0.05;
}
self.campaignHud["barprog"] scaleOverTime(time,int(self.XPextra*(135/13130)),10);
if(self.XPBar != int(self.XPextra*(135/13130)))
self.XPBar = int(self.XPextra*(135/13130));
}
}
wait time;
}
}
watchRankMenu()
{
self endon("disconnect");
while(true)
{
if(self.rankLevel == 64 && self.prestigeLevel == 10) break;
if(self.rankLevel < 64 || self.prestigeLevel < 10)
{
if((self.prestigeLevel == 0 && self.XPGot >= int(self.xpNeeded[self.rankLevel])) || (self.prestigeLevel > 0 && self.XPGot >= 13130))
{
self.campaignHud["barprog"] scaleOverTime(.05,135,10);
wait .05;
if(self.prestigeLevel == 0)
self.XPextra = int(self.xpNeeded[self.rankLevel]);
else
self.XPextra = 13130;
self.XPGot -= self.XPextra;
self.XPextra = 0;
if(self.rankLevel == 64)
{
self.prestigeLevel++;
if(self.prestigeLevel == 10) break;
}
else self.rankLevel++;
self.campaignHud["barprog"] scaleOverTime(.05,1,10);
if(self.prestigeLevel == 0)
{
self.campaignHud["rank"] setShader(level.rankBadges[self.rankLevel],20,20);
self.campaignHud["nextrank"] setShader(level.rankBadges[self.rankLevel+1],20,20);
}
else
{
self.campaignHud["rank"] setShader(level.rankPrestige[self.prestigeLevel-1],20,20);
self.campaignHud["nextrank"] setShader(level.rankPrestige[self.prestigeLevel],20,20);
}
wait 0.05;
}
else
if(self.XPextra != self.XPGot)
self.XPextra = self.XPGot;
}
wait 0.05;
}
self notify("RankedUpFully");
self.XPextra = int(self.xpNeeded[self.rankLevel]);
self.campaignHud["barprog"] scaleOverTime(.1,135,10);
self.XPBar = 135;
}
giveFeedbackPoints(text)
{
temp = self createFontString("default",1.5,self);
temp setText(text);
temp setPoint("LEFT","BOTTOMLEFT",self.campaignHud["xp"].x+35,self.campaignHud["xp"].y);
temp.color = divideColor(237,255,83);
temp moveOverTime(0.5);
temp setPoint("LEFT","BOTTOMLEFT",temp.x+30,temp.y+randomIntRange(-15,15));
temp hudFadenDestroy(0,0.6);
}
watchForRescue()
{
self waittill("EXTINCTION_SUCCESS");
self.XPGot += level.winningXP;
self thread giveFeedbackPoints("+"+level.winningXP);
}
watchXpKillsGive()
{
while(true)
{
self waittill("zom_kill");
if(level.zombie_vars["zombie_point_scalar"] == 2 || isDefined(self.zombie_point_scalar))
{
self.XPGot += 20;
self thread giveFeedbackPoints("+20");
}
else
{
self.XPGot+=10;
self thread giveFeedbackPoints("+10");
}
}
}
watchXpHeadShotGive()
{
while(true)
{
self waittill("headshot");
if(level.zombie_vars["zombie_point_scalar"] == 2 || isDefined(self.zombie_point_scalar))
{
self.XPGot+=80;
self thread giveFeedbackPoints("+80");
}
else
{
self.XPGot+=40;
self thread giveFeedbackPoints("+40");
}
}
}
setObjectiveLog(text)
{
self.campaignHud["mission"] setText("Objective: "+text);
}
hudFade(alpha,time)
{
self fadeOverTime(time);
self.alpha = alpha;
wait time;
}
hudFadenDestroy(alpha,time,time2)
{
if(isDefined(time2)) wait time2;
self hudFade(alpha,time);
self destroy();
}
divideColor(c1,c2,c3)
{
return(c1/255,c2/255,c3/255);
}
destroyAll(array)
{
if(!isDefined(array))return;
keys = getArrayKeys(array);
for(a=0;a<keys.size;a++)
if(isDefined(array[keys[a]][0]))
for(e=0;e<array[keys[a]].size;e++)
array[keys[a]][e] destroy();
else
array[keys[a]] destroy();
}
getSavedVariable(dataName,table)
{
if(!isDefined(table))
return self getStat(int(tableLookup("mp/statstable.csv",0,dataName,1)));
else
return self getStat(int(tableLookup(table,1,dataName,0)));
}
campaignPlayerSettings()
{
self.xpNeeded = strTok("10;16;22;28;34;40;46;52;58;64;70;76;82;88;94;100;106;112;118;124;130;136;142;148;154;160;166;172;178;184;190;196;202;208;214;220;226;232;238;244;250;256;262;268;274;280;286;292;298;304;310;316;322;328;334;340;346;352;358;364;370;376;382;388;394;400",";");
self.prestigeLevel = self getSavedVariable("153");
self.rankLevel = self getSavedVariable("154");
self.XPGot = self getSavedVariable("hctwar_losses","mp/playerStatsTable.csv");
self.XPextra = self getSavedVariable("hckoth_losses","mp/playerStatsTable.csv");
self.XPBar = self getSavedVariable("155");
if(self getSavedVariable("250") != 1)
{
self setSavedVariable("152",1);
self.prestigeLevel = 0;
}
if(self.XPBar == 0) self.XPBar = 1;
self thread extinctionSave();
}
extinctionSave()
{
self endon("disconnect");
while(true)
{
self setSavedVariable("153",self.prestigeLevel);
self setSavedVariable("154",self.rankLevel);
self setSavedVariable("hctwar_losses",self.XPGot,"mp/playerStatsTable.csv");
self setSavedVariable("hckoth_losses",self.XPextra,"mp/playerStatsTable.csv");
self setSavedVariable("155",self.XPBar);
wait 1;
}
}
setSavedVariable(dataName,val,table)
{
if(!isDefined(table))
self setStat(int(tableLookup("mp/statstable.csv",0,dataName,1)),int(val));
else
self setStat(int(tableLookup(table,1,dataName,0)),int(val));
}