shatsnazzle Posted March 22, 2018 Share Posted March 22, 2018 (edited) Hello all! I've been trying to find a way to get the defense value in Sanctuary without altering WorkshopScript.pex. If I add in a function at the end of WorkshopScript and call the function with an activator button it works just fine but I want to get the value in a non-invasive way and not change any vanilla script source. Here is what worked: Working function at end of WorkshopScript.pex: int Function SafetyCheckup() WorkshopDataScript:WorkshopRatingKeyword[] rating_checkup = WorkshopParent.WorkshopRatings int current_safety = GetValue(rating_checkup[WorkshopParent.WorkshopRatingSafety].resourceValue) as int return current_safety EndFunctionWorking script on an activator button: Scriptname ButtonTest04 extends ObjectReference WorkshopScript property SanctuaryWorkshopREF auto const Event OnActivate(ObjectReference akActionRef) int TheCheckup = SanctuaryWorkshopREF.SafetyCheckup() debug.messagebox(TheCheckup) EndEventAnd here is my attempt at a non-invasive approach on an activator button which always shows a 0 in the messagebox: Scriptname ButtonTest03 extends ObjectReference WorkshopScript property SanctuaryWorkshopREF auto const Event OnActivate(ObjectReference akActionRef) WorkshopDataScript:WorkshopRatingKeyword[] rating_checkup = SanctuaryWorkshopREF.WorkshopParent.WorkshopRatings int current_safety = GetValue(rating_checkup[SanctuaryWorkshopREF.WorkshopParent.WorkshopRatingSafety].resourceValue) as int debug.messagebox(current_safety) EndEventI've tried a bunch of variations of the above and always double check to make sure my properties are initiated. I even made this "crazy-person-attaching-red-yarn-to-newspapers-on-the-wall" level drawing to try to understand wtf is going on in the vanilla code but I don't know how useful or accurate it is: I came up pretty dry on Google and the wiki. Any help would be greatly appreciated, thank you guys and girls! how I feel:https://youtu.be/_nTpsv9PNqo?t=18 Edited March 22, 2018 by shatsnazzle Link to comment Share on other sites More sharing options...
SKKmods Posted March 22, 2018 Share Posted March 22, 2018 (edited) Ratings are exposed as properties or variables on the scripts that you can query: Import WorkshopScript WorkshopParentScript Property pWorkshopParentScript Auto Const Mandatory ; WorkshopParent Quest WorkshopScript WorkshopREF = pWorkshopParentScript.Workshops[iTheIndexIWant] Int iTheValueIWant = WorkshopREF.GetValue(pWorkshopParentScript.WorkshopRatings[pWorkshopParentScript.WorkshopRatingSafety].resourceValue) as Int Replace WorkshopRatingSafety with any of the WorkshopActorValues from line 104 of the WorkshopParentScript. EDIT: for those who feel the need to point this stuff out, no this wont run as is. I don't hand out ready made code any more, rather the primers and pointers. Edited March 22, 2018 by SKK50 Link to comment Share on other sites More sharing options...
shatsnazzle Posted March 22, 2018 Author Share Posted March 22, 2018 Ratings are exposed as properties or variables on the scripts that you can query: Import WorkshopScript WorkshopParentScript Property pWorkshopParentScript Auto Const Mandatory ; WorkshopParent Quest WorkshopScript WorkshopREF = pWorkshopParentScript.Workshops[iTheIndexIWant] Int ValueIWant = WorkshopREF.GetValue(pWorkshopParentScript.WorkshopRatings[pWorkshopParentScript.WorkshopRatingSafety].resourceValue) as Int Replace WorkshopRatingSafety with any of the WorkshopActorValues from line 104 of the WorkshopParentScript. EDIT: for those who feel the need to point this stuff out, no this wont run as is. I don't hand out ready made code any more, rather the primers and pointers. wow Thank you so much SKK50! Again! That's the second time you've answered my scripting question!! :) https://forums.nexusmods.com/index.php?/topic/6452476-quick-question-on-properties-and-dependency/ I attached it to an activator button and it works perfectly!Is the index on the workshops the same for all savegames/players or is everyone's different? I used a while loop to find the index on sanctuary Scriptname ButtonTest03 extends ObjectReference Import WorkshopScript WorkshopParentScript Property pWorkshopParentScript Auto Const Mandatory ; WorkshopParent Quest Event OnActivate(ObjectReference akActionRef) int indexiwant = 0 while indexiwant<28 WorkshopScript WorkshopREF = pWorkshopParentScript.Workshops[indexiwant] Int ValueIWant = WorkshopREF.GetValue(pWorkshopParentScript.WorkshopRatings[pWorkshopParentScript.WorkshopRatingSafety].resourceValue) as Int debug.messagebox(ValueIWant + " " +indexiwant) indexiwant = indexiwant + 1 endwhile EndEventand then distilled it down to: Scriptname ButtonTest03 extends ObjectReference Import WorkshopScript WorkshopParentScript Property pWorkshopParentScript Auto Const Mandatory ; WorkshopParent Quest Event OnActivate(ObjectReference akActionRef) WorkshopScript WorkshopREF = pWorkshopParentScript.Workshops[21] Int ValueIWant = WorkshopREF.GetValue(pWorkshopParentScript.WorkshopRatings[pWorkshopParentScript.WorkshopRatingSafety].resourceValue) as Int debug.messagebox(ValueIWant) EndEventLol I am so excited thanks again!! Link to comment Share on other sites More sharing options...
SKKmods Posted March 22, 2018 Share Posted March 22, 2018 (edited) Happy to help. Can't describe the time and brain pain involved in figuring out that nested mess, its a suppressed memory now. For the base game settlement workshops, they always seem to index the the same order across new games but as I haven't found any relevant script it may not be consistent so always match to a hard REF property to be sure. This is the usual base game order I see at each load across *A LOT* of new game starts: WorkshopAttacks 00 [workshopscript < (0009B1DB)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 101 WorkshopAttacks 01 [workshopscript < (0009B19D)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 02 [workshopscript < (001654BD)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 03 [workshopscript < (0016D28E)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 04 [workshopscript < (00161F4B)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 05 [workshopscript < (0009B197)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 06 [workshopscript < (00066EB6)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 07 [workshopscript < (00019956)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 08 [workshopscript < (001E81EA)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 09 [workshopscript < (0009B1BE)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 10 [workshopscript < (001654D5)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 11 [workshopscript < (00168945)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 100 WorkshopAttacks 12 [workshopscript < (00135A90)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 13 [workshopscript < (0009B1A5)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 14 [workshopscript < (0009B1AC)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 15 [workshopscript < (001654B8)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 16 [workshopscript < (0001D0E2)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 17 [workshopscript < (001F0711)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 6 WorkshopAttacks 18 [workshopscript < (00164321)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 19 [workshopscript < (0009B1F1)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 9 WorkshopAttacks 20 [workshopscript < (0006F5C5)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 21 [workshopscript < (000250FE)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 22 [workshopscript < (0009B1D1)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 100 WorkshopAttacks 23 [workshopscript < (000B3506)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 24 [workshopscript < (00054BAE)>] PlayerOwned True Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 25 [workshopscript < (001654CF)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 26 [workshopscript < (00024A26)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 20 WorkshopAttacks 27 [workshopscript < (000E0505)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 WorkshopAttacks 28 [workshopscript < (0009B18F)>] PlayerOwned False Vassal False Attacks True DaysSinceLast 119 If your interested workshop attack status can be set remotely with WorkshopREF.AllowAttacks = False Edited March 22, 2018 by SKK50 Link to comment Share on other sites More sharing options...
shatsnazzle Posted March 22, 2018 Author Share Posted March 22, 2018 Happy to help. Can't describe the time and brain pain involved in figuring out that nested mess, its a suppressed memory now. Lol I believe it! For the base game settlement workshops, they always seem to index the the same order across new games but as I haven't found any relevant script it may not be consistent so always match to a hard REF property to be sure.. . .If your interested workshop attack status can be set remotely with WorkshopREF.AllowAttacks = FalseThank you again and again SKK50, and happy modding! :) Link to comment Share on other sites More sharing options...
Recommended Posts