// Custom Script for Wheel of Fortune Fire Beam Effect

void FireBeamAtTarget(string sTargetTag, int bFinalTarget = FALSE)
{
    object oSource = GetObjectByTag("WHEELOFFORTUNE_FIRE");
    object oTarget = GetObjectByTag(sTargetTag);

    // Debug: Check if the source object is valid
    if(GetIsObjectValid(oSource))
    {
        SendMessageToPC(GetFirstPC(), "Source object (WHEELOFFORTUNE_FIRE) found.");
    }
    else
    {
        SendMessageToPC(GetFirstPC(), "Source object (WHEELOFFORTUNE_FIRE) not found.");
    }

    // Debug: Check if the target object is valid
    if(GetIsObjectValid(oTarget))
    {
        SendMessageToPC(GetFirstPC(), "Target object (" + sTargetTag + ") found.");
    }
    else
    {
        SendMessageToPC(GetFirstPC(), "Target object (" + sTargetTag + ") not found.");
        return; // Exit the function if the target is not valid
    }

    SendMessageToPC(GetFirstPC(), "Firing beam at target: " + sTargetTag);

    effect eBeam = EffectBeam(VFX_BEAM_FIRE, oSource, BODY_NODE_HAND, FALSE);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBeam, oTarget, 0.25);

    if(bFinalTarget)
    {
        effect eFire = EffectVisualEffect(VFX_IMP_FLAME_M);
        ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFire, oTarget, 0.25);
    }
}

void main()
{
    SendMessageToPC(GetFirstPC(), "Script started.");

    int i;
    string sTargetTag;

    // Loop through all targets
    for (i = 1; i <= 12; i++)
    {
        sTargetTag = "I_CAS_WHEELOFFIRE" + IntToString(i);
        FireBeamAtTarget(sTargetTag);
        DelayCommand(0.25, FireBeamAtTarget(sTargetTag, FALSE)); // Delay for each beam
    }

    // Randomly choose a placeable to stop at after 15 seconds
    int nRandomPlaceable = Random(12) + 1;
    string sFinalTarget = "I_CAS_WHEELOFFIRE" + IntToString(nRandomPlaceable);
    DelayCommand(15.0, FireBeamAtTarget(sFinalTarget, TRUE)); // Apply final effect on this target

    SendMessageToPC(GetFirstPC(), "Random target for final effect: " + sFinalTarget);
}


/*
void main()
{
    object oSelf = OBJECT_SELF;
    object oArea = GetArea(oSelf);
    
    effect eLightSmall = EffectVisualEffect(VFX_COM_HIT_FIRE);
    
    vector vPos;
    vector vPC = GetPosition(oSelf);
    
    location lStar;
    
    int iCount;
    int iRand = d4(1)+2;
    
    float fD;
    float fS = 3.0;
    float fTimer = 0.08;
    float fDelay = 0.03;
    
    for (iCount = 0; iCount <= iRand; iCount++)
    {
        for(fD = 0.0; fD < 360.0; fD += 18.0)
        {
            vPos = Vector(vPC.x + sin(fD) * fS,
                         vPC.y + cos(fD) * fS, vPC.z + 0.1);
    
            lStar = Location(oArea, vPos, 0.0);
            
            DelayCommand(fTimer, ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eLightSmall, lStar));
            
            fDelay = fDelay*1.02;
            
            SendMessageToPC(oSelf, FloatToString(fDelay));
            
            if (fDelay < 0.01) fDelay = 0.01;
            
            fTimer += fDelay;
        }
    }
} */
