<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hard-light.org/index.php?action=history&amp;feed=atom&amp;title=Script_-_Bitching_Betty</id>
	<title>Script - Bitching Betty - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hard-light.org/index.php?action=history&amp;feed=atom&amp;title=Script_-_Bitching_Betty"/>
	<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Script_-_Bitching_Betty&amp;action=history"/>
	<updated>2026-11-15T11:54:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.hard-light.org/index.php?title=Script_-_Bitching_Betty&amp;diff=34300&amp;oldid=prev</id>
		<title>The E: This might be of interest to some.</title>
		<link rel="alternate" type="text/html" href="https://wiki.hard-light.org/index.php?title=Script_-_Bitching_Betty&amp;diff=34300&amp;oldid=prev"/>
		<updated>2011-04-16T16:26:36Z</updated>

		<summary type="html">&lt;p&gt;This might be of interest to some.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This script is intended to emulate the &amp;quot;bitching Betty&amp;quot; mechanisms found on modern jet fighters and airliners. These are designed to play audio warnings whenever something requiring pilot attention comes up. This script was originally written for [[Blue Planet|Blue Planet: War In Heaven]].&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
&lt;br /&gt;
Once gameplay starts, the script does its initialization. It scans the player ship for commonly used subsystem names, and starts to monitor ship status. As soon as one of the predefined triggers is hit, a message will be added to a message queue, which will then be processed with a definable gap between each message.&lt;br /&gt;
This script relies on voice-acted audio cues that are defined in the mods&amp;#039; sounds.tbl, like so:&lt;br /&gt;
&amp;lt;pre&amp;gt;; Bitching Betty&lt;br /&gt;
$Name:	500	bettycomms.ogg,				0, 1.0, 0&lt;br /&gt;
$Name:	501	bettyengine.ogg,			0, 1.0, 0&lt;br /&gt;
$Name:	502	bettynav.ogg,				0, 1.0, 0&lt;br /&gt;
$Name:	503	bettysensors.ogg,			0, 1.0, 0&lt;br /&gt;
$Name:	504	bettyweapons.ogg,			0, 1.0, 0&lt;br /&gt;
$Name:	505	bettyhull.ogg,				0, 1.0, 0&lt;br /&gt;
$Name:	506	bettyeject.ogg,				0, 1.0, 0&lt;br /&gt;
$Name:	507	bettyprimaryammo1.ogg,		0, 1.0, 0&lt;br /&gt;
$Name:	508	bettyprimaryammo2.ogg,		0, 1.0, 0&lt;br /&gt;
$Name:	509	bettyprimaryammo3.ogg,		0, 1.0, 0&lt;br /&gt;
$Name:	510	bettysecondaryammo1.ogg,	0, 1.0, 0&lt;br /&gt;
$Name:	511	bettysecondaryammo2.ogg,	0, 0.50, 0&lt;br /&gt;
$Name:	512	bettysecondaryammo3.ogg,	0, 0.50, 0&lt;br /&gt;
$Name:	513	bettysecondaryammo4.ogg,	0, 0.50, 0&lt;br /&gt;
$Name:	514	bettysecondaryempty1.ogg,	0, 1.0, 0&lt;br /&gt;
$Name:	515	bettysecondaryempty2.ogg,	0, 0.50, 0&lt;br /&gt;
$Name:	516	bettysecondaryempty3.ogg,	0, 0.50, 0&lt;br /&gt;
$Name:	517	bettysecondaryempty4.ogg,	0, 1.0, 0&lt;br /&gt;
$Name:	518	bettyprimaryempty1.ogg,		0, 0.50, 0&lt;br /&gt;
$Name:	519	bettyprimaryempty2.ogg,		0, 0.50, 0&lt;br /&gt;
$Name:	520	bettyprimaryempty3.ogg,		0, 0.50, 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The sound indices are hardcoded in the script, and need to match up with the sounds.tbl indices.&lt;br /&gt;
&lt;br /&gt;
==Things you should be aware of==&lt;br /&gt;
&lt;br /&gt;
*This script can be disabled at runtime by setting the lua variable &amp;quot;BettyOverride&amp;quot; to true. This can be done via the script-eval sexp, or from within another script.&lt;br /&gt;
*In BP:WiH, this script is only enabled for UEF fighters. The relevant checks have been commented out here; look at the part of the script running in the $On Frame: hook for details.&lt;br /&gt;
&lt;br /&gt;
==Table entry==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;;The bitching betty script. Monitors subsystem health status, and queues up audio warnings from sounds.tbl to blast at the player.&lt;br /&gt;
&lt;br /&gt;
#Conditional Hooks&lt;br /&gt;
&lt;br /&gt;
$Application: FS2_Open&lt;br /&gt;
&lt;br /&gt;
$State: GS_STATE_GAME_PLAY&lt;br /&gt;
&lt;br /&gt;
$On State Start:&lt;br /&gt;
[&lt;br /&gt;
function initbetty()&lt;br /&gt;
	if not bettyinited then&lt;br /&gt;
		betty = {}&lt;br /&gt;
		if not betty.plr then &lt;br /&gt;
			betty.plr = hv.Player &lt;br /&gt;
			if betty.plr:isValid() then&lt;br /&gt;
				betty.plrship = mn.getObjectFromSignature(betty.plr:getSignature())&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if betty.plrship:isValid() then&lt;br /&gt;
			betty.subsystems = {}&lt;br /&gt;
			betty.subsystems.comms = false&lt;br /&gt;
			betty.subsystems.engine = false&lt;br /&gt;
			betty.subsystems.engine01 = false&lt;br /&gt;
			betty.subsystems.engine02 = false&lt;br /&gt;
			betty.subsystems.engine03 = false&lt;br /&gt;
			betty.subsystems.engine04 = false&lt;br /&gt;
			betty.subsystems.nav = false&lt;br /&gt;
			betty.subsystems.sensors = false&lt;br /&gt;
			betty.subsystems.weapons = false&lt;br /&gt;
			betty.status = {}&lt;br /&gt;
			betty.status.secondarywarned = {false, false, false, false}&lt;br /&gt;
			betty.status.secondaryemptywarned = {false, false, false, false}&lt;br /&gt;
			betty.status.primarywarned = {}&lt;br /&gt;
			betty.status.primarywarned = {false, false, false}&lt;br /&gt;
			betty.status.primaryemptywarned = {}&lt;br /&gt;
			betty.status.primaryemptywarned = {false, false, false}&lt;br /&gt;
			betty.queue = {}&lt;br /&gt;
			betty.queueprocessdelay = 2 --Minimum delay for queue processing&lt;br /&gt;
			betty.comms =			500 --see sounds.tbl&lt;br /&gt;
			betty.engine =			501&lt;br /&gt;
			betty.nav = 			502&lt;br /&gt;
			betty.sensors = 		503&lt;br /&gt;
			betty.weapons = 		504&lt;br /&gt;
			betty.hull = 			505&lt;br /&gt;
			betty.eject = 			506&lt;br /&gt;
			betty.primary = {}&lt;br /&gt;
			betty.primary[1] =		507&lt;br /&gt;
			betty.primary[2] =		508&lt;br /&gt;
			betty.primary[3] =		509&lt;br /&gt;
			betty.secondary = {}&lt;br /&gt;
			betty.secondary[1] = 	510&lt;br /&gt;
			betty.secondary[2] = 	511&lt;br /&gt;
			betty.secondary[3] = 	512&lt;br /&gt;
			betty.secondary[4] = 	513&lt;br /&gt;
			betty.secondaryempty = {}&lt;br /&gt;
			betty.secondaryempty[1] = 514&lt;br /&gt;
			betty.secondaryempty[2] = 515&lt;br /&gt;
			betty.secondaryempty[3] = 516&lt;br /&gt;
			betty.secondaryempty[4] = 517&lt;br /&gt;
			betty.primaryempty = {}&lt;br /&gt;
			betty.primaryempty[1] = 518&lt;br /&gt;
			betty.primaryempty[2] = 519&lt;br /&gt;
			betty.primaryempty[3] = 520&lt;br /&gt;
			betty.subspace = 		521&lt;br /&gt;
			if not betty.subsystems.comms then&lt;br /&gt;
				if betty.plrship[&amp;quot;communications&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.comms = betty.plrship[&amp;quot;communications&amp;quot;]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.engine then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine = betty.plrship[&amp;quot;engine&amp;quot;]&lt;br /&gt;
					betty.enginenum = 0&lt;br /&gt;
				end&lt;br /&gt;
				if betty.plrship[&amp;quot;engines&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine = betty.plrship[&amp;quot;engines&amp;quot;]&lt;br /&gt;
					betty.enginenum = 0&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.engine01 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine01&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine01 = betty.plrship[&amp;quot;engine01&amp;quot;]&lt;br /&gt;
					betty.enginenum = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not betty.subsystems.engine02 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine02&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine02 = betty.plrship[&amp;quot;engine02&amp;quot;]&lt;br /&gt;
					betty.enginenum = 2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not betty.subsystems.engine03 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine03&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine03 = betty.plrship[&amp;quot;engine03&amp;quot;]&lt;br /&gt;
					betty.enginenum = 3&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.engine04 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine04&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine04 = betty.plrship[&amp;quot;engine04&amp;quot;]&lt;br /&gt;
					betty.enginenum = 4&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not betty.subsystems.engine01 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine01a&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine01 = betty.plrship[&amp;quot;engine01a&amp;quot;]&lt;br /&gt;
					betty.enginenum = 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not betty.subsystems.engine02 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine02a&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine02 = betty.plrship[&amp;quot;engine02a&amp;quot;]&lt;br /&gt;
					betty.enginenum = 2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if not betty.subsystems.engine03 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine03a&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine03 = betty.plrship[&amp;quot;engine03a&amp;quot;]&lt;br /&gt;
					betty.enginenum = 3&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.engine04 then&lt;br /&gt;
				if betty.plrship[&amp;quot;engine04a&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.engine04 = betty.plrship[&amp;quot;engine04a&amp;quot;]&lt;br /&gt;
					betty.enginenum = 4&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.nav then &lt;br /&gt;
				if betty.plrship[&amp;quot;navigation&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.nav = betty.plrship[&amp;quot;navigation&amp;quot;]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.sensors then &lt;br /&gt;
				if betty.plrship[&amp;quot;sensors&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.sensors = betty.plrship[&amp;quot;sensors&amp;quot;]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			if not betty.subsystems.weapons then &lt;br /&gt;
				if betty.plrship[&amp;quot;weapons&amp;quot;]:isValid() then&lt;br /&gt;
					betty.subsystems.weapons = betty.plrship[&amp;quot;weapons&amp;quot;]&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
				&lt;br /&gt;
			betty.queue.timestamp = 0&lt;br /&gt;
			bettyinited = true&lt;br /&gt;
			getenginemaxhealth()&lt;br /&gt;
		else&lt;br /&gt;
			bettyinited = false&lt;br /&gt;
			BettyOverride = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function getenginemaxhealth()&lt;br /&gt;
	if betty.enginenum == 0 then&lt;br /&gt;
		betty.enginemaxhealth = betty.subsystems.engine.HitpointsMax&lt;br /&gt;
	elseif betty.enginenum == 1 then&lt;br /&gt;
		betty.enginemaxhealth = betty.subsystems.engine01.HitpointsMax&lt;br /&gt;
	elseif betty.enginenum == 2 then&lt;br /&gt;
		betty.enginemaxhealth = betty.subsystems.engine01.HitpointsMax + betty.subsystems.engine02.HitpointsMax&lt;br /&gt;
	elseif betty.enginenum == 3 then&lt;br /&gt;
		betty.enginemaxhealth = betty.subsystems.engine01.HitpointsMax + betty.subsystems.engine02.HitpointsMax + betty.subsystems.engine03.HitpointsMax&lt;br /&gt;
	elseif betty.enginenum == 4 then&lt;br /&gt;
		betty.enginemaxhealth = betty.subsystems.engine01.HitpointsMax + betty.subsystems.engine02.HitpointsMax + betty.subsystems.engine03.HitpointsMax + betty.subsystems.engine04.HitpointsMax&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function getenginehealth()&lt;br /&gt;
	if betty.enginenum == 0 then&lt;br /&gt;
		betty.enginehealth = (betty.subsystems.engine.HitpointsLeft) / betty.enginemaxhealth&lt;br /&gt;
	elseif betty.enginenum == 1 then&lt;br /&gt;
		betty.enginehealth = (betty.subsystems.engine01.HitpointsLeft) / betty.enginemaxhealth&lt;br /&gt;
	elseif betty.enginenum == 2 then&lt;br /&gt;
		betty.enginehealth = (betty.subsystems.engine01.HitpointsLeft + betty.subsystems.engine02.HitpointsLeft) / betty.enginemaxhealth&lt;br /&gt;
	elseif betty.enginenum == 3 then&lt;br /&gt;
		betty.enginehealth = (betty.subsystems.engine01.HitpointsLeft + betty.subsystems.engine02.HitpointsLeft + betty.subsystems.engine03.HitpointsLeft) / betty.enginemaxhealth&lt;br /&gt;
	elseif betty.enginenum == 4 then&lt;br /&gt;
		betty.enginehealth = (betty.subsystems.engine01.HitpointsLeft + betty.subsystems.engine02.HitpointsLeft + betty.subsystems.engine03.HitpointsLeft + betty.subsystems.engine04.HitpointsLeft) / betty.enginemaxhealth&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
function queueWarning(warning)&lt;br /&gt;
	local i = 1&lt;br /&gt;
	queued = false&lt;br /&gt;
	while not queued do&lt;br /&gt;
		if betty.queue[i] == nil then&lt;br /&gt;
			betty.queue[i] = warning&lt;br /&gt;
			queued = true&lt;br /&gt;
		else&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function processQueue()&lt;br /&gt;
	local mtime = mn.getMissionTime()&lt;br /&gt;
	&lt;br /&gt;
	if mtime ~= 0 then&lt;br /&gt;
		if (mtime - betty.queue.timestamp) &amp;gt; betty.queueprocessdelay then&lt;br /&gt;
			if betty.queue[1] ~= nil then&lt;br /&gt;
				ad.playGameSound(betty.queue[1], 0, 100, 0)&lt;br /&gt;
				&lt;br /&gt;
				local i = 1&lt;br /&gt;
		&lt;br /&gt;
				local processed = false&lt;br /&gt;
				while not processed do&lt;br /&gt;
					if betty.queue[i + 1] ~= nil then&lt;br /&gt;
						betty.queue[i] = betty.queue[i + 1]&lt;br /&gt;
						i = i + 1&lt;br /&gt;
					else&lt;br /&gt;
						betty.queue[i] = nil&lt;br /&gt;
						processed = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
	&lt;br /&gt;
				betty.queue.timestamp = mtime&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function printQueue()&lt;br /&gt;
	local i = 1&lt;br /&gt;
	if betty.queue[1] ~= nil then&lt;br /&gt;
		while betty.queue[i] ~= nil do&lt;br /&gt;
			ba.print(&amp;quot;BETTY DEBUG Item: &amp;quot; .. i .. &amp;quot;: &amp;quot; .. betty.queue[i] .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
			i = i + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function processTriggers()&lt;br /&gt;
	if betty.subsystems.comms then&lt;br /&gt;
		if betty.subsystems.comms.HitpointsLeft/betty.subsystems.comms.HitpointsMax &amp;lt; 0.01 and not betty.status.commwarned then&lt;br /&gt;
			queueWarning(betty.comms)&lt;br /&gt;
			betty.status.commwarned = true&lt;br /&gt;
		elseif betty.subsystems.comms.HitpointsLeft/betty.subsystems.comms.HitpointsMax &amp;gt; 0.1 then&lt;br /&gt;
			betty.status.commwarned = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	getenginehealth()&lt;br /&gt;
&lt;br /&gt;
	if betty.enginehealth &amp;lt; 0.01 and not betty.status.enginewarned then&lt;br /&gt;
		queueWarning(betty.engine)&lt;br /&gt;
		betty.status.enginewarned = true&lt;br /&gt;
	elseif betty.enginehealth &amp;gt; 0.1 then&lt;br /&gt;
		betty.status.enginewarned = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if betty.subsystems.nav then&lt;br /&gt;
		if betty.subsystems.nav.HitpointsLeft/betty.subsystems.nav.HitpointsMax &amp;lt; 0.01 and not betty.status.navwarned then&lt;br /&gt;
			queueWarning(betty.nav)&lt;br /&gt;
			betty.status.navwarned = true&lt;br /&gt;
		elseif betty.subsystems.nav.HitpointsLeft/betty.subsystems.nav.HitpointsMax &amp;gt; 0.1 then&lt;br /&gt;
			betty.status.navwarned = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if betty.subsystems.sensors then&lt;br /&gt;
		if betty.subsystems.sensors.HitpointsLeft/betty.subsystems.sensors.HitpointsMax &amp;lt; 0.01 and not betty.status.sensorswarned then&lt;br /&gt;
			queueWarning(betty.sensors)&lt;br /&gt;
			betty.status.sensorswarned = true&lt;br /&gt;
		elseif betty.subsystems.sensors.HitpointsLeft/betty.subsystems.sensors.HitpointsMax &amp;gt; 0.1 then&lt;br /&gt;
			betty.status.sensorswarned = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if betty.subsystems.weapons then&lt;br /&gt;
		if betty.subsystems.weapons.HitpointsLeft/betty.subsystems.weapons.HitpointsMax &amp;lt; 0.01 and not betty.status.weaponswarned then&lt;br /&gt;
			queueWarning(betty.weapons)&lt;br /&gt;
			betty.status.weaponswarned = true&lt;br /&gt;
		elseif betty.subsystems.weapons.HitpointsLeft/betty.subsystems.weapons.HitpointsMax &amp;gt; 0.1 then&lt;br /&gt;
			betty.status.weaponswarned = false&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if betty.plrship.HitpointsLeft/betty.plrship.HitpointsMax &amp;lt; 0.41 and not betty.status.hullwarned then&lt;br /&gt;
		queueWarning(betty.hull)&lt;br /&gt;
		betty.status.hullwarned = true&lt;br /&gt;
	elseif betty.plrship.HitpointsLeft/betty.plrship.HitpointsMax &amp;gt; 0.41 then&lt;br /&gt;
		betty.status.hullwarned = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if betty.plrship.HitpointsLeft/betty.plrship.HitpointsMax &amp;lt; 0.1 and not betty.status.ejectwarned then&lt;br /&gt;
		queueWarning(betty.eject)&lt;br /&gt;
		betty.status.ejectwarned = true&lt;br /&gt;
	elseif betty.plrship.HitpointsLeft/betty.plrship.HitpointsMax &amp;gt; 0.1 then&lt;br /&gt;
		betty.status.ejectwarned = false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i = 1, 3, 1 do&lt;br /&gt;
		if betty.plrship.PrimaryBanks[i]:isValid() then&lt;br /&gt;
			if betty.plrship.PrimaryBanks[i].WeaponClass.Name == &amp;quot;Gattler&amp;quot; or betty.plrship.PrimaryBanks[i].WeaponClass.Name == &amp;quot;Archer&amp;quot; or betty.plrship.PrimaryBanks[i].WeaponClass.Name == &amp;quot;UX Accelerator&amp;quot; or betty.plrship.PrimaryBanks[i].WeaponClass.Name == &amp;quot;Redeemer&amp;quot; or betty.plrship.PrimaryBanks[i].WeaponClass.Name == &amp;quot;Vajra&amp;quot; then&lt;br /&gt;
				if betty.plrship.PrimaryBanks[i].AmmoLeft/betty.plrship.PrimaryBanks[i].AmmoMax &amp;lt; 0.26 and not betty.status.primarywarned[i] then&lt;br /&gt;
					queueWarning(betty.primary[i])&lt;br /&gt;
					betty.status.primarywarned[i] = true&lt;br /&gt;
				elseif betty.plrship.PrimaryBanks[i].AmmoLeft/betty.plrship.PrimaryBanks[i].AmmoMax &amp;gt; 0.27 then&lt;br /&gt;
					betty.status.primarywarned[i] = false&lt;br /&gt;
				end&lt;br /&gt;
				&lt;br /&gt;
				if betty.plrship.PrimaryBanks[i].AmmoLeft == 0 and not betty.status.primaryemptywarned[i] then&lt;br /&gt;
					queueWarning(betty.primaryempty[i])&lt;br /&gt;
					betty.status.primaryemptywarned[i] = true&lt;br /&gt;
				elseif betty.plrship.PrimaryBanks[i].AmmoLeft &amp;gt; 0 then&lt;br /&gt;
					betty.status.primaryemptywarned[i] = false&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i = 1, 4, 1 do&lt;br /&gt;
		if betty.plrship.SecondaryBanks[i]:isValid() then&lt;br /&gt;
			if betty.plrship.SecondaryBanks[i].AmmoLeft/betty.plrship.SecondaryBanks[i].AmmoMax &amp;lt; 0.26 and not betty.status.secondarywarned[i] then&lt;br /&gt;
				queueWarning(betty.secondary[i])&lt;br /&gt;
				betty.status.secondarywarned[i] = true&lt;br /&gt;
			elseif betty.plrship.SecondaryBanks[i].AmmoLeft/betty.plrship.SecondaryBanks[i].AmmoMax &amp;gt; 0.27 then&lt;br /&gt;
				betty.status.secondarywarned[i] = false&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if betty.plrship.SecondaryBanks[i].AmmoLeft == 0 and not betty.status.secondaryemptywarned[i] then&lt;br /&gt;
				queueWarning(betty.secondaryempty[i])&lt;br /&gt;
				betty.status.secondaryemptywarned[i] = true&lt;br /&gt;
			elseif betty.plrship.SecondaryBanks[i].AmmoLeft &amp;gt; 0 then&lt;br /&gt;
				betty.status.secondaryemptywarned[i] = false&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$On Frame:&lt;br /&gt;
[&lt;br /&gt;
if not BettyOverride then&lt;br /&gt;
	ttime = mn.getMissionTime()&lt;br /&gt;
		&lt;br /&gt;
	if ttime ~= 0 then&lt;br /&gt;
		if not bettyinited then&lt;br /&gt;
			initbetty()&lt;br /&gt;
		else&lt;br /&gt;
			--if betty.plrship.Class.Species.Name == &amp;quot;UEF&amp;quot; then									&lt;br /&gt;
				processTriggers()					&lt;br /&gt;
				printQueue()&lt;br /&gt;
				processQueue()&lt;br /&gt;
			--else&lt;br /&gt;
			--	betty = nil&lt;br /&gt;
			--	bettyinited = false&lt;br /&gt;
			--	BettyOverride = true&lt;br /&gt;
			--end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
$On State End: &lt;br /&gt;
[&lt;br /&gt;
	if bettyinited then&lt;br /&gt;
		i = 1&lt;br /&gt;
		while betty.queue[i] ~= nil do&lt;br /&gt;
			betty.queue[i] = nil&lt;br /&gt;
			ba.print(&amp;quot;BETTY DEBUG: Clearing queue item &amp;quot; .. i .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
			i = i + 1		&lt;br /&gt;
		end&lt;br /&gt;
		betty = nil&lt;br /&gt;
		bettyinited = false&lt;br /&gt;
	end&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
#End&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting Examples|Bitching Betty]]&lt;/div&gt;</summary>
		<author><name>The E</name></author>
	</entry>
</feed>