Jump to content

unuroboros

Premium Member
  • Posts

    66
  • Joined

  • Last visited

Everything posted by unuroboros

  1. Awesome. :) In case it helps for this kind of thing in the future, Tes5Edit has a related feature that makes finding merge conflicts super-easy. Load all your mods at the start, wait til background processing is done, then right-click anywhere on the left and choose "Apply Filter For Cleaning". This can take a while. With 100+ mods it can take 5+ minutes. When it's done, you get everything color-coded, and red means a merge conflict. Even better, you can now right-click on the right side and choose to "Hide no conflict rows" to focus on only the diff's. Happy munging. ;)
  2. I'm using these three mods as well, so I'll take a stab at those questions: Make sure you only ever have one of the WIC ESP's active - NMM may activate them all, so double-check. I think in some previous version of W&C you had to use the player-only version of WIC, but the current version states, "If any of the main plugins are installed, fur cloaks will be equipped by NPCs as part of Cold Gear." Any time you've got two mod's changing the same leveled lists, you'll unfortunately need a merge. My advice is to learn to make these yourself, since mod authors won't always release them, or they may be out of date. Plus you may have three mods touching the same LL, and then you have no choice but to make your own merge. Wrye Bash is the tool most people recommend for this job, but I use Tes5Edit myself because I prefer the hands-on drive-it-like-a-stick approach. Neither is that hard to learn, there are lots of tutorials out there. I'll have to speculate on this one, but my hunch is that this may not be safe, depending on circumstances - which NPC's currently have cloaks, or which cloaks you currently have, cloaks that have been loaded into non-respawning containers, that kind of thing. Best case scenario you'd have just a little more bloat in your save... worst case you get CTD's. :\
  3. I'm guessing you needed a clean save? That happens to me a lot, I keep a clean on-hand at all times now. :p I am a big fan of double-tap keybinds in other games (GW2 in particular) so I'm glad you got it worked out! Is this a mod you'll be releasing on Nexus?
  4. While I can't help you out over Skype, I can recommend you read through / watch as many tutorials as you can stomach for Tes5Edit. For merging and cleaning this is the most powerful tool you can get your hands on. You could use it for your first item too, though that might be more straightforward in the CK itself. For your last item, you just need the CK itself. Tes5Edit isn't that tough to learn if you're already pretty familiar with Skyrim in general. Being able to drag-drop values between ESP's and colorize / filter for diff's makes this tool pretty much a must-have for the kind of work you're looking to do.
  5. You do this with Tes5Edit, it's one of the things that tool is very good for. There are plenty of tutorials out there already, but here's the essence of what you'll need to do: Launch Tes5Edit, right-click the list that first shows up, 'Select None'. Then check-box only The Art of Magicka. You may need to look up what its actual ESP file is, sometimes they're named differently. The list is in the same order as your load order, that should help. Expand the mod's node, then expand the Armor node. There should be records for each of the robes you listed. You'll also notice that Tes5Edit shows you two columns: the first column is the original record from Skyrim.esp, and the second column shows how this ESP is overwriting that record. Delete the record in The Art of Magicka. By deleting the record that is overwriting Skyrim.esp's record, the original Skyrim.esp record once again takes effect. Tes5Edit will warn you about the action, since of course you are making changes to The Art of Magicka. If you re-install that ESP, your changes will be lost. A cleaner way to do it is to make an "override": On each of the armor records, right-click the column header for Skyrim.esp and choose "Copy as override into." Tes5Edit lets you create your own new ESP this way. By putting it lower in the load order than The Art of Magicka, you can have Skyrim.esp's original record data overwrite (back to original values) the records for those armors.Sorry for the terse tutorial - as I said, there's more and better information out there on how to use Tes5Edit, if you need something more in-depth. Or PM me if you get stuck on a particular step. I've used Tes5Edit for this kind of editing before, once you get the hang of it you'll see how invaluable the tool is. :)
  6. Papyrus requires you to qualify the script that a function is in, unless you "import" it. GetMappedKey is in the Input script. So you need to call it with "Input.GetMappedKey", or use "import Input". Also, make 200% certain that you actually have Input.pex in your Data\Scripts folder.
  7. I've passed around Actors (and every other kind of type) between functions without problems. The only time you do have to be careful is with an ObjectReference changing containers, since the reference ceases to exist when it goes into a(nother) container - meaning OnContainerChanged can only really make use of its 'self' when dropping items. z, I'm kinda stumped, but I think you're on the right track with the Debug "breakpoints", and I'd suggest adding two more: a TEST4 just inside the IsEquipped block, and a TEST5 just inside the While block. One of those has got to be the culprit, but which?
  8. Here's a quote from the Cinematic ENB that may help: I don't run nVidia on my gaming rig, but I think you almost certainly want AO turned Off, FXAA Off, and AF "Application controlled" - then set Skyrim's own option to at least 8. The INI settings above then tell Skyrim not to request those features either - the goal is to let ENB handle all of this, not Skyrim, not your GPU. I can't attest to it firsthand, but apparently having the nVidia settings on doubles your performance penalty. If you're not sure if ENB is working at all, it probably isn't. Any recent version of ENB puts a super-obvious series of text strings in the upper-left of the game as it's starting (right at the logo), the first of which gives you the version / watermark, the second telling you if ENB's SSAO is on or off.
  9. Script is attached to the armor object, I'm assuming. You've double-checked the value of the Armor1 Property? Tried a clean save? (Changes to Properties can behave strangely in a savegame where that script already exists, already with that Property.) The only thing that really stands out to me is that your while loop depends on both the armor being equipped and CountVal already being greater than 3. Maybe try: Debug.Notification("TEST3. CountVal is: " + CountVal)
  10. CTD at the logo is ALWAYS a dependency conflict. The good news is that finding the problem itself is pretty easy. Bad news is you might not be happy to find out one of the mods you really like (now) requires DLC you don't have. There are many, many posts already about this problem, but here's the gist: Download Tes5Edit, run it and look for the last error it reports. It will tell you exactly which mod has a dependency you are missing.
  11. Seen the same, and I resort to manual download / add when it happens... but I hardly think this is the forum in which to bring up the matter. :) I'd be surprised actually if the NMM folks aren't already aware of it and trying to find some sort of fix (enhancing server uptime, or just getting it off the list), really.
  12. Sounds like a problem I had because of Dawnguard. Does this help? http://forums.bethsoft.com/topic/1400797-cannot-open-dawnguardesm-in-ck-bgslocalizedstringcpp/
  13. For posterity's sake, I worked around this problem (which really sniffs of bug to me) using... SKSE. Event OnItemRemoved(Form akBaseItem, int aiItemCount, ObjectReference akItemReference, ObjectReference akDestContainer) if (!akDestContainer) ; Dropped... elseIf (UI.IsMenuOpen("BarterMenu")) ; Selling... else ; Stashing in a container... endIf EndEvent I used an OnItemRemoved event because, oh my god is OnContainerChanged useless for this kind of thing. (It's hooked up to a player reference alias in a quest.)
  14. Check your enbseries.ini for the [iNPUT] section. In particular the scan codes for KeyReadConfig and KeyUseEffect. The default for KeyReadConfig is the super-annoying backspace key, which you're probably hitting in the console. That doesn't turn ENB off though, it just reloads the ENB config, so you may have something weird mapped for KeyUseEffect itself?
  15. That's a vanilla script. If it's not in your Data\Scripts\Source folder, try using Steam's "Verify Integrity of Tool Cache..." option, you could be missing the bulk of the game's PSC files. (There should be > 10,000 files in the Source folder, is your first clue.) Here it is for reference: Scriptname FXDragonBloodDamageScript extends ActiveMagicEffect {This script applies blood damage geometry to the dragon and turns it on when they are hit based on the direction they are hit from} ;=============================================== ; MARK'S ORIGINAL VARS & PROPERTIES int frontBloodStepper int backBloodStepper int leftBloodStepper int rightBloodStepper int dragonHealth string hitDirection ;0=front 1=right 2=back 3=left float hitAngle Armor Property DragonBloodHeadFXArmor Auto Armor Property DragonBloodTailFXArmor Auto Armor Property DragonBloodWingLFXArmor Auto Armor Property DragonBloodWingRFXArmor Auto Actor selfRef ; JOEL'S VARS & PROPERTIES ; user can override HP percentages float property HPpctT1 = 0.98 auto {relative total HP at which first blood should appear DEFAULT: 0.??} float property HPpctT2 = 0.95 auto {relative total HP at which second blood should appear DEFAULT: 0.??} float property HPpctT3 = 0.90auto {relative total HP at which third blood should appear DEFAULT: 0.??} float property HPpctT4 = 0.80 auto {relative total HP at which final blood should appear DEFAULT: "+HPpctT4} float previousHP float diffHP ; tracking values for the amount of damage each "side" has taken. float HPFront float HPBack float HPLeft float HPRight ; tracking vars for damage to each side ; 0 = no blood, 1 = tier 1 blood, etc. int stateFront = 0 int stateBack = 0 int stateLeft = 0 int stateRight = 0 ; HP tiers. These are the threshold values below which each blood will play float HPt1 float HPt2 float HPt3 float HPt4 bool bDebug = FALSE ;=============================================== EVENT OnEffectStart(Actor Target, Actor Caster) ;Setup stuff has to go here for activeMagicEffect selfRef = caster ; store HP for future use. THis should usually be 100% HP. previousHP = selfRef.getActorValue("health") ; ; debug.TraceConditional("TEST JOEL: Dragon has set previousHP to :"+previousHP, bDebug) ; ; debug.TraceConditional("TEST JOEL: Dragon Blood FX onEffectStart initialized", bDebug) dragonBloodInit() ENDEVENT EVENT onLoad() ; ; debug.traceConditional("TEST JOEL: Dragon has loaded ("+selfRef+")", bDebug) endEVENT EVENT OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) ; first intercept to figure out how much damage was done. ; ; debug.TraceConditional("||===============================", bDebug) ; ; debug.TraceConditional("|| TEST JOEL: DRAGON HP DIAGNOSTIC", bDebug) ; ; debug.TraceConditional("|| TEST JOEL: Dragon previous HP="+previousHP, bDebug) ; ; debug.TraceConditional("|| TEST JOEL: Dragon current HP="+selfRef.getActorValue("health"), bDebug) diffHP = previousHP - (selfRef.getActorValue("health")) ; ; debug.TraceConditional("|| TEST JOEL: Dragon damaged for "+diffHP+"HP", bDebug) ; determine if I was hit in the front/back/left/right hitAngle = selfRef.GetHeadingAngle(akAggressor) if hitAngle >= -45 && hitAngle <= 45 hitDirection = "FRONT" ; decrement a fake HP counter for this side of the body HPfront = (HPfront - diffHP) endif if hitAngle >= 135 || hitAngle <= -135 hitDirection = "BACK" ; decrement a fake HP counter for this side of the body HPback = (HPback - diffHP) endif if hitAngle < -45 && hitAngle > -135 hitDirection = "LEFT" ; decrement a fake HP counter for this side of the body HPleft = (HPleft - diffHP) endif if hitAngle > 45 && hitAngle < 135 hitDirection = "RIGHT" ; decrement a fake HP counter for this side of the body HPright = (HPright - diffHP) endif ; ; debug.TraceConditional("|| TEST JOEL: Dragon was hit from the "+hitDirection, bDebug) ; ; debug.TraceConditional("|| TEST JOEL: "+hitdirection+" HP = "+HPleft, bDebug) ; ============================================== ; check for updates to blood state if hitDirection == "FRONT" int prevStateFront = stateFront if (HPfront <= HPt1) && (HPfront > HPt2) stateFront = 1 elseif (HPfront <= HPt2) && (HPfront > HPt3) stateFront = 2 elseif (HPfront <= HPt3) && (HPfront > HPt4) stateFront = 3 elseif (HPfront <= HPt4) stateFront = 4 endif ; see if there was a change in state for this side if stateFront != prevStateFront ; concatenate and play appropriate blood FX ; ; debug.TraceConditional("|| TEST JOEL: Blood FX State Change: HeadBleed0"+stateFront, bDebug) selfRef.PlaySubGraphAnimation("HeadBleed0"+stateFront) endif endif if hitDirection == "BACK" int prevStateback = stateback if (HPback <= HPt1) && (HPback > HPt2) stateback = 1 elseif (HPback <= HPt2) && (HPback > HPt3) stateback = 2 elseif (HPback <= HPt3) && (HPback > HPt4) stateback = 3 elseif (HPback <= HPt4) stateback = 4 endif ; see if there was a change in state for this side if stateback != prevStateback ; concatenate and play appropriate blood FX ; ; debug.TraceConditional("|| TEST JOEL: Blood FX State Change: BackBleed0"+stateback, bDebug) selfRef.PlaySubGraphAnimation("TailBleed0"+stateback) endif endif if hitDirection == "LEFT" int prevStateleft = stateleft if (HPleft <= HPt1) && (HPleft > HPt2) stateleft = 1 elseif (HPleft <= HPt2) && (HPleft > HPt3) stateleft = 2 elseif (HPleft <= HPt3) && (HPleft > HPt4) stateleft = 3 elseif (HPleft <= HPt4) stateleft = 4 endif ; see if there was a change in state for this side if stateleft != prevStateleft ; concatenate and play appropriate blood FX ; ; debug.TraceConditional("|| TEST JOEL: Blood FX State Change: WingLBleed0"+stateleft, bDebug) selfRef.PlaySubGraphAnimation("WingLBleed0"+stateleft) endif endif if hitDirection == "RIGHT" int prevStateright = stateright if (HPright <= HPt1) && (HPright > HPt2) stateright = 1 elseif (HPright <= HPt2) && (HPright > HPt3) stateright = 2 elseif (HPright <= HPt3) && (HPright > HPt4) stateright = 3 elseif (HPright <= HPt4) stateright = 4 endif ; see if there was a change in state for this side if stateright != prevStateright ; concatenate and play appropriate blood FX ; ; debug.TraceConditional("|| TEST JOEL: Blood FX State Change: WingRBleed0"+stateright, bDebug) selfRef.PlaySubGraphAnimation("WingRBleed0"+stateright) endif endif ; ============================================== ; store our current HP as the previous for accurate maths on future hits. previousHP = selfRef.getActorValue("health") if bDebug == TRUE ; ; debug.TraceConditional("|| TEST JOEL: End of onHit()", bDebug) bDebug = false debugVars() endif endEVENT ; EVENT onDeath(actor myKiller) ; utility.wait(8.5) ; selfRef.PlaySubGraphAnimation("BloodFade") ; utility.wait(1.5) ; ENDEVENT ;==================================================================== ; Initialize a bunch of variables ;==================================================================== FUNCTION dragonBloodInit() ; quick safety net to convert percentages if they are entered incorrectly (ie 75% = 0.75) ; ; debug.TraceConditional("convert % values to integers", bDebug) if HPpctT1 > 1.0 && HPpctT1 < 100 HPpctT1 = HPpctT1*0.01 endif if HPpctT2 > 1.0 && HPpctT2 < 100 HPpctT2 = HPpctT2*0.01 endif if HPpctT2 > 1.0 && HPpctT2 < 100 HPpctT2 = HPpctT2*0.01 endif if HPpctT3 > 1.0 && HPpctT3 < 100 HPpctT3 = HPpctT3*0.01 endif ; store hard point values so we don't have to always work in percentages later HPt1 = HPpctT1 * (selfRef.getBaseAV("health")) HPt2 = HPpctT2 * (selfRef.getBaseAV("health")) HPt3 = HPpctT3 * (selfRef.getBaseAV("health")) HPt4 = HPpctT4 * (selfRef.getBaseAV("health")) ; set fake location HP counters to current(assume full?) HP HPfront = selfRef.getAV("health") HPback = selfRef.getAV("health") HPleft = selfRef.getAV("health") HPright = selfRef.getAV("health") if bDebug == TRUE ; ; debug.TraceConditional("|| TEST JOEL : finished Init()", bDebug) debugVars() endif endFUNCTION FUNCTION debugVars() ; ; debug.TraceConditional("||===============================", bDebug) ; ; debug.TraceConditional("|| DRAGON BLOOD FX VARIABLE READOUT", bDebug) ; ; debug.TraceConditional("|| HPpctT1 = "+HPpctT1, bDebug) ; ; debug.TraceConditional("|| HPpctT2 = "+HPpctT2, bDebug) ; ; debug.TraceConditional("|| HPpctT3 = "+HPpctT3, bDebug) ; ; debug.TraceConditional("|| HPpctT4 = "+HPpctT4, bDebug) ; ; debug.TraceConditional("|| HPFront = "+HPFront, bDebug) ; ; debug.TraceConditional("|| HPBack = "+HPBack, bDebug) ; ; debug.TraceConditional("|| HPLeft = "+HPLeft, bDebug) ; ; debug.TraceConditional("|| HPRight = "+HPRight, bDebug) ; ; debug.TraceConditional("|| stateFront = "+stateFront, bDebug) ; ; debug.TraceConditional("|| stateBack = "+stateBack, bDebug) ; ; debug.TraceConditional("|| stateLeft = "+stateLeft, bDebug) ; ; debug.TraceConditional("|| stateRight = "+stateRight, bDebug) ; ; debug.TraceConditional("|| HPt1 = "+HPt1, bDebug) ; ; debug.TraceConditional("|| HPt2 = "+HPt2, bDebug) ; ; debug.TraceConditional("|| HPt3 = "+HPt3, bDebug) ; ; debug.TraceConditional("|| HPt4 = "+HPt4, bDebug) endFUNCTION STATE markSTATE Event OnLoad() ; ;Debug.Trace("This dragon is loaded, playing animations should work now") endEvent EVENT OnEffectStart(Actor Target, Actor Caster) ;Play your particles. selfRef = caster dragonHealth = selfRef.GetAV("Health") as int ENDEVENT Event OnHit(ObjectReference akAggressor, Form akSource, Projectile akProjectile, bool abPowerAttack, bool abSneakAttack, bool abBashAttack, bool abHitBlocked) dragonHealth = selfRef.GetAV("Health") as int ; ; Debug.TraceConditional("Dragon's health is" + dragonHealth, bDebug) hitAngle = selfRef.GetHeadingAngle(akAggressor) if hitAngle >= -45 && hitAngle <= 45 ; ; Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug) ; ; Debug.TraceConditional("Dragon was hit in front", bDebug) hitDirection = 0 frontBloodStepper = frontBloodStepper + 1 elseIf hitAngle > 45 && hitAngle < 135 ; ; Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug) ; ; Debug.TraceConditional("Dragon was hit on right", bDebug) hitDirection = 1 rightBloodStepper = rightBloodStepper + 1 elseIf hitAngle >= 135 || hitAngle <= -135 ; ; Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug) ; ; Debug.TraceConditional("Dragon was hit in back", bDebug) hitDirection = 2 backBloodStepper = backBloodStepper + 1 elseIf hitAngle < -45 && hitAngle > -135 ; ; Debug.TraceConditional(akAggressor + " angle is " + hitAngle, bDebug) ; ; Debug.TraceConditional("Dragon was hit on left", bDebug) hitDirection = 3 leftBloodStepper = leftBloodStepper + 1 endif if hitDirection == 0 if frontBloodStepper <= 4 ; ; Debug.TraceConditional("Dragon head blood stage0" + frontBloodStepper, bDebug) selfRef.PlaySubGraphAnimation("HeadBleed0" + frontBloodStepper) endif elseif hitDirection == 1 if rightBloodStepper <= 4 ; ; Debug.TraceConditional("Dragon wing r blood stage0" + rightBloodStepper, bDebug) selfRef.PlaySubGraphAnimation("WingRBleed0" + rightBloodStepper) endif elseif hitDirection == 2 if backBloodStepper <= 4 ; ; Debug.TraceConditional("Dragon back blood stage0" + backBloodStepper, bDebug) selfRef.PlaySubGraphAnimation("TailBleed0" + backBloodStepper) endif elseif hitDirection == 3 if leftBloodStepper <= 4 ; ; Debug.TraceConditional("Dragon wing l blood stage0" + leftBloodStepper, bDebug) selfRef.PlaySubGraphAnimation("WingLBleed0" + leftBloodStepper) endif endif ENDEVENT EVENT onDeath(actor myKiller) ; selfRef.UnequipItem(ChaurusSpitSkin) ENDEVENT endSTATE
  16. Tried Google and forum search on this, was surprised at lack of results... My problem is I can't get OnSell to fire... at all. I have it set up on a MiscObject (whose other events fire reliably) and it contains a single Debug.MessageBox, that never shows up, while or after in the barter menu. Has anyone got experience with this event and perhaps its idiosyncrasies? I'd just like to be able to detect when something is sold, without resorting to some hacky trick like checking distance in OnContainerChanged. :\
×
×
  • Create New...