Scriptname RenRadioTestScriptVTwo extends ObjectReference Conditional {; Radio Test Script should run on radio activator} float currentfrequency = 0.0 float radiolistfrequency = 0.0 int formlistindex = 0 int arrayindex = 0 int prevarrayindex = 0 FormList Property RenRadioList Auto ; 002462e3 is the workshop radio list ObjectReference oReference Float[] FrequencyArray float myvolume = 0.0 Message Property RenRadioMSG01 Auto Message Property RenRadioMSG02 Auto Bool RunMenu int radiobutton = 0 ; 0019D6C3 - atom cats transmitter RenRadioQuestScript Property renradioquest Auto RenRadioMorseCodeScript Property renmorsequest Auto bool firstsearch = false float testfrequency = 0.0 bool checkingfreqs = false bool registerforunint = false bool registerforsm = false bool debugvar = false float scriptversion = 1.3 Conditional float prevscriptversion Perk RenRadioPerk Function SetOriginalFrequency() float originalfrequency = (GetBaseObject() As Objectreference).GetRadioFrequency() if (originalfrequency >= 0.0) if (originalfrequency != 0.0) MakeRadioReceiver(originalfrequency, 1.0, none, false, true) SetRadioFrequency(originalfrequency) else MakeRadioReceiver(originalfrequency, 1.0, none, false, true) SetRadioFrequency(originalfrequency) SetRadioOn(false) endif endif endFunction Event RenRadioQuestScript.ResetRadioFrequency(RenRadioQuestScript akSender, Var[] akParams) SetOriginalFrequency() endEvent Event RenRadioQuestScript.RenChangeSoundModel(RenRadioQuestScript akSender, Var[] akParams) endEvent Event OnInit() InitVariables() endEvent Function InitVariables() renradioquest = Game.GetFormFromFile(0x010008B0, "RenRadioMod.esp") As RenRadioQuestScript RenRadioMSG01 = Game.GetFormFromFile(0x01000801, "RenRadioMod.esp") As Message RenRadioMSG02 = Game.GetFormFromFile(0x0100454a, "RenRadioMod.esp") As Message if (registerforunint == false) RegisterForCustomEvent(renradioquest, "ResetRadioFrequency") registerforunint = true endif if (registerforsm == false) RegisterForCustomEvent(renradioquest, "RenChangeSoundModel") registerforsm = true endif Form myself = Self As Form Activator myradio = myself as Activator if (myradio != none && myradio.IsRadio() == false) ; make this ObjRef a radio! ; MakeRadioReceiver(float afFrequency, float afVolume, outputmodel aOverrideModel, bool abActive, bool abNoStatic) Self.MakeRadioReceiver(91.0, 1.0, none, false, true) endif if (renradioquest.rencustomfreqs == none) renradioquest.initvariables() endif if (firstsearch == false) GetStations() firstsearch = true endif endFunction float Function RoundtoSecondDecimal(float number) int total = ((number * 100.0) As Int) float output = 0.0 output = total As Float output = output / 100 return output endFunction Function ClearFrequencyArray() int itr = 0 while (itr < FrequencyArray.length) FrequencyArray[itr] = 0.0 itr += 1 endWhile endFunction Function SortFloatArray(Float[] myArray) int itr = 0 int itrtwo = 0 while (itrtwo < myArray.length) if (myArray[0] > myArray[itrtwo]) float value_one = myArray[0] float value_two = myArray[itrtwo] myArray[0] = value_two myArray[itrtwo] = value_one itrtwo = 0 endif itrtwo += 1 endWhile endFunction Function SearchForFreqs() ; fPipboyRadioMinFrequency ; fPipboyRadioMaxFrequency ClearFrequencyArray() testfrequency = Game.GetGameSettingFloat("fPipboyRadioMinFrequency") float maxfreq = Game.GetGameSettingFloat("fPipboyRadioMaxFrequency") checkingfreqs = true BlockActivation(true, true) while (testfrequency <= maxfreq) if (Game.IsPlayerInRadioRange(testfrequency) == true) int emptyfreq = FrequencyArray.Find(0.0) if (emptyfreq >= 0 && FrequencyArray.Find(testfrequency) == -1) FrequencyArray[emptyfreq] = testfrequency endif endif testfrequency = testfrequency + 0.01 testfrequency = RoundtoSecondDecimal(testfrequency) endWhile SortFloatArray(FrequencyArray) BlockActivation(false, false) checkingfreqs = false endFunction Function GetStations() if (FrequencyArray == none) FrequencyArray = New Float[128] endif if (renmorsequest != none && (renmorsequest.MorseA == none || renmorsequest.Morse0 == none || renmorsequest.MorseRadioTransmitter == none || renmorsequest.morsecodescene == none)) renmorsequest.Reset() endif ; Int formsize = RenRadioList.GetSize() ; Indices are offset by 1 relative to size myvolume = GetRadioVolume() ;SearchForFreqs() ;/ ; no longer needed? while (formlistindex < formsize) oReference = PlaceAtMe(RenRadioList.GetAt(formlistindex), 1, false, true, true) radiolistfrequency = oReference.GetRadioFrequency() oReference.BlockActivation(true, true) if (FrequencyArray.Find(radiolistfrequency) < 0) FrequencyArray[formlistindex] = radiolistfrequency endif formlistindex += 1 oReference.DisableNoWait(false) oReference.Delete() oReference = none endWhile int freqitr = 0 formlistindex = FrequencyArray.Find(0.0) if (renradioquest != none && renradioquest.rencustomfreqs != none) while (renradioquest.rencustomfreqs[freqitr] != 0.0 && formlistindex >= 0) float newfreq = renradioquest.rencustomfreqs[freqitr] if (FrequencyArray.Find(newfreq) < 0) FrequencyArray[formlistindex] = renradioquest.rencustomfreqs[freqitr] formlistindex += 1 endif freqitr += 1 endWhile endif /; EndFunction Function RadioMenu() if (debugvar == true) debug.messagebox("Entered Radio Menu") endif if (RenRadioMSG01 == none) RenRadioMSG01 = Game.GetFormFromFile(0x01000801, "RenRadioMod.esp") As Message ; this is more efficient then adding the form to each radio activator. endif if (RenRadioMSG02 == none) RenRadioMSG02 = Game.GetFormFromFile(0x0100454a, "RenRadioMod.esp") As Message ; this is more efficient then adding the form to each radio activator. endif if (prevarrayindex != arrayindex) arrayindex = 0 arrayindex = prevarrayindex if (renradioquest.rencustomfreqs[arrayindex] <= 0.0) arrayindex = 0 endif endif if (registerforunint == false) RegisterForCustomEvent(renradioquest, "ResetRadioFrequency") registerforunint = true endif if (registerforsm == false) RegisterForCustomEvent(renradioquest, "RenChangeSoundModel") registerforsm = true endif if (firstsearch == false) ; do an initial search GetStations() firstsearch = true endif if (IsRadioOn() == false) SetRadioOn(true) endif ;/ Int iIndex = 0 while (FrequencyArray[iIndex] != 0.0) iIndex += 1 endWhile iIndex -= 1 ; Indices are offset by 1 relative to size, so we need to drop it down by 1 /; if (renradioquest.rencustomfreqs.Find(GetRadioFrequency()) < 0 && GetRadioFrequency() > 0.0) int emptyslot = renradioquest.rencustomfreqs.Find(0.0) renradioquest.rencustomfreqs[emptyslot] = GetRadioFrequency() endif if (Game.IsPlayerRadioOn() && Game.IsPlayerInRadioRange(Game.GetPlayerRadioFrequency()) && renradioquest.use_pipboy_override == true) ; player is listening to a radio station on ; the Pipboy int emptyslot = renradioquest.rencustomfreqs.Find(0.0) currentfrequency = Game.GetPlayerRadioFrequency() if (renradioquest.rencustomfreqs.Find(currentfrequency) < 0) renradioquest.rencustomfreqs[emptyslot] = currentfrequency endif arrayindex = emptyslot SetRadioFrequency(currentfrequency) SetRadioVolume(myvolume) prevarrayindex = arrayindex return endif RunMenu = true int menunum = 0 if (debugvar == true) debug.messagebox("RunMenu: " + RunMenu + ", MSG01: " + RenRadioMSG01.GetFormID() + ", menunum: " + menunum) endif While RunMenu && RenRadioMSG01 != none if (radiobutton != -1 && menunum == 0) radiobutton = RenRadioMSG01.Show(renradioquest.rencustomfreqs[arrayindex], (GetRadioVolume() * 100), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) if (radiobutton == 0) ; frequency up if (renradioquest.rencustomfreqs[(arrayindex+1)] != 0.0) arrayindex += 1 else arrayindex = 0 endif elseif (radiobutton == 1) ; frequency down if (arrayindex > 0) arrayindex -= 1 else int lastfreq = renradioquest.rencustomfreqs.Find(0.0) if (lastfreq > 0) arrayindex = (lastfreq - 1) else arrayindex = 0 endif endif elseif (radiobutton == 2) ; volume up if (myvolume + 0.1 < 1) myvolume += 0.1 else myvolume = 1 endif elseif (radiobutton == 3) ; volume down if (myvolume - 0.1 > 0) myvolume -= 0.1 else myvolume = 0 endif elseif (radiobutton == 4) ; turn off radio SetRadioOn(false) elseif (radiobutton == 5) ; exit if (IsRadioOn() == false) SetRadioOn(false) else SetRadioOn(true) endif RunMenu = false elseif (radiobutton == 6) ; do nothing, just to avoid people clicking on the button below by accident. elseif (radiobutton == 7) ; Go to setup menu menunum = 1 endif if (renradioquest.rencustomfreqs[arrayindex] != 0.0) currentfrequency = renradioquest.rencustomfreqs[arrayindex] SetRadioFrequency(renradioquest.rencustomfreqs[arrayindex]) SetRadioVolume(myvolume) prevarrayindex = arrayindex endif endif if (radiobutton != -1 && menunum == 1) radiobutton = RenRadioMSG02.Show(renradioquest.rencustomfreqs[arrayindex], (GetRadioVolume() * 100), 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) if (radiobutton == 0) ; Pipboy control ON renradioquest.use_pipboy_override = true elseif (radiobutton == 1) ; Pipboy control OFF renradioquest.use_pipboy_override = false elseif (radiobutton == 2) ; return to previous menu menunum = 0 elseif (radiobutton == 3) ; do nothing, just to avoid people clicking on the button below by accident. elseif (radiobutton == 4) ; reset all radios renradioquest.ResetAllRadios() menunum = 0 RunMenu = false elseif (radiobutton == 5) ; reset everything renradioquest.ClearFrequencyArray() renradioquest.initvariables() renradioquest.ResetAllRadios() initvariables() menunum = 0 RunMenu = false endif endif endWhile endFunction Event OnLoad() scriptversion = 1.4 if (RenRadioPerk == none) RenRadioPerk = Game.GetFormFromFile(0x01007a7a, "RenRadioMod.esp") As Perk endif if (Game.GetPlayer().HasPerk(RenRadioPerk) == false) Game.GetPlayer().AddPerk(RenRadioPerk) endif debugvar = false Form myself = Self As Form Activator myradio = myself as Activator if (myradio != none && myradio.IsRadio() == false) ; make this ObjRef a radio! ; MakeRadioReceiver(float afFrequency, float afVolume, outputmodel aOverrideModel, bool abActive, bool abNoStatic) Self.MakeRadioReceiver(91.0, 1.0, none, false, true) endif if (renradioquest.rencustomfreqs == none) renradioquest.initvariables() endif if (firstsearch == false) GetStations() firstsearch = true endif prevscriptversion = scriptversion endEvent Event OnActivate(ObjectReference akActionRef) debugvar = false if (debugvar == true) debug.messagebox("Radio activated by player, script version: " + scriptversion) endif renradioquest = Game.GetFormFromFile(0x010008B0, "RenRadioMod.esp") As RenRadioQuestScript renmorsequest = Game.GetFormFromFile(0x010008D6, "RenRadioMod.esp") As RenRadioMorseCodeScript Utility.Wait(0.1) RadioMenu() endEvent Event OnEquipped(Actor akActor) Form myself = Self As Form Activator myradio = myself as Activator if (myradio != none && myradio.IsRadio() == false) ; make this ObjRef a radio! ; MakeRadioReceiver(float afFrequency, float afVolume, outputmodel aOverrideModel, bool abActive, bool abNoStatic) Self.MakeRadioReceiver(91.0, 1.0, none, false, true) endif renradioquest = Game.GetFormFromFile(0x010008B0, "RenRadioMod.esp") As RenRadioQuestScript renmorsequest = Game.GetFormFromFile(0x010008D6, "RenRadioMod.esp") As RenRadioMorseCodeScript Utility.Wait(0.1) RadioMenu() endEvent