What you generally want to do is for a given "lamp", only have ONE prim in that linkset be the one that is set to emit local light. That prim and any others that are suitable can be set to full-bright when on, so it visually appears to be lit. And understand that the 'light source' is calculated as a pinpoint source at the geometric center of the uncut version of that prim, and not as a glowing surface.
So for a simple example, let's say we have a table lamp with a light bulb in it.
The spherical part of the bulb would be scripted to turn on fullbright and to set local light to 'true' when on, and to turn off fullbright and set local light to 'false' when not lit.
The skinny base of the lightbulb, made from a cut torus, would just toggle fullbright.
The rest of the lamp just shows the lighting changes dictated by the light shed by the bulb.
=============
If you are making light from a campfire, one plane of the flame prims is all that is needed to cast the light. treat it as you would the sphere for the light bulb. All the othr flame prims just need to toggle fullbright. And with a fire, also toggle visibility on or off for each flame prim, depending on if the fire is lit of not.
=============
If you were making a chandilier with 12 candles in it, you would still only want one light source. So you could toggle the "light" property on the metal ring that holds the candles, but NOT toggle fullbright for the ring. And then toggle visibility and fullbright settings for the candle flames. Still only one actual light source, but it looks like theres 12 of them.
=============
Check the LSL scripting information, and you'll find there is a single command that lets you set prim parameters, including fullbright, local light, and visibility.
Here is a simple example: This script should work for a lamp that has a single spherical light bulb as the root prim of the lamp.
default
{
state_entry()
{
llSay(0, "Touch to light"

;
state WaitForLight;
}
}
state WaitForLight
{
touch_start(integer total_number)
{
llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, TRUE, PRIM_POINT_LIGHT, TRUE, <1, 1, 1>, 1.0, 10.0, 0.75]);
state WaitForOff;
}
}
state WaitForOff
{
touch_start(integer total_number)
{
llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, FALSE, PRIM_POINT_LIGHT, FALSE, <1, 1, 1>, 1.0, 10.0, 0.75]);
state WaitForLight;
}
}