Jump to content
  • Announcements

    • AndalayBay

      Orphan Attachments   07/31/2018

      I have been doing some housekeeping lately and I've noticed that I had a lot of orphaned attachments. Attachments get orphaned when the PM or post is deleted without removing the attachment first. Deleting a PM or post does not delete the attachment and the file or image remain on the server. I'd like to ask all members to go through their attachments and delete any attachments you don't need anymore or those that have been orphaned. Where can I get a list of my attachments? Click on your display name in the upper right corner of the forums and pick "My Attachments" from the drop-down list. How can I tell an attachment is orphaned? If the PM has been deleted, you'll see a message like this in your attachment list: Unfortunately there is no message if the post has been deleted, so please check your old posts. We do purge old birthday threads every once in a while. Also some hosted projects have been shut down, so you may have orphaned attachments on one of those locations. Thanks!

All Activity

This stream auto-updates     

  1. Today
  2. Northern UI Compatibility

    Here's what I came up with for the placeholder. What do you think? The forums aren't doing a good job of resizing that image. It looks crisper than that. Also, the image is still too big. I set _allowStretch to false, but I guess there's still a zoom factor. I don't think the image needs to fill that spot.
  3. Northern UI Compatibility

    I know what the mouseover script does, but I missed the part about you wanting the values written to the menu's root tile. Initially I tried setting the String trait as you indicated here and that didn't work at all. We need to make sure the code continues to work for those using a mouse. We also need to make sure we don't break the other UI's. If you're using the keyboard or gamepad, what would trigger the mouseover function? The mouseover function is the event handler for the OnMouseover event. Is that a function of your DLL? If user6 and user7 aren't used, then yes, it would be better to use those. I guess I'll have to use the canCreate boolean because user8 won't exist in the other UI's. I'll get complaints if I have Ob XP writing errors to the console. Here's the new script if you'd like to install the CSE and give it a try yourself: scn ObXPUILevelUpMouseoverFn ; Parameters short menuType string_var pathName short buttonId ; Locals long actorVal string_var picture string_var descr string_var sName Begin Function { menuType, pathName, buttonId } ; Safety check if ( menuType != 1027 ) return endif let descr := tile_GetString "%z\_descript", pathName, 1027 let sName := tile_GetString "%z\_name", pathName, 1027 if ( tile_HasTrait "%z\_smallpicture", pathName, 1027 ) ; top-level template let actorVal := tile_GetFloat "%z\_actorVal", pathName, 1027 let picture := tile_GetString "%z\_smallpicture", pathName, 1027 elseif ( buttonId == 100 || buttonId == 110 ) ; _plusImg or _minImg let actorVal := tile_GetFloat "%z\...\_actorVal", pathName, 1027 let picture := tile_GetString "%z\...\_smallpicture", pathName, 1027 else let picture := "Bla" let actorVal := -1 endif ; reset pictures tile_SetString "levelup_background\OXP_attributes\OXP_attribute_picture\filename|Bla", 1027 tile_SetString "levelup_background\OXP_skills\OXP_skill_picture\filename|Bla", 1027 ; write current values to user traits for Northern UI tile_SetFloat "\user6", 1027, actorVal tile_SetString "\user7|%z", descr, 1027 tile_SetString "\user8|%z", sName, 1027, true if ( actorVal >= 0 && actorVal < 8 ) tile_SetString "levelup_background\OXP_attributes\OXP_attribute_picture\filename|%z", picture, 1027 elseif ( actorVal >= 11 && actorVal < 33 ) tile_SetString "levelup_background\OXP_skills\OXP_skill_picture\filename|%z", picture, 1027 endif sv_Destruct pathName, picture, descr, sName End I haven't tested that yet, so it may not work. I'm hoping that you'll only expect the user traits to have real values when the actor value isn't -1. And yes, the damned editors and other forum bits are all kinds of busted. This is IPS 4 and it sucks. We will be switching to other forum software, if I ever get time to finish my evaluations.
  4. Northern UI Compatibility

    In the mouseover function, you set a script variable named actorVal to the value of the trait _actorVal on the tile that has mouseover focus. If the tile in question is not a skill or attribute, you set the script variable actorVal to -1. Similarly, you set the script variable descr to the value of the trait _descript on the tile that has mouseover focus. What I need you to do is write the values of those two script variables to traits on the menu's root tile, so that I can use XML-side <copy/> operators to access them. The user6 and user7 traits aren't used for anything on that specific tile in that specific menu, which is why I picked them. In essence, I want to be able to do this: <visible> <copy src="menu()" trait="user6" /> <!-- actorVal, supplied by the script --> <gt>-1</gt> </visible> <string> <!-- I'd comment out the copy active() stuff --> <copy src="menu()" trait="user7" /> <!-- descr, supplied by the script --> </string> What you're doing at present is setting the _descript trait on the tile that has menu focus, and you're setting it to the value that it already has. You're also not writing the actorVal variable to any tile in the menu. To write to the menu's root tile, you should just be able to do "\traitNameHere". I also (and I just remembered this) need you to get me the name of the actor value as well -- so I need you to get the _name trait, store it in some variable, and write it to... let's say user8 on the menu's root tile. Then, I'll be able to grab that just like the stat description. The "canCreate" boolean should create the trait that you're trying to set if it isn't already specified in the XML. Shouldn't be needed, but it just kinda feels thorough to me. EDIT: And again, if at any point this becomes too bothersome, I can probably set up a DLL-side fix fairly easily. I just don't want to go about messing with that if you're willing to try doing it through script; no use having both of us write code to do the same thing.
  5. Northern UI Compatibility

    Pretty much. It doesn't make sense to me, but I thought that's what you wanted. If I set the String attribute, it didn't work. I had to let the menu do its thing with the active() call.
  6. Northern UI Compatibility

    I can do the scripting, I'm just not following what you're trying to do. Is user6 used by all UI's? Is it always the description? In the mouseover function, the actor value is _actorVal. The local variable is set to -1 when the mouse isn't passing over an attribute or skill. So you're saying you want the -1 to be applied to the menu? User7 seems to be a scroll bar, which doesn't make any sense to me. If you want the actor value to be set to -1 in the menu, then I would be inclined to do it this way: tile_setFloat "%z\_actorVal", pathName, 1027, -1 I don't know what the "canCreate" boolean is for. Do you? If you're sure that user6 is the description and user7 is the actor value, then I can certainly switch to using them. For the record, here are some values for pathName: pathname: levelup_background pathname: bottom_bar\controls\levelup_exit_button pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV3 pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV2 pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV1 pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV0 pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV1 pathname: levelup_background\OXP_attributes\OXP_attributes_pane\OXP_AV1\enumpicker\_plusImg pathname: levelup_background\OXP_skills\OXP_skills_pane\OXP_combatskills\OXP_AV15 pathname: levelup_background\OXP_skills\OXP_skills_pane\OXP_combatskills\OXP_AV16 pathname: levelup_background\OXP_skills\OXP_skills_pane\OXP_combatskills\OXP_AV15 pathname: levelup_background\OXP_skills\OXP_skills_pane\OXP_combatskills\OXP_AV16 pathname: levelup_background\OXP_skills\OXP_skills_pane\OXP_combatskills\OXP_AV18 I really wish the syntax was consistent for those tile_xxx functions.
  7. Northern UI Compatibility

    I'm pretty sure this just sets the description to itself? Like, you get the description from the tile indicated by pathName, and then write the value you get right back to that same tile. EDIT: The new menu file is, uh, without the removal of the "Skills"/"Attributes" label yet. Working on that now. Also, how do I edit a post in raw BBCode? The "quote" button completely broke here, as you can probably see... The part of my post that got eaten by the broken editor is that the top line of code won't work. You get a trait from the tile specified by pathName, and then you write that trait right back to that same tile.
  8. Bethesda.net Discussion

    Yes, of course I'd be perfectly comfortable if the CK were available without need for the Bethesda.net launcher. That doesn't mean I'd rather have it on Steam though. I'd prefer that it be an independent download from their website like the old days with Oblivion. Since they're not going to do that again, I'll settle for using their launcher because it's not a burden on me when I need to use the SSE/FO4 CK. I'm in the CK far more often than I am in the game these days, which I think is normal for most dedicated modders. Steam doesn't represent enough of an inconvenience for me to worry about needing to start it up for a game session. Though again, if it didn't use Steam, I'd be thrilled because I'd be able to throw that monstrosity away for good. I've had my fill of Civ 5 and Civ 6 sucks balls so I don't ever run Steam for anything besides Skyrim and Fallout 4 now. Pretty much everything else I have is available on GoG - where the client isn't even necessary to play the games.
  9. Craftybits 0.812 Bug Reports

    It appears my problem stems from the save, not the scripts themselves. Reverting to an earlier save led to hammering working as it should. As far as I can tell, CBMstEquippedTools(CBET) appears to work at first, then gets stuck. When CBWoodHammer sets its MissionAccomplished to 1 during its GameLoaded reset, that value is not set to 0 by CBET. This causes CBWoodHammer to skip the main block requiring MissionAccomplished to be 0. What exactly is causing CBET to get stuck is unclear so far. It appears what is happening is that phenomenon where a script is throwing errors and the Oblivion engine shuts it off silently. I understand why it works that way, but it can make it really difficult to track down exactly what is going wrong. This is consistent with what you are seeing, since it is working in your hands. The delay you see is that occasioned by the need to find the right targets and speed up execution of the quest. All the quests run on an fQuestDelayTime of 3 (seconds) until CBET finds a target and speeds them up to 0.1. It is likely, but untested, that if all of them ran at 0.1 all the time, it would slow the FPS rate significantly. So when you first start doing something, it is sufficient to swing a wait a few seconds before trying again. EDIT: I followed a hunch and found a solution that fixed my "broken" save. In CBET the quest enders at the top are arranged into a long set of if/elseif statements. I was seeing an indication that in this save CBWoodCarvingQ was stopping. So it occurred to me that the series of if/elseifs might be failing here. I had imagined this set as mutually exclusive, but that is incorrect. It is entirely possible for more than one CBET dependent script to be active at one time, though in principle it shouldn't happen. So it actually hints that CBWoodCarving isn't ending when and how it should, which might be the real source of the trouble. But in any case, there is no good reason to leave the quest stoppers in a state as if they are mutually exclusive, so I made them into a series of if statements and the problem disappeared. CBWoodHammerQ stopped, then restarted and everything worked as it should.
  10. Northern UI Compatibility

    Here's the new plugin. It seems to work with the other UI's, but I haven't tested all of them yet. If it works with one, it should work with them all. Could you upload your new levelup menu? I've got a placeholder image that I'd like to play with and I don't feel like figuring out how to get it coded up.
  11. ObXP

    ObXP View File ObXP plugin with mouseover changes. Submitter AndalayBay Submitted 10/22/2018 Category The Collective  
  12. Northern UI Compatibility

    Got it! This turned out to be tricky. Setting the string value caused a conflict between the mouseover code in the plugin versus the active() call in the menu. As you moved the mouse around, you'd get overlapping descriptions due to the difference in timing. The solution was to set the actual trait and let the menu code continue to set the string. I decided not to mess with the skills or attributes sub-title on the description. Can we remove that? The skill or attribute should be highlighted so people will know whether it's a skill or attribute description. Trust me, they'll know anyway. Here's the new mouseover function code: scn ObXPUILevelUpMouseoverFn ; Parameters short menuType string_var pathName short buttonId ; Locals long actorVal string_var picture string_var descr Begin Function { menuType, pathName, buttonId } ; Safety check if ( menuType != 1027 ) return endif if ( tile_HasTrait "%z\_smallpicture", pathName, 1027 ) ; top-level template let actorVal := tile_GetFloat "%z\_actorVal", pathName, 1027 let picture := tile_GetString "%z\_smallpicture", pathName, 1027 let descr := tile_GetString "%z\_descript", pathName, 1027 elseif ( buttonId == 100 || buttonId == 110 ) ; _plusImg or _minImg let actorVal := tile_GetFloat "%z\...\_actorVal", pathName, 1027 let picture := tile_GetString "%z\...\_smallpicture", pathName, 1027 let descr := tile_GetString "%z\_descript", pathName, 1027 else let picture := "Bla" let actorVal := -1 let descr := "" endif ; reset pictures tile_SetString "levelup_background\OXP_attributes\OXP_attribute_picture\filename|Bla", 1027 tile_SetString "levelup_background\OXP_skills\OXP_skill_picture\filename|Bla", 1027 if ( actorVal >= 0 && actorVal < 8 ) tile_SetString "levelup_background\OXP_attributes\OXP_attribute_picture\filename|%z", picture, 1027 tile_SetString "%z\_descript|%z", pathName, descr, 1027 elseif ( actorVal >= 11 && actorVal < 33 ) tile_SetString "levelup_background\OXP_skills\OXP_skill_picture\filename|%z", picture, 1027 tile_SetString "%z\_descript|%z", pathName, descr, 1027 endif sv_Destruct pathName, picture, descr End This was a function that Kyoma wrote after he switched to the new syntax. I was hoping that he allowed for more than one parameter and indeed he did. I'll do a bit more tidying up and then will post a new plugin.
  13. Bethesda.net Discussion

    Breaking up with Steam? Thumbs up for that. Then they could do so much better with the launcher by making it an ini configurator for both the game and kit as well as an updater. And make available APIs for displaying stats for fun stuff like this.
  14. Yesterday
  15. Craftybits 0.812 Bug Reports

    Tried making the if statement for hammering staves as another elseif for the plank/harrada instead of as a standalone if statement? if eval rTarget.GetIsID CBPlankHard == 1 || rTarget.GetIsID CBPlankSoft || rTarget.GetIsID CBPlankSalv ... elseif eval rTarget.GetIsID CBStaveHarrada ... elseif eval ( CompareName stave rTarget == 1) ... else set Reset to 1 ; DebugPrint "CBWoodHammerQS: No valid target found" endif To clarify, what we had before we started patching was something like: if eval ( CompareName stave rTarget == 1) ... elseif eval rTarget.GetIsID CBPlankHard == 1 || rTarget.GetIsID CBPlankSoft || rTarget.GetIsID CBPlankSalv ... elseif eval rTarget.GetIsID CBStaveHarrada ... else set Reset to 1 ; DebugPrint "CBWoodHammerQS: No valid target found" endif We'd hit the elseif for stave, first, and that'd set everything to stave construction. Afterwards, if eval ( CompareName stave rTarget == 1 && Mode != 30 && Messaged != 3 ) ;ensure harrada construction has not initiatedwas placed after the else set Reset to 1. T'be honest, I haven't been getting that same error. A tad bit of a lag and the script resetting & stopping before the messagebox came up and thus needing to try again, but that's it.
  16. Craftybits 0.812 Bug Reports

    Hammering a hardwood or softwood plank to make a wood panel is not working. The script is running and recognizes the hammer, but the menu isn't coming up and I'm not scoring any hits on the board. I've tried some debugging but without success. HoundAkragth, if you find the time, perhaps you can have a look and see if you spot anything amiss. CBWoodHammerQS is the script in question. CBWoodCarvingQS is very similar, just uses a blade instead of a hammer and it is running as it should. That may help to track down the problem. I'll have a look myself in the AM when I'm fresh but right now I'm just spinning my wheels.
  17. Bethesda.net Discussion

    So for us it's opposites with Steam and Beth Launcher. I have Steam launch on Windows start, meaning I never need to wait if I want to run any of the many games (plus old CK) I have on Steam, but Beth Launcher offers only one single thing, which is installing the CK, so for me there's no point in it existing. You must have Skyrim on Steam, so you'd need it running to play the game, but perhaps otherwise have no further use for Steam other than to play Skyrim and to launch old CK. However That doesn't actually make the Beth Launcher useful to you either, it's simply that it doesn't require Steam. You'd be just as comfortable if the Beth Launcher didn't exist and the SE CK was a downloadable installer from their website instead.
  18. Bethesda.net Discussion

    The problem, again, with Steam is that you have to run the client. Every time. I don't want to do that. The Bethesda.net launcher allows me to avoid using it whenever I pop open the CK which means it's not inconveniencing me by sitting around waiting on Steam to load and do all of its update checks. Offline mode in Steam is an utter joke. Something I'd consider urban myth at this point. Of course, I think my anti-Steam stance is well known in the community. I use it grudgingly because Skyrim has not yet been moved off the platform to either Bethesda's launcher or GoG. Otherwise I'd very likely have deleted it entirely and closed my account with Valve. It's a terrible platform that's far more anti-consumer than even Origin is.
  19. Bethesda.net Discussion

    You do need to use the Bethesda.net launcher before uploading a mod to Bethesda.net and the reason for that is at least what I think it is. Is that your Steam account is linked to your registered account at Bethesda.net, which all registered members must have in order to download and install mods via the in-game mod manager and those who are playing Skyrim on the console cannot use mods from Bethesda.net without linking a valid Steam account to the account one have on Bethesda.net.
  20. Bethesda.net Discussion

    That doesn't make any sense. You find the Beth Launcher conevnient because you don't need to run it every time, so you're not using it, thus it serves no purpose and is not convenient. It's bloatware, installed just to enable installing the CK, when the CK could just as easily have been installed through other methods which all players of Skyrim SE are guaranteed to have. Skyrim SE is a Steam-only title, so all players have Steam. All Beth needed was to provide a direct download link like for Oblivion's Construction Set, or put it into Steam like the CK for Skyrim LE. Preferably both so that people who like to keep Steam open all the time can be happy and people who hate Steam can be happy too. EDIT And I don't know what this fight with Steam might be for CK for SLE? The old CK ran smoothly for me every time I launched it, just like the game.
  21. Craftybits 0.812 Bug Reports

    OK, that is convincing. I'll make the change. Thanks very much for your help. EDIT: After a closer look, I see that the basket is a dynamic reference. It used to be a permanent reference, as described above, but I found it could be dynamic and changed it several years ago. But factoring in AndalayBay's tips, I'm wondering if the change may play a role in the current problem. It would be easy to switch back to a permanent reference, should that be necessary.
  22. Craftybits 0.812 Bug Reports

    Don't think you can pick up the basket? If I'm not wrong, activating the basket won't do anything but give you the message you need to put away the Lute. And putting away the lute actually just disables and... I think deletes the reference. It certainly goes nowhere near the inventory, though I'm not entirely certain what would happen if the player tried to activate an activator belonging to someone. ...Can activators be picked up? It doesn't appear to actually be an item that can... Anyway. Basically, I was noticing Isault (I may be misspelling as this is all from off the top of my head and 2:11 AM in the morning for me) wouldn't donate, at all; neither would Cam. Check the script package they were on - was the one for finding the activator object - and forcing them to evaluate the package looked like they walked over... and refused to activate said object. I toggled SetOwnership to Isault, worked fine. Removed SetOwnership, worked fine. Lowered responsibility to pretty low, looked like it worked fine. So... Workaround? Sure, probably. I need more testing b/c I hadn't tried it on Cam yet.
  23. Craftybits 0.812 Bug Reports

    Correct about the comment being erroneous, or more correctly obsolete. It now reads: elseif eval( iProc == 1 ); meat and fish conversions set Equip to 1 Player.PlayGroup CastTouchAlt 1 set Num to rConvRef.GetRefCount Player.AddItem rNew Num Originally iProc 1 covered other things, but they were systematically removed, leaving only the meat and fish conversions. I believe the stack conversion will work fine, I just hadn't thought of it. In theory you are right about the lack of rConvRef.Activate but there are only two conditions in which Equip is set to 1. In one case, it requires a drawn weapon, making the activation unnecessary and in the other we're converting fish or meat, so there is no need to activate. I'll add a note for future reference but leave the code unchanged. You are right about if eval( nameIncludes $sInclude rConvRef && GetObjectType rConvRef != 25 ) not working. I discovered the problem during testing and fixed it. I like your suggestion to speed the code and verify type. I implemented this way: if eval( Grabbing == 0 && rConvRef != 0 ) ForEach arTemp <- arConvert if eval( ar_HasKey arTemp["Value"] 4 ) if eval( arTemp["Value"][4] == 1 && rConvRef.GetObjectType != 25 ) continue endif endif I added a second 'if' to ensure they are executed in the right order. If memory serves, obse handles statements connected with && from right to left. By doing the value check first, it ensures it runs first and the other two do not run unless that one is true, whether my recollection of the order of execution is correct or not. The array check with key 4 can cause a crash if there is no value there, so it should be contingent on the presence of a value. I'm in the process of some in-game testing, so I'll run some tests to see where things stand.
  24. Craftybits 0.812 Bug Reports

    So far we haven't used any command specific to OBSE 21, but there are some from OBSE 20, so that is what we've been using as the requirement. Given the slightest need, I wouldn't hesitate to require 21, there just hasn't been a need so far. Music is working, at least to a degree. It could be that it isn't working on all NPCs, but certainly it works on some, since I've tested it and seen things added to the basket. Even if it is slightly broken, it may not matter since the in-game result seems about right. Which is not to say that I am not interested in a fix, only that I had no idea there was a problem. I appreciate the help. As HoundAkragth pointed out, the first problem is figuring out how to test it properly. If the basket is not set to be owned by the player, what happens when the player finishes and goes to pick up the basket? Without SetOwnership, the ownership is that of the ground it is placed on. Sometimes that won't be a problem, but in other instances it could lead to your basket belonging to someone else. There may be an easy way around that problem, but it could be a problem that needs to be dealt with. The MusicBasket is a permanent reference, normally stored in the basement of the CBGuildHall, a hidden cell added by CB, and transported to the player as needed. Perhaps if it is assigned to the player first, SetOwnership isn't needed. SetOwnership is also a bit tricky because I've found it often behaves like a return or at least can impact code downstream of itself. So I try to put it as late in a block of code as possible. Thanks for the tips regarding the BonePile. It tests successfully in game, but it is possible I've always opened the bone pile when testing and thus never seen the problem. I'll get back to you on the CBKey suggestions. They look good.
  25. Craftybits 0.812 Bug Reports

    Odd. It sounds like it's hit or miss. What's the intelligence of the NPC's involved? It's a stretch, but I remember that the Gamebryo engine had some surprising features, even to Bethesda, so it might be worth checking out.
  26. Craftybits 0.812 Bug Reports

    Hm. Then to all appearances this shouldn't be working at all, even to the extent it is. What's getting some - but not all - NPCs to activate it? Thanks, though. I'll go see if there is an example of an activator + AI package.
  27. Craftybits 0.812 Bug Reports

    A find package is used to find an object. The object has to be persistent. If you want the NPC to activate an activator, I don’t think a find package will work. I took a look at the various package types and I’m not sure what would get an NPC to activate an activator. That has to be doable though. I would look at the various activators in the game, do a text search for the editor ID and see if I could find one that’s the object of an AI package. If you can’t find one, then another option would be to use a marker in a trigger zone. Give the NPC a travel package to the marker, which would set off the trigger zone. Then have the trigger zone set off your activator. Yeah, that’s ugly. Hopefully there is a package that would get an NPC to activate an activator. Actually you could probably just get the NPC to travel to the activator. Put a trigger zone around your activator and it would trigger your activator. It doesn’t look like a travel package to an activator would get an NPC to activate it, but it’s worth a try.
  1. Load more activity