Jump to content

Recommended Posts

Posted
1 hour ago, MSM_Alice said:

Thank you for the re-release with the compiled scripts :)

I was testing, and even though I was setting the actor value on the HP_NotEligible NPC to 1, the human ones were still pickpocketing me as long as the system was on (even followers).
I took a look at the ESP, and I think I know why (and I should have seen it from the first screenshot you posted, but I glazed over it).



The conditions for the thief and the AND/OR combination I trust, do not work as one might think at first glance. 

This CK behaviour gave me a lot of headaches when evaluating how CK does AND and OR on condition stacks.
In my experience, in a combined condition, the way  CK evaluates that stack is that the last condition is true, then that entire condition is true if or is in the last spot 
 

A AND B AND C AND D OR E ,


I think that one resolves to TRUE if ABC and D are all false, and just E is true  


It does not do
A AND B AND C AND  (D OR E)   - which is what you would have wanted

it does
(((A AND B) AND C) AND D) OR E 


They are just evaluated linearly (with some odd edge case rules around the first one in the chain).

In theory, you could do
D OR E AND A AND B AND C

 

 put the one "OR" condition at the very start. as it translates to 
(((D OR E) AND A) AND B) AND C
and it might be correct ( but still, there could be some edge cases around the first condition in the chain on how the flags need to be set, so don't trust it)

I have learned the hard way not to trust CK conditions mixing AND and OR.
The safest route is to have conditions that either ALL  - AND  or ALL- OR, those work reliably 100%
If you combine AND and OR, you need to test it in a bespoke manner to see PRECISELY how it evaluates in all cases, and there are actually edge cases that give surprising results.  

The way things are configured now, Ghoul thieves would work okay as expected and obey the above rules, , Human thieves would enjoy a free-for-all, with no limits. 

One way of making this more predictable is to have an alias for humans and a different alias for ghouls, each of them with ALL - AND conditions and no OR anywhere, and then pick which one of the two qualifies/you want to use.

Of course independent testing is best, and I might be wrong, but I think this is what is happening right now. 

image.png.fa4e5221b6a2cd3f051f19bb3e1ab90b.png


Haha, don't thank me for messing up, thanks. :) 


I didn't know that's how the CK did the conditons, how frustrating. 

 

I'm working on a version to fix this right now. I have the HP_NotEligible working (and actually tested) but I've broken something else. I'll upload when its ready. Big thanks for the help. 

Posted (edited)
2 hours ago, MSM_Alice said:

I might also be missing something, but when trying to track down why Actors with that flag set were still getting picked and it seems there is a path by which the tief is picked by another function in thescript HotPocket.psc that has nothing to do with these conditions that fill up the alias, skipping them entirely: 
Should the actor value condition be tested here as well?


 

Actor Function GetValidThief(Actor akPlayer)
    If (!IsLocationValid(akPlayer))
        Return None
    EndIf

    float scanRange = HP_ScanRange.GetValue()
    If (scanRange <= 0.0)
        scanRange = 4000.0
    EndIf
    
    ObjectReference[] Nearby = akPlayer.FindAllReferencesWithKeyword(ActorTypeHuman, scanRange)
    int totalFound = Nearby.Length
    If (totalFound == 0)
        Return None
    EndIf

    int startIndex = Utility.RandomInt(0, totalFound - 1)
    int i = 0

    While (i < totalFound)
        int currentIndex = (startIndex + i) % totalFound
        Actor Candidate = Nearby[currentIndex] as Actor
        
        If (Candidate && Candidate != akPlayer && !Candidate.IsDead())
            If (Candidate.GetCombatState() == 0 && !Candidate.IsHostileToActor(akPlayer))
                ; Check the 3-slot blacklist
                bool isRecent = false
                int r = 0
                While (r < RecentlyUsedThieves.Length)
                    If (RecentlyUsedThieves[r] == Candidate)
                        isRecent = true
                        r = RecentlyUsedThieves.Length 
                    EndIf
                    r = r + 1
                EndWhile

                If (!isRecent)
                    RecentlyUsedThieves[recentIndex] = Candidate
                    recentIndex = (recentIndex + 1) % 3 ; Cycle 0, 1, 2
                    Return Candidate
                EndIf
            EndIf
        EndIf
        i = i + 1
    EndWhile
    Return None
EndFunction

 

 


This actor, FoundNPC, found with this function  is forcefed into that alias after that, but I have no insight into what happens further, if the condition mismatch on the alias itseld causes a rejection of the alias ref being filled or some reselection/overwrite and whatnot, as the AI packages that are set on the alias don't seem to strully "stick" to the "FoundNPC",  at  all potentially being already gone when whenevaluate Package is called on it since  they produceno effects on EvaluatePackage(). 

 

            HP_ThiefAlias.ForceRefTo(FoundNPC)
            HP_IsTheftActive.SetValue(1.0)
            HP_IsThiefEscaping.SetValue(0.0) ; Ensure they aren't escaping yet
            FoundNPC.EvaluatePackage()


The NPC are  not approaching me whenthe above run, even though I am seeing the notification that says they should be approaching (maybe something with the ai package not zeroing in on the target or maybe just not applied to the FoundNPC) 

If I  approach them instead, the event does happen, but the AI package that gets them to me does not seem to ever actually fire/ set them in motion nor to make them run away after the theft.
Maybe because I am testing in sanctuary andthe NPC there have their AI packages forced to their Santuary Sandbox more often thanothers, and somehow take precendence over the packages that are set onthe ThiefAlias in the thief quest

I have no clue why they don't fire, they just don't.
I never see the cool sneaking as they approach for the steal, as it happens on the animated gif on the mod page.
I did not try earlier versions to see if it was working there.
 

 

Just saw this too, what a headache, I thought this is what I broke but it must have been added around 0.3 

 

Ok it just doesn't seem to be working in settlements, at least player owned ones. I was able to get them to do the sneak+move towards player at Drumlin + Diamond city at least. Also spawned in Edward Deegan (Ghoul that meets you in the first bar to give you a quest) to test a ghoul who seemed able to steal + be blocked). 

 

It seems to work with NPCs that are NOT settlers, like Human Resources visitors. Which I think is ok? Considering you can just "take back" items anyway from them. 

A bit annoying they cant apply DD/KFT or drugs though.

Edited by Franco Cozzo
Posted
12 minutes ago, Franco Cozzo said:

Just saw this too, what a headache, I thought this is what I broke but it must have been added around 0.3 

Understood.

If you do decide to keep the alternate GetValidThief function, that IsInScene check that you already have in the alias filling conditions inthe CK  (as well as the Actor value-based filter) should be in that Papyrus function as well.
It is robust and avoids a lot of headaches, as turning an NPC into a thief in the middle of their dialogue scene can create all sorts of problems.

Posted (edited)
2 hours ago, Franco Cozzo said:

It seems to work with NPCs that are NOT settlers, like Human Resources visitors. Which I think is ok? Considering you can just "take back" items anyway from them. 

A bit annoying they cant apply DD/KFT or drugs though.

It is probably the settler AI package that refuses to be suppressed and claws its way back.

What I use for the social comment approaches AI packages on  my mod, and works on everyone, including settlers, is that I do not apply AI packages via Aliases, rather the alias is package-less.

I do put the NPC in the Alias for the duration of the approach in a Scene ( doesn;t have to be with the player, it can be a scene just the NPC alias in it).

The scene has a lot of management instruments, much more than just a filled alias.
A scene has phase conditions, papyrus fragments that can run on phases and whatnot, and the AI package I want is added in package Action blocks in those phases (can be even changed, multiple packages for phases of the approach). 

A scene has that all-important "Run only scene packages" checkbox that blocks external AI packages from running while yours is running, and does all that without being disruptive to the base NPC. Once the scene is done, they should return to their base package.
A scene also has fallbacks on what to do ( end or not ) on death or in combat. 

Can also have all sorts of checks for the scene; you can even hook events on the scene end, so you don't have to monitor its status on an OnTimer loop or anything brutal like that. 

That phase 1 with walk to target does not proceed to phase 2 (where the comment actually is delivered) until the AI package from phase 1 has reported completed ( unless I want it to and check the "ignore for phase completion" checkmark).

 I've tried a few things with AI packages, and in the end, to me, it seems AI via Scenes is the most elegant and flexible way to work with NPCs that are " not my own" with AI packages, in a non-destructive yet controllable way.
Followed by AI packages on Aliases as a close second.

That being said, I have only started modding a year ago :) , so what do I know :)

