mirror of
https://github.com/ineedbots/iw2_bot_warfare.git
synced 2026-09-26 15:07:08 +00:00
more accurate adapter
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||

|

|
||||||
|
|
||||||
# IW2 Bot Warfare
|
# IW2 Bot Warfare
|
||||||
Bot Warfare is a GSC mod for [libcod](https://github.com/ibuddieat/zk_libcod/) / [CoD2rev Server](https://github.com/voron00/CoD2rev_Server).
|
Bot Warfare is a GSC mod for [CoD2rev Server](https://github.com/voron00/CoD2rev_Server)'s implementation of [libcod](https://znation.nl/cod2script/)'s bot functions.
|
||||||
|
|
||||||
It aims to add playable AI to the multiplayer games of CoD2.
|
It aims to add playable AI to the multiplayer games of CoD2.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ init()
|
|||||||
level thread onPlayerConnect();
|
level thread onPlayerConnect();
|
||||||
|
|
||||||
// bootstrap
|
// bootstrap
|
||||||
level thread scripts\mp\bots_adapter_libcod::init();
|
level thread scripts\mp\bots_adapter_znation_libcod::init();
|
||||||
level thread scripts\mp\bots_wp_editor::init();
|
level thread scripts\mp\bots_wp_editor::init();
|
||||||
level thread scripts\mp\bots::init();
|
level thread scripts\mp\bots::init();
|
||||||
level thread scripts\mp\bots_chat::init();
|
level thread scripts\mp\bots_chat::init();
|
||||||
|
|||||||
@@ -1,262 +0,0 @@
|
|||||||
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;
|
|
||||||
level.bot_builtins[ "botangles" ] = ::do_botangles;
|
|
||||||
level.bot_builtins[ "botweapon" ] = ::do_botweapon;
|
|
||||||
|
|
||||||
thread setup_weaponid_map();
|
|
||||||
}
|
|
||||||
|
|
||||||
register_weaponid( weap )
|
|
||||||
{
|
|
||||||
if ( !isdefined( level.bot_weaponids[ weap ] ) )
|
|
||||||
{
|
|
||||||
level.bot_weaponids[ weap ] = level.bot_weaponids.size;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setup_weaponid_map()
|
|
||||||
{
|
|
||||||
waittillframeend;
|
|
||||||
|
|
||||||
level.bot_weaponids = [];
|
|
||||||
register_weaponid( "none" );
|
|
||||||
register_weaponid( "defaultweapon_mp" );
|
|
||||||
|
|
||||||
turrets = getentarray( "misc_turret", "classname" );
|
|
||||||
|
|
||||||
for ( i = 0; i < turrets.size; i++ )
|
|
||||||
{
|
|
||||||
if ( !isdefined( turrets[i].weaponinfo ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_weaponid( turrets[i].weaponinfo );
|
|
||||||
}
|
|
||||||
|
|
||||||
// in the order of precache
|
|
||||||
switch ( game[ "allies" ] )
|
|
||||||
{
|
|
||||||
case "american":
|
|
||||||
register_weaponid( "frag_grenade_american_mp" );
|
|
||||||
register_weaponid( "smoke_grenade_american_mp" );
|
|
||||||
register_weaponid( "colt_mp" );
|
|
||||||
register_weaponid( "m1carbine_mp" );
|
|
||||||
register_weaponid( "m1garand_mp" );
|
|
||||||
register_weaponid( "thompson_mp" );
|
|
||||||
register_weaponid( "bar_mp" );
|
|
||||||
register_weaponid( "springfield_mp" );
|
|
||||||
register_weaponid( "greasegun_mp" );
|
|
||||||
register_weaponid( "shotgun_mp" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "british":
|
|
||||||
register_weaponid( "frag_grenade_british_mp" );
|
|
||||||
register_weaponid( "smoke_grenade_british_mp" );
|
|
||||||
register_weaponid( "webley_mp" );
|
|
||||||
register_weaponid( "enfield_mp" );
|
|
||||||
register_weaponid( "sten_mp" );
|
|
||||||
register_weaponid( "bren_mp" );
|
|
||||||
register_weaponid( "enfield_scope_mp" );
|
|
||||||
register_weaponid( "m1garand_mp" );
|
|
||||||
register_weaponid( "thompson_mp" );
|
|
||||||
register_weaponid( "shotgun_mp" );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "russian":
|
|
||||||
register_weaponid( "frag_grenade_russian_mp" );
|
|
||||||
register_weaponid( "smoke_grenade_russian_mp" );
|
|
||||||
register_weaponid( "TT30_mp" );
|
|
||||||
register_weaponid( "mosin_nagant_mp" );
|
|
||||||
register_weaponid( "SVT40_mp" );
|
|
||||||
register_weaponid( "PPS42_mp" );
|
|
||||||
register_weaponid( "ppsh_mp" );
|
|
||||||
register_weaponid( "mosin_nagant_sniper_mp" );
|
|
||||||
register_weaponid( "shotgun_mp" );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
register_weaponid( "frag_grenade_german_mp" );
|
|
||||||
register_weaponid( "smoke_grenade_german_mp" );
|
|
||||||
register_weaponid( "luger_mp" );
|
|
||||||
register_weaponid( "kar98k_mp" );
|
|
||||||
register_weaponid( "g43_mp" );
|
|
||||||
register_weaponid( "mp40_mp" );
|
|
||||||
register_weaponid( "mp44_mp" );
|
|
||||||
register_weaponid( "kar98k_sniper_mp" );
|
|
||||||
register_weaponid( "shotgun_mp" );
|
|
||||||
register_weaponid( "binoculars_mp" );
|
|
||||||
}
|
|
||||||
|
|
||||||
get_weaponid_for_string( weap )
|
|
||||||
{
|
|
||||||
ans = level.bot_weaponids[ weap ];
|
|
||||||
|
|
||||||
if ( !isdefined( ans ) )
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ans;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 "-activate":
|
|
||||||
self activate( false ); // no equal in libcod
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "+activate":
|
|
||||||
self activate( true );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "+smoke":
|
|
||||||
// self throwsmoke( true );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-smoke":
|
|
||||||
// self throwsmoke( false );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "+holdbreath":
|
|
||||||
// self holdbreath( true );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "-holdbreath":
|
|
||||||
// self holdbreath( false );
|
|
||||||
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( get_weaponid_for_string( self getcurrentweapon() ) );
|
|
||||||
|
|
||||||
// self botstop();
|
|
||||||
}
|
|
||||||
|
|
||||||
do_botmovement( forward, right )
|
|
||||||
{
|
|
||||||
// best i can do for libcod...
|
|
||||||
self setwalkdir( "none" );
|
|
||||||
|
|
||||||
if ( forward > 63 )
|
|
||||||
{
|
|
||||||
self setwalkdir( "forward" );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( forward < -63 )
|
|
||||||
{
|
|
||||||
self setwalkdir( "back" );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( right > 63 )
|
|
||||||
{
|
|
||||||
self setwalkdir( "right" );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( right < -63 )
|
|
||||||
{
|
|
||||||
self setwalkdir( "left" );
|
|
||||||
}
|
|
||||||
|
|
||||||
// self botmovement( forward, right );
|
|
||||||
}
|
|
||||||
|
|
||||||
do_isbot()
|
|
||||||
{
|
|
||||||
return false; // no equal in libcod
|
|
||||||
// self isbot();
|
|
||||||
}
|
|
||||||
|
|
||||||
do_botangles( angles )
|
|
||||||
{
|
|
||||||
self setplayerangles( angles );
|
|
||||||
// self botangles( angles[ 0 ], angles[ 1 ], angles[ 2 ] );
|
|
||||||
}
|
|
||||||
|
|
||||||
do_botweapon( weapon )
|
|
||||||
{
|
|
||||||
self switchtoweaponid( get_weaponid_for_string( weapon ) );
|
|
||||||
// self switchtoweapon( weapon );
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
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;
|
||||||
|
level.bot_builtins[ "botangles" ] = ::do_botangles;
|
||||||
|
level.bot_builtins[ "botweapon" ] = ::do_botweapon;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 "-activate":
|
||||||
|
// self activate( false ); // no equal in libcod
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "+activate":
|
||||||
|
// self activate( true );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "+smoke":
|
||||||
|
// self throwsmoke( true );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "-smoke":
|
||||||
|
// self throwsmoke( false );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "+holdbreath":
|
||||||
|
// self holdbreath( true );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "-holdbreath":
|
||||||
|
// self holdbreath( false );
|
||||||
|
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 do_botweapon( self getcurrentweapon() );
|
||||||
|
|
||||||
|
// self botstop();
|
||||||
|
}
|
||||||
|
|
||||||
|
do_botmovement( forward, right )
|
||||||
|
{
|
||||||
|
// best i can do for libcod...
|
||||||
|
self setwalkdir( "none" );
|
||||||
|
|
||||||
|
if ( forward > 63 )
|
||||||
|
{
|
||||||
|
self setwalkdir( "forward" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( forward < -63 )
|
||||||
|
{
|
||||||
|
self setwalkdir( "back" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( right > 63 )
|
||||||
|
{
|
||||||
|
self setwalkdir( "right" );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( right < -63 )
|
||||||
|
{
|
||||||
|
self setwalkdir( "left" );
|
||||||
|
}
|
||||||
|
|
||||||
|
// self botmovement( forward, right );
|
||||||
|
}
|
||||||
|
|
||||||
|
do_isbot()
|
||||||
|
{
|
||||||
|
return self isbot();
|
||||||
|
}
|
||||||
|
|
||||||
|
do_botangles( angles )
|
||||||
|
{
|
||||||
|
self setplayerangles( angles );
|
||||||
|
|
||||||
|
// self botangles( angles[ 0 ], angles[ 1 ], angles[ 2 ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
do_botweapon( weapon )
|
||||||
|
{
|
||||||
|
if ( !isdefined( level.bot_weaponids ) )
|
||||||
|
{
|
||||||
|
level.bot_weaponids = [];
|
||||||
|
|
||||||
|
weaps = getloadedweapons();
|
||||||
|
|
||||||
|
for ( i = 0; i < weaps.size; i++ )
|
||||||
|
{
|
||||||
|
level.bot_weaponids[ weaps[ i ] ] = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self switchtoweaponid( level.bot_weaponids[ weapon ] );
|
||||||
|
|
||||||
|
// self switchtoweapon( weapon );
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user