TauCetiStation / TauCetiClassic

Франкенштейн жив
GNU Affero General Public License v3.0
138 stars 416 forks source link

[BUG] Энергия из ниоткуда #12436

Open volas opened 7 months ago

volas commented 7 months ago

Вытащу еще в отдельный ишью. Код машинерии и APC не рассчитан на резкое чрезмерное использование, и не проверяет использование энергии выше доступной, в случае необходимости просто беря энергию из воздуха.

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

          Размер ячейки в APC рядом - 5000, максимальное потребление тут на последнем power - 500000 (было 150000, что тоже много). ``use_power`` машинерии не возвращает значение, и не проверяет, что мы использовали энергию. Он просто записывает в area. Потом APC и батарейка в нем, процесся это, точно так же не проверяет, есть ли у него энергия на всё записанное в зоне потребление, и просто делает:
          ``used = min(charge, amount)``

          Итого, тут просто будет всегда разряжаться APC, даже если он уже сильно разряжен, и в остальном работать как надо и станция этого не заметит. 
          Вариант поставить bluespace батарейку тоже не лучший - она только на 40000, и точно так же раз полностью разрядится, и при повторном использовании будет дальше просто до 0 разряжаться не зависимо от зарядки.

          Это как-то надо к такому оборудованию свой SMES чтоль ставить, и кодить механику перегрузок, чтоб АПЦ/смес и половина оборудования взрывались/перегорали при черезмерном использовании энергии из ниоткуда...

_Originally posted by @volas in https://github.com/TauCetiStation/TauCetiClassic/pull/12277#discussion_r1390513132_

https://github.com/TauCetiStation/TauCetiClassic/blob/41f7cbbdc5c261674ab7483e5c664d4a4a1f58d5/code/modules/power/power.dm#L96-L103

https://github.com/TauCetiStation/TauCetiClassic/blob/41f7cbbdc5c261674ab7483e5c664d4a4a1f58d5/code/game/area/areas.dm#L404-L411

https://github.com/TauCetiStation/TauCetiClassic/blob/41f7cbbdc5c261674ab7483e5c664d4a4a1f58d5/code/modules/power/apc.dm#L1062-L1067

https://github.com/TauCetiStation/TauCetiClassic/blob/41f7cbbdc5c261674ab7483e5c664d4a4a1f58d5/code/modules/power/apc.dm#L1090

https://github.com/TauCetiStation/TauCetiClassic/blob/41f7cbbdc5c261674ab7483e5c664d4a4a1f58d5/code/modules/power/cell.dm#L25-L36

volas commented 7 months ago

Хотя есть еще какой-то непонятный CELLRATE = 0.002, из-за чего единицы в APC и единицы, что мы пишем в use_power, отличаются (зачем?). С ним use_power(150000) у телесаенса выглядит чуть приличнее, но кап всё равно нигде не проверяется.