OGame Open Source
На Главную Регистрация Список пользователей Группы Наиболее часто задаваемые вопросы Поиск

OGame Open Source » OGame Open Source :: Игра » Ошибки » новая порция багов » Здравствуйте, Гость [Вход|Регистрация]
Последнее сообщение | Первое непрочитанное сообщение Распечатать | Рекомендовать другу | Добавить тему в Избранное
Создать тему Ответ в тему
Вниз страницы новая порция багов
Автор
Сообщение « Предыдущая тема | Следующая тема »
OtellO
Ветеран


images/avatars/avatar-36.jpeg

Дата регистрации: 31.10.2011
Сообщения: 953

новая порция багов Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

1) баг при атаке
если летит атака и удалить планету\луну (дэфа) атака все равно проходит

2) баг при шпионаже
по прежнему можно прошпионить аккаунт админа (с галактики не шпионит, а вот с меню ФЛОТ пожалуйста)

3) баг атаки
по прежнему можно атачить ак легора, и уничтожать луну у него (что я успешно и сделал)

4)баг удаленной планеты\луны
можно атачить и шпионить удаленные луны планеты...

5) можно удалять луны\планеты при летящем своем флоте с заданием АТАКА

6) фаланга продолжает работать на удаленных планетах лунах (показывает все летяжие флоты на удаленные планеты)

7) возможно уничтожать удаленные луны

8 ) при уничтожении луны летящий флот в атаку продолжает лететь, но уже в обзоре дэфа показывает фто летит с планеты, хотя старт изначально происходил с луны, а должен был автоматом после уничтожения луны вернуться на планету старта...

__________________
Все мы грешные!

К.А.К.ом был, К.А.К.ом и сдохну! ICQ 218-439-481
15.08.2014 08:13 OtellO offline Искать все сообщения OtellO Добавить OtellO в Друзья Добавить OtellO в Контакт-лист
admin
Администратор


Дата регистрации: 18.09.2010
Сообщения: 1,847

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

1)если летит атака и удалить планету\луну (дэфа) атака все равно проходит
Это правильно. Удаленная планета - тоже объект галактики, его можно атачить, сканить и пр.

В истории оффа даже были примеры ловли на уничтоженные планеты.

2)Атака и шпионаж админа.
Нужно проверить в немецкой вселенной и глянуть бекапы HTML. Я на оффе это точно проверял.

4-5) Ничего в этом криминального нет.
Удаленная планета или луна будет принадлежать аккаунту space.

Фалангой можно пользоваться тоже на удаленных.

Логику поведения флота при уничтожении лун проверить.
28.08.2014 15:14 admin offline Отправить e-mail admin Искать все сообщения admin Добавить admin в Друзья
OtellO
Ветеран


images/avatars/avatar-36.jpeg

Дата регистрации: 31.10.2011
Сообщения: 953

Автор темы Тема открыта OtellO
Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

5 пункт

если летит свой флот и пытаться стереть планету \луну СТАРТа система даст ошибку и не удалит ее, но только не у нас... это реально БАГ!

__________________
Все мы грешные!

К.А.К.ом был, К.А.К.ом и сдохну! ICQ 218-439-481
28.08.2014 15:18 OtellO offline Искать все сообщения OtellO Добавить OtellO в Друзья Добавить OtellO в Контакт-лист
admin
Администратор


Дата регистрации: 18.09.2010
Сообщения: 1,847

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Ааа... если в таком ракурсе... то да, как-то не очень правильно)
28.08.2014 15:21 admin offline Отправить e-mail admin Искать все сообщения admin Добавить admin в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Добрый день!

Сперва хотелось бы поблагодарить создателя движка за проделанную титаническую работу - благодаря ей наш сервер живет. Очень рад, что форму снова заработал, будем надеяться, что проект будет и дальше жить.

Сейчас ваш сервер недоступен, поэтому я не могу проверить исправлены ли ошибки, с которыми столкнулись мы за время использования вашего движка.

Пока опишу про баги, о которых вспомню. В будущем буду добавлять.

1) Неправильно работал скорострел для ЗС (по спутникам и шпионам получалось около 6250, по остальным все нормально). С чем это было связано выяснить не удалось, но сделано предположение, что во всем виновата функция MyRand(), результат которой обсчитывался в каждом блоке if-else-if

Решение было следующим:
Обсчет rapidchance производится один раз, затем в каждой проверке уже используется результат.

код:
1:
2:
3:
4:
5:
6:
7:
8:
9:
static int RapidFire (int atyp, int dtyp)
{
    int rapidfire = 0, rapidchance = 0;

    rapidchance = MyRand(1, 10000);

    if (atyp==214 && (dtyp==210 || dtyp==212) && rapidchance>8) rapidfire = 1; // 10000 / 8 = 1250

С такой поправкой все стало нормально.

2) Возврат флота иногда приводит к дублированию флотов

