// agressor совершил противоправные действия против victim // выдать/обновить клан-флаг void pk_update_clanflag(CHAR_DATA * agressor, CHAR_DATA * victim) { struct PK_Memory_type *pk; for (pk = agressor->pk_list; pk; pk = pk->next) { // эта жертва уже есть в списке игрока ? if (pk->unique == GET_UNIQUE(victim)) break; } if (!pk) { CREATE(pk, struct PK_Memory_type, 1); pk->unique = GET_UNIQUE(victim); pk->next = agressor->pk_list; agressor->pk_list = pk; }
void beat_punish(CHAR_DATA * i) { int restore; // Проверяем на выпуск чара из кутузки if (PLR_FLAGGED(i, PLR_HELLED) && HELL_DURATION(i) && HELL_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_HELLED); if (HELL_REASON(i)) free(HELL_REASON(i)); HELL_REASON(i) = 0; GET_HELL_LEV(i) = 0; HELL_GODID(i) = 0; HELL_DURATION(i) = 0; send_to_char("Вас выпустили из темницы.\r\n", i); if ((restore = GET_LOADROOM(i)) == NOWHERE) restore = calc_loadroom(i); restore = real_room(restore); if (restore == NOWHERE) { if (GET_LEVEL(i) >= LVL_IMMORT) restore = r_immort_start_room; else restore = r_mortal_start_room; } char_from_room(i); char_to_room(i, restore); look_at_room(i, restore); act("Насвистывая \"От звонка до звонка...\", $n появил$u в центре комнаты.", FALSE, i, 0, 0, TO_ROOM); } if (PLR_FLAGGED(i, PLR_NAMED) && NAME_DURATION(i) && NAME_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_NAMED); if (NAME_REASON(i)) free(NAME_REASON(i)); NAME_REASON(i) = 0; GET_NAME_LEV(i) = 0; NAME_GODID(i) = 0; NAME_DURATION(i) = 0; send_to_char("Вас выпустили из КОМНАТЫ ИМЕНИ.\r\n", i); if ((restore = GET_LOADROOM(i)) == NOWHERE) restore = calc_loadroom(i); restore = real_room(restore); if (restore == NOWHERE) { if (GET_LEVEL(i) >= LVL_IMMORT) restore = r_immort_start_room; else restore = r_mortal_start_room; } char_from_room(i); char_to_room(i, restore); look_at_room(i, restore); act("С ревом \"Имья, сестра, имья...\", $n появил$u в центре комнаты.", FALSE, i, 0, 0, TO_ROOM); } if (PLR_FLAGGED(i, PLR_MUTE) && MUTE_DURATION(i) != 0 && MUTE_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_MUTE); if (MUTE_REASON(i)) free(MUTE_REASON(i)); MUTE_REASON(i) = 0; GET_MUTE_LEV(i) = 0; MUTE_GODID(i) = 0; MUTE_DURATION(i) = 0; send_to_char("Вы можете орать.\r\n", i); } if (PLR_FLAGGED(i, PLR_DUMB) && DUMB_DURATION(i) != 0 && DUMB_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_DUMB); if (DUMB_REASON(i)) free(DUMB_REASON(i)); DUMB_REASON(i) = 0; GET_DUMB_LEV(i) = 0; DUMB_GODID(i) = 0; DUMB_DURATION(i) = 0; send_to_char("Вы можете говорить.\r\n", i); } if (!PLR_FLAGGED(i, PLR_REGISTERED) && UNREG_DURATION(i) != 0 && UNREG_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_REGISTERED); if (UNREG_REASON(i)) free(UNREG_REASON(i)); UNREG_REASON(i) = 0; GET_UNREG_LEV(i) = 0; UNREG_GODID(i) = 0; UNREG_DURATION(i) = 0; send_to_char("Ваша регистрация восстановлена.\r\n", i); if (IN_ROOM(i) == r_unreg_start_room) { if ((restore = GET_LOADROOM(i)) == NOWHERE) restore = calc_loadroom(i); restore = real_room(restore); if (restore == NOWHERE) { if (GET_LEVEL(i) >= LVL_IMMORT) restore = r_immort_start_room; else restore = r_mortal_start_room; } char_from_room(i); char_to_room(i, restore); look_at_room(i, restore); act("$n появил$u в центре комнаты, с гордостью показывая всем штампик регистрации!", FALSE, i, 0, 0, TO_ROOM); }; } if (GET_GOD_FLAG(i, GF_GODSLIKE) && GCURSE_DURATION(i) != 0 && GCURSE_DURATION(i) <= time(NULL)) { CLR_GOD_FLAG(i, GF_GODSLIKE); send_to_char("Вы более не под защитой Богов.\r\n", i); } if (GET_GOD_FLAG(i, GF_GODSCURSE) && GCURSE_DURATION(i) != 0 && GCURSE_DURATION(i) <= time(NULL)) { CLR_GOD_FLAG(i, GF_GODSCURSE); send_to_char("Боги более не в обиде на вас.\r\n", i); } if (PLR_FLAGGED(i, PLR_FROZEN) && FREEZE_DURATION(i) != 0 && FREEZE_DURATION(i) <= time(NULL)) { restore = PLR_TOG_CHK(i, PLR_FROZEN); if (FREEZE_REASON(i)) free(FREEZE_REASON(i)); FREEZE_REASON(i) = 0; GET_FREEZE_LEV(i) = 0; FREEZE_GODID(i) = 0; FREEZE_DURATION(i) = 0; send_to_char("Вы оттаяли.\r\n", i); Glory::remove_freeze(GET_UNIQUE(i)); } // Проверяем а там ли мы где должны быть по флагам. if (IN_ROOM(i) == STRANGE_ROOM) restore = i->get_was_in_room(); else restore = IN_ROOM(i); if (PLR_FLAGGED(i, PLR_HELLED)) { if (restore != r_helled_start_room) { if (IN_ROOM(i) == STRANGE_ROOM) i->set_was_in_room(r_helled_start_room); else { send_to_char("Чья-то злая воля вернула вас в темницу.\r\n", i); act("$n возвращен$a в темницу.", FALSE, i, 0, 0, TO_ROOM); char_from_room(i); char_to_room(i, r_helled_start_room); look_at_room(i, r_helled_start_room); i->set_was_in_room(NOWHERE); }; } } else if (PLR_FLAGGED(i, PLR_NAMED)) { if (restore != r_named_start_room) { if (IN_ROOM(i) == STRANGE_ROOM) i->set_was_in_room(r_named_start_room); else { send_to_char("Чья-то злая воля вернула вас в комнату имени.\r\n", i); act("$n возвращен$a в комнату имени.", FALSE, i, 0, 0, TO_ROOM); char_from_room(i); char_to_room(i, r_named_start_room); look_at_room(i, r_named_start_room); i->set_was_in_room(NOWHERE); }; }; } else if (!RegisterSystem::is_registered(i) && i->desc && STATE(i->desc) == CON_PLAYING) { if (restore != r_unreg_start_room && !RENTABLE(i) && !DeathTrap::is_slow_dt(IN_ROOM(i)) && !check_dupes_host(i->desc, 1)) { if (IN_ROOM(i) == STRANGE_ROOM) i->set_was_in_room(r_unreg_start_room); else { act("$n водворен$a в комнату для незарегистрированных игроков, играющих через прокси.\r\n", FALSE, i, 0, 0, TO_ROOM); char_from_room(i); char_to_room(i, r_unreg_start_room); look_at_room(i, r_unreg_start_room); i->set_was_in_room(NOWHERE); }; } else if (restore == r_unreg_start_room && check_dupes_host(i->desc, 1) && !IS_IMMORTAL(i)) { send_to_char("Неведомая вытолкнула вас из комнаты для незарегистрированных игроков.\r\n", i); act("$n появил$u в центре комнаты, правда без штампика регистрации...\r\n", FALSE, i, 0, 0, TO_ROOM); restore = i->get_was_in_room(); if (restore == NOWHERE || restore == r_unreg_start_room) { restore = GET_LOADROOM(i); if (restore == NOWHERE) restore = calc_loadroom(i); restore = real_room(restore); } char_from_room(i); char_to_room(i, restore); look_at_room(i, restore); i->set_was_in_room(NOWHERE); } } }