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); }
void beat_points_update(int pulse) { CHAR_DATA *i, *next_char; int restore; if (!UPDATE_PC_ON_BEAT) return; // only for PC's for (i = character_list; i; i = next_char) { next_char = i->next; if (IS_NPC(i)) continue; if (IN_ROOM(i) == NOWHERE) { log("SYSERR: Pulse character in NOWHERE."); continue; } if (RENTABLE(i) <= time(NULL)) { RENTABLE(i) = 0; AGRESSOR(i) = 0; AGRO(i) = 0; i->agrobd = false; } if (AGRO(i) < time(NULL)) AGRO(i) = 0; beat_punish(i); // This line is used only to control all situations when someone is // dead (POS_DEAD). You can comment it to minimize heartbeat function // working time, if you're sure, that you control these situations // everywhere. To the time of this code revision I've fix some of them // and haven't seen any other. // if (GET_POS(i) == POS_DEAD) // die(i, NULL); if (GET_POS(i) < POS_STUNNED) continue; // Restore hitpoints restore = hit_gain(i); restore = interpolate(restore, pulse); if (AFF_FLAGGED(i, AFF_BANDAGE)) { AFFECT_DATA* aff; for(aff = i->affected; aff; aff = aff->next) { if (aff->type == SPELL_BANDAGE) { restore += MIN(GET_REAL_MAX_HIT(i) / 10, aff->modifier); break; } } } if (GET_HIT(i) < GET_REAL_MAX_HIT(i)) GET_HIT(i) = MIN(GET_HIT(i) + restore, GET_REAL_MAX_HIT(i)); // Проверка аффекта !исступление!. Поместил именно здесь, // но если кто найдет более подходящее место переносите =) //Gorrah: перенес в handler::affect_total //check_berserk(i); // Restore PC caster mem if (!IS_MANA_CASTER(i) && !MEMQUEUE_EMPTY(i)) { restore = mana_gain(i); restore = interpolate(restore, pulse); GET_MEM_COMPLETED(i) += restore; if (AFF_FLAGGED(i, AFF_RECALL_SPELLS)) handle_recall_spells(i); while (GET_MEM_COMPLETED(i) > GET_MEM_CURRENT(i) && !MEMQUEUE_EMPTY(i)) { int spellnum; spellnum = MemQ_learn(i); GET_SPELL_MEM(i, spellnum)++; GET_CASTER(i) += spell_info[spellnum].danger; } if (MEMQUEUE_EMPTY(i)) { if (GET_RELIGION(i) == RELIGION_MONO) { send_to_char ("Наконец ваши занятия окончены. Вы с улыбкой захлопнули свой часослов.\r\n", i); act("Окончив занятия, $n с улыбкой захлопнул$g часослов.", FALSE, i, 0, 0, TO_ROOM); } else { send_to_char ("Наконец ваши занятия окончены. Вы с улыбкой убрали свои резы.\r\n", i); act("Окончив занятия, $n с улыбкой убрал$g резы.", FALSE, i, 0, 0, TO_ROOM); } } } if (!IS_MANA_CASTER(i) && MEMQUEUE_EMPTY(i)) { GET_MEM_TOTAL(i) = 0; GET_MEM_COMPLETED(i) = 0; } // Гейн маны у волхвов if (IS_MANA_CASTER(i) && GET_MANA_STORED(i) < GET_MAX_MANA(i)) { GET_MANA_STORED(i) += mana_gain(i); if (GET_MANA_STORED(i) >= GET_MAX_MANA(i)) { GET_MANA_STORED(i) = GET_MAX_MANA(i); send_to_char("Ваша магическая энергия полностью восстановилась\r\n", i); } } if (IS_MANA_CASTER(i) && GET_MANA_STORED(i) > GET_MAX_MANA(i)) { GET_MANA_STORED(i) = GET_MAX_MANA(i); } // Restore moves restore = move_gain(i); restore = interpolate(restore, pulse); // GET_MOVE(i) = MIN(GET_MOVE(i) + restore, GET_REAL_MAX_MOVE(i)); //MZ.overflow_fix if (GET_MOVE(i) < GET_REAL_MAX_MOVE(i)) GET_MOVE(i) = MIN(GET_MOVE(i) + restore, GET_REAL_MAX_MOVE(i)); //-MZ.overflow_fix } }