Jump to content

gigantibyte

Members
  • Posts

    372
  • Joined

  • Last visited

Nexus Mods Profile

About gigantibyte

Profile Fields

  • Country
    Canada

gigantibyte's Achievements

Proficient

Proficient (10/14)

  • First Post
  • Collaborator Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

0

Reputation

  1. Like all the other ESP mods, but for ginseng flora. There's so little of it in the game, and it can be difficult to see among the other plants. Required component of Steeped Aster Tea.
  2. Is it possible to create a script that will call up an advanced options menu, within the game? Preferably, I'd like to create a MCM menu that the player can view instantly, rather than Options > MCM > mymenu. But if MCM is not required, that's great too. I'd like to present the player with something that looks like this: The default Message Script can only be pushed so far in presenting the player a variety of options. With my mod Container Magic, I had to create over 100 message menus to cover all the possibilities. With check boxes, dropdowns, and sliders, I could have the options on one page and eliminate the mod's current clunky interface..
  3. Casting does seem to be a good alternative to having several different functions tor type conversions, like string(integer). When my mod is finalized, may I post the scripts here for review? The first script is just for adding a tool to inventory, and the other two are fairly short. Initial tests are producing the desired results, but there are any number of things I could be doing wrong.
  4. Of course that's what's it called! :laugh: Turns out, casting was the last little bit I needed to get the fundamentals of my mod working. In the end, no quasi global exposed variable wannabes were required, but they were useful for debugging, Thanks for the advice! If I ever publish my little mod, a fetch quest might be more interesting than just adding the utility to the player's inventory.
  5. In the old days, I'd just create some quest variables which were easy enough to manipulate from other scripts. With Papyrus I'm ignorant. Is there a tutorial on this subject somewhere? Specifically, I'd like to obtain and save an Object Reference in one script, then use that object reference in another script. Also, for debugging purposes, sometimes it would be useful to see the contents (like the form ID) of an object reference variable in a debug.messagebox. Is that possible?
  6. My mod has a few form lists that contain base ids of various static objects. Originally these lists could be customized by the user in-game, but it was too much of a performance drain. So "edit mode" will be resurrected in the mod's forum section, where players can submit new base IDs to be included in the next version's default sets. In the top forum post, I will list the base IDs already included and update the post with new entries. Is there any way of sending my mod's form list information to a text or log file? I don't mind copying the information form by form, but I'm hoping a better method or tool exists. It's easy enough to view the information in FNVEdit for instance, but the program doesn't appear to feature any copy-to-text options. Ideas? Any help appreciated. Thanks.
  7. Perhaps you guys already know this, but I have come to notice a peculiarity with form lists that are modified via scripts. If a player loads a save file after starting the game for the first time, the form list contains the correct data from the last save. However, if the form list is modified through the course of play and then the same save file is loaded again, the form list retains the the newer modified version. Only restarting the game "resets" the form list information back to what it should be. At least, this is what I'm experiencing. Please let me know if there's something on my end that could be causing this behavior. If not, my question is, would I have better results if my script used arrays to store object form information instead of form lists? Edit: To answer my own question, the answer is yes. Arrays work better at storing a dynamic list of forms, and don't exhibit the behaviour as form lists I described above. Dang. I've got a bit of re-scripting to do.
  8. Do you have the Mod Configuration Menu installed? I don't know much about the internal mechanisms of Project Nevada Rebalance, but there are several settings that can be tweaked.
  9. Thanks. I just got back into playing NV because of mods like Tales of Two Wastelands and Project Nevada. I felt an alternative to instant heal stations were needed to go with my hardcore mode. Btw, I think I figured out the mystery additional health points awarded to other actors. It may have had something to do with setting the duration to 0 on the effects. Setting them to 1 second seems to have prevented the spell from awarding more than it should... within a few decimal points at least.
  10. To be honest, I'm not a fan of multi-level nests in any case. I reconfigured the script as you suggested, and you can view the new campfire script below, verified as working. I also uploaded the latest version of my mod which contains this here: http://www.nexusmods.com/newvegas/mods/57418/? scn UltmSCampfireScript Ref User ref rActor int MenuChoice int awaitingInput int LightFire Short Burning float timer ref FireSmall01ref ref MPSFireSmall01ref ref Fire420ref ref FXFireSmallFortSummit02ref ref FXSmokeSmall01ref ref Light short doonce int count int rCount int BurnTime int NewHealth int Healing array_var rActorArray Begin OnActivate Set User to GetActionRef If GetActionRef != Player User.Activate Elseif GetActionRef == Player if Burning player.showrecipemenu CampfireRecipes else let awaitingInput := 1 messageboxEX "Scavenger Campire options:|Light campfire|Reclaim wood|Cancel" endif Endif End Begin MenuMode if awaitingInput == 1 Let MenuChoice := GetButtonPressed if MenuChoice == -1 return endif let awaitingInput := -0 if MenuChoice == 0 let LightFire := 1 elseif MenuChoice == 1 player.additem UltmScrapWood UltmSMainQuest.ScrapWoodCount disable markfordelete endif endif end Begin GameMode if LightFire let LightFire := 0 PMS Smoke01 set FireSmall01ref to placeatme FireSmall01 1 set MPSFireSmall01ref to placeatme MPSFireSmall01 1 set Fire420ref to placeatme Fire420 1 set FXFireSmallFortSummit02ref to placeatme FXFireSmallFortSummit02 1 set FXSmokeSmall01ref to placeatme FXSmokeSmall01 1 set Light to placeatme FireBrightOrangeAmb 1 set Burning to 1 let BurnTime := 10 * UltmSMainQuest.ScrapWoodCount endif if Burning && Healing == 0 if timer < BurnTime let timer += GetSecondsPassed if count <= timer let count += 1 ; make sure a full second passes, not a fraction let Healing := 1 endif else sms Smoke01 FireSmall01ref.disable FireSmall01ref.markfordelete MPSFireSmall01ref.Disable MPSFireSmall01ref.MarkForDelete Fire420ref.Disable Fire420ref.MarkForDelete FXFireSmallFortSummit02ref.Disable FXFireSmallFortSummit02ref.MarkForDelete FXSmokeSmall01ref.Disable FXSmokeSmall01ref.MarkForDelete Light.Disable Light.MarkForDelete Disable MarkForDelete set burning to 0 set timer to 0 endif endif if Healing if GetDistance player <= 150 player.CastImmediateOnSelf UltmSCampFireSpell endif ;look for other actors in the same cell let rActorArray := Ar_Construct "array" set rActor to GetFirstRef 200 1 ; * 200 == actors while rActor != 0 if rActor.GetDead || rActor.GetDisabled || rActor.GetIsCreature ; skip else let rActorArray[rCount] := rActor let rCount += 1 endif set rActor to GetNextRef ; * make sure this is within the loop or CTD loop ;heal found actors who are close enough to campfire while rCount > 0 let rCount -=1 let rActor := rActorArray[rCount] if GetDistance rActor <= 150 rActor.CastImmediateOnSelf UltmSCampFireSpell endif loop let Healing := 0 endif end Begin Onload if DoOnce && Burning ;player left the scene before the campire expired FireSmall01ref.disable FireSmall01ref.markfordelete MPSFireSmall01ref.Disable MPSFireSmall01ref.MarkForDelete Fire420ref.Disable Fire420ref.MarkForDelete FXFireSmallFortSummit02ref.Disable FXFireSmallFortSummit02ref.MarkForDelete FXSmokeSmall01ref.Disable FXSmokeSmall01ref.MarkForDelete sms Smoke01 elseif DoOnce == 0 let DoOnce := 1 endif endOne strange result though. An effect magnitude of 10 on limbs now restores 10 units of limb health, on both the player and actors. I had to reduce it down to 1 to get 1 unit of health a second while the campfire is burning. No idea why that happened.
  11. @ It seems to be functioning properly. Is there any danger other than not finding the target to heal?
  12. Woohoo! I finally got the effect functioning as desired. ^ This is indeed the best solution. Modifying the health values in a controlled fashion through script alone is tricky. So I created a new "spell" that used several effects. There is an inherent effect called 'Restore Health Stimpak' effect, which modifies both health and conditions, but the magnitude value works on different scales for health and limbs. A magnitude of 1 for instance restores 1 unit of health, but only 0.1 units of limb condition. Here's what the "spell" looks like: http://i.imgur.com/7UrXjbU.jpg There's also a separate restore effect for all limbs, but without checks to prevent condition values over 100. I had to add that condition myself for each limb like this: http://i.imgur.com/KGl2IEu.jpg Finally, although 'Restore Health' didn't allow the player's health to go over the maximum, it did set the companion's health over the limit. Since each companion would have a different maximum health value, I had to add a check for this in my script, and "damage" the health back down to normal. Here's the script section for regeneration: if Burning == 1 if timer < BurnTime let timer += GetSecondsPassed if count <= timer let count += 1 ; make sure a full second passes, not a fraction if GetDistance player <= 150 player.CastImmediateOnSelf UltmSCampFireSpell endif set rActor to GetFirstRef 200 1 ; * 200 == actors while rActor != 0 if rActor.GetDead || rActor.GetDisabled || rActor.GetIsCreature ; skip else if GetDistance rActor <= 150 rActor.CastImmediateOnSelf UltmSCampFireSpell if rActor.GetBaseActorValue Health < rActor.GetAV Health rActor.DamageAV Health 1 endif endif endif set rActor to GetNextRef ; * make sure this is within the loop or CTD loop endif elseRestoration is slow, but a distance of 150 seems reasonable in-game. Move too far away, and the regeneration stops. As for the speed, I think I'll leave it the way it is, and wait for comments. At present it takes 100 seconds to fully restore a limb from a condition of 0, give-or-take a few decimal points. Also, my companion ended up with a Health value of 1 over the base. An acceptable result I think. No limbs went over 100 which is great.
  13. It doesn't hopefully through the use of a control variable, but maybe my script is configured incorrectly and the scrap wood will never disappear. Could you review the following? scn UltmScrapWoodScript ref User int awaitingInput int MenuChoice int DoOnce Begin onActivate let UltmSMainQuest.ScrapWoodCount := GetRefCount Set User to GetActionRef If GetActionRef != Player User.Activate Elseif GetActionRef == Player let awaitingInput := 1 messageboxEX "What would you like to do?|Assemble wood for campfire|Take|Cancel" endif end Begin MenuMode if awaitingInput == 1 Let MenuChoice := GetButtonPressed if MenuChoice == -1 return endif let awaitingInput := -0 if MenuChoice == 0 if GetRefCount >= 5 let UltmSMainQuest.CamfireRef := placeatme UltmSCampfire 1 let UltmSMainQuest.ScrapWoodCount := GetRefCount disable markfordelete else messageboxEX "Not enough wood" endif elseif MenuChoice == 1 player.additem UltmScrapWood UltmSMainQuest.ScrapWoodCount disable markfordelete endif endif end Begin Onload if DoOnce disable markfordelete else let DoOnce := 1 endif end Right now though, I'm having fun trying modify health and body parts gradually. Using a Setav can make a body part health go over the base of 100, and since Setav affects base, I can't use it on Health. RestoreAV on the other hand seems to restore up to the value given, so I can't do a RestoreAV Heath 1 every second to restore 1 unit of health. Maybe something like this: if (rActor.GetBaseAV Health) > (rActor.GetAV Health) let NewHealth := (rActor.GetAV Health) + 1 rActor.RestoreAV Heath NewHealth endif then repeat for each body part, like PerceptionCondition, but with 100 instead of GetBaseAV. Edit: "let UltmSMainQuest.CamfireRef := placeatme UltmSCampfire 1" above is actually useless. It turns out I didn't need to pass the reference anywhere.
  14. Thanks! A related question if you know. To create a campfire players need to drop some scrap wood and activate it. In case the player just leaves the scrap wood on the ground, I'd like it to be eventually deleted. According to the page for MarkForDelete "With items that can be dropped from inventory but work on their own, every drop and every pickup is a disable." Does this mean I don't need to include Disable in the scrap wood's object script? My intention is do a MarkForDelete on the scrap wood as soon as it is dropped, but obviously it can't be disabled right away. It would just be a fail safe, because under normal use the scrapwood will be disabled upon building a campfire, and the campfire will be diabled once it burns out. Edit: Nevermind. I setup the object script to disable/markfordelete in the Onload block, after it has loaded at least once normally. So mostly everything is working as envisioned. Drop some wood, then activate it to assemble the wood into a campfire form. Click on the assembled wood again to light the fire. Once the fire is lit, the GetFirstRef/GetNextRef loop runs, and it does indeed find actors. (I scripted a popup to appear each time one was found.) It just doesn't seem to be finding the player, and there isn't any distance condition yet. I set the loop to award a cap to each actor found, but my wallet never grew. Not sure what's up... Maybe the player is not supposed to be found?
×
×
  • Create New...