Калькулятор
|
|
Makantal |
Date: Su, 2009-06-14, 19:48 | Message # 1 |
Splint Mail
Группа: Череп
Посты: 497
Репутация: 11
Замечания: 0%
Статус: Offline |
Ну вот. То что я когда-то обещал сделать наконец-то готово. Выкладываю свой, надеюсь хоть какой-то вклад, в развитие мода. Может быть даже поможет модить игру (ну чем чёрт не шутит). Возможно также пригодится для игроков. Сделано в Mathcad'е v14.020 (поскольку в Excel'е особенно не работал и соответственно не знаю, как там такое воплотить). По поводу обратной совместимости - тоже не знаю. С более поздними версиями должно по идее работать. Единственно что не исключено - могут поехать надписи (у самого так было при переходе с 13 на 14 Mathcad). Последняя версия мода на момент выхода калькулятора - 1.83. По применению (в том числе и кое-что для тех, кто мало знаком с Mathcad'ом): 1. Если в начале прога выкинет предупреждение о наличие заскриптованных объектов (что там вирусы дескать могут быть) и спросит отключить ли их, нажмите "Нет": используемые скрипты - это часть калькулятора, а не вирусы. Если надоедает каждый раз получать это сообщение, то можно отключить опцию запроса подтверждения о неотключении скриптов (Tools -> Preferences -> вкладка Script Security, выбрать Low Security). 2. Проверьте флажок "0/0=0" (Tools -> Worksheet Options -> вкладка Calculation). Если отключено, то включите. Если кто вдруг решит покопаться в формулах, используемых для расчёта, то выражение типа x/x не ошибка, так сделано специально (с учётом флажка "0/0=0"). 3. При каждом изменении в вводимых данных (даже если просто передвинуть местоположение их ввода) Mathcad пересчитывает заново все вычисления, в которых эти данные используются. Т.е. если надо изменить не одно, а несколько вводимых значений, а потом посмотреть, что же получится, то придётся ждать после каждого нового ввода, пока он там всё пересчитает, даже если эти промежуточные значения нас не интересуют. Если это всё выполняется быстро - то без проблем. Если же нет - то решить проблему можно сняв флажок "Automatic Calculation" (Tools -> Calculate). Вычисление тогда запускать по нажатии Ctrl+F9. Если не снимать флажок, то можно прерывать вычисления по нажатии Esc. После какого-то изменения в вводимых данных (равно как и после перемещения листа) вычисления начнутся заново. 4. При введении чисел в поля в качестве разделителя целой и дробной частей необходимо использовать запятую, а не точку. 5. Расширенные настройки находятся правее. Расчётные формулы - ещё правее. 6. По поводу настроек. На настоящий момент нет разницы между типами оружия: меч и меч+меч, булава и булава+булава, посох и без оружия. Включил в выбор оружия все эти типы на всякий случай (если кто-то не знает, что нет разницы или вдруг забудет, да и вдруг в будущем ситуация поменяется - в дополнительных настройках есть возможность кое-что изменить). Также тип монстра "другой" - сейчас не существует (но выбрать можно - будет означать, что он не принадлежит ни к нежити, ни к демонам, ни к животным). Боковой тип атаки решил пока оставить возможным для выбора при любом типе оружия (в том числе и луков) – тоже всякий случай, вдруг чего изменится. Но на настоящий момент он работает не на всех комбинациях, так что с этим надо быть внимательнее. 7. Касательно дополнительных настроек - там тоже много чего разбито на частные случаи. Тоже на всякий пожарный, может в будующем пригодится. 8. В таблицах, где написано "да" или "нет" за положительный ответ принимается "да" (не зависимо от того, какие буквы были использованы - сторчные или заглавные) или 1. Всё остальное - значит "нет". 9. В дополнительных настройках изначально выставлены те значения, которые используются в последней на момент выхода калькулятора версии. Учтены также и косяки (вроде того, что +50% урона против демов/нежити не действует на меч+булава, топор и посох). Единственный момент, который я выставил приблизительно (на глаз) - это настройки эффекта 0 - z% случайного урона, т.к. используемых на данный момент параметров не знаю (это у Mordor'а надо спрашивать). 10. Если выставить "класс" монстра – босс, то в программе это не повлияет на получаемый им урон (оно влияет на действие различных эффектов). Правее надо ввести соответствующее сопротивление. 11. В поле DFE отрицательное значение соответствует уменьшению получаемого монстра урона, положительное – наоборот. 12. Два имеющихся графика отображают одно и то же. Просто тот, что ниже - в большем масштабе и с подписями данных. 13. Справа от большого графика - таблица данных урона и соответствующих им вероятностей выпадения в %. Там же и контрольная сумма вероятностей. То что она не равна строго 100 - нормально, но если вдруг кто-то обнаружит очень сильное отклонение (ну где-то большее, чем 0,000001) - то просьба написать об этом. Я конечно проверял там всё не раз, но всё-таки тоже человек и мог в принципе где-то что-то упустить. Теперь по поводу алгоритма подсчёта урона. 1. Крит. удар. 2. Модификация от оружия против какого-то типа монстра (например меч против нежити - множитель 0,5). 3. Эффекты +50% урона демонам/нежити. 4. Множитель от эффекта 10% нанести тройной урон. 5. Случайный урон. 6. Боковые атаки. 7. Сопротивления монстров. 8. DFE. 9. Ограничение урона в зависимости от уровня. Кое-что сам потестил и выяснил, что округления до меньшего целого есть в п.1,3,7. В п.2 в меньшую сторону округляется если множитель > 1 и в большую, если он <1. В п.6 вообще нет округления (по крайней мере до целого). По поводу остального не знаю. Так что пришлось кое-что принимать самому. В итоге в расчётах принималось, что округления в меньшую сторону - в п.1, 3, 4, 5, 7. В п.2 – в зависимости от множителя, в п.6 – нет округления. DFE по JG не уменьшает урон ниже 1, и поэтому, принимая отсутствие DFE за DFE=0, считал, что мин. возможный урон вообще равен 1, даже если на 0-300% урона выпало 0. Если есть какие-то ошибки в алгоритме – пишите, переделаю.
Edited by Makantal - Tu, 2009-09-15, 19:24 |
|
| |
Schwarzenegger |
Date: Mn, 2009-06-15, 12:25 | Message # 2 |
Breast Plate
Группа: Опытный
Посты: 617
Репутация: 7
Замечания: 0%
Статус: Offline |
Размер проги впечатляет) оставь плиз ссылку где скачать а то вдруг в торенте битое всё)в каждой теме 10 человек пишет "у меня ошибка!!11"
|
|
| |
Faragor |
Date: Mn, 2009-06-15, 15:13 | Message # 3 |
Chain Mail
Группа: Модератор
Посты: 221
Репутация: 3
Замечания: 0%
Статус: Offline |
С помощью чего этот калькулятор открывается ? |
|
| |
Schwarzenegger |
Date: Mn, 2009-06-15, 15:39 | Message # 4 |
Breast Plate
Группа: Опытный
Посты: 617
Репутация: 7
Замечания: 0%
Статус: Offline |
Quote (Makantal) Сделано в Mathcad'е v14.020 (поскольку в Excel'е особенно не работал и соответственно не знаю, как там такое воплотить).
|
|
| |
Earalorthin |
Date: Mn, 2009-06-15, 17:46 | Message # 5 |
Breast Plate
Группа: Модератор
Посты: 918
Репутация: 10
Замечания: 0%
Статус: Offline |
ога... ещё и маткад 100мегабайтовый качать с медленного ресурса... ради одного паракилобайтового файла..)
SysTeam. Hails. You. You. Have. Ten. Seconds. To. Selfdestruction. Or. Sara. Will. Fuck. You. |
|
| |
Makantal |
Date: Sa, 2009-09-05, 19:29 | Message # 6 |
Splint Mail
Группа: Череп
Посты: 497
Репутация: 11
Замечания: 0%
Статус: Offline |
Вот ещё пара калькуляторов всё в том же Mathcad'е. Один считает шансы на оглушение при ударе, а второй строит график зависимости вероятности быть оглушённым от величины DFE. Если кто с Mathcad'ом не знаком, то см. п.1-4 в первом сообщении. В данных калькуляторах использовалась действительная для версии 1.82g RC23 формула порога оглушения (мин. необходимый на оглушение урон = Rnd[CLVL]+(baseVIT/8)+(CLVL/2)-2), и верные результаты соответственно будут только для неё. Также в калькуляторе - построителе графиков чем больше задаётся диапазон DFE, тем естественно дольше строятся график. И ещё. В первом калькуляторе в поясняющем определении (только в нём, считалось же всё правильно) коэффициента вариации была допущена ошибочка. Это не мат. ожидание / СКО, а наоборот. Файл перезалил. Ну это так, для проформы, т.к. понимаю, что этот коэффициент и его определение нафиг никому не нужен и вряд ли кто вообще обратил на него внимание. Добавлено (2009-09-05, 19:29) --------------------------------------------- В связи с изменением формулы оглушения монстров калькулятор урона обновлён.
Edited by Makantal - Tu, 2009-09-15, 19:25 |
|
| |
Mordor |
Date: Su, 2009-09-06, 11:40 | Message # 7 |
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline |
а тут кстати слолжно... для многих монстров свои особенные формулы оглушения в основном конечно (mAC*4)/2 - mAC*4 но есть монстры с коэффициентами mAC*5, mAC*8, (mAC-20)*8, mAC*3 ворперы например вообще станятся если дамаг НИЖЕ чем (mAC-20)*5 |
|
| |
Makantal |
Date: Su, 2009-09-06, 16:04 | Message # 8 |
Splint Mail
Группа: Череп
Посты: 497
Репутация: 11
Замечания: 0%
Статус: Offline |
Mordor, да, я знал про то, что там для разных монстров порог оглушения по-разному завязан на mAC, поэтому в калькуляторе задаётся именно сам порог (stun value из формулы ниже), а не mAC (ну помножить его на нужное число "вручную" - думаю не проблема). Помимо этого добавил настройку мин. и макс. значений правее в соответствии с нынешней (v1.83b) формулой на оглушение (Rnd((stun value/2)+1)+((stun value/2)+1)): int(stun value/2)+1 и 2*int(stun value/2)+1 соответственно. Их конечно поменять, если охота посмотреть, что же будет если... Интересная деталь кстати выявилась: свойство 0-300% из-за используемого игрухой алгоритма модификации урона может ощутимо снизить вероятность оглушения, хотя общий урон повышается в 1,29 раза.
Edited by Makantal - Su, 2009-09-06, 16:05 |
|
| |
Mordor |
Date: Su, 2009-09-06, 21:47 | Message # 9 |
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline |
Quote (Makantal) Интересная деталь кстати выявилась: свойство 0-300% из-за используемого игрухой алгоритма модификации урона может ощутимо снизить вероятность оглушения, хотя общий урон повышается в 1,29 раза. завтра вернусь домой и детально распишу действие этого эффекта, прямо из кода pvm melee напомни если забууду |
|
| |
Mordor |
Date: Su, 2009-09-06, 23:22 | Message # 10 |
Full Plate
Группа: Alpha Dog
Посты: 4692
Репутация: 84
Статус: Offline |
разобрался с этим эффектом вот даже код с комментариями: :0045BB6F F684308855000008 test byte ptr [eax+esi+00005588], 08 jester (rnd 0-300% damage) :0045BB77 7422 je 0045BB9B :0045BB79 BAC9000000 mov edx, 000000C9 :0045BB7E B106 mov cl, 06 :0045BB80 E8D5E3FBFF call 00419F5A eax=rnd[201] :0045BB85 83F864 cmp eax, 00000064 compare eax to 100 :0045BB88 7C06 jl 0045BB90 if lower, jump to 45bb90 :0045BB8A 83C0B0 add eax, FFFFFFB0 eax (100-200 here) minus 80, 20-120 left :0045BB8D 8D0440 lea eax, dword ptr [eax+2*eax] [20-120]*3, 60-360 (originally 5x) * Referenced by a (U)nconditional or ©onditional Jump at Address: |:0045BB88© | :0045BB90 0FAFC7 imul eax, edi eax*damage :0045BB93 6A64 push 00000064 :0045BB95 99 cdq :0045BB96 59 pop ecx :0045BB97 F7F9 idiv ecx eax/ecx (ecx=100) :0045BB99 8BF8 mov edi, eax copy eax to edi (damage) то есть, получается такая формула: с вероятностью 50 на 50 сработает один из видов просчета урона 1) (damage*[60-360])/100 2) (damage*[1-99])/100 в первом случае средний урон равен 210% во втором - 50% в общем, средний урон = 130%, т.е. на 30% выше |
|
| |
Makantal |
Date: Mn, 2009-09-07, 00:37 | Message # 11 |
Splint Mail
Группа: Череп
Посты: 497
Репутация: 11
Замечания: 0%
Статус: Offline |
Значит ошибся я там с одной цифрой на 1 ед. Мелочь правда, роли особо не играющая. Но поправил и перезалил. |
|
| |
|