Было решено сделать так, что при возврате не создается возвратный флот и удаляется летящий, а модифицируется летящий флот.

3) Многократная отправка с flottenversand приводит к дублям и отрицательным ресурсам

Введена уникальная сессия, которая формируется на flotten1 и тащится до конца. После отправки сессия стирается.

4) Была ошибка с ресурсами при отправке с заданием Держаться. Можно было отменить и получить дополнительные ресурсы. В чем была проблема уже не помню, возможно, это был привнесенный нами баг, но все равно стоит проверить

5) Защита новичков не работает, ввиду ошибки:
php:
1:
if ($p2 >= $p1 || $p2 >= 5000) return false;


Вместо 5000 должно быть 5000000 (деление на 1000 приводит к тому, что защита работает только до 5 очков... С защитой сильных аналогично.

6) Следующий кусок кода приводит к вылету игроков из игры, пока не будет исправлена запись в очереди (если ПО было удалено):

php:
1:
2:
if ( $fleet[209] == Error "Попытка сбора ПО без переработчиков" );
    if ( $target['type'] != 10000 Error "Перерабатывать можно только поля обломков!" );


Для решения введен флаг $HarvestError. При любых ошибках он становится равен 1 и флот просто разворачивается с отправкой сообщения о неудаче.

Это сообщение отредактировано 11 раз, последняя правка от Shepard: 09.05.2016 15:23.

09.05.2016 10:08 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Ошибка в ally.php приводит к тому, что при смене основателя (например, при удалении) owner_id меняется у всех альянсов

php:
1:
2:
3:
4:
5:
6:
7:
// Изменить основателя альянса
function AllyChangeOwner ($ally_id$owner_id)
{
    global $db_prefix;
    $query "UPDATE ".$db_prefix."ally SET owner_id = " intval($owner_id);
    dbquery ($query);
}


Следовательно, поправка:

php:
1:
$query "UPDATE ".$db_prefix."ally SET owner_id = " intval($owner_id)." WHERE ally_id = ".intval($ally_id);

Это сообщение отредактировано 1 раз, последняя правка от Shepard: 11.05.2016 09:53.

11.05.2016 09:53 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

1) В writemessages.php нужно добавить проверку на наличие адресата. После следующих строк:
php:
1:
2:
if ($subj === ""$write_error "<center><font color=#FF0000>Не хватает темы</font><br/><br/></center>\n";
        else if ($text === ""$write_error .= "<center><font color=#FF0000>А где же сообщение?</font><br/></center>\n";

можно добавить следующее:
php:
1:
else if ($user == null$write_error .= "<center><font color=#FF0000>Получатель не найден!</font><br/></center>\n";


2) Есть вероятность, что SendMessage отработает на пустом $player_id. Можно добавить проверку, что $player_id не null. Для других значений разницы нет, главное чтобы $player_id было числом. Ну и что, что сообщение уйдет в никуда...
Добавочный код в msg.php в функции SendMessage
php:
1:
if ($player_id == NULL$player_id 99999//отправляем сообщение space если что-то идет не так


3) BroadcastMessage (msg.php) содержит неточность при отправке новичкам. Нужно заменить 5000 на 5000000

php:
1:
if ( $category == $query "SELECT * FROM ".$db_prefix."users WHERE score1 < 5000000;";
14.05.2016 00:18 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Иногда возникают ошибки, что флот привозит ресурсы, а на планете их нет. Причина этого поведения не совсем ясна, но мне кажется, что проблема в ProdResources (prod.php).

ProdResources рассчитывает выработку за заданное время и возвращает новое состояние планеты. Думаю, что проблема кроется в том, что обновление базы данных производится не посредством добавки m, k, d, а записью нового значения:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
if ( $planet['m'] < $planet['mmax'] ) {
        $planet['m'] += ($hourly $diff) / 3600;
        if ( $planet['m'] >= $planet['mmax'] ) $planet['m'] = $planet['mmax'];
    }
......
    $planet_id $planet['planet_id'];
    $query "UPDATE ".$db_prefix."planets SET m = '".$planet['m']."', k = '".$planet['k']."', d = '".$planet['d']."', lastpeek = '".$time_to."' WHERE planet_id = $planet_id";
    dbquery ($query);
    $planet['lastpeek'] = $time_to;
    return $planet;


Если вероятность, что во время выполнения произойдет выгрузка ресурсов на планету, а функция при этом перезапишет обновленные ресурсы на выработанные (без учета выгруженных ресурсов). Скорее всего это и есть причина того, что транспорт иногда не выгружает ресурсы, хотя это происходит очень редко.

Предлагаю следующее решение:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
if ( $planet['m'] < $planet['mmax'] ) {
        $mdelta $planet['mmax'] - $planet['m'];
        $metal max0min(($hourly $diff) / 3600$mdelta) );
    }
    if ( $planet['k'] < $planet['kmax'] ) {
        $kdelta $planet['kmax'] - $planet['k'];
        $crystal max0min(($hourly $diff) / 3600$kdelta) );
    }
    if ( $planet['d'] < $planet['dmax'] ) {
        $ddelta $planet['dmax'] - $planet['d'];
        $deuterium max0min(($hourly $diff) / 3600$ddelta) );
    }
    //Защита от термоядерного истощения дейтерия
    if( ($deuterium $planet['d']) < && $deuterium ) {
        $planet['fprod'] = 0;
        $deuterium = -$planet['d'];
    }
    $planet['m'] += $metal;
    $planet['k'] += $crystal;
    $planet['d'] += $deuterium;
    $planet_id $planet['planet_id'];
    $query "UPDATE ".$db_prefix."planets SET m = m + '$metal', k = k + '$crystal', d = d + '$deuterium', fprod = '".$planet['fprod']."', lastpeek = '".$time_to."' WHERE planet_id = $planet_id";
    dbquery ($query);
    $planet['lastpeek'] = $time_to;
    return $planet;


