PDA

View Full Version : Kill/Shoot Bot



thOuMta
17th July 2013, 16:54
Hey,

Can you explain me how i can kill/shoot the bot plz ?
344

Thx :)

kung foo man
17th July 2013, 17:49
In my extension is the setAlive-function, or you could make some "fake detection". The extension is just another thing which doesn't work on Windows. :D

http://killtube.org/showthread.php?1088-Files-for-extended-Server-Random-Scripts-like-sliding-mapvote-on-Deathrun&highlight=setalive

thOuMta
17th July 2013, 18:02
Hmmm ok :/

kung foo man
17th July 2013, 18:23
Well, you can also do it like all the other bot-mods, just spawning 32 hurt-trigger and link them to the xmodels

RobsoN
27th July 2013, 22:11
Use BulletTrace function?

thOuMta
27th July 2013, 23:36
I show this script by BraX on modonline:



damageModel()
{
bullet = spawn( "script_model", self.origin );
bullet setModel( "xmodel/tombstone1" );
bullet.angles = ( 0, 0, 0 );

bullet setCanDamage(1); // turn damage monitor on
bullet setContents(1); // bullet will collide with model
bullet.health = 1000;

while( bullet.health > 0 )
{
// wait for damage...
bullet waittill("dmg", dmg, who, weap, point, mod);
bullet.health -= dmg;

iPrintln("dmg:" + dmg + "; who:" + who.name + "; mod:" + mod);
}
}

setCanDamage( flag )
{
if( !isDefined( self.bashradius ) )
self.bashradius = 32;

if( !flag )
{
self notify("kill_damagemonitor");
return;
}
else
self thread setCanDamage2();
}


setCanDamage2()
{
self endon("kill_damagemonitor");

trace = undefined;

while( 1 )
{

players = getEntArray( "player", "classname" );
for( i = 0; i < players.size; i++ )
{
p = players[i];

if( !isDefined( p.bash_delay ) )
p.bash_delay = false;

forward = vectorscale( anglesToForward(p getPlayerAngles()), 10000 );
startOrigin = p getEye() + (0,0,20);
endOrigin = startOrigin + forward;

trace = bulletTrace( startOrigin, endOrigin, true, p );
distance = distance ( self.origin, p.origin ) ;

wait 0.05;

if( isDefined( trace["entity"] ) && trace["entity"] == self )
{
if( p attackButtonPressed() && isWeapon( p getCurrentWeapon() ) && p getWeaponSlotClipAmmo(p getCurrentSlot()) > 0)
{
weap = p getCurrentWeapon();
dmg = getDamage( weap );
who = p;
point = trace["position"];
mod = damageMod( weap );

self notify("dmg", dmg, who, weap, point, mod);
}
if ( p meleeButtonPressed() && !p.bash_delay && distance( p.origin, self.origin ) < self.bashradius )
{
p thread bash_delay( 0.6 );
weap = p getCurrentWeapon();
dmg = getDamage( weap );
who = p;
point = trace["position"];
mod = "MOD_MELEE";

self notify("dmg", dmg, who, weap, point, mod);
}

}

}
wait 0.05;
}
}

bash_delay( time )
{
self endon("disconnected");
self.bash_delay = true;
wait time;
self.bash_delay = false;
}

getDamage(weapon)
{
switch(weapon)
{
case "springfield_mp":
return 50;
case "enfield_scope_mp":
return 50;
case "mosin_nagant_sniper_mp":
return 50;
case "kar98k_sniper_mp":
return 50;
case "mosin_nagant_mp":
return 50;
case "kar98k_mp":
return 50;
case "m1carbine_mp":
return 38;
case "m1garand_mp":
return 38;
case "enfield_mp":
return 50;
case "SVT40_mp":
return 38;
case "g43_mp":
return 38;
case "bar_mp":
return 40;
case "bren_mp":
return 40;
case "mp44_mp":
return 40;
case "thompson_mp":
return 35;
case "sten_mp":
return 33;
case "greasegun_mp":
return 34;
case "mp40_mp":
return 36;
case "ppsh_mp":
return 30;
case "PPS42_mp":
return 40;
case "shotgun_mp":
return 40;
case "panzerschreck_mp":
return 400;
case "TT30_mp":
return 20;
case "webley_mp":
return 20;
case "colt_mp":
return 20;
case "luger_mp":
return 20;
default:
return 70;
}
}