image.png.671ef88f8bc691c3345ad00194d6c9cd.png

Edited by MSM_Alice
Posted
21 minutes ago, MSM_Alice said:

It is probably the settler AI package that refuses to be suppressed and claws its way back.

What I use for the social comment approaches AI packages on  my mod, and works on everyone, including settlers, is that I do not apply AI packages via Aliases, rather the alias is package-less.

I do put the NPC in the Alias for the duration of the approach in a Scene ( doesn;t have to be with the player, it can be a scene just the NPC alias in it).

The scene has a lot of management instruments, much more than just a filled alias.
A scene has phase conditions, papyrus fragments that can run on phases and whatnot, and the AI package I want is added in package Action blocks in those phases (can be even changed, multiple packages for phases of the approach). 

A scene has that all-important "Run only scene packages" checkbox that blocks external AI packages from running while yours is running, and does all that without being disruptive to the base NPC. Once the scene is done, they should return to their base package.
A scene also has fallbacks on what to do ( end or not ) on death or in combat. 

Can also have all sorts of checks for the scene; you can even hook events on the scene end, so you don't have to monitor its status on an OnTimer loop or anything brutal like that. 

That phase 1 with walk to target does not proceed to phase 2 (where the comment actually is delivered) until the AI package from phase 1 has reported completed ( unless I want it to and check the "ignore for phase completion" checkmark).

