Задержка при колдовании сидя, очистка стека
Forum rules
Мат - бан без предупреждения.
Воздержитесь от флуда пожалуйста.
Мат - бан без предупреждения.
Воздержитесь от флуда пожалуйста.
Задержка при колдовании сидя, очистка стека
Пару вопросов.
1) Для чего нужна задержка при колдовании сидя сопровождающуюся вот таким вот сообщением: Вы не можете это сделать сидя! Длиной в целый раунд боя. Немного непонятно что именно регулирует ета задержка, тем более если она лечится обрывом связи и вводу НУЖНЫХ команд (встать и только потом колдовать).
2) Можно ли очистить стек команд не прибегая к дисконнекту. (на примере клиента JMC если дело в клиенте.)
1) Для чего нужна задержка при колдовании сидя сопровождающуюся вот таким вот сообщением: Вы не можете это сделать сидя! Длиной в целый раунд боя. Немного непонятно что именно регулирует ета задержка, тем более если она лечится обрывом связи и вводу НУЖНЫХ команд (встать и только потом колдовать).
2) Можно ли очистить стек команд не прибегая к дисконнекту. (на примере клиента JMC если дело в клиенте.)
Re: Задержка при колдовании сидя, очистка стека
К сожалению, не могу ответить ни на один.
Думается мне, что проблема со стеком на стороне сервера, однако это можно отдельно изучить.
Начните с клиентской стороны в любом случае.
К сожалению, боюсь что всё, что касается т.н. "лагов" в движке сделано так, что фиг там что поправишь.
Думается мне, что проблема со стеком на стороне сервера, однако это можно отдельно изучить.
Начните с клиентской стороны в любом случае.
К сожалению, боюсь что всё, что касается т.н. "лагов" в движке сделано так, что фиг там что поправишь.
Re: Задержка при колдовании сидя, очистка стека
есть команда Очистить, прописанная в Командах. но не имеющая справки, в других мадах насколько помнится эта команда позиционировалась именно для очистки памяти стека команд
но в адаманте она никогда не работала, хотя вполне может быть просто отключен функционал
но в адаманте она никогда не работала, хотя вполне может быть просто отключен функционал
Re: Задержка при колдовании сидя, очистка стека
Экрил wrote:есть команда Очистить, прописанная в Командах. но не имеющая справки, в других мадах насколько помнится эта команда позиционировалась именно для очистки памяти стека команд
но в адаманте она никогда не работала, хотя вполне может быть просто отключен функционал
Я боюсь, что при нашей реализации circle она будет стоять в очереди...
Щаз посмотрим.
У нас
if (isname(m[0], "очистить clear")) {
if (ch->http_proxy) {
free(ch->http_proxy);
ch->http_proxy = NULL;
}
прокси скидывает для кодов
Re: Задержка при колдовании сидя, очистка стека
ЗЫ. Давайте дождемся ответов про то, каковы задержки если логиниться сразу всем скопом.
Метод конечно не лучший, но тут такие дебри в которые лезть страшно :)
Метод конечно не лучший, но тут такие дебри в которые лезть страшно :)
Re: Задержка при колдовании сидя, очистка стека
"прокси очистить " так использовали для очистки прокси, просто дубль команды?
Re: Задержка при колдовании сидя, очистка стека
Экрил wrote:"прокси очистить " так использовали для очистки прокси, просто дубль команды?
Я поискал прочие "очистить", ничего не нашел вроде.
Щаз еще смотрю...
Похоже очищает экран
case SCMD_CLEAR:
send_to_char("\033[H\033[J", ch);
break;
Re: Задержка при колдовании сидя, очистка стека
Code: Select all
# src/comm.c
for (d = descriptor_list; d; d = next_d) {
...
if (d->character) {
GET_WAIT_STATE(d->character) -= (GET_WAIT_STATE(d->character) > 0);
if (GET_WAIT_STATE(d->character))
continue;
}
...
}
обработка команд происходит ниже проверки GET_WAIT_STATE, если есть "лаг", то команды просто не обрабатываются до следующей итерации Главного цикла.
Плюс к тому, Главный Цикл крутится с некоторой частотой. В CIrcle 3.x это 100мс, сколько у А-Муда я не знаю.
Вот так выглядит кусок кода в Циркуле 3.х (1999-х годов :), который, может быть, не изменился в AMUD и который надо переписывать для "очистки стека команд"
Code: Select all
/* Process commands we just read from process_input */
for (d = descriptor_list; d; d = next_d) {
next_d = d->next;
/*
* Not combined to retain --(d->wait) behavior. -gg 2/20/98
* If no wait state, no subtraction. If there is a wait
* state then 1 is subtracted. Therefore we don't go less
* than 0 ever and don't require an 'if' bracket. -gg 2/27/99
*/
if (d->character) {
GET_WAIT_STATE(d->character) -= (GET_WAIT_STATE(d->character) > 0);
if (GET_WAIT_STATE(d->character))
continue;
}
if (!get_from_q(&d->input, comm, &aliased))
continue;
if (d->character) {
/* Reset the idle timer & pull char back from void if necessary */
d->character->char_specials.timer = 0;
if (STATE(d) == CON_PLAYING && GET_WAS_IN(d->character) != NOWHERE) {
if (IN_ROOM(d->character) != NOWHERE)
char_from_room(d->character);
char_to_room(d->character, GET_WAS_IN(d->character));
GET_WAS_IN(d->character) = NOWHERE;
act("$n has returned.", TRUE, d->character, 0, 0, TO_ROOM);
}
GET_WAIT_STATE(d->character) = 1;
}
d->has_prompt = FALSE;
if (d->str) /* Writing boards, mail, etc. */
string_add(d, comm);
else if (d->showstr_count) /* Reading something w/ pager */
show_string(d, comm);
else if (STATE(d) != CON_PLAYING) /* In menus, etc. */
nanny(d, comm);
else { /* else: we're playing normally. */
if (aliased) /* To prevent recursive aliases. */
d->has_prompt = TRUE; /* To get newline before next cmd output. */
else if (perform_alias(d, comm, sizeof(comm))) /* Run it through aliasing system */
get_from_q(&d->input, comm, &aliased);
command_interpreter(d->character, comm); /* Send it to interpreter */
}
}
Re: Задержка при колдовании сидя, очистка стека
Да, там что-то подобное наверняка.
Насколько я помню лаги именно "Сверху" спускаются. И это чудовищно неудобно.
К сожалению, переписывать я это не готов, т.е. переписать то я могу, а вот кто будет отлаживать :) ?
Ей богу, лучше не трогать.
Насколько я помню лаги именно "Сверху" спускаются. И это чудовищно неудобно.
К сожалению, переписывать я это не готов, т.е. переписать то я могу, а вот кто будет отлаживать :) ?
Ей богу, лучше не трогать.
Re: Задержка при колдовании сидя, очистка стека
проще уже не спамить, чем мараться этим кодом, это косметические изменения. там еще. наверно, все хорошо сделано с кодировками, если хотеть по-русски команду делать.
Re: Задержка при колдовании сидя, очистка стека
кусок кода берет свое начало из DIKU, так его и не меняли. Если лаг -- пропускаем любую входящую обработку сокета.