Hi,
Here is what I posted in my blog when I encountered this problem:-
"My solution was to apply a search for all light objects (that I might later need to reference) at the start of the game, and add a local variable to them which I could search for instead. Add to that a change in the way I searched for lights, using GetNearestObject for a LIGHT object rather than by its tag, and I believe I have now fixed all light references in my modules."From this blog post:-
http://worldofalthea...era-action.htmlCheers,
Lance.
And for those who like to look at code, here is an extract from my module heartbeat code that handles all module lighting. Obviously, you will have to reinterpret what you need from it:-
// INITIALIZE AT ZERO TO FORCE STATE CHECK
int AreaMoodSet = GetLocalInt(oAreaPC, "AreaMoodSet");
// NIGHT SET
if(!GetIsDay() && (AreaMoodSet == 2 || AreaMoodSet == 0))
{
SetLocalInt(oAreaPC, "AreaMoodSet", 1);
//SendMessageToAllPCs("ACTIVATE AMBIENT AT NIGHT");
// NIGHT FIREFLIES SETUP
int iCount = 1; object FliesWP = GetNearestObjectByTag("FireFlies", oPC, iCount);
while(FliesWP != OBJECT_INVALID)
{
CreateObject(OBJECT_TYPE_PLACED_EFFECT, "alb_fireflies_big", GetLocation(FliesWP));
iCount = iCount + 1; FliesWP = GetNearestObjectByTag("FireFlies", oPC, iCount);
}
// NIGHT FOG SETUP
iCount = 1; object FogWP = GetNearestObjectByTag("GraveyardWP", oPC, iCount);
while(FogWP != OBJECT_INVALID)
{
CreateObject(OBJECT_TYPE_PLACED_EFFECT, "graveyardfog", GetLocation(FogWP));
iCount = iCount + 1; FogWP = GetNearestObjectByTag("GraveyardWP", oPC, iCount);
}
// INITIAL DESTROYME LIGHT SETUP
iCount = 0; object oLight = GetObjectByTag("DESTROYME", iCount);
if(oLight != OBJECT_INVALID)
{
while(oLight != OBJECT_INVALID)
{
SetLocalInt(oLight, "DESTROYME", 1);
iCount = iCount + 1; oLight = GetObjectByTag("DESTROYME", iCount);
}
}
// INITIAL MOOD LIGHT SETUP (FIXES "EVERY" MOOD LIGHT IN MODULE)
iCount = 0; oLight = GetObjectByTag("MoodLight", iCount);
if(oLight != OBJECT_INVALID)
{
while(oLight != OBJECT_INVALID)
{
//SendMessageToAllPCs("LIGHT OFF FOUND");
SetLocalInt(oLight, "LightTagFixMood", 1);
SetLightActive(oLight, TRUE); // NEAREST LIGHT FIX APPLED HERE
iCount = iCount + 1; oLight = GetObjectByTag("MoodLight", iCount);
}
}
// AREA MOOD LIGHT NOW UPDATED VIA ITS VARIABLE WHEN DAY/NIGHT CHANGES
else
{
iCount = 1; oLight = GetNearestObject(OBJECT_TYPE_LIGHT, oPC, iCount);
while(oLight != OBJECT_INVALID)
{
//SendMessageToAllPCs("LIGHT OFF FOUND FIXED");
if(GetLocalInt(oLight, "LightTagFixMood") == 1){SetLightActive(oLight, TRUE);} // NEAREST LIGHT FIX APPLED HERE
iCount = iCount + 1; oLight = GetNearestObject(OBJECT_TYPE_LIGHT, oPC, iCount);
}
}
}
// DAY SET
if(GetIsDay() && (AreaMoodSet == 1 || AreaMoodSet == 0))
{
SetLocalInt(oAreaPC, "AreaMoodSet", 2);
//SendMessageToAllPCs("DEACTIVATE AMBIENT AT NIGHT");
// NIGHT FIREFLIES SETUP
int iCount = 1; object FliesEffect = GetNearestObjectByTag("alb_fireflies_big", oPC, iCount);
while(FliesEffect != OBJECT_INVALID)
{
DestroyObject(FliesEffect);
iCount = iCount + 1; FliesEffect = GetNearestObjectByTag("alb_fireflies_big", oPC, iCount);
}
// NIGHT FOG SETUP
iCount = 1; object FogEffect = GetNearestObjectByTag("GraveyardFog", oPC, iCount);
while(FogEffect != OBJECT_INVALID)
{
DestroyObject(FogEffect);
iCount = iCount + 1; FogEffect = GetNearestObjectByTag("GraveyardFog", oPC, iCount);
}
// INITIAL DESTROYME LIGHT SETUP
iCount = 0; object oLight = GetObjectByTag("DESTROYME", iCount);
if(oLight != OBJECT_INVALID)
{
while(oLight != OBJECT_INVALID)
{
SetLocalInt(oLight, "DESTROYME", 1);
iCount = iCount + 1; oLight = GetObjectByTag("DESTROYME", iCount);
}
}
// INITIAL MOOD LIGHT SETUP
iCount = 0; oLight = GetObjectByTag("MoodLight", iCount);
if(oLight != OBJECT_INVALID)
{
while(oLight != OBJECT_INVALID)
{
//SendMessageToAllPCs("LIGHT ON FOUND");
SetLocalInt(oLight, "LightTagFixMood", 1); SetLightActive(oLight, FALSE); // NEAREST LIGHT FIX APPLED HERE
iCount = iCount + 1; oLight = GetObjectByTag("MoodLight", iCount);
}
}
// AREA MOOD LIGHT NOW UPDATED VIA ITS VARIABLE WHEN DAY/NIGHT CHANGES
else
{
iCount = 1; oLight = GetNearestObject(OBJECT_TYPE_LIGHT, oPC, iCount);
while(oLight != OBJECT_INVALID)
{
//SendMessageToAllPCs("LIGHT ON FOUND FIXED");
if(GetLocalInt(oLight, "LightTagFixMood") == 1){SetLightActive(oLight, FALSE);} // NEAREST LIGHT FIX APPLED HERE
iCount = iCount + 1; oLight = GetNearestObject(OBJECT_TYPE_LIGHT, oPC, iCount);
}
}
}