После внесения "заслонов" против "нулевых" дуэлей с пропавшими игроками, алгоритм дуэли стал более совершенным. Чтобы прояснить ситуацию, как и что работает, и когда начисляются баллы и победы в дуэлях, выкладываю технический алгоритм, по которому программисты всё реализовали. Приношу извинения, если кому-то текст покажется сложным для понимания, надеюсь его полнота эту сложность компенсирует. Итак:
1) в начале дуэли, когда оба игрока подтвердили участие, обоим игрокам выданное задание помечается как использованное. Вне зависимости от того, будет сыграна дуэль или нет, это задание игрокам больше открываться не должно. Смысл - защита от подглядывания заданий.
2) один из игроков разгадывает задание. Идет проверка: разгадал ли это задание другой игрок: если да, то в этот момент идет определение победителя и результат дуэли выдается сразу и делается пометка, что дуэль завершена; если другой игрок еще не разгадал, то просто делается пометка, что конкретный дуэлянт уже разгадал задание и больше ничего не происходит (ждем второго).
3) по происшествии 1 часа идет принудительная проверка сервером результатов этой дуэли: если дуэль завершена, то всё ОК, с ней покончено, всё посчитано ранее. Если дуэль не завершена, то проверяем: разгадал ли первый игрок 0 слов: б1) если да, то этому игроку баллов не засчитываем, а проверяем второго игрока: если у второго дуэль не завершена, то и ему баллов не зачисляем, если же завершена, то прибавляем ему 1 балл без победы, выходим. б2) если первый игрок разгадал больше 0 слов, то проверяем второго игрока: в1) если второй игрок разгадал 0 слов, то ему никаких баллов, смотрим - завершил ли дуэль первый игрок (максимум разгаданных слов = дуэль завершена, если по какой-то причине флаг завершения дуэли не сработал): если первый игрок завершил дуэль, то ему 1 балл без побед, если нет - то никаких баллов, выходим. в2) если второй игрок тоже разгадал больше 0 слов, то смотрим завершил ли второй игрок дуэль: г1) если второй завершил, то смотрим завершил ли дуэль первый игрок: д1) если первый тоже завершил, то сравниваем их результаты, определяем победителя как в п.2), выходим; д2) если первый не завершил дуэль, то присуждаем победу и баллы по туру второму игроку, первому - ничего, выходим. г2) если второй не завершил, то смотрим завершил ли дуэль первый игрок: если первый завершил, то первому победу и баллы, если первый не завершил, то дуэль не состоялась, никому баллов, выходим.
1) в начале дуэли, когда оба игрока подтвердили участие, обоим игрокам выданное задание помечается как использованное. Вне зависимости от того, будет сыграна дуэль или нет, это задание игрокам больше открываться не должно. Смысл - защита от подглядывания заданий.
2) один из игроков разгадывает задание. Идет проверка: разгадал ли это задание другой игрок: если да, то в этот момент идет определение победителя и результат дуэли выдается сразу и делается пометка, что дуэль завершена; если другой игрок еще не разгадал, то просто делается пометка, что конкретный дуэлянт уже разгадал задание и больше ничего не происходит (ждем второго).
3) по происшествии 1 часа идет принудительная проверка сервером результатов этой дуэли: если дуэль завершена, то всё ОК, с ней покончено, всё посчитано ранее. Если дуэль не завершена, то проверяем: разгадал ли первый игрок 0 слов: б1) если да, то этому игроку баллов не засчитываем, а проверяем второго игрока: если у второго дуэль не завершена, то и ему баллов не зачисляем, если же завершена, то прибавляем ему 1 балл без победы, выходим. б2) если первый игрок разгадал больше 0 слов, то проверяем второго игрока: в1) если второй игрок разгадал 0 слов, то ему никаких баллов, смотрим - завершил ли дуэль первый игрок (максимум разгаданных слов = дуэль завершена, если по какой-то причине флаг завершения дуэли не сработал): если первый игрок завершил дуэль, то ему 1 балл без побед, если нет - то никаких баллов, выходим. в2) если второй игрок тоже разгадал больше 0 слов, то смотрим завершил ли второй игрок дуэль: г1) если второй завершил, то смотрим завершил ли дуэль первый игрок: д1) если первый тоже завершил, то сравниваем их результаты, определяем победителя как в п.2), выходим; д2) если первый не завершил дуэль, то присуждаем победу и баллы по туру второму игроку, первому - ничего, выходим. г2) если второй не завершил, то смотрим завершил ли дуэль первый игрок: если первый завершил, то первому победу и баллы, если первый не завершил, то дуэль не состоялась, никому баллов, выходим.