Имплант 6-3 и фазер и патроны

1 Описание проблемы, коротко суть.
Надев имплант 6-3 я понял, что работает он как-то не так, что именно произошло, я провел ряд тестов со скокростью, и ее параметры очень странно изменялись или вовсе не изменялись, сриншоты прикладываю тут, иначе будет плохо понятно о чем речь.
1 эксперимент) фазер без импланта и патронов
 

Скрытый текст

YaL09Aiqr0M.jpg

  1. физер + имплант 6-3 и без патрона
     

Скрытый текст

3nNOibwh3NA.jpg

  1. физер +имплант 6-3 + патрон(разгонный контур)
     

Скрытый текст

Z38Cabf1KbQ.jpg

4)фазер + 6-3 + патрон (сверхновая)
 

Скрытый текст

-ORIqCtbHDg.jpg

5)фазер+ без 6-3 + патрон(сверхновая)
 

Скрытый текст

t2mSPJPNQ8w.jpg

6)фазер без импланта + патрон(разгонный контур)
 

Скрытый текст

urPuSV6-Bng.jpg

описание импланта
 

Скрытый текст

v8MnXNXkwcc.jpg

а теперь суть темы, используем вариант  “4” и замечаем что, просчет % идет неправильно, имея штраф -30% скорости снаряда и бонус +30% к скорости снаряда, мы должны иметь 0% изменения, но имеем занижение скорости, что послужило такой проблемой, основываясь на остальных экспериментах делаю вывод, что просчет идет таким образом:
базовая скорость + 30% от импланта (130%) и от 130% вычитается - 30% от нового значения в 130%, в цифрах (1+0.3=1.3;  1.3-1.3*0.3=1.3 - 0.39=0.91) в итоге из-за такого подхода мы получаем +30% -30%= -9%.
производим расчет в цифрах (10120+0.3*10120=10120+3036=13156; 13156-0.3*13156=13156-3946.8=9209.2 - а вот теперь возникает вопрос,  цифра не сошлась в итоге вышло 8967 см. рис.4)

