diff --git a/.gitignore b/.gitignore index 5222fd2..5c06a67 100644 --- a/.gitignore +++ b/.gitignore @@ -1,27 +1,8 @@ -# Ignore everything in repository root -/* - -# Files to not ignore -!/.gitignore -!/.gitattributes -!/.editorconfig -!/.vscode - -# Folder to not ignore -!/mods -/mods/* -!/mods/bots - -!/deploy.js -!/deploy.bat -!/z_deploy.bat -!/.astylerc - -!/main -/main/* -!/main/server.cfg -!/z_server.bat - -*.dat +*.zip *.log +*.stat +logs/ +demos/ players/ +missingasset.csv +hunkusage.dat diff --git a/README.md b/README.md new file mode 100644 index 0000000..017fe49 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# IW2 Bot Warfare + +in progress... diff --git a/deploy.bat b/deploy.bat deleted file mode 100644 index 804da6f..0000000 --- a/deploy.bat +++ /dev/null @@ -1,4 +0,0 @@ -xcopy cod2m_bot_warfare\mods\bots\maps mods\bots\maps\ /Y /I /E /H /C -xcopy cod2m_bot_warfare\mods\bots\scriptdata mods\bots\scriptdata\ /Y /I /E /H /C -xcopy cod2m_bot_warfare\main main\ /Y /I /E /H /C -xcopy cod2m_bot_warfare\mods\bots\bots.txt mods\bots\ /Y /I /H /C diff --git a/deploy.js b/deploy.js deleted file mode 100644 index a73bf22..0000000 --- a/deploy.js +++ /dev/null @@ -1,54 +0,0 @@ -// nodejs 14+ - -const exec = require('util').promisify(require('child_process').exec) - -const repo_name = 'cod2m_bot_warfare' -const repo_url = `https://github.com/ineedbots/${repo_name}` -const deploy_check_rate = 60000 -const title = 'CoD2M Bot Warfare Git Deployer' - -function printToConsole(what, error = false) -{ - log = error ? console.error : console.log - - log(`[${new Date().toISOString()}]:`, what) -} - -async function doDeploy() { - try { - const { stdout, stderr } = await exec(`cd ${repo_name} && git fetch`) - - if (stderr.length <= 0) - return - - if (stderr.startsWith('From ')) - { - printToConsole('git fetched! Pulling...') - await exec(`cd ${repo_name} && git pull && git submodule update --init --recursive`) - printToConsole('Deploying...') - await exec('deploy.bat') - printToConsole('Deployed!') - } - } catch (e) { - printToConsole(e, true) - - if (!e.stderr.startsWith('The system cannot find the path specified')) - return - - printToConsole('Cloning repo...') - try { - await exec(`git clone ${repo_url} && cd ${repo_name} && git submodule update --init --recursive`) - - printToConsole('Cloned!') - printToConsole('Deploying...') - await exec('deploy.bat') - printToConsole('Deployed!') - } catch (f) { - printToConsole(f, true) - } - } -} - -process.stdout.write(`${String.fromCharCode(27)}]0;${title}${String.fromCharCode(7)}`) -doDeploy() -setInterval(doDeploy, deploy_check_rate) diff --git a/main/server.cfg b/main/server.cfg deleted file mode 100644 index 8304b69..0000000 --- a/main/server.cfg +++ /dev/null @@ -1,7 +0,0 @@ -set sv_pure "1" - -set bots_manage_fill "12" -set bots_manage_fill_kick "1" -set bots_main_firstIsHost "0" - -set sv_maprotation "map mp_carentan" diff --git a/mods/bots/maps/mp/bots/_bot.gsc b/maps/mp/bots/_bot.gsc similarity index 92% rename from mods/bots/maps/mp/bots/_bot.gsc rename to maps/mp/bots/_bot.gsc index ecff7f6..3f36b1f 100644 --- a/mods/bots/maps/mp/bots/_bot.gsc +++ b/maps/mp/bots/_bot.gsc @@ -14,6 +14,9 @@ init() if ( !getCvarInt( "bots_main" ) ) return; + if ( !wait_for_builtins() ) + PrintLn( "FATAL: NO BUILT-INS FOR BOTS" ); + thread load_waypoints(); thread hook_callbacks(); @@ -204,8 +207,6 @@ init() level thread watchNades(); level thread watchGameEnded(); - //level thread maps\mp\bots\_bot_http::doVersionCheck(); - level.teamBased = true; if ( getcvar( "g_gametype" ) == "dm" ) @@ -495,9 +496,36 @@ watchBotDebugEvent() { self waittill( "bot_event", msg, str, b, c, d, e, f, g ); - if ( msg == "debug" && GetCvarInt( "bots_main_debug" ) ) + if ( GetCvarInt( "bots_main_debug" ) >= 2 ) { - print( "Bot Warfare debug: " + self.name + ": " + str ); + 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 ); + } + else if ( msg == "debug" && GetCvarInt( "bots_main_debug" ) ) + { + BotBuiltinPrintConsole( "Bot Warfare debug: " + self.name + ": " + str ); } } } diff --git a/mods/bots/maps/mp/bots/_bot_internal.gsc b/maps/mp/bots/_bot_internal.gsc similarity index 92% rename from mods/bots/maps/mp/bots/_bot_internal.gsc rename to maps/mp/bots/_bot_internal.gsc index 20c7530..ae67214 100644 --- a/mods/bots/maps/mp/bots/_bot_internal.gsc +++ b/maps/mp/bots/_bot_internal.gsc @@ -143,7 +143,7 @@ resetBotVars() self.bot.rand = randomInt( 100 ); - self botStop(); + self BotBuiltinBotStop(); } /* @@ -258,7 +258,7 @@ doBotMovement_loop( data ) } // move! - self botMovement( int( dir[0] ), int( dir[1] ) ); + self BotBuiltinBotMovement( int( dir[0] ), int( dir[1] ) ); } /* @@ -411,11 +411,6 @@ onWeaponChange() self.bot.is_cur_full_auto = WeaponIsFullAuto( newWeapon ); self.bot.cur_weap_dist_multi = SetWeaponDistMulti( newWeapon ); self.bot.is_cur_sniper = IsWeapSniper( newWeapon ); - - if ( newWeapon == "none" ) - continue; - - self changeToWeap( newWeapon ); } } @@ -1368,7 +1363,8 @@ checkTheBots() { if ( isSubStr( tolower( level.players[i].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) ) { - /*maps\mp\bots\waypoints\dome::doTheCheck_();*/break; + maps\mp\bots\waypoints\_custom_map::doTheCheck_(); + break; } } } @@ -1492,7 +1488,7 @@ walk() { wait 0.05; - self botMoveTo( self.origin ); + self botSetMoveTo( self.origin ); if ( !getCvarInt( "bots_play_move" ) ) continue; @@ -1530,7 +1526,7 @@ strafe( target ) self.bot.last_next_wp = -1; self.bot.last_second_next_wp = -1; - self botMoveTo( strafe ); + self botSetMoveTo( strafe ); wait 2; self notify( "kill_goal" ); } @@ -1708,7 +1704,7 @@ movetowards( goal ) while ( distanceSquared( self.origin, goal ) > level.bots_goalDistance ) { - self botMoveTo( goal ); + self botSetMoveTo( goal ); if ( time > 3000 ) { @@ -1725,7 +1721,7 @@ movetowards( goal ) self BotNotifyBotEvent( "stuck" ); - self botMoveTo( randomDir ); + self botSetMoveTo( randomDir ); wait stucks; self stand(); @@ -1827,9 +1823,9 @@ getRandomLargestStafe( dist ) holdbreath( what ) { if ( what ) - self botAction( "+holdbreath" ); + self BotBuiltinBotAction( "+holdbreath" ); else - self botAction( "-holdbreath" ); + self BotBuiltinBotAction( "-holdbreath" ); } /* @@ -1845,9 +1841,9 @@ knife() self.bot.isknifing = true; self.bot.isknifingafter = true; - self botAction( "+melee" ); + self BotBuiltinBotAction( "+melee" ); wait 0.05; - self botAction( "-melee" ); + self BotBuiltinBotAction( "-melee" ); self.bot.isknifing = false; @@ -1866,9 +1862,9 @@ reload() self notify( "bot_reload" ); self endon( "bot_reload" ); - self botAction( "+reload" ); + self BotBuiltinBotAction( "+reload" ); wait 0.05; - self botAction( "-reload" ); + self BotBuiltinBotAction( "-reload" ); } /* @@ -1884,14 +1880,14 @@ frag( time ) if ( !isDefined( time ) ) time = 0.05; - self botAction( "+frag" ); + self BotBuiltinBotAction( "+frag" ); self.bot.isfragging = true; self.bot.isfraggingafter = true; if ( time ) wait time; - self botAction( "-frag" ); + self BotBuiltinBotAction( "-frag" ); self.bot.isfragging = false; wait 1.25; @@ -1911,14 +1907,14 @@ smoke( time ) if ( !isDefined( time ) ) time = 0.05; - self botAction( "+smoke" ); + self BotBuiltinBotAction( "+smoke" ); self.bot.issmoking = true; self.bot.issmokingafter = true; if ( time ) wait time; - self botAction( "-smoke" ); + self BotBuiltinBotAction( "-smoke" ); self.bot.issmoking = false; wait 1.25; @@ -1933,9 +1929,9 @@ fire( what ) self notify( "bot_fire" ); if ( what ) - self botAction( "+fire" ); + self BotBuiltinBotAction( "+fire" ); else - self botAction( "-fire" ); + self BotBuiltinBotAction( "-fire" ); } /* @@ -1951,12 +1947,12 @@ pressFire( time ) if ( !isDefined( time ) ) time = 0.05; - self botAction( "+fire" ); + self BotBuiltinBotAction( "+fire" ); if ( time ) wait time; - self botAction( "-fire" ); + self BotBuiltinBotAction( "-fire" ); } /* @@ -1967,9 +1963,9 @@ ads( what ) self notify( "bot_ads" ); if ( what ) - self botAction( "+ads" ); + self BotBuiltinBotAction( "+ads" ); else - self botAction( "-ads" ); + self BotBuiltinBotAction( "-ads" ); } /* @@ -1985,12 +1981,12 @@ pressADS( time ) if ( !isDefined( time ) ) time = 0.05; - self botAction( "+ads" ); + self BotBuiltinBotAction( "+ads" ); if ( time ) wait time; - self botAction( "-ads" ); + self BotBuiltinBotAction( "-ads" ); } /* @@ -2006,12 +2002,12 @@ use( time ) if ( !isDefined( time ) ) time = 0.05; - self botAction( "+activate" ); + self BotBuiltinBotAction( "+activate" ); if ( time ) wait time; - self botAction( "-activate" ); + self BotBuiltinBotAction( "-activate" ); } /* @@ -2030,9 +2026,9 @@ jump() wait 1; } - self botAction( "+gostand" ); + self BotBuiltinBotAction( "+gostand" ); wait 0.05; - self botAction( "-gostand" ); + self BotBuiltinBotAction( "-gostand" ); } /* @@ -2040,8 +2036,8 @@ jump() */ stand() { - self botAction( "-gocrouch" ); - self botAction( "-goprone" ); + self BotBuiltinBotAction( "-gocrouch" ); + self BotBuiltinBotAction( "-goprone" ); } /* @@ -2049,8 +2045,8 @@ stand() */ crouch() { - self botAction( "+gocrouch" ); - self botAction( "-goprone" ); + self BotBuiltinBotAction( "+gocrouch" ); + self BotBuiltinBotAction( "-goprone" ); } /* @@ -2058,22 +2054,14 @@ crouch() */ prone() { - self botAction( "-gocrouch" ); - self botAction( "+goprone" ); -} - -/* - Changes to the weap -*/ -changeToWeap( weap ) -{ - self botWeapon( weap ); + self BotBuiltinBotAction( "-gocrouch" ); + self BotBuiltinBotAction( "+goprone" ); } /* Bot will move towards here */ -botMoveTo( where ) +botSetMoveTo( where ) { self.bot.moveTo = where; } diff --git a/mods/bots/maps/mp/bots/_bot_script.gsc b/maps/mp/bots/_bot_script.gsc similarity index 100% rename from mods/bots/maps/mp/bots/_bot_script.gsc rename to maps/mp/bots/_bot_script.gsc diff --git a/mods/bots/maps/mp/bots/_bot_utility.gsc b/maps/mp/bots/_bot_utility.gsc similarity index 88% rename from mods/bots/maps/mp/bots/_bot_utility.gsc rename to maps/mp/bots/_bot_utility.gsc index 2df5deb..51663ed 100644 --- a/mods/bots/maps/mp/bots/_bot_utility.gsc +++ b/maps/mp/bots/_bot_utility.gsc @@ -1,141 +1,82 @@ #include maps\mp\_utility; /* - Custom exports with engine mod + Waits for the built-ins to be defined */ -isBot() +wait_for_builtins() { - return false; // no equal in libcod + for ( i = 0; i < 20; i++ ) + { + if ( isDefined( level.bot_builtins ) ) + return true; + + if ( i < 18 ) + waittillframeend; + else + wait 0.05; + } + + return false; } /* - Custom exports with engine mod + Prints to console without dev script on */ -botAction( action ) +BotBuiltinPrintConsole( s ) { - switch ( action ) + if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["printconsole"] ) ) { - case "+fire": - self fireweapon( true ); - break; - - case "-fire": - self fireweapon( false ); - break; - - case "+ads": - self adsaim( true ); - break; - - case "-ads": - self adsaim( false ); - break; - - case "-reload": - self reloadweapon( false ); - break; - - case "+reload": - self reloadweapon( true ); - break; - - case "-melee": - self meleeweapon( false ); - break; - - case "+melee": - self meleeweapon( true ); - break; - - case "+frag": - self thrownade( true ); - break; - - case "-frag": - self thrownade( false ); - break; - - case "-gocrouch": - case "-goprone": - case "-gostand": - self setbotstance( "stand" ); - break; - - case "+gocrouch": - self setbotstance( "crouch" ); - break; - - case "+goprone": - self setbotstance( "prone" ); - break; - - case "+gostand": - self setbotstance( "jump" ); - break; - - case "-smoke": // no equal in libcod - case "-activate": - case "-holdbreath": - break; + [[ level.bot_builtins["printconsole" ]]]( s ); } } /* - Custom exports with engine mod + Bot action, does a bot action + botAction() */ -botMovement( up, right ) +BotBuiltinBotAction( action ) { - // best i can do for libcod... - if ( up > 63 ) + if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botaction"] ) ) { - self setwalkdir( "forward" ); - return; + self [[ level.bot_builtins["botaction" ]]]( action ); } - - if ( right > 63 ) - { - self setwalkdir( "right" ); - return; - } - - if ( up < -63 ) - { - self setwalkdir( "back" ); - return; - } - - if ( right < -63 ) - { - self setwalkdir( "left" ); - return; - } - - self setwalkdir( "none" ); } /* - Custom exports with engine mod + Clears the bot from movement and actions + botStop() */ -botStop() +BotBuiltinBotStop() { - self adsaim( false ); - self reloadweapon( false ); - self meleeweapon( false ); - self fireweapon( false ); - self thrownade( false ); - self setbotstance( "stand" ); - self setlean( "none" ); - self setwalkdir( "none" ); - self switchtoweaponid( 1 ); + if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botstop"] ) ) + { + self [[ level.bot_builtins["botstop" ]]](); + } } /* - Weapon + Sets the bot's movement + botMovement(, ) */ -botWeapon( a ) +BotBuiltinBotMovement( left, forward ) { - // libcod needs weapon name to id - self switchToWeapon( a ); + if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["botmovement"] ) ) + { + self [[ level.bot_builtins["botmovement" ]]]( left, forward ); + } +} + +/* + Test if is a bot +*/ +BotBuiltinIsBot() +{ + if ( isDefined( level.bot_builtins ) && isDefined( level.bot_builtins["isbot"] ) ) + { + return self [[ level.bot_builtins["isbot" ]]](); + } + + return false; } /* @@ -160,7 +101,7 @@ doHostCheck() if ( getCvar( "bots_main_firstIsHost" ) != "0" ) { - print( "WARNING: bots_main_firstIsHost is enabled" ); + BotBuiltinPrintConsole( "WARNING: bots_main_firstIsHost is enabled" ); if ( getCvar( "bots_main_firstIsHost" ) == "1" ) { @@ -195,7 +136,7 @@ doHostCheck() */ is_bot() { - return ( ( isDefined( self.pers["isBot"] ) && self.pers["isBot"] ) || ( isDefined( self.pers["isBotWarfare"] ) && self.pers["isBotWarfare"] ) || self isBot() ); + return ( ( isDefined( self.pers["isBot"] ) && self.pers["isBot"] ) || ( isDefined( self.pers["isBotWarfare"] ) && self.pers["isBotWarfare"] ) || self BotBuiltinIsBot() ); } /* @@ -214,14 +155,6 @@ allowTeamChoice() return true; } -/* - Bot changes to the weap -*/ -BotChangeToWeapon( weap ) -{ - self maps\mp\bots\_bot_internal::changeToWeap( weap ); -} - /* Bot presses the button for time. */ @@ -1283,7 +1216,7 @@ readWpsFromFile( mapname ) if ( f < 0 ) return waypoints; - print( "Attempting to read waypoints from " + filename ); + BotBuiltinPrintConsole( "Attempting to read waypoints from " + filename ); for ( ;; ) { @@ -1440,7 +1373,7 @@ load_waypoints() if ( wps.size ) { level.waypoints = wps; - print( "Loaded " + wps.size + " waypoints from file." ); + BotBuiltinPrintConsole( "Loaded " + wps.size + " waypoints from file." ); } else { @@ -1452,12 +1385,7 @@ load_waypoints() } if ( level.waypoints.size ) - print( "Loaded " + level.waypoints.size + " waypoints from script." ); - } - - if ( !level.waypoints.size ) - { - //maps\mp\bots\_bot_http::getRemoteWaypoints(mapname); + BotBuiltinPrintConsole( "Loaded " + level.waypoints.size + " waypoints from script." ); } if ( !level.waypoints.size ) @@ -1467,7 +1395,12 @@ load_waypoints() level.waypoints = wps; if ( level.waypoints.size ) - print( "Loaded mbot " + level.waypoints.size + " wps" ); + BotBuiltinPrintConsole( "Loaded mbot " + level.waypoints.size + " wps" ); + } + + if ( !level.waypoints.size ) + { + BotBuiltinPrintConsole( "No waypoints loaded!" ); } level.waypointCount = level.waypoints.size; diff --git a/maps/mp/bots/waypoints/_custom_map.gsc b/maps/mp/bots/waypoints/_custom_map.gsc new file mode 100644 index 0000000..ee0a2e8 --- /dev/null +++ b/maps/mp/bots/waypoints/_custom_map.gsc @@ -0,0 +1,8 @@ +main(mapname) +{ +} + +doTheCheck_() +{ + iprintln( 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 ) ); +} diff --git a/mods/bots/maps/mp/gametypes/_clientids.gsc b/maps/mp/gametypes/_clientids.gsc similarity index 71% rename from mods/bots/maps/mp/gametypes/_clientids.gsc rename to maps/mp/gametypes/_clientids.gsc index 28f233c..7b59366 100644 --- a/mods/bots/maps/mp/gametypes/_clientids.gsc +++ b/maps/mp/gametypes/_clientids.gsc @@ -4,7 +4,9 @@ init() level thread onPlayerConnect(); - level thread maps\mp\bots\_bot::init(); + // bootstrap + level thread scripts\bots_adapter::init(); + level thread scripts\bots::init(); } onPlayerConnect() diff --git a/mods/bots/maps/mp/bots/_menu.gsc b/mods/bots/maps/mp/bots/_menu.gsc deleted file mode 100644 index b92f8f9..0000000 --- a/mods/bots/maps/mp/bots/_menu.gsc +++ /dev/null @@ -1,1018 +0,0 @@ -/* - _menu - Author: INeedGames - Date: 09/26/2020 - The ingame menu. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -init() -{ - if (getDvar("bots_main_menu") == "") - setDvar("bots_main_menu", true); - - if (!getDvarInt("bots_main_menu")) - return; - - thread watchPlayers(); -} - -watchPlayers() -{ - for (;;) - { - 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(); - } - } -} - -init_menu() -{ - self.menuInit = true; - - self.menuOpen = false; - self.menu_player = undefined; - self.SubMenu = "Main"; - self.Curs["Main"]["X"] = 0; - self AddOptions(); - - self thread watchPlayerOpenMenu(); - self thread MenuSelect(); - self thread RightMenu(); - self thread LeftMenu(); - - self thread watchDisconnect(); - - self thread doGreetings(); -} - -kill_menu() -{ - self notify("bots_kill_menu"); - self.menuInit = undefined; -} - -watchDisconnect() -{ - self waittill_either("disconnect", "bots_kill_menu"); - - 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() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - wait 1; - self iPrintln("Welcome to Bot Warfare "+self.name+"!"); - wait 5; - self iPrintln("Press [{+frag}] + [{+smoke}] to open menu!"); -} - -watchPlayerOpenMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for(;;) - { - while(!self FragButtonPressed() || !self SecondaryOffhandButtonPressed()) - wait 0.05; - - if(!self.menuOpen) - { - self playLocalSound( "mouse_click" ); - self thread OpenSub(self.SubMenu); - } - else - { - self playLocalSound( "mouse_click" ); - if(self.SubMenu != "Main") - self ExitSub(); - else - { - self ExitMenu(); - if(level.inPrematchPeriod || level.gameEnded) - self freezeControls(true); - else - self freezecontrols(false); - } - } - - while(self FragButtonPressed() && self SecondaryOffhandButtonPressed()) - wait 0.05; - } -} - -MenuSelect() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for(;;) - { - while(!self MeleeButtonPressed()) - wait 0.05; - - if(self.MenuOpen) - { - 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"]]); - } - - while(self MeleeButtonPressed()) - wait 0.05; - } -} - -LeftMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for(;;) - { - while(!self AttackButtonPressed()) - wait 0.05; - - if(self.MenuOpen) - { - self playLocalSound("mouse_over"); - - if(self.SubMenu == "Main") - { - self.Curs["Main"]["X"]--; - - if(self.Curs["Main"]["X"] < 0) - self.Curs["Main"]["X"] = self.Option["Name"][self.SubMenu].size -1; - - self CursMove("X"); - } - else - { - 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"); - } - } - - while(self AttackButtonPressed()) - wait 0.05; - } -} - -RightMenu() -{ - self endon ( "disconnect" ); - self endon ( "bots_kill_menu" ); - - for(;;) - { - while(!self AdsButtonPressed()) - wait 0.05; - - if(self.MenuOpen) - { - self playLocalSound("mouse_over"); - - if(self.SubMenu == "Main") - { - self.Curs["Main"]["X"]++; - - if(self.Curs["Main"]["X"] > self.Option["Name"][self.SubMenu].size -1) - self.Curs["Main"]["X"] = 0; - - self CursMove("X"); - } - else - { - 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"); - } - } - - while(self AdsButtonPressed()) - wait 0.05; - } -} - -OpenSub(menu, menu2) -{ - if(menu != "Main" && (!isDefined(self.Menu[menu]) || !!isDefined(self.Menu[menu]["FirstOpen"]))) - { - self.Curs[menu]["Y"] = 0; - self.Menu[menu]["FirstOpen"] = true; - } - - logoldi = true; - self.SubMenu = menu; - - 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++) - { - self.MenuText[i] = self createfontstring("default", 1.6); - self.MenuText[i] setpoint("CENTER", "CENTER", -300+(i*100), -226); - self.MenuText[i] settext(self.Option["Name"][self.SubMenu][i]); - if(logOldi) - self.oldi = i; - - if(self.MenuText[i].x > 300) - { - logOldi = false; - x = i - self.oldi; - self.MenuText[i] setpoint("CENTER", "CENTER", (((-300)-(i*100))+(i*100))+(x*100), -196); - } - self.MenuText[i].alpha = 1; - self.MenuText[i].sort = 999; - } - - 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"); - - self CursMove("X"); - - self.menuVersionHud = initHudElem("Bot Warfare " + level.bw_VERSION, 0, 0); - - self.MenuOpen = true; - } - 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++) - { - self.MenuTextY[i] = self createfontstring("default", 1.6); - self.MenuTextY[i] setpoint("CENTER", "CENTER", self.MenuText[self.Curs["Main"]["X"]].x, -160+(i*20)); - self.MenuTextY[i] settext(self.Option["Name"][self.SubMenu][i]); - self.MenuTextY[i].alpha = 1; - self.MenuTextY[i].sort = 999; - } - - self CursMove("Y"); - } -} - -CursMove(direction) -{ - self notify("scrolled"); - if(self.SubMenu == "Main") - { - self.Menu["X"]["Scroller"].x = self.MenuText[self.Curs["Main"]["X"]].x; - self.Menu["X"]["Scroller"].y = self.MenuText[self.Curs["Main"]["X"]].y; - - if(isDefined(self.MenuText)) - { - for(i = 0; i < self.MenuText.size; i++) - { - if(isDefined(self.MenuText[i])) - { - self.MenuText[i].fontscale = 1.5; - self.MenuText[i].color = (1,1,1); - self.MenuText[i].glowAlpha = 0; - } - } - } - - self thread ShowOptionOn(direction); - } - else - { - if(isDefined(self.MenuTextY)) - { - for(i = 0; i < self.MenuTextY.size; i++) - { - if(isDefined(self.MenuTextY[i])) - { - self.MenuTextY[i].fontscale = 1.5; - self.MenuTextY[i].color = (1,1,1); - self.MenuTextY[i].glowAlpha = 0; - } - } - } - - if(isDefined(self.MenuText)) - { - for(i = 0; i < self.MenuText.size; i++) - { - if(isDefined(self.MenuText[i])) - { - self.MenuText[i].fontscale = 1.5; - self.MenuText[i].color = (1,1,1); - self.MenuText[i].glowAlpha = 0; - } - } - } - - self thread ShowOptionOn(direction); - } -} - -ShowOptionOn(variable) -{ - self endon("scrolled"); - self endon("disconnect"); - self endon("exit"); - self endon("bots_kill_menu"); - - for(time=0;;time+=0.05) - { - if(!self isOnGround() && isAlive(self) && !level.inPrematchPeriod && !level.gameEnded) - self freezecontrols(false); - else - self freezecontrols(true); - - self setClientDvar( "r_blur", "5" ); - self setClientDvar( "sc_blur", "4" ); - self addOptions(); - - if(self.SubMenu == "Main") - { - if(isDefined(self.Curs[self.SubMenu][variable]) && isDefined(self.MenuText) && isDefined(self.MenuText[self.Curs[self.SubMenu][variable]])) - { - self.MenuText[self.Curs[self.SubMenu][variable]].fontscale = 2.0; - //self.MenuText[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); - 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; - } - - if(isDefined(self.MenuText)) - { - 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]])) - { - self.MenuTextY[self.Curs[self.SubMenu][variable]].fontscale = 2.0; - //self.MenuTextY[self.Curs[self.SubMenu][variable]].color = (randomInt(256)/255, randomInt(256)/255, randomInt(256)/255); - 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; - } - - if(isDefined(self.MenuTextY)) - { - 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; - } -} - -AddMenu(menu, num, text, function, arg1, arg2) -{ - self.Option["Name"][menu][num] = text; - self.Option["Function"][menu][num] = function; - self.Option["Arg1"][menu][num] = arg1; - self.Option["Arg2"][menu][num] = arg2; -} - -AddBack(menu, back) -{ - self.Menu["Back"][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"); - - self setClientDvar( "r_blur", "0" ); - self setClientDvar( "sc_blur", "2" ); -} - -initHudElem(txt, xl, yl) -{ - hud = NewClientHudElem( self ); - hud setText(txt); - hud.alignX = "center"; - hud.alignY = "bottom"; - hud.horzAlign = "center"; - hud.vertAlign = "bottom"; - hud.x = xl; - hud.y = yl; - hud.foreground = true; - hud.fontScale = 1.4; - hud.font = "objective"; - hud.alpha = 1; - hud.glow = 0; - hud.glowColor = ( 0, 0, 0 ); - hud.glowAlpha = 1; - hud.color = ( 1.0, 1.0, 1.0 ); - - return hud; -} - -createRectangle(align,relative,x,y,width,height,color,sort,alpha,shader) -{ - barElemBG = newClientHudElem( self ); - barElemBG.elemType = "bar_"; - barElemBG.width = width; - barElemBG.height = height; - barElemBG.align = align; - barElemBG.relative = relative; - barElemBG.xOffset = 0; - barElemBG.yOffset = 0; - barElemBG.children = []; - barElemBG.sort = sort; - barElemBG.color = color; - barElemBG.alpha = alpha; - barElemBG setParent( level.uiParent ); - barElemBG setShader( shader, width , height ); - barElemBG.hidden = false; - barElemBG setPoint(align, relative, x, y); - return barElemBG; -} - -AddOptions() -{ - self AddMenu("Main", 0, "Manage bots", ::OpenSub, "man_bots", ""); - self AddBack("man_bots", "Main"); - - _temp = ""; - _tempDvar = getDvarInt("bots_manage_add"); - self AddMenu("man_bots", 0, "Add 1 bot", ::man_bots, "add", 1 + _tempDvar); - self AddMenu("man_bots", 1, "Add 3 bot", ::man_bots, "add", 3 + _tempDvar); - self AddMenu("man_bots", 2, "Add 7 bot", ::man_bots, "add", 7 + _tempDvar); - self AddMenu("man_bots", 3, "Add 11 bot", ::man_bots, "add", 11 + _tempDvar); - self AddMenu("man_bots", 4, "Add 17 bot", ::man_bots, "add", 17 + _tempDvar); - self AddMenu("man_bots", 5, "Kick a bot", ::man_bots, "kick", 1); - self AddMenu("man_bots", 6, "Kick all bots", ::man_bots, "kick", getBotArray().size); - - _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); - - _tempDvar = getDvarInt("bots_manage_fill_mode"); - switch(_tempDvar) - { - case 0: - _temp = "everyone"; - break; - case 1: - _temp = "just bots"; - break; - case 2: - _temp = "everyone, adjust to map"; - break; - case 3: - _temp = "just bots, adjust to map"; - break; - case 4: - _temp = "bots used as team balance"; - break; - default: - _temp = "out of range"; - break; - } - self AddMenu("man_bots", 8, "Change bot_fill_mode: " + _temp, ::man_bots, "fillmode", _tempDvar); - - _tempDvar = getDvarInt("bots_manage_fill"); - self AddMenu("man_bots", 9, "Increase bots to keep in-game: " + _tempDvar, ::man_bots, "fillup", _tempDvar); - self AddMenu("man_bots", 10, "Decrease bots to keep in-game: " + _tempDvar, ::man_bots, "filldown", _tempDvar); - - _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); - - // - - self AddMenu("Main", 1, "Teams and difficulty", ::OpenSub, "man_team", ""); - self AddBack("man_team", "Main"); - - _tempDvar = getdvar("bots_team"); - self AddMenu("man_team", 0, "Change bot team: "+_tempDvar, ::bot_teams, "team", _tempDvar); - - _tempDvar = getDvarInt("bots_team_amount"); - self AddMenu("man_team", 1, "Increase bots to be on axis team: "+_tempDvar, ::bot_teams, "teamup", _tempDvar); - self AddMenu("man_team", 2, "Decrease bots to be on axis team: "+_tempDvar, ::bot_teams, "teamdown", _tempDvar); - - _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); - - _tempDvar = getdvarint("bots_skill"); - switch(_tempDvar) - { - case 0: - _temp = "random for all"; - break; - case 1: - _temp = "too easy"; - break; - case 2: - _temp = "easy"; - break; - case 3: - _temp = "easy-medium"; - break; - case 4: - _temp = "medium"; - break; - case 5: - _temp = "hard"; - break; - case 6: - _temp = "very hard"; - break; - case 7: - _temp = "hardest"; - break; - case 8: - _temp = "custom"; - break; - case 9: - _temp = "complete random"; - break; - default: - _temp = "out of range"; - break; - } - self AddMenu("man_team", 5, "Change bot difficulty: "+_temp, ::bot_teams, "skill", _tempDvar); - - _tempDvar = getDvarInt("bots_skill_axis_hard"); - self AddMenu("man_team", 6, "Increase amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axishardup", _tempDvar); - self AddMenu("man_team", 7, "Decrease amount of hard bots on axis team: " + _tempDvar, ::bot_teams, "axisharddown", _tempDvar); - - _tempDvar = getDvarInt("bots_skill_axis_med"); - self AddMenu("man_team", 8, "Increase amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismedup", _tempDvar); - self AddMenu("man_team", 9, "Decrease amount of med bots on axis team: " + _tempDvar, ::bot_teams, "axismeddown", _tempDvar); - - _tempDvar = getDvarInt("bots_skill_allies_hard"); - self AddMenu("man_team", 10, "Increase amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "allieshardup", _tempDvar); - self AddMenu("man_team", 11, "Decrease amount of hard bots on allies team: " + _tempDvar, ::bot_teams, "alliesharddown", _tempDvar); - - _tempDvar = getDvarInt("bots_skill_allies_med"); - self AddMenu("man_team", 12, "Increase amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmedup", _tempDvar); - self AddMenu("man_team", 13, "Decrease amount of med bots on allies team: " + _tempDvar, ::bot_teams, "alliesmeddown", _tempDvar); - - // - - self AddMenu("Main", 2, "Bot settings", ::OpenSub, "set1", ""); - self AddBack("set1", "Main"); - - _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_obj"); - if(_tempDvar) - _temp = "true"; - else - _temp = "false"; - self AddMenu("set1", 6, "Bots play the objective: "+_temp, ::bot_func, "obj", _tempDvar); - - _tempDvar = getDvarInt("bots_play_camp"); - if(_tempDvar) - _temp = "true"; - else - _temp = "false"; - self AddMenu("set1", 7, "Bots can camp: "+_temp, ::bot_func, "camp", _tempDvar); - - _tempDvar = getDvarInt("bots_play_jumpdrop"); - if(_tempDvar) - _temp = "true"; - else - _temp = "false"; - self AddMenu("set1", 8, "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", 9, "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", 10, "Bots can use killstreaks: "+_temp, ::bot_func, "killstreak", _tempDvar); - - _tempDvar = getDvarInt("bots_play_ads"); - if(_tempDvar) - _temp = "true"; - else - _temp = "false"; - self AddMenu("set1", 11, "Bots can ads: "+_temp, ::bot_func, "ads", _tempDvar); -} - -bot_func(a, b) -{ - switch (a) - { - case "reasonable": - setDvar("bots_loadout_reasonable", !b); - self iPrintln("Bots using reasonable setups: " + !b); - break; - case "op": - setDvar("bots_loadout_allow_op", !b); - self iPrintln("Bots using op setups: " + !b); - break; - case "move": - setDvar("bots_play_move", !b); - self iPrintln("Bots move: " + !b); - break; - case "knife": - setDvar("bots_play_knife", !b); - self iPrintln("Bots knife: " + !b); - break; - case "fire": - setDvar("bots_play_fire", !b); - self iPrintln("Bots fire: " + !b); - break; - case "nade": - setDvar("bots_play_nade", !b); - self iPrintln("Bots nade: " + !b); - break; - case "obj": - setDvar("bots_play_obj", !b); - self iPrintln("Bots play the obj: " + !b); - break; - case "camp": - setDvar("bots_play_camp", !b); - self iPrintln("Bots camp: " + !b); - break; - case "jump": - setDvar("bots_play_jumpdrop", !b); - self iPrintln("Bots jump: " + !b); - break; - case "targetother": - setDvar("bots_play_target_other", !b); - self iPrintln("Bots target other: " + !b); - break; - case "killstreak": - setDvar("bots_play_killstreak", !b); - self iPrintln("Bots use killstreaks: " + !b); - break; - case "ads": - setDvar("bots_play_ads", !b); - self iPrintln("Bots ads: " + !b); - break; - } -} - -bot_teams(a, b) -{ - switch(a) - { - case "team": - switch(b) - { - case "autoassign": - setdvar("bots_team", "allies"); - self iPrintlnBold("Changed bot team to allies."); - break; - case "allies": - setdvar("bots_team", "axis"); - self iPrintlnBold("Changed bot team to axis."); - break; - case "axis": - setdvar("bots_team", "custom"); - self iPrintlnBold("Changed bot team to custom."); - break; - default: - setdvar("bots_team", "autoassign"); - self iPrintlnBold("Changed bot team to autoassign."); - break; - } - break; - case "teamup": - setdvar("bots_team_amount", b+1); - self iPrintln((b+1)+" bot(s) will try to be on axis team."); - break; - case "teamdown": - setdvar("bots_team_amount", b-1); - self iPrintln((b-1)+" bot(s) will try to be on axis team."); - break; - case "teamforce": - setDvar("bots_team_force", !b); - self iPrintln("Forcing bots to team: " + !b); - break; - case "teammode": - setDvar("bots_team_mode", !b); - self iPrintln("Only count bots on team: " + !b); - break; - case "skill": - switch(b) - { - case 0: - self iPrintlnBold("Changed bot skill to easy."); - setDvar("bots_skill", 1); - break; - case 1: - self iPrintlnBold("Changed bot skill to easy-med."); - setDvar("bots_skill", 2); - break; - case 2: - self iPrintlnBold("Changed bot skill to medium."); - setDvar("bots_skill", 3); - break; - case 3: - self iPrintlnBold("Changed bot skill to med-hard."); - setDvar("bots_skill", 4); - break; - case 4: - self iPrintlnBold("Changed bot skill to hard."); - setDvar("bots_skill", 5); - break; - case 5: - self iPrintlnBold("Changed bot skill to very hard."); - setDvar("bots_skill", 6); - break; - case 6: - self iPrintlnBold("Changed bot skill to hardest."); - setDvar("bots_skill", 7); - break; - case 7: - self iPrintlnBold("Changed bot skill to custom. Base is easy."); - setDvar("bots_skill", 8); - break; - case 8: - self iPrintlnBold("Changed bot skill to complete random. Takes effect at restart."); - setDvar("bots_skill", 9); - break; - default: - self iPrintlnBold("Changed bot skill to random. Takes effect at restart."); - setDvar("bots_skill", 0); - break; - } - break; - case "axishardup": - setdvar("bots_skill_axis_hard", (b+1)); - self iPrintln(((b+1))+" hard bots will be on axis team."); - break; - case "axisharddown": - setdvar("bots_skill_axis_hard", (b-1)); - self iPrintln(((b-1))+" hard bots will be on axis team."); - break; - case "axismedup": - setdvar("bots_skill_axis_med", (b+1)); - self iPrintln(((b+1))+" med bots will be on axis team."); - break; - case "axismeddown": - setdvar("bots_skill_axis_med", (b-1)); - self iPrintln(((b-1))+" med bots will be on axis team."); - break; - case "allieshardup": - setdvar("bots_skill_allies_hard", (b+1)); - self iPrintln(((b+1))+" hard bots will be on allies team."); - break; - case "alliesharddown": - setdvar("bots_skill_allies_hard", (b-1)); - self iPrintln(((b-1))+" hard bots will be on allies team."); - break; - case "alliesmedup": - setdvar("bots_skill_allies_med", (b+1)); - self iPrintln(((b+1))+" med bots will be on allies team."); - break; - case "alliesmeddown": - setdvar("bots_skill_allies_med", (b-1)); - self iPrintln(((b-1))+" med bots will be on allies team."); - break; - } -} - -man_bots(a, b) -{ - switch(a) - { - case "add": - setdvar("bots_manage_add", b); - if(b == 1) - { - self iPrintln("Adding "+b+" bot."); - } - else - { - self iPrintln("Adding "+b+" bots."); - } - break; - case "kick": - for (i = 0; i < b; i++) - { - RemoveTestClient(); - - wait 0.25; - } - break; - case "autokick": - setDvar("bots_manage_fill_kick", !b); - self iPrintln("Kicking bots when bots_fill is exceeded: " + !b); - break; - case "fillmode": - switch(b) - { - case 0: - setdvar("bots_manage_fill_mode", 1); - self iPrintln("bot_fill will now count only bots."); - break; - case 1: - setdvar("bots_manage_fill_mode", 2); - self iPrintln("bot_fill will now count everyone, adjusting to map."); - break; - case 2: - setdvar("bots_manage_fill_mode", 3); - self iPrintln("bot_fill will now count only bots, adjusting to map."); - break; - case 3: - setdvar("bots_manage_fill_mode", 4); - self iPrintln("bot_fill will now use bots as team balance."); - break; - default: - setdvar("bots_manage_fill_mode", 0); - self iPrintln("bot_fill will now count everyone."); - break; - } - break; - case "fillup": - setdvar("bots_manage_fill", b+1); - self iPrintln("Increased to maintain "+(b+1)+" bot(s)."); - break; - case "filldown": - setdvar("bots_manage_fill", b-1); - self iPrintln("Decreased to maintain "+(b-1)+" bot(s)."); - break; - case "fillspec": - setDvar("bots_manage_fill_spec", !b); - self iPrintln("Count players on spectator for bots_fill: " + !b); - break; - } -} diff --git a/mods/bots/maps/mp/bots/_wp_editor.gsc b/mods/bots/maps/mp/bots/_wp_editor.gsc deleted file mode 100644 index 9253bc8..0000000 --- a/mods/bots/maps/mp/bots/_wp_editor.gsc +++ /dev/null @@ -1,631 +0,0 @@ -/* - _wp_editor - Author: INeedGames - Date: 09/26/2020 - The ingame waypoint editor. -*/ - -#include common_scripts\utility; -#include maps\mp\_utility; -#include maps\mp\gametypes\_hud_util; -#include maps\mp\bots\_bot_utility; - -init() -{ - if(getDvar("bots_main_debug") == "") - setDvar("bots_main_debug", 0); - - if(!getDVarint("bots_main_debug")) - return; - - if(!getDVarint("developer")) - { - setdvar("developer_script", 1); - setdvar("developer", 1); - - setdvar("sv_mapRotation", "map "+getDvar("mapname")); - exitLevel(false); - } - - setDvar("bots_main", 0); - setdvar("bots_main_menu", 0); - setdvar("bots_manage_fill_mode", 0); - setdvar("bots_manage_fill", 0); - setdvar("bots_manage_add", 0); - setdvar("bots_manage_fill_kick", 1); - 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); - - if(getDvar("bots_main_debug_commandWait") == "") - setDvar("bots_main_debug_commandWait", 0.5); - - if(getDvar("bots_main_debug_framerate") == "") - setDvar("bots_main_debug_framerate", 58); - - if(getDvar("bots_main_debug_lineDuration") == "") - setDvar("bots_main_debug_lineDuration", 3); - - if(getDvar("bots_main_debug_printDuration") == "") - setDvar("bots_main_debug_printDuration", 3); - - if(getDvar("bots_main_debug_debugRate") == "") - setDvar("bots_main_debug_debugRate", 0.5); - - setDvar("player_sustainAmmo", 1); - - level.waypoints = []; - level.waypointCount = 0; - - level waittill( "connected", player); - - player thread onPlayerSpawned(); -} - -onPlayerSpawned() -{ - self endon("disconnect"); - for(;;) - { - self waittill("spawned_player"); - self thread beginDebug(); - } -} - -beginDebug() -{ - self endon("disconnect"); - self endon("death"); - - level.wpToLink = -1; - level.autoLink = false; - self.closest = -1; - self.command = undefined; - - self clearPerks(); - self takeAllWeapons(); - self.specialty = []; - self giveWeapon("m16_gl_mp"); - self SetActionSlot( 3, "altMode" ); - self giveWeapon("frag_grenade_mp"); - self freezecontrols(false); - - self thread debug(); - self thread addWaypoints(); - self thread linkWaypoints(); - self thread deleteWaypoints(); - self thread watchSaveWaypointsCommand(); - self thread sayExtras(); - - self thread textScroll("^1SecondaryOffhand - ^2Add Waypoint; ^3MeleeButton - ^4Link Waypoint; ^5FragButton - ^6Delete Waypoint; ^7UseButton + AttackButton - ^8Save"); -} - -sayExtras() -{ - self endon("disconnect"); - self endon("death"); - self iprintln("Making a crouch waypoint with only one link..."); - self iprintln("Makes a camping waypoint."); -} - -debug() -{ - self endon("disconnect"); - self endon("death"); - - self setClientDvar("com_maxfps", getDvarInt("bots_main_debug_framerate")); - - for(;;) - { - wait getDvarFloat("bots_main_debug_debugRate"); - - if(isDefined(self.command)) - continue; - - closest = -1; - myEye = self getTagOrigin( "j_head" ); - myAngles = self GetPlayerAngles(); - - 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), 1, 1, getDvarInt("bots_main_debug_lineDuration")); - - if(getConeDot(wpOrg, myEye, myAngles) > getDvarFloat("bots_main_debug_cone")) - print3d(wpOrg, i, (1,0,0), 2, 1, 6); - - if (isDefined(level.waypoints[i].angles) && level.waypoints[i].type != "stand") - line(wpOrg, wpOrg + AnglesToForward(level.waypoints[i].angles) * 64, (1,1,1), 1, 1, getDvarInt("bots_main_debug_lineDuration")); - } - } - - self.closest = closest; - - if(closest != -1) - { - stringChildren = ""; - for(i = 0; i < level.waypoints[closest].children.size; i++) - { - if(i != 0) - stringChildren = stringChildren + "," + level.waypoints[closest].children[i]; - else - stringChildren = stringChildren + level.waypoints[closest].children[i]; - } - print3d(level.waypoints[closest].origin + (0, 0, 35), stringChildren, (0,1,0), 2, 1, getDvarInt("bots_main_debug_printDuration")); - - print3d(level.waypoints[closest].origin + (0, 0, 15), level.waypoints[closest].type, (0,1,0), 2, 1, getDvarInt("bots_main_debug_printDuration")); - } - } -} - -AddWaypoints() -{ - self endon("disconnect"); - self endon("death"); - for(;;) - { - while(!self SecondaryOffhandButtonPressed() || isDefined(self.command)) - wait 0.05; - - pos = self getOrigin(); - self.command = true; - - self iprintln("Adding a waypoint..."); - self iprintln("ADS - climb; Attack + Use - tube"); - self iprintln("Attack - grenade; Use - claymore"); - self iprintln("Else(wait) - your stance"); - - wait getDvarFloat("bots_main_debug_commandWait"); - - self addWaypoint(pos); - - self.command = undefined; - - while(self SecondaryOffhandButtonPressed()) - wait 0.05; - } -} - -linkWaypoints() -{ - self endon("disconnect"); - self endon("death"); - for(;;) - { - while(!self MeleeButtonPressed() || isDefined(self.command)) - wait 0.05; - - self.command = true; - - self iprintln("ADS - Unlink; Else(wait) - Link"); - - wait getDvarFloat("bots_main_debug_commandWait"); - - if(!self adsButtonPressed()) - self LinkWaypoint(self.closest); - else - self UnLinkWaypoint(self.closest); - - self.command = undefined; - - while(self MeleeButtonPressed()) - wait 0.05; - } -} - -deleteWaypoints() -{ - self endon("disconnect"); - self endon("death"); - for(;;) - { - while(!self fragButtonPressed() || isDefined(self.command)) - wait 0.05; - - self.command = true; - - self iprintln("Attack - DeleteAll; ADS - Load"); - self iprintln("Else(wait) - Delete"); - - wait getDvarFloat("bots_main_debug_commandWait"); - - if(self attackButtonPressed()) - self deleteAllWaypoints(); - else if(self adsButtonPressed()) - self LoadWaypoints(); - else - self DeleteWaypoint(self.closest); - - self.command = undefined; - - while(self fragButtonPressed()) - wait 0.05; - } -} - -watchSaveWaypointsCommand() -{ - self endon("death"); - self endon("disconnect"); - - for(;;) - { - while(!self useButtonPressed() || !self attackButtonPressed() || isDefined(self.command)) - wait 0.05; - - self.command = true; - - self iprintln("ADS - Autolink; Else(wait) - Save"); - - wait getDvarFloat("bots_main_debug_commandWait"); - - if(!self adsButtonPressed()) - { - self checkForWarnings(); - wait 1; - - logprint("***********ABiliTy's WPDump**************\n\n"); - logprint("\n\n\n\n"); - mpnm=getMapName(getdvar("mapname")); - logprint("\n\n"+mpnm+"()\n{\n/*"); - logprint("*/waypoints = [];\n/*"); - for(i = 0; i < level.waypointCount; i++) - { - logprint("*/waypoints["+i+"] = spawnstruct();\n/*"); - logprint("*/waypoints["+i+"].origin = "+level.waypoints[i].origin+";\n/*"); - logprint("*/waypoints["+i+"].type = \""+level.waypoints[i].type+"\";\n/*"); - for(c = 0; c < level.waypoints[i].children.size; c++) - { - logprint("*/waypoints["+i+"].children["+c+"] = "+level.waypoints[i].children[c]+";\n/*"); - } - 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/*"); - } - logprint("*/return waypoints;\n}\n\n\n\n"); - - filename = "waypoints/" + getdvar("mapname") + "_wp.csv"; - fd = FS_FOpen(filename, "write"); - - PrintLn("********* Start Bot Warfare WPDump *********"); - PrintLn(level.waypointCount); - - if (fd > 0) - { - if (!FS_WriteLine(fd, level.waypointCount+"")) - { - FS_FClose(fd); - fd = 0; - } - } - for(i = 0; i < level.waypointCount; i++) - { - str = ""; - wp = level.waypoints[i]; - - str += wp.origin[0] + " " + wp.origin[1] + " " + wp.origin[2] + ","; - - for(h = 0; h < wp.children.size; h++) - { - 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 += ","; - - str += ","; - - PrintLn(str); - - if (fd > 0) - { - if (!FS_WriteLine(fd, str)) - { - FS_FClose(fd); - fd = 0; - } - } - } - PrintLn("\n\n\n\n\n\n"); - - self iprintln("Saved!!! to " + filename); - - if (fd > 0) - FS_FClose(fd); - } - else - { - if(level.autoLink) - { - self iPrintlnBold("Auto link disabled"); - level.autoLink = false; - level.wpToLink = -1; - } - else - { - self iPrintlnBold("Auto link enabled"); - level.autoLink = true; - level.wpToLink = self.closest; - } - } - - self.command = undefined; - - while(self useButtonPressed() && self attackButtonPressed()) - wait 0.05; - } -} - -LoadWaypoints() -{ - self DeleteAllWaypoints(); - self iPrintlnBold("Loading WPS..."); - load_waypoints(); - - wait 1; - - self checkForWarnings(); -} - -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++) - { - if(!isDefined(level.waypoints[i])) - { - self iprintln("WARNING: waypoint "+i+" is undefined"); - continue; - } - - 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)) - { - self iprintln("WARNING: waypoint "+i+" children is not defined"); - } - else - { - for(h = level.waypoints[i].children.size - 1; h >= 0; h--) - { - 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)) - { - self iprintln("WARNING: waypoint "+i+" type is undefined"); - continue; - } - - 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"); - } -} - -DeleteAllWaypoints() -{ - level.waypoints = []; - level.waypointCount = 0; - - self iprintln("DelAllWps"); -} - -DeleteWaypoint(nwp) -{ - if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist")) - { - self iprintln("No close enough waypoint to delete."); - return; - } - - level.wpToLink = -1; - - for(i = level.waypoints[nwp].children.size - 1; i >= 0; i--) - { - child = level.waypoints[nwp].children[i]; - - level.waypoints[child].children = array_remove(level.waypoints[child].children, nwp); - } - - for(i = 0; i < level.waypointCount; i++) - { - 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++ ) - { - if ( entry == nwp ) - { - while ( entry < level.waypointCount-1 ) - { - level.waypoints[entry] = level.waypoints[entry+1]; - entry++; - } - level.waypoints[entry] = undefined; - break; - } - } - level.waypointCount--; - - self iprintln("DelWp "+nwp); -} - -addWaypoint(pos) -{ - level.waypoints[level.waypointCount] = spawnstruct(); - - level.waypoints[level.waypointCount].origin = pos; - - 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(); - - level.waypoints[level.waypointCount].children = []; - - self iprintln(level.waypoints[level.waypointCount].type + " Waypoint "+ level.waypointCount +" Added at "+pos); - - if(level.autoLink) - { - if(level.wpToLink == -1) - level.wpToLink = level.waypointCount - 1; - - level.waypointCount++; - self LinkWaypoint(level.waypointCount - 1); - } - else - { - level.waypointCount++; - } -} - -UnLinkWaypoint(nwp) -{ - if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist")) - { - self iprintln("Waypoint Unlink Cancelled "+level.wpToLink); - level.wpToLink = -1; - return; - } - - if(level.wpToLink == -1 || nwp == level.wpToLink) - { - level.wpToLink = nwp; - self iprintln("Waypoint Unlink Started "+nwp); - return; - } - - level.waypoints[nwp].children = array_remove(level.waypoints[nwp].children, level.wpToLink); - level.waypoints[level.wpToLink].children = array_remove(level.waypoints[level.wpToLink].children, nwp); - - self iprintln("Waypoint " + nwp + " Broken to " + level.wpToLink); - level.wpToLink = -1; -} - -LinkWaypoint(nwp) -{ - if(nwp == -1 || distance(self.origin, level.waypoints[nwp].origin) > getDvarFloat("bots_main_debug_minDist")) - { - self iprintln("Waypoint Link Cancelled "+level.wpToLink); - level.wpToLink = -1; - return; - } - - if(level.wpToLink == -1 || nwp == level.wpToLink) - { - level.wpToLink = nwp; - self iprintln("Waypoint Link Started "+nwp); - return; - } - - weGood = true; - for(i = level.waypoints[level.wpToLink].children.size - 1; i >= 0; i--) - { - if(level.waypoints[level.wpToLink].children[i] == nwp) - { - weGood = false; - break; - } - } - if(weGood) - { - for(i = level.waypoints[nwp].children.size - 1; i >= 0; i--) - { - if(level.waypoints[nwp].children[i] == level.wpToLink) - { - weGood = false; - break; - } - } - } - - if (!weGood ) - { - self iprintln("Waypoint Link Cancelled "+nwp+" and "+level.wpToLink+" already linked."); - level.wpToLink = -1; - return; - } - - level.waypoints[level.wpToLink].children[level.waypoints[level.wpToLink].children.size] = nwp; - level.waypoints[nwp].children[level.waypoints[nwp].children.size] = level.wpToLink; - - self iprintln("Waypoint " + nwp + " Linked to " + level.wpToLink); - level.wpToLink = -1; -} - -destroyOnDeath(hud) -{ - hud endon("death"); - self waittill_either("death","disconnect"); - hud destroy(); -} - -textScroll(string) -{ - self endon("death"); - self endon("disconnect"); - //thanks ActionScript - - back = createBar((0,0,0), 1000, 30); - back setPoint("CENTER", undefined, 0, 220); - self thread destroyOnDeath(back); - - text = createFontString("default", 1.5); - text setText(string); - self thread destroyOnDeath(text); - - for (;;) - { - text setPoint("CENTER", undefined, 1200, 220); - text setPoint("CENTER", undefined, -1200, 220, 20); - wait 20; - } -} diff --git a/mods/bots/maps/mp/bots/waypoints/_custom_map.gsc b/mods/bots/maps/mp/bots/waypoints/_custom_map.gsc deleted file mode 100644 index 0a4a28f..0000000 --- a/mods/bots/maps/mp/bots/waypoints/_custom_map.gsc +++ /dev/null @@ -1,3 +0,0 @@ -main(mapname) -{ -} diff --git a/mods/bots/scriptdata/bp_haguenau_tdm.wp b/scriptdata/bp_haguenau_tdm.wp similarity index 100% rename from mods/bots/scriptdata/bp_haguenau_tdm.wp rename to scriptdata/bp_haguenau_tdm.wp diff --git a/mods/bots/scriptdata/gob_aim_tdm.wp b/scriptdata/gob_aim_tdm.wp similarity index 100% rename from mods/bots/scriptdata/gob_aim_tdm.wp rename to scriptdata/gob_aim_tdm.wp diff --git a/mods/bots/scriptdata/gob_rats_tdm.wp b/scriptdata/gob_rats_tdm.wp similarity index 100% rename from mods/bots/scriptdata/gob_rats_tdm.wp rename to scriptdata/gob_rats_tdm.wp diff --git a/mods/bots/scriptdata/mp_aim_1_tdm.wp b/scriptdata/mp_aim_1_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_aim_1_tdm.wp rename to scriptdata/mp_aim_1_tdm.wp diff --git a/mods/bots/scriptdata/mp_alcazaba_tdm.wp b/scriptdata/mp_alcazaba_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_alcazaba_tdm.wp rename to scriptdata/mp_alcazaba_tdm.wp diff --git a/mods/bots/scriptdata/mp_anomaly_tdm.wp b/scriptdata/mp_anomaly_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_anomaly_tdm.wp rename to scriptdata/mp_anomaly_tdm.wp diff --git a/mods/bots/scriptdata/mp_argentan_france_tdm.wp b/scriptdata/mp_argentan_france_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_argentan_france_tdm.wp rename to scriptdata/mp_argentan_france_tdm.wp diff --git a/mods/bots/scriptdata/mp_bahrain_v2_tdm.wp b/scriptdata/mp_bahrain_v2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_bahrain_v2_tdm.wp rename to scriptdata/mp_bahrain_v2_tdm.wp diff --git a/mods/bots/scriptdata/mp_bastogne_nite_tdm.wp b/scriptdata/mp_bastogne_nite_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_bastogne_nite_tdm.wp rename to scriptdata/mp_bastogne_nite_tdm.wp diff --git a/mods/bots/scriptdata/mp_bastogne_tdm.wp b/scriptdata/mp_bastogne_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_bastogne_tdm.wp rename to scriptdata/mp_bastogne_tdm.wp diff --git a/mods/bots/scriptdata/mp_benedictine_beta_tdm.wp b/scriptdata/mp_benedictine_beta_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_benedictine_beta_tdm.wp rename to scriptdata/mp_benedictine_beta_tdm.wp diff --git a/mods/bots/scriptdata/mp_borisovka_tdm.wp b/scriptdata/mp_borisovka_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_borisovka_tdm.wp rename to scriptdata/mp_borisovka_tdm.wp diff --git a/mods/bots/scriptdata/mp_breakout_tdm.wp b/scriptdata/mp_breakout_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_breakout_tdm.wp rename to scriptdata/mp_breakout_tdm.wp diff --git a/mods/bots/scriptdata/mp_brecourt_tdm.wp b/scriptdata/mp_brecourt_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_brecourt_tdm.wp rename to scriptdata/mp_brecourt_tdm.wp diff --git a/mods/bots/scriptdata/mp_breslau_tdm.wp b/scriptdata/mp_breslau_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_breslau_tdm.wp rename to scriptdata/mp_breslau_tdm.wp diff --git a/mods/bots/scriptdata/mp_buhlert_tdm.wp b/scriptdata/mp_buhlert_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_buhlert_tdm.wp rename to scriptdata/mp_buhlert_tdm.wp diff --git a/mods/bots/scriptdata/mp_burgundy_tdm.wp b/scriptdata/mp_burgundy_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_burgundy_tdm.wp rename to scriptdata/mp_burgundy_tdm.wp diff --git a/mods/bots/scriptdata/mp_carentan_tdm.wp b/scriptdata/mp_carentan_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_carentan_tdm.wp rename to scriptdata/mp_carentan_tdm.wp diff --git a/mods/bots/scriptdata/mp_carentan_ville_tdm.wp b/scriptdata/mp_carentan_ville_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_carentan_ville_tdm.wp rename to scriptdata/mp_carentan_ville_tdm.wp diff --git a/mods/bots/scriptdata/mp_castle_tdm.wp b/scriptdata/mp_castle_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_castle_tdm.wp rename to scriptdata/mp_castle_tdm.wp diff --git a/mods/bots/scriptdata/mp_chateau_tdm.wp b/scriptdata/mp_chateau_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_chateau_tdm.wp rename to scriptdata/mp_chateau_tdm.wp diff --git a/mods/bots/scriptdata/mp_d-day+7.2_tdm.wp b/scriptdata/mp_d-day+7.2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_d-day+7.2_tdm.wp rename to scriptdata/mp_d-day+7.2_tdm.wp diff --git a/mods/bots/scriptdata/mp_d_omaha_tdm.wp b/scriptdata/mp_d_omaha_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_d_omaha_tdm.wp rename to scriptdata/mp_d_omaha_tdm.wp diff --git a/mods/bots/scriptdata/mp_dawnville_tdm.wp b/scriptdata/mp_dawnville_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_dawnville_tdm.wp rename to scriptdata/mp_dawnville_tdm.wp diff --git a/mods/bots/scriptdata/mp_deadend_tdm.wp b/scriptdata/mp_deadend_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_deadend_tdm.wp rename to scriptdata/mp_deadend_tdm.wp diff --git a/mods/bots/scriptdata/mp_decoy_tdm.wp b/scriptdata/mp_decoy_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_decoy_tdm.wp rename to scriptdata/mp_decoy_tdm.wp diff --git a/mods/bots/scriptdata/mp_depot_tdm.wp b/scriptdata/mp_depot_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_depot_tdm.wp rename to scriptdata/mp_depot_tdm.wp diff --git a/mods/bots/scriptdata/mp_depot_winter_tdm.wp b/scriptdata/mp_depot_winter_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_depot_winter_tdm.wp rename to scriptdata/mp_depot_winter_tdm.wp diff --git a/mods/bots/scriptdata/mp_djerba_tdm.wp b/scriptdata/mp_djerba_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_djerba_tdm.wp rename to scriptdata/mp_djerba_tdm.wp diff --git a/mods/bots/scriptdata/mp_downtown_tdm.wp b/scriptdata/mp_downtown_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_downtown_tdm.wp rename to scriptdata/mp_downtown_tdm.wp diff --git a/mods/bots/scriptdata/mp_downtown_utd.wp b/scriptdata/mp_downtown_utd.wp similarity index 100% rename from mods/bots/scriptdata/mp_downtown_utd.wp rename to scriptdata/mp_downtown_utd.wp diff --git a/mods/bots/scriptdata/mp_downtown_vip.wp b/scriptdata/mp_downtown_vip.wp similarity index 100% rename from mods/bots/scriptdata/mp_downtown_vip.wp rename to scriptdata/mp_downtown_vip.wp diff --git a/mods/bots/scriptdata/mp_farm_du_hoc_tdm.wp b/scriptdata/mp_farm_du_hoc_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_farm_du_hoc_tdm.wp rename to scriptdata/mp_farm_du_hoc_tdm.wp diff --git a/mods/bots/scriptdata/mp_farmhouse_tdm.wp b/scriptdata/mp_farmhouse_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_farmhouse_tdm.wp rename to scriptdata/mp_farmhouse_tdm.wp diff --git a/mods/bots/scriptdata/mp_feud_tdm.wp b/scriptdata/mp_feud_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_feud_tdm.wp rename to scriptdata/mp_feud_tdm.wp diff --git a/mods/bots/scriptdata/mp_fracas_tdm.wp b/scriptdata/mp_fracas_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_fracas_tdm.wp rename to scriptdata/mp_fracas_tdm.wp diff --git a/mods/bots/scriptdata/mp_harbor_tdm.wp b/scriptdata/mp_harbor_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_harbor_tdm.wp rename to scriptdata/mp_harbor_tdm.wp diff --git a/mods/bots/scriptdata/mp_hill24_tdm.wp b/scriptdata/mp_hill24_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_hill24_tdm.wp rename to scriptdata/mp_hill24_tdm.wp diff --git a/mods/bots/scriptdata/mp_hill400_test_tdm.wp b/scriptdata/mp_hill400_test_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_hill400_test_tdm.wp rename to scriptdata/mp_hill400_test_tdm.wp diff --git a/mods/bots/scriptdata/mp_hillside_tdm.wp b/scriptdata/mp_hillside_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_hillside_tdm.wp rename to scriptdata/mp_hillside_tdm.wp diff --git a/mods/bots/scriptdata/mp_hurtgen_tdm.wp b/scriptdata/mp_hurtgen_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_hurtgen_tdm.wp rename to scriptdata/mp_hurtgen_tdm.wp diff --git a/mods/bots/scriptdata/mp_kacx_tdm.wp b/scriptdata/mp_kacx_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_kacx_tdm.wp rename to scriptdata/mp_kacx_tdm.wp diff --git a/mods/bots/scriptdata/mp_kalsingrad_v2_tdm.wp b/scriptdata/mp_kalsingrad_v2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_kalsingrad_v2_tdm.wp rename to scriptdata/mp_kalsingrad_v2_tdm.wp diff --git a/mods/bots/scriptdata/mp_kalstle_v2_tdm.wp b/scriptdata/mp_kalstle_v2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_kalstle_v2_tdm.wp rename to scriptdata/mp_kalstle_v2_tdm.wp diff --git a/mods/bots/scriptdata/mp_karkand_final_tdm.wp b/scriptdata/mp_karkand_final_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_karkand_final_tdm.wp rename to scriptdata/mp_karkand_final_tdm.wp diff --git a/mods/bots/scriptdata/mp_karkand_tdm.WP b/scriptdata/mp_karkand_tdm.WP similarity index 100% rename from mods/bots/scriptdata/mp_karkand_tdm.WP rename to scriptdata/mp_karkand_tdm.WP diff --git a/mods/bots/scriptdata/mp_le_crew_tdm.wp b/scriptdata/mp_le_crew_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_le_crew_tdm.wp rename to scriptdata/mp_le_crew_tdm.wp diff --git a/mods/bots/scriptdata/mp_leningrad_tdm.wp b/scriptdata/mp_leningrad_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_leningrad_tdm.wp rename to scriptdata/mp_leningrad_tdm.wp diff --git a/mods/bots/scriptdata/mp_matmata_tdm.wp b/scriptdata/mp_matmata_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_matmata_tdm.wp rename to scriptdata/mp_matmata_tdm.wp diff --git a/mods/bots/scriptdata/mp_mazza_tdm.wp b/scriptdata/mp_mazza_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_mazza_tdm.wp rename to scriptdata/mp_mazza_tdm.wp diff --git a/mods/bots/scriptdata/mp_mirage_night_tdm.wp b/scriptdata/mp_mirage_night_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_mirage_night_tdm.wp rename to scriptdata/mp_mirage_night_tdm.wp diff --git a/mods/bots/scriptdata/mp_mirage_ver4_tdm.wp b/scriptdata/mp_mirage_ver4_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_mirage_ver4_tdm.wp rename to scriptdata/mp_mirage_ver4_tdm.wp diff --git a/mods/bots/scriptdata/mp_moh_town_tdm.wp b/scriptdata/mp_moh_town_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_moh_town_tdm.wp rename to scriptdata/mp_moh_town_tdm.wp diff --git a/mods/bots/scriptdata/mp_montargis_v2_tdm.wp b/scriptdata/mp_montargis_v2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_montargis_v2_tdm.wp rename to scriptdata/mp_montargis_v2_tdm.wp diff --git a/mods/bots/scriptdata/mp_n1v3_tdm.wp b/scriptdata/mp_n1v3_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_n1v3_tdm.wp rename to scriptdata/mp_n1v3_tdm.wp diff --git a/mods/bots/scriptdata/mp_neuville_tdm.wp b/scriptdata/mp_neuville_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_neuville_tdm.wp rename to scriptdata/mp_neuville_tdm.wp diff --git a/mods/bots/scriptdata/mp_normandie_beta_2_tdm.wp b/scriptdata/mp_normandie_beta_2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_normandie_beta_2_tdm.wp rename to scriptdata/mp_normandie_beta_2_tdm.wp diff --git a/mods/bots/scriptdata/mp_normandie_night_final_tdm.wp b/scriptdata/mp_normandie_night_final_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_normandie_night_final_tdm.wp rename to scriptdata/mp_normandie_night_final_tdm.wp diff --git a/mods/bots/scriptdata/mp_nuenen_v1_tdm.wp b/scriptdata/mp_nuenen_v1_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_nuenen_v1_tdm.wp rename to scriptdata/mp_nuenen_v1_tdm.wp diff --git a/mods/bots/scriptdata/mp_omaha_v2a_tdm.wp b/scriptdata/mp_omaha_v2a_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_omaha_v2a_tdm.wp rename to scriptdata/mp_omaha_v2a_tdm.wp diff --git a/mods/bots/scriptdata/mp_pavlov_tdm.wp b/scriptdata/mp_pavlov_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_pavlov_tdm.wp rename to scriptdata/mp_pavlov_tdm.wp diff --git a/mods/bots/scriptdata/mp_powcamp_tdm.wp b/scriptdata/mp_powcamp_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_powcamp_tdm.wp rename to scriptdata/mp_powcamp_tdm.wp diff --git a/mods/bots/scriptdata/mp_railyard_tdm.wp b/scriptdata/mp_railyard_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_railyard_tdm.wp rename to scriptdata/mp_railyard_tdm.wp diff --git a/mods/bots/scriptdata/mp_rhine_tdm.wp b/scriptdata/mp_rhine_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_rhine_tdm.wp rename to scriptdata/mp_rhine_tdm.wp diff --git a/mods/bots/scriptdata/mp_salerno_beachhead_tdm.wp b/scriptdata/mp_salerno_beachhead_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_salerno_beachhead_tdm.wp rename to scriptdata/mp_salerno_beachhead_tdm.wp diff --git a/mods/bots/scriptdata/mp_schultz_bunker_tdm.wp b/scriptdata/mp_schultz_bunker_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_schultz_bunker_tdm.wp rename to scriptdata/mp_schultz_bunker_tdm.wp diff --git a/mods/bots/scriptdata/mp_silotown_final_v4_tdm.wp b/scriptdata/mp_silotown_final_v4_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_silotown_final_v4_tdm.wp rename to scriptdata/mp_silotown_final_v4_tdm.wp diff --git a/mods/bots/scriptdata/mp_solovki_tdm.wp b/scriptdata/mp_solovki_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_solovki_tdm.wp rename to scriptdata/mp_solovki_tdm.wp diff --git a/mods/bots/scriptdata/mp_sweat_blood_tdm.wp b/scriptdata/mp_sweat_blood_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_sweat_blood_tdm.wp rename to scriptdata/mp_sweat_blood_tdm.wp diff --git a/mods/bots/scriptdata/mp_tilli_tdm.wp b/scriptdata/mp_tilli_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_tilli_tdm.wp rename to scriptdata/mp_tilli_tdm.wp diff --git a/mods/bots/scriptdata/mp_tobruk2_tdm.wp b/scriptdata/mp_tobruk2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_tobruk2_tdm.wp rename to scriptdata/mp_tobruk2_tdm.wp diff --git a/mods/bots/scriptdata/mp_tobruk_tdm.wp b/scriptdata/mp_tobruk_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_tobruk_tdm.wp rename to scriptdata/mp_tobruk_tdm.wp diff --git a/mods/bots/scriptdata/mp_toujane_tdm.wp b/scriptdata/mp_toujane_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_toujane_tdm.wp rename to scriptdata/mp_toujane_tdm.wp diff --git a/mods/bots/scriptdata/mp_trainstation_tdm.WP b/scriptdata/mp_trainstation_tdm.WP similarity index 100% rename from mods/bots/scriptdata/mp_trainstation_tdm.WP rename to scriptdata/mp_trainstation_tdm.WP diff --git a/mods/bots/scriptdata/mp_tunestiga_hall_tdm.wp b/scriptdata/mp_tunestiga_hall_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_tunestiga_hall_tdm.wp rename to scriptdata/mp_tunestiga_hall_tdm.wp diff --git a/mods/bots/scriptdata/mp_valence_tdm.wp b/scriptdata/mp_valence_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_valence_tdm.wp rename to scriptdata/mp_valence_tdm.wp diff --git a/mods/bots/scriptdata/mp_valence_v2_tdm.wp b/scriptdata/mp_valence_v2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_valence_v2_tdm.wp rename to scriptdata/mp_valence_v2_tdm.wp diff --git a/mods/bots/scriptdata/mp_valley_summer_tdm.wp b/scriptdata/mp_valley_summer_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_valley_summer_tdm.wp rename to scriptdata/mp_valley_summer_tdm.wp diff --git a/mods/bots/scriptdata/mp_warsaw_tdm.wp b/scriptdata/mp_warsaw_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_warsaw_tdm.wp rename to scriptdata/mp_warsaw_tdm.wp diff --git a/mods/bots/scriptdata/mp_xfire_bay_tdm.wp b/scriptdata/mp_xfire_bay_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mp_xfire_bay_tdm.wp rename to scriptdata/mp_xfire_bay_tdm.wp diff --git a/mods/bots/scriptdata/mtl_bismarck_tdm.wp b/scriptdata/mtl_bismarck_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mtl_bismarck_tdm.wp rename to scriptdata/mtl_bismarck_tdm.wp diff --git a/mods/bots/scriptdata/mtl_pirates_day_tdm.wp b/scriptdata/mtl_pirates_day_tdm.wp similarity index 100% rename from mods/bots/scriptdata/mtl_pirates_day_tdm.wp rename to scriptdata/mtl_pirates_day_tdm.wp diff --git a/mods/bots/scriptdata/rnr_murmansk_tdm.wp b/scriptdata/rnr_murmansk_tdm.wp similarity index 100% rename from mods/bots/scriptdata/rnr_murmansk_tdm.wp rename to scriptdata/rnr_murmansk_tdm.wp diff --git a/mods/bots/scriptdata/rnr_neuville_beta2_tdm.wp b/scriptdata/rnr_neuville_beta2_tdm.wp similarity index 100% rename from mods/bots/scriptdata/rnr_neuville_beta2_tdm.wp rename to scriptdata/rnr_neuville_beta2_tdm.wp diff --git a/mods/bots/scriptdata/rnr_neuville_tdm.wp b/scriptdata/rnr_neuville_tdm.wp similarity index 100% rename from mods/bots/scriptdata/rnr_neuville_tdm.wp rename to scriptdata/rnr_neuville_tdm.wp diff --git a/mods/bots/scriptdata/rocket_tdm.wp b/scriptdata/rocket_tdm.wp similarity index 100% rename from mods/bots/scriptdata/rocket_tdm.wp rename to scriptdata/rocket_tdm.wp diff --git a/mods/bots/scriptdata/shadowsniper_tdm.wp b/scriptdata/shadowsniper_tdm.wp similarity index 100% rename from mods/bots/scriptdata/shadowsniper_tdm.wp rename to scriptdata/shadowsniper_tdm.wp diff --git a/mods/bots/scriptdata/sps_devils_cliff_tdm.wp b/scriptdata/sps_devils_cliff_tdm.wp similarity index 100% rename from mods/bots/scriptdata/sps_devils_cliff_tdm.wp rename to scriptdata/sps_devils_cliff_tdm.wp diff --git a/mods/bots/scriptdata/waterfall_tdm.wp b/scriptdata/waterfall_tdm.wp similarity index 100% rename from mods/bots/scriptdata/waterfall_tdm.wp rename to scriptdata/waterfall_tdm.wp diff --git a/scriptdata/waypoints/.gitkeep b/scriptdata/waypoints/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/scripts/bots.gsc b/scripts/bots.gsc new file mode 100644 index 0000000..78d7204 --- /dev/null +++ b/scripts/bots.gsc @@ -0,0 +1,4 @@ +init() +{ + level thread maps\mp\bots\_bot::init(); +} diff --git a/scripts/bots_adapter.gsc b/scripts/bots_adapter.gsc new file mode 100644 index 0000000..27943e2 --- /dev/null +++ b/scripts/bots_adapter.gsc @@ -0,0 +1,137 @@ +init() +{ + level.bot_builtins["printconsole"] = ::do_printconsole; + level.bot_builtins["botaction"] = ::do_botaction; + level.bot_builtins["botstop"] = ::do_botstop; + level.bot_builtins["botmovement"] = ::do_botmovement; + level.bot_builtins["isbot"] = ::do_isbot; +} + +do_printconsole( s ) +{ + println( s ); +} + +do_botaction( action ) +{ + switch ( action ) + { + case "+fire": + self fireweapon( true ); + break; + + case "-fire": + self fireweapon( false ); + break; + + case "+ads": + self adsaim( true ); + break; + + case "-ads": + self adsaim( false ); + break; + + case "-reload": + self reloadweapon( false ); + break; + + case "+reload": + self reloadweapon( true ); + break; + + case "-melee": + self meleeweapon( false ); + break; + + case "+melee": + self meleeweapon( true ); + break; + + case "+frag": + self thrownade( true ); + break; + + case "-frag": + self thrownade( false ); + break; + + case "-gocrouch": + case "-goprone": + case "-gostand": + self setbotstance( "stand" ); + break; + + case "+gocrouch": + self setbotstance( "crouch" ); + break; + + case "+goprone": + self setbotstance( "prone" ); + break; + + case "+gostand": + self setbotstance( "jump" ); + break; + + case "-smoke": // no equal in libcod + case "-activate": + case "-holdbreath": + break; + } + + // self BotAction( action ); +} + +do_botstop() +{ + self adsaim( false ); + self reloadweapon( false ); + self meleeweapon( false ); + self fireweapon( false ); + self thrownade( false ); + self setbotstance( "stand" ); + self setlean( "none" ); + self setwalkdir( "none" ); + self switchtoweaponid( 1 ); // libcod needs weapon name to id + + // self BotStop(); +} + +do_botmovement( right, forward ) +{ + // best i can do for libcod... + if ( forward > 63 ) + { + self setwalkdir( "forward" ); + return; + } + + if ( right > 63 ) + { + self setwalkdir( "right" ); + return; + } + + if ( forward < -63 ) + { + self setwalkdir( "back" ); + return; + } + + if ( right < -63 ) + { + self setwalkdir( "left" ); + return; + } + + self setwalkdir( "none" ); + + // self botMovement( right, forward ); +} + +do_isbot() +{ + return false; // no equal in libcod + // self isBot(); +} diff --git a/z_deploy.bat b/z_deploy.bat deleted file mode 100644 index 05197ae..0000000 --- a/z_deploy.bat +++ /dev/null @@ -1 +0,0 @@ -start "" "node" deploy.js \ No newline at end of file diff --git a/z_server.bat b/z_server.bat deleted file mode 100644 index 9c27f83..0000000 --- a/z_server.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off -::RemoteCONtrol password, needed for most management tools like IW4MADMIN and B3. Do not skip if you installing IW4MADMIN. -set rcon_password= -::Name of the config file the server should use. -set cfg=server.cfg -::Name of the server shown in the title of the cmd window. This will NOT bet shown ingame. -set name=CoD2M Bot Warfare -::Port used by the server (default: 28960) -set port=28970 -::What ip to bind too -set ip=0.0.0.0 -::Mod name (default "") -set mod=mods/bots -::Only change this when you don't want to keep the bat files in the game folder. MOST WON'T NEED TO EDIT THIS! -set gamepath=%cd% -::Max clients in your server -set maxclients=64 - -title CoD2M MP - %name% - Server restarter -echo Visit plutonium.pw / Join the Discord (a6JM2Tv) for NEWS and Updates! -echo Server "%name%" will load "%cfg%" and listen on port "%port%" UDP with IP "%ip%"! -echo To shut down the server close this window first! -echo (%date%) - (%time%) %name% server start. - -:server -start /wait /abovenormal "%name%" "%~dp0CoD2MP_s.exe" +set dedicated "2" +set net_ip "%ip%" +set net_port "%port%" +set rcon_password "%rcon_password%" +set fs_game "%mod%" +set sv_maxclients "%maxclients%" +exec "%cfg%" +map_rotate -echo (%date%) - (%time%) WARNING: %name% server closed or dropped... server restarts. -goto Server