mirror of
				https://github.com/ineedbots/iw4_bot_warfare.git
				synced 2025-10-28 00:26:57 +00:00 
			
		
		
		
	grenade
This commit is contained in:
		| @@ -1905,35 +1905,6 @@ doSemiTime() | ||||
| 	self.bot.semi_time = false; | ||||
| } | ||||
|  | ||||
| /* | ||||
| 	Returns a random grenade in the bot's inventory. | ||||
| */ | ||||
| getValidGrenade() | ||||
| { | ||||
| 	grenadeTypes = []; | ||||
| 	grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "flash_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "semtex_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "throwingknife_mp"; | ||||
| 	 | ||||
| 	possibles = []; | ||||
| 	 | ||||
| 	for(i = 0; i < grenadeTypes.size; i++) | ||||
| 	{ | ||||
| 		if ( !self hasWeapon( grenadeTypes[i] ) ) | ||||
| 			continue; | ||||
| 			 | ||||
| 		if ( !self getAmmoCount( grenadeTypes[i] ) ) | ||||
| 			continue; | ||||
| 			 | ||||
| 		possibles[possibles.size] = grenadeTypes[i]; | ||||
| 	} | ||||
| 	 | ||||
| 	return random(possibles); | ||||
| } | ||||
|  | ||||
| /* | ||||
| 	Returns true if the bot can fire their current weapon. | ||||
| */ | ||||
|   | ||||
| @@ -1427,6 +1427,100 @@ bot_perk_think() | ||||
| 	} | ||||
| } | ||||
|  | ||||
| bot_use_grenade_think() | ||||
| { | ||||
| 	self endon("disconnect"); | ||||
| 	self endon("death"); | ||||
| 	level endon("game_ended"); | ||||
|  | ||||
| 	for (;;) | ||||
| 	{ | ||||
| 		wait randomintRange(2, 4); | ||||
|  | ||||
| 		if (randomInt(100) < 20) | ||||
| 			continue; | ||||
|  | ||||
| 		nade = self getValidGrenade(); | ||||
| 		if (!isDefined(nade)) | ||||
| 			continue; | ||||
|  | ||||
| 		if (self HasThreat() || self HasBotJavelinLocation()) | ||||
| 			continue; | ||||
|  | ||||
| 		if(self BotIsFrozen()) | ||||
| 			continue; | ||||
| 		 | ||||
| 		if(self IsBotReloading() || self IsBotFragging() || self IsBotKnifing()) | ||||
| 			continue; | ||||
| 			 | ||||
| 		if(self isDefusing() || self isPlanting()) | ||||
| 			continue; | ||||
|  | ||||
| 		curWeap = self GetCurrentWeapon(); | ||||
| 		if (!isWeaponPrimary(curWeap) || self.disabledWeapon) | ||||
| 			continue; | ||||
|  | ||||
| 		if (self botIsClimbing()) | ||||
| 			continue; | ||||
|  | ||||
| 		if (self IsUsingRemote()) | ||||
| 			continue; | ||||
|  | ||||
| 		nadeWp = undefined; | ||||
|  | ||||
| 		for (i = 0; i < level.waypointsGren.size; i++) | ||||
| 		{ | ||||
| 			if (Distance(self.origin, level.waypointsGren[i].origin) > 1024) | ||||
| 				continue; | ||||
|  | ||||
| 			if (isDefined(nadeWp) && closer(self.origin, nadeWp.origin, level.waypointsGren[i].origin)) | ||||
| 				continue; | ||||
|  | ||||
| 			nadeWp = level.waypointsGren[i]; | ||||
| 		} | ||||
| 		 | ||||
| 		loc = undefined; | ||||
| 		myEye = self GetEye(); | ||||
| 		if (!isDefined(nadeWp) || self HasScriptGoal() || self.bot_lock_goal) | ||||
| 		{ | ||||
| 			traceForward = BulletTrace(myEye, myEye + AnglesToForward(self GetPlayerAngles()) * 900, false, self); | ||||
|  | ||||
| 			loc = traceForward["position"]; | ||||
| 			dist = DistanceSquared(self.origin, loc); | ||||
| 			if (dist < level.bots_minGrenadeDistance || dist > level.bots_maxGrenadeDistance) | ||||
| 				continue; | ||||
|  | ||||
| 			if (!bulletTracePassed(self.origin + (0, 0, 5), self.origin + (0, 0, 2048), false, self)) | ||||
| 				continue; | ||||
|  | ||||
| 			if (!bulletTracePassed(loc + (0, 0, 5), loc + (0, 0, 2048), false, self)) | ||||
| 				continue; | ||||
|  | ||||
| 			loc += (0, 0, dist/3000); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			loc = nadeWp.origin + AnglesToForward(nadeWp.angles) * 2048; | ||||
| 			 | ||||
| 			self SetScriptGoal(nadeWp.origin, 16); | ||||
|  | ||||
| 			ret = self waittill_any_return("new_goal", "goal", "bad_path"); | ||||
|  | ||||
| 			if (ret != "new_goal") | ||||
| 				self ClearScriptGoal(); | ||||
|  | ||||
| 			if (ret != "goal") | ||||
| 				continue; | ||||
| 		} | ||||
|  | ||||
| 		self SetScriptAimPos(loc); | ||||
|  | ||||
| 		self throwBotGrenade(nade); | ||||
|  | ||||
| 		self ClearScriptAimPos(loc); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| bot_jav_loc_think() | ||||
| { | ||||
| 	self endon("disconnect"); | ||||
|   | ||||
| @@ -41,6 +41,35 @@ BotPressAttack(time) | ||||
| 	self maps\mp\bots\_bot_internal::pressFire(time); | ||||
| } | ||||
|  | ||||
| /* | ||||
| 	Returns a random grenade in the bot's inventory. | ||||
| */ | ||||
| getValidGrenade() | ||||
| { | ||||
| 	grenadeTypes = []; | ||||
| 	grenadeTypes[grenadeTypes.size] = "frag_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "flash_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "semtex_mp"; | ||||
| 	grenadeTypes[grenadeTypes.size] = "throwingknife_mp"; | ||||
| 	 | ||||
| 	possibles = []; | ||||
| 	 | ||||
| 	for(i = 0; i < grenadeTypes.size; i++) | ||||
| 	{ | ||||
| 		if ( !self hasWeapon( grenadeTypes[i] ) ) | ||||
| 			continue; | ||||
| 			 | ||||
| 		if ( !self getAmmoCount( grenadeTypes[i] ) ) | ||||
| 			continue; | ||||
| 			 | ||||
| 		possibles[possibles.size] = grenadeTypes[i]; | ||||
| 	} | ||||
| 	 | ||||
| 	return random(possibles); | ||||
| } | ||||
|  | ||||
| throwBotGrenade(gname) | ||||
| { | ||||
| 	return self maps\mp\bots\_bot_internal::botThrowGrenade(gname); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user