идем дальше случай “1” и случай “3” имеем такую математику:
(1+0.3*1=1.3;  1.3+1.3*0.2=1.3+0.26=1.56) теперь берем реальные цифры (10120 + 0.3*10120= 10120 + 3036=13156 (такой результат мы имеем) теперь 13156+0.2*13156= 13156+2631.2=15787.2 (а вот математика ломается см. рис.3 итог выходит 15180) как получилась эта цифра? анализируем берем 13156 +0.2*10120= 13156+2024=15180 - а вот это то что вышло, значит вывод такой:
алгоритм просчета нарушается или в случае “3” или в случае “4”
пробуем проверить закономерность просчета на основе рис.1 рис.2 и рис.5 рис.6
рис.2 см выше
рис.3 см выше
рис.5 (10120-0.3*10120=7084 - верно)
рис.6 (10120+0.2*10120=12144 - верно)
общий вывод: нарушение просчетов происходит при 3 операциях просчетах(когда действует 2 бонуса), когда работает только 1 бонус - все работает верно.

  1. Что именно для вас стало багом.
    неправильный результат подсчетов

3.1. Как часто воспроизводится баг.
при просчете фазера, предположу что такого рода ошибка есть и при просчете скоростей других орудий, проверять не стал.

3.2. Подробный перечень действий для воспроизведения бага.
см. пункт 1

  1. Пояснения. (Если вы считаете, что нужны какие-то подробности, например пояснения почему это баг, или как лучше его исправить, оставьте его в этом пункте.)
    см. пункт 1, эту ошибку можно исправить, взяв в расчете бонусов, как основную скорость базовую скорость орудия, как при случае рис.3 или же прописать четкую последовательность: Speed_Shot + Bonus_Crew*Speed_Shot + (Speed_Shot+Bonus_Crew*Speed_shot)*Bonus_ammunition

где Speed_shot - переменная скорости патрона,  Bonus_Crew - коэффициент бонуса экипажа, Bonus_ammunition - бонус боезапаса(патронов)
и так же не забудьте бонусы кораблей, которые тоже необходимо высчитывать Bonus_Ship такие как скорости ЭМ и кинематики, их тоже нужно прогонять или по схеме рис.3 или по схеме приведенной мной только что, и в какую последовательность его добавить это уже ваше решение, но при использование схемы приведенной выше(не рис.3), помните что значения бонусов кораблей и имплантов - выше чем бонус боезапаса, например кинематика, но в то же время в ЭМ он соизмерим - это требует тоже правильного решения - последовательность просчетов.

так же замечу, что вам следует проверить время перегрева термоорудий с учетом такой ошибки работы (имплант+боезапас) там тоже могла выскочить эта ошибка при использовании бонусов с кораблей+бонусов имплантов+ бонус боезапаса (высокочастотный осциллятор) и интегральный охладитель и иридиевый теплоотвод.
так же проверил бы на вашем месте алгоритм просчета скорострельности: от иридиевого теплоотвода + ванадиевые снаряды + работу разгонных ускоряющихся рудий(например ускоритель массы)+  имплант 11-2(муравей) +если есть корабли с бонусом на скорострельность.

я боюсь даже предположить, что при просчете % урона от снарядов и имплантов и модификаторов такая же ошибка, а ведь вполне может быть, так что тоже рекомендую проверить.
я надеюсь вы понимаете, что не я вредный и не хочу вам сказать как все плохо, а просто хочу чтобы все правильно работало, и стараюсь вам помочь.
Продуктивной вам проверки и успехов в этом деле!
 

  1. Скрины + логи + видео.
    см. пункт 1

Всё просто: ты неправильно считаешь.

[Матчасть: как складываются модификаторы параметров модулей и оружия](< base_url >/index.php?/topic/44534-%D0%B1%D0%BB%D0%BE%D0%B3-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2-%D0%BE%D1%82-23-%D1%8F%D0%BD%D0%B2%D0%B0%D1%80%D1%8F-%D1%81%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2/)

11 минуту назад, 5С2Т сказал:

Всё просто: ты неправильно считаешь.

сказать легко, а показать где?

7 минут назад, Skula1975 сказал:

[Матчасть: как складываются модификаторы параметров модулей и оружия](< base_url >/index.php?/topic/44534-%D0%B1%D0%BB%D0%BE%D0%B3-%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2-%D0%BE%D1%82-23-%D1%8F%D0%BD%D0%B2%D0%B0%D1%80%D1%8F-%D1%81%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5-%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2/)

спасибо, линейную систему я понял, сейчас осознаю понижающую отрицательную систему и что-то более вразумительное отвечу

ок прочитал, осознал, рассуждаем:
мы имеем mod = +30%(от импланта) -30%(от боезапаса “сверхновая”) = 0, получается  во первых mod =0, следовательно идем по mod > 0, значит мы берем NewValue= BasicValue * (1+0) или же идем по mod < 0,   NewValue= BasicValue(1-0), что так, что так получаем  NewValue=BasicValue= 10120
смотрим на рис.4, мы получили 8967, считаем:  мы ушли в минус на 12.8%.

Прошу прочитайте тему еще раз, и скажите где я не прав, дабы я осознал почему  (30-30=-12.8)

Так же замечу, что в данном случае часть про “ниже нуля закон меняется” нас не касается, так как мы остались на луче [0; \infty ), значит действует линейный закон, Хотя нам все равно, потому что итоговое значение суммы mod = 0
так же обращу внимание, что переходя в случай рис.5 мы имеем тоже ошибку, так как заявлено, что при mod < 0 закон не линейный. (mod= -0.3) и результатом должно являться 10120(1+0.3) = 7784.6, а по факту выходит такое значение  7084 
Вывод: Ошибка в использование формулы подсчета для конкретно этого случая (имплант 6-3+ “сверхновая”) и  патронов “сверхновая”

 

"mod - сумма значений модулей, в соответствии с графиком ниже (Характеристики модуля 1 +…+Характеристики модуля 3 + бонусы от имплантов + Бонусы к характеристикам корабля ).
newValue - итоговое значение
baseValue - базовое значение корабля, которое можно посмотреть в информации о корабле или в вики Стар Конфликт.

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

тогда хочется увидеть понижающую фунцию, и когда происходит применение этой функции в алгоритме, в момент суммирования переменной mod  или же в итоговом результате, в случае когда сумма всех модификаторов(итог) имеет знак “минус”.
что я имею ввиду - (мод1+мод2)= ???, где мод1 - модификатор (имплант 6-3), мод2 - модификатор (“сверхновая”), имеющий значение -30%(-0.3), если же нелинейность учитывается в момент суммирования модификаторов, то есть мод2 уже не равен (-0.3), а равен пониженному числу…, то тогда написание цифры -30% не имеет никакого смысла, и в итоге мы бы вышли в плюс, а по факту мы вышли в минус.

В 18.11.2015 в 10:51, Rockfor_ сказал:

[http://forum.star-conflict.ru/index.php?/topic/44534-blog-razrabotchikov-ot-23-ianvaria-slozhenie-effekto/](< base_url >/index.php?/topic/44534-blog-razrabotchikov-ot-23-ianvaria-slozhenie-effekto/)

 

tl;dr

Калькуляция верная, но одновременное использование повышающих и понижающих модификаторов вызывает нестыковки в “логике”. Мы ожидаем, что -50% и +50% дадут друг на друга 0%, но по факту снижение некоторого параметра на 50% есть уменьшение в 2 раза , но повышение на 50% это увеличение всего лишь в 1,5 раза

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

В любом случае, интересно как получается результат в 8967м/с, если 10120*0,7*1,3=9209,2 (как и в твоих расчетах)

38 минут назад, BotSohard сказал:

ок прочитал, осознал, рассуждаем:
мы имеем mod = +30%(от импланта) -30%(от боезапаса “сверхновая”) = 0,

Ваша главная ошибка в том, что вы не поняли, что для изменения значения на -30%, mod ≠ -0.3. На самом деле, при отрицательном изменении параметра mod можно узнать так:

mod  =  1 - baseValue / newValue 

Соответственно, для -30% примем baseValue = 1, newValue = 0.7 и в результате получим:

mod = 1 - 1 / 0.7 = -0.43

Соответственно, вычислим одновременное влияние не некий параметр двух модификаторов на “+30%” и на “-30%” :

modSum = 0.3 - 0.43 = -0.13

newValue = 1 / ( 1 + 0.13 ) = 0.88

Как видим, получилось общее снижение параметра на 12%

4 минуты назад, Skula1975 сказал:

Ваша главная ошибка в том, что вы не поняли, что для изменения значения на -30%, mod ≠ -0.3. На самом деле, при отрицательном изменении параметра mod можно узнать так:

mod  =  1 - baseValue / newValue 

Соответственно, для -30% примем baseValue = 1, newValue = 0.7 и в результате получим:

mod = 1 - 1 / 0.7 = -0.43

Соответственно, вычислим одновременное влияние не некий параметр двух модификаторов на “+30%” и на “-30%” :

modSum = 0.3 - 0.43 = -0.13

newValue = 1 / ( 1 + 0.13 ) = 0.88

Как видим, получилось общее снижение параметра на 12%

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

1 минуту назад, Skula1975 сказал:

Ваша главная ошибка в том, что вы не поняли, что для изменения значения на -30%, mod ≠ -0.3. На самом деле, при отрицательном изменении параметра mod можно узнать так:

mod  =  1 - baseValue / newValue 

Соответственно, для -30% примем baseValue = 1, newValue = 0.7 и в результате получим:

mod = 1 - 1 / 0.7 = -0.43

Соответственно, вычислим одновременное влияние не некий параметр двух модификаторов на “+30%” и на “-30%” :

modSum = 0.3 - 0.43 = -0.13

newValue = 1 / ( 1 + 0.13 ) = 0.88

Как видим, получилось общее снижение параметра на 12%

1.ЕСЛИ mod < 0 ТОГДА newValue = baseValue / ( 1 - mod )
2. ЕСЛИ mod > 0 ТОГДА newValue = baseValue * ( 1 + mod )

строчки из руководства.

почему в функции суммирования появилось деление?
mod - итоговая величина(коэффициент), после суммирования всех модификаторов (коэффициентов) (суммирование - линейная функция, у вас в ней появилось деление)
то что вы произвели сейчас логически означает только то, что “коэффициент понижения модификатора” - обладает большим по модулю числом, чем заявлено на самом модификаторе, то есть как вы написали по вашей формуле не -30%, а - 43%, почему тогда вы не пишите так?
там в руководстве кстати виден график, который гласит - при переходе ниже нуля, эффект ослабляется, то есть если использовать вашу “математику”, то -30% должно на само деле иметь, пониженные по модулю значения (менее 30%)

5 минут назад, shtornado сказал:

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

Нет, не так. Из этого следует, что складывание результатов линейной и нелинейной функций дает нелинейный результат.

3 минуты назад, BotSohard сказал:

почему в функции суммирования появилось деление?

Где? Нет никакой функции суммирования", есть разные функции для модификатора в зависимости от его знака

4 минуты назад, BotSohard сказал:

mod - итоговая величина(коэффициент),

Нет. mod - базовая величина, именно её указывает дизайнер в прототипе модуля/пушки. Видимое вами в описании значение - вычисляемое, по выше приведенным правилам.

5 минут назад, BotSohard сказал:

там в руководстве кстати виден график, который гласит - при переходе ниже нуля, эффект ослабляется, то есть если использовать вашу “математику”, то -30% должно на само деле иметь, пониженные по модулю значения (менее 30%)

Зря вы так про “математику” ![;)](<fileStore.core_Emoticons>/emoticons/002.png “;)”)

