Skip to content

pack costs are calculated at runtime.#11082

Merged
volas merged 3 commits intoTauCetiStation:masterfrom
LudwigVonChesterfield:cargo-cost-rework
Apr 8, 2023
Merged

pack costs are calculated at runtime.#11082
volas merged 3 commits intoTauCetiStation:masterfrom
LudwigVonChesterfield:cargo-cost-rework

Conversation

@LudwigVonChesterfield
Copy link
Contributor

@LudwigVonChesterfield LudwigVonChesterfield commented Mar 20, 2023

Описание изменений

tl;dr: Цены на абсолютно всё кроме оружия и еды теперь 1000 кредитов потому-что нет цены продажи

Принципиально реворкнуто то как считается стоимость карго-ящика на заказ. Отныне в эту стоимость всегда входит ящик в котором придёт заказ, манифест за который можно получить деньги, наценка 10% потому-что я так захотел (на контрабанду 50%, её типо тяжелее сбагрить), и по желанию левой пятки кодера additional_costs, можно сделать чтобы оно рандомилось в какой-то степени чтобы каргонцы могли искать неэффективности в рыночке.

Прошёлся по всем существующим ящикам и выпилил (или не совсем) им cost по следующим принципам:

  • У всего связанного с оружием и боевкой свой храм и свои законы. Выставил additional_costs им таким образом чтобы цена не поменялась.
  • У того что недавно менял Гисев (вендомат рефиллы) якобы математически(ТМ) правильно выставленная цена чтобы был какой-то профит при пополнении вендоматов, потому additional_costs выставлен так чтобы этот профит был таким как задумывалось
  • Мулботу оставил старую цену просто потому-что так захотел.

В остальных случаях просто выпилен cost, если кто-то хочет чтобы тот или иной набор стоял не столько сколько он стоит в результате этих изменений (минимальная цена набора 1000 кредитов) - пускай добавляет export статью на предметы из набора.

В будущем в идеале кто-то подобавляет имеющие смысл export статьи для оружия и рефиллов вендоматов (чтобы они учитывали наполненность рефилла...)

А пока-что живём с тем с чем живём.

Почему и что этот ПР улучшит

В корне решает возможность дюпать деньги заказывая-отправляя что-то

Позволяет регулировать всю ресурсную экономику Исхода меняя лишь одно значение (export статью предмета, она теперь влияет и на "минимальную цену" ГрузТорга(ЦК с него скупает вещи), и на цену ящиков (карго же тоже должно в пределах рыночной цены оперировать, и на собственно экспорт.)

Авторство

Гетап1 очевидно.

Чеинжлог

🆑 Luduk

  • rscadd[link]: Цены на наборы в карго поменялись в линейной зависимости от хотелки левой пятки кодера.

@TauKitty
Copy link
Contributor

Changelog status: ✔️

@TauKitty TauKitty added the Feature Новая фича label Mar 20, 2023
@LudwigVonChesterfield
Copy link
Contributor Author

Если мне разрешат это сделать прямо в этом ПР-е, то я готов ещё всему прикрутить экспорт кост.

Единственное чего опасаюсь я это что остановит Карго от продавания абсолютно всего на станции.

@LudwigVonChesterfield
Copy link
Contributor Author

Кто-нибудь помогите придумать как нормально вообще реализовать /datum/export

Мне нужно:

  • Чтобы можно было получить цену как у типа так и у объекта, потому-что /datum/pack содержат типы объектов что они заспавнят, и нужно динамически считать их цену
  • Сохранить фичу с возможностью разных цен для контрабанды и емага
  • Не проходиться линейно по всем /datum/export-ам
  • Не создавать тайпкэш со всеми типами в коде в принципе (хотя это требование можно ослабить)

@LudwigVonChesterfield
Copy link
Contributor Author

/proc/get_static_cost(type)
  var/atom/A = new type
  . = get_export_cost(A)
  SSgarbage.HardDelete(A)

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

@4310V343k
Copy link
Member

/datum/export звучит как какая-то фигня, для каждого предмета создавать заебешься
у предметов на заказ можно делать как-то так var/cost_to_sell = initial(type.cost) (точно был способ не помню сейчас)
а для вещей на продажу вызывать какой-ниьбудь прок у уже существующих вещей (к примеру что бы предметы в стореджах продавались)

@LudwigVonChesterfield
Copy link
Contributor Author

И у теяб будет type.cost_contraband, type.cost_emag, type.cost?

@4310V343k
Copy link
Member

почему при ПРОДАЖЕ должны быть разные цены?

@LudwigVonChesterfield
Copy link
Contributor Author

LudwigVonChesterfield commented Mar 22, 2023

почему нет?... другие покупатели/продавцы...

Copy link
Member

@AndroBetel AndroBetel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@LudwigVonChesterfield LudwigVonChesterfield added the Test Merge Candidate ПР с этим лэйблом будет или уже находится с тест мерже label Mar 24, 2023
return TRUE
return FALSE

/proc/is_path_in_list(t, list/L)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is_type_in_typecache делает почти то же самое, только с объектами. Можно обновление с тг взять

///Checks for specific types in specifically structured (Assoc "type" = TRUE|FALSE) lists ('typecaches')
#define is_type_in_typecache(A, L) (A && length(L) && L[(ispath(A) ? A : A:type)])

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можешь почитать обсуждение в ПР-е по поводу того как вообще выпилить /datum/export ?

Чтобы цена была функцией у объекта и переменной у типа к примеру

тогда вообще не надо будет тайпкеша...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предложенный выше initial возможно, но я не знаю что за проблема с контрабандой и прочими ценами.

Цены можно было бы еще отдельным файлом назначать, вида

/atom/var/price_something
/atom/obj/type/price_something = 123
/atom/obj/type2/price_something = 123

Если более глобально, то у объектов и даже мобов уже есть/были разные ценностные характеристики. Была стоимость объектов для пиратов, возможно воксов, есть стоимость в очках исследований. Это всё можно было бы оторвать от объектов в датумы, хранить их в атоме только путем, и initial-ом добывать стоимость. Т.е. для цен был бы почти текущий /datum/export, только в более глобальном смысле.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

проблема в том что к примеру кожу Яна можно продавать только если консоль карго взломана.

если цены будут записаны просто как переменная... ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это всё можно было бы оторвать от объектов в датумы, хранить их в атоме только путем, и initial-ом добывать стоимость. Т.е. для цен был бы почти текущий /datum/export, только в более глобальном смысле.

вот это уже абсолютно не понял.

ты имеешь ввиду

/datum/price
    var/vox_price
    var/pirate_price
    var/export_price
    var/export_contraband_price

/datum/price/magboots
    export_price = 200
    pirate_price = 2000

/obj/magboots
    price_type = /datum/price/magboots

?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ты имеешь ввиду

да. Потом можно искать цену типо initial(price_type.export_price)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Смотря, какой вариант тебе кажется удобнее.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@volas volas merged commit facd68a into TauCetiStation:master Apr 8, 2023
TauKitty added a commit to TauCetiStation/ClassicChangelog that referenced this pull request Apr 8, 2023
Deahaka added a commit to Deahaka/TauCetiClassic that referenced this pull request Apr 8, 2023
@LudwigVonChesterfield LudwigVonChesterfield deleted the cargo-cost-rework branch November 23, 2023 22:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature Новая фича Test Merge Candidate ПР с этим лэйблом будет или уже находится с тест мерже

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants