this script works in mp I remove the dog before he dies to keep the server from crashing . It isn't perfect the dog uses player origins for spawn locations and if the player stays still too long can spawn inside player . spawning by coordinates would be better but I wanted a script that I could use in any map . inspired by an early ver of the fifi script I haven't seen that script lately so don't know how it is now , may be better or worse don't know . the dog makes a bee line for the player works in maps with no pathnodes like the mohaa mp maps . I have a tiki that I use to add the dog sounds look in this forum for the ubersounds work around .
or I can send it to you .
bdbodger@hotmail.com
//////////////////////////////////////////////////////////////////////////
dog_spawn:
wait 30
thread scriptorg
if ($dog1.size < 1)
{
spawn models/animal/german_shepherd "targetname" ("dog1")"type_idle" "dog_idle" "type_attack" "dog_attack"
// Set the AI properties
//switch ((randomint 4)+1)
//{
//case 1:
// $dog1.origin = ( -977.48 -1404.28 -39.99) //place the dog in the correct spot by coordinates
// break
//case 2:
// $dog1.origin = ( -3368.60 -1562.27 -28.57)
// break
//case 3:
// $dog1.origin = ( -2447.87 -471.22 16.13)
// break
//case 4:
// $dog1.origin = ( -1631.67 1408.06 70.65)
// break
//
// }
$dog1.origin =level.dogorigin // replaced dog origin routine for this
$dog1.mindist = 128
$dog1.maxdist = 512
$dog1.leash = 24096
$dog1.fixedleash = 0
$dog1.sight = 1000
$dog1.health = 1000
$dog1.noticescale = 4000
$dog1.enemysharerange = 2048
$dog1.hearing = 4000
//$dog1.enemy = $player
$dog1 immune explosion
$dog1 immune grenade
level.dogalive = 1
$dog1 thread doginit
$dog1 thread dog_death
iprintln "********* acktun H?ir gunt?r hund *********"
}
end
//////////////////////////////////////////////////////////////////////////
doginit:
self forceactivate
wait 5
while ( isalive self )
{
if ( level.dogalive != 1)
break
println ("dog is at " + self.origin + " with thinkstate " + self.thinkstate + " and health " + self.health )
println ("self normal health " + self.normal_health )
switch (self.thinkstate)
{
attack:
waitthread dog_run
break
curious:
waitthread dog_curious
break
pain:
waitthread dog_pain
break
idle:
waitthread dog_idle
break
default:
waitthread dog_idle
break
}
wait 2
}
println "loop broken"
end
////////////////////////////////////////////////////////////////////////////////
dog_pain:
while (self.thinkstate == "pain")
{
println "dog felt pain"
switch (( randomint 3)+1)
{
case 1:
self.blendtime = 0.25
self setmotionanim dog_pain_head
self waittill flaggedanimdone
break
case 2:
self.blendtime = 0.25
self setmotionanim dog_pain_front
self waittill flaggedanimdone
break
case 3:
self.blendtime = 0.25
self setmotionanim dog_pain_back
self waittill flaggedanimdone
break
}
wait .5
}
end
///////////////////////////////////////////////////////////////////////////////////
dog_curious:
while (self.thinkstate == "curious")
{
self setmotionanim dog_stand_curious
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
}
end
//////////////////////////////////////////////////////////////////////////////////
dog_idle:
while (self.thinkstate == "idle")
{
switch ((randomint 10)+1)
{
case 1:
self.blendtime = 0.25
self setmotionanim dog_rest
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_standup
self waittill flaggedanimdone
break
case 2:
self.blendtime = 0.25
self setmotionanim dog_stand_idle
self waittill flaggedanimdone
break
case 3:
self.blendtime = 0.25
self setmotionanim dog_sniff
self waittill flaggedanimdone
break
case 4:
self.blendtime = 0.25
self setmotionanim dog_sniff_turn_left
self waittill flaggedanimdone
break
case 5:
self.blendtime = 0.25
self setmotionanim dog_sniff_turn_right
self waittill flaggedanimdone
break
case 6:
self.blendtime = 0.25
self setmotionanim dog_stand_turn_right
self waittill flaggedanimdone
break
case 7:
self.blendtime = 0.25
self setmotionanim dog_stand_turn_left
self waittill flaggedanimdone
break
case 8:
self.blendtime = 0.25
self setmotionanim dog_walk_bored
self waittill flaggedanimdone
break
case 9:
self.blendtime = 0.25
self setmotionanim dog_walk_turn_right
self waittill flaggedanimdone
break
case 10:
self.blendtime = 0.25
self setmotionanim dog_walk_turn_left
self waittill flaggedanimdone
break
}
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
self.blendtime = 0.25
self setmotionanim dog_bark
self waittill flaggedanimdone
}
end
/////////////////////////////////////////////////////////////////////////
dog_run:
while (self.thinkstate == "attack" )
{
self setmotionanim dog_run
wait .3
if ( self istouching self.enemy )
{
thread dog_bite
break
}
}
end
/////////////////////////////////////////////////////////////////////////////
dog_bite:
switch ((randomint 2)+1)
{
case 1:
self.blendtime = 0.25
self setmotionanim dog_bite_leg
self waittill flaggedanimdone
break
case 2:
self.blendtime = 0.25
self setmotionanim dog_bite_face
self waittill flaggedanimdone
break
}
wait .1
//bite enemy
iprintln "dog is attacking"
//local . dir = $player . origin - self . origin;
local . dir = (self.enemy). origin - self . origin;
self.enemy damage self 15 self (0 0 0) local . dir (0 0 0) 1 9 0 0;// 15 was 75
//}
end
/////////////////////////////////////////////////////////////////////////
dog_death:
while (1)
{
if ( self.normal_health <= 50 ) // have to remove dog before he dies or server crashes
{
iprintln " dog has been killed "
self notsolid
level.dogalive = 0
self setmotionanim dog_death_run
self waittill flaggedanimdone
self delete
break
}
wait .1
}
wait 20
thread dog_spawn
end
///////////////////////////////////////////////////////////////////////////////
//spawn scipt origin
scriptorg:
level.dogorigin = spawn script_origin
while(1)
{
if ( $player.size > 1 )
local.p = randomint (($player.size ) + 1 )
else
local.p = 1
while (local.p == 0)
local.p = randomint (($player.size ) + 1 )
println (" number of players " + $player.size)
println (" random player is player " + local.p)
level.dogorigin.origin = $player[local.p].origin
println ( " origin position is " + (level.dogorigin.origin))
wait 60
}
end