damageMod(weapon)
{
switch(weapon)
{
case "springfield_mp":
case "enfield_scope_mp":
case "mosin_nagant_sniper_mp":
case "kar98k_sniper_mp":
case "mosin_nagant_mp":
case "kar98k_mp":
case "enfield_mp":
return "MOD_RIFLE_BULLET";

case "m1carbine_mp":
case "m1garand_mp":
case "SVT40_mp":
case "g43_mp":
case "bar_mp":
case "bren_mp":
case "mp44_mp":
case "thompson_mp":
case "sten_mp":
case "greasegun_mp":
case "mp40_mp":
case "ppsh_mp":
case "PPS42_mp":
case "shotgun_mp":
return "MOD_RIFLE_BULLET";

case "TT30_mp":
case "webley_mp":
case "colt_mp":
case "luger_mp":
return "MOD_PISTOL_BULLET";

case "panzerschreck_mp":
case "panzerfaust_mp":
return"MOD_PROJECTILE";

default:
return "MOD_UNKNOWN";
}
}


But don't work.
It made some errors..

Tally
28th July 2013, 00:05
I show this script by BraX on modonline:



damageModel()
{
bullet = spawn( "script_model", self.origin );
bullet setModel( "xmodel/tombstone1" );
bullet.angles = ( 0, 0, 0 );

bullet setCanDamage(1); // turn damage monitor on
bullet setContents(1); // bullet will collide with model
bullet.health = 1000;

while( bullet.health > 0 )
{
// wait for damage...
bullet waittill("dmg", dmg, who, weap, point, mod);
bullet.health -= dmg;

iPrintln("dmg:" + dmg + "; who:" + who.name + "; mod:" + mod);
}
}

setCanDamage( flag )
{
if( !isDefined( self.bashradius ) )
self.bashradius = 32;

if( !flag )
{
self notify("kill_damagemonitor");
return;
}
else
self thread setCanDamage2();
}


setCanDamage2()
{
self endon("kill_damagemonitor");

trace = undefined;

while( 1 )
{

players = getEntArray( "player", "classname" );
for( i = 0; i < players.size; i++ )
{
p = players[i];

if( !isDefined( p.bash_delay ) )
p.bash_delay = false;

forward = vectorscale( anglesToForward(p getPlayerAngles()), 10000 );
startOrigin = p getEye() + (0,0,20);
endOrigin = startOrigin + forward;

trace = bulletTrace( startOrigin, endOrigin, true, p );
distance = distance ( self.origin, p.origin ) ;

wait 0.05;

if( isDefined( trace["entity"] ) && trace["entity"] == self )
{
if( p attackButtonPressed() && isWeapon( p getCurrentWeapon() ) && p getWeaponSlotClipAmmo(p getCurrentSlot()) > 0)
{
weap = p getCurrentWeapon();
dmg = getDamage( weap );
who = p;
point = trace["position"];
mod = damageMod( weap );

self notify("dmg", dmg, who, weap, point, mod);
}
if ( p meleeButtonPressed() && !p.bash_delay && distance( p.origin, self.origin ) < self.bashradius )
{
p thread bash_delay( 0.6 );
weap = p getCurrentWeapon();
dmg = getDamage( weap );
who = p;
point = trace["position"];
mod = "MOD_MELEE";

self notify("dmg", dmg, who, weap, point, mod);
}

}

}
wait 0.05;
}
}

bash_delay( time )
{
self endon("disconnected");
self.bash_delay = true;
wait time;
self.bash_delay = false;
}

getDamage(weapon)
{
switch(weapon)
{
case "springfield_mp":
return 50;
case "enfield_scope_mp":
return 50;
case "mosin_nagant_sniper_mp":
return 50;
case "kar98k_sniper_mp":
return 50;
case "mosin_nagant_mp":
return 50;
case "kar98k_mp":
return 50;
case "m1carbine_mp":
return 38;
case "m1garand_mp":
return 38;
case "enfield_mp":
return 50;
case "SVT40_mp":
return 38;
case "g43_mp":
return 38;
case "bar_mp":
return 40;
case "bren_mp":
return 40;
case "mp44_mp":
return 40;
case "thompson_mp":
return 35;
case "sten_mp":
return 33;
case "greasegun_mp":
return 34;
case "mp40_mp":
return 36;
case "ppsh_mp":
return 30;
case "PPS42_mp":
return 40;
case "shotgun_mp":
return 40;
case "panzerschreck_mp":
return 400;
case "TT30_mp":
return 20;
case "webley_mp":
return 20;
case "colt_mp":
return 20;
case "luger_mp":
return 20;
default:
return 70;
}
}