На самом деле приведенный график означает, что увеличение модуля отрицательного модификатора дает меньший вклад, чем аналогичное увеличение по модулю положительного модификатора. Из вашего же примера следует, что для увеличения параметра на 30% надо использовать положительный модификатор со значением |0.3|, тогда как для снижения параметра на те же 30% надо использовать отрицательный модификатор со значением уже |0.43|.

Интересно, кто-нибудь догадается, почему так сделано?

8 минут назад, Skula1975 сказал:

Нет, не так. Из этого следует, что складывание результатов линейной и нелинейной функций дает нелинейный результат.

mod = -0.3 так написано на модуле, или же -0.43 как вы посчитали,
Дальше я беру вашу формулу
mod = 1 - baseValue/newValue
mod = -0.3, для случая когда нет других слагаемых, когда есть другие слагаемые mod = -0.43
далее
-0.3 = 1 - 10120\7084 = 1 - 1.43 = -0.43;  ошибка?

14 минуты назад, Skula1975 сказал:

На самом деле приведенный график означает, что увеличение модуля отрицательного модификатора дает меньший вклад, чем аналогичное увеличение по модулю положительного модификатора. Из вашего же примера следует, что для увеличения параметра на 30% надо использовать положительный модификатор со значением |0.3|, тогда как для снижения параметра на те же 30% надо использовать отрицательный модификатор со значением уже |0.43|.