image.png.671ef88f8bc691c3345ad00194d6c9cd.png

I'll need to get around to doing that at some point in the future, I've never played around with the scenes part of the CK. It seems like all settlements and a lot of "working" NPCs aren't able to do their approaching, so it probably is the AI package not being powerful enough. When I was building the mod it was mostly tested outside of Diamond City since that area was mostly neutral with a small number of NPCs that I could "watch" easy, I never actually tested it inside of a settlement.

 

Currently I've found that NPC settlement visitors added from Human Resources are able to thieve, so I assume that Travelling NPCs and Settlement Visitors NPCs from those mods, and other mods should be ok to be thieves, and do the sneak-walk action, as long as they aren't part of the settlement itself. 

 

I'll upload the version I have now, it's slightly better than the v3 that is there right now, mainly because HP_NotEligible should actually be working correctly now. Plus I added the ability to auto-exclude essential / protected NPCs which can save a bit of time for people as well.

 

Thanks for all the help and effort though. 

Posted (edited)

I installed the latest version and although I had been testing in the past, I had been keeping the mod disabled.  The new version turned it back on(no big deal) but a funny thing happened.  I fast traveled from Home Plate, and one of the mannequins from Home Plate followed me during fast travel and I got alcohol hot-pocketed by the Armor Rack.  Not sure if they can be excluded but they probably should be.  It is pretty funny though!!

 

Spoiler

image.thumb.png.d02b97e62c5faa242a747f723e19afe1.png

 

Edit- As a quick fix I just made the armor racks essential, so they won't activate.

 

Edited by rilieAP
Posted
11 minutes ago, rilieAP said:

I installed the latest version and although I had been testing in the past, I had been keeping the mod disabled.  The new version turned it back on(no big deal) but a funny thing happened.  I fast traveled from Home Plate, and one of the mannequins from Home Plate followed me during fast travel and I got alcohol hot-pocketed by the Armor Rack.  Not sure if they can be excluded but they probably should be.  It is pretty funny though!!

 

  Hide contents

image.thumb.png.d02b97e62c5faa242a747f723e19afe1.png

 

Is that armour rack an NPC ? The mod picks up (almost) any NPC and can make them a Thief. It shouldn't be affecting static objects at all.

 

That is pretty funny though. You can click them and put " setav HP_NotEligible 1 " and that will stop that specific one from being eligible. 

Posted
15 minutes ago, Franco Cozzo said:

Is that armour rack an NPC ? The mod picks up (almost) any NPC and can make them a Thief. It shouldn't be affecting static objects at all.

Pretty sure all armor racks are NPCs, they are defined in DLCWorkshop02.esm as such. So both the replacer I use and the default ones from one of the DLC are NPCs.  A long time ago AAF would grab them if you pressed the quick scene hotkey, which just grabs the closest valid actor.  I just set them all as essential, if not I think I would have to console them all to not be eligible.

