Jump to content

Recommended Posts

Ahem' date=' a bit of a question.What to do if the armor stays broken after reloading a save?Can it be somehow fixed?Or will it reload after taking damage again?Or I just gotta wait?

[/quote']

 

What happens if you unequip the armor and then re-equip it?

 

My guess is that BreakArmor got confused and thinks that the applied break state mesh is the fully repaired state. Unequipping the armor should purge it from the player's breakarmor equipment array, re-equipping it should cause breakarmor to re-initialize the armor as if it hadn't seen it before. (Note, this may only work with 1.10.f. Earlier versions were a bit less aggressive with the array purges)

Link to comment

Well I'll try the beta patch and see what that'll do for now.But before that,equipping-reequipping didnt do much, save-reload didnt do much either, quitting and reloading however works.

:EDIT:Beta version works perfect, don't even need to reequip anything if I repaired the armor

Link to comment

I decided to use OnActorEquip, instead of cycling, as it looks like it will provide the information needed often enough.

It will build the NPC queue array rather than cycling from the main quest.

(or I could call the check function directly from OnActorEquip. )

The bad thing is I don't know when exactly the purge should be performed.

OnSave and OnLoad purge looks enough for me.. :(

 

Anyway I have a question on your script.

 

Cycle script calls the aaBAPurgeCheck function

            ; Next, add the player to the arr_NPC_Queue array
            ; Set the currentNPC variable to playerRef because using playerRef directly causes stupid to happen
            let currentNPC := playerRef
            let NPCKey := GetRawFormIDString currentNPC
            ar_append arr_NPC_Queue currentNPC
            if eval (ar_HasKey NPCStateArray NPCKey)
                call aaBAPurgeCheck NPCKey
            endif
And the NPCKey is the player, and only the player. Is this what it supposed to do?

What's the relationship between this and the following 'purge' part? we cannot seem to manipulate the "Count" flag for any NPC other than the PC!

Link to comment

First, it's important to look at that particular section in context

 

"if currentKey == lastKey" is a check to determine whether the script has cycled through the entire NPC Queue array.  If it has, then the script builds a new NPC Queue.  What is this NPC Queue?  Well, the idea is to build an array of all nearby NPC's using a GetNextRef and then cycle through that array one NPC at a time over the course of the next X frames.

 

Here is that section of the code in its entirety.

 

        if currentKey == lastKey
            ; First, Re-initialize arr_NPC_Queue
            if arr_NPC_Queue
                let arr_NPC_Queue := ar_Null
            endif
            let arr_NPC_Queue := ar_Construct Array
            ; Now construct a new arr_NPC_Queue from all nearby NPCs
            ;First, get the initial NPC reference
            let currentNPC := GetFirstRef 35 1
            while currentNPC ; As long as there is a valid NPC reference, keep iterating through them and adding them to the NPC queue
                if eval !( MaleSupport == 0 && currentNPC.IsFemale == 0 ) ; If male support is not enabled, leave men out of the queue.
                    if eval (IsFormValid currentNPC)
                        let NPCKey := GetRawFormIDString currentNPC
                        ar_append arr_NPC_Queue currentNPC
                        if eval (ar_HasKey NPCStateArray NPCKey)
                            call aaBAPurgeCheck NPCKey
                        endif
                    endif
                endif
                let currentNPC := GetNextRef
            loop
            ; Next, add the player to the arr_NPC_Queue array
            ; Set the currentNPC variable to playerRef because using playerRef directly causes stupid to happen
            let currentNPC := playerRef
            let NPCKey := GetRawFormIDString currentNPC
            ar_append arr_NPC_Queue currentNPC
            if eval (ar_HasKey NPCStateArray NPCKey)
                call aaBAPurgeCheck NPCKey
            endif
            ;Here's that purge I was talking about. 
            ;Purge any entries in the NPCStateArray that do not have matching entries in this cycle's arr_NPC_Queue array
            let tempCounter := ar_size NPCStateArray
            if tempCounter > 0
                ForEach iter <- NPCStateArray
                    if eval ( NPCStateArray[iter["key"]]["Count"] ) == 0
                        ar_Erase NPCStateArray $iter["key"]
                    else
                        let NPCStateArray[iter["key"]]["Count"] := 0 ; Setting this to zero means that it will be purged in the next cycle if the NPC is not found
                    endif
                loop
            endif
            ;Re-Initialize lastKey and currentKey
            let lastKey := ar_Last arr_NPC_Queue
            let lastKey += 1
            let currentKey := 0
            ;That's all we're going to do this frame.
            set NPCKey to sv_Destruct
            return
        endif
 

Count is just a flag (valid values 0 and 1).  It is set to 1 any time the NPC is accessed  (there is a similar flag on their Break Armor items).  If the flag is 0 when the array is rebuilt, they are purged from the item array.

 

aaBAPurgeCheck is the function that checks the break armor item array and purges any item that was not detected on the last cycle. 

 

 

Link to comment

Oh well,

 

stupid sorry.

 

I overlooked call aaBAPurgeCheck NPCKey in the while loop!! So I thought you're not processing any NPCs other than the player.

 

Gah anyway, since I won't cycle through every frame I have to come up with some other timing to perform the purge.

Link to comment

For what you're planning to do, I would recommend looking at how this stuff is implemented in Setbody as well.  Breakarmor has a ton of weird code that I implemented to minimize its system load, weird code that won't necessarily be needed for what you're doing.

 

That said, I highly recommend using a single gamemode quest script that fires once per frame.

 

In generic terms, It can be as simple as something like this

 

 

if ActionFlag == 1
call doStuff
return
endif

if NothingToSeeHere == 1
return
endif

call someOtherFunction
return

so every frame the gamemode function fires.  If the ActionFlag variable is set, the function takes the indicated action and then returns.  If NothingToSeeHere is set, the function immediately returns.  If neither flag is set, someOtherFunction gets called.

 

Note: whenever you see return in a function, that represents one of the endpoints of the function.  So this mini pseudo function has three endpoints...on any given frame, it will only reach one of those three returns.

 

If you look closely, both the main setbody function and the main break armor function are just variants of this basic structure.

 

You may not necessarily want to mimic the BreakArmor and/or Setbody functions so much as mirror this basic structure.

Edited by gerra6
Link to comment
  • 2 weeks later...

I want to ask about something......

 

I downloaded ArgentArmor BBB + BU yesterday. It support and need BreakUndies.esm, not the BreakArmor. After do some researching, I want to ask.......

 

Basically using BU_disabler.esp, it can use BA and BU together, right? So using ArgentArmor for BU will be fine, right?

 

Are there any differences or disadvantages for using BU-armor-esp version (with BA+BU_disabler.esp) over the BA-armor-esp version?

Link to comment

I want to ask about something......

 

I downloaded ArgentArmor BBB + BU yesterday. It support and need BreakUndies.esm, not the BreakArmor. After do some researching, I want to ask.......

 

Basically using BU_disabler.esp, it can use BA and BU together, right? So using ArgentArmor for BU will be fine, right?

 

Are there any differences or disadvantages for using BU-armor-esp version (with BA+BU_disabler.esp) over the BA-armor-esp version?

 

 

Basically, BA is intended to completely replace the old BU system.  Since Break Undies 2.0, BU armors don't require their plugins to be mastered to the main esm - instead, you edit the ini file and it will recognize them. BA doesn't even require ini file, but still recognize legacy ini. BU does hammer the performance, while you can hardly notice frame drop when you run BA instead.

Anyway, some of very old BU armors(BU 1.1)  are parented to Break Undies.esm. I don't remember what Argent requires, but if it does require BreakUndies.esm, you get crash without BreakUndies. So you have to enable BreakUndies.esm, then enable BUdisabler.esp to suppress the old BU system from run, and enable BA of course.

 

Now if you know how to unmaster a plugin from its master, it's a different story. You detach Argent Armor plugin from BreakUndies.esm, and you can use it without hassle of running both BU and BA. (You can de-master plugins using Tes4Gecko.)

Link to comment

^

Thank you for the advice. I will try the Tes4Gecko.

 

Btw, I notice LoversPK support BU too. In the option menu, I can activate it and choose the *.esp. How about the LoversPK compatibility and support with the BA?

BreakArmor includes a *very* primitive plugin in the optional folder called loversBreakArmor. This replaces the native BreakUndies support with Break Armor support...but, it should be said, it's pretty crude.

 

I'll code something a bit less primitive and crappy once I get the chance.

Link to comment

I tweaked LBA a bit.

simply, it gets NPC state information from aaBAReturnNPCState function, and does its job if the item is found in "BAEquip" category.

 

Main quest script

	If IsModLoaded "BreakArmor.esp"
		Let func_BAReturnNPCState := GetFormFromMod "BreakArmor.esp" 000818
	endif
	Let bDoOnce := 1
So in xLoversPkrCorrectNudeFlagBU script, it checks if the item can be found in "BAEquip" entry, and only if so it excludes the item slot in nude flag.
			if eval ((ar_Find tmpr meStateArray["BAEquip"]) > -1)
				if eval(nudeflag & 2)
					set nudeflag to nudeflag - 2
				endif
			endif
Similarly, in xLoversPkrBUBreak script, it checks if the item is found in "BAEquip" entry, and only if the item can be found in the entry it breaks the item.
		if eval ((ar_Find tmpr meStateArray["BAEquip"]) > -1)
			if Call xLoversPkrBUBreakSub me tmpr 0 per
				Let arList[ ar_Size arList ] := tmpr
			endif
		endif
You still need to take a look at this yourself if you want this to be less primitive. And I haven't time for testing yet. testing anyone?

LoversBreakArmor_test.7z

Link to comment

I like the look of that Movomo.

 

I can't test any Oblivion stuff right now myself, I'm buried under the Blender stuff, but I think that's the right track.  I'll take a good long look when I get the chance.

 

If we can get conformation that it works, I'll replace the current primitive loversbreakArmor esp with your modified version.

Edited by gerra6
Link to comment

yup. It appears to be working as expected. As it's completely automatic now, Lovers BU-related settings are effectively obsolete. Let's wait for another one who can get it to work other than me.

 

btw do you think that BU setting menu should be disabled and invisible? or just let them be? I mean the menu that registers individual BU plugins (I haven't looked into it yet, but it could be dangerous because we are probably dealing with entire setting spell script not only the BU one- imo.)

Link to comment

yup. It appears to be working as expected. As it's completely automatic now, Lovers BU-related settings are effectively obsolete. Let's wait for another one who can get it to work other than me.

 

btw do you think that BU setting menu should be disabled and invisible? or just let them be? I mean the menu that registers individual BU plugins (I haven't looked into it yet, but it could be dangerous because we are probably dealing with entire setting spell script not only the BU one- imo.)

If it can be disabled without modifying a script that other lovers plugins also modify, then yes. If not...only if we're willing to test the hell out of it.
Link to comment

Thanks for your quick reply and new prevent bloat patch. I'll try it.

 

And Here is the answer for your question. My load order.

 

 

 

Oblivion.esm

Beautiful People 2ch-Ed.esm

RaceMaster.esm

x117race.esm

Chanpon.esm

Oscuro's_Oblivion_Overhaul.esm

CLS-Craftybits.esm

BathingMod_Base.esm

MD_Saddle_Master.esm

TamrielTravellers.esm

HorseCombatMaster.esm

Lovers with PK.esm

LoversCreature.esm

TamagoClub.esm

HiyokoClub.esm

MotionPack.esp

Short Grass V3.esp

Unofficial Oblivion Patch.esp

Oblivion Citadel Door Fix.esp

UOP Vampire Aging & Face Fix.esp

DLCShiveringIsles.esp

Unofficial Shivering Isles Patch.esp

Oscuro's_Oblivion_Overhaul.esp

Knights.esp

Knights - Unofficial Patch.esp

Oscuro's_Oblivion_Overhaul - Knights of Nine.esp

DLCBattlehornCastle.esp

DLCBattlehornCastle - Unofficial Patch.esp

DLCFrostcrag.esp

DLCFrostcrag - Unofficial Patch.esp

DLCHorseArmor.esp

DLCHorseArmor - Unofficial Patch.esp

DLCMehrunesRazor.esp

DLCMehrunesRazor - Unofficial Patch.esp

DLCOrrery.esp

DLCOrrery - Unofficial Patch.esp

DLCSpellTomes.esp

DLCSpellTomes - Unofficial Patch.esp

DLCThievesDen.esp

DLCThievesDen - Unofficial Patch.esp

DLCThievesDen - Unofficial Patch - SSSB.esp

DLCVileLair.esp

DLCVileLair - Unofficial Patch.esp

AsharasSirensAndTritons.esp

Beautiful People 2ch-Ed Ashara's Sirens and Tritons.esp

Beautiful People 2ch-Ed CustomRace.esp

Beautiful People 2ch-Ed Cute Elves.esp

Beautiful People 2ch-Ed Disable BandBlindMask.esp

Beautiful People 2ch-Ed ENG Race.esp

Beautiful People 2ch-Ed Merged Eye Modules.esp

Beautiful People 2ch-Ed Merged Hair Modules.esp

Beautiful People 2ch-Ed Merged RoseSims Hair Modules.esp

Beautiful People 2ch-Ed Merged SKSRENs Hair Modules.esp

Beautiful People 2ch-Ed MS Elves - NoSc.esp

Beautiful People 2ch-Ed Nec Mystic High Elf Remake.esp

Beautiful People 2ch-Ed Chocolate Elves.esp

Beautiful People 2ch-Ed Sheogorath Eye.esp

Beautiful People 2ch-Ed Vanilla Race.esp

DiabloEF 6 in 1.esp

x117 Merged SKSRENs Hair Modules.esp

x117race.esp

x117Race ENG Race.esp

Lop-ears Elf.esp

Lop-ears Elf_mini.esp

FFRace.esp

FFRace_MS.esp

FormID Finder4.esp

Active_Inventory_Spell_1.2.esp

Enhanced Hotkeys.esp

SupremeMagicka.esp

SM_ShiveringIsles.esp

SM_Scrolls.esp

SM_SigilStone.esp

SM_DLCSpellTome.esp

SM_EnchantStaff.esp

SM_OOO.esp

sr_enhanced_magic_system.esp

MD Saddlebags v3.0.esp

MD Saddlebags v3.0 Alternative Trader Script.esp

CLS-Craftybits.esp

CB-DepositsForges.esp

CB-BeeEnhancement.esp

CB-OOO_BuckGlue.esp

CB-Weights_Hard.esp

Basic Primary Needs.esp

BathingMod_Soap.esp

BathingMod_Bathroom_Upgrades.esp

BathingMod_Placeable_Bathtubs.esp

RealisticFatigue.esp

MaleBodyReplacerV5.esp

EVE_StockEquipmentReplacer.esp

EVE_ShiveringIslesEasterEggs.esp

EVE_KnightsoftheNine.esp

EVE_KhajiitFix.esp

EVE_StockEquipmentReplacer for OOO.esp

SD2011.esp

Energy - Runes.esp

sitdown.esp

See You Sleep DLL.esp

See You Sleep DLL - Vampire Bedroll Anims.esp

See You Sleep DLL - DLCVileLair.esp

CaptiveMaiden.esp

Ta22's NPCs_NENR.esp

TamrielTravellers4OOO.esp

ShiveringIsleTravellers.esp

TamrielTravellersItemsnpc.esp

ShiveringIsleTravellersFriendlyFactions.esp

Bashed Patch, 0.esp

BreakArmor.esp

UnderSewerHouse.esp

FuroGeneratorTrap.esp

MaternityClothes.esp

Vanilla Maternity Clothes.esp

SetBody.esp

TamagoShop.esp

TamagoTopic.esp

TamagoConfide.esp

LoversTamagoClub.esp

LoversEncounter.esp

HiyokoGenerator.esp

HiyokoGeneratorCreature.esp

TamagoSetBody.esp

LoversAphrodisia.esp

LoversAdultPlayPlusforSSP.esp

LoversVoiceSSPplus.esp

LoversVoiceGHN_TH.esp

LoversVoiceGH_TH.esp

LoversVoiceSSPx117.esp

LoversVoiceGH++2K_TH.esp

LoversRaperS.esp

LoversEscapeRapeVPlayer.esp

LoversNTRburglar.esp

LoversSlaveTrader.esp

LoversLoveMucus.esp

Tamago_VirginBlood.esp

LoversSpermTrap.esp

LoversPayBandit.esp

LoversProstitute.esp

LoversClubCats.esp

LoversClubCatsSx.esp

LoversRapeman.esp

PlayerSlaveEncounters_v0.55.esp

DarkBloodline.esp

LSTBravilUnderground.esp

LoversGGBlackmail.esp

LoversMB2.esp

Lovers3dorgasmMB2.esp

Lovers with PK.esp

LoversCreature.esp

LoversMotionsNT.esp

LoversFSE.esp

LoversIdleAnimsPriority.esp

LoversAnimObjectsPriority.esp

Lovers3dorgasm.esp

DeadlyReflex 6 - Combat Moves.esp

Deadly Reflex 6 - Timed Block and 250% damage.esp

Mounted_Spellcasting_Deadly_Reflex_Compatible.esp

Deadly Reflex 6 - HeX NifSE Patch.esp

SM_DeadlyReflex.esp

 

 

 

Is it necessary to put Lovers plugins after bashed patch and where should I put LoversBreakArmor?

Link to comment

In general, Break Armor is fairly load order agnostic, so you can put it just about anywhere.

 

LoversBreakArmor should *probably* be grouped with most of your lovers plugins (the ones above the bashed patch), but near the bottom of that pack. It overwrites a number of break undies related scripts in the main lovers with pk files and probably needs to be below any other mods that modify them.

 

Note, Movomo's new LoversBreakArmor test version is probably a better bet than the one in the current Break Armor package. The version of LoversBreakArmor that I wrote for the package is very very crude.

Link to comment

I have a question about an issue I seem to have every now and then. When I have damaged armor and I save, sometimes my armor repairs itself. I've had my armor duplicate itself as well. It's a normal save and not a quick save. I no longer use quick saves. It doen't happen very often but often enough to be annoying. Is this just me or a bug?

Link to comment

I've only been using glass armor so I have not tried it with different armors. I'll try it with something else and see if it's different.

 

After a battle where my armor was damaged to about 70-80 I save my game. When break armor refreshes my armor after the save suddenly my armor is up to 100 or close to it. Sometimes it repairs it and duplicates it. Rarely it seems to equip a duplicate armor and my damaged armor is simply unequipped. I can load that save and open my menu quickly and see see my lowered armor health, exit the menu, see my armor blink and re-open my menu and see my armor health is higher.

 

My saves tend to take a few seconds to complete though but I'm not sure why that would effect things.

Link to comment

Yeah but I've noticed that it seems to only happen when I have several copies of the armor that I'm currently wearing.

 

It has also dawned on me that it could also be a conflict or something else entirely. I'm also using an experimental version of tamagosetbody movomo is currently working on that switches out the meshes of the armor that I'm wearing with a pregnant model. I've let movomo know through a PM in case it's not break armor and tamagosetbody instead.

Link to comment

I saw your pm. Yeah, it could be TSB problem. I've added some weird and crude code to update the look.. It's likely to be my fault, but just to make sure see if you can replicate the bug without TSB. Well, probably it's because TSB is just unequip and re-equip the base object without getting the exact invetory reference. My laziness. :dodgy:

Link to comment

I installed mod with recomended Vanila Armors, it contains esp that requies original BUF, I changed this esp's master file to Breaking Armor but got no visual effect on armor even after zero durability (i tested this on rusty iron armor that you can get from beggining.)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use