Looks like a console setting of the variable for players is the safest way right now to do this. I will keep looking, but from our end we may not be able to help much...
Long Answer:
OK, yup, here is the problem, but I am not sure you want me to fix it...
we do this:
I_C_T ~%tutu_var%DRIZZT~ 10 X#DynaheirQuestAvailable == ~%tutu_var%DRIZZT~ IF ~Global("X#DynaJournal","GLOBAL",0)~ THEN @0 DO ~SetGlobal("X#DynaJournal","GLOBAL",1)~ END
which might change next version for simplicity, since the I_C_T already sets X#DynaheirQuestAvailable = 1, so it doesn't need the extra global we set
But in order for FlySoup's mod to kick off and let Drizzt join, it makes some changes:
ADD_TRANS_TRIGGER DRIZZT 1 ~False()~ DO 0 EXTEND_BOTTOM DRIZZT 1 IF ~~ THEN REPLY @1 GOTO DZ1 END REPLACE DRIZZT IF ~~ THEN BEGIN 3 SAY @4 IF ~~ THEN REPLY @5 GOTO 3 IF ~~ THEN REPLY @6 GOTO DZ2 IF ~~ THEN REPLY @7 EXIT END END APPEND DRIZZT IF ~~ THEN BEGIN DZ1 SAY @2 IF ~~ THEN DO ~JoinParty()~ JOURNAL @3 EXIT END IF ~~ THEN BEGIN DZ2 SAY @8 IF ~~ THEN REPLY @9 GOTO DZ1 END END
I don't think order of install will help resolve the problem.
Even more importantly, if you just add DO ~SetGlobal("X#DynaJournal","GLOBAL",1)~ to any states which are positive, and DrizztSaga is installed, you run the risk of having Drizzt in the party, and having Dynaheir join up, and then Drizzt meets Clone-Drizzt...
luckily, if you do add in the variable, and drizzt gets killed along the way (or the party kills him) then our stuff stops cold so you don't have Drizzt raising from the dead to talk about finding journalpages:
/* Drizzt finds the party and initiates Dynaheir's Quest */ IF %BGT_VAR% Global("X#DynaJournal","GLOBAL",1) Global("X#DQDrizztSpawn","GLOBAL",0) !Dead("drizzt") !AreaCheck("%FishermansLake%") OR(8) AreaCheck("%RedCanyons%") AreaCheck("%SouthBeregostRoad%") AreaCheck("%ArchaeologicalSite%") AreaCheck("%NorthNashkelRoad%") AreaCheck("%BearRiver%") AreaCheck("%XvartVillage%") AreaCheck("%DryadFalls%") AreaCheck("%FireLeafForest%") InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) InMyArea(Player1) !StateCheck(Player1,CD_STATE_NOTVALID) CombatCounter(0) !See([ENEMY]) THEN RESPONSE #100 SetGlobal("X#DQDrizztSpawn","GLOBAL",1) SetGlobal("X#DynaJournal","GLOBAL",2) END IF %BGT_VAR% Global("X#DQDrizztSpawn","GLOBAL",1) InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) InMyArea(Player1) !StateCheck(Player1,CD_STATE_NOTVALID) CombatCounter(0) !See([ENEMY]) THEN RESPONSE #100 SetGlobal("X#DQDrizztSpawn","GLOBAL",2) SetGlobal("X#DQDrizztStart","GLOBAL",1) CreateCreatureObjectOffset("X#DRIZZT",Player1,[100.100]) END IF %BGT_VAR% Global("X#DQDrizztStart","GLOBAL",1) Global("X#DQDrizztApproaches","GLOBAL",0) InParty(Myself) !StateCheck(Myself,CD_STATE_NOTVALID) InMyArea(Player1) !StateCheck(Player1,CD_STATE_NOTVALID) CombatCounter(0) !See([ENEMY]) THEN RESPONSE #100 SetGlobal("X#DQDrizztApproaches","GLOBAL",1) ActionOverride("x#drizzt",Dialogue(Player1)) END
hmmm. I will think about it more, and try to come up with something, but I am not sure this can work out. In this case, even if he used I_C_T or EXTEND_BOTTOM instead of the destructive REPLACE, the problem remains that state 10 is blocked (as far as I can see); and Drizzt joining up definitely blocks state 10 no matter what!!
The only thing I can think of is FlySoup adding our global to the Party Leave dialogue, so that if Drizzt leaves the party or is kicked out, it is set, and then cancelling it out via SetGlobal to 0 when he is joined. That would mean that if Drizzt is helped and yet is not in the party, and is not dead, he could show up to assist in the search for Dy's Journal. This would have no install order dependencies at all. We do this in BG1 NPC so that Sirine's Call can work with our interjections but not mess up Ghreyfain's work.