image.png.8b92365c9d2dad113be068525f585f83.png

Posted
6 minutes ago, rilieAP said:

Pretty sure all armor racks are NPCs, they are defined in DLCWorkshop02.esm as such. So both the replacer I use and the default ones from one of the DLC are NPCs.  A long time ago AAF would grab them if you pressed the quick scene hotkey, which just grabs the closest valid actor.  I just set them all as essential, if not I think I would have to console them all to not be eligible.

image.png.8b92365c9d2dad113be068525f585f83.png

Thats hilarious, I guess I need to revert a small change I did, give me a few minutes.

 

Posted (edited)
1 hour ago, rilieAP said:

Pretty sure all armor racks are NPCs, they are defined in DLCWorkshop02.esm as such. So both the replacer I use and the default ones from one of the DLC are NPCs.  A long time ago AAF would grab them if you pressed the quick scene hotkey, which just grabs the closest valid actor.  I just set them all as essential, if not I think I would have to console them all to not be eligible.

image.png.8b92365c9d2dad113be068525f585f83.png

Ok I did the fix, placed some Mannequins down in Home Base and they weren't given the Thief alias, so it should be safe now.

Probably try loading a save before you got 0.0.4 since I forgot to ESL-ify the mod before as well, sorry. It might still work anyway without the older save. 

Edited by Franco Cozzo
Posted (edited)
35 minutes ago, genericuser27 said:

Any chance there would be an option for NPCs to snag certain items? Like Condoms/birthcontrol?

 

The theft currently works off keywords, so if the condoms etc have the/a relevant keyword they would already be included as potential theft targets in that category. You could also add one of the keywords below if the items don't have any of them and it would be eligible for theft, assuming it fits into the other eligible criteria like minimum weight and value.

 

ObjectTypeArmor 
ObjectTypeWeapon 
ObjectTypeFood 
ObjectTypeChem 
ObjectTypeStimPak 
ObjectTypeAmmo 
ObjectTypeSyringerAmmo 
ObjectTypeLooseMod 
VendorItemJunk (also base-game lists CA_JunkItems, LootItemsCommon, LootItemsUncommon, LootItemsRare)
ObjectTypeAlcohol 
ObjectTypeDrink
ObjectTypeWater 
ObjectTypeNukaCola
ObjectTypeCaffeinated 
ObjectTypeExtraCaffeinated 

 

There is an exclude formlist as well but they wouldnt be in there, people can load their own mods and add to that list and save as a new mod extension and it should work. 

 

-----

It is possible to add another category for another mod but that would be more of a side-mod than something I would want to add to the core mod itself. 

 

I don't use the mod that you're referring to (Im assuming family planning or something), but if you wanted to do it or try and don't know how, I suggest putting the Functions RollForCategory and FindItemInInventory from the HotPockets.psc into googles AI or whatever AI you use and ask it how to add another category. After that the MCM editing is sort of straightforward if you just look at how it is now and what changes you made. 

---

I am considering adding a "blank" category or 3 for robco to maybe be able to fill in / for other mods at some point. So if you're fine waiting I'll eventually get around to adding those empty groups + the MCM, so someone will be able to make an extension fairly easy using one/more of the new lists and the existing mod that has those items (while also hoping that they aren't using the same slider/group as other extension-mods) . But its unlikey I'd add anything directly myself from a mod I don't personally use. 

Edited by Franco Cozzo
Posted

v0.0.3a, while the timers seemed fixed at first, they are starting to go up again, I’m currently sitting at 8k seconds again. This was not a clean save, though, so it might be because of that.

Posted
8 minutes ago, bondfan86 said:

v0.0.3a, while the timers seemed fixed at first, they are starting to go up again, I’m currently sitting at 8k seconds again. This was not a clean save, though, so it might be because of that.

I havent seen it since but that doesn't mean it isnt happening. 

Did you try the System Reset Hotkey ? 

image.thumb.png.5503aba9862bba2797fcdfdf8250b644.png

It has a chance of working on a dirty save (i believe). Otherwise you can disable the mod, load, save without the mod, enable the mod, load the game.

Theres a decent chance your save is still running off the old script version. But also a decent chance theres still something busted in the mod...haha....

Posted (edited)

Hello!

I had a bit more time to work on the integration today :)
@Franco Cozzo, I noticed that the function to find a valid thief validates the entities it finds with a bunch more stuff, which is awesome!

