Yeah new that question would come up sooner or later. here is fields_t as it is right now:
field_t fields[] = {
{"classname", FOFS(classname), F_LSTRING},
{"origin", FOFS(s.origin), F_VECTOR},
{"model", FOFS(model), F_LSTRING},
{"model2", FOFS(model2), F_LSTRING},
{"spawnflags", FOFS(spawnflags), F_INT},
{"speed", FOFS(speed), F_FLOAT},
{"target", FOFS(target), F_LSTRING},
{"paintarget", FOFS(paintarget), F_LSTRING},
{"targetname", FOFS(targetname), F_LSTRING},
{"message", FOFS(message), F_LSTRING},
{"team", FOFS(team), F_LSTRING},
{"splashDamage", FOFS(splashDamage), F_INT},
{"splashRadius", FOFS(splashRadius), F_INT},
{"wait", FOFS(wait), F_FLOAT},
{"random", FOFS(random), F_FLOAT},
{"count", FOFS(count), F_INT},
{"material", FOFS(s.powerups), F_INT},
{"health", FOFS(health), F_INT},
{"light", 0, F_IGNORE},
{"dmg", FOFS(damage), F_INT},
{"angles", FOFS(s.angles), F_VECTOR},
{"angle", FOFS(s.angles), F_ANGLEHACK},
{"pos2", FOFS(pos2), F_VECTOR},
{"apos1", FOFS(apos1), F_VECTOR},
{"apos2", FOFS(apos2), F_VECTOR},
{"swapname", FOFS(swapname), F_LSTRING}, //RPG-X Modification | Phenix | 13/06/2004
{"truename", FOFS(truename), F_LSTRING},
{"falsename", FOFS(falsename), F_LSTRING},
{"truetarget", FOFS(truetarget), F_LSTRING},
{"falsetarget", FOFS(falsetarget), F_LSTRING},
{"booleanstate", FOFS(booleanstate), F_INT},
{"distance", FOFS(distance), F_FLOAT},
{"targetname2", FOFS(targetname2), F_LSTRING },
{"bluename", FOFS(bluename), F_LSTRING},
{"greensnd", FOFS(greensound), F_LSTRING},
{"yellowsnd", FOFS(yellowsound), F_LSTRING},
{"redsnd", FOFS(redsound), F_LSTRING},
{"bluesnd", FOFS(bluesound), F_LSTRING},
{"targetShaderName", FOFS(targetShaderName), F_LSTRING},
{"targetShaderNewName", FOFS(targetShaderNewName), F_LSTRING},
#ifdef G_LUA
{"luaThink", FOFS(luaThink), F_LSTRING},
{"luaTouch", FOFS(luaTouch), F_LSTRING},
{"luaUse", FOFS(luaUse), F_LSTRING},
{"luaHurt", FOFS(luaHurt), F_LSTRING},
{"luaDie", FOFS(luaDie), F_LSTRING},
{"luaFree", FOFS(luaFree), F_LSTRING},
{"luaTrigger", FOFS(luaTrigger), F_LSTRING},
{"luaReached", FOFS(luaReached), F_LSTRING},
{"luaReachedAngular", FOFS(luaReachedAngular), F_LSTRING},
{"luaSpawn", FOFS(luaSpawn), F_LSTRING},
{"luaParm1", FOFS(luaParm1), F_LSTRING},
{"luaParm2", FOFS(luaParm2), F_LSTRING},
{"luaParm3", FOFS(luaParm3), F_LSTRING},
{"luaParm4", FOFS(luaParm4), F_LSTRING},
{"luaEntity", FOFS(luaEntity), F_INT},
#endif
{NULL}
};
Anything that is not included can't be used with this function now.
As for the second part of your question:
As you have noticed some entities such as target_turbolift use keys like 'deck' which are not in fields_t. These are named in such a way to make your work easier but are stored in objects of the struct representing the entity (gentity_s). For example 'deck' is an int value and in the code it is stored in the int variable health of gentity_s .
I might find a way to make SetKeyValue work for those keys but for now if you need to know where to store on just feel free to asked here.