void Creature::add_effect(efftype_id eff_id, int dur, int intensity, bool permanent) { // check if we already have it std::vector<effect>::iterator first_eff = std::find_if(effects.begin(), effects.end(), is_id_functor(eff_id)); if (first_eff != effects.end()) { // if we do, mod the duration first_eff->mod_duration(dur); // Adding a permanent effect makes it permanent if (first_eff->is_permanent()) { first_eff->pause_effect(); } if (first_eff->get_intensity() + intensity <= first_eff->get_max_intensity()) { first_eff->mod_intensity(intensity); } } else { // if we don't already have it then add a new one if (effect_types.find(eff_id) == effect_types.end()) { return; } effect new_eff(&effect_types[eff_id], dur, intensity, permanent); effects.push_back(new_eff); if (is_player()) { // only print the message if we didn't already have it add_msg(effect_types[eff_id].gain_game_message_type(), effect_types[eff_id].get_apply_message().c_str()); g->u.add_memorial_log(pgettext("memorial_male", effect_types[eff_id].get_apply_memorial_log().c_str()), pgettext("memorial_female", effect_types[eff_id].get_apply_memorial_log().c_str())); } } }
void Creature::add_effect(efftype_id eff_id, int dur) { // check if we already have it std::vector<effect>::iterator first_eff = std::find_if(effects.begin(), effects.end(), is_id_functor(eff_id)); if (first_eff != effects.end()) { // if we do, mod the duration first_eff->mod_duration(dur); } else { // if we don't already have it then add a new one if (effect_types.find(eff_id) == effect_types.end()) { return; } effect new_eff(&effect_types[eff_id], dur); effects.push_back(new_eff); if (is_player()) { // only print the message if we didn't already have it g->add_msg_string(effect_types[eff_id].get_apply_message()); g->u.add_memorial_log(pgettext("memorial_male", effect_types[eff_id].get_apply_memorial_log().c_str()), pgettext("memorial_female", effect_types[eff_id].get_apply_memorial_log().c_str())); } } }
bool Creature::has_effect(efftype_id eff_id) { // return if any effect in effects has this id return (std::find_if(effects.begin(), effects.end(), is_id_functor(eff_id)) != effects.end()); }
void Creature::remove_effect(efftype_id rem_id) { // remove all effects with this id effects.erase(std::remove_if(effects.begin(), effects.end(), is_id_functor(rem_id)), effects.end()); }