damageMod(weapon)
{
switch(weapon)
{
case "springfield_mp":
case "enfield_scope_mp":
case "mosin_nagant_sniper_mp":
case "kar98k_sniper_mp":
case "mosin_nagant_mp":
case "kar98k_mp":
case "enfield_mp":
return "MOD_RIFLE_BULLET";

case "m1carbine_mp":
case "m1garand_mp":
case "SVT40_mp":
case "g43_mp":
case "bar_mp":
case "bren_mp":
case "mp44_mp":
case "thompson_mp":
case "sten_mp":
case "greasegun_mp":
case "mp40_mp":
case "ppsh_mp":
case "PPS42_mp":
case "shotgun_mp":
return "MOD_RIFLE_BULLET";

case "TT30_mp":
case "webley_mp":
case "colt_mp":
case "luger_mp":
return "MOD_PISTOL_BULLET";

case "panzerschreck_mp":
case "panzerfaust_mp":
return"MOD_PROJECTILE";

default:
return "MOD_UNKNOWN";
}
}


But don't work.
It made some errors..

setContents() doesn't work with a model unless it is compiled with high collision. However, if you spawn a trigger_radius at the same origin as the bot/model, and setContents() to 1 for the trigger, it will take damage:


SetUp()
{

//--- This is the only way to get an entity to take damage ---
self.model_damage = spawn( "trigger_radius", bot.origin, 0, 50, 50 );
self.model_damage.health = self.health;
self.model_damage.maxhealth = self.maxhealth;
self.model_damage thread modelDamage( bot );
self.model_damage thread MonitorForDamage();

}

modelDamage( bot )
{
self endon( "death" );

self setContents( 1 );

while( isDefined( self ) )
{
self waittill( "dmg", dmg );

self.health -= dmg;
bot.health -= dmg;

if( self.health < 10 )
{
bot.health -= dmg;

if( bot.health < 3 )
{
bot suicide();

if( isdefined( self ) )
{
self setContents( 0 );
self delete();
}
}
}
}
}

MonitorForDamage()
{
self endon( "death" );

while( isDefined( self ) )
{
players = getEntArray( "player", "classname" );
for( i = 0; i < players.size; i++ )
{
player = players[i];

forward = maps\mp\_utility::vector_scale( anglesToForward( player getPlayerAngles() ), 10000 );
startOrigin = player getEye() + (0,0,20);
endOrigin = startOrigin + forward;
trace = bulletTrace( startOrigin, endOrigin, true, player );

wait( 0.05 );

if( isDefined( trace["entity"] ) && trace["entity"] == self )
{
if( player attackButtonPressed() && player getAmmoCount( player getCurrentWeapon() ) > 0 )
{
iDamage = player getDamageAmount();
iDamage = int( iDamage );
player iprintln( "Damage: " + iDamage );

self notify( "dmg", iDamage );
}
}
}

wait (0.05);
}
}

getDamageAmount()
{
amount = undefined;
if( maps\mp\gametypes\_weapons::isPrimaryWeapon( self getCurrentWeapon() ) )
amount = 20;

if( maps\mp\gametypes\_weapons::isPistol( self getCurrentWeapon() ) )
amount = 10;

return amount;
}

thOuMta
28th July 2013, 12:08
Its made error:



unknown function: (file 'thoumta/thoumta.gsc', line 208)
if( maps\mp\gametypes\_weapons::isPrimaryWeapon(self getCurrentWeapon()))

kung foo man
28th July 2013, 12:14
Just write this function into thoumta.gsc:



vector_scale(vector, scale)
{
x = vector[0] * scale;
y = vector[1] * scale;
z = vector[2] * scale;
return (x, y, z);
}


And remove in front of the call: maps\mp\_utility::

thOuMta
28th July 2013, 12:16
Ah sorry i edited my post, because it was vector_scale() and it need vectorscale()