public void executeMsg(final Environmental myHost, final CMMsg msg) { if (affected != null) switch (affectedType) { case AREA: { if (msg.targetMinor() == CMMsg.TYP_ENTER) startSpeaking(msg.source()); else if (msg.sourceMinor() == CMMsg.TYP_LIFE) startSpeaking(msg.source()); break; } case LOCALE: { if ((msg.target() == affected) && (msg.targetMinor() == CMMsg.TYP_ENTER)) startSpeaking(msg.source()); else if (msg.sourceMinor() == CMMsg.TYP_LIFE) startSpeaking(msg.source()); break; } case MOB: { if (lang == null) startSpeaking((MOB) affected); break; } case EXIT: { if ((msg.targetMinor() == CMMsg.TYP_ENTER) && (msg.tool() == affected)) startSpeaking(msg.source()); break; } default: // item { if ((msg.target() == affected) && (msg.targetMinor() == CMMsg.TYP_GET) && ((lang == null) || (lang.affecting() != msg.source()))) { if ((lang != null) && (lang.affecting() != null)) lang.affecting().delEffect(lang); startSpeaking(msg.source()); } else if ((msg.target() == affected) && (msg.targetMinor() == CMMsg.TYP_DROP) && (lang != null) && (lang.affecting() != null)) { lang.affecting().delEffect(lang); lang.setAffectedOne(null); } break; } } super.executeMsg(myHost, msg); }