Not only
(Candidate && Candidate != akPlayer && !Candidate.IsDead())

But also

  • Checks for mannequins
  • Checks for the Actor Value
  • Companion conditions checks and Status
  • Essential, Protected, and Hostile


However, it does not check the engine-level Enabled/Disabled state.
Disabled Actor entities if nearby, still pass the check.


If that entity is still disabled for the entire duration of the attempt, there are no critical effects other than "burning up" an action cycle with an actor that cannot act,  but if that is a dynamically managed entity that enables mid approach, it could have some unforeseen effects.  

Candidate.IsEnabled() or !Candidate.IsDisabled() might be a welcome addition to the validation condition group.

Edited by MSM_Alice
Posted (edited)
41 minutes ago, MSM_Alice said:

Hello!

I had a bit more time to work on the integration today :)
@Franco Cozzo, I noticed that the function to find a valid thief validates the entities it finds with a bunch more stuff, which is awesome!

Not only
(Candidate && Candidate != akPlayer && !Candidate.IsDead())

But also

  • Checks for mannequins
  • Checks for the Actor Value
  • Companion conditions checks and Status
  • Essential, Protected, and Hostile


However, it does not check the engine-level Enabled/Disabled state.
Disabled Actor entities if nearby, still pass the check.


If that entity is still disabled for the entire duration of the attempt, there are no critical effects other than "burning up" an action cycle with an actor that cannot act,  but if that is a dynamically managed entity that enables mid approach, it could have some unforeseen effects.  

Candidate.IsEnabled() or !Candidate.IsDisabled() might be a welcome addition to the validation condition group.

Doesn't seem too difficult to add, I'll do it on the next pass, thanks for the tip(s). 

 

I wonder if disabled are the same as the invisible thieves or if theyre just invisible because of a texture/hair bug. I guess we'll find out in a day or so or so or so.....

Edited by Franco Cozzo
Posted
22 minutes ago, Franco Cozzo said:

Doesn't seem too difficult to add, I'll do it on the next pass, thanks for the tip(s). 

 

I wonder if disabled are the same as the invisible thieves or if theyre just invisible because of a texture/hair bug. I guess we'll find out in a day or so or so or so.....

Hmm.. they might just be the ones perceived as "invisible" .
I haven't tested if one approaches the location of the disabled entity, if the "theiving" still triggers, but it makes sense that it would. 

Posted (edited)

I'm working on the integration some more, to make it as elegant as possible, including tracking when the thieving starts and who the thief is, to stop other systems if the thief and the social commentator from MSMA are the same person or similar oddball cases.

Doing so, and trying to understand the architecture so I can work properly within its assumptions, I have noticed something potentially problematic: 

In the HP_ThiefQuest quest, when you catch the thief (stage 20), there is this Papyrus fragment that is supposed to run, and this fragment is supposed  to grab hold of the HP_IsThiefEscaping Global variable, as the comment there says, "; Assuming HP_IsThiefEscaping is the next form ID in your mod." 

That assumption is wrong.
Maybe it was always wrong, or maybe it  was right  at some point, and then the FormIDs changed when compacting the ESP to have it flag as esl, but the FormID for that variable is 0x27, and not 0x268f 
 

Who knows, maybe you are not even relying on this fragment anymore and doing this from the main scripts.  
But just in case you are relying on this fragment to set that global on 0, it probably does not do it. 


image.png.ca1abbf5f6febb0e5b5bfadb0f167436.png

Edited by MSM_Alice
Posted (edited)

One more question.

In the main script, I see a lot of
HP_ThiefQuest.Start()

HP_ThiefQuest.Stop()
And even some tests on HP_ThiefQuest.GetStage() ( which is the highest completed stage of a quest) 

I am not seeing any HP_ThiefQuest.Reset() between thieving sessions.

Doesn't that mean that once any stage is set, it stays set forever, and once let's say stage 30 is set once, then GetStage will always return 30, and never lower, no matter how many times  Stop() and Start() are ran on it?

I was under the impression that the only way to reset the stage completion status was to do a

Quest.Stop()
Quest.Reset()
Quest.Start()

And not just 

Quest.Stop()
Quest.Start()
 

 

Maybe I am misunderstanding the architecture.

