Jump to content

Area check fails


berelinde

Recommended Posts

This is the script associated with LT 29 firing. It should go off 2 minutes after the party is in Baldur's Gate for the second time. Problem is, it's firing in FW2600?!

 

/* Lovetalk 29 */

IF
 GlobalGT("B!KnowBhaal","GLOBAL",0)
 Global("B!GavinLovetalk","GLOBAL",57)
 Global("B!CheckLT29","GLOBAL",0)
 Global("B!GavinRomanceMatch","GLOBAL",1)
 !Global("B!GavinRomanceActive","GLOBAL",3)
 OR(6)
AreaCheck("FW0800")
AreaCheck("FW0100")
AreaCheck("FW0200")
AreaCheck("FW0300")
AreaCheck("FW0600")
AreaCheck("FW0700")  
 InParty(Myself)
THEN
 RESPONSE #100
SetGlobal("B!CheckLT29","GLOBAL",1)
RealSetGlobalTimer("B!GavinLovetalkTime","GLOBAL",120) //2 min
END

IF
 InParty(Myself)
 CombatCounter(0)
 !See([ENEMY])
 Global("B!GavinLovetalk","GLOBAL",57)
 RealGlobalTimerExpired("B!GavinLovetalkTime","GLOBAL")
 GlobalGT("B!GavinFriend","GLOBAL",0)
 !Global("B!GavinFriend","GLOBAL",3)
 Global("B!GavinRomanceActive","GLOBAL",2)
 !StateCheck("B!GAVIN",CD_STATE_NOTVALID)
 !StateCheck(Player1,CD_STATE_NOTVALID)
THEN
 RESPONSE #100
PlaySong(0)
PlaySound("BGAV_S1")
SetGlobal("B!GavinLovetalk","GLOBAL",58)
StartDialogNoSet(Player1)
END

Link to comment

From the decompiled J.

 

IF WEIGHT #63 /* Triggers after states #: 1858 1860 1862 1864 1866 1867 1868 1870 1872 1874 1876 1877 1878 1880 1962 1966 1971 1979 1989 1995 1999 2003 2008 2013 2202 even though they appear after this state */
~Global("B!GavinLovetalk","GLOBAL",58)
~ THEN BEGIN 1817 // from:
 SAY #121346 /* ~It's going to happen soon, you know.~ */
 IF ~~ THEN REPLY #107403 /* ~What is?~ */ DO ~SetGlobal("B!GavinLovetalk","GLOBAL",59)

 

Party left the catacombs, rested, and then this talk went off.

 

I could see it if the area check was contained in the starting conditions, but it's in the timer setting block, so that timer shouldn't even be set until the party is in Baldur's Gate.

Link to comment

So perhaps there is another block of code (possibly legacy development code? I have had that happen several times) that sets ~Global("B!GavinLovetalk","GLOBAL",58)~ ? I guess one way to check would be to add the timer setting conditions to that block temporarily

OR(6)

AreaCheck("FW0800")

AreaCheck("FW0100")

AreaCheck("FW0200")

AreaCheck("FW0300")

AreaCheck("FW0600")

AreaCheck("FW0700")

 

which at least would show you waht was trying to initiate when it fires off 58.

 

Is there any code block you use that uses IncrementGlobal on the LTs?

 

And wow - you were serious when you said you were tailoring things very close to the players responses - you are rivaling Ajantis there, berelinde... that is one heckuva big set of states!

Link to comment

Found something that was a legacy of separating the friendship and romance paths. Might have fixed it, but I'll find out tonight.

 

No, that wasn't it. The only thing that ever set the variable to 58 was this code block.

 

About the only thing I can think of doing is to remove the timer, and have it trigger as soon as the party enters the area.

Link to comment

I am not sure I understand you. The part that contains the variable setting shouldn't return true unless the timer is expired. The timer doesn't expire until 2 minutes after it's set, and it shouldn't be set until the party is in Baldur's Gate.

 

Sorry for being incredibly dense, but would you mind adding comments to the script to show me where this is going on, because I just don't see it.

 

Maybe it would help if I did take out the timer. I only have it there because I hate it when you enter an area and get hit with dialogue right away.

Link to comment

I've decided to simplify the code. Quite frankly, it isn't important that the PC has had each and every LT up to this point. LT 29 is more of a floater, anyway, and should happen when the PC reenters BG regardless of whether or not she's had LTs 27 and 28. So take out that bit of code and make it simpler. Less things to go wrong.

 

The code becomes

 

IF
 GlobalGT("B!KnowBhaal","GLOBAL",0)
 Global("B!LT29","GLOBAL",0)
 Global("B!GavinRomanceMatch","GLOBAL",1)
 Global("B!GavinRomanceActive","GLOBAL",2)
 OR(6)
AreaCheck("FW0800")
AreaCheck("FW0100")
AreaCheck("FW0200")
AreaCheck("FW0300")
AreaCheck("FW0600")
AreaCheck("FW0700")  
 InParty(Myself)
THEN
 RESPONSE #100
SetGlobal("B!LT29","GLOBAL",1)
RealSetGlobalTimer("B!LT29Time","GLOBAL",120) //2 min
END

IF
 InParty(Myself)
 Global("B!LT29","GLOBAL",1)
 RealGlobalTimerExpired("B!LT29Time","GLOBAL")
 Global("B!GavinRomanceActive","GLOBAL",2)
 CombatCounter(0)
 !See([ENEMY])
 !StateCheck("B!GAVIN",CD_STATE_NOTVALID)
 !StateCheck(Player1,CD_STATE_NOTVALID)
THEN
 RESPONSE #100
PlaySong(0)
PlaySound("BGAV_S1")
SetGlobal("B!LT29","GLOBAL",2)
StartDialogNoSet(Player1)
END

 

And then I'd use ~Global("B!LT29","GLOBAL",2)~ as the dialogue trigger (and remember to close it after the first line of dialogue).

 

LT 30, at the entrance to the undercity, was already coded like that, since if the pc hasn't gotten all her LTs, it's a little late to do anything about it now.

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...