public void startSpeaking(MOB mob) { Room mobHomeRoom = mob.getStartRoom(); Area mobHomeArea = ((mobHomeRoom == null) ? null : mobHomeRoom.getArea()); if (((lang != null) || (langStr.length() > 0)) && (doPlayers || mob.isMonster()) && ((!noMobs) || (!mob.isMonster())) && ((!homeOnly) || (homeRoom == null) || (mobHomeRoom == homeRoom)) && ((!homeOnly) || (homeArea == null) || (mobHomeArea == homeArea)) && (mob.fetchEffect(langStr) == null) && ((mobMask == null) || CMLib.masking().maskCheck(mobMask, mob, true))) { if (lang == null) lang = getLanguage(); if (lang == null) { lang = (Language) CMClass.getAbility("Common"); Log.errOut("Prop_LanguageSpeaker", "Unknown language " + langStr); } if (lang != null) { switch (affectedType) { case AREA: lang = (Language) lang.copyOf(); break; case LOCALE: lang = (Language) lang.copyOf(); break; case MOB: break; case EXIT: lang = (Language) lang.copyOf(); break; default: // item break; } mob.addNonUninvokableEffect(lang); lang.setSavable(false); lang.invoke(mob, mob, false, 0); } } }