void gods_day_now(CHAR_DATA * ch) { char mono[MAX_INPUT_LENGTH], poly[MAX_INPUT_LENGTH], real[MAX_INPUT_LENGTH]; *mono=0; *poly=0; *real=0; std::string mono_name = Celebrates::get_name_mono(Celebrates::get_mud_day()); std::string poly_name = Celebrates::get_name_poly(Celebrates::get_mud_day()); std::string real_name = Celebrates::get_name_real(Celebrates::get_real_day()); if (IS_IMMORTAL(ch)) { sprintf(poly, "Язычники : %s Нет праздника. %s\r\n", CCWHT(ch, C_NRM), CCNRM(ch, C_NRM)); sprintf(mono, "Христиане: %s Нет праздника. %s\r\n", CCWHT(ch, C_NRM), CCNRM(ch, C_NRM)); sprintf(real, "В реальном мире: %s Нет праздника. %s\r\n", CCWHT(ch, C_NRM), CCNRM(ch, C_NRM)); if (mono_name != "") { sprintf(mono, "Христиане: %s %s. %s\r\n", CCWHT(ch, C_NRM), mono_name.c_str(), CCNRM(ch, C_NRM)); } if (poly_name != "") { sprintf(poly, "Язычники : %s %s. %s\r\n", CCWHT(ch, C_NRM), poly_name.c_str(), CCNRM(ch, C_NRM)); } sprintf(mono + strlen(mono), "Пасха : %d.%02d\r\n", EasterDay + 1, EasterMonth + 1); send_to_char(poly, ch); send_to_char(mono, ch); } else if (GET_RELIGION(ch) == RELIGION_POLY) { if (poly_name != "") { sprintf(poly, "%s Сегодня %s. %s\r\n", CCWHT(ch, C_NRM), poly_name.c_str(), CCNRM(ch, C_NRM)); send_to_char(poly, ch); } } else if (GET_RELIGION(ch) == RELIGION_MONO) { if (mono_name != "") { sprintf(mono, "%s Сегодня %s. %s\r\n", CCWHT(ch, C_NRM), mono_name.c_str(), CCNRM(ch, C_NRM)); send_to_char(mono, ch); } } if (real_name != "") { sprintf(real, "В реальном мире : %s %s. %s\r\n", CCWHT(ch, C_NRM), real_name.c_str(), CCNRM(ch, C_NRM)); } send_to_char(real, ch); }
// юзается исключительно в act.wizards.cpp в имм командах "advance" и "set exp". void gain_exp_regardless(CHAR_DATA * ch, int gain) { int is_altered = FALSE; int num_levels = 0; ch->set_exp(ch->get_exp() + gain); if (!IS_NPC(ch)) { if (gain > 0) { while (GET_LEVEL(ch) < LVL_IMPL && GET_EXP(ch) >= level_exp(ch, GET_LEVEL(ch) + 1)) { ch->set_level(ch->get_level() + 1); num_levels++; sprintf(buf, "%sВы достигли следующего уровня!%s\r\n", CCWHT(ch, C_NRM), CCNRM(ch, C_NRM)); send_to_char(buf, ch); advance_level(ch); is_altered = TRUE; } if (is_altered) { sprintf(buf, "%s advanced %d level%s to level %d.", GET_NAME(ch), num_levels, num_levels == 1 ? "" : "s", GET_LEVEL(ch)); mudlog(buf, BRF, LVL_IMPL, SYSLOG, TRUE); } } else if (gain < 0) { // Pereplut: глупый участок кода. // gain = MAX(-max_exp_loss_pc(ch), gain); // Cap max exp lost per death // GET_EXP(ch) += gain; // if (GET_EXP(ch) < 0) // GET_EXP(ch) = 0; while (GET_LEVEL(ch) > 1 && GET_EXP(ch) < level_exp(ch, GET_LEVEL(ch))) { ch->set_level(ch->get_level() - 1); num_levels++; sprintf(buf, "%sВы потеряли уровень!%s\r\n", CCIRED(ch, C_NRM), CCNRM(ch, C_NRM)); send_to_char(buf, ch); decrease_level(ch); is_altered = TRUE; } if (is_altered) { sprintf(buf, "%s decreases %d level%s to level %d.", GET_NAME(ch), num_levels, num_levels == 1 ? "" : "s", GET_LEVEL(ch)); mudlog(buf, BRF, LVL_IMPL, SYSLOG, TRUE); } } } }
// вывод списка неодобренных имму void NewNameShow(CHAR_DATA * ch) { if (NewNameList.empty()) return; std::ostringstream buffer; buffer << "\r\nИгроки, ждущие одобрения имени (имя <игрок> одобрить/запретить/удалить):\r\n" << CCWHT(ch, C_NRM); for (NewNameListType::const_iterator it = NewNameList.begin(); it != NewNameList.end(); ++it) buffer << "Имя: " << it->first << " " << it->second->name0 << "/" << it->second->name1 << "/" << it->second->name2 << "/" << it->second->name3 << "/" << it->second->name4 << "/" << it->second->name5 << " Email: &S" << (GET_GOD_FLAG(ch, GF_DEMIGOD) ? "неопределен" : it->second->email) << "&s Пол: " << genders[it->second->sex] << "\r\n"; buffer << CCNRM(ch, C_NRM); send_to_char(buffer.str(), ch); }
void gain_exp(CHAR_DATA * ch, int gain) { int is_altered = FALSE; int num_levels = 0; char buf[128]; if (IS_NPC(ch)) { ch->set_exp(ch->get_exp() + gain); return; } else { ch->dps_add_exp(gain); ZoneExpStat::add(zone_table[world[IN_ROOM(ch)]->zone].number, gain); } if (!IS_NPC(ch) && ((GET_LEVEL(ch) < 1 || GET_LEVEL(ch) >= LVL_IMMORT))) return; if (gain > 0 && GET_LEVEL(ch) < LVL_IMMORT) { gain = MIN(max_exp_gain_pc(ch), gain); // put a cap on the max gain per kill ch->set_exp(ch->get_exp() + gain); if (GET_EXP(ch) >= level_exp(ch, LVL_IMMORT)) { if (!GET_GOD_FLAG(ch, GF_REMORT) && GET_REMORT(ch) < MAX_REMORT) { if (Remort::can_remort_now(ch)) { send_to_char(ch, "%sПоздравляем, вы получили право на перевоплощение!%s\r\n", CCIGRN(ch, C_NRM), CCNRM(ch, C_NRM)); } else { send_to_char(ch, "%sПоздравляем, вы набрали максимальное количество опыта!\r\n" "%s%s\r\n", CCIGRN(ch, C_NRM), Remort::WHERE_TO_REMORT_STR.c_str(), CCNRM(ch, C_NRM)); } SET_GOD_FLAG(ch, GF_REMORT); } } ch->set_exp(MIN(GET_EXP(ch), level_exp(ch, LVL_IMMORT) - 1)); while (GET_LEVEL(ch) < LVL_IMMORT && GET_EXP(ch) >= level_exp(ch, GET_LEVEL(ch) + 1)) { ch->set_level(ch->get_level() + 1); num_levels++; sprintf(buf, "%sВы достигли следующего уровня!%s\r\n", CCWHT(ch, C_NRM), CCNRM(ch, C_NRM)); send_to_char(buf, ch); advance_level(ch); is_altered = TRUE; } if (is_altered) { sprintf(buf, "%s advanced %d level%s to level %d.", GET_NAME(ch), num_levels, num_levels == 1 ? "" : "s", GET_LEVEL(ch)); mudlog(buf, BRF, LVL_IMPL, SYSLOG, TRUE); } } else if (gain < 0 && GET_LEVEL(ch) < LVL_IMMORT) { gain = MAX(-max_exp_loss_pc(ch), gain); // Cap max exp lost per death ch->set_exp(ch->get_exp() + gain); while (GET_LEVEL(ch) > 1 && GET_EXP(ch) < level_exp(ch, GET_LEVEL(ch))) { ch->set_level(ch->get_level() - 1); num_levels++; sprintf(buf, "%sВы потеряли уровень. Вам должно быть стыдно!%s\r\n", CCIRED(ch, C_NRM), CCNRM(ch, C_NRM)); send_to_char(buf, ch); decrease_level(ch); is_altered = TRUE; } if (is_altered) { sprintf(buf, "%s decreases %d level%s to level %d.", GET_NAME(ch), num_levels, num_levels == 1 ? "" : "s", GET_LEVEL(ch)); mudlog(buf, BRF, LVL_IMPL, SYSLOG, TRUE); } } if ((GET_EXP(ch) < level_exp(ch, LVL_IMMORT) - 1) && GET_GOD_FLAG(ch, GF_REMORT) && gain && (GET_LEVEL(ch) < LVL_IMMORT)) { if (Remort::can_remort_now(ch)) { send_to_char(ch, "%sВы потеряли право на перевоплощение!%s\r\n", CCIRED(ch, C_NRM), CCNRM(ch, C_NRM)); } CLR_GOD_FLAG(ch, GF_REMORT); } char_stat::add_class_exp(GET_CLASS(ch), gain); update_clan_exp(ch, gain); }