void main()
{
    object oGM = GetPCSpeaker();
    object oArea = GetArea(oGM);
    object oTrap = GetFirstObjectInArea(oArea);
    object oValidTrap = OBJECT_INVALID;

    // Loop through all objects in the same area as the PC
    while (GetIsObjectValid(oTrap))
    {
        // Check if the object is a placeable and has the correct tag
        if (GetObjectType(oTrap) == OBJECT_TYPE_PLACEABLE &&
            GetTag(oTrap) == "CAS_PLC_VFXTRAP")
        {
            oValidTrap = oTrap;
            break; // Stop at the first valid trap
        }

        oTrap = GetNextObjectInArea(oArea); // Get the next object in the area
    }

    // If no valid trap was found, notify the player
    if (!GetIsObjectValid(oValidTrap))
    {
        SendMessageToPC(oGM, "No hazard found in this area.");
        return;
    }

    // Modify the hazard based on dialogue selection
    int nNode = GetSelectedNodeID();
    int nDamageType = GetLocalInt(oValidTrap, "nDamageType");
    string sDamage = GetLocalString(oValidTrap, "sDamage");

    switch (nNode)
    {
        case 0: nDamageType = DAMAGE_TYPE_PIERCING; sDamage = "10d6"; break;
        case 1: nDamageType = DAMAGE_TYPE_BLUDGEONING; sDamage = "15d6"; break;
        case 2: nDamageType = DAMAGE_TYPE_SLASHING; sDamage = "20d6"; break;
        case 3: nDamageType = DAMAGE_TYPE_ACID; sDamage = "25d6"; break;
        case 4: nDamageType = DAMAGE_TYPE_COLD; sDamage = "30d6"; break;
        case 5: nDamageType = DAMAGE_TYPE_DIVINE; sDamage = "35d6"; break;
        case 6: nDamageType = DAMAGE_TYPE_ELECTRICAL; sDamage = "40d6"; break;
        case 7: nDamageType = DAMAGE_TYPE_FIRE; sDamage = "45d6"; break;
        case 8: nDamageType = DAMAGE_TYPE_MAGICAL; sDamage = "50d6"; break;
        default:
            SendMessageToPC(oGM, "Invalid selection. Please choose a valid option.");
            return;
    }

    // Apply the new values to the trap
    SetLocalInt(oValidTrap, "nDamageType", nDamageType);
    SetLocalString(oValidTrap, "sDamage", sDamage);

    // Fetch updated data from the trap
    int nDC = GetLocalInt(oValidTrap, "nDC");
    float fFrequency = GetLocalFloat(oValidTrap, "fFrequency");

    // Format and send the confirmation message
    string sMessage = "Hazard updated! New settings:\n" +
                      "DC: " + IntToString(nDC) + "\n" +
                      "Damage: " + sDamage + "\n" +
                      "Damage Type: " + IntToString(nDamageType) + "\n" +
                      "Rate: Every " + FloatToString(fFrequency) + " seconds.";

    SendMessageToPC(oGM, sMessage);
}