по выкладкам сверху выходит, что модуль с отрицательным эффектом, имеет больший эффект, чем модуль имеющий ту же величину по модулю, то есть имея одинаковый по модулю значения модификаторов (снижает на 30% и увеличивает на 30% мы уходим в минус)
еще раз напомню, по факту мы уходим в -12.8%) выходит логически это означает что при сумме отрицательных и положительных, отрицательный имеет большее значение, чем заявлено  на модуле, то есть -43%, так и выходит, по делу) см. рис.4

12 минуты назад, BotSohard сказал:

mod = -0.3 так написано на модуле, или же -0.43 как вы посчитали,

Еще раз. Если модификатор равен -0.43, то изменение параметра составляет -30%. Такое ощущение, что вы путаете одно с другим

12 минуты назад, BotSohard сказал:

mod = -0.3, для случая когда нет других слагаемых, когда есть другие слагаемые mod = -0.43

И снова неверно понимаете. mod = -0.3 тут вообще нигде нет. См. мое замечание выше.

13 минуты назад, BotSohard сказал:

-0.3 = 1 - 10120\7084 = 1 - 1.43 = -0.43;  ошибка?

Вот как было бы правильно: 

Если я вижу изменение параметра  на -30%, это значит, что для этого параметра модификатор mod = 1 - 10120\7084 = 1 - 1.43 = -0.43

8 минут назад, BotSohard сказал:

по выкладкам сверху выходит, что модуль с отрицательным эффектом, имеет больший эффект, чем модуль имеющий ту же величину по модулю, то есть имея одинаковый по модулю значения модификаторов (снижает на 30% и увеличивает на 30% мы уходим в минус)
еще раз напомню, по факту мы уходим в -12.8%) выходит логически это означает что при сумме отрицательных и положительных, отрицательный имеет большее значение, чем заявлено  на модуле, то есть -43%, так и выходит, по делу) см. рис.4

И снова: вы путаете модификатор и его влияние.

8 минут назад, Skula1975 сказал:

И снова: вы путаете модификатор и его влияние.

нас интересует влияние? что мы видим на деле, на деле мы видим -43% - это и есть влияние, зачем тогда нам писать в описание модуля, “модификатор” (mod).
я думаю эти термины излишни, давайте называть вещи по факту, “результирующая” и результирующая гласит, когда мы имеем 2 модификатора, у которых написано +30% и -30%, то мы по умолчанию должны понимать, что есть функция в которой эти 30% преобразуются в результирующие, работающие так, что +30% всегда меньше чем -30% (по модулю).
может тогда в описание модуля сразу записать результирующую? так  как по факту -30% является -43%.
а сейчас мы по факту получаем +30% - 30% = -12.8%, понимаете про что я вам говорю?
написать -42.8% и тогда человек знающий “стандартные функции сложения” получит 30%-42.8%=-12.8%, а не искусственные функции, которые у вас в коде.
 

30 минут назад, Skula1975 сказал:

Интересно, кто-нибудь догадается, почему так сделано?

Чтобы каждый устанавливаемый модификатор имел свой вклад? 

12 минуты назад, 5С2Т сказал:

Чтобы каждый устанавливаемый модификатор имел свой вклад? 

каждый установленный модификатор итак имеет свой вклад.
пока я увидел только контр меру к комбинации имплант 6-3 + “сверхновая” = -0% скорости снаряда + 20% урона,
и кстати, выходит горизонт тоже снижает более чем на -5%?
я даже посчитаю -5%
mod = 1 - 2977\2868 = 1 - 1.038= -3.8% опачки, вот это поворот
ждем фикса горизонта?)