berelinde Posted March 31, 2010 Share Posted March 31, 2010 I'm kind of surprised this bug was never detected before, but it's probably because the script block only fires once per day and then moves on. One of my alpha testers found a vanilla game bug in Aerie's script/files. She noticed that Aerie was running the same script block every morning, but that nothing was happening. It's caused by a PartyRested() in the dialogue file that doesn't belong there. This is the script block in aerie.bcs IF IfValidForPartyDialogue(Myself) Gender(Player1,FEMALE) PartyRested() See(Player1) CombatCounter(0) !StateCheck(Player1,STATE_SLEEPING) Global("BAerie10","LOCALS",0) THEN RESPONSE #100 ActionOverride(Player1,DisplayString(Myself,84706)) // ~Running block 36 of aerie.BCS~ Interact(Player1) END And this is the first state of the dialogue block that should be firing but isn't. The problem is that the PartyRested() trigger in the DLG file. Since PartyRested() only returns true the first time the script is run after resting, Aerie will fire off a banter every morning, but the PartyReste() in the DLG is blocking the intended banter from firing. IF WEIGHT #28 /* Triggers after states #: 103 112 124 130 139 152 167 193 201 211 218 224 232 240 270 294 302 306 313 324 335 341 351 364 373 460 even though they appear after this state */ ~PartyRested() Gender(Player1,FEMALE) See(Player1) !StateCheck(Player1,STATE_SLEEPING) Global("BAerie10","LOCALS",0)~ THEN BEGIN 66 // from: SAY #3096 /* ~Ha, it is--it is nice to have a woman in charge for a change. Men always steal the blankets!~ [AERIEB2] */ IF ~~ THEN REPLY #3097 /* ~You slept well then?~ */ DO ~SetGlobal("BAerie10","LOCALS",1)~ GOTO 67 IF ~~ THEN REPLY #3098 /* ~And what do you know of men?~ */ DO ~SetGlobal("BAerie10","LOCALS",1)~ GOTO 68 IF ~~ THEN REPLY #3099 /* ~Women can steal the blankets, too, you know.~ */ DO ~SetGlobal("BAerie10","LOCALS",1)~ GOTO 69 IF ~~ THEN REPLY #3100 /* ~Men will steal more than the blankets if you let them, sister.~ */ DO ~SetGlobal("BAerie10","LOCALS",1)~ GOTO 70 END Falsing out the script block and extending her script with this would solve the first part of the problem. IF IfValidForPartyDialogue(Myself) Gender(Player1,FEMALE) PartyRested() See(Player1) CombatCounter(0) !StateCheck(Player1,STATE_SLEEPING) Global("BAerie10","LOCALS",0) THEN RESPONSE #100 SetGlobal("BAerie10","LOCALS",1) END IF IfValidForPartyDialogue(Myself) See(Player1) CombatCounter(0) !StateCheck(Player1,STATE_SLEEPING) Global("BAerie10","LOCALS",1) THEN RESPONSE #100 Interact(Player1) END Ordinarily, I wouldn't use REPLACE_STATE_TRIGGER or REPLACE_TRANS_ACTION, but here it would kind of make sense. REPLACE_STATE_TRIGGER BAERIE 66 ~Global("BAerie","LOCALS",1)~ And then REPLACE_TRANS_ACTION to close the variable. Also, the tester forgot to go see Raelis after Aerie asked her to twice. Stutter ensued. Here's the script block. IF GlobalTimerExpired("AerieRemindsRaelis","GLOBAL") GlobalLT("AerieReminder2","LOCALS",2) Global("QuayleJob","GLOBAL",1) AreaType(OUTDOOR) AreaType(CITY) !AreaCheck("AR2000") !Global("Chapter","GLOBAL",4) !Global("Chapter","GLOBAL",5) !Global("Chapter","GLOBAL",7) CombatCounter(0) Global("HaerDalisPlotStarted","GLOBAL",0) Global("HaerDalisFree","GLOBAL",0) IfValidForPartyDialogue(Myself) See(Player1) !StateCheck(Player1,STATE_SLEEPING) THEN RESPONSE #100 ActionOverride(Player1,DisplayString(Myself,84715)) // ~Running block 45 of aerie.BCS~ StartDialogNoSet(Player1) END And the dialogue block that's *supposed* to run. IF WEIGHT #26 /* Triggers after states #: 401 417 421 426 431 435 438 444 448 454 457 489 493 even though they appear after this state */ ~GlobalTimerExpired("AerieRemindsRaelis","GLOBAL") Global("AerieReminder2","LOCALS",1) Global("QuayleJob","GLOBAL",1) AreaType(OUTDOOR) AreaType(CITY) !AreaCheck("AR2000") CombatCounter(0) Global("HaerDalisPlotStarted","GLOBAL",0) Global("HaerDalisFree","GLOBAL",0)~ THEN BEGIN 208 // from: SAY #59042 /* ~I suppose you think we don't have time to go and see this Raelis Quayle mentioned. (sigh) Well... if we are near the Five Flagons, sometime, maybe we could drop in? I would like that.~ */ IF ~~ THEN DO ~SetGlobal("AerieReminder2","LOCALS",2)~ EXIT END No idea why this dialogue isn't firing, though. The dialogue trigger list is cluttered, but the variables are the same. Link to comment
devSin Posted March 31, 2010 Share Posted March 31, 2010 I have this fixed locally, so somebody must have known about it (or did I look for all PartyRested() in DLGs and fix?) from at least 2007 (it looks like that's when I last mass-`touch`ed the Ds/BAFs, although there's no way to know when I made this specific change some time prior to that). At the moment, I don't believe your stutter bug is real (not from that code, at least). Maybe you or another mod broke her dialogue? Link to comment
berelinde Posted March 31, 2010 Author Share Posted March 31, 2010 Since the variables all checked out in the saved game, and since I haven't been able to duplicte it locally despite an identical installation, it's possible that it's just a glitch in her installation. I mentioned it only for the sake of completeness. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.