Рандомный респ Мвп, миф или реальность???

Тема в разделе "Игровые вопросы", создана пользователем Reanimatori, 14 июл 2008.

  1. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    вооот!
    мин.время+random(макс.время) возможен случай что получится (мин время+макс время)
    т.к. макс.время зачастую больше мин.время в 2 раза, то среднее (мин время+макс время) получается равным макс.время
  2. Billy Spleen

    Billy Spleen Игрок

    На форуме с:
    17 апр 2008
    Сообщения:
    532
    Почему среднее? Берётся псевдослучайное значение.
  3. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    среднее значение по теории вероятности равно половине
    60 мин + (120 мин)/2 = 120
    я имел ввиду это

    p.s. анализ данных респа мобов подсказывает мне, что вычисление времени респа должно быть
    Код:
    spawntime = md->spawn->delay1; //Base respawn time
    	if (md->spawn->delay2) //random variance
    		spawntime-= rand()%md->spawn->delay2
    знак минус!!
  4. Billy Spleen

    Billy Spleen Игрок

    На форуме с:
    17 апр 2008
    Сообщения:
    532
    Т.е. многие мвп должны ресаться моментально?
    это НЕ среднее значение. Это псевдослучайное значение.
  5. usver

    usver Игрок

    На форуме с:
    27 мар 2008
    Сообщения:
    489
    да ну чего спорить ...давайте собирёмся и перепишим код игры в целом!!! =)
  6. X

    X Играет за мобов
    Команда форума

    На форуме с:
    6 авг 2007
    Сообщения:
    19,610
    Если диапазон кто-то писал в файлах, где фиксируется респаун монстров, почему функция респауна, которая не изменялась годами, вдруг перестанет работать?
    Код:
       pay_fild11,0,0,0,0    monster    Eddga    1115,1,7200000,3600000,1
    3600000 - delay1
    7200000 - delay2

    Код:
         spawntime = md->spawn->delay1; //Base respawn time
         if (md->spawn->delay2) //random variance
              spawntime+= rand()%md->spawn->delay2;
    delay1 - переменная, отвечающая за базовый респаун-тайм.
    Если она не указывается, Spawntime становится равен 5-ти секундам(по умолчанию):
    Код:
         if (spawntime < 5000) //Min respawn time (is it needed?)
              spawntime = 5000;
    Если помимо delay1 указывается переменная delay2, которая и играет роль конечного числа диапазона, Spawntime расчитывается исходя из формулы:
    Код:
    spawntime+= rand()%md->spawn->delay2;
    То есть - delay1 + псевдослучайное значение, диапазон выбора которого ограничивается переменной delay2.
    Это может быть delay1+1, и тогда респаун практически будет = delay1.
    Это может быть delay1+120, и тогда респаун будет довольно продолжительным и долгим.
    Это может быть любое число до значения delay2. Никакие средние здесь роли не играют.
    Это псевдослучайное число. Это тот самый "рэндом", о котором и идёт речь.
  7. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    макс.время минус мин.время
  8. X

    X Играет за мобов
    Команда форума

    На форуме с:
    6 авг 2007
    Сообщения:
    19,610
    Откуда Вы определили данную формулу?
    Мин. время плюс рандомное число, ограничиваемое макс. временем.
  9. Billy Spleen

    Billy Spleen Игрок

    На форуме с:
    17 апр 2008
    Сообщения:
    532
    3символа
  10. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    тогда значит время респавна эддги не 60мин~120мин как вы ранее говорили, а 60мин~180мин
    тогда признаю неверность своего вывода выше
  11. salvador

    salvador Игрок

    На форуме с:
    28 апр 2008
    Сообщения:
    4,874
    ппц, какие бы я сейчас размышления тут навел... если бы хоть что нить понимал, а то температура 40 не располагает к мыслительным процессам =(
  12. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    вобще наличие такого текста в файле script_commands.txt наводит на еще более странные размышления:
    действительно, погода не располагает к мышлению, посему удаляюсь
  13. pogo

    pogo Игрок

    На форуме с:
    6 май 2008
    Сообщения:
    534
    На примере
    Код:
    pay_fild11,0,0,0,0    monster    Eddga    1115,1,7200000,3600000,1
    получается, что spawntime = delay1 + random(delay2) = 1 час + 0-2 часа
    то есть, возможне респ от 1 часа до 3х, что неверно.
    А если предположить, что delay1 - максимальное время (этому соответствует порядок этих чисел в описании респауна моба), тогда, если функция rand() выдает числа от 0 до 1, все встает на свои места:
    spawntime = delay1 + random(delay2) = 2 час + маленькое_число%1_час (остаток от деления) = 2 часа
    И так у любого моба/мвп.
    Факт, что до обнолений был фиксированый респ мвп, простому игроку врятли удастся доказать, но факты свидетельствующих этому очень много (киель 2 часа, анг гост 1 час, дев 2 часа, вальки 30 мин на 3 мапе, гтб час - это только с моего опыта), как сейчас не знаю.

    Update:
    ну вот, в предыдущем посте показано что delay1 - макс время.
  14. Billy Spleen

    Billy Spleen Игрок

    На форуме с:
    17 апр 2008
    Сообщения:
    532
    0 - 32767 afaik .
    "%" не заметил, спасибо.
  15. pogo

    pogo Игрок

    На форуме с:
    6 май 2008
    Сообщения:
    534
    от 0 до 1 - это 1 из вариантов - почему респ фиксированный.
    А так:
    Код:
    Header File
    
    stdlib.h 
    
    Category
    
    Math Routines
    
    Prototype
    
    int rand(void);
    
    Description
    
    Random number generator.
    
    rand uses a multiplicative congruential random number generator with period 2 to the 32nd power to return successive pseudo-random numbers in the range from 0 to RAND_MAX. The symbolic constant RAND_MAX is defined in stdlib.h.
    
    Return Value
    
    rand returns the generated pseudo-random number.
    Возращает число от 0 до RAND_MAX.
    Код:
    /* Maximum value returned by "rand" function
    */
    #define RAND_MAX  0x7FFFU
    Это и есть 32767 милисекунд. Фактически респ макс_время + 0-32 секунд.
  16. X

    X Играет за мобов
    Команда форума

    На форуме с:
    6 авг 2007
    Сообщения:
    19,610
    Я делаю предположение, что закон рандомности spawntime не распространялся на то время, когда сервер располагался на машине с Win2k3. Сейчас он работает на Unix, и как мы видим, появились жалобы на рандомность спавна.

    *размышляет*.
  17. Lord-Woolf

    Lord-Woolf Игрок

    На форуме с:
    22 окт 2007
    Сообщения:
    986
    Адрес:
    Харьков
    скоко букафак... скоко цифарак...) Вам это очень важно ? Если да и вы уверены что что-то работает не так, то писать надо на форуме ежафины а не тут.) Но это имхо. ДА и думаю это не так важно... хотя мвп килерам все возможно
  18. Billy Spleen

    Billy Spleen Игрок

    На форуме с:
    17 апр 2008
    Сообщения:
    532
    Видимо, оно так и должно работать :)
  19. toroko

    toroko Игрок

    На форуме с:
    9 май 2008
    Сообщения:
    465
    слишком большими были числа? (мсек) (в 16 бит не влезали а в 32 бит влазят)
  20. Fungineerka

    Fungineerka Игрок

    На форуме с:
    2 апр 2008
    Сообщения:
    3,935
    Адрес:
    Питер
    Не знаю как на корейском оффе, но на раггейме, на русро респ фиксированный, так что врят ли все дело в том, на чем работает серв.