Edited by MSM_Alice
Posted (edited)

The latest version of MSMA that integrates with 0.0.4a Hot Pockets.
https://www.loverslab.com/topic/245511-msma-sexfight-like-succubus-drain-and-bimbofication/page/143/#findComment-7273395

There is something I can't figure out: I can only get one reliable theft interaction to occur if I do not reset the system with that toggle function or the toggle hotkey. 
After the one, everything seems like it should be working, except that the Thief alias never gets populated again, and no approaches ever start again, until the system is reset once more. 

 

Edited by MSM_Alice
Posted
5 hours ago, MSM_Alice said:

The latest version of MSMA that integrates with 0.0.4a Hot Pockets.
https://www.loverslab.com/topic/245511-msma-sexfight-like-succubus-drain-and-bimbofication/page/143/#findComment-7273395

There is something I can't figure out: I can only get one reliable theft interaction to occur if I do not reset the system with that toggle function or the toggle hotkey. 
After the one, everything seems like it should be working, except that the Thief alias never gets populated again, and no approaches ever start again, until the system is reset once more. 

 

 

I hope I didn't break something along the way. But I just loaded to test and it seems like you're right. More work for me fixing stuff I broke.

 

The quest was more of an idea that I kind of abandoned and left as a vestigial thing. If the HP_TheftRecoverable was "1" (mcm has it), then it would just tag the thief and that's about it. 

 

Let me try fix this.

Posted
11 hours ago, MSM_Alice said:

One more question.

In the main script, I see a lot of
HP_ThiefQuest.Start()

HP_ThiefQuest.Stop()
And even some tests on HP_ThiefQuest.GetStage() ( which is the highest completed stage of a quest) 

I am not setting any HP_ThiefQuest.Reset() betweenthieving sessions.

Doesn't that mean that once any stage is set, it stays set forever, and once let's say stage 30 is set once, then GetStage will always return 30, and never lower, no matter how many times  Stop() and Start() are ran on it?

I was under the impression that the only way to reset the stage completion status was to do a

Quest.Stop()
Quest.Reset()
Quest.Start()

And not just 

Quest.Stop()
Quest.Start()
 

 

Maybe I am misunderstanding the architecture.

Honestly I have no idea, I'll add these in as well since it does seem to make more sense than "on/off". 

Posted (edited)

 

 

Just a prerelease version that I haven't tested. Its 0.0.4b except I added some empty formlists so if people have their own mods, or want to build their own custom lists it should be a lot more simple. FormLists have a habit of being baked-in saves from memory, but that could also be developer-error. 

 

Ideally all the items from other mods have their own weight+values already from their own developer, I was considering adding in a minimum or "set" value for them but I'm not sure of the best approach that will stay "clean" across the board. So right now they should just follow the same rules/restrictions as the rest of the items. Maybe I'll add a 4th empty one and give that it's own user-set value amount, sort of like how the Armour and Weapons have at the moment. Anyway, it's here since its 100% untested unlike the previous version that had a little testing before uploading.

 

Edit: This version wouldnt have worked correctly as it didnt have the logic to calculate the total values stolen. + it had then broken invisible + not working KFT that all of  versions 0.3-0.4 had.

Edited by Franco Cozzo
Posted
5 hours ago, Franco Cozzo said:

 

 

A few suggestions regarding the mod. 

1. Right now, the animation for sneaking across a room full of other NPCs looks a bit awkward and even funny. I think it would be good to make the thief’s script a bit more complex: at first, the selected thief simply approaches the player (preferably from behind), and when a certain minimum distance is reached, begins to sneak up. In this case, we don’t know who to suspect or what to expect, which greatly adds to the realism.
You could also add a fake theft option: they approach you, but at the final stage, they don’t crouch down to steal. This heightens the sense of suspicion and distrust.

 

2. When equipping items, it would be good to add either a struggle animation (e.g., from SH) or an animation showing the player’s shock (or a struggle animation from Devious Devices). Currently, the player stands like a statue, showing no reaction, which is very unrealistic.

 

3. For forced drug injection, you could use the healing animation with a syringe for NPCs from the vanilla game.

 

4. Ideally, NPCs should have failed attempts, and in that case, the player can demand their items back or even attack the NPC without consequences.

 

Great mod and idea, thanks anyway. 👍

 

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...