Тогда, все будет хорошо, и база данных будет содержать верное количество ресурсов. Если в этот момент что-то произошло с планетой (ограбили/привезли ресурсы), $planet об этом после ProdResources, конечно, не будет знать. Ну и ладно, достаточно будет просто обновить страницу и все станет правильным.

Обращу сразу внимание, что в коде также присутствует защита от термоядерного истощения. Выполнена она, конечно, в виде дурацкого костыля, зато хоть защитит от отрицательных значений дейтерия.

Это сообщение отредактировано 1 раз, последняя правка от Shepard: 16.05.2016 20:52.

16.05.2016 20:52 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Обнаружен баг с обработкой флота

САБы с участием большого количества игроков неверно обрабатываются... По крайней мере один раз такое произошло. В составе САБ было 45 флотов. Синтетически был создан САБ на 45 флотов, но все обработалось нормально. Возможно, причина во времени выполнения скрипта. Пока что решение не найдено.

Также, из-за большого количества флотов, доклад получается большим и не влезает в базу данных. Думаю, что стоит перетащить доклады в текстовые файлы.
03.07.2016 10:27 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Shepard Shepard мужчина
Астронавт


Дата регистрации: 08.05.2016
Сообщения: 45
Откуда: Москва

Ответ на это сообщение Ответ с цитированием Правка\Удаление Жалоба модератору       Вверх страницы

Бывает так, что лома выпадает на 1 металла или 1 кристалла больше с боевой единицы. Вроде как такое бывает с тяжелыми и легкими лазерами.

Решено следующим образом:

В функции UnitShoot

Код для обороны
код:
1:
2:
3:
4:
                *dm += (u64)(ceil(DefensePrice[b->obj_type-200].m * ((float)DefenseInDebris/100.0f)));
                *dk += (u64)(ceil(DefensePrice[b->obj_type-200].k * ((float)DefenseInDebris/100.0f)));

заменить на
код:
1:
2:
3:
4:
                *dm += (u64)(round((float)DefensePrice[b->obj_type-200].m * (float)DefenseInDebris / 100.0f));
                *dk += (u64)(round((float)DefensePrice[b->obj_type-200].k * (float)DefenseInDebris / 100.0f));

А для флотов
код:
1:
2:
3:
4:
                *dm += (u64)(ceil(FleetPrice[b->obj_type-100].m * ((float)FleetInDebris/100.0f)));
                *dk += (u64)(ceil(FleetPrice[b->obj_type-100].k * ((float)FleetInDebris/100.0f)));

на это
код:
1:
2:
3:
4:
                *dm += (u64)(round((float)FleetPrice[b->obj_type-100].m * (float)FleetInDebris / 100.0f));
                *dk += (u64)(round((float)FleetPrice[b->obj_type-100].k * (float)FleetInDebris / 100.0f));


Из-за функции ceil иногда получается, что лом становится равным 301 или 151, например.
Поэтому делаем так:
1) приводим все к float
2) проводим все действия с умножениями и делениями
3) округляем посредством round
4) преобразуем к u64

тогда лишних единиц вылезать не должно

Это сообщение отредактировано 5 раз, последняя правка от Shepard: 28.08.2016 18:23.

28.08.2016 18:09 Shepard offline Отправить e-mail Shepard Домашняя страница Shepard Искать все сообщения Shepard Добавить Shepard в Друзья
Древовидная структура | Структура форума
Переход к:
Создать тему Ответ в тему
OGame Open Source » OGame Open Source :: Игра » Ошибки » новая порция багов

[Forum Software: Burning Board Developed by WoltLab GmbH]