From 2a20c43417cdb0547e79a8298414d28b23ba9376 Mon Sep 17 00:00:00 2001 From: Unkn0wn_Gh0st Date: Sun, 8 Dec 2024 17:58:30 -0600 Subject: [PATCH] Frontier Port: Pretty Money --- Content.Client/Stack/StackSystem.cs | 23 +-- .../_NF/Stack/StackSystem.Layers.cs | 56 ++++++++ .../Properties/launchSettings.json | 8 ++ Content.Shared/Stacks/StackComponent.cs | 10 +- .../StackLayerThresholdComponent.cs | 13 ++ .../_NF/Stacks/StackLayerFunction.cs | 7 + .../Entities/Objects/Misc/space_cash.yml | 50 ++++--- .../_NF/Entities/Objects/Misc/space_cash.yml | 21 +++ .../_NF/Objects/Economy/cash.rsi/cash.png | Bin 0 -> 286 bytes .../_NF/Objects/Economy/cash.rsi/cash_10.png | Bin 0 -> 292 bytes .../_NF/Objects/Economy/cash.rsi/cash_100.png | Bin 0 -> 291 bytes .../Objects/Economy/cash.rsi/cash_1000.png | Bin 0 -> 290 bytes .../Objects/Economy/cash.rsi/cash_10000.png | Bin 0 -> 695 bytes .../Objects/Economy/cash.rsi/cash_100000.png | Bin 0 -> 811 bytes .../Objects/Economy/cash.rsi/cash_25000.png | Bin 0 -> 681 bytes .../Objects/Economy/cash.rsi/cash_250000.png | Bin 0 -> 1155 bytes .../_NF/Objects/Economy/cash.rsi/cash_500.png | Bin 0 -> 299 bytes .../Objects/Economy/cash.rsi/cash_5000.png | Bin 0 -> 231 bytes .../Objects/Economy/cash.rsi/cash_50000.png | Bin 0 -> 701 bytes .../_NF/Objects/Economy/cash.rsi/meta.json | 136 ++++++++++++++++++ 20 files changed, 295 insertions(+), 29 deletions(-) create mode 100644 Content.Client/_NF/Stack/StackSystem.Layers.cs create mode 100644 Content.Packaging/Properties/launchSettings.json create mode 100644 Content.Shared/_NF/Stacks/Components/StackLayerThresholdComponent.cs create mode 100644 Content.Shared/_NF/Stacks/StackLayerFunction.cs create mode 100644 Resources/Prototypes/_NF/Entities/Objects/Misc/space_cash.yml create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_100.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_1000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_100000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_25000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_250000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_500.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_5000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_50000.png create mode 100644 Resources/Textures/_NF/Objects/Economy/cash.rsi/meta.json diff --git a/Content.Client/Stack/StackSystem.cs b/Content.Client/Stack/StackSystem.cs index 7e681aeba3e..f57f4d4e170 100644 --- a/Content.Client/Stack/StackSystem.cs +++ b/Content.Client/Stack/StackSystem.cs @@ -8,7 +8,7 @@ namespace Content.Client.Stack { [UsedImplicitly] - public sealed class StackSystem : SharedStackSystem + public sealed partial class StackSystem : SharedStackSystem // Frontier: add partial to class definition { [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; [Dependency] private readonly ItemCounterSystem _counterSystem = default!; @@ -44,7 +44,7 @@ public override void SetCount(EntityUid uid, int amount, StackComponent? compone // TODO PREDICT ENTITY DELETION: This should really just be a normal entity deletion call. if (component.Count <= 0 && !component.Lingering) { - Xform.DetachEntity(uid, Transform(uid)); + Xform.DetachParentToNull(uid, Transform(uid)); return; } @@ -56,20 +56,25 @@ private void OnAppearanceChange(EntityUid uid, StackComponent comp, ref Appearan if (args.Sprite == null || comp.LayerStates.Count < 1) return; + StackLayerData data = new StackLayerData(); // Frontier: use structure to store StackLayerData + // Skip processing if no actual - if (!_appearanceSystem.TryGetData(uid, StackVisuals.Actual, out var actual, args.Component)) + if (!_appearanceSystem.TryGetData(uid, StackVisuals.Actual, out data.Actual, args.Component)) return; - if (!_appearanceSystem.TryGetData(uid, StackVisuals.MaxCount, out var maxCount, args.Component)) - maxCount = comp.LayerStates.Count; + if (!_appearanceSystem.TryGetData(uid, StackVisuals.MaxCount, out data.MaxCount, args.Component)) + data.MaxCount = comp.LayerStates.Count; + + if (!_appearanceSystem.TryGetData(uid, StackVisuals.Hide, out data.Hidden, args.Component)) + data.Hidden = false; - if (!_appearanceSystem.TryGetData(uid, StackVisuals.Hide, out var hidden, args.Component)) - hidden = false; + if (comp.LayerFunction != StackLayerFunction.None) // Frontier: use stack layer function to modify appearance if provided. + ApplyLayerFunction(uid, comp, ref data); // Frontier: definition in _NF/Stack/StackSystem.Layers.cs if (comp.IsComposite) - _counterSystem.ProcessCompositeSprite(uid, actual, maxCount, comp.LayerStates, hidden, sprite: args.Sprite); + _counterSystem.ProcessCompositeSprite(uid, data.Actual, data.MaxCount, comp.LayerStates, data.Hidden, sprite: args.Sprite); else - _counterSystem.ProcessOpaqueSprite(uid, comp.BaseLayer, actual, maxCount, comp.LayerStates, hidden, sprite: args.Sprite); + _counterSystem.ProcessOpaqueSprite(uid, comp.BaseLayer, data.Actual, data.MaxCount, comp.LayerStates, data.Hidden, sprite: args.Sprite); } } } diff --git a/Content.Client/_NF/Stack/StackSystem.Layers.cs b/Content.Client/_NF/Stack/StackSystem.Layers.cs new file mode 100644 index 00000000000..2893d32d3f5 --- /dev/null +++ b/Content.Client/_NF/Stack/StackSystem.Layers.cs @@ -0,0 +1,56 @@ +using Content.Shared.Stacks.Components; +using Content.Shared.Stacks; + +namespace Content.Client.Stack +{ + /// + /// Data used to determine which layers of a stack's sprite are visible. + /// + public struct StackLayerData + { + public int Actual; + public int MaxCount; + public bool Hidden; + } + + public sealed partial class StackSystem : SharedStackSystem + { + // Modifies a given stack component to adjust the layers to display. + private bool ApplyLayerFunction(EntityUid uid, StackComponent comp, ref StackLayerData data) + { + switch (comp.LayerFunction) + { + case StackLayerFunction.Threshold: + if (TryComp(uid, out var threshold)) + { + ApplyThreshold(threshold, ref data); + return true; + } + break; + } + // No function applied. + return false; + } + + /// + /// Sets Actual to the number of thresholds that Actual exceeds from the beginning of the list. + /// Sets MaxCount to the total number of thresholds plus one (for values under thresholds). + /// + private static void ApplyThreshold(StackLayerThresholdComponent comp, ref StackLayerData data) + { + // We must stop before we run out of thresholds or layers, whichever's smaller. + data.MaxCount = Math.Min(comp.Thresholds.Count + 1, data.MaxCount); + int newActual = 0; + foreach (var threshold in comp.Thresholds) + { + //If our value exceeds threshold, the next layer should be displayed. + //Note: we must ensure actual <= MaxCount. + if (data.Actual >= threshold && newActual < data.MaxCount) + newActual++; + else + break; + } + data.Actual = newActual; + } + } +} diff --git a/Content.Packaging/Properties/launchSettings.json b/Content.Packaging/Properties/launchSettings.json new file mode 100644 index 00000000000..33504c948ad --- /dev/null +++ b/Content.Packaging/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "WSL": { + "commandName": "WSL2", + "distributionName": "" + } + } +} \ No newline at end of file diff --git a/Content.Shared/Stacks/StackComponent.cs b/Content.Shared/Stacks/StackComponent.cs index 7137f8c0c22..b18f9b0d051 100644 --- a/Content.Shared/Stacks/StackComponent.cs +++ b/Content.Shared/Stacks/StackComponent.cs @@ -24,7 +24,7 @@ public sealed partial class StackComponent : Component /// [ViewVariables(VVAccess.ReadOnly)] [DataField("maxCountOverride")] - public int? MaxCountOverride { get; set; } + public int? MaxCountOverride { get; set; } /// /// Set to true to not reduce the count when used. @@ -78,6 +78,14 @@ public sealed partial class StackComponent : Component [DataField("layerStates")] [ViewVariables(VVAccess.ReadWrite)] public List LayerStates = new(); + + // Frontier: transforming Amount, MaxCount in speso stacks + /// + /// An optional function to adjust the layers used for a stack's appearance. + /// + [DataField] + public StackLayerFunction LayerFunction = StackLayerFunction.None; + // End Frontier } [Serializable, NetSerializable] diff --git a/Content.Shared/_NF/Stacks/Components/StackLayerThresholdComponent.cs b/Content.Shared/_NF/Stacks/Components/StackLayerThresholdComponent.cs new file mode 100644 index 00000000000..98d3bb0e61f --- /dev/null +++ b/Content.Shared/_NF/Stacks/Components/StackLayerThresholdComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Shared.Stacks.Components; + +[RegisterComponent] +public sealed partial class StackLayerThresholdComponent : Component +{ + /// + /// A list of thresholds to check against the number of things in the stack. + /// Each exceeded threshold will cause the next layer to be displayed. + /// Should be sorted in ascending order. + /// + [DataField(required: true)] + public List Thresholds = new List(); +} diff --git a/Content.Shared/_NF/Stacks/StackLayerFunction.cs b/Content.Shared/_NF/Stacks/StackLayerFunction.cs new file mode 100644 index 00000000000..c655f3f76c2 --- /dev/null +++ b/Content.Shared/_NF/Stacks/StackLayerFunction.cs @@ -0,0 +1,7 @@ +namespace Content.Shared.Stacks; + +public enum StackLayerFunction +{ + None, + Threshold +} diff --git a/Resources/Prototypes/Entities/Objects/Misc/space_cash.yml b/Resources/Prototypes/Entities/Objects/Misc/space_cash.yml index 57dfb400984..12dd680d9f6 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/space_cash.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/space_cash.yml @@ -9,6 +9,9 @@ shape: - 0,0,1,0 storedOffset: 0,-2 + - type: Currency + price: + Speso: 1 - type: Material - type: PhysicalComposition materialComposition: @@ -25,9 +28,17 @@ - cash_100 - cash_500 - cash_1000 - - cash_1000000 + - cash_5000 # Frontier: larger denominations + - cash_10000 # Frontier: larger denominations + - cash_25000 # Frontier: larger denominations + - cash_50000 # Frontier: larger denominations + - cash_100000 # Frontier: larger denominations + - cash_250000 # Frontier: larger denominations (cash_1000000czH&sY$$Bay^!}nd$O=`|>(|$0ExHJsFL432|L|G7_`SXB)g0c38`9@lN@^$+OiU PXEJ!Y`njxgN@xNAi{)a9 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10.png new file mode 100644 index 0000000000000000000000000000000000000000..05c477501682b5b2bd84e241465690655a617e43 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbU6KpwIEL{2A6L*%1J2g&J&8a)LPhju#^2?_cnN{_Gsy-#{*bbz) zOM?7@|HA=;mp|htpfG2FM`SSr1K(i~W;~w1A_XW|>gnPbV&VU`{~+IC0}f~It%@iA z*B9(&E%FF^8@2N5QLeg(l~WJCY} literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_1000.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_1000.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5688cd866d413a9e40239c01388bd43c060164 GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCijS1AIbU6KpwMnVDmln0A(mck61G$jhJGC$M*V`Q_7!>g+5)RcDU6_W&vG zk|4j}|8T(I<8F~A3d{^HCE!x^RG$Igq<|mWA`h6 UX5A}07ic|$r>mdKI;Vst04zjh5&!@I literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10000.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_10000.png new file mode 100644 index 0000000000000000000000000000000000000000..3400ef8a0a2e3fd72274d9947b709e01455e9f31 GIT binary patch literal 695 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&DF*n2xF*}%WQZeW4?B1dl z1)dgvea5Qy{|}h{5NAnRo>6FZ+9x`fPsI=K z==ok{pmzCP_j-mS=d9&4EN~#em%~l%Jj`}h#ccZiHJss_kB>5YWNey@ zSU};luPdeGAO8xovz)qK+aa4(%X-05rjvYLKaGx`5VxBi+VE)GGubIx8;)v=Uii6` zYsH@;)<4^tS4P}Rx4!e}GXML}*$L;T=Y0CQBjxuSsTXzPYaZ{FUCMn&ES_QCwU4*@ zCb7Qjwts4$xStW?S}1ArbmflyMnS*!ugaSnw0)Vq!?JpTt7{+f_Z0r!wXgrx%@6E% z*35rfv+WOK^McY$8^MB#v{`u)wC2Lu2{5pqM@)G|XmNK#bKlp)t(XR9B8;{5* z9JZgqck&B=&7a}}@(uPMF1OrfN3rw6l;w~9o$`47-(_!FVP*N9SNt6}m(?G*Wv}st z-{t>-FYHSWAAH3x@Hg&!|6jqIx4(PcKQ0^fYkwHyt+I@7;sK8iJo$GZhHuoFU%5kHtlI1!w0!8}x)9fx@Uq&x_W5b;1z)RIGI`b?loh@3>+Zjr z1AjQ1S2OOq&)WNIzvP0@|K`jg=g&Wj=lk#+lmZ>f8}irrxrgO0?rQ~k*wfX|Wt~$( F69CToKhFRF literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_100000.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_100000.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5da7804b31c9912f756dffd5a42e7740b68846 GIT binary patch literal 811 zcmeAS@N?(olHy`uVBq!ia0vp^4M4nrgBeJE_L*`XNT~$)gt#Wya_(1?zG!Q-vsC;= zO8kqkz;pWq_D(Oqd|Gjt2tQEO2LT4b(pd|EES{1ezu^CH!0>;~&pU<;3{0y$T^vIy z=DeNLnAdE;<0AcR!kYj84<2Um@Oadm8!9c9{qJQb{u~Bxbky_Km!Ad0s|vQ z!G_u`|Mx#WEq`Z2&-|}vH{5=^>j#%Y9na!&p`)()hQD4hSjrte{_=Q_^;x%%g(CXN zyblgfQEBe4DzSAhZBTkQHQ>yT1vl$V9zQPm_VViLhBcxWj7!oKyjhgBHmxy!5t`5~EvoUkTJ*-FFxEq6%_}1mO^ok6y1ZWC)_IHP*=AkY+ghX^ zd|RC$Ykzz9Uq-!deTMz7D{|hKvG36Pr}>}ry)@X-4h&3S_a9h(NA&*s9s=z4{-2d@417F|%^@TYah`wba?85c86txx#P?8aL5&v8A| z@8`c))H__=>+oM;LCx};xvY8nxnA(w^uDdSAPSHs{>tc9UK?lM@MXXE{eTZz4maf&aLK&*|Am+Jfc%S+=kr%Lh=?})y7yuN!)sx` zkOe@a?#LIc+W+7y*Ob@HEbI9{FutsxzHi}!(1zRVo4WrtIybBa5)8$^GyaD^{_kJ$ e9h}~*56GVjzmhA*Dw_mM%?zHdelF{r5}E)*0D5%* literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_25000.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_25000.png new file mode 100644 index 0000000000000000000000000000000000000000..fcfb013f861339100fecc566b832e64eeafa255b GIT binary patch literal 681 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&DF*n2xF*6>kmD z%5#uEw@+a2^zzH673KL^fT|8k@V5df?vfzC;Qw&I;N{QwiGhJh$J50zq+-t7*$?v$ zEAX^A&S{eU7=(suW?6hV;<@}R z(^S3Ah3lVZ-D5KO`jOA`HG^);O6FU#msT@hxqkP~;eC3Qt+DKBYiih++&#F;|IVGp zRo$`rQS3E}U+x`${*F(3?qeQjf8!J7K*RsO%YX2#+)?uU*Hy6(jA|KwXg%H-XUZM3 zy#AE>!&*>4A;6C*`A5H7FSe5RxOedcdrNlx{_CF)pWsjXfA2iIOZoQDx(hp^UH^yf z+i;%!$&{J{7lOB5YCN^S`|W$zw+>VFSIB0(p2~OSpM7P`;s3|Wq<%JfUv;Z{Q1h=; zLEgdcL*BusSZ%v@|Ml+stM{)j-#_)&yxn@wxuwe2K4q@_f9KwR^Yi>GcE2y(moQ&` zLM5xV{ELzmJ08y|n6c|x~H3;v4Sn2iJ|FjRR_$}V``Lb*Mm)pYfWGTCkj<ijnuv(Vel_Wfwni_)0$-%WFB9Q+{rz+e z(9ISlL4Lvi@d5^%vKl&X3>X-ggFIavLoyoQPH)V+Wgy~ud6!6Bjq{CbK_1%zBfP^B zVkKJt{-6JL=C8<2le1<`@tFH0+jZxa6UWs(mrkg8Yw5}2;=tl^z?$U`?~n7JzwwJt zH}g8R^!wJ;jlGkMK0I6B4&)jz^aKf9>YgYU%kYwegW=|k=f}fmo@01-g2}<|;m?z$ z>xvt!KM70-vhs4DzS8gD>f|YG4Tim&3(X|5c`B;rC^GnDO!EKq(B-w_dHpE6k4DFihFA zOz)l7J%&?EtV{YrScIN+5wJ?AU=f@-|Xz zDs0>L94~9WB=LdOY4$;{$#td&X0tu7b~t0`e%kiJv4&-;fv0U1vNuEt#IIIuZMZjI z3FJACDcN=oi()=A&R6ZszQ+^~^xwTd=AMsc@fURN=T}l-f}#b|4)OV-{Qba~Tl{_N z^4{J_n?639Uw=zO)1KMksQ&(|zZPD~UJw=Tz;Gk?Y{jjQr*-Ey#xmTvu5jgib?@^k z{wu!)Hmo~S5tD5bW}wWFQ~u}E?%O$E%bIohSsG@&vRxnbTB=&k;c&uPZV6_aH3t`S z@t%-+Gj9X4^%jXYy$9t?dw?-{SgjegJ$BxnCu^#poZ@8fqza7qOxRtJ_6 z<`*&<;x>D3XlUxoGW)sL?YEcn`&DAW^k-%Efr)*~AHRIM;vijB5_gu0cN%t;D^{G_C$M*V`Q_7!lU%3hGV1~r)>K-k z11X-8Aiv=M2*4n8|J*sCIA?)JWHAE+-(e7DJf6QI1t?hI>Eak-;s3V(piqMXhYNF} z=HLJS&kEUO_+C%TvNhP$FFO6x0{M(8Wdq)d<{MM@7@03-USyzgQma8Oo#jeMNJMz+ zjD*9XO>;O|td*9vSoIq>YFAE8n3xbYe{&{#{NI1#3!h9~A<6jU!Xwk?X)G5^?>#@Z d!k=O3n_YV9CDpgX+<|Uj@O1TaS?83{1ON@*Z1eyC literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_5000.png b/Resources/Textures/_NF/Objects/Economy/cash.rsi/cash_5000.png new file mode 100644 index 0000000000000000000000000000000000000000..36ff38c4d47c3d5e5b265adf17a86e7a6293a64d GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyiUB?$t_ilBuCA`(;o&<=#TyzL z^78V|?GxBLz5McNMKv`wpelpMS2=+ccS(?6@P9a9@bYK;1QgElba4!^=zTlkHdlj! zfXm)DXQKZ9KbZTFYo*{`R#OF@qHj7<*JiiKSLhn>Te;_Xv~o7Y}ovUtB{b9eO)Qz^T%OqTn0 z{E+psS+o90d(L%67N^qO6oyS3J-d)^iM$FRC@v;Bgn>|bM6gpj1Ke?S)FTJdKsc-O?xrX)CKZd>g9eR)FtgS!r zBSO#h|8YL1$p7l%c<_tYD(&G;u0^M;>?aosoeHikzvCI4^!_{}+A4rJ#t=0D7r7CAd^{8F$L#P@Xd Kb6Mw<&;$VBi#yx^ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_NF/Objects/Economy/cash.rsi/meta.json b/Resources/Textures/_NF/Objects/Economy/cash.rsi/meta.json new file mode 100644 index 00000000000..ab0be10c51b --- /dev/null +++ b/Resources/Textures/_NF/Objects/Economy/cash.rsi/meta.json @@ -0,0 +1,136 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Modified by EmoGarbage404 and taken from https://github.com/goonstation/goonstation at commit b951a2c12d967af1295a3e6d33a861e7e1f21299. cash_5000, cash_10000, cash_25000, cash_50000, cash_100000, cash_250000 modified by Whatstone (Discord)", + "states": [ + { + "name": "cash" + }, + { + "name": "cash_10" + }, + { + "name": "cash_100" + }, + { + "name": "cash_500" + }, + { + "name": "cash_1000" + }, + { + "name": "cash_5000" + }, + { + "name": "cash_10000", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "cash_25000", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "cash_50000", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "cash_100000", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "cash_250000", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +}