curly braces

This commit is contained in:
ineed bots 2023-12-22 01:28:59 -06:00
parent 6921651ab0
commit 8ec1385d18
7 changed files with 2774 additions and 4 deletions

View File

@ -18,127 +18,207 @@ init()
level.bw_VERSION = "2.1.0";
if ( getDvar( "bots_main" ) == "" )
{
setDvar( "bots_main", true );
}
if ( !getDvarInt( "bots_main" ) )
{
return;
}
if ( !wait_for_builtins() )
{
PrintLn( "FATAL: NO BUILT-INS FOR BOTS" );
}
thread load_waypoints();
thread hook_callbacks();
if ( getDvar( "bots_main_GUIDs" ) == "" )
{
setDvar( "bots_main_GUIDs", "" ); //guids of players who will be given host powers, comma seperated
}
if ( getDvar( "bots_main_firstIsHost" ) == "" )
{
setDvar( "bots_main_firstIsHost", false ); //first play to connect is a host
}
if ( getDvar( "bots_main_waitForHostTime" ) == "" )
{
setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
}
if ( getDvar( "bots_main_kickBotsAtEnd" ) == "" )
{
setDvar( "bots_main_kickBotsAtEnd", false ); //kicks the bots at game end
}
if ( getDvar( "bots_manage_add" ) == "" )
{
setDvar( "bots_manage_add", 0 ); //amount of bots to add to the game
}
if ( getDvar( "bots_manage_fill" ) == "" )
{
setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
}
if ( getDvar( "bots_manage_fill_spec" ) == "" )
{
setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
}
if ( getDvar( "bots_manage_fill_mode" ) == "" )
{
setDvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
}
if ( getDvar( "bots_manage_fill_kick" ) == "" )
{
setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
}
if ( getDvar( "bots_team" ) == "" )
{
setDvar( "bots_team", "autoassign" ); //which team for bots to join
}
if ( getDvar( "bots_team_amount" ) == "" )
{
setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
}
if ( getDvar( "bots_team_force" ) == "" )
{
setDvar( "bots_team_force", false ); //force bots on team
}
if ( getDvar( "bots_team_mode" ) == "" )
{
setDvar( "bots_team_mode", 0 ); //counts just bots when 1
}
if ( getDvar( "bots_skill" ) == "" )
{
setDvar( "bots_skill", 0 ); //0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
}
if ( getDvar( "bots_skill_axis_hard" ) == "" )
{
setDvar( "bots_skill_axis_hard", 0 ); //amount of hard bots on axis team
}
if ( getDvar( "bots_skill_axis_med" ) == "" )
{
setDvar( "bots_skill_axis_med", 0 );
}
if ( getDvar( "bots_skill_allies_hard" ) == "" )
{
setDvar( "bots_skill_allies_hard", 0 );
}
if ( getDvar( "bots_skill_allies_med" ) == "" )
{
setDvar( "bots_skill_allies_med", 0 );
}
if ( getDvar( "bots_skill_min" ) == "" )
{
setDvar( "bots_skill_min", 1 );
}
if ( getDvar( "bots_skill_max" ) == "" )
{
setDvar( "bots_skill_max", 7 );
}
if ( getDvar( "bots_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks
{
setDvar( "bots_loadout_reasonable", false );
}
if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand
{
setDvar( "bots_loadout_allow_op", true );
}
if ( getDvar( "bots_loadout_rank" ) == "" ) // what rank the bots should be around, -1 is around the players, 0 is all random
{
setDvar( "bots_loadout_rank", -1 );
}
if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random
{
setDvar( "bots_loadout_prestige", -1 );
}
if ( getDvar( "bots_play_move" ) == "" ) //bots move
{
setDvar( "bots_play_move", true );
}
if ( getDvar( "bots_play_knife" ) == "" ) //bots knife
{
setDvar( "bots_play_knife", true );
}
if ( getDvar( "bots_play_fire" ) == "" ) //bots fire
{
setDvar( "bots_play_fire", true );
}
if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade
{
setDvar( "bots_play_nade", true );
}
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
{
setDvar( "bots_play_take_carepackages", true );
}
if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj
{
setDvar( "bots_play_obj", true );
}
if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow
{
setDvar( "bots_play_camp", true );
}
if ( getDvar( "bots_play_jumpdrop" ) == "" ) //bots jump and dropshot
{
setDvar( "bots_play_jumpdrop", true );
}
if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles)
{
setDvar( "bots_play_target_other", true );
}
if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks
{
setDvar( "bots_play_killstreak", true );
}
if ( getDvar( "bots_play_ads" ) == "" ) //bot ads
{
setDvar( "bots_play_ads", true );
}
if ( getDvar( "bots_play_aim" ) == "" )
{
setDvar( "bots_play_aim", true );
}
if ( !isDefined( game["botWarfare"] ) )
{
game["botWarfare"] = true;
}
level.defuseObject = undefined;
level.bots_smokeList = List();
@ -212,12 +292,16 @@ handleBots()
level addBots();
while ( !level.intermission )
{
wait 0.05;
}
setDvar( "bots_manage_add", getBotArray().size );
if ( !getDvarInt( "bots_main_kickBotsAtEnd" ) )
{
return;
}
bots = getBotArray();
@ -279,7 +363,9 @@ fixGamemodes()
if ( isDefined( level.bombZones ) && level.gametype == "sd" )
{
for ( i = 0; i < level.bombZones.size; i++ )
{
level.bombZones[i].onUse = ::onUsePlantObjectFix;
}
break;
}
@ -317,10 +403,14 @@ fixDem()
bombzone = level.bombZones[i];
if ( isDefined( bombzone.trigger.trigger_off ) )
{
bombzone.bombExploded = true;
}
else
{
bombzone.bombExploded = undefined;
}
}
wait 0.05;
}
@ -345,16 +435,20 @@ fixKoth()
for ( i = level.radios.size - 1; i >= 0; i-- )
{
if ( level.radioObject != level.radios[i].gameobject )
{
continue;
}
level.radio = level.radios[i];
break;
}
while ( isDefined( level.radioObject ) && level.radio.gameobject == level.radioObject )
{
wait 0.05;
}
}
}
/*
Adds a notify when the airdrop is dropped
@ -368,7 +462,9 @@ addNotifyOnAirdrops_loop()
airdrop = dropCrates[i];
if ( isDefined( airdrop.doingPhysics ) )
{
continue;
}
airdrop.doingPhysics = true;
airdrop thread doNotifyOnAirdrop();
@ -398,7 +494,9 @@ doNotifyOnAirdrop()
self.doingPhysics = false;
if ( isDefined( self.owner ) )
{
self.owner notify( "crate_physics_done" );
}
self thread onCarepackageCaptured();
}
@ -452,23 +550,33 @@ watchScrabler_loop()
player = level.players[i];
if ( !player _HasPerk( "specialty_localjammer" ) || !isReallyAlive( player ) )
{
continue;
}
if ( player isEMPed() )
{
continue;
}
for ( h = level.players.size - 1; h >= 0; h-- )
{
player2 = level.players[h];
if ( player2 == player )
{
continue;
}
if ( level.teamBased && player2.team == player.team )
{
continue;
}
if ( DistanceSquared( player2.origin, player.origin ) > 256 * 256 )
{
continue;
}
player2.bot_isScrambled = true;
}
@ -506,10 +614,14 @@ connected()
self endon( "disconnect" );
if ( !isDefined( self.pers["bot_host"] ) )
{
self thread doHostCheck();
}
if ( !self is_bot() )
{
return;
}
if ( !isDefined( self.pers["isBot"] ) )
{
@ -550,25 +662,39 @@ watchBotDebugEvent()
big_str = "Bot Warfare debug: " + self.name + ": " + msg;
if ( isDefined( str ) && isString( str ) )
{
big_str += ", " + str;
}
if ( isDefined( b ) && isString( b ) )
{
big_str += ", " + b;
}
if ( isDefined( c ) && isString( c ) )
{
big_str += ", " + c;
}
if ( isDefined( d ) && isString( d ) )
{
big_str += ", " + d;
}
if ( isDefined( e ) && isString( e ) )
{
big_str += ", " + e;
}
if ( isDefined( f ) && isString( f ) )
{
big_str += ", " + f;
}
if ( isDefined( g ) && isString( g ) )
{
big_str += ", " + g;
}
BotBuiltinPrintConsole( big_str );
}
@ -630,10 +756,14 @@ diffBots_loop()
player = level.players[i];
if ( !isDefined( player.pers["team"] ) )
{
continue;
}
if ( !player is_bot() )
{
continue;
}
if ( player.pers["team"] == "axis" )
{
@ -648,8 +778,10 @@ diffBots_loop()
player.pers["bots"]["skill"]["base"] = 4;
}
else
{
player.pers["bots"]["skill"]["base"] = 1;
}
}
else if ( player.pers["team"] == "allies" )
{
if ( allies_hard < var_allies_hard )
@ -663,10 +795,12 @@ diffBots_loop()
player.pers["bots"]["skill"]["base"] = 4;
}
else
{
player.pers["bots"]["skill"]["base"] = 1;
}
}
}
}
else if ( var_skill != 0 && var_skill != 9 )
{
playercount = level.players.size;
@ -676,7 +810,9 @@ diffBots_loop()
player = level.players[i];
if ( !player is_bot() )
{
continue;
}
player.pers["bots"]["skill"]["base"] = var_skill;
}
@ -691,7 +827,9 @@ diffBots_loop()
player = level.players[i];
if ( !player is_bot() )
{
continue;
}
player.pers["bots"]["skill"]["base"] = int( clamp( player.pers["bots"]["skill"]["base"], min_diff, max_diff ) );
}
@ -730,23 +868,33 @@ teamBots_loop()
player = level.players[i];
if ( !isDefined( player.pers["team"] ) )
{
continue;
}
if ( player is_bot() )
{
if ( player.pers["team"] == "allies" )
{
alliesbots++;
}
else if ( player.pers["team"] == "axis" )
{
axisbots++;
}
}
else
{
if ( player.pers["team"] == "allies" )
{
alliesplayers++;
}
else if ( player.pers["team"] == "axis" )
{
axisplayers++;
}
}
}
allies = alliesbots;
axis = axisbots;
@ -768,9 +916,11 @@ teamBots_loop()
toTeam = "axis";
if ( axis > allies )
{
toTeam = "allies";
}
}
}
if ( toTeam != "autoassign" )
{
@ -781,20 +931,32 @@ teamBots_loop()
player = level.players[i];
if ( !isDefined( player.pers["team"] ) )
{
continue;
}
if ( !player is_bot() )
{
continue;
}
if ( player.pers["team"] == toTeam )
{
continue;
}
if ( toTeam == "allies" )
{
player thread [[level.allies]]();
}
else if ( toTeam == "axis" )
{
player thread [[level.axis]]();
}
else
{
player thread [[level.spectator]]();
}
break;
}
@ -810,10 +972,14 @@ teamBots_loop()
player = level.players[i];
if ( !isDefined( player.pers["team"] ) )
{
continue;
}
if ( !player is_bot() )
{
continue;
}
if ( player.pers["team"] == "axis" )
{
@ -864,7 +1030,9 @@ addBots_loop()
SetDvar( "bots_manage_add", 0 );
if ( botsToAdd > 64 )
{
botsToAdd = 64;
}
for ( ; botsToAdd > 0; botsToAdd-- )
{
@ -876,7 +1044,9 @@ addBots_loop()
fillMode = getDVarInt( "bots_manage_fill_mode" );
if ( fillMode == 2 || fillMode == 3 )
{
setDvar( "bots_manage_fill", getGoodMapAmount() );
}
fillAmount = getDvarInt( "bots_manage_fill" );
@ -891,12 +1061,18 @@ addBots_loop()
player = level.players[i];
if ( player is_bot() )
{
bots++;
}
else if ( !isDefined( player.pers["team"] ) || ( player.pers["team"] != "axis" && player.pers["team"] != "allies" ) )
{
spec++;
}
else
{
players++;
}
}
if ( !randomInt( 999 ) )
{
@ -918,28 +1094,42 @@ addBots_loop()
player = level.players[i];
if ( player is_bot() )
{
continue;
}
if ( !isDefined( player.pers["team"] ) )
{
continue;
}
if ( player.pers["team"] == "axis" )
{
axisplayers++;
}
else if ( player.pers["team"] == "allies" )
{
alliesplayers++;
}
}
result = fillAmount - abs( axisplayers - alliesplayers ) + bots;
if ( players == 0 )
{
if ( bots < fillAmount )
{
result = fillAmount - 1;
}
else if ( bots > fillAmount )
{
result = fillAmount + 1;
}
else
{
result = fillAmount;
}
}
bots = result;
}
@ -947,21 +1137,29 @@ addBots_loop()
amount = bots;
if ( fillMode == 0 || fillMode == 2 )
{
amount += players;
}
if ( getDVarInt( "bots_manage_fill_spec" ) )
{
amount += spec;
}
if ( amount < fillAmount )
{
setDvar( "bots_manage_add", 1 );
}
else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) )
{
tempBot = getBotToKick();
if ( isDefined( tempBot ) )
{
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
}
}
}
/*
A server thread for monitoring all bot's in game. Will add and kick bots according to server settings.
@ -992,16 +1190,22 @@ onGrenadeFire()
self waittill ( "grenade_fire", grenade, weaponName );
if ( !isDefined( grenade ) )
{
continue;
}
grenade.name = weaponName;
if ( weaponName == "smoke_grenade_mp" )
{
grenade thread AddToSmokeList();
}
else if ( isSubStr( weaponName, "frag_" ) )
{
grenade thread AddToFragList( self );
}
}
}
/*
Adds a frag grenade to the list of all frags

View File

@ -16,7 +16,9 @@
init()
{
if ( getDvar( "bots_main_chat" ) == "" )
{
setDvar( "bots_main_chat", 1.0 );
}
level thread onBotConnected();
}
@ -42,17 +44,22 @@ BotDoChat( chance, string, isTeam )
mod = getDvarFloat( "bots_main_chat" );
if ( mod <= 0.0 )
{
return;
}
if ( chance >= 100 || mod >= 100.0 ||
( RandomInt( 100 ) < ( chance * mod ) + 0 ) )
if ( chance >= 100 || mod >= 100.0 || ( RandomInt( 100 ) < ( chance * mod ) + 0 ) )
{
if ( isDefined( isTeam ) && isTeam )
{
self sayteam( string );
}
else
{
self sayall( string );
}
}
}
/*
Threads for bots
@ -81,7 +88,9 @@ start_onnuke_call()
for ( ;; )
{
while ( !isDefined( level.nukeIncoming ) && !isDefined( level.moabIncoming ) )
{
wait 0.05 + randomInt( 4 );
}
self thread bot_onnukecall_watch();
@ -132,10 +141,12 @@ start_random_chat()
if ( randomInt( 100 ) < 1 )
{
if ( randomInt( 100 ) < 1 && isReallyAlive( self ) )
{
self thread doQuickMessage();
}
}
}
}
/*
Got a kill
@ -474,7 +485,9 @@ hasKillstreak( streakname )
loadoutKillstreak3 = self getPlayerData( "killstreaks", 2 );
if ( loadoutKillstreak1 == streakname || loadoutKillstreak2 == streakname || loadoutKillstreak3 == streakname )
{
return true;
}
return false;
}
@ -533,8 +546,10 @@ doQuickMessage()
else
{
if ( randomint( 100 ) < 1 )
{
self BotDoChat( 1, maps\mp\bots\_bot_utility::keyCodeToString( 2 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 13 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 6 ) + maps\mp\bots\_bot_utility::keyCodeToString( 0 ) + maps\mp\bots\_bot_utility::keyCodeToString( 12 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 5 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 1 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 26 ) );
}
}
self.spamdelay = undefined;
wait randomint( 5 );
@ -650,25 +665,41 @@ endgame_chat()
case 17:
if ( self == winner )
{
self BotDoChat( 20, "LOL we wouldn't of won without me!" );
}
else if ( self == loser )
{
self BotDoChat( 20, "damn i sucked but i still won" );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, "lol " + loser.name + " sucked hard!" );
}
else if ( self != winner )
{
self BotDoChat( 20, "wow " + winner.name + " did very well!" );
}
break;
case 18:
if ( self == winner )
{
self BotDoChat( 20, "I'm the VERY BEST!" );
}
else if ( self == loser )
{
self BotDoChat( 20, "lol my team is good, i suck doe" );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, "lol " + loser.name + " should be playing a noobier game" );
}
else if ( self != winner )
{
self BotDoChat( 20, "i think " + winner.name + " is a hacker" );
}
break;
@ -745,25 +776,41 @@ endgame_chat()
case 14:
if ( self == winner )
{
self BotDoChat( 20, "LOL we lost even with my score." );
}
else if ( self == loser )
{
self BotDoChat( 20, "damn im probally the reason we lost" );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, loser.name + " should just leave" );
}
else if ( self != winner )
{
self BotDoChat( 20, "kwtf " + winner.name + " is a hacker" );
}
break;
case 15:
if ( self == winner )
{
self BotDoChat( 20, "my teammates are garabge" );
}
else if ( self == loser )
{
self BotDoChat( 20, "lol im garbage" );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, loser.name + " sux" );
}
else if ( self != winner )
{
self BotDoChat( 20, winner.name + " is a noob!" );
}
break;
@ -833,37 +880,61 @@ endgame_chat()
{
case 0:
if ( self == winner )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Haha Suck it, you all just got pwnd!" );
}
else if ( self == loser )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Lol i Sucked in this game, just look at my score!" );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "gga, Bad luck " + loser.name );
}
else if ( self != winner )
{
self BotDoChat( 20, "This game sucked, " + winner.name + " is such a hacker!!" );
}
break;
case 1:
if ( self == winner )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "LOL i just wasted you all!! Whoot whoot!" );
}
else if ( self == loser )
{
self BotDoChat( 20, "GGA i suck, Nice score " + winner.name );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Rofl, " + loser.name + " dude, you suck!!" );
}
else if ( self != winner )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Nice Score " + winner.name + ", how did you get to be so good?" );
}
break;
case 2:
if ( self == winner )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "LOL i just wasted you all!! Whoot whoot!" );
}
else if ( self == loser )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "nice wallhacks " + winner.name );
}
else if ( self != loser && randomint( 2 ) == 1 )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "Lol atleast i did better then " + loser.name );
}
else if ( self != winner )
{
self BotDoChat( 20, "^" + ( randomint( 6 ) + 1 ) + "lolwtf " + winner.name );
}
break;
@ -949,17 +1020,25 @@ bot_onnukecall_watch()
{
case 0:
if ( level.nukeInfo.player != self )
{
self BotDoChat( 30, "Wow who got a nuke?" );
}
else
{
self BotDoChat( 30, "NUUUUUUKKKKKKEEEEEE!!!! :D" );
}
break;
case 1:
if ( level.nukeInfo.player != self )
{
self BotDoChat( 30, "lol " + level.nukeInfo.player.name + " is a hacker" );
}
else
{
self BotDoChat( 30, "im the best!" );
}
break;
@ -969,9 +1048,13 @@ bot_onnukecall_watch()
case 3:
if ( level.nukeInfo.team != self.team )
{
self BotDoChat( 30, "man my team sucks ):" );
}
else
{
self BotDoChat( 30, "man my team is good lol" );
}
break;
}
@ -1014,12 +1097,16 @@ bot_chat_streak( streakCount )
else
{
if ( GetDvarInt( "bots_loadout_allow_op" ) )
{
self BotDoChat( 100, "Come on! I would of had a nuke but I don't got it set..." );
}
else
{
self BotDoChat( 100, "WOW.. I could have a nuke but dumb admin disabled it for bots." );
}
}
}
}
/*
Say killed stuff
@ -1029,7 +1116,9 @@ bot_chat_killed_watch( victim )
self endon( "disconnect" );
if ( !isDefined( victim ) || !isDefined( victim.name ) )
{
return;
}
message = "";
@ -1197,7 +1286,9 @@ bot_chat_killed_watch( victim )
case 40:
if ( isDefined( victim.attackerData ) && isDefined( victim.attackerData[self.guid] ) && isDefined( victim.attackerData[self.guid].weapon ) )
{
message = ( "Man, I sure love my " + getBaseWeaponName( victim.attackerData[self.guid].weapon ) + "!" );
}
break;
@ -1218,7 +1309,9 @@ bot_chat_death_watch( killer, last_ks )
self endon( "disconnect" );
if ( !isDefined( killer ) || !isDefined( killer.name ) )
{
return;
}
message = "";
@ -1242,9 +1335,13 @@ bot_chat_death_watch( killer, last_ks )
case 4:
if ( last_ks > 0 )
{
message = ( "^" + ( randomint( 6 ) + 1 ) + "Nooooooooo my killstreaks!! :( I had a " + last_ks + " killstreak!!" );
}
else
{
message = ( "man im getting spawn killed, i have a " + self.pers["cur_death_streak"] + " deathstreak!" );
}
break;
@ -1470,7 +1567,9 @@ bot_chat_death_watch( killer, last_ks )
case 60:
if ( isDefined( self.attackerData ) && isDefined( self.attackerData[killer.guid] ) && isDefined( self.attackerData[killer.guid].weapon ) )
{
message = "Wow! Nice " + getBaseWeaponName( self.attackerData[killer.guid].weapon ) + " you got there, " + killer.name + "!";
}
break;
@ -1837,9 +1936,13 @@ bot_chat_crate_cap_watch( state, aircare, player, d, e, f, g )
{
case 0:
if ( !isDefined( aircare.owner ) || aircare.owner == self )
{
self BotDoChat( 5, "going to my carepackage" );
}
else
{
self BotDoChat( 5, "going to " + aircare.owner.name + "'s carepackage" );
}
break;
@ -1855,9 +1958,13 @@ bot_chat_crate_cap_watch( state, aircare, player, d, e, f, g )
{
case 0:
if ( !isDefined( aircare.owner ) || aircare.owner == self )
{
self BotDoChat( 15, "taking my carepackage" );
}
else
{
self BotDoChat( 15, "taking " + aircare.owner.name + "'s carepackage" );
}
break;
@ -2032,7 +2139,9 @@ bot_chat_attack_vehicle_watch( state, vehicle, rocketAmmo, d, e, f, g )
weap = rocketAmmo;
if ( !isDefined( weap ) )
{
weap = self getCurrentWeapon();
}
self BotDoChat( 10, "Im going to takedown your ks with my " + getBaseWeaponName( weap ) );
break;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,10 +13,14 @@
init()
{
if ( getDvar( "bots_main_menu" ) == "" )
{
setDvar( "bots_main_menu", true );
}
if ( !getDvarInt( "bots_main_menu" ) )
{
return;
}
thread watchPlayers();
}
@ -28,17 +32,23 @@ watchPlayers()
wait 1;
if ( !getDvarInt( "bots_main_menu" ) )
{
return;
}
for ( i = level.players.size - 1; i >= 0; i-- )
{
player = level.players[i];
if ( !player is_host() )
{
continue;
}
if ( isDefined( player.menuInit ) && player.menuInit )
{
continue;
}
player thread init_menu();
}
@ -80,28 +90,46 @@ watchDisconnect()
if ( self.menuOpen )
{
if ( isDefined( self.MenuTextY ) )
{
for ( i = 0; i < self.MenuTextY.size; i++ )
{
if ( isDefined( self.MenuTextY[i] ) )
{
self.MenuTextY[i] destroy();
}
}
}
if ( isDefined( self.MenuText ) )
{
for ( i = 0; i < self.MenuText.size; i++ )
{
if ( isDefined( self.MenuText[i] ) )
{
self.MenuText[i] destroy();
}
}
}
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) )
{
if ( isDefined( self.Menu["X"]["Shader"] ) )
{
self.Menu["X"]["Shader"] destroy();
}
if ( isDefined( self.Menu["X"]["Scroller"] ) )
{
self.Menu["X"]["Scroller"] destroy();
}
}
if ( isDefined( self.menuVersionHud ) )
{
self.menuVersionHud destroy();
}
}
}
doGreetings()
{
@ -134,19 +162,25 @@ watchPlayerOpenMenu()
self playLocalSound( "mouse_click" );
if ( self.SubMenu != "Main" )
{
self ExitSub();
}
else
{
self ExitMenu();
if ( !gameFlag( "prematch_done" ) || level.gameEnded )
{
self freezeControls( true );
}
else
{
self freezecontrols( false );
}
}
}
}
}
MenuSelect()
{
@ -164,12 +198,16 @@ MenuSelect()
self playLocalSound( "mouse_click" );
if ( self.SubMenu == "Main" )
{
self thread [[self.Option["Function"][self.SubMenu][self.Curs["Main"]["X"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs["Main"]["X"]], self.Option["Arg2"][self.SubMenu][self.Curs["Main"]["X"]] );
}
else
{
self thread [[self.Option["Function"][self.SubMenu][self.Curs[self.SubMenu]["Y"]]]]( self.Option["Arg1"][self.SubMenu][self.Curs[self.SubMenu]["Y"]], self.Option["Arg2"][self.SubMenu][self.Curs[self.SubMenu]["Y"]] );
}
}
}
}
LeftMenu()
{
@ -188,7 +226,9 @@ LeftMenu()
self.Curs["Main"]["X"]--;
if ( self.Curs["Main"]["X"] < 0 )
{
self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size - 1;
}
self CursMove( "X" );
}
@ -212,7 +252,9 @@ RightMenu()
self.Curs["Main"]["X"]++;
if ( self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size - 1 )
{
self.Curs["Main"]["X"] = 0;
}
self CursMove( "X" );
}
@ -236,7 +278,9 @@ UpMenu()
self.Curs[self.SubMenu]["Y"]--;
if ( self.Curs[self.SubMenu]["Y"] < 0 )
{
self.Curs[self.SubMenu]["Y"] = self.Option["Name"][self.SubMenu].size - 1;
}
self CursMove( "Y" );
}
@ -260,7 +304,9 @@ DownMenu()
self.Curs[self.SubMenu]["Y"]++;
if ( self.Curs[self.SubMenu]["Y"] > self.Option["Name"][self.SubMenu].size - 1 )
{
self.Curs[self.SubMenu]["Y"] = 0;
}
self CursMove( "Y" );
}
@ -281,21 +327,33 @@ OpenSub( menu, menu2 )
if ( self.SubMenu == "Main" )
{
if ( isDefined( self.MenuText ) )
{
for ( i = 0; i < self.MenuText.size; i++ )
{
if ( isDefined( self.MenuText[i] ) )
{
self.MenuText[i] destroy();
}
}
}
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) )
{
if ( isDefined( self.Menu["X"]["Shader"] ) )
{
self.Menu["X"]["Shader"] destroy();
}
if ( isDefined( self.Menu["X"]["Scroller"] ) )
{
self.Menu["X"]["Scroller"] destroy();
}
}
if ( isDefined( self.menuVersionHud ) )
{
self.menuVersionHud destroy();
}
for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ )
{
@ -304,7 +362,9 @@ OpenSub( menu, menu2 )
self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] );
if ( logOldi )
{
self.oldi = i;
}
if ( self.MenuText[i].x > 300 )
{
@ -318,9 +378,13 @@ OpenSub( menu, menu2 )
}
if ( !logOldi )
{
self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 90, ( 0, 0, 0 ), -2, 1, "white" );
}
else
{
self.Menu["X"]["Shader"] = self createRectangle( "CENTER", "CENTER", 0, -225, 1000, 30, ( 0, 0, 0 ), -2, 1, "white" );
}
self.Menu["X"]["Scroller"] = self createRectangle( "CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -225, 105, 22, ( 1, 0, 0 ), -1, 1, "white" );
@ -333,9 +397,15 @@ OpenSub( menu, menu2 )
else
{
if ( isDefined( self.MenuTextY ) )
{
for ( i = 0 ; i < self.MenuTextY.size ; i++ )
{
if ( isDefined( self.MenuTextY[i] ) )
{
self.MenuTextY[i] destroy();
}
}
}
for ( i = 0 ; i < self.Option["Name"][self.SubMenu].size ; i++ )
{
@ -416,9 +486,13 @@ ShowOptionOn( variable )
for ( time = 0;; time += 0.05 )
{
if ( !self isOnGround() && isAlive( self ) && gameFlag( "prematch_done" ) && !level.gameEnded )
{
self freezecontrols( false );
}
else
{
self freezecontrols( true );
}
self setClientDvar( "r_blur", "5" );
self setClientDvar( "sc_blur", "15" );
@ -433,7 +507,9 @@ ShowOptionOn( variable )
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
if ( int( time * 4 ) % 2 )
{
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
}
self.MenuText[self.Curs[self.SubMenu][variable]].color = color;
}
@ -443,10 +519,12 @@ ShowOptionOn( variable )
for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ )
{
if ( isDefined( self.MenuText[i] ) )
{
self.MenuText[i] settext( self.Option["Name"][self.SubMenu][i] );
}
}
}
}
else
{
if ( isDefined( self.Curs[self.SubMenu][variable] ) && isDefined( self.MenuTextY ) && isDefined( self.MenuTextY[self.Curs[self.SubMenu][variable]] ) )
@ -456,7 +534,9 @@ ShowOptionOn( variable )
color = ( 6 / 255, 69 / 255, 173 + randomIntRange( -5, 5 ) / 255 );
if ( int( time * 4 ) % 2 )
{
color = ( 11 / 255, 0 / 255, 128 + randomIntRange( -10, 10 ) / 255 );
}
self.MenuTextY[self.Curs[self.SubMenu][variable]].color = color;
}
@ -466,10 +546,12 @@ ShowOptionOn( variable )
for ( i = 0; i < self.Option["Name"][self.SubMenu].size; i++ )
{
if ( isDefined( self.MenuTextY[i] ) )
{
self.MenuTextY[i] settext( self.Option["Name"][self.SubMenu][i] );
}
}
}
}
wait 0.05;
}
@ -491,36 +573,58 @@ AddBack( menu, back )
ExitSub()
{
if ( isDefined( self.MenuTextY ) )
{
for ( i = 0; i < self.MenuTextY.size; i++ )
{
if ( isDefined( self.MenuTextY[i] ) )
{
self.MenuTextY[i] destroy();
}
}
}
self.SubMenu = self.Menu["Back"][self.Submenu];
if ( self.SubMenu == "Main" )
{
self CursMove( "X" );
}
else
{
self CursMove( "Y" );
}
}
ExitMenu()
{
if ( isDefined( self.MenuText ) )
{
for ( i = 0; i < self.MenuText.size; i++ )
{
if ( isDefined( self.MenuText[i] ) )
{
self.MenuText[i] destroy();
}
}
}
if ( isDefined( self.Menu ) && isDefined( self.Menu["X"] ) )
{
if ( isDefined( self.Menu["X"]["Shader"] ) )
{
self.Menu["X"]["Shader"] destroy();
}
if ( isDefined( self.Menu["X"]["Scroller"] ) )
{
self.Menu["X"]["Scroller"] destroy();
}
}
if ( isDefined( self.menuVersionHud ) )
{
self.menuVersionHud destroy();
}
self.MenuOpen = false;
self notify( "exit" );
@ -590,9 +694,13 @@ AddOptions()
_tempDvar = getDvarInt( "bots_manage_fill_kick" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "man_bots", 7, "Toggle auto bot kicking: " + _temp, ::man_bots, "autokick", _tempDvar );
@ -634,9 +742,13 @@ AddOptions()
_tempDvar = getDvarInt( "bots_manage_fill_spec" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "man_bots", 11, "Count players for fill on spectator: " + _temp, ::man_bots, "fillspec", _tempDvar );
@ -655,18 +767,26 @@ AddOptions()
_tempDvar = getDvarInt( "bots_team_force" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "man_team", 3, "Toggle forcing bots on team: " + _temp, ::bot_teams, "teamforce", _tempDvar );
_tempDvar = getDvarInt( "bots_team_mode" );
if ( _tempDvar )
{
_temp = "only bots";
}
else
{
_temp = "everyone";
}
self AddMenu( "man_team", 4, "Toggle bot_team_bot: " + _temp, ::bot_teams, "teammode", _tempDvar );
@ -745,117 +865,169 @@ AddOptions()
_tempDvar = getDvarInt( "bots_loadout_reasonable" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 0, "Bots use only good class setups: " + _temp, ::bot_func, "reasonable", _tempDvar );
_tempDvar = getDvarInt( "bots_loadout_allow_op" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 1, "Bots can use op and annoying class setups: " + _temp, ::bot_func, "op", _tempDvar );
_tempDvar = getDvarInt( "bots_play_move" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 2, "Bots can move: " + _temp, ::bot_func, "move", _tempDvar );
_tempDvar = getDvarInt( "bots_play_knife" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 3, "Bots can knife: " + _temp, ::bot_func, "knife", _tempDvar );
_tempDvar = getDvarInt( "bots_play_fire" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 4, "Bots can fire: " + _temp, ::bot_func, "fire", _tempDvar );
_tempDvar = getDvarInt( "bots_play_nade" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 5, "Bots can nade: " + _temp, ::bot_func, "nade", _tempDvar );
_tempDvar = getDvarInt( "bots_play_take_carepackages" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 6, "Bots can take carepackages: " + _temp, ::bot_func, "care", _tempDvar );
_tempDvar = getDvarInt( "bots_play_obj" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 7, "Bots play the objective: " + _temp, ::bot_func, "obj", _tempDvar );
_tempDvar = getDvarInt( "bots_play_camp" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 8, "Bots can camp: " + _temp, ::bot_func, "camp", _tempDvar );
_tempDvar = getDvarInt( "bots_play_jumpdrop" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 9, "Bots can jump and dropshot: " + _temp, ::bot_func, "jump", _tempDvar );
_tempDvar = getDvarInt( "bots_play_target_other" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 10, "Bots can target other script objects: " + _temp, ::bot_func, "targetother", _tempDvar );
_tempDvar = getDvarInt( "bots_play_killstreak" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 11, "Bots can use killstreaks: " + _temp, ::bot_func, "killstreak", _tempDvar );
_tempDvar = getDvarInt( "bots_play_ads" );
if ( _tempDvar )
{
_temp = "true";
}
else
{
_temp = "false";
}
self AddMenu( "set1", 12, "Bots can ads: " + _temp, ::bot_func, "ads", _tempDvar );
}
@ -1114,7 +1286,9 @@ man_bots( a, b )
}
if ( !result )
{
self iPrintln( "No bots to kick" );
}
break;

View File

@ -13,10 +13,14 @@
init()
{
if ( getDvar( "bots_main_debug" ) == "" )
{
setDvar( "bots_main_debug", 0 );
}
if ( !getDVarint( "bots_main_debug" ) )
{
return;
}
if ( !getDVarint( "developer" ) )
{
@ -36,16 +40,24 @@ init()
setDvar( "bots_manage_fill_spec", 1 );
if ( getDvar( "bots_main_debug_distance" ) == "" )
{
setDvar( "bots_main_debug_distance", 512.0 );
}
if ( getDvar( "bots_main_debug_cone" ) == "" )
{
setDvar( "bots_main_debug_cone", 0.65 );
}
if ( getDvar( "bots_main_debug_minDist" ) == "" )
{
setDvar( "bots_main_debug_minDist", 32.0 );
}
if ( getDvar( "bots_main_debug_drawThrough" ) == "" )
{
setDvar( "bots_main_debug_drawThrough", false );
}
setDvar( "player_sustainAmmo", 1 );
@ -131,7 +143,9 @@ watchAstarCommand()
self waittill( "astar" );
if ( 1 )
{
continue;
}
self iprintln( "Start AStar" );
self.astar = undefined;
@ -182,25 +196,35 @@ updateWaypointsStats()
for ( i = 0; i < level.waypointCount; i++ )
{
if ( closest == -1 || closer( self.origin, level.waypoints[i].origin, level.waypoints[closest].origin ) )
{
closest = i;
}
wpOrg = level.waypoints[i].origin + ( 0, 0, 25 );
if ( distance( level.waypoints[i].origin, self.origin ) < getDvarFloat( "bots_main_debug_distance" ) && ( bulletTracePassed( myEye, wpOrg, false, self ) || getDVarint( "bots_main_debug_drawThrough" ) ) )
{
for ( h = level.waypoints[i].children.size - 1; h >= 0; h-- )
{
line( wpOrg, level.waypoints[level.waypoints[i].children[h]].origin + ( 0, 0, 25 ), ( 1, 0, 1 ) );
}
if ( getConeDot( wpOrg, myEye, myAngles ) > getDvarFloat( "bots_main_debug_cone" ) )
{
print3d( wpOrg, i, ( 1, 0, 0 ), 2 );
}
if ( isDefined( level.waypoints[i].angles ) && level.waypoints[i].type != "stand" )
{
line( wpOrg, wpOrg + AnglesToForward( level.waypoints[i].angles ) * 64, ( 1, 1, 1 ) );
}
if ( isDefined( level.waypoints[i].jav_point ) )
{
line( wpOrg, level.waypoints[i].jav_point, ( 0, 0, 0 ) );
}
}
}
self.nearest = closest;
@ -215,7 +239,9 @@ updateWaypointsStats()
infotext.x = infotext.x - 2;
if ( infotext.x <= -800 )
{
infotext.x = 800;
}
if ( self UseButtonPressed() && time > 2 )
{
@ -386,11 +412,15 @@ watchSaveWaypointsCommand()
}
if ( isDefined( level.waypoints[i].angles ) && ( level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || ( level.waypoints[i].type == "crouch" && level.waypoints[i].children.size == 1 ) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade" ) )
{
logprint( "*/waypoints[" + i + "].angles = " + level.waypoints[i].angles + ";\n/*" );
}
if ( isDefined( level.waypoints[i].jav_point ) && level.waypoints[i].type == "javelin" )
{
logprint( "*/waypoints[" + i + "].jav_point = " + level.waypoints[i].jav_point + ";\n/*" );
}
}
logprint( "*/return waypoints;\n}\n\n\n\n" );
@ -413,20 +443,30 @@ watchSaveWaypointsCommand()
str += wp.children[h];
if ( h < wp.children.size - 1 )
{
str += " ";
}
}
str += "," + wp.type + ",";
if ( isDefined( wp.angles ) )
{
str += wp.angles[0] + " " + wp.angles[1] + " " + wp.angles[2] + ",";
}
else
{
str += ",";
}
if ( isDefined( wp.jav_point ) )
{
str += wp.jav_point[0] + " " + wp.jav_point[1] + " " + wp.jav_point[2] + ",";
}
else
{
str += ",";
}
PrintLn( str );
BotBuiltinFileWrite( filename, str + "\n", "append" );
@ -452,10 +492,14 @@ LoadWaypoints()
checkForWarnings()
{
if ( level.waypointCount <= 0 )
{
self iprintln( "WARNING: waypointCount is " + level.waypointCount );
}
if ( level.waypointCount != level.waypoints.size )
{
self iprintln( "WARNING: waypointCount is not " + level.waypoints.size );
}
for ( i = 0; i < level.waypointCount; i++ )
{
@ -466,7 +510,9 @@ checkForWarnings()
}
if ( level.waypoints[i].children.size <= 0 )
{
self iprintln( "WARNING: waypoint " + i + " childCount is " + level.waypoints[i].children.size );
}
else
{
if ( !isDefined( level.waypoints[i].children ) || !isDefined( level.waypoints[i].children.size ) )
@ -480,12 +526,16 @@ checkForWarnings()
child = level.waypoints[i].children[h];
if ( !isDefined( level.waypoints[child] ) )
{
self iprintln( "WARNING: waypoint " + i + " child " + child + " is undefined" );
}
else if ( child == i )
{
self iprintln( "WARNING: waypoint " + i + " child " + child + " is itself" );
}
}
}
}
if ( !isDefined( level.waypoints[i].type ) )
{
@ -494,11 +544,15 @@ checkForWarnings()
}
if ( level.waypoints[i].type == "javelin" && !isDefined( level.waypoints[i].jav_point ) )
{
self iprintln( "WARNING: waypoint " + i + " jav_point is undefined" );
}
if ( !isDefined( level.waypoints[i].angles ) && ( level.waypoints[i].type == "claymore" || level.waypoints[i].type == "tube" || ( level.waypoints[i].type == "crouch" && level.waypoints[i].children.size == 1 ) || level.waypoints[i].type == "climb" || level.waypoints[i].type == "grenade" ) )
{
self iprintln( "WARNING: waypoint " + i + " angles is undefined" );
}
}
// check reachability, assume bidirectional graph
@ -507,13 +561,17 @@ checkForWarnings()
for ( i = 0; i < level.waypointCount; i++ )
{
if ( i % 5 == 0 )
{
wait 0.05;
}
astar = AStarSearch( level.waypoints[wpIdx].origin, level.waypoints[i].origin, undefined, true );
if ( astar.size <= 0 )
{
self iprintln( "WARNING: waypoint " + wpIdx + " has no path to waypoint " + i );
}
}
self iprintln( "Waypoint warnings check completed." );
}
@ -620,9 +678,11 @@ DeleteWaypoint( nwp )
for ( h = level.waypoints[i].children.size - 1; h >= 0; h-- )
{
if ( level.waypoints[i].children[h] > nwp )
{
level.waypoints[i].children[h]--;
}
}
}
for ( entry = 0; entry < level.waypointCount; entry++ )
{
@ -652,17 +712,29 @@ AddWaypoint()
level.waypoints[level.waypointCount].origin = pos;
if ( isDefined( self.javelinTargetPoint ) )
{
level.waypoints[level.waypointCount].type = "javelin";
}
else if ( self AdsButtonPressed() )
{
level.waypoints[level.waypointCount].type = "climb";
}
else if ( self AttackButtonPressed() && self UseButtonPressed() )
{
level.waypoints[level.waypointCount].type = "tube";
}
else if ( self AttackButtonPressed() )
{
level.waypoints[level.waypointCount].type = "grenade";
}
else if ( self UseButtonPressed() )
{
level.waypoints[level.waypointCount].type = "claymore";
}
else
{
level.waypoints[level.waypointCount].type = self getStance();
}
level.waypoints[level.waypointCount].angles = self getPlayerAngles();
@ -678,7 +750,9 @@ AddWaypoint()
if ( level.autoLink )
{
if ( level.wpToLink == -1 )
{
level.wpToLink = level.waypointCount - 1;
}
level.waypointCount++;
self LinkWaypoint( level.waypointCount - 1 );
@ -700,7 +774,9 @@ DeleteAllWaypoints()
buildChildCountString ( wp )
{
if ( wp == -1 )
{
return "";
}
wpstr = level.waypoints[wp].children.size + "";
@ -710,17 +786,23 @@ buildChildCountString ( wp )
buildChildString( wp )
{
if ( wp == -1 )
{
return "";
}
wpstr = "";
for ( i = 0; i < level.waypoints[wp].children.size; i++ )
{
if ( i != 0 )
{
wpstr = wpstr + "," + level.waypoints[wp].children[i];
}
else
{
wpstr = wpstr + level.waypoints[wp].children[i];
}
}
return wpstr;
}
@ -728,7 +810,9 @@ buildChildString( wp )
buildTypeString( wp )
{
if ( wp == -1 )
{
return "";
}
return level.waypoints[wp].type;
}