@shipload/sdk 2.0.0-rc2 → 2.0.0-rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/shipload.d.ts +271 -137
- package/lib/shipload.js +1375 -1022
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +780 -342
- package/lib/shipload.m.js.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/extraction.ts +14 -21
- package/src/capabilities/storage.ts +2 -2
- package/src/contracts/server.ts +239 -120
- package/src/data/items.json +16 -0
- package/src/derivation/index.ts +25 -0
- package/src/derivation/location-size.ts +15 -0
- package/src/derivation/resources.ts +141 -0
- package/src/derivation/stratum.ts +116 -0
- package/src/entities/cargo-utils.ts +8 -8
- package/src/entities/entity-inventory.ts +13 -9
- package/src/entities/inventory-accessor.ts +2 -2
- package/src/entities/location.ts +10 -10
- package/src/entities/ship.ts +10 -6
- package/src/entities/warehouse.ts +2 -2
- package/src/errors.ts +4 -4
- package/src/index-module.ts +31 -6
- package/src/managers/actions.ts +21 -9
- package/src/managers/locations.ts +7 -7
- package/src/managers/trades.ts +5 -5
- package/src/market/items.ts +31 -0
- package/src/market/market.ts +9 -9
- package/src/scheduling/projection.ts +7 -7
- package/src/trading/collect.ts +25 -25
- package/src/trading/deal.ts +8 -8
- package/src/trading/trade.ts +9 -9
- package/src/travel/travel.ts +6 -6
- package/src/types.ts +17 -7
- package/src/utils/system.ts +7 -42
- package/src/data/goods.json +0 -23
- package/src/market/goods.ts +0 -31
package/lib/shipload.js
CHANGED
|
@@ -213,7 +213,7 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
213
213
|
Contract: Contract$1
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhQB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5Z29vZHMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NAdtaXh0dXJlDW1peHR1cmVfaW5mbz8JY2FyZ29fcm93AAUCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHZ29vZF9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ng1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2C2VudGl0eV9pbmZvABUEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8GZW5lcmd5B3VpbnQxNj8IaHVsbG1hc3MHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwhjYXBhY2l0eQd1aW50MzI/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQdleHRyYWN0AAEHc2hpcF9pZAZ1aW50NjQPZXh0cmFjdG9yX3N0YXRzAAMEcmF0ZQZ1aW50MTYFZHJhaW4GdWludDE2CmVmZmljaWVuY3kGdWludDE2C2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0Z29vZHMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwRnb29kAAMCaWQGdWludDE2CmJhc2VfcHJpY2UGdWludDMyBG1hc3MGdWludDMyCmdvb2RzX2luZm8AAQVnb29kcwZnb29kW10LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nBGluaXQAAQRzZWVkC2NoZWNrc3VtMjU2BGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaA5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2dvb2QABQJpZAZ1aW50MTYFcHJpY2UGdWludDMyBnN1cHBseQZ1aW50MTYRcmFyaXR5X211bHRpcGxpZXIGdWludDMyE2xvY2F0aW9uX211bHRpcGxpZXIGdWludDMyDWxvY2F0aW9uX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wFZ29vZHMPbG9jYXRpb25fZ29vZFtdDGxvY2F0aW9uX3JvdwAGAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdCHNjaGVkdWxlCXNjaGVkdWxlPw9sb2NhdGlvbl9zdGF0aWMABQZjb29yZHMLY29vcmRpbmF0ZXMEdHlwZQ1sb2NhdGlvbl90eXBlB3N1YnR5cGUFdWludDgFc2VlZDAFdWludDgFc2VlZDEFdWludDgRbWl4dHVyZV9jb21wb25lbnQAAgdnb29kX2lkBnVpbnQxNgZwdXJpdHkGdWludDE2DG1peHR1cmVfaW5mbwABCmNvbXBvbmVudHMTbWl4dHVyZV9jb21wb25lbnRbXQ5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3Jlc29sdmUAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAV1aW50OBRuZXdfc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdCXNlbGxnb29kcwAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQIc2hpcF9yb3cADgJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwZ1aW50MzIIY2FwYWNpdHkGdWludDMyBmVuZXJneQZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzDm1vdmVtZW50X3N0YXRzCWdlbmVyYXRvcgxlbmVyZ3lfc3RhdHMHbG9hZGVycwxsb2FkZXJfc3RhdHMFdHJhZGUMdHJhZGVfc3RhdHM/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/CHNjaGVkdWxlCXNjaGVkdWxlPwxzdGFydGVyX2luZm8AAwdiYWxhbmNlBnVpbnQ2NARkZWJ0BnVpbnQ2NARzaGlwC2VudGl0eV9pbmZvCXN0YXRlX3JvdwAGB2VuYWJsZWQEYm9vbAVlcG9jaAZ1aW50MzIEc2FsdAZ1aW50NjQFc2hpcHMGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYGY29tbWl0C2NoZWNrc3VtMjU2CnN1cHBseV9yb3cABQJpZAZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMFZXBvY2gGdWludDY0B2dvb2RfaWQGdWludDE2BnN1cHBseQZ1aW50MTYIdGFrZWxvYW4AAgdhY2NvdW50BG5hbWUGYW1vdW50BnVpbnQ2NAR0YXNrAAkEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/B2NyZWRpdHMGaW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAOCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/D25ld19jb29yZGluYXRlcwxjb29yZGluYXRlcz8PY2FyZ29tYXNzX2RlbHRhBWludDY0C2NhcmdvX2FkZGVkDGNhcmdvX2l0ZW1bXQ1jYXJnb19yZW1vdmVkDGNhcmdvX2l0ZW1bXQdjcmVkaXRzBmludDY0Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10LdHJhZGVfc3RhdHMAAQZtYXJnaW4GdWludDE2CHRyYW5zZmVyAAYLc291cmNlX3R5cGUEbmFtZQlzb3VyY2VfaWQGdWludDY0CWRlc3RfdHlwZQRuYW1lB2Rlc3RfaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRFzdGFydGVyX2luZm9fdHlwZQxzdGFydGVyX2luZm8MdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACYAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAAA4Ucq8PghidXlnb29kc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWdvb2RzCnN1bW1hcnk6ICdCdXkgZ29vZHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGdvb2RzIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl08QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgoKLS0tAAAAAKh4zFQGZW5hYmxl4gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgoKLS0tAAAAICNzc1cHZXh0cmFjdKADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgbWl4dHVyZSBjb21wb3NpdGlvbi4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4AAAA4UcqyYghnZXRnb29kc6oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGdvb2RzCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRyYWRlYWJsZSBnb29kcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIG5hbWUsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGdvb2Q6IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwIlSFqPCCXNlbGxnb29kc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxnb29kcwpzdW1tYXJ5OiAnU2VsbCBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBnb29kcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgZ29vZHMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCwAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAA+FirxgNpNjQAAApzdXBwbHlfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAUAAAAOFHKvD4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8AAAA4UcqyYgpnb29kc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAPDnGjWzYgtuZWFyYnlfaW5mbwAAuMqbWLNiC3BsYXllcl9pbmZvAMBV+ZqMs2IMc3RhcnRlcl9pbmZvgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAMCJUhajwgx0YXNrX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHM=');
|
|
216
|
+
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhUB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5aXRlbXMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NARzZWVkB3VpbnQ2ND8JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQEc2VlZAZ1aW50NjQJY2xlYW5yc3ZwAAIFZXBvY2gGdWludDY0CG1heF9yb3dzBnVpbnQ2NApjbGVhcnRhYmxlAAMKdGFibGVfbmFtZQRuYW1lBXNjb3BlBW5hbWU/CG1heF9yb3dzB3VpbnQ2ND8GY29tbWl0AAEGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZw1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAPDXNoaXBfaHVsbG1hc3MGdWludDMyDXNoaXBfY2FwYWNpdHkGdWludDMyC3NoaXBfZW5lcmd5BnVpbnQxNgZzaGlwX3oGdWludDE2DHNoaXBfZW5naW5lcw5tb3ZlbWVudF9zdGF0cw5zaGlwX2dlbmVyYXRvcgxlbmVyZ3lfc3RhdHMMc2hpcF9sb2FkZXJzDGxvYWRlcl9zdGF0cwpzaGlwX3RyYWRlC3RyYWRlX3N0YXRzDnNoaXBfZXh0cmFjdG9yD2V4dHJhY3Rvcl9zdGF0cxJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhF3YXJlaG91c2VfbG9hZGVycwxsb2FkZXJfc3RhdHMSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAVBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10HZXh0cmFjdAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMg9leHRyYWN0b3Jfc3RhdHMABQRyYXRlBnVpbnQxNgVkcmFpbgZ1aW50MTYKZWZmaWNpZW5jeQZ1aW50MTYFZGVwdGgGdWludDE2BWRyaWxsBnVpbnQxNgtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdCWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0aXRlbXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYAAwJpZAZ1aW50MTYKYmFzZV9wcmljZQZ1aW50MzIEbWFzcwZ1aW50MzIKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoDmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAVpdGVtcw9sb2NhdGlvbl9pdGVtW10NbG9jYXRpb25faXRlbQAFAmlkBnVpbnQxNgVwcmljZQZ1aW50MzIGc3VwcGx5BnVpbnQxNhFyYXJpdHlfbXVsdGlwbGllcgZ1aW50MzITbG9jYXRpb25fbXVsdGlwbGllcgZ1aW50MzIMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OA5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0C3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/BHNhbHQAAQRzYWx0BnVpbnQ2NAhzY2hlZHVsZQACB3N0YXJ0ZWQKdGltZV9wb2ludAV0YXNrcwZ0YXNrW10Jc2VsbGl0ZW1zAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyDHNlcXVlbmNlX3JvdwACA2tleQRuYW1lBXZhbHVlBnVpbnQ2NAhzaGlwX3JvdwAOAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIGZW5lcmd5BnVpbnQxNgljYXJnb21hc3MGdWludDMyB2VuZ2luZXMObW92ZW1lbnRfc3RhdHMJZ2VuZXJhdG9yDGVuZXJneV9zdGF0cwdsb2FkZXJzDGxvYWRlcl9zdGF0cwV0cmFkZQx0cmFkZV9zdGF0cz8JZXh0cmFjdG9yEGV4dHJhY3Rvcl9zdGF0cz8Ic2NoZWR1bGUJc2NoZWR1bGU/DHN0YXJ0ZXJfaW5mbwADB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDY0BHNoaXALZW50aXR5X2luZm8Jc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYKc3VwcGx5X3JvdwAFAmlkBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwVlcG9jaAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYGc3VwcGx5BnVpbnQxNgh0YWtlbG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0BHRhc2sACQR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8HY3JlZGl0cwZpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDE2Pwp0YXNrX2V2ZW50AAkKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BXVpbnQ4BHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQxNj8MdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdC3RyYWRlX3N0YXRzAAEGbWFyZ2luBnVpbnQxNgh0cmFuc2ZlcgAGC3NvdXJjZV90eXBlBG5hbWUJc291cmNlX2lkBnVpbnQ2NAlkZXN0X3R5cGUEbmFtZQdkZXN0X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGdHJhdmVsAAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAQCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkRc3RhcnRlcl9pbmZvX3R5cGUMc3RhcnRlcl9pbmZvEGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcMdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACkAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAABYquy8PghidXlpdGVtc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWl0ZW1zCnN1bW1hcnk6ICdCdXkgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGl0ZW1zIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AAKgb32lURAljbGVhbnJzdnAAAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdPEBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4KCi0tLQAAYDQytyZFCWNvbmZpZ2xvZwAAAAAAqHjMVAZlbmFibGXiAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQuCgotLS0AAAAgI3NzVwdleHRyYWN0oQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZXh0cmFjdApzdW1tYXJ5OiAnRXh0cmFjdCByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkV4dHJhY3QgcmVzb3VyY2VzIGF0IHRoZSBzaGlwJ3MgY3VycmVudCBsb2NhdGlvbi4gT25seSB3b3JrcyBhdCBleHRyYWN0YWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGFuIGV4dHJhY3Rpb24gdGFzayB0aGF0IGNvbnN1bWVzIGVuZXJneSBhbmQgeWllbGRzIGNhcmdvIGJhc2VkIG9uIHRoZSBzaGlwJ3MgZXh0cmFjdG9yIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWcAALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwFJlF6PCCXNlbGxpdGVtc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxpdGVtcwpzdW1tYXJ5OiAnU2VsbCBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBpdGVtcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgaXRlbXMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tDAAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAD4WKvGA2k2NAAACnN1cHBseV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAABUAAABYquy8Pgx0YXNrX3Jlc3VsdHMAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAACAjc3NXDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAAAAWKrssmIKaXRlbXNfaW5mbwAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkAADw5xo1s2ILbmVhcmJ5X2luZm8AALjKm1izYgtwbGF5ZXJfaW5mbwDAVfmajLNiDHN0YXJ0ZXJfaW5mb4CVu0ZKjbNiEGVudGl0eV9zdW1tYXJ5W10Aotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAADAUmUXo8IMdGFza19yZXN1bHRzAAAAVy08zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRz');
|
|
217
217
|
const abi = antelope.ABI.from(abiBlob);
|
|
218
218
|
var Types;
|
|
219
219
|
(function (Types) {
|
|
@@ -244,24 +244,24 @@ var Types;
|
|
|
244
244
|
antelope.Struct.type('buycontainer')
|
|
245
245
|
], buycontainer);
|
|
246
246
|
Types.buycontainer = buycontainer;
|
|
247
|
-
let
|
|
247
|
+
let buyitems = class buyitems extends antelope.Struct {
|
|
248
248
|
};
|
|
249
249
|
tslib.__decorate([
|
|
250
250
|
antelope.Struct.field(antelope.Name)
|
|
251
|
-
],
|
|
251
|
+
], buyitems.prototype, "entity_type", void 0);
|
|
252
252
|
tslib.__decorate([
|
|
253
253
|
antelope.Struct.field(antelope.UInt64)
|
|
254
|
-
],
|
|
254
|
+
], buyitems.prototype, "id", void 0);
|
|
255
255
|
tslib.__decorate([
|
|
256
256
|
antelope.Struct.field(antelope.UInt16)
|
|
257
|
-
],
|
|
257
|
+
], buyitems.prototype, "item_id", void 0);
|
|
258
258
|
tslib.__decorate([
|
|
259
259
|
antelope.Struct.field(antelope.UInt32)
|
|
260
|
-
],
|
|
261
|
-
|
|
262
|
-
antelope.Struct.type('
|
|
263
|
-
],
|
|
264
|
-
Types.
|
|
260
|
+
], buyitems.prototype, "quantity", void 0);
|
|
261
|
+
buyitems = tslib.__decorate([
|
|
262
|
+
antelope.Struct.type('buyitems')
|
|
263
|
+
], buyitems);
|
|
264
|
+
Types.buyitems = buyitems;
|
|
265
265
|
let buyship = class buyship extends antelope.Struct {
|
|
266
266
|
};
|
|
267
267
|
tslib.__decorate([
|
|
@@ -340,32 +340,11 @@ var Types;
|
|
|
340
340
|
antelope.Struct.type('cancel_results')
|
|
341
341
|
], cancel_results);
|
|
342
342
|
Types.cancel_results = cancel_results;
|
|
343
|
-
let mixture_component = class mixture_component extends antelope.Struct {
|
|
344
|
-
};
|
|
345
|
-
tslib.__decorate([
|
|
346
|
-
antelope.Struct.field(antelope.UInt16)
|
|
347
|
-
], mixture_component.prototype, "good_id", void 0);
|
|
348
|
-
tslib.__decorate([
|
|
349
|
-
antelope.Struct.field(antelope.UInt16)
|
|
350
|
-
], mixture_component.prototype, "purity", void 0);
|
|
351
|
-
mixture_component = tslib.__decorate([
|
|
352
|
-
antelope.Struct.type('mixture_component')
|
|
353
|
-
], mixture_component);
|
|
354
|
-
Types.mixture_component = mixture_component;
|
|
355
|
-
let mixture_info = class mixture_info extends antelope.Struct {
|
|
356
|
-
};
|
|
357
|
-
tslib.__decorate([
|
|
358
|
-
antelope.Struct.field(mixture_component, { array: true })
|
|
359
|
-
], mixture_info.prototype, "components", void 0);
|
|
360
|
-
mixture_info = tslib.__decorate([
|
|
361
|
-
antelope.Struct.type('mixture_info')
|
|
362
|
-
], mixture_info);
|
|
363
|
-
Types.mixture_info = mixture_info;
|
|
364
343
|
let cargo_item = class cargo_item extends antelope.Struct {
|
|
365
344
|
};
|
|
366
345
|
tslib.__decorate([
|
|
367
346
|
antelope.Struct.field(antelope.UInt16)
|
|
368
|
-
], cargo_item.prototype, "
|
|
347
|
+
], cargo_item.prototype, "item_id", void 0);
|
|
369
348
|
tslib.__decorate([
|
|
370
349
|
antelope.Struct.field(antelope.UInt32)
|
|
371
350
|
], cargo_item.prototype, "quantity", void 0);
|
|
@@ -373,8 +352,8 @@ var Types;
|
|
|
373
352
|
antelope.Struct.field(antelope.UInt64)
|
|
374
353
|
], cargo_item.prototype, "unit_cost", void 0);
|
|
375
354
|
tslib.__decorate([
|
|
376
|
-
antelope.Struct.field(
|
|
377
|
-
], cargo_item.prototype, "
|
|
355
|
+
antelope.Struct.field(antelope.UInt64, { optional: true })
|
|
356
|
+
], cargo_item.prototype, "seed", void 0);
|
|
378
357
|
cargo_item = tslib.__decorate([
|
|
379
358
|
antelope.Struct.type('cargo_item')
|
|
380
359
|
], cargo_item);
|
|
@@ -389,17 +368,32 @@ var Types;
|
|
|
389
368
|
], cargo_row.prototype, "entity_id", void 0);
|
|
390
369
|
tslib.__decorate([
|
|
391
370
|
antelope.Struct.field(antelope.UInt64)
|
|
392
|
-
], cargo_row.prototype, "
|
|
371
|
+
], cargo_row.prototype, "item_id", void 0);
|
|
393
372
|
tslib.__decorate([
|
|
394
373
|
antelope.Struct.field(antelope.UInt64)
|
|
395
374
|
], cargo_row.prototype, "quantity", void 0);
|
|
396
375
|
tslib.__decorate([
|
|
397
376
|
antelope.Struct.field(antelope.UInt64)
|
|
398
377
|
], cargo_row.prototype, "unit_cost", void 0);
|
|
378
|
+
tslib.__decorate([
|
|
379
|
+
antelope.Struct.field(antelope.UInt64)
|
|
380
|
+
], cargo_row.prototype, "seed", void 0);
|
|
399
381
|
cargo_row = tslib.__decorate([
|
|
400
382
|
antelope.Struct.type('cargo_row')
|
|
401
383
|
], cargo_row);
|
|
402
384
|
Types.cargo_row = cargo_row;
|
|
385
|
+
let cleanrsvp = class cleanrsvp extends antelope.Struct {
|
|
386
|
+
};
|
|
387
|
+
tslib.__decorate([
|
|
388
|
+
antelope.Struct.field(antelope.UInt64)
|
|
389
|
+
], cleanrsvp.prototype, "epoch", void 0);
|
|
390
|
+
tslib.__decorate([
|
|
391
|
+
antelope.Struct.field(antelope.UInt64)
|
|
392
|
+
], cleanrsvp.prototype, "max_rows", void 0);
|
|
393
|
+
cleanrsvp = tslib.__decorate([
|
|
394
|
+
antelope.Struct.type('cleanrsvp')
|
|
395
|
+
], cleanrsvp);
|
|
396
|
+
Types.cleanrsvp = cleanrsvp;
|
|
403
397
|
let cleartable = class cleartable extends antelope.Struct {
|
|
404
398
|
};
|
|
405
399
|
tslib.__decorate([
|
|
@@ -424,6 +418,174 @@ var Types;
|
|
|
424
418
|
antelope.Struct.type('commit')
|
|
425
419
|
], commit);
|
|
426
420
|
Types.commit = commit;
|
|
421
|
+
let movement_stats = class movement_stats extends antelope.Struct {
|
|
422
|
+
};
|
|
423
|
+
tslib.__decorate([
|
|
424
|
+
antelope.Struct.field(antelope.UInt32)
|
|
425
|
+
], movement_stats.prototype, "thrust", void 0);
|
|
426
|
+
tslib.__decorate([
|
|
427
|
+
antelope.Struct.field(antelope.UInt16)
|
|
428
|
+
], movement_stats.prototype, "drain", void 0);
|
|
429
|
+
movement_stats = tslib.__decorate([
|
|
430
|
+
antelope.Struct.type('movement_stats')
|
|
431
|
+
], movement_stats);
|
|
432
|
+
Types.movement_stats = movement_stats;
|
|
433
|
+
let energy_stats = class energy_stats extends antelope.Struct {
|
|
434
|
+
};
|
|
435
|
+
tslib.__decorate([
|
|
436
|
+
antelope.Struct.field(antelope.UInt16)
|
|
437
|
+
], energy_stats.prototype, "capacity", void 0);
|
|
438
|
+
tslib.__decorate([
|
|
439
|
+
antelope.Struct.field(antelope.UInt16)
|
|
440
|
+
], energy_stats.prototype, "recharge", void 0);
|
|
441
|
+
energy_stats = tslib.__decorate([
|
|
442
|
+
antelope.Struct.type('energy_stats')
|
|
443
|
+
], energy_stats);
|
|
444
|
+
Types.energy_stats = energy_stats;
|
|
445
|
+
let loader_stats = class loader_stats extends antelope.Struct {
|
|
446
|
+
};
|
|
447
|
+
tslib.__decorate([
|
|
448
|
+
antelope.Struct.field(antelope.UInt32)
|
|
449
|
+
], loader_stats.prototype, "mass", void 0);
|
|
450
|
+
tslib.__decorate([
|
|
451
|
+
antelope.Struct.field(antelope.UInt16)
|
|
452
|
+
], loader_stats.prototype, "thrust", void 0);
|
|
453
|
+
tslib.__decorate([
|
|
454
|
+
antelope.Struct.field(antelope.UInt8)
|
|
455
|
+
], loader_stats.prototype, "quantity", void 0);
|
|
456
|
+
loader_stats = tslib.__decorate([
|
|
457
|
+
antelope.Struct.type('loader_stats')
|
|
458
|
+
], loader_stats);
|
|
459
|
+
Types.loader_stats = loader_stats;
|
|
460
|
+
let trade_stats = class trade_stats extends antelope.Struct {
|
|
461
|
+
};
|
|
462
|
+
tslib.__decorate([
|
|
463
|
+
antelope.Struct.field(antelope.UInt16)
|
|
464
|
+
], trade_stats.prototype, "margin", void 0);
|
|
465
|
+
trade_stats = tslib.__decorate([
|
|
466
|
+
antelope.Struct.type('trade_stats')
|
|
467
|
+
], trade_stats);
|
|
468
|
+
Types.trade_stats = trade_stats;
|
|
469
|
+
let extractor_stats = class extractor_stats extends antelope.Struct {
|
|
470
|
+
};
|
|
471
|
+
tslib.__decorate([
|
|
472
|
+
antelope.Struct.field(antelope.UInt16)
|
|
473
|
+
], extractor_stats.prototype, "rate", void 0);
|
|
474
|
+
tslib.__decorate([
|
|
475
|
+
antelope.Struct.field(antelope.UInt16)
|
|
476
|
+
], extractor_stats.prototype, "drain", void 0);
|
|
477
|
+
tslib.__decorate([
|
|
478
|
+
antelope.Struct.field(antelope.UInt16)
|
|
479
|
+
], extractor_stats.prototype, "efficiency", void 0);
|
|
480
|
+
tslib.__decorate([
|
|
481
|
+
antelope.Struct.field(antelope.UInt16)
|
|
482
|
+
], extractor_stats.prototype, "depth", void 0);
|
|
483
|
+
tslib.__decorate([
|
|
484
|
+
antelope.Struct.field(antelope.UInt16)
|
|
485
|
+
], extractor_stats.prototype, "drill", void 0);
|
|
486
|
+
extractor_stats = tslib.__decorate([
|
|
487
|
+
antelope.Struct.type('extractor_stats')
|
|
488
|
+
], extractor_stats);
|
|
489
|
+
Types.extractor_stats = extractor_stats;
|
|
490
|
+
let warp_stats = class warp_stats extends antelope.Struct {
|
|
491
|
+
};
|
|
492
|
+
tslib.__decorate([
|
|
493
|
+
antelope.Struct.field(antelope.UInt32)
|
|
494
|
+
], warp_stats.prototype, "range", void 0);
|
|
495
|
+
warp_stats = tslib.__decorate([
|
|
496
|
+
antelope.Struct.type('warp_stats')
|
|
497
|
+
], warp_stats);
|
|
498
|
+
Types.warp_stats = warp_stats;
|
|
499
|
+
let entity_defaults = class entity_defaults extends antelope.Struct {
|
|
500
|
+
};
|
|
501
|
+
tslib.__decorate([
|
|
502
|
+
antelope.Struct.field(antelope.UInt32)
|
|
503
|
+
], entity_defaults.prototype, "ship_hullmass", void 0);
|
|
504
|
+
tslib.__decorate([
|
|
505
|
+
antelope.Struct.field(antelope.UInt32)
|
|
506
|
+
], entity_defaults.prototype, "ship_capacity", void 0);
|
|
507
|
+
tslib.__decorate([
|
|
508
|
+
antelope.Struct.field(antelope.UInt16)
|
|
509
|
+
], entity_defaults.prototype, "ship_energy", void 0);
|
|
510
|
+
tslib.__decorate([
|
|
511
|
+
antelope.Struct.field(antelope.UInt16)
|
|
512
|
+
], entity_defaults.prototype, "ship_z", void 0);
|
|
513
|
+
tslib.__decorate([
|
|
514
|
+
antelope.Struct.field(movement_stats)
|
|
515
|
+
], entity_defaults.prototype, "ship_engines", void 0);
|
|
516
|
+
tslib.__decorate([
|
|
517
|
+
antelope.Struct.field(energy_stats)
|
|
518
|
+
], entity_defaults.prototype, "ship_generator", void 0);
|
|
519
|
+
tslib.__decorate([
|
|
520
|
+
antelope.Struct.field(loader_stats)
|
|
521
|
+
], entity_defaults.prototype, "ship_loaders", void 0);
|
|
522
|
+
tslib.__decorate([
|
|
523
|
+
antelope.Struct.field(trade_stats)
|
|
524
|
+
], entity_defaults.prototype, "ship_trade", void 0);
|
|
525
|
+
tslib.__decorate([
|
|
526
|
+
antelope.Struct.field(extractor_stats)
|
|
527
|
+
], entity_defaults.prototype, "ship_extractor", void 0);
|
|
528
|
+
tslib.__decorate([
|
|
529
|
+
antelope.Struct.field(antelope.UInt32)
|
|
530
|
+
], entity_defaults.prototype, "warehouse_capacity", void 0);
|
|
531
|
+
tslib.__decorate([
|
|
532
|
+
antelope.Struct.field(antelope.UInt16)
|
|
533
|
+
], entity_defaults.prototype, "warehouse_z", void 0);
|
|
534
|
+
tslib.__decorate([
|
|
535
|
+
antelope.Struct.field(loader_stats)
|
|
536
|
+
], entity_defaults.prototype, "warehouse_loaders", void 0);
|
|
537
|
+
tslib.__decorate([
|
|
538
|
+
antelope.Struct.field(antelope.UInt32)
|
|
539
|
+
], entity_defaults.prototype, "container_hullmass", void 0);
|
|
540
|
+
tslib.__decorate([
|
|
541
|
+
antelope.Struct.field(antelope.UInt32)
|
|
542
|
+
], entity_defaults.prototype, "container_capacity", void 0);
|
|
543
|
+
tslib.__decorate([
|
|
544
|
+
antelope.Struct.field(antelope.UInt16)
|
|
545
|
+
], entity_defaults.prototype, "container_z", void 0);
|
|
546
|
+
entity_defaults = tslib.__decorate([
|
|
547
|
+
antelope.Struct.type('entity_defaults')
|
|
548
|
+
], entity_defaults);
|
|
549
|
+
Types.entity_defaults = entity_defaults;
|
|
550
|
+
let item_def = class item_def extends antelope.Struct {
|
|
551
|
+
};
|
|
552
|
+
tslib.__decorate([
|
|
553
|
+
antelope.Struct.field(antelope.UInt16)
|
|
554
|
+
], item_def.prototype, "id", void 0);
|
|
555
|
+
tslib.__decorate([
|
|
556
|
+
antelope.Struct.field(antelope.UInt32)
|
|
557
|
+
], item_def.prototype, "base_price", void 0);
|
|
558
|
+
tslib.__decorate([
|
|
559
|
+
antelope.Struct.field(antelope.UInt32)
|
|
560
|
+
], item_def.prototype, "mass", void 0);
|
|
561
|
+
item_def = tslib.__decorate([
|
|
562
|
+
antelope.Struct.type('item_def')
|
|
563
|
+
], item_def);
|
|
564
|
+
Types.item_def = item_def;
|
|
565
|
+
let game_config = class game_config extends antelope.Struct {
|
|
566
|
+
};
|
|
567
|
+
tslib.__decorate([
|
|
568
|
+
antelope.Struct.field(antelope.UInt32)
|
|
569
|
+
], game_config.prototype, "version", void 0);
|
|
570
|
+
tslib.__decorate([
|
|
571
|
+
antelope.Struct.field(entity_defaults)
|
|
572
|
+
], game_config.prototype, "defaults", void 0);
|
|
573
|
+
tslib.__decorate([
|
|
574
|
+
antelope.Struct.field(item_def, { array: true })
|
|
575
|
+
], game_config.prototype, "items", void 0);
|
|
576
|
+
game_config = tslib.__decorate([
|
|
577
|
+
antelope.Struct.type('game_config')
|
|
578
|
+
], game_config);
|
|
579
|
+
Types.game_config = game_config;
|
|
580
|
+
let configlog = class configlog extends antelope.Struct {
|
|
581
|
+
};
|
|
582
|
+
tslib.__decorate([
|
|
583
|
+
antelope.Struct.field(game_config)
|
|
584
|
+
], configlog.prototype, "config", void 0);
|
|
585
|
+
configlog = tslib.__decorate([
|
|
586
|
+
antelope.Struct.type('configlog')
|
|
587
|
+
], configlog);
|
|
588
|
+
Types.configlog = configlog;
|
|
427
589
|
let coordinates = class coordinates extends antelope.Struct {
|
|
428
590
|
};
|
|
429
591
|
tslib.__decorate([
|
|
@@ -523,18 +685,6 @@ var Types;
|
|
|
523
685
|
antelope.Struct.type('enable')
|
|
524
686
|
], enable);
|
|
525
687
|
Types.enable = enable;
|
|
526
|
-
let energy_stats = class energy_stats extends antelope.Struct {
|
|
527
|
-
};
|
|
528
|
-
tslib.__decorate([
|
|
529
|
-
antelope.Struct.field(antelope.UInt16)
|
|
530
|
-
], energy_stats.prototype, "capacity", void 0);
|
|
531
|
-
tslib.__decorate([
|
|
532
|
-
antelope.Struct.field(antelope.UInt16)
|
|
533
|
-
], energy_stats.prototype, "recharge", void 0);
|
|
534
|
-
energy_stats = tslib.__decorate([
|
|
535
|
-
antelope.Struct.type('energy_stats')
|
|
536
|
-
], energy_stats);
|
|
537
|
-
Types.energy_stats = energy_stats;
|
|
538
688
|
let entity_current_state = class entity_current_state extends antelope.Struct {
|
|
539
689
|
};
|
|
540
690
|
tslib.__decorate([
|
|
@@ -547,48 +697,6 @@ var Types;
|
|
|
547
697
|
antelope.Struct.type('entity_current_state')
|
|
548
698
|
], entity_current_state);
|
|
549
699
|
Types.entity_current_state = entity_current_state;
|
|
550
|
-
let loader_stats = class loader_stats extends antelope.Struct {
|
|
551
|
-
};
|
|
552
|
-
tslib.__decorate([
|
|
553
|
-
antelope.Struct.field(antelope.UInt32)
|
|
554
|
-
], loader_stats.prototype, "mass", void 0);
|
|
555
|
-
tslib.__decorate([
|
|
556
|
-
antelope.Struct.field(antelope.UInt16)
|
|
557
|
-
], loader_stats.prototype, "thrust", void 0);
|
|
558
|
-
tslib.__decorate([
|
|
559
|
-
antelope.Struct.field(antelope.UInt8)
|
|
560
|
-
], loader_stats.prototype, "quantity", void 0);
|
|
561
|
-
loader_stats = tslib.__decorate([
|
|
562
|
-
antelope.Struct.type('loader_stats')
|
|
563
|
-
], loader_stats);
|
|
564
|
-
Types.loader_stats = loader_stats;
|
|
565
|
-
let movement_stats = class movement_stats extends antelope.Struct {
|
|
566
|
-
};
|
|
567
|
-
tslib.__decorate([
|
|
568
|
-
antelope.Struct.field(antelope.UInt32)
|
|
569
|
-
], movement_stats.prototype, "thrust", void 0);
|
|
570
|
-
tslib.__decorate([
|
|
571
|
-
antelope.Struct.field(antelope.UInt16)
|
|
572
|
-
], movement_stats.prototype, "drain", void 0);
|
|
573
|
-
movement_stats = tslib.__decorate([
|
|
574
|
-
antelope.Struct.type('movement_stats')
|
|
575
|
-
], movement_stats);
|
|
576
|
-
Types.movement_stats = movement_stats;
|
|
577
|
-
let extractor_stats = class extractor_stats extends antelope.Struct {
|
|
578
|
-
};
|
|
579
|
-
tslib.__decorate([
|
|
580
|
-
antelope.Struct.field(antelope.UInt16)
|
|
581
|
-
], extractor_stats.prototype, "rate", void 0);
|
|
582
|
-
tslib.__decorate([
|
|
583
|
-
antelope.Struct.field(antelope.UInt16)
|
|
584
|
-
], extractor_stats.prototype, "drain", void 0);
|
|
585
|
-
tslib.__decorate([
|
|
586
|
-
antelope.Struct.field(antelope.UInt16)
|
|
587
|
-
], extractor_stats.prototype, "efficiency", void 0);
|
|
588
|
-
extractor_stats = tslib.__decorate([
|
|
589
|
-
antelope.Struct.type('extractor_stats')
|
|
590
|
-
], extractor_stats);
|
|
591
|
-
Types.extractor_stats = extractor_stats;
|
|
592
700
|
let entity_info = class entity_info extends antelope.Struct {
|
|
593
701
|
};
|
|
594
702
|
tslib.__decorate([
|
|
@@ -633,6 +741,9 @@ var Types;
|
|
|
633
741
|
tslib.__decorate([
|
|
634
742
|
antelope.Struct.field(extractor_stats, { optional: true })
|
|
635
743
|
], entity_info.prototype, "extractor", void 0);
|
|
744
|
+
tslib.__decorate([
|
|
745
|
+
antelope.Struct.field(warp_stats, { optional: true })
|
|
746
|
+
], entity_info.prototype, "warp", void 0);
|
|
636
747
|
tslib.__decorate([
|
|
637
748
|
antelope.Struct.field('bool')
|
|
638
749
|
], entity_info.prototype, "is_idle", void 0);
|
|
@@ -720,13 +831,28 @@ var Types;
|
|
|
720
831
|
Types.entitygroup_row = entitygroup_row;
|
|
721
832
|
let extract = class extract extends antelope.Struct {
|
|
722
833
|
};
|
|
834
|
+
tslib.__decorate([
|
|
835
|
+
antelope.Struct.field(antelope.Name)
|
|
836
|
+
], extract.prototype, "entity_type", void 0);
|
|
723
837
|
tslib.__decorate([
|
|
724
838
|
antelope.Struct.field(antelope.UInt64)
|
|
725
|
-
], extract.prototype, "
|
|
839
|
+
], extract.prototype, "id", void 0);
|
|
840
|
+
tslib.__decorate([
|
|
841
|
+
antelope.Struct.field(antelope.UInt16)
|
|
842
|
+
], extract.prototype, "stratum", void 0);
|
|
843
|
+
tslib.__decorate([
|
|
844
|
+
antelope.Struct.field(antelope.UInt32)
|
|
845
|
+
], extract.prototype, "quantity", void 0);
|
|
726
846
|
extract = tslib.__decorate([
|
|
727
847
|
antelope.Struct.type('extract')
|
|
728
848
|
], extract);
|
|
729
849
|
Types.extract = extract;
|
|
850
|
+
let getconfig = class getconfig extends antelope.Struct {
|
|
851
|
+
};
|
|
852
|
+
getconfig = tslib.__decorate([
|
|
853
|
+
antelope.Struct.type('getconfig')
|
|
854
|
+
], getconfig);
|
|
855
|
+
Types.getconfig = getconfig;
|
|
730
856
|
let getentities = class getentities extends antelope.Struct {
|
|
731
857
|
};
|
|
732
858
|
tslib.__decorate([
|
|
@@ -751,12 +877,12 @@ var Types;
|
|
|
751
877
|
antelope.Struct.type('getentity')
|
|
752
878
|
], getentity);
|
|
753
879
|
Types.getentity = getentity;
|
|
754
|
-
let
|
|
880
|
+
let getitems = class getitems extends antelope.Struct {
|
|
755
881
|
};
|
|
756
|
-
|
|
757
|
-
antelope.Struct.type('
|
|
758
|
-
],
|
|
759
|
-
Types.
|
|
882
|
+
getitems = tslib.__decorate([
|
|
883
|
+
antelope.Struct.type('getitems')
|
|
884
|
+
], getitems);
|
|
885
|
+
Types.getitems = getitems;
|
|
760
886
|
let getlocation = class getlocation extends antelope.Struct {
|
|
761
887
|
};
|
|
762
888
|
tslib.__decorate([
|
|
@@ -823,30 +949,6 @@ var Types;
|
|
|
823
949
|
antelope.Struct.type('getsummaries')
|
|
824
950
|
], getsummaries);
|
|
825
951
|
Types.getsummaries = getsummaries;
|
|
826
|
-
let good = class good extends antelope.Struct {
|
|
827
|
-
};
|
|
828
|
-
tslib.__decorate([
|
|
829
|
-
antelope.Struct.field(antelope.UInt16)
|
|
830
|
-
], good.prototype, "id", void 0);
|
|
831
|
-
tslib.__decorate([
|
|
832
|
-
antelope.Struct.field(antelope.UInt32)
|
|
833
|
-
], good.prototype, "base_price", void 0);
|
|
834
|
-
tslib.__decorate([
|
|
835
|
-
antelope.Struct.field(antelope.UInt32)
|
|
836
|
-
], good.prototype, "mass", void 0);
|
|
837
|
-
good = tslib.__decorate([
|
|
838
|
-
antelope.Struct.type('good')
|
|
839
|
-
], good);
|
|
840
|
-
Types.good = good;
|
|
841
|
-
let goods_info = class goods_info extends antelope.Struct {
|
|
842
|
-
};
|
|
843
|
-
tslib.__decorate([
|
|
844
|
-
antelope.Struct.field(good, { array: true })
|
|
845
|
-
], goods_info.prototype, "goods", void 0);
|
|
846
|
-
goods_info = tslib.__decorate([
|
|
847
|
-
antelope.Struct.type('goods_info')
|
|
848
|
-
], goods_info);
|
|
849
|
-
Types.goods_info = goods_info;
|
|
850
952
|
let grouptravel = class grouptravel extends antelope.Struct {
|
|
851
953
|
};
|
|
852
954
|
tslib.__decorate([
|
|
@@ -892,6 +994,15 @@ var Types;
|
|
|
892
994
|
antelope.Struct.type('init')
|
|
893
995
|
], init);
|
|
894
996
|
Types.init = init;
|
|
997
|
+
let items_info = class items_info extends antelope.Struct {
|
|
998
|
+
};
|
|
999
|
+
tslib.__decorate([
|
|
1000
|
+
antelope.Struct.field(item_def, { array: true })
|
|
1001
|
+
], items_info.prototype, "items", void 0);
|
|
1002
|
+
items_info = tslib.__decorate([
|
|
1003
|
+
antelope.Struct.type('items_info')
|
|
1004
|
+
], items_info);
|
|
1005
|
+
Types.items_info = items_info;
|
|
895
1006
|
let join = class join extends antelope.Struct {
|
|
896
1007
|
};
|
|
897
1008
|
tslib.__decorate([
|
|
@@ -949,27 +1060,27 @@ var Types;
|
|
|
949
1060
|
antelope.Struct.type('location_derived')
|
|
950
1061
|
], location_derived);
|
|
951
1062
|
Types.location_derived = location_derived;
|
|
952
|
-
let
|
|
1063
|
+
let location_item = class location_item extends antelope.Struct {
|
|
953
1064
|
};
|
|
954
1065
|
tslib.__decorate([
|
|
955
1066
|
antelope.Struct.field(antelope.UInt16)
|
|
956
|
-
],
|
|
1067
|
+
], location_item.prototype, "id", void 0);
|
|
957
1068
|
tslib.__decorate([
|
|
958
1069
|
antelope.Struct.field(antelope.UInt32)
|
|
959
|
-
],
|
|
1070
|
+
], location_item.prototype, "price", void 0);
|
|
960
1071
|
tslib.__decorate([
|
|
961
1072
|
antelope.Struct.field(antelope.UInt16)
|
|
962
|
-
],
|
|
1073
|
+
], location_item.prototype, "supply", void 0);
|
|
963
1074
|
tslib.__decorate([
|
|
964
1075
|
antelope.Struct.field(antelope.UInt32)
|
|
965
|
-
],
|
|
1076
|
+
], location_item.prototype, "rarity_multiplier", void 0);
|
|
966
1077
|
tslib.__decorate([
|
|
967
1078
|
antelope.Struct.field(antelope.UInt32)
|
|
968
|
-
],
|
|
969
|
-
|
|
970
|
-
antelope.Struct.type('
|
|
971
|
-
],
|
|
972
|
-
Types.
|
|
1079
|
+
], location_item.prototype, "location_multiplier", void 0);
|
|
1080
|
+
location_item = tslib.__decorate([
|
|
1081
|
+
antelope.Struct.type('location_item')
|
|
1082
|
+
], location_item);
|
|
1083
|
+
Types.location_item = location_item;
|
|
973
1084
|
let location_info = class location_info extends antelope.Struct {
|
|
974
1085
|
};
|
|
975
1086
|
tslib.__decorate([
|
|
@@ -979,8 +1090,8 @@ var Types;
|
|
|
979
1090
|
antelope.Struct.field('bool')
|
|
980
1091
|
], location_info.prototype, "is_system", void 0);
|
|
981
1092
|
tslib.__decorate([
|
|
982
|
-
antelope.Struct.field(
|
|
983
|
-
], location_info.prototype, "
|
|
1093
|
+
antelope.Struct.field(location_item, { array: true })
|
|
1094
|
+
], location_info.prototype, "items", void 0);
|
|
984
1095
|
location_info = tslib.__decorate([
|
|
985
1096
|
antelope.Struct.type('location_info')
|
|
986
1097
|
], location_info);
|
|
@@ -1077,21 +1188,6 @@ var Types;
|
|
|
1077
1188
|
tslib.__decorate([
|
|
1078
1189
|
antelope.Struct.field(antelope.UInt16, { optional: true })
|
|
1079
1190
|
], task_event.prototype, "new_energy", void 0);
|
|
1080
|
-
tslib.__decorate([
|
|
1081
|
-
antelope.Struct.field(coordinates, { optional: true })
|
|
1082
|
-
], task_event.prototype, "new_coordinates", void 0);
|
|
1083
|
-
tslib.__decorate([
|
|
1084
|
-
antelope.Struct.field(antelope.Int64)
|
|
1085
|
-
], task_event.prototype, "cargomass_delta", void 0);
|
|
1086
|
-
tslib.__decorate([
|
|
1087
|
-
antelope.Struct.field(cargo_item, { array: true })
|
|
1088
|
-
], task_event.prototype, "cargo_added", void 0);
|
|
1089
|
-
tslib.__decorate([
|
|
1090
|
-
antelope.Struct.field(cargo_item, { array: true })
|
|
1091
|
-
], task_event.prototype, "cargo_removed", void 0);
|
|
1092
|
-
tslib.__decorate([
|
|
1093
|
-
antelope.Struct.field(antelope.Int64, { optional: true })
|
|
1094
|
-
], task_event.prototype, "credits", void 0);
|
|
1095
1191
|
task_event = tslib.__decorate([
|
|
1096
1192
|
antelope.Struct.type('task_event')
|
|
1097
1193
|
], task_event);
|
|
@@ -1201,6 +1297,18 @@ var Types;
|
|
|
1201
1297
|
antelope.Struct.type('recharge')
|
|
1202
1298
|
], recharge);
|
|
1203
1299
|
Types.recharge = recharge;
|
|
1300
|
+
let reserve_row = class reserve_row extends antelope.Struct {
|
|
1301
|
+
};
|
|
1302
|
+
tslib.__decorate([
|
|
1303
|
+
antelope.Struct.field(antelope.UInt64)
|
|
1304
|
+
], reserve_row.prototype, "id", void 0);
|
|
1305
|
+
tslib.__decorate([
|
|
1306
|
+
antelope.Struct.field(antelope.UInt32)
|
|
1307
|
+
], reserve_row.prototype, "remaining", void 0);
|
|
1308
|
+
reserve_row = tslib.__decorate([
|
|
1309
|
+
antelope.Struct.type('reserve_row')
|
|
1310
|
+
], reserve_row);
|
|
1311
|
+
Types.reserve_row = reserve_row;
|
|
1204
1312
|
let resolve = class resolve extends antelope.Struct {
|
|
1205
1313
|
};
|
|
1206
1314
|
tslib.__decorate([
|
|
@@ -1249,24 +1357,24 @@ var Types;
|
|
|
1249
1357
|
antelope.Struct.type('salt')
|
|
1250
1358
|
], salt);
|
|
1251
1359
|
Types.salt = salt;
|
|
1252
|
-
let
|
|
1360
|
+
let sellitems = class sellitems extends antelope.Struct {
|
|
1253
1361
|
};
|
|
1254
1362
|
tslib.__decorate([
|
|
1255
1363
|
antelope.Struct.field(antelope.Name)
|
|
1256
|
-
],
|
|
1364
|
+
], sellitems.prototype, "entity_type", void 0);
|
|
1257
1365
|
tslib.__decorate([
|
|
1258
1366
|
antelope.Struct.field(antelope.UInt64)
|
|
1259
|
-
],
|
|
1367
|
+
], sellitems.prototype, "id", void 0);
|
|
1260
1368
|
tslib.__decorate([
|
|
1261
1369
|
antelope.Struct.field(antelope.UInt16)
|
|
1262
|
-
],
|
|
1370
|
+
], sellitems.prototype, "item_id", void 0);
|
|
1263
1371
|
tslib.__decorate([
|
|
1264
1372
|
antelope.Struct.field(antelope.UInt32)
|
|
1265
|
-
],
|
|
1266
|
-
|
|
1267
|
-
antelope.Struct.type('
|
|
1268
|
-
],
|
|
1269
|
-
Types.
|
|
1373
|
+
], sellitems.prototype, "quantity", void 0);
|
|
1374
|
+
sellitems = tslib.__decorate([
|
|
1375
|
+
antelope.Struct.type('sellitems')
|
|
1376
|
+
], sellitems);
|
|
1377
|
+
Types.sellitems = sellitems;
|
|
1270
1378
|
let sequence_row = class sequence_row extends antelope.Struct {
|
|
1271
1379
|
};
|
|
1272
1380
|
tslib.__decorate([
|
|
@@ -1279,15 +1387,6 @@ var Types;
|
|
|
1279
1387
|
antelope.Struct.type('sequence_row')
|
|
1280
1388
|
], sequence_row);
|
|
1281
1389
|
Types.sequence_row = sequence_row;
|
|
1282
|
-
let trade_stats = class trade_stats extends antelope.Struct {
|
|
1283
|
-
};
|
|
1284
|
-
tslib.__decorate([
|
|
1285
|
-
antelope.Struct.field(antelope.UInt16)
|
|
1286
|
-
], trade_stats.prototype, "margin", void 0);
|
|
1287
|
-
trade_stats = tslib.__decorate([
|
|
1288
|
-
antelope.Struct.type('trade_stats')
|
|
1289
|
-
], trade_stats);
|
|
1290
|
-
Types.trade_stats = trade_stats;
|
|
1291
1390
|
let ship_row = class ship_row extends antelope.Struct {
|
|
1292
1391
|
};
|
|
1293
1392
|
tslib.__decorate([
|
|
@@ -1329,6 +1428,9 @@ var Types;
|
|
|
1329
1428
|
tslib.__decorate([
|
|
1330
1429
|
antelope.Struct.field(extractor_stats, { optional: true })
|
|
1331
1430
|
], ship_row.prototype, "extractor", void 0);
|
|
1431
|
+
tslib.__decorate([
|
|
1432
|
+
antelope.Struct.field(warp_stats, { optional: true })
|
|
1433
|
+
], ship_row.prototype, "warp", void 0);
|
|
1332
1434
|
tslib.__decorate([
|
|
1333
1435
|
antelope.Struct.field(schedule, { optional: true })
|
|
1334
1436
|
], ship_row.prototype, "schedule", void 0);
|
|
@@ -1388,7 +1490,7 @@ var Types;
|
|
|
1388
1490
|
], supply_row.prototype, "epoch", void 0);
|
|
1389
1491
|
tslib.__decorate([
|
|
1390
1492
|
antelope.Struct.field(antelope.UInt16)
|
|
1391
|
-
], supply_row.prototype, "
|
|
1493
|
+
], supply_row.prototype, "item_id", void 0);
|
|
1392
1494
|
tslib.__decorate([
|
|
1393
1495
|
antelope.Struct.field(antelope.UInt16)
|
|
1394
1496
|
], supply_row.prototype, "supply", void 0);
|
|
@@ -1433,7 +1535,7 @@ var Types;
|
|
|
1433
1535
|
], transfer.prototype, "dest_id", void 0);
|
|
1434
1536
|
tslib.__decorate([
|
|
1435
1537
|
antelope.Struct.field(antelope.UInt16)
|
|
1436
|
-
], transfer.prototype, "
|
|
1538
|
+
], transfer.prototype, "item_id", void 0);
|
|
1437
1539
|
tslib.__decorate([
|
|
1438
1540
|
antelope.Struct.field(antelope.UInt32)
|
|
1439
1541
|
], transfer.prototype, "quantity", void 0);
|
|
@@ -1473,6 +1575,9 @@ var Types;
|
|
|
1473
1575
|
tslib.__decorate([
|
|
1474
1576
|
antelope.Struct.field(starter_info)
|
|
1475
1577
|
], types_row.prototype, "starter_info_type", void 0);
|
|
1578
|
+
tslib.__decorate([
|
|
1579
|
+
antelope.Struct.field(game_config)
|
|
1580
|
+
], types_row.prototype, "game_config_type", void 0);
|
|
1476
1581
|
types_row = tslib.__decorate([
|
|
1477
1582
|
antelope.Struct.type('types_row')
|
|
1478
1583
|
], types_row);
|
|
@@ -1550,6 +1655,7 @@ const TableMap = {
|
|
|
1550
1655
|
entitygroup: Types.entitygroup_row,
|
|
1551
1656
|
location: Types.location_row,
|
|
1552
1657
|
player: Types.player_row,
|
|
1658
|
+
reserve: Types.reserve_row,
|
|
1553
1659
|
sequence: Types.sequence_row,
|
|
1554
1660
|
ship: Types.ship_row,
|
|
1555
1661
|
state: Types.state_row,
|
|
@@ -1596,11 +1702,11 @@ const ERROR_SYSTEM_DISABLED = 'This game is currently disabled.';
|
|
|
1596
1702
|
const ERROR_SYSTEM_NOT_INITIALIZED = 'This game has not been initialized.';
|
|
1597
1703
|
const GAME_NOT_FOUND = 'Cannot find game for given account name.';
|
|
1598
1704
|
const GAME_SEED_NOT_SET = 'This game has not initialized an epoch seed value.';
|
|
1599
|
-
const
|
|
1600
|
-
const
|
|
1705
|
+
const ITEM_DOES_NOT_EXIST = 'Item does not exist.';
|
|
1706
|
+
const ITEM_NOT_AVAILABLE_AT_LOCATION = 'Item is not tradeable at ship location.';
|
|
1601
1707
|
const INSUFFICIENT_BALANCE = 'Insufficient balance.';
|
|
1602
|
-
const
|
|
1603
|
-
const
|
|
1708
|
+
const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
|
|
1709
|
+
const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
|
|
1604
1710
|
const INVALID_AMOUNT = 'Invalid amount.';
|
|
1605
1711
|
const REQUIRES_MORE_THAN_ONE = 'A value greater than one is required.';
|
|
1606
1712
|
const REQUIRES_POSITIVE_VALUE = 'Value must be greater than zero.';
|
|
@@ -1661,6 +1767,7 @@ exports.TaskType = void 0;
|
|
|
1661
1767
|
TaskType[TaskType["LOAD"] = 3] = "LOAD";
|
|
1662
1768
|
TaskType[TaskType["UNLOAD"] = 4] = "UNLOAD";
|
|
1663
1769
|
TaskType[TaskType["EXTRACT"] = 5] = "EXTRACT";
|
|
1770
|
+
TaskType[TaskType["WARP"] = 6] = "WARP";
|
|
1664
1771
|
})(exports.TaskType || (exports.TaskType = {}));
|
|
1665
1772
|
exports.LocationType = void 0;
|
|
1666
1773
|
(function (LocationType) {
|
|
@@ -1700,43 +1807,52 @@ function coordsToLocationId(coords) {
|
|
|
1700
1807
|
const id = (x << BigInt(32)) | y;
|
|
1701
1808
|
return antelope.UInt64.from(id);
|
|
1702
1809
|
}
|
|
1703
|
-
exports.
|
|
1810
|
+
exports.Item = class Item extends antelope.Struct {
|
|
1704
1811
|
};
|
|
1705
1812
|
tslib.__decorate([
|
|
1706
1813
|
antelope.Struct.field(antelope.UInt16)
|
|
1707
|
-
], exports.
|
|
1814
|
+
], exports.Item.prototype, "id", void 0);
|
|
1708
1815
|
tslib.__decorate([
|
|
1709
1816
|
antelope.Struct.field('string')
|
|
1710
|
-
], exports.
|
|
1817
|
+
], exports.Item.prototype, "name", void 0);
|
|
1711
1818
|
tslib.__decorate([
|
|
1712
1819
|
antelope.Struct.field('string')
|
|
1713
|
-
], exports.
|
|
1820
|
+
], exports.Item.prototype, "description", void 0);
|
|
1714
1821
|
tslib.__decorate([
|
|
1715
1822
|
antelope.Struct.field(antelope.UInt32)
|
|
1716
|
-
], exports.
|
|
1823
|
+
], exports.Item.prototype, "base_price", void 0);
|
|
1717
1824
|
tslib.__decorate([
|
|
1718
1825
|
antelope.Struct.field(antelope.UInt32)
|
|
1719
|
-
], exports.
|
|
1720
|
-
|
|
1721
|
-
antelope.Struct.
|
|
1722
|
-
], exports.
|
|
1723
|
-
|
|
1826
|
+
], exports.Item.prototype, "mass", void 0);
|
|
1827
|
+
tslib.__decorate([
|
|
1828
|
+
antelope.Struct.field('string')
|
|
1829
|
+
], exports.Item.prototype, "category", void 0);
|
|
1830
|
+
tslib.__decorate([
|
|
1831
|
+
antelope.Struct.field('string')
|
|
1832
|
+
], exports.Item.prototype, "rarity", void 0);
|
|
1833
|
+
tslib.__decorate([
|
|
1834
|
+
antelope.Struct.field('string')
|
|
1835
|
+
], exports.Item.prototype, "color", void 0);
|
|
1836
|
+
exports.Item = tslib.__decorate([
|
|
1837
|
+
antelope.Struct.type('item')
|
|
1838
|
+
], exports.Item);
|
|
1839
|
+
exports.ItemPrice = class ItemPrice extends antelope.Struct {
|
|
1724
1840
|
};
|
|
1725
1841
|
tslib.__decorate([
|
|
1726
1842
|
antelope.Struct.field(antelope.UInt16)
|
|
1727
|
-
], exports.
|
|
1843
|
+
], exports.ItemPrice.prototype, "id", void 0);
|
|
1728
1844
|
tslib.__decorate([
|
|
1729
|
-
antelope.Struct.field(exports.
|
|
1730
|
-
], exports.
|
|
1845
|
+
antelope.Struct.field(exports.Item)
|
|
1846
|
+
], exports.ItemPrice.prototype, "item", void 0);
|
|
1731
1847
|
tslib.__decorate([
|
|
1732
1848
|
antelope.Struct.field(antelope.UInt32)
|
|
1733
|
-
], exports.
|
|
1849
|
+
], exports.ItemPrice.prototype, "price", void 0);
|
|
1734
1850
|
tslib.__decorate([
|
|
1735
1851
|
antelope.Struct.field(antelope.UInt16)
|
|
1736
|
-
], exports.
|
|
1737
|
-
exports.
|
|
1738
|
-
antelope.Struct.type('
|
|
1739
|
-
], exports.
|
|
1852
|
+
], exports.ItemPrice.prototype, "supply", void 0);
|
|
1853
|
+
exports.ItemPrice = tslib.__decorate([
|
|
1854
|
+
antelope.Struct.type('ItemPrice')
|
|
1855
|
+
], exports.ItemPrice);
|
|
1740
1856
|
|
|
1741
1857
|
function getCurrentEpoch(game) {
|
|
1742
1858
|
const current = new Date().getTime();
|
|
@@ -2968,7 +3084,7 @@ function getLocationType(gameSeed, coordinates) {
|
|
|
2968
3084
|
return exports.LocationType.NEBULA;
|
|
2969
3085
|
}
|
|
2970
3086
|
function isExtractableLocation(locationType) {
|
|
2971
|
-
return locationType
|
|
3087
|
+
return locationType !== exports.LocationType.EMPTY;
|
|
2972
3088
|
}
|
|
2973
3089
|
function getSystemName(gameSeed, location) {
|
|
2974
3090
|
const seed = antelope.Checksum256.from(gameSeed);
|
|
@@ -3013,7 +3129,9 @@ function deriveLocationStatic(gameSeed, coordinates) {
|
|
|
3013
3129
|
else {
|
|
3014
3130
|
loc.type = antelope.UInt8.from(exports.LocationType.NEBULA);
|
|
3015
3131
|
}
|
|
3016
|
-
loc.subtype = antelope.UInt8.from(
|
|
3132
|
+
loc.subtype = antelope.UInt8.from(Number(loc.type) === exports.LocationType.PLANET
|
|
3133
|
+
? hashResult.array[2] % 6
|
|
3134
|
+
: hashResult.array[2]);
|
|
3017
3135
|
loc.seed0 = antelope.UInt8.from(hashResult.array[3]);
|
|
3018
3136
|
loc.seed1 = antelope.UInt8.from(hashResult.array[4]);
|
|
3019
3137
|
return loc;
|
|
@@ -3035,35 +3153,6 @@ function deriveLocation(gameSeed, epochSeed, coordinates) {
|
|
|
3035
3153
|
epoch_props: deriveLocationEpoch(epochSeed, coordinates),
|
|
3036
3154
|
});
|
|
3037
3155
|
}
|
|
3038
|
-
function deriveLocationMixture(location, epochSeed) {
|
|
3039
|
-
const locationType = location.static_props.type.toNumber();
|
|
3040
|
-
if (locationType === exports.LocationType.NEBULA) {
|
|
3041
|
-
return Types.mixture_info.from({
|
|
3042
|
-
components: [{ good_id: 1, purity: PRECISION }],
|
|
3043
|
-
});
|
|
3044
|
-
}
|
|
3045
|
-
if (locationType === exports.LocationType.ASTEROID) {
|
|
3046
|
-
const seed = antelope.Checksum256.from(epochSeed);
|
|
3047
|
-
const coords = location.static_props.coords;
|
|
3048
|
-
const str = `mixture-${coords.x}-${coords.y}`;
|
|
3049
|
-
const hashResult = hash512(seed, str);
|
|
3050
|
-
const ironPrimary = location.static_props.subtype.toNumber() % 2 === 0;
|
|
3051
|
-
const purityRange = 0.3;
|
|
3052
|
-
const purityRoll = hashResult.array[0] / 255;
|
|
3053
|
-
const primaryPurity = 0.5 + purityRoll * purityRange;
|
|
3054
|
-
const primaryId = ironPrimary ? 26 : 29;
|
|
3055
|
-
const secondaryId = ironPrimary ? 29 : 26;
|
|
3056
|
-
const primaryAmt = Math.floor(primaryPurity * PRECISION);
|
|
3057
|
-
const secondaryAmt = PRECISION - primaryAmt;
|
|
3058
|
-
return Types.mixture_info.from({
|
|
3059
|
-
components: [
|
|
3060
|
-
{ good_id: primaryId, purity: primaryAmt },
|
|
3061
|
-
{ good_id: secondaryId, purity: secondaryAmt },
|
|
3062
|
-
],
|
|
3063
|
-
});
|
|
3064
|
-
}
|
|
3065
|
-
return Types.mixture_info.from({ components: [] });
|
|
3066
|
-
}
|
|
3067
3156
|
|
|
3068
3157
|
class GameState extends Types.state_row {
|
|
3069
3158
|
static from(state, game) {
|
|
@@ -3082,8 +3171,7 @@ class GameState extends Types.state_row {
|
|
|
3082
3171
|
return this.seed;
|
|
3083
3172
|
}
|
|
3084
3173
|
get gameSeed() {
|
|
3085
|
-
|
|
3086
|
-
return (_a = this._game) === null || _a === void 0 ? void 0 : _a.config.seed;
|
|
3174
|
+
return this._game?.config.seed;
|
|
3087
3175
|
}
|
|
3088
3176
|
get isEnabled() {
|
|
3089
3177
|
return this.enabled;
|
|
@@ -3151,59 +3239,178 @@ class BaseManager {
|
|
|
3151
3239
|
get platform() {
|
|
3152
3240
|
return this.context.platform;
|
|
3153
3241
|
}
|
|
3154
|
-
getGame() {
|
|
3155
|
-
return
|
|
3156
|
-
return this.context.getGame();
|
|
3157
|
-
});
|
|
3242
|
+
async getGame() {
|
|
3243
|
+
return this.context.getGame();
|
|
3158
3244
|
}
|
|
3159
|
-
getState() {
|
|
3160
|
-
return
|
|
3161
|
-
return this.context.getState();
|
|
3162
|
-
});
|
|
3245
|
+
async getState() {
|
|
3246
|
+
return this.context.getState();
|
|
3163
3247
|
}
|
|
3164
3248
|
}
|
|
3165
3249
|
|
|
3166
|
-
var
|
|
3250
|
+
var itemsData = [
|
|
3167
3251
|
{
|
|
3168
3252
|
id: 1,
|
|
3169
3253
|
name: "Hydrogen",
|
|
3170
|
-
description: "A lightweight
|
|
3254
|
+
description: "A lightweight gas used for fuel cells and propulsion.",
|
|
3171
3255
|
base_price: 50,
|
|
3172
|
-
mass: 15000
|
|
3256
|
+
mass: 15000,
|
|
3257
|
+
category: "gas",
|
|
3258
|
+
rarity: "common",
|
|
3259
|
+
color: "#7EC8E3"
|
|
3260
|
+
},
|
|
3261
|
+
{
|
|
3262
|
+
id: 2,
|
|
3263
|
+
name: "Helium",
|
|
3264
|
+
description: "An inert noble gas used in energy systems.",
|
|
3265
|
+
base_price: 75,
|
|
3266
|
+
mass: 2000,
|
|
3267
|
+
category: "gas",
|
|
3268
|
+
rarity: "uncommon",
|
|
3269
|
+
color: "#F5E6CC"
|
|
3270
|
+
},
|
|
3271
|
+
{
|
|
3272
|
+
id: 6,
|
|
3273
|
+
name: "Carbon",
|
|
3274
|
+
description: "A versatile element for life support and coatings.",
|
|
3275
|
+
base_price: 100,
|
|
3276
|
+
mass: 12000,
|
|
3277
|
+
category: "organic",
|
|
3278
|
+
rarity: "common",
|
|
3279
|
+
color: "#4A4A4A"
|
|
3280
|
+
},
|
|
3281
|
+
{
|
|
3282
|
+
id: 14,
|
|
3283
|
+
name: "Silicon",
|
|
3284
|
+
description: "A semiconductor used in sensors and computing.",
|
|
3285
|
+
base_price: 150,
|
|
3286
|
+
mass: 28000,
|
|
3287
|
+
category: "mineral",
|
|
3288
|
+
rarity: "common",
|
|
3289
|
+
color: "#B8A9C9"
|
|
3290
|
+
},
|
|
3291
|
+
{
|
|
3292
|
+
id: 18,
|
|
3293
|
+
name: "Argon",
|
|
3294
|
+
description: "A noble gas used in industrial and energy applications.",
|
|
3295
|
+
base_price: 60,
|
|
3296
|
+
mass: 8000,
|
|
3297
|
+
category: "gas",
|
|
3298
|
+
rarity: "rare",
|
|
3299
|
+
color: "#9B59B6"
|
|
3300
|
+
},
|
|
3301
|
+
{
|
|
3302
|
+
id: 22,
|
|
3303
|
+
name: "Titanium",
|
|
3304
|
+
description: "A strong, lightweight metal for ship construction.",
|
|
3305
|
+
base_price: 300,
|
|
3306
|
+
mass: 48000,
|
|
3307
|
+
category: "metal",
|
|
3308
|
+
rarity: "rare",
|
|
3309
|
+
color: "#C0C0C0"
|
|
3173
3310
|
},
|
|
3174
3311
|
{
|
|
3175
3312
|
id: 26,
|
|
3176
3313
|
name: "Iron",
|
|
3177
|
-
description: "A versatile metal used in
|
|
3314
|
+
description: "A versatile metal used in hulls and structures.",
|
|
3178
3315
|
base_price: 125,
|
|
3179
|
-
mass: 40000
|
|
3316
|
+
mass: 40000,
|
|
3317
|
+
category: "metal",
|
|
3318
|
+
rarity: "common",
|
|
3319
|
+
color: "#B7410E"
|
|
3180
3320
|
},
|
|
3181
3321
|
{
|
|
3182
3322
|
id: 29,
|
|
3183
3323
|
name: "Copper",
|
|
3184
|
-
description: "A conductive metal
|
|
3324
|
+
description: "A conductive metal for electronics and wiring.",
|
|
3185
3325
|
base_price: 200,
|
|
3186
|
-
mass: 60000
|
|
3326
|
+
mass: 60000,
|
|
3327
|
+
category: "metal",
|
|
3328
|
+
rarity: "uncommon",
|
|
3329
|
+
color: "#B87333"
|
|
3330
|
+
},
|
|
3331
|
+
{
|
|
3332
|
+
id: 54,
|
|
3333
|
+
name: "Xenon",
|
|
3334
|
+
description: "A rare noble gas for advanced propulsion systems.",
|
|
3335
|
+
base_price: 175,
|
|
3336
|
+
mass: 20000,
|
|
3337
|
+
category: "gas",
|
|
3338
|
+
rarity: "epic",
|
|
3339
|
+
color: "#5B2C6F"
|
|
3340
|
+
},
|
|
3341
|
+
{
|
|
3342
|
+
id: 74,
|
|
3343
|
+
name: "Tungsten",
|
|
3344
|
+
description: "An extremely dense metal for heavy-duty applications.",
|
|
3345
|
+
base_price: 500,
|
|
3346
|
+
mass: 80000,
|
|
3347
|
+
category: "metal",
|
|
3348
|
+
rarity: "epic",
|
|
3349
|
+
color: "#708090"
|
|
3350
|
+
},
|
|
3351
|
+
{
|
|
3352
|
+
id: 1000,
|
|
3353
|
+
name: "Quartz",
|
|
3354
|
+
description: "A crystalline mineral for sensors and optics.",
|
|
3355
|
+
base_price: 200,
|
|
3356
|
+
mass: 35000,
|
|
3357
|
+
category: "mineral",
|
|
3358
|
+
rarity: "uncommon",
|
|
3359
|
+
color: "#E8D5B7"
|
|
3360
|
+
},
|
|
3361
|
+
{
|
|
3362
|
+
id: 1001,
|
|
3363
|
+
name: "Sapphire",
|
|
3364
|
+
description: "A precious crystal for precision instruments.",
|
|
3365
|
+
base_price: 400,
|
|
3366
|
+
mass: 45000,
|
|
3367
|
+
category: "mineral",
|
|
3368
|
+
rarity: "rare",
|
|
3369
|
+
color: "#0F52BA"
|
|
3370
|
+
},
|
|
3371
|
+
{
|
|
3372
|
+
id: 1002,
|
|
3373
|
+
name: "Polymers",
|
|
3374
|
+
description: "Synthetic materials for coatings and consumables.",
|
|
3375
|
+
base_price: 150,
|
|
3376
|
+
mass: 25000,
|
|
3377
|
+
category: "organic",
|
|
3378
|
+
rarity: "rare",
|
|
3379
|
+
color: "#2ECC71"
|
|
3380
|
+
},
|
|
3381
|
+
{
|
|
3382
|
+
id: 1003,
|
|
3383
|
+
name: "Biomass",
|
|
3384
|
+
description: "Organic matter for life support systems.",
|
|
3385
|
+
base_price: 100,
|
|
3386
|
+
mass: 30000,
|
|
3387
|
+
category: "organic",
|
|
3388
|
+
rarity: "uncommon",
|
|
3389
|
+
color: "#8B4513"
|
|
3187
3390
|
}
|
|
3188
3391
|
];
|
|
3189
3392
|
|
|
3190
|
-
const
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
|
|
3204
|
-
|
|
3205
|
-
|
|
3206
|
-
|
|
3393
|
+
const items = itemsData.map((g) => exports.Item.from({
|
|
3394
|
+
id: g.id,
|
|
3395
|
+
name: g.name,
|
|
3396
|
+
description: g.description,
|
|
3397
|
+
base_price: g.base_price,
|
|
3398
|
+
mass: g.mass,
|
|
3399
|
+
category: g.category,
|
|
3400
|
+
rarity: g.rarity,
|
|
3401
|
+
color: g.color,
|
|
3402
|
+
}));
|
|
3403
|
+
const itemIds = items.map((i) => i.id);
|
|
3404
|
+
function getItem(itemId) {
|
|
3405
|
+
const id = antelope.UInt16.from(itemId);
|
|
3406
|
+
const item = items.find((i) => i.id.equals(id));
|
|
3407
|
+
if (!item) {
|
|
3408
|
+
throw new Error(`Item with id ${id} not found`);
|
|
3409
|
+
}
|
|
3410
|
+
return item;
|
|
3411
|
+
}
|
|
3412
|
+
function getItems() {
|
|
3413
|
+
return items;
|
|
3207
3414
|
}
|
|
3208
3415
|
|
|
3209
3416
|
function calc_orbital_altitude(mass) {
|
|
@@ -3270,8 +3477,7 @@ function calc_flighttime(distance, acceleration) {
|
|
|
3270
3477
|
return antelope.UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
|
|
3271
3478
|
}
|
|
3272
3479
|
function calc_loader_flighttime(ship, mass, altitude) {
|
|
3273
|
-
|
|
3274
|
-
const z = (_b = altitude !== null && altitude !== void 0 ? altitude : (_a = ship.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) !== null && _b !== void 0 ? _b : calc_orbital_altitude(Number(mass));
|
|
3480
|
+
const z = altitude ?? ship.coordinates.z?.toNumber() ?? calc_orbital_altitude(Number(mass));
|
|
3275
3481
|
return calc_flighttime(z, calc_loader_acceleration(ship, mass));
|
|
3276
3482
|
}
|
|
3277
3483
|
function calc_loader_acceleration(ship, mass) {
|
|
@@ -3294,7 +3500,7 @@ function calc_ship_mass(ship, cargos) {
|
|
|
3294
3500
|
mass.add(ship.loaders.mass.multiplying(ship.loaders.quantity));
|
|
3295
3501
|
}
|
|
3296
3502
|
for (const cargo of cargos) {
|
|
3297
|
-
mass.add(
|
|
3503
|
+
mass.add(getItem(cargo.item_id).mass.multiplying(cargo.quantity));
|
|
3298
3504
|
}
|
|
3299
3505
|
return mass;
|
|
3300
3506
|
}
|
|
@@ -3302,12 +3508,11 @@ function calc_energyusage(distance, drain) {
|
|
|
3302
3508
|
return antelope.UInt64.from(distance).dividing(PRECISION).multiplying(drain);
|
|
3303
3509
|
}
|
|
3304
3510
|
function calculateTransferTime(ship, cargos, quantities) {
|
|
3305
|
-
var _a;
|
|
3306
3511
|
let mass = antelope.UInt64.from(0);
|
|
3307
3512
|
for (const cargo of cargos) {
|
|
3308
|
-
const qty =
|
|
3513
|
+
const qty = quantities?.get(Number(cargo.item_id)) ?? 0;
|
|
3309
3514
|
if (qty > 0) {
|
|
3310
|
-
const good_mass =
|
|
3515
|
+
const good_mass = getItem(cargo.item_id).mass;
|
|
3311
3516
|
const cargo_mass = good_mass.multiplying(qty);
|
|
3312
3517
|
mass = antelope.UInt64.from(mass).adding(cargo_mass);
|
|
3313
3518
|
}
|
|
@@ -3327,15 +3532,14 @@ function calculateFlightTime(ship, cargos, distance) {
|
|
|
3327
3532
|
return calc_ship_flighttime(ship, mass, distance);
|
|
3328
3533
|
}
|
|
3329
3534
|
function calculateLoadTimeBreakdown(ship, cargos, loadQuantities, unloadQuantities) {
|
|
3330
|
-
var _a, _b;
|
|
3331
3535
|
let mass_unload = antelope.UInt64.from(0);
|
|
3332
3536
|
let mass_load = antelope.UInt64.from(0);
|
|
3333
3537
|
for (const cargo of cargos) {
|
|
3334
|
-
const goodId = Number(cargo.
|
|
3335
|
-
const loadQty =
|
|
3336
|
-
const unloadQty =
|
|
3538
|
+
const goodId = Number(cargo.item_id);
|
|
3539
|
+
const loadQty = loadQuantities?.get(goodId) ?? 0;
|
|
3540
|
+
const unloadQty = unloadQuantities?.get(goodId) ?? 0;
|
|
3337
3541
|
if (loadQty > 0 || unloadQty > 0) {
|
|
3338
|
-
const good =
|
|
3542
|
+
const good = getItem(cargo.item_id);
|
|
3339
3543
|
if (loadQty > 0) {
|
|
3340
3544
|
const cargo_mass = good.mass.multiplying(loadQty);
|
|
3341
3545
|
mass_load = antelope.UInt64.from(mass_load).adding(cargo_mass);
|
|
@@ -3446,7 +3650,6 @@ function getPositionAt(entity, taskIndex, taskProgress) {
|
|
|
3446
3650
|
};
|
|
3447
3651
|
}
|
|
3448
3652
|
function calc_transfer_duration(source, dest, cargoMass) {
|
|
3449
|
-
var _a, _b, _c, _d;
|
|
3450
3653
|
if (cargoMass === 0) {
|
|
3451
3654
|
return 0;
|
|
3452
3655
|
}
|
|
@@ -3484,8 +3687,8 @@ function calc_transfer_duration(source, dest, cargoMass) {
|
|
|
3484
3687
|
}
|
|
3485
3688
|
const sourceZ = typeof source.location.z === 'number'
|
|
3486
3689
|
? source.location.z
|
|
3487
|
-
:
|
|
3488
|
-
const destZ = typeof dest.location.z === 'number' ? dest.location.z :
|
|
3690
|
+
: source.location.z?.toNumber() ?? 0;
|
|
3691
|
+
const destZ = typeof dest.location.z === 'number' ? dest.location.z : dest.location.z?.toNumber() ?? 0;
|
|
3489
3692
|
const distance = Math.abs(sourceZ - destZ);
|
|
3490
3693
|
const totalMass = cargoMass + totalLoaderMass;
|
|
3491
3694
|
const acceleration = calc_acceleration(totalThrust, totalMass);
|
|
@@ -3515,7 +3718,7 @@ function capsHasMass(caps) {
|
|
|
3515
3718
|
function calcCargoMass(entity) {
|
|
3516
3719
|
let mass = antelope.UInt64.from(0);
|
|
3517
3720
|
for (const item of entity.cargo) {
|
|
3518
|
-
const good =
|
|
3721
|
+
const good = getItem(item.item_id);
|
|
3519
3722
|
mass = mass.adding(good.mass.multiplying(item.quantity));
|
|
3520
3723
|
}
|
|
3521
3724
|
return mass;
|
|
@@ -3559,8 +3762,7 @@ function isIdle(entity) {
|
|
|
3559
3762
|
return !hasSchedule$1(entity);
|
|
3560
3763
|
}
|
|
3561
3764
|
function getTasks(entity) {
|
|
3562
|
-
|
|
3563
|
-
return ((_a = entity.schedule) === null || _a === void 0 ? void 0 : _a.tasks) || [];
|
|
3765
|
+
return entity.schedule?.tasks || [];
|
|
3564
3766
|
}
|
|
3565
3767
|
function scheduleDuration(entity) {
|
|
3566
3768
|
if (!entity.schedule)
|
|
@@ -3716,11 +3918,9 @@ var schedule = /*#__PURE__*/Object.freeze({
|
|
|
3716
3918
|
});
|
|
3717
3919
|
|
|
3718
3920
|
function getHullMass(entity) {
|
|
3719
|
-
|
|
3720
|
-
return antelope.UInt32.from((_a = entity.hullmass) !== null && _a !== void 0 ? _a : 0);
|
|
3921
|
+
return antelope.UInt32.from(entity.hullmass ?? 0);
|
|
3721
3922
|
}
|
|
3722
3923
|
function createProjectedEntity(entity) {
|
|
3723
|
-
var _a;
|
|
3724
3924
|
const cargoMass = calcCargoMass(entity);
|
|
3725
3925
|
const shipMass = getHullMass(entity);
|
|
3726
3926
|
const loaders = entity.loaders;
|
|
@@ -3730,7 +3930,7 @@ function createProjectedEntity(entity) {
|
|
|
3730
3930
|
const capacity = entity.capacity;
|
|
3731
3931
|
const projected = {
|
|
3732
3932
|
location: Coordinates.from(entity.coordinates),
|
|
3733
|
-
energy: antelope.UInt16.from(
|
|
3933
|
+
energy: antelope.UInt16.from(entity.energy ?? 0),
|
|
3734
3934
|
cargoMass,
|
|
3735
3935
|
shipMass,
|
|
3736
3936
|
capacity: capacity ? antelope.UInt64.from(capacity) : undefined,
|
|
@@ -3768,9 +3968,8 @@ function createProjectedEntity(entity) {
|
|
|
3768
3968
|
};
|
|
3769
3969
|
},
|
|
3770
3970
|
state() {
|
|
3771
|
-
var _a;
|
|
3772
3971
|
return {
|
|
3773
|
-
owner:
|
|
3972
|
+
owner: entity.owner ?? antelope.Name.from(''),
|
|
3774
3973
|
location: Types.coordinates.from(this.location),
|
|
3775
3974
|
energy: this.energy,
|
|
3776
3975
|
cargomass: antelope.UInt32.from(this.cargoMass),
|
|
@@ -3818,19 +4017,19 @@ function applyFlightTask(projected, task, options) {
|
|
|
3818
4017
|
: antelope.UInt16.from(0);
|
|
3819
4018
|
}
|
|
3820
4019
|
}
|
|
3821
|
-
function
|
|
3822
|
-
const
|
|
3823
|
-
return
|
|
4020
|
+
function getItemMass(item_id) {
|
|
4021
|
+
const item = getItem(item_id);
|
|
4022
|
+
return item.mass;
|
|
3824
4023
|
}
|
|
3825
4024
|
function applyLoadTask(projected, task) {
|
|
3826
4025
|
for (const item of task.cargo) {
|
|
3827
|
-
const good_mass =
|
|
4026
|
+
const good_mass = getItemMass(item.item_id);
|
|
3828
4027
|
projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
|
|
3829
4028
|
}
|
|
3830
4029
|
}
|
|
3831
4030
|
function applyUnloadTask(projected, task) {
|
|
3832
4031
|
for (const item of task.cargo) {
|
|
3833
|
-
const good_mass =
|
|
4032
|
+
const good_mass = getItemMass(item.item_id);
|
|
3834
4033
|
const cargoMass = good_mass.multiplying(item.quantity);
|
|
3835
4034
|
projected.cargoMass = projected.cargoMass.gt(cargoMass)
|
|
3836
4035
|
? projected.cargoMass.subtracting(cargoMass)
|
|
@@ -3847,7 +4046,7 @@ function applyExtractTask(projected, task, options) {
|
|
|
3847
4046
|
: antelope.UInt16.from(0);
|
|
3848
4047
|
}
|
|
3849
4048
|
for (const item of task.cargo) {
|
|
3850
|
-
const good_mass =
|
|
4049
|
+
const good_mass = getItemMass(item.item_id);
|
|
3851
4050
|
projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
|
|
3852
4051
|
}
|
|
3853
4052
|
}
|
|
@@ -3927,9 +4126,8 @@ class Location {
|
|
|
3927
4126
|
return new Location(Coordinates.from(coordinates));
|
|
3928
4127
|
}
|
|
3929
4128
|
hasSystemAt(gameSeed) {
|
|
3930
|
-
var _a;
|
|
3931
4129
|
const seed = antelope.Checksum256.from(gameSeed);
|
|
3932
|
-
if (this._hasSystem === undefined || !
|
|
4130
|
+
if (this._hasSystem === undefined || !this._gameSeed?.equals(seed)) {
|
|
3933
4131
|
this._gameSeed = seed;
|
|
3934
4132
|
this._hasSystem = hasSystem(seed, this.coordinates);
|
|
3935
4133
|
}
|
|
@@ -3969,7 +4167,7 @@ class Location {
|
|
|
3969
4167
|
getSupply(goodId) {
|
|
3970
4168
|
if (!this._locationRows)
|
|
3971
4169
|
return undefined;
|
|
3972
|
-
const row = this._locationRows.find((r) => r.
|
|
4170
|
+
const row = this._locationRows.find((r) => r.item_id.equals(goodId) && this._epoch && r.epoch.equals(this._epoch));
|
|
3973
4171
|
return row ? row.supply : undefined;
|
|
3974
4172
|
}
|
|
3975
4173
|
get availableGoods() {
|
|
@@ -4007,9 +4205,9 @@ class Location {
|
|
|
4007
4205
|
? currentSupply.subtracting(delta)
|
|
4008
4206
|
: antelope.UInt16.from(0)
|
|
4009
4207
|
: currentSupply.adding(quantityDelta);
|
|
4010
|
-
return exports.
|
|
4208
|
+
return exports.ItemPrice.from({
|
|
4011
4209
|
id: price.id,
|
|
4012
|
-
|
|
4210
|
+
item: price.item,
|
|
4013
4211
|
price: price.price,
|
|
4014
4212
|
supply: newSupply,
|
|
4015
4213
|
});
|
|
@@ -4019,7 +4217,7 @@ class Location {
|
|
|
4019
4217
|
}
|
|
4020
4218
|
if (this._locationRows && this._epoch) {
|
|
4021
4219
|
newLocation._locationRows = this._locationRows.map((row) => {
|
|
4022
|
-
if (row.
|
|
4220
|
+
if (row.item_id.equals(goodId) && row.epoch.equals(this._epoch)) {
|
|
4023
4221
|
const currentSupply = antelope.UInt16.from(row.supply);
|
|
4024
4222
|
const delta = antelope.UInt16.from(Math.abs(quantityDelta));
|
|
4025
4223
|
const newSupply = quantityDelta < 0
|
|
@@ -4031,7 +4229,7 @@ class Location {
|
|
|
4031
4229
|
id: row.id,
|
|
4032
4230
|
coordinates: row.coordinates,
|
|
4033
4231
|
epoch: row.epoch,
|
|
4034
|
-
|
|
4232
|
+
item_id: row.item_id,
|
|
4035
4233
|
supply: newSupply,
|
|
4036
4234
|
});
|
|
4037
4235
|
}
|
|
@@ -4112,17 +4310,20 @@ function createScheduleAccessor(entity) {
|
|
|
4112
4310
|
}
|
|
4113
4311
|
|
|
4114
4312
|
class EntityInventory extends Types.cargo_item {
|
|
4115
|
-
get
|
|
4116
|
-
if (!this.
|
|
4117
|
-
this.
|
|
4313
|
+
get item() {
|
|
4314
|
+
if (!this._item) {
|
|
4315
|
+
this._item = getItem(this.item_id);
|
|
4118
4316
|
}
|
|
4119
|
-
return this.
|
|
4317
|
+
return this._item;
|
|
4318
|
+
}
|
|
4319
|
+
get good() {
|
|
4320
|
+
return this.item;
|
|
4120
4321
|
}
|
|
4121
4322
|
get name() {
|
|
4122
|
-
return this.
|
|
4323
|
+
return this.item.name;
|
|
4123
4324
|
}
|
|
4124
4325
|
get unitMass() {
|
|
4125
|
-
return this.
|
|
4326
|
+
return this.item.mass;
|
|
4126
4327
|
}
|
|
4127
4328
|
get totalMass() {
|
|
4128
4329
|
return antelope.UInt64.from(this.unitMass).multiplying(this.quantity);
|
|
@@ -4154,8 +4355,8 @@ class InventoryAccessor {
|
|
|
4154
4355
|
get totalValue() {
|
|
4155
4356
|
return this.items.reduce((sum, c) => sum.adding(c.totalCost), antelope.UInt64.from(0));
|
|
4156
4357
|
}
|
|
4157
|
-
|
|
4158
|
-
return this.items.find((c) => c.
|
|
4358
|
+
forItem(goodId) {
|
|
4359
|
+
return this.items.find((c) => c.item_id.equals(goodId));
|
|
4159
4360
|
}
|
|
4160
4361
|
get sellable() {
|
|
4161
4362
|
return this.items.filter((c) => c.hasCargo);
|
|
@@ -4200,8 +4401,8 @@ function cargoValue(cargo) {
|
|
|
4200
4401
|
return sum.adding(c.totalCost);
|
|
4201
4402
|
}, antelope.UInt64.from(0));
|
|
4202
4403
|
}
|
|
4203
|
-
function
|
|
4204
|
-
return cargo.find((c) => c.
|
|
4404
|
+
function getCargoForItem(cargo, goodId) {
|
|
4405
|
+
return cargo.find((c) => c.item_id.equals(goodId));
|
|
4205
4406
|
}
|
|
4206
4407
|
function hasSpace(currentMass, maxCapacity, goodMass, quantity) {
|
|
4207
4408
|
const additionalMass = goodMass.multiplying(quantity);
|
|
@@ -4226,7 +4427,7 @@ function calculateSaleValue(cargo, prices) {
|
|
|
4226
4427
|
for (const item of cargo) {
|
|
4227
4428
|
if (antelope.UInt32.from(item.quantity).equals(antelope.UInt32.from(0)))
|
|
4228
4429
|
continue;
|
|
4229
|
-
const goodId = Number(item.
|
|
4430
|
+
const goodId = Number(item.item_id);
|
|
4230
4431
|
const salePrice = prices.get(goodId);
|
|
4231
4432
|
if (salePrice) {
|
|
4232
4433
|
revenue = revenue.adding(salePrice.multiplying(item.quantity));
|
|
@@ -4247,30 +4448,30 @@ function calculateSaleValueFromArray(cargo, prices) {
|
|
|
4247
4448
|
});
|
|
4248
4449
|
return calculateSaleValue(cargo, priceMap);
|
|
4249
4450
|
}
|
|
4250
|
-
function
|
|
4451
|
+
function afterSellItems(cargo, goodsToSell) {
|
|
4251
4452
|
if (cargo.length === 0) {
|
|
4252
4453
|
return [];
|
|
4253
4454
|
}
|
|
4254
4455
|
return cargo.map((item) => {
|
|
4255
|
-
const saleItem = goodsToSell.find((s) => Number(item.
|
|
4456
|
+
const saleItem = goodsToSell.find((s) => Number(item.item_id) === s.goodId);
|
|
4256
4457
|
if (!saleItem) {
|
|
4257
4458
|
return new EntityInventory(item);
|
|
4258
4459
|
}
|
|
4259
4460
|
const currentQty = Number(item.quantity);
|
|
4260
4461
|
const newQty = Math.max(0, currentQty - saleItem.quantity);
|
|
4261
4462
|
return new EntityInventory(Types.cargo_item.from({
|
|
4262
|
-
|
|
4463
|
+
item_id: item.item_id,
|
|
4263
4464
|
quantity: antelope.UInt32.from(newQty),
|
|
4264
4465
|
unit_cost: item.unit_cost,
|
|
4265
4466
|
}));
|
|
4266
4467
|
});
|
|
4267
4468
|
}
|
|
4268
|
-
function
|
|
4469
|
+
function afterSellAllItems(cargo) {
|
|
4269
4470
|
if (cargo.length === 0) {
|
|
4270
4471
|
return [];
|
|
4271
4472
|
}
|
|
4272
4473
|
return cargo.map((item) => new EntityInventory(Types.cargo_item.from({
|
|
4273
|
-
|
|
4474
|
+
item_id: item.item_id,
|
|
4274
4475
|
quantity: antelope.UInt32.from(0),
|
|
4275
4476
|
unit_cost: item.unit_cost,
|
|
4276
4477
|
})));
|
|
@@ -4280,14 +4481,14 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
|
|
|
4280
4481
|
__proto__: null,
|
|
4281
4482
|
totalCargoMass: totalCargoMass,
|
|
4282
4483
|
cargoValue: cargoValue,
|
|
4283
|
-
|
|
4484
|
+
getCargoForItem: getCargoForItem,
|
|
4284
4485
|
hasSpace: hasSpace,
|
|
4285
4486
|
availableCapacity: availableCapacity,
|
|
4286
4487
|
isFull: isFull,
|
|
4287
4488
|
calculateSaleValue: calculateSaleValue,
|
|
4288
4489
|
calculateSaleValueFromArray: calculateSaleValueFromArray,
|
|
4289
|
-
|
|
4290
|
-
|
|
4490
|
+
afterSellItems: afterSellItems,
|
|
4491
|
+
afterSellAllItems: afterSellAllItems
|
|
4291
4492
|
});
|
|
4292
4493
|
|
|
4293
4494
|
class Ship extends Types.entity_info {
|
|
@@ -4295,15 +4496,13 @@ class Ship extends Types.entity_info {
|
|
|
4295
4496
|
return this.entity_name;
|
|
4296
4497
|
}
|
|
4297
4498
|
get inv() {
|
|
4298
|
-
|
|
4299
|
-
return ((_a = this._inv) !== null && _a !== void 0 ? _a : (this._inv = new InventoryAccessor(this)));
|
|
4499
|
+
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
4300
4500
|
}
|
|
4301
4501
|
get inventory() {
|
|
4302
4502
|
return this.inv.items;
|
|
4303
4503
|
}
|
|
4304
4504
|
get sched() {
|
|
4305
|
-
|
|
4306
|
-
return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
|
|
4505
|
+
return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
|
|
4307
4506
|
}
|
|
4308
4507
|
get maxDistance() {
|
|
4309
4508
|
if (!this.generator || !this.engines)
|
|
@@ -4343,6 +4542,9 @@ class Ship extends Types.entity_info {
|
|
|
4343
4542
|
get hasExtractor() {
|
|
4344
4543
|
return this.extractor !== undefined;
|
|
4345
4544
|
}
|
|
4545
|
+
get hasWarp() {
|
|
4546
|
+
return this.warp !== undefined;
|
|
4547
|
+
}
|
|
4346
4548
|
project() {
|
|
4347
4549
|
return projectEntity(this);
|
|
4348
4550
|
}
|
|
@@ -4359,8 +4561,7 @@ class Ship extends Types.entity_info {
|
|
|
4359
4561
|
return this.inv.totalValue;
|
|
4360
4562
|
}
|
|
4361
4563
|
get totalMass() {
|
|
4362
|
-
|
|
4363
|
-
let mass = antelope.UInt64.from((_a = this.hullmass) !== null && _a !== void 0 ? _a : 0).adding(this.totalCargoMass);
|
|
4564
|
+
let mass = antelope.UInt64.from(this.hullmass ?? 0).adding(this.totalCargoMass);
|
|
4364
4565
|
if (this.loaders) {
|
|
4365
4566
|
mass = mass.adding(antelope.UInt64.from(this.loaders.mass).multiplying(this.loaders.quantity));
|
|
4366
4567
|
}
|
|
@@ -4377,8 +4578,8 @@ class Ship extends Types.entity_info {
|
|
|
4377
4578
|
? antelope.UInt64.from(0)
|
|
4378
4579
|
: this.maxCapacity.subtracting(this.totalMass);
|
|
4379
4580
|
}
|
|
4380
|
-
|
|
4381
|
-
return this.inv.
|
|
4581
|
+
getCargoForItem(goodId) {
|
|
4582
|
+
return this.inv.forItem(goodId);
|
|
4382
4583
|
}
|
|
4383
4584
|
get sellableCargo() {
|
|
4384
4585
|
return this.inv.sellable;
|
|
@@ -4413,11 +4614,11 @@ class Ship extends Types.entity_info {
|
|
|
4413
4614
|
calculateSaleValueFromArray(prices) {
|
|
4414
4615
|
return calculateSaleValueFromArray(this.cargo, prices);
|
|
4415
4616
|
}
|
|
4416
|
-
|
|
4417
|
-
return
|
|
4617
|
+
afterSellItems(goodsToSell) {
|
|
4618
|
+
return afterSellItems(this.cargo, goodsToSell);
|
|
4418
4619
|
}
|
|
4419
|
-
|
|
4420
|
-
return
|
|
4620
|
+
afterSellAllItems() {
|
|
4621
|
+
return afterSellAllItems(this.cargo);
|
|
4421
4622
|
}
|
|
4422
4623
|
}
|
|
4423
4624
|
|
|
@@ -4426,15 +4627,13 @@ class Warehouse extends Types.entity_info {
|
|
|
4426
4627
|
return this.entity_name;
|
|
4427
4628
|
}
|
|
4428
4629
|
get inv() {
|
|
4429
|
-
|
|
4430
|
-
return ((_a = this._inv) !== null && _a !== void 0 ? _a : (this._inv = new InventoryAccessor(this)));
|
|
4630
|
+
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
4431
4631
|
}
|
|
4432
4632
|
get inventory() {
|
|
4433
4633
|
return this.inv.items;
|
|
4434
4634
|
}
|
|
4435
4635
|
get sched() {
|
|
4436
|
-
|
|
4437
|
-
return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
|
|
4636
|
+
return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
|
|
4438
4637
|
}
|
|
4439
4638
|
get isIdle() {
|
|
4440
4639
|
return this.is_idle;
|
|
@@ -4467,12 +4666,11 @@ class Warehouse extends Types.entity_info {
|
|
|
4467
4666
|
get isFull() {
|
|
4468
4667
|
return this.totalCargoMass.gte(this.maxCapacity);
|
|
4469
4668
|
}
|
|
4470
|
-
|
|
4471
|
-
return this.inv.
|
|
4669
|
+
getCargoForItem(goodId) {
|
|
4670
|
+
return this.inv.forItem(goodId);
|
|
4472
4671
|
}
|
|
4473
4672
|
get orbitalAltitude() {
|
|
4474
|
-
|
|
4475
|
-
return ((_a = this.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) || 0;
|
|
4673
|
+
return this.coordinates.z?.toNumber() || 0;
|
|
4476
4674
|
}
|
|
4477
4675
|
}
|
|
4478
4676
|
|
|
@@ -4481,8 +4679,7 @@ class Container extends Types.entity_info {
|
|
|
4481
4679
|
return this.entity_name;
|
|
4482
4680
|
}
|
|
4483
4681
|
get sched() {
|
|
4484
|
-
|
|
4485
|
-
return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
|
|
4682
|
+
return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
|
|
4486
4683
|
}
|
|
4487
4684
|
get isIdle() {
|
|
4488
4685
|
return this.is_idle;
|
|
@@ -4497,8 +4694,7 @@ class Container extends Types.entity_info {
|
|
|
4497
4694
|
return Location.from(this.coordinates);
|
|
4498
4695
|
}
|
|
4499
4696
|
get totalMass() {
|
|
4500
|
-
|
|
4501
|
-
return antelope.UInt64.from((_a = this.hullmass) !== null && _a !== void 0 ? _a : 0).adding(this.cargomass);
|
|
4697
|
+
return antelope.UInt64.from(this.hullmass ?? 0).adding(this.cargomass);
|
|
4502
4698
|
}
|
|
4503
4699
|
get maxCapacity() {
|
|
4504
4700
|
return antelope.UInt64.from(this.capacity);
|
|
@@ -4514,87 +4710,62 @@ class Container extends Types.entity_info {
|
|
|
4514
4710
|
return antelope.UInt64.from(this.cargomass).gte(this.maxCapacity);
|
|
4515
4711
|
}
|
|
4516
4712
|
get orbitalAltitude() {
|
|
4517
|
-
|
|
4518
|
-
return ((_a = this.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) || 0;
|
|
4713
|
+
return this.coordinates.z?.toNumber() || 0;
|
|
4519
4714
|
}
|
|
4520
4715
|
}
|
|
4521
4716
|
|
|
4522
4717
|
class EntitiesManager extends BaseManager {
|
|
4523
|
-
getEntity(type, id) {
|
|
4524
|
-
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
entity_id: id,
|
|
4528
|
-
});
|
|
4529
|
-
const entityInfo = result;
|
|
4530
|
-
return this.wrapEntity(entityInfo);
|
|
4718
|
+
async getEntity(type, id) {
|
|
4719
|
+
const result = await this.server.readonly('getentity', {
|
|
4720
|
+
entity_type: antelope.Name.from(type),
|
|
4721
|
+
entity_id: id,
|
|
4531
4722
|
});
|
|
4532
|
-
|
|
4533
|
-
|
|
4534
|
-
|
|
4535
|
-
|
|
4536
|
-
|
|
4537
|
-
|
|
4538
|
-
|
|
4539
|
-
|
|
4540
|
-
const entities = result;
|
|
4541
|
-
return entities.map((entity) => this.wrapEntity(entity));
|
|
4723
|
+
const entityInfo = result;
|
|
4724
|
+
return this.wrapEntity(entityInfo);
|
|
4725
|
+
}
|
|
4726
|
+
async getEntities(owner, type) {
|
|
4727
|
+
const ownerName = this.resolveOwner(owner);
|
|
4728
|
+
const result = await this.server.readonly('getentities', {
|
|
4729
|
+
owner: ownerName,
|
|
4730
|
+
entity_type: type ? antelope.Name.from(type) : null,
|
|
4542
4731
|
});
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
return result;
|
|
4732
|
+
const entities = result;
|
|
4733
|
+
return entities.map((entity) => this.wrapEntity(entity));
|
|
4734
|
+
}
|
|
4735
|
+
async getSummaries(owner, type) {
|
|
4736
|
+
const ownerName = this.resolveOwner(owner);
|
|
4737
|
+
const result = await this.server.readonly('getsummaries', {
|
|
4738
|
+
owner: ownerName,
|
|
4739
|
+
entity_type: type ? antelope.Name.from(type) : null,
|
|
4552
4740
|
});
|
|
4741
|
+
return result;
|
|
4553
4742
|
}
|
|
4554
|
-
getShip(id) {
|
|
4555
|
-
return
|
|
4556
|
-
return (yield this.getEntity('ship', id));
|
|
4557
|
-
});
|
|
4743
|
+
async getShip(id) {
|
|
4744
|
+
return (await this.getEntity('ship', id));
|
|
4558
4745
|
}
|
|
4559
|
-
getWarehouse(id) {
|
|
4560
|
-
return
|
|
4561
|
-
return (yield this.getEntity('warehouse', id));
|
|
4562
|
-
});
|
|
4746
|
+
async getWarehouse(id) {
|
|
4747
|
+
return (await this.getEntity('warehouse', id));
|
|
4563
4748
|
}
|
|
4564
|
-
getContainer(id) {
|
|
4565
|
-
return
|
|
4566
|
-
return (yield this.getEntity('container', id));
|
|
4567
|
-
});
|
|
4749
|
+
async getContainer(id) {
|
|
4750
|
+
return (await this.getEntity('container', id));
|
|
4568
4751
|
}
|
|
4569
|
-
getShips(owner) {
|
|
4570
|
-
return
|
|
4571
|
-
return (yield this.getEntities(owner, 'ship'));
|
|
4572
|
-
});
|
|
4752
|
+
async getShips(owner) {
|
|
4753
|
+
return (await this.getEntities(owner, 'ship'));
|
|
4573
4754
|
}
|
|
4574
|
-
getWarehouses(owner) {
|
|
4575
|
-
return
|
|
4576
|
-
return (yield this.getEntities(owner, 'warehouse'));
|
|
4577
|
-
});
|
|
4755
|
+
async getWarehouses(owner) {
|
|
4756
|
+
return (await this.getEntities(owner, 'warehouse'));
|
|
4578
4757
|
}
|
|
4579
|
-
getContainers(owner) {
|
|
4580
|
-
return
|
|
4581
|
-
return (yield this.getEntities(owner, 'container'));
|
|
4582
|
-
});
|
|
4758
|
+
async getContainers(owner) {
|
|
4759
|
+
return (await this.getEntities(owner, 'container'));
|
|
4583
4760
|
}
|
|
4584
|
-
getShipSummaries(owner) {
|
|
4585
|
-
return
|
|
4586
|
-
return this.getSummaries(owner, 'ship');
|
|
4587
|
-
});
|
|
4761
|
+
async getShipSummaries(owner) {
|
|
4762
|
+
return this.getSummaries(owner, 'ship');
|
|
4588
4763
|
}
|
|
4589
|
-
getWarehouseSummaries(owner) {
|
|
4590
|
-
return
|
|
4591
|
-
return this.getSummaries(owner, 'warehouse');
|
|
4592
|
-
});
|
|
4764
|
+
async getWarehouseSummaries(owner) {
|
|
4765
|
+
return this.getSummaries(owner, 'warehouse');
|
|
4593
4766
|
}
|
|
4594
|
-
getContainerSummaries(owner) {
|
|
4595
|
-
return
|
|
4596
|
-
return this.getSummaries(owner, 'container');
|
|
4597
|
-
});
|
|
4767
|
+
async getContainerSummaries(owner) {
|
|
4768
|
+
return this.getSummaries(owner, 'container');
|
|
4598
4769
|
}
|
|
4599
4770
|
wrapEntity(entity) {
|
|
4600
4771
|
if (entity.type.equals('ship')) {
|
|
@@ -4632,8 +4803,7 @@ class Player extends Types.player_row {
|
|
|
4632
4803
|
return this._shipCount;
|
|
4633
4804
|
}
|
|
4634
4805
|
getNextShipCost(shipCount) {
|
|
4635
|
-
|
|
4636
|
-
const count = (_a = shipCount !== null && shipCount !== void 0 ? shipCount : this._shipCount) !== null && _a !== void 0 ? _a : 0;
|
|
4806
|
+
const count = shipCount ?? this._shipCount ?? 0;
|
|
4637
4807
|
const cost = Math.pow(Player.SHIP_COST_MULTIPLIER, count) * Player.BASE_SHIP_COST;
|
|
4638
4808
|
return antelope.UInt64.from(Math.floor(cost));
|
|
4639
4809
|
}
|
|
@@ -4750,14 +4920,12 @@ Player.BASE_SHIP_COST = 500;
|
|
|
4750
4920
|
Player.SHIP_COST_MULTIPLIER = 5;
|
|
4751
4921
|
|
|
4752
4922
|
class PlayersManager extends BaseManager {
|
|
4753
|
-
getPlayer(account) {
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
return new Player(playerRow);
|
|
4760
|
-
});
|
|
4923
|
+
async getPlayer(account) {
|
|
4924
|
+
const playerRow = await this.server.table('player').get(antelope.Name.from(account));
|
|
4925
|
+
if (!playerRow) {
|
|
4926
|
+
return undefined;
|
|
4927
|
+
}
|
|
4928
|
+
return new Player(playerRow);
|
|
4761
4929
|
}
|
|
4762
4930
|
}
|
|
4763
4931
|
|
|
@@ -4911,137 +5079,113 @@ function getSupply(gameSeed, state, location, goodId) {
|
|
|
4911
5079
|
return Math.floor(base * percent * ship * epoch);
|
|
4912
5080
|
}
|
|
4913
5081
|
function marketPrice(location, goodId, gameSeed, state) {
|
|
4914
|
-
const
|
|
4915
|
-
let price = Number(
|
|
5082
|
+
const item = getItem(goodId);
|
|
5083
|
+
let price = Number(item.base_price);
|
|
4916
5084
|
const rarityMultiplier = getRarityMultiplier(gameSeed, state.seed, location, goodId);
|
|
4917
5085
|
price *= rarityMultiplier;
|
|
4918
5086
|
const locationMultiplier = getLocationMultiplier(gameSeed, location, goodId);
|
|
4919
5087
|
price *= locationMultiplier;
|
|
4920
5088
|
const supply = getSupply(gameSeed, state, location, goodId);
|
|
4921
|
-
return exports.
|
|
5089
|
+
return exports.ItemPrice.from({
|
|
4922
5090
|
id: goodId,
|
|
4923
|
-
|
|
5091
|
+
item,
|
|
4924
5092
|
price: antelope.UInt32.from(price),
|
|
4925
5093
|
supply: antelope.UInt16.from(supply),
|
|
4926
5094
|
});
|
|
4927
5095
|
}
|
|
4928
5096
|
function marketPrices(location, gameSeed, state) {
|
|
4929
|
-
return
|
|
5097
|
+
return getItems().map((item) => marketPrice(location, item.id, gameSeed, state));
|
|
4930
5098
|
}
|
|
4931
5099
|
|
|
4932
5100
|
class LocationsManager extends BaseManager {
|
|
4933
|
-
getMarketPrice(location, goodId) {
|
|
4934
|
-
|
|
4935
|
-
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
|
|
4940
|
-
|
|
4941
|
-
return
|
|
4942
|
-
|
|
4943
|
-
|
|
4944
|
-
|
|
4945
|
-
|
|
4946
|
-
|
|
4947
|
-
|
|
4948
|
-
|
|
4949
|
-
|
|
4950
|
-
|
|
4951
|
-
|
|
4952
|
-
|
|
4953
|
-
|
|
4954
|
-
const prices = marketPrices(location, game.config.seed, state);
|
|
4955
|
-
const supplyMap = new Map();
|
|
4956
|
-
for (const row of supplyRows) {
|
|
4957
|
-
if (antelope.UInt64.from(row.epoch).equals(state.epoch)) {
|
|
4958
|
-
supplyMap.set(Number(row.good_id), Number(row.supply));
|
|
4959
|
-
}
|
|
5101
|
+
async getMarketPrice(location, goodId) {
|
|
5102
|
+
const game = await this.getGame();
|
|
5103
|
+
const state = await this.getState();
|
|
5104
|
+
return marketPrice(location, goodId, game.config.seed, state);
|
|
5105
|
+
}
|
|
5106
|
+
async getMarketPrices(location) {
|
|
5107
|
+
const game = await this.getGame();
|
|
5108
|
+
const state = await this.getState();
|
|
5109
|
+
return marketPrices(location, game.config.seed, state);
|
|
5110
|
+
}
|
|
5111
|
+
async getMarketPricesWithSupply(location) {
|
|
5112
|
+
const [game, state, supplyRows] = await Promise.all([
|
|
5113
|
+
this.getGame(),
|
|
5114
|
+
this.getState(),
|
|
5115
|
+
this.getSupplyRows(location),
|
|
5116
|
+
]);
|
|
5117
|
+
const prices = marketPrices(location, game.config.seed, state);
|
|
5118
|
+
const supplyMap = new Map();
|
|
5119
|
+
for (const row of supplyRows) {
|
|
5120
|
+
if (antelope.UInt64.from(row.epoch).equals(state.epoch)) {
|
|
5121
|
+
supplyMap.set(Number(row.item_id), Number(row.supply));
|
|
4960
5122
|
}
|
|
4961
|
-
|
|
4962
|
-
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
|
|
4966
|
-
|
|
4967
|
-
|
|
4968
|
-
|
|
4969
|
-
|
|
4970
|
-
}
|
|
4971
|
-
|
|
4972
|
-
|
|
4973
|
-
});
|
|
4974
|
-
}
|
|
4975
|
-
hasSystem(location) {
|
|
4976
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
4977
|
-
const game = yield this.getGame();
|
|
4978
|
-
return hasSystem(game.config.seed, location);
|
|
4979
|
-
});
|
|
4980
|
-
}
|
|
4981
|
-
findNearbyPlanets(origin, maxDistance = 20) {
|
|
4982
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
4983
|
-
const game = yield this.getGame();
|
|
4984
|
-
return findNearbyPlanets(game.config.seed, origin, maxDistance);
|
|
4985
|
-
});
|
|
4986
|
-
}
|
|
4987
|
-
getSupplyRows(location) {
|
|
4988
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
4989
|
-
const hash = antelope.Checksum256.hash(antelope.Bytes.from(`${location.x}-${location.y}`, 'utf8'));
|
|
4990
|
-
return this.server.table('supply').all({
|
|
4991
|
-
index_position: 'secondary',
|
|
4992
|
-
from: hash,
|
|
4993
|
-
to: hash,
|
|
4994
|
-
});
|
|
4995
|
-
});
|
|
4996
|
-
}
|
|
4997
|
-
getLocationWithPrices(coords) {
|
|
4998
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
4999
|
-
const location = toLocation(coords);
|
|
5000
|
-
const prices = yield this.getMarketPrices(location.coordinates);
|
|
5001
|
-
location.setMarketPrices(prices);
|
|
5002
|
-
return location;
|
|
5003
|
-
});
|
|
5004
|
-
}
|
|
5005
|
-
getLocationWithSupply(coords) {
|
|
5006
|
-
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
5007
|
-
const location = toLocation(coords);
|
|
5008
|
-
const [rows, state] = yield Promise.all([
|
|
5009
|
-
this.getSupplyRows(location.coordinates),
|
|
5010
|
-
this.getState(),
|
|
5011
|
-
]);
|
|
5012
|
-
location.setLocationRows(rows, state.epoch);
|
|
5013
|
-
return location;
|
|
5123
|
+
}
|
|
5124
|
+
return prices.map((price) => {
|
|
5125
|
+
const actualSupply = supplyMap.get(Number(price.id));
|
|
5126
|
+
if (actualSupply !== undefined) {
|
|
5127
|
+
return exports.ItemPrice.from({
|
|
5128
|
+
id: price.id,
|
|
5129
|
+
item: price.item,
|
|
5130
|
+
price: price.price,
|
|
5131
|
+
supply: antelope.UInt64.from(actualSupply),
|
|
5132
|
+
});
|
|
5133
|
+
}
|
|
5134
|
+
return price;
|
|
5014
5135
|
});
|
|
5015
5136
|
}
|
|
5016
|
-
|
|
5017
|
-
|
|
5018
|
-
|
|
5019
|
-
const [prices, rows, state] = yield Promise.all([
|
|
5020
|
-
this.getMarketPrices(location.coordinates),
|
|
5021
|
-
this.getSupplyRows(location.coordinates),
|
|
5022
|
-
this.getState(),
|
|
5023
|
-
]);
|
|
5024
|
-
location.setMarketPrices(prices);
|
|
5025
|
-
location.setLocationRows(rows, state.epoch);
|
|
5026
|
-
return location;
|
|
5027
|
-
});
|
|
5137
|
+
async hasSystem(location) {
|
|
5138
|
+
const game = await this.getGame();
|
|
5139
|
+
return hasSystem(game.config.seed, location);
|
|
5028
5140
|
}
|
|
5029
|
-
|
|
5030
|
-
|
|
5031
|
-
|
|
5032
|
-
return row !== null && row !== void 0 ? row : undefined;
|
|
5033
|
-
});
|
|
5141
|
+
async findNearbyPlanets(origin, maxDistance = 20) {
|
|
5142
|
+
const game = await this.getGame();
|
|
5143
|
+
return findNearbyPlanets(game.config.seed, origin, maxDistance);
|
|
5034
5144
|
}
|
|
5035
|
-
|
|
5036
|
-
|
|
5037
|
-
|
|
5038
|
-
|
|
5145
|
+
async getSupplyRows(location) {
|
|
5146
|
+
const hash = antelope.Checksum256.hash(antelope.Bytes.from(`${location.x}-${location.y}`, 'utf8'));
|
|
5147
|
+
return this.server.table('supply').all({
|
|
5148
|
+
index_position: 'secondary',
|
|
5149
|
+
from: hash,
|
|
5150
|
+
to: hash,
|
|
5039
5151
|
});
|
|
5040
5152
|
}
|
|
5041
|
-
|
|
5042
|
-
|
|
5043
|
-
|
|
5044
|
-
|
|
5153
|
+
async getLocationWithPrices(coords) {
|
|
5154
|
+
const location = toLocation(coords);
|
|
5155
|
+
const prices = await this.getMarketPrices(location.coordinates);
|
|
5156
|
+
location.setMarketPrices(prices);
|
|
5157
|
+
return location;
|
|
5158
|
+
}
|
|
5159
|
+
async getLocationWithSupply(coords) {
|
|
5160
|
+
const location = toLocation(coords);
|
|
5161
|
+
const [rows, state] = await Promise.all([
|
|
5162
|
+
this.getSupplyRows(location.coordinates),
|
|
5163
|
+
this.getState(),
|
|
5164
|
+
]);
|
|
5165
|
+
location.setLocationRows(rows, state.epoch);
|
|
5166
|
+
return location;
|
|
5167
|
+
}
|
|
5168
|
+
async getLocationComplete(coords) {
|
|
5169
|
+
const location = toLocation(coords);
|
|
5170
|
+
const [prices, rows, state] = await Promise.all([
|
|
5171
|
+
this.getMarketPrices(location.coordinates),
|
|
5172
|
+
this.getSupplyRows(location.coordinates),
|
|
5173
|
+
this.getState(),
|
|
5174
|
+
]);
|
|
5175
|
+
location.setMarketPrices(prices);
|
|
5176
|
+
location.setLocationRows(rows, state.epoch);
|
|
5177
|
+
return location;
|
|
5178
|
+
}
|
|
5179
|
+
async getLocationEntity(id) {
|
|
5180
|
+
const row = await this.server.table('location').get(antelope.UInt64.from(id));
|
|
5181
|
+
return row ?? undefined;
|
|
5182
|
+
}
|
|
5183
|
+
async getLocationEntityAt(coords) {
|
|
5184
|
+
const id = coordsToLocationId(coords);
|
|
5185
|
+
return this.getLocationEntity(id);
|
|
5186
|
+
}
|
|
5187
|
+
async getAllLocationEntities() {
|
|
5188
|
+
return this.server.table('location').all();
|
|
5045
5189
|
}
|
|
5046
5190
|
}
|
|
5047
5191
|
|
|
@@ -5052,7 +5196,7 @@ function calculateUpdatedCargoCost(currentPaid, currentOwned, purchaseCost, purc
|
|
|
5052
5196
|
}
|
|
5053
5197
|
function calculateMaxTradeQuantity(ship, player, goodPrice) {
|
|
5054
5198
|
const pricePerUnit = antelope.UInt32.from(goodPrice.price);
|
|
5055
|
-
const massPerUnit = antelope.UInt32.from(goodPrice.
|
|
5199
|
+
const massPerUnit = antelope.UInt32.from(goodPrice.item.mass);
|
|
5056
5200
|
const spaceForQuantity = ship.availableCapacity.dividing(massPerUnit);
|
|
5057
5201
|
const affordableQuantity = player.balance.dividing(pricePerUnit);
|
|
5058
5202
|
const maxQuantity = spaceForQuantity.lt(affordableQuantity)
|
|
@@ -5085,7 +5229,7 @@ function calculateProfitPerSecond(profit, travelTimeSeconds) {
|
|
|
5085
5229
|
const t = antelope.UInt32.from(travelTimeSeconds);
|
|
5086
5230
|
return t.gt(antelope.UInt32.zero) ? Number(profit) / Number(t) : 0;
|
|
5087
5231
|
}
|
|
5088
|
-
function
|
|
5232
|
+
function findBestItemToTrade(ship, player, originPrices, destPrices, travelTimeSeconds) {
|
|
5089
5233
|
let bestTrade = null;
|
|
5090
5234
|
let bestProfitPerSecond = 0;
|
|
5091
5235
|
for (const originPrice of originPrices) {
|
|
@@ -5102,7 +5246,7 @@ function findBestGoodToTrade(ship, player, originPrices, destPrices, travelTimeS
|
|
|
5102
5246
|
if (profitPerSecond > bestProfitPerSecond) {
|
|
5103
5247
|
bestProfitPerSecond = profitPerSecond;
|
|
5104
5248
|
bestTrade = {
|
|
5105
|
-
|
|
5249
|
+
item: originPrice,
|
|
5106
5250
|
quantity: calc.maxQuantity,
|
|
5107
5251
|
profit: Number(tradeResult.profit),
|
|
5108
5252
|
profitPerSecond,
|
|
@@ -5122,100 +5266,99 @@ function calculateROI(cost, profit) {
|
|
|
5122
5266
|
return cost > 0 ? (profit / cost) * 100 : 0;
|
|
5123
5267
|
}
|
|
5124
5268
|
|
|
5125
|
-
function findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
|
|
5126
|
-
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
|
|
5130
|
-
|
|
5131
|
-
|
|
5132
|
-
|
|
5133
|
-
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5143
|
-
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
|
|
5147
|
-
|
|
5148
|
-
|
|
5149
|
-
|
|
5150
|
-
|
|
5151
|
-
continue;
|
|
5152
|
-
}
|
|
5153
|
-
const canAfford = balance !== undefined
|
|
5154
|
-
? balance.dividing(originGood.price)
|
|
5155
|
-
: antelope.UInt64.from(Number.MAX_SAFE_INTEGER);
|
|
5156
|
-
const canHaul = effectiveAvailableMass.dividing(originGood.good.mass);
|
|
5157
|
-
const supplyLimit = antelope.UInt64.from(originGood.supply);
|
|
5158
|
-
let maxQuantity = canAfford;
|
|
5159
|
-
if (canHaul.lt(maxQuantity))
|
|
5160
|
-
maxQuantity = canHaul;
|
|
5161
|
-
if (supplyLimit.lt(maxQuantity))
|
|
5162
|
-
maxQuantity = supplyLimit;
|
|
5163
|
-
if (maxQuantity.equals(antelope.UInt64.zero))
|
|
5164
|
-
continue;
|
|
5165
|
-
const cargoMass = originGood.good.mass.multiplying(maxQuantity);
|
|
5166
|
-
const availableSpaceUInt = antelope.UInt64.from(availableSpace);
|
|
5167
|
-
const baseMass = availableSpace !== undefined
|
|
5168
|
-
? shipCapacity.gte(availableSpaceUInt)
|
|
5169
|
-
? shipCapacity.subtracting(availableSpaceUInt)
|
|
5170
|
-
: antelope.UInt64.zero
|
|
5171
|
-
: currentMass;
|
|
5172
|
-
const totalMass = baseMass.adding(cargoMass);
|
|
5173
|
-
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5174
|
-
const travelEstimate = estimateTravelTime(ship, totalMass, distance, {
|
|
5175
|
-
needsRecharge,
|
|
5176
|
-
loadMass: Number(cargoMass),
|
|
5177
|
-
});
|
|
5178
|
-
const tradeCalc = calculateTradeProfit(maxQuantity, originGood.price, destGood.price);
|
|
5179
|
-
const profitPerUnit = destGood.price.subtracting(originGood.price);
|
|
5180
|
-
const profitPerSecond = calculateProfitPerSecond(tradeCalc.profit, travelEstimate.total);
|
|
5181
|
-
if (profitPerSecond < minProfitPerSecond)
|
|
5182
|
-
continue;
|
|
5183
|
-
if (tradeCalc.margin < minMarginPercent)
|
|
5184
|
-
continue;
|
|
5185
|
-
deals.push({
|
|
5186
|
-
origin,
|
|
5187
|
-
destination: destLocation,
|
|
5188
|
-
good: originGood,
|
|
5189
|
-
distance,
|
|
5190
|
-
supply: originGood.supply,
|
|
5191
|
-
buyPrice: originGood.price,
|
|
5192
|
-
sellPrice: destGood.price,
|
|
5193
|
-
profitPerUnit,
|
|
5194
|
-
maxQuantity: antelope.UInt32.from(maxQuantity),
|
|
5195
|
-
totalProfit: tradeCalc.profit,
|
|
5196
|
-
travelTime: travelEstimate.total,
|
|
5197
|
-
travelTimeBreakdown: travelEstimate,
|
|
5198
|
-
profitPerSecond,
|
|
5199
|
-
marginPercent: tradeCalc.margin,
|
|
5200
|
-
});
|
|
5269
|
+
async function findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
|
|
5270
|
+
const { maxDeals = 10, maxDistance = 20 * PRECISION, playerBalance, minProfitPerSecond = 0, minMarginPercent = 0, availableSpace, } = options;
|
|
5271
|
+
const balance = playerBalance !== undefined ? antelope.UInt64.from(playerBalance) : undefined;
|
|
5272
|
+
const origin = Location.from(originLocation);
|
|
5273
|
+
const originPrices = await getMarketPrices(originLocation);
|
|
5274
|
+
origin.setMarketPrices(originPrices);
|
|
5275
|
+
const nearbyLocations = await getNearbyLocations(originLocation, maxDistance);
|
|
5276
|
+
const deals = [];
|
|
5277
|
+
const currentMass = ship.totalMass;
|
|
5278
|
+
const shipCapacity = ship.maxCapacity;
|
|
5279
|
+
const effectiveAvailableMass = availableSpace !== undefined
|
|
5280
|
+
? antelope.UInt64.from(availableSpace)
|
|
5281
|
+
: currentMass.lt(shipCapacity)
|
|
5282
|
+
? shipCapacity.subtracting(currentMass)
|
|
5283
|
+
: antelope.UInt64.zero;
|
|
5284
|
+
for (const destLocation of nearbyLocations) {
|
|
5285
|
+
const destinationPrices = await getMarketPrices(destLocation.coordinates);
|
|
5286
|
+
destLocation.setMarketPrices(destinationPrices);
|
|
5287
|
+
const distance = distanceBetweenCoordinates(originLocation, destLocation.coordinates);
|
|
5288
|
+
for (const originGood of originPrices) {
|
|
5289
|
+
const destGood = destinationPrices.find((g) => g.id.equals(originGood.id));
|
|
5290
|
+
if (!destGood)
|
|
5291
|
+
continue;
|
|
5292
|
+
if (!isProfitable(originGood.price, destGood.price) ||
|
|
5293
|
+
originGood.supply.equals(antelope.UInt16.from(0))) {
|
|
5294
|
+
continue;
|
|
5201
5295
|
}
|
|
5296
|
+
const canAfford = balance !== undefined
|
|
5297
|
+
? balance.dividing(originGood.price)
|
|
5298
|
+
: antelope.UInt64.from(Number.MAX_SAFE_INTEGER);
|
|
5299
|
+
const canHaul = effectiveAvailableMass.dividing(originGood.item.mass);
|
|
5300
|
+
const supplyLimit = antelope.UInt64.from(originGood.supply);
|
|
5301
|
+
let maxQuantity = canAfford;
|
|
5302
|
+
if (canHaul.lt(maxQuantity))
|
|
5303
|
+
maxQuantity = canHaul;
|
|
5304
|
+
if (supplyLimit.lt(maxQuantity))
|
|
5305
|
+
maxQuantity = supplyLimit;
|
|
5306
|
+
if (maxQuantity.equals(antelope.UInt64.zero))
|
|
5307
|
+
continue;
|
|
5308
|
+
const cargoMass = originGood.item.mass.multiplying(maxQuantity);
|
|
5309
|
+
const availableSpaceUInt = antelope.UInt64.from(availableSpace);
|
|
5310
|
+
const baseMass = availableSpace !== undefined
|
|
5311
|
+
? shipCapacity.gte(availableSpaceUInt)
|
|
5312
|
+
? shipCapacity.subtracting(availableSpaceUInt)
|
|
5313
|
+
: antelope.UInt64.zero
|
|
5314
|
+
: currentMass;
|
|
5315
|
+
const totalMass = baseMass.adding(cargoMass);
|
|
5316
|
+
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5317
|
+
const travelEstimate = estimateTravelTime(ship, totalMass, distance, {
|
|
5318
|
+
needsRecharge,
|
|
5319
|
+
loadMass: Number(cargoMass),
|
|
5320
|
+
});
|
|
5321
|
+
const tradeCalc = calculateTradeProfit(maxQuantity, originGood.price, destGood.price);
|
|
5322
|
+
const profitPerUnit = destGood.price.subtracting(originGood.price);
|
|
5323
|
+
const profitPerSecond = calculateProfitPerSecond(tradeCalc.profit, travelEstimate.total);
|
|
5324
|
+
if (profitPerSecond < minProfitPerSecond)
|
|
5325
|
+
continue;
|
|
5326
|
+
if (tradeCalc.margin < minMarginPercent)
|
|
5327
|
+
continue;
|
|
5328
|
+
deals.push({
|
|
5329
|
+
origin,
|
|
5330
|
+
destination: destLocation,
|
|
5331
|
+
item: originGood,
|
|
5332
|
+
distance,
|
|
5333
|
+
supply: originGood.supply,
|
|
5334
|
+
buyPrice: originGood.price,
|
|
5335
|
+
sellPrice: destGood.price,
|
|
5336
|
+
profitPerUnit,
|
|
5337
|
+
maxQuantity: antelope.UInt32.from(maxQuantity),
|
|
5338
|
+
totalProfit: tradeCalc.profit,
|
|
5339
|
+
travelTime: travelEstimate.total,
|
|
5340
|
+
travelTimeBreakdown: travelEstimate,
|
|
5341
|
+
profitPerSecond,
|
|
5342
|
+
marginPercent: tradeCalc.margin,
|
|
5343
|
+
});
|
|
5202
5344
|
}
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
|
|
5345
|
+
}
|
|
5346
|
+
deals.sort((a, b) => b.profitPerSecond - a.profitPerSecond);
|
|
5347
|
+
return deals.slice(0, maxDeals);
|
|
5206
5348
|
}
|
|
5207
|
-
function findBestDeal(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
|
|
5208
|
-
|
|
5209
|
-
|
|
5210
|
-
|
|
5349
|
+
async function findBestDeal(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
|
|
5350
|
+
const deals = await findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, {
|
|
5351
|
+
...options,
|
|
5352
|
+
maxDeals: 1,
|
|
5211
5353
|
});
|
|
5354
|
+
return deals[0];
|
|
5212
5355
|
}
|
|
5213
5356
|
|
|
5214
5357
|
function calculateCargoMass(cargo) {
|
|
5215
5358
|
let mass = antelope.UInt32.from(0);
|
|
5216
5359
|
for (const c of cargo) {
|
|
5217
5360
|
if (antelope.UInt64.from(c.quantity).gt(antelope.UInt64.zero)) {
|
|
5218
|
-
const goodMass =
|
|
5361
|
+
const goodMass = getItem(c.item_id).mass;
|
|
5219
5362
|
mass = mass.adding(goodMass.multiplying(c.quantity));
|
|
5220
5363
|
}
|
|
5221
5364
|
}
|
|
@@ -5237,7 +5380,7 @@ function analyzeCargoSale(cargo, prices) {
|
|
|
5237
5380
|
for (const c of cargo) {
|
|
5238
5381
|
if (antelope.UInt64.from(c.quantity).equals(antelope.UInt64.zero))
|
|
5239
5382
|
continue;
|
|
5240
|
-
const goodId = Number(c.
|
|
5383
|
+
const goodId = Number(c.item_id);
|
|
5241
5384
|
const salePrice = prices.get(goodId);
|
|
5242
5385
|
if (salePrice) {
|
|
5243
5386
|
revenue = revenue.adding(antelope.UInt64.from(salePrice).multiplying(c.quantity));
|
|
@@ -5251,20 +5394,19 @@ function analyzeCargoSale(cargo, prices) {
|
|
|
5251
5394
|
};
|
|
5252
5395
|
}
|
|
5253
5396
|
function buildCargoSaleItems(cargo, prices) {
|
|
5254
|
-
var _a, _b;
|
|
5255
5397
|
const items = [];
|
|
5256
5398
|
for (const c of cargo) {
|
|
5257
5399
|
if (antelope.UInt64.from(c.quantity).equals(antelope.UInt64.zero))
|
|
5258
5400
|
continue;
|
|
5259
|
-
const goodId = Number(c.
|
|
5401
|
+
const goodId = Number(c.item_id);
|
|
5260
5402
|
const salePrice = prices.get(goodId);
|
|
5261
5403
|
const pricePerUnit = salePrice ? antelope.UInt32.from(salePrice) : antelope.UInt32.zero;
|
|
5262
5404
|
const revenue = antelope.UInt64.from(pricePerUnit).multiplying(c.quantity);
|
|
5263
5405
|
const cost = c.unit_cost.multiplying(c.quantity);
|
|
5264
5406
|
const profit = antelope.Int64.from(revenue).subtracting(cost);
|
|
5265
5407
|
items.push({
|
|
5266
|
-
goodId: c.
|
|
5267
|
-
goodName:
|
|
5408
|
+
goodId: c.item_id,
|
|
5409
|
+
goodName: c.item?.name ?? `Item #${goodId}`,
|
|
5268
5410
|
quantity: antelope.UInt32.from(c.quantity),
|
|
5269
5411
|
pricePerUnit,
|
|
5270
5412
|
revenue,
|
|
@@ -5275,13 +5417,12 @@ function buildCargoSaleItems(cargo, prices) {
|
|
|
5275
5417
|
return items;
|
|
5276
5418
|
}
|
|
5277
5419
|
function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unloadTime) {
|
|
5278
|
-
var _a;
|
|
5279
5420
|
const saleProfit = antelope.Int64.from(saleRevenue).subtracting(saleCost);
|
|
5280
5421
|
const totalProfit = saleProfit.adding(deal.totalProfit);
|
|
5281
5422
|
const profitPerSecond = deal.travelTime.gt(antelope.UInt32.zero)
|
|
5282
5423
|
? Number(totalProfit) / Number(deal.travelTime)
|
|
5283
5424
|
: Number(totalProfit);
|
|
5284
|
-
const unload = unloadTime
|
|
5425
|
+
const unload = unloadTime ?? antelope.UInt32.zero;
|
|
5285
5426
|
const breakdown = deal.travelTimeBreakdown
|
|
5286
5427
|
? {
|
|
5287
5428
|
unloadTime: unload,
|
|
@@ -5295,10 +5436,10 @@ function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unload
|
|
|
5295
5436
|
}
|
|
5296
5437
|
: undefined;
|
|
5297
5438
|
return {
|
|
5298
|
-
id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.
|
|
5439
|
+
id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
|
|
5299
5440
|
type: 'sell-and-trade',
|
|
5300
|
-
title: `Trade ${deal.
|
|
5301
|
-
description: `Sell cargo, buy ${deal.maxQuantity} ${deal.
|
|
5441
|
+
title: `Trade ${deal.item.item.name}`,
|
|
5442
|
+
description: `Sell cargo, buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
|
|
5302
5443
|
reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
|
|
5303
5444
|
recommended: false,
|
|
5304
5445
|
highestProfit: false,
|
|
@@ -5310,7 +5451,7 @@ function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unload
|
|
|
5310
5451
|
marginPercent: deal.marginPercent,
|
|
5311
5452
|
destination: deal.destination,
|
|
5312
5453
|
deal,
|
|
5313
|
-
travelTime:
|
|
5454
|
+
travelTime: breakdown?.total ?? deal.travelTime,
|
|
5314
5455
|
travelTimeBreakdown: breakdown,
|
|
5315
5456
|
cargoSale,
|
|
5316
5457
|
cargoProfitLoss: saleProfit,
|
|
@@ -5326,7 +5467,7 @@ function createTravelToSellOption(currentRevenue, cargoCost, betterSale, cargo,
|
|
|
5326
5467
|
: antelope.UInt32.zero;
|
|
5327
5468
|
const hasDealAfter = !!betterSale.bestDealAfterSale;
|
|
5328
5469
|
const cargoSale = destPrices ? buildCargoSaleItems(cargo, destPrices) : undefined;
|
|
5329
|
-
const cargoProfitLoss = cargoSale
|
|
5470
|
+
const cargoProfitLoss = cargoSale?.reduce((sum, item) => sum.adding(item.profit), antelope.Int64.zero);
|
|
5330
5471
|
const saleProfit = antelope.Int64.from(betterSale.revenue).subtracting(cargoCost);
|
|
5331
5472
|
const profitPerSecond = betterSale.travelTime.gt(antelope.UInt32.zero)
|
|
5332
5473
|
? Number(saleProfit) / Number(betterSale.travelTime)
|
|
@@ -5360,7 +5501,7 @@ function createSellAndRepositionOption(saleRevenue, saleCost, reposition, cargoS
|
|
|
5360
5501
|
id: `sell-reposition-${reposition.location.coordinates.x}-${reposition.location.coordinates.y}`,
|
|
5361
5502
|
type: 'sell-and-reposition',
|
|
5362
5503
|
title: 'Sell & Move',
|
|
5363
|
-
description: `Sell cargo here, travel empty to buy ${deal.
|
|
5504
|
+
description: `Sell cargo here, travel empty to buy ${deal.item.item.name}`,
|
|
5364
5505
|
reason: `No good trades here — ${deal.marginPercent.toFixed(0)}% margin trade available at destination`,
|
|
5365
5506
|
recommended: false,
|
|
5366
5507
|
highestProfit: false,
|
|
@@ -5461,249 +5602,246 @@ function createExploreOption(destination, travelTime, discountedGood, travelTime
|
|
|
5461
5602
|
potentialDeals,
|
|
5462
5603
|
};
|
|
5463
5604
|
}
|
|
5464
|
-
function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
|
|
5465
|
-
|
|
5466
|
-
|
|
5467
|
-
|
|
5468
|
-
|
|
5469
|
-
|
|
5470
|
-
|
|
5471
|
-
|
|
5472
|
-
|
|
5473
|
-
|
|
5474
|
-
|
|
5475
|
-
|
|
5476
|
-
|
|
5477
|
-
|
|
5478
|
-
|
|
5479
|
-
|
|
5480
|
-
|
|
5481
|
-
|
|
5482
|
-
|
|
5483
|
-
|
|
5484
|
-
const
|
|
5485
|
-
|
|
5486
|
-
|
|
5487
|
-
if (cargoGoodIds.has(dealGoodId)) {
|
|
5488
|
-
continue;
|
|
5489
|
-
}
|
|
5490
|
-
const unloadTime = calculateUnloadTime(ship, cargo);
|
|
5491
|
-
const option = createSellAndTradeOption(cargoValueHere, cargoCost, deal, cargoSaleHere, unloadTime);
|
|
5492
|
-
collectOptions.push(option);
|
|
5605
|
+
async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
|
|
5606
|
+
const { playerBalance = Infinity, minSaleImprovement = 100 } = options;
|
|
5607
|
+
const cargo = ship.sellableCargo;
|
|
5608
|
+
const hasCargo = cargo.length > 0;
|
|
5609
|
+
const originPrices = await callbacks.getMarketPrices(arrivedAt);
|
|
5610
|
+
const priceMap = new Map(originPrices.map((p) => [Number(p.id), p.price]));
|
|
5611
|
+
const { revenue: cargoValueHere, cost: cargoCost } = analyzeCargoSale(cargo, priceMap);
|
|
5612
|
+
const cargoSaleHere = buildCargoSaleItems(cargo, priceMap);
|
|
5613
|
+
const collectOptions = [];
|
|
5614
|
+
const maxDistance = options.maxDistance ?? Number(ship.maxDistance);
|
|
5615
|
+
const nearbyLocations = await callbacks.getNearbyLocations(arrivedAt, maxDistance);
|
|
5616
|
+
const dealsAtOrigin = await findDealsForShip(ship, arrivedAt, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
|
|
5617
|
+
maxDeals: 5,
|
|
5618
|
+
maxDistance,
|
|
5619
|
+
playerBalance: playerBalance + Number(cargoValueHere),
|
|
5620
|
+
availableSpace: Number(ship.maxCapacity),
|
|
5621
|
+
});
|
|
5622
|
+
if (hasCargo && dealsAtOrigin.length > 0) {
|
|
5623
|
+
const cargoGoodIds = new Set(cargo.map((c) => Number(c.item_id)));
|
|
5624
|
+
for (const deal of dealsAtOrigin.slice(0, 3)) {
|
|
5625
|
+
const dealGoodId = Number(deal.item.id);
|
|
5626
|
+
if (cargoGoodIds.has(dealGoodId)) {
|
|
5627
|
+
continue;
|
|
5493
5628
|
}
|
|
5629
|
+
const unloadTime = calculateUnloadTime(ship, cargo);
|
|
5630
|
+
const option = createSellAndTradeOption(cargoValueHere, cargoCost, deal, cargoSaleHere, unloadTime);
|
|
5631
|
+
collectOptions.push(option);
|
|
5494
5632
|
}
|
|
5495
|
-
|
|
5496
|
-
|
|
5497
|
-
|
|
5498
|
-
|
|
5499
|
-
|
|
5500
|
-
|
|
5501
|
-
|
|
5502
|
-
|
|
5503
|
-
|
|
5504
|
-
|
|
5505
|
-
|
|
5506
|
-
|
|
5507
|
-
}
|
|
5508
|
-
}
|
|
5509
|
-
const betterSaleResults = yield Promise.all(candidateLocations.map(({ destLocation, destPriceMap, destRevenue, improvement }) => tslib.__awaiter(this, void 0, void 0, function* () {
|
|
5510
|
-
const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
|
|
5511
|
-
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5512
|
-
const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
|
|
5513
|
-
needsRecharge,
|
|
5514
|
-
});
|
|
5515
|
-
const dealsAfterSale = yield findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
|
|
5516
|
-
maxDeals: 1,
|
|
5517
|
-
maxDistance,
|
|
5518
|
-
playerBalance: destRevenue,
|
|
5519
|
-
availableSpace: Number(ship.maxCapacity),
|
|
5520
|
-
});
|
|
5521
|
-
return {
|
|
5522
|
-
better: {
|
|
5523
|
-
location: destLocation,
|
|
5524
|
-
price: antelope.UInt32.from(destRevenue.dividing(cargo.reduce((s, c) => s.adding(c.quantity), antelope.UInt64.zero))),
|
|
5525
|
-
revenue: destRevenue,
|
|
5526
|
-
improvement,
|
|
5527
|
-
bestDealAfterSale: dealsAfterSale[0],
|
|
5528
|
-
distance,
|
|
5529
|
-
travelTime: travelEstimate.total,
|
|
5530
|
-
travelTimeBreakdown: travelEstimate,
|
|
5531
|
-
},
|
|
5532
|
-
destPriceMap,
|
|
5533
|
-
};
|
|
5534
|
-
})));
|
|
5535
|
-
const betterSaleLocations = betterSaleResults.sort((a, b) => Number(b.better.improvement) - Number(a.better.improvement));
|
|
5536
|
-
for (const { better, destPriceMap } of betterSaleLocations.slice(0, 2)) {
|
|
5537
|
-
const option = createTravelToSellOption(cargoValueHere, cargoCost, better, cargo, destPriceMap);
|
|
5538
|
-
collectOptions.push(option);
|
|
5633
|
+
}
|
|
5634
|
+
if (hasCargo) {
|
|
5635
|
+
const locationsToCheck = nearbyLocations.slice(0, 10);
|
|
5636
|
+
const allDestPrices = await Promise.all(locationsToCheck.map((loc) => callbacks.getMarketPrices(loc.coordinates)));
|
|
5637
|
+
const candidateLocations = [];
|
|
5638
|
+
for (let i = 0; i < locationsToCheck.length; i++) {
|
|
5639
|
+
const destLocation = locationsToCheck[i];
|
|
5640
|
+
const destPrices = allDestPrices[i];
|
|
5641
|
+
const destPriceMap = new Map(destPrices.map((p) => [Number(p.id), p.price]));
|
|
5642
|
+
const { revenue: destRevenue } = analyzeCargoSale(cargo, destPriceMap);
|
|
5643
|
+
const improvement = antelope.Int64.from(destRevenue).subtracting(cargoValueHere);
|
|
5644
|
+
if (improvement.gt(antelope.Int64.from(minSaleImprovement))) {
|
|
5645
|
+
candidateLocations.push({ destLocation, destPriceMap, destRevenue, improvement });
|
|
5539
5646
|
}
|
|
5540
5647
|
}
|
|
5541
|
-
|
|
5542
|
-
const
|
|
5543
|
-
const
|
|
5648
|
+
const betterSaleResults = await Promise.all(candidateLocations.map(async ({ destLocation, destPriceMap, destRevenue, improvement }) => {
|
|
5649
|
+
const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
|
|
5650
|
+
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5651
|
+
const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
|
|
5652
|
+
needsRecharge,
|
|
5653
|
+
});
|
|
5654
|
+
const dealsAfterSale = await findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
|
|
5544
5655
|
maxDeals: 1,
|
|
5545
5656
|
maxDistance,
|
|
5546
|
-
playerBalance:
|
|
5657
|
+
playerBalance: destRevenue,
|
|
5547
5658
|
availableSpace: Number(ship.maxCapacity),
|
|
5548
|
-
})
|
|
5549
|
-
|
|
5550
|
-
|
|
5551
|
-
|
|
5552
|
-
|
|
5553
|
-
|
|
5554
|
-
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
|
|
5559
|
-
|
|
5560
|
-
|
|
5561
|
-
|
|
5562
|
-
|
|
5563
|
-
|
|
5564
|
-
|
|
5565
|
-
|
|
5566
|
-
|
|
5567
|
-
}
|
|
5568
|
-
}
|
|
5569
|
-
repositionLocations.sort((a, b) => b.bestDeal.profitPerSecond - a.bestDeal.profitPerSecond);
|
|
5570
|
-
for (const reposition of repositionLocations.slice(0, 2)) {
|
|
5571
|
-
const option = createSellAndRepositionOption(cargoValueHere, cargoCost, reposition, cargoSaleHere);
|
|
5572
|
-
collectOptions.push(option);
|
|
5573
|
-
}
|
|
5574
|
-
}
|
|
5575
|
-
if (hasCargo) {
|
|
5576
|
-
const unloadTime = calculateUnloadTime(ship, cargo);
|
|
5577
|
-
const sellAndStay = createSellAndStayOption(cargoValueHere, cargoCost, cargoSaleHere, unloadTime);
|
|
5578
|
-
collectOptions.push(sellAndStay);
|
|
5579
|
-
}
|
|
5580
|
-
if (!hasCargo && dealsAtOrigin.length > 0) {
|
|
5581
|
-
for (const deal of dealsAtOrigin.slice(0, 3)) {
|
|
5582
|
-
const option = {
|
|
5583
|
-
id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.good.id}`,
|
|
5584
|
-
type: 'sell-and-trade',
|
|
5585
|
-
title: `Trade ${deal.good.good.name}`,
|
|
5586
|
-
description: `Buy ${deal.maxQuantity} ${deal.good.good.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
|
|
5587
|
-
reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
|
|
5588
|
-
recommended: false,
|
|
5589
|
-
highestProfit: false,
|
|
5590
|
-
estimatedProfit: deal.totalProfit,
|
|
5591
|
-
purchaseCost: antelope.UInt64.from(deal.buyPrice).multiplying(deal.maxQuantity),
|
|
5592
|
-
nextTradeProfit: deal.totalProfit,
|
|
5593
|
-
profitPerSecond: deal.profitPerSecond,
|
|
5594
|
-
marginPercent: deal.marginPercent,
|
|
5595
|
-
destination: deal.destination,
|
|
5596
|
-
deal,
|
|
5597
|
-
travelTime: deal.travelTime,
|
|
5598
|
-
travelTimeBreakdown: {
|
|
5599
|
-
unloadTime: antelope.UInt32.zero,
|
|
5600
|
-
loadTime: deal.travelTimeBreakdown.loadTime,
|
|
5601
|
-
rechargeTime: deal.travelTimeBreakdown.rechargeTime,
|
|
5602
|
-
flightTime: deal.travelTimeBreakdown.flightTime,
|
|
5603
|
-
total: deal.travelTimeBreakdown.total,
|
|
5604
|
-
},
|
|
5605
|
-
};
|
|
5606
|
-
collectOptions.push(option);
|
|
5607
|
-
}
|
|
5659
|
+
});
|
|
5660
|
+
return {
|
|
5661
|
+
better: {
|
|
5662
|
+
location: destLocation,
|
|
5663
|
+
price: antelope.UInt32.from(destRevenue.dividing(cargo.reduce((s, c) => s.adding(c.quantity), antelope.UInt64.zero))),
|
|
5664
|
+
revenue: destRevenue,
|
|
5665
|
+
improvement,
|
|
5666
|
+
bestDealAfterSale: dealsAfterSale[0],
|
|
5667
|
+
distance,
|
|
5668
|
+
travelTime: travelEstimate.total,
|
|
5669
|
+
travelTimeBreakdown: travelEstimate,
|
|
5670
|
+
},
|
|
5671
|
+
destPriceMap,
|
|
5672
|
+
};
|
|
5673
|
+
}));
|
|
5674
|
+
const betterSaleLocations = betterSaleResults.sort((a, b) => Number(b.better.improvement) - Number(a.better.improvement));
|
|
5675
|
+
for (const { better, destPriceMap } of betterSaleLocations.slice(0, 2)) {
|
|
5676
|
+
const option = createTravelToSellOption(cargoValueHere, cargoCost, better, cargo, destPriceMap);
|
|
5677
|
+
collectOptions.push(option);
|
|
5608
5678
|
}
|
|
5609
|
-
|
|
5610
|
-
|
|
5611
|
-
|
|
5612
|
-
|
|
5613
|
-
|
|
5614
|
-
|
|
5679
|
+
}
|
|
5680
|
+
if (hasCargo && dealsAtOrigin.length === 0) {
|
|
5681
|
+
const locationsToCheck = nearbyLocations.slice(0, 10);
|
|
5682
|
+
const allDealsAtDest = await Promise.all(locationsToCheck.map((destLocation) => findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
|
|
5683
|
+
maxDeals: 1,
|
|
5684
|
+
maxDistance,
|
|
5685
|
+
playerBalance: antelope.UInt64.from(playerBalance).adding(cargoValueHere),
|
|
5686
|
+
availableSpace: Number(ship.maxCapacity),
|
|
5687
|
+
})));
|
|
5688
|
+
const repositionLocations = [];
|
|
5689
|
+
for (let i = 0; i < locationsToCheck.length; i++) {
|
|
5690
|
+
const destLocation = locationsToCheck[i];
|
|
5691
|
+
const dealsAtDest = allDealsAtDest[i];
|
|
5692
|
+
if (dealsAtDest.length > 0) {
|
|
5693
|
+
const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
|
|
5615
5694
|
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5616
|
-
const unloadMass = hasCargo ? calculateCargoMass(cargo) : antelope.UInt32.zero;
|
|
5617
5695
|
const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
|
|
5618
5696
|
needsRecharge,
|
|
5619
|
-
unloadMass,
|
|
5697
|
+
unloadMass: calculateCargoMass(cargo),
|
|
5620
5698
|
});
|
|
5621
|
-
|
|
5622
|
-
|
|
5623
|
-
|
|
5624
|
-
|
|
5625
|
-
for (const good of allGoods) {
|
|
5626
|
-
const rarity = getRarity(gameSeed, state.seed, dest.coordinates, good.id);
|
|
5627
|
-
if (rarity.minMultiplier < 1.0) {
|
|
5628
|
-
const discountPercent = Math.round((1 - rarity.minMultiplier) * 100);
|
|
5629
|
-
if (discountPercent > bestDiscount) {
|
|
5630
|
-
bestDiscount = discountPercent;
|
|
5631
|
-
const rarityName = rarity.rarity === exports.Rarities.legendary
|
|
5632
|
-
? 'Legendary'
|
|
5633
|
-
: rarity.rarity === exports.Rarities.epic
|
|
5634
|
-
? 'Epic'
|
|
5635
|
-
: rarity.rarity === exports.Rarities.rare
|
|
5636
|
-
? 'Rare'
|
|
5637
|
-
: rarity.rarity === exports.Rarities.uncommon
|
|
5638
|
-
? 'Uncommon'
|
|
5639
|
-
: 'Common';
|
|
5640
|
-
discountedGood = {
|
|
5641
|
-
goodId: Number(good.id),
|
|
5642
|
-
name: good.name,
|
|
5643
|
-
rarity: rarityName,
|
|
5644
|
-
discountPercent,
|
|
5645
|
-
};
|
|
5646
|
-
}
|
|
5647
|
-
}
|
|
5648
|
-
}
|
|
5649
|
-
}
|
|
5650
|
-
const destDeals = yield findDealsForShip(ship, dest.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, { maxDeals: 2 });
|
|
5651
|
-
const potentialDeals = destDeals.map((d) => ({
|
|
5652
|
-
goodId: Number(d.good.id),
|
|
5653
|
-
goodName: d.good.good.name,
|
|
5654
|
-
destinationCoords: d.destination.coordinates,
|
|
5655
|
-
marginPercent: d.marginPercent,
|
|
5656
|
-
profitPerSecond: d.profitPerSecond,
|
|
5657
|
-
}));
|
|
5658
|
-
let score = 0;
|
|
5659
|
-
if (potentialDeals.length > 0) {
|
|
5660
|
-
score = potentialDeals[0].profitPerSecond;
|
|
5661
|
-
}
|
|
5662
|
-
else if (bestDiscount > 0) {
|
|
5663
|
-
score = bestDiscount * 0.01;
|
|
5664
|
-
}
|
|
5665
|
-
exploreCandidates.push({
|
|
5666
|
-
dest,
|
|
5699
|
+
repositionLocations.push({
|
|
5700
|
+
location: destLocation,
|
|
5701
|
+
bestDeal: dealsAtDest[0],
|
|
5702
|
+
distance,
|
|
5667
5703
|
travelTime: travelEstimate.total,
|
|
5668
5704
|
travelTimeBreakdown: travelEstimate,
|
|
5669
|
-
discountedGood,
|
|
5670
|
-
bestDiscount,
|
|
5671
|
-
potentialDeals: potentialDeals.length > 0 ? potentialDeals : undefined,
|
|
5672
|
-
score,
|
|
5673
5705
|
});
|
|
5674
5706
|
}
|
|
5675
|
-
exploreCandidates.sort((a, b) => b.score - a.score);
|
|
5676
|
-
for (const candidate of exploreCandidates.slice(0, 3)) {
|
|
5677
|
-
const option = createExploreOption(candidate.dest, candidate.travelTime, candidate.discountedGood, candidate.travelTimeBreakdown, candidate.potentialDeals);
|
|
5678
|
-
collectOptions.push(option);
|
|
5679
|
-
}
|
|
5680
5707
|
}
|
|
5681
|
-
|
|
5682
|
-
|
|
5683
|
-
|
|
5684
|
-
|
|
5685
|
-
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
|
|
5689
|
-
|
|
5690
|
-
|
|
5691
|
-
|
|
5708
|
+
repositionLocations.sort((a, b) => b.bestDeal.profitPerSecond - a.bestDeal.profitPerSecond);
|
|
5709
|
+
for (const reposition of repositionLocations.slice(0, 2)) {
|
|
5710
|
+
const option = createSellAndRepositionOption(cargoValueHere, cargoCost, reposition, cargoSaleHere);
|
|
5711
|
+
collectOptions.push(option);
|
|
5712
|
+
}
|
|
5713
|
+
}
|
|
5714
|
+
if (hasCargo) {
|
|
5715
|
+
const unloadTime = calculateUnloadTime(ship, cargo);
|
|
5716
|
+
const sellAndStay = createSellAndStayOption(cargoValueHere, cargoCost, cargoSaleHere, unloadTime);
|
|
5717
|
+
collectOptions.push(sellAndStay);
|
|
5718
|
+
}
|
|
5719
|
+
if (!hasCargo && dealsAtOrigin.length > 0) {
|
|
5720
|
+
for (const deal of dealsAtOrigin.slice(0, 3)) {
|
|
5721
|
+
const option = {
|
|
5722
|
+
id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
|
|
5723
|
+
type: 'sell-and-trade',
|
|
5724
|
+
title: `Trade ${deal.item.item.name}`,
|
|
5725
|
+
description: `Buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
|
|
5726
|
+
reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
|
|
5727
|
+
recommended: false,
|
|
5728
|
+
highestProfit: false,
|
|
5729
|
+
estimatedProfit: deal.totalProfit,
|
|
5730
|
+
purchaseCost: antelope.UInt64.from(deal.buyPrice).multiplying(deal.maxQuantity),
|
|
5731
|
+
nextTradeProfit: deal.totalProfit,
|
|
5732
|
+
profitPerSecond: deal.profitPerSecond,
|
|
5733
|
+
marginPercent: deal.marginPercent,
|
|
5734
|
+
destination: deal.destination,
|
|
5735
|
+
deal,
|
|
5736
|
+
travelTime: deal.travelTime,
|
|
5737
|
+
travelTimeBreakdown: {
|
|
5738
|
+
unloadTime: antelope.UInt32.zero,
|
|
5739
|
+
loadTime: deal.travelTimeBreakdown.loadTime,
|
|
5740
|
+
rechargeTime: deal.travelTimeBreakdown.rechargeTime,
|
|
5741
|
+
flightTime: deal.travelTimeBreakdown.flightTime,
|
|
5742
|
+
total: deal.travelTimeBreakdown.total,
|
|
5743
|
+
},
|
|
5744
|
+
};
|
|
5745
|
+
collectOptions.push(option);
|
|
5746
|
+
}
|
|
5747
|
+
}
|
|
5748
|
+
if (collectOptions.length === 0) {
|
|
5749
|
+
const gameSeed = callbacks.getGameSeed?.();
|
|
5750
|
+
const state = callbacks.getState?.();
|
|
5751
|
+
const exploreCandidates = [];
|
|
5752
|
+
for (const dest of nearbyLocations.slice(0, 10)) {
|
|
5753
|
+
const distance = distanceBetweenCoordinates(arrivedAt, dest.coordinates);
|
|
5754
|
+
const needsRecharge = !ship.hasEnergyFor(distance);
|
|
5755
|
+
const unloadMass = hasCargo ? calculateCargoMass(cargo) : antelope.UInt32.zero;
|
|
5756
|
+
const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
|
|
5757
|
+
needsRecharge,
|
|
5758
|
+
unloadMass,
|
|
5759
|
+
});
|
|
5760
|
+
let discountedGood;
|
|
5761
|
+
let bestDiscount = 0;
|
|
5762
|
+
if (gameSeed && state) {
|
|
5763
|
+
const allGoods = getItems();
|
|
5764
|
+
for (const good of allGoods) {
|
|
5765
|
+
const rarity = getRarity(gameSeed, state.seed, dest.coordinates, good.id);
|
|
5766
|
+
if (rarity.minMultiplier < 1.0) {
|
|
5767
|
+
const discountPercent = Math.round((1 - rarity.minMultiplier) * 100);
|
|
5768
|
+
if (discountPercent > bestDiscount) {
|
|
5769
|
+
bestDiscount = discountPercent;
|
|
5770
|
+
const rarityName = rarity.rarity === exports.Rarities.legendary
|
|
5771
|
+
? 'Legendary'
|
|
5772
|
+
: rarity.rarity === exports.Rarities.epic
|
|
5773
|
+
? 'Epic'
|
|
5774
|
+
: rarity.rarity === exports.Rarities.rare
|
|
5775
|
+
? 'Rare'
|
|
5776
|
+
: rarity.rarity === exports.Rarities.uncommon
|
|
5777
|
+
? 'Uncommon'
|
|
5778
|
+
: 'Common';
|
|
5779
|
+
discountedGood = {
|
|
5780
|
+
goodId: Number(good.id),
|
|
5781
|
+
name: good.name,
|
|
5782
|
+
rarity: rarityName,
|
|
5783
|
+
discountPercent,
|
|
5784
|
+
};
|
|
5785
|
+
}
|
|
5786
|
+
}
|
|
5787
|
+
}
|
|
5692
5788
|
}
|
|
5693
|
-
const
|
|
5694
|
-
|
|
5695
|
-
|
|
5789
|
+
const destDeals = await findDealsForShip(ship, dest.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, { maxDeals: 2 });
|
|
5790
|
+
const potentialDeals = destDeals.map((d) => ({
|
|
5791
|
+
goodId: Number(d.item.id),
|
|
5792
|
+
goodName: d.item.item.name,
|
|
5793
|
+
destinationCoords: d.destination.coordinates,
|
|
5794
|
+
marginPercent: d.marginPercent,
|
|
5795
|
+
profitPerSecond: d.profitPerSecond,
|
|
5796
|
+
}));
|
|
5797
|
+
let score = 0;
|
|
5798
|
+
if (potentialDeals.length > 0) {
|
|
5799
|
+
score = potentialDeals[0].profitPerSecond;
|
|
5696
5800
|
}
|
|
5801
|
+
else if (bestDiscount > 0) {
|
|
5802
|
+
score = bestDiscount * 0.01;
|
|
5803
|
+
}
|
|
5804
|
+
exploreCandidates.push({
|
|
5805
|
+
dest,
|
|
5806
|
+
travelTime: travelEstimate.total,
|
|
5807
|
+
travelTimeBreakdown: travelEstimate,
|
|
5808
|
+
discountedGood,
|
|
5809
|
+
bestDiscount,
|
|
5810
|
+
potentialDeals: potentialDeals.length > 0 ? potentialDeals : undefined,
|
|
5811
|
+
score,
|
|
5812
|
+
});
|
|
5697
5813
|
}
|
|
5698
|
-
|
|
5699
|
-
|
|
5700
|
-
|
|
5701
|
-
|
|
5702
|
-
|
|
5703
|
-
|
|
5704
|
-
|
|
5705
|
-
|
|
5706
|
-
|
|
5814
|
+
exploreCandidates.sort((a, b) => b.score - a.score);
|
|
5815
|
+
for (const candidate of exploreCandidates.slice(0, 3)) {
|
|
5816
|
+
const option = createExploreOption(candidate.dest, candidate.travelTime, candidate.discountedGood, candidate.travelTimeBreakdown, candidate.potentialDeals);
|
|
5817
|
+
collectOptions.push(option);
|
|
5818
|
+
}
|
|
5819
|
+
}
|
|
5820
|
+
const orbitOption = createOrbitOption();
|
|
5821
|
+
collectOptions.push(orbitOption);
|
|
5822
|
+
const MIN_MARGIN_THRESHOLD = 15;
|
|
5823
|
+
const MIN_PROFIT_PER_SECOND_THRESHOLD = 0.5;
|
|
5824
|
+
collectOptions.sort((a, b) => (b.profitPerSecond ?? 0) - (a.profitPerSecond ?? 0));
|
|
5825
|
+
if (collectOptions.length > 0) {
|
|
5826
|
+
const bestByProfitPerSecond = collectOptions[0];
|
|
5827
|
+
const meetsQualityThreshold = (bestByProfitPerSecond.marginPercent ?? 0) > MIN_MARGIN_THRESHOLD ||
|
|
5828
|
+
(bestByProfitPerSecond.profitPerSecond ?? 0) > MIN_PROFIT_PER_SECOND_THRESHOLD;
|
|
5829
|
+
if (meetsQualityThreshold) {
|
|
5830
|
+
bestByProfitPerSecond.recommended = true;
|
|
5831
|
+
}
|
|
5832
|
+
const bestByProfit = collectOptions.reduce((best, opt) => opt.estimatedProfit > best.estimatedProfit ? opt : best);
|
|
5833
|
+
if (bestByProfit.id !== bestByProfitPerSecond.id || !meetsQualityThreshold) {
|
|
5834
|
+
bestByProfit.highestProfit = true;
|
|
5835
|
+
}
|
|
5836
|
+
}
|
|
5837
|
+
return {
|
|
5838
|
+
arrivedAt,
|
|
5839
|
+
ship,
|
|
5840
|
+
cargo,
|
|
5841
|
+
cargoValueHere,
|
|
5842
|
+
options: collectOptions,
|
|
5843
|
+
hasProfitableOptions: collectOptions.some((o) => o.estimatedProfit.gt(antelope.UInt64.zero)),
|
|
5844
|
+
};
|
|
5707
5845
|
}
|
|
5708
5846
|
|
|
5709
5847
|
class TradesManager extends BaseManager {
|
|
@@ -5714,122 +5852,102 @@ class TradesManager extends BaseManager {
|
|
|
5714
5852
|
makePriceCacheKey(location) {
|
|
5715
5853
|
return `${location.x},${location.y}`;
|
|
5716
5854
|
}
|
|
5717
|
-
createCallbacks() {
|
|
5718
|
-
|
|
5719
|
-
|
|
5720
|
-
|
|
5721
|
-
|
|
5722
|
-
|
|
5723
|
-
|
|
5724
|
-
|
|
5855
|
+
async createCallbacks() {
|
|
5856
|
+
const game = await this.getGame();
|
|
5857
|
+
const serverState = await this.getState();
|
|
5858
|
+
const currentEpoch = getCurrentEpoch(game);
|
|
5859
|
+
if (!this.priceCacheEpoch || !this.priceCacheEpoch.equals(currentEpoch)) {
|
|
5860
|
+
this.priceCache.clear();
|
|
5861
|
+
this.priceCacheEpoch = currentEpoch;
|
|
5862
|
+
}
|
|
5863
|
+
const getNearbyLocations = async (origin, maxDistance) => {
|
|
5864
|
+
const nearby = findNearbyPlanets(game.config.seed, origin, maxDistance);
|
|
5865
|
+
return nearby.map((d) => toLocation(d.destination));
|
|
5866
|
+
};
|
|
5867
|
+
const getMarketPrices = async (location) => {
|
|
5868
|
+
const cacheKey = this.makePriceCacheKey(location);
|
|
5869
|
+
const cached = this.priceCache.get(cacheKey);
|
|
5870
|
+
if (cached) {
|
|
5871
|
+
return cached;
|
|
5725
5872
|
}
|
|
5726
|
-
const
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5873
|
+
const locationWithSupply = await this.context.locations.getLocationComplete(location);
|
|
5874
|
+
const prices = locationWithSupply.marketPrices || [];
|
|
5875
|
+
const result = prices.map((price) => {
|
|
5876
|
+
const actualSupply = locationWithSupply.getSupply(price.id);
|
|
5877
|
+
if (actualSupply !== undefined) {
|
|
5878
|
+
return exports.ItemPrice.from({
|
|
5879
|
+
id: price.id,
|
|
5880
|
+
item: price.item,
|
|
5881
|
+
price: price.price,
|
|
5882
|
+
supply: actualSupply,
|
|
5883
|
+
});
|
|
5735
5884
|
}
|
|
5736
|
-
|
|
5737
|
-
const prices = locationWithSupply.marketPrices || [];
|
|
5738
|
-
const result = prices.map((price) => {
|
|
5739
|
-
const actualSupply = locationWithSupply.getSupply(price.id);
|
|
5740
|
-
if (actualSupply !== undefined) {
|
|
5741
|
-
return exports.GoodPrice.from({
|
|
5742
|
-
id: price.id,
|
|
5743
|
-
good: price.good,
|
|
5744
|
-
price: price.price,
|
|
5745
|
-
supply: actualSupply,
|
|
5746
|
-
});
|
|
5747
|
-
}
|
|
5748
|
-
return price;
|
|
5749
|
-
});
|
|
5750
|
-
this.priceCache.set(cacheKey, result);
|
|
5751
|
-
return result;
|
|
5885
|
+
return price;
|
|
5752
5886
|
});
|
|
5753
|
-
|
|
5754
|
-
|
|
5755
|
-
|
|
5756
|
-
|
|
5887
|
+
this.priceCache.set(cacheKey, result);
|
|
5888
|
+
return result;
|
|
5889
|
+
};
|
|
5890
|
+
const getGameSeed = () => game.config.seed;
|
|
5891
|
+
const getState = () => serverState;
|
|
5892
|
+
return { getNearbyLocations, getMarketPrices, getGameSeed, getState };
|
|
5757
5893
|
}
|
|
5758
5894
|
clearPriceCache() {
|
|
5759
5895
|
this.priceCache.clear();
|
|
5760
5896
|
this.priceCacheEpoch = undefined;
|
|
5761
5897
|
}
|
|
5762
|
-
findDeals(ship, originLocation, options = {}) {
|
|
5763
|
-
|
|
5764
|
-
|
|
5765
|
-
|
|
5766
|
-
|
|
5767
|
-
return deals;
|
|
5768
|
-
});
|
|
5898
|
+
async findDeals(ship, originLocation, options = {}) {
|
|
5899
|
+
const origin = originLocation || Coordinates.from(ship.coordinates);
|
|
5900
|
+
const callbacks = await this.createCallbacks();
|
|
5901
|
+
const deals = await findDealsForShip(ship, origin, callbacks.getNearbyLocations, callbacks.getMarketPrices, options);
|
|
5902
|
+
return deals;
|
|
5769
5903
|
}
|
|
5770
|
-
findBestDeal(ship, originLocation, options = {}) {
|
|
5771
|
-
|
|
5772
|
-
|
|
5773
|
-
return deals[0];
|
|
5774
|
-
});
|
|
5904
|
+
async findBestDeal(ship, originLocation, options = {}) {
|
|
5905
|
+
const deals = await this.findDeals(ship, originLocation, { ...options, maxDeals: 1 });
|
|
5906
|
+
return deals[0];
|
|
5775
5907
|
}
|
|
5776
|
-
getCollectOptions(ship, arrivedAt, options = {}) {
|
|
5777
|
-
|
|
5778
|
-
|
|
5779
|
-
|
|
5780
|
-
return analyzeCollectOptions(ship, location, callbacks, options);
|
|
5781
|
-
});
|
|
5908
|
+
async getCollectOptions(ship, arrivedAt, options = {}) {
|
|
5909
|
+
const location = arrivedAt || Coordinates.from(ship.coordinates);
|
|
5910
|
+
const callbacks = await this.createCallbacks();
|
|
5911
|
+
return analyzeCollectOptions(ship, location, callbacks, options);
|
|
5782
5912
|
}
|
|
5783
5913
|
}
|
|
5784
5914
|
|
|
5785
5915
|
class EpochsManager extends BaseManager {
|
|
5786
|
-
getCurrentHeight() {
|
|
5787
|
-
|
|
5788
|
-
|
|
5789
|
-
|
|
5790
|
-
|
|
5791
|
-
|
|
5792
|
-
|
|
5793
|
-
return
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
5797
|
-
|
|
5798
|
-
}
|
|
5799
|
-
|
|
5800
|
-
|
|
5801
|
-
|
|
5802
|
-
|
|
5803
|
-
|
|
5804
|
-
}
|
|
5805
|
-
|
|
5806
|
-
|
|
5807
|
-
|
|
5808
|
-
|
|
5809
|
-
|
|
5810
|
-
|
|
5811
|
-
|
|
5812
|
-
|
|
5813
|
-
|
|
5814
|
-
|
|
5815
|
-
|
|
5816
|
-
|
|
5817
|
-
const startTime = epochInfo.start.getTime();
|
|
5818
|
-
const endTime = epochInfo.end.getTime();
|
|
5819
|
-
const duration = endTime - startTime;
|
|
5820
|
-
const elapsed = now - startTime;
|
|
5821
|
-
if (elapsed <= 0)
|
|
5822
|
-
return 0;
|
|
5823
|
-
if (elapsed >= duration)
|
|
5824
|
-
return 1;
|
|
5825
|
-
return elapsed / duration;
|
|
5826
|
-
});
|
|
5916
|
+
async getCurrentHeight() {
|
|
5917
|
+
const game = await this.getGame();
|
|
5918
|
+
return getCurrentEpoch(game);
|
|
5919
|
+
}
|
|
5920
|
+
async getCurrent() {
|
|
5921
|
+
const game = await this.getGame();
|
|
5922
|
+
const epoch = await this.getCurrentHeight();
|
|
5923
|
+
return getEpochInfo(game, epoch);
|
|
5924
|
+
}
|
|
5925
|
+
async getByHeight(height) {
|
|
5926
|
+
const game = await this.getGame();
|
|
5927
|
+
return getEpochInfo(game, antelope.UInt64.from(height));
|
|
5928
|
+
}
|
|
5929
|
+
async getTimeRemaining() {
|
|
5930
|
+
const epochInfo = await this.getCurrent();
|
|
5931
|
+
const now = Date.now();
|
|
5932
|
+
const endTime = epochInfo.end.getTime();
|
|
5933
|
+
return Math.max(0, endTime - now);
|
|
5934
|
+
}
|
|
5935
|
+
async getProgress() {
|
|
5936
|
+
const epochInfo = await this.getCurrent();
|
|
5937
|
+
const now = Date.now();
|
|
5938
|
+
const startTime = epochInfo.start.getTime();
|
|
5939
|
+
const endTime = epochInfo.end.getTime();
|
|
5940
|
+
const duration = endTime - startTime;
|
|
5941
|
+
const elapsed = now - startTime;
|
|
5942
|
+
if (elapsed <= 0)
|
|
5943
|
+
return 0;
|
|
5944
|
+
if (elapsed >= duration)
|
|
5945
|
+
return 1;
|
|
5946
|
+
return elapsed / duration;
|
|
5827
5947
|
}
|
|
5828
|
-
fitsInCurrentEpoch(durationMs) {
|
|
5829
|
-
|
|
5830
|
-
|
|
5831
|
-
return durationMs <= remaining;
|
|
5832
|
-
});
|
|
5948
|
+
async fitsInCurrentEpoch(durationMs) {
|
|
5949
|
+
const remaining = await this.getTimeRemaining();
|
|
5950
|
+
return durationMs <= remaining;
|
|
5833
5951
|
}
|
|
5834
5952
|
}
|
|
5835
5953
|
|
|
@@ -5884,23 +6002,23 @@ class ActionsManager extends BaseManager {
|
|
|
5884
6002
|
source_id: antelope.UInt64.from(sourceId),
|
|
5885
6003
|
dest_type: destType,
|
|
5886
6004
|
dest_id: antelope.UInt64.from(destId),
|
|
5887
|
-
|
|
6005
|
+
item_id: antelope.UInt16.from(goodId),
|
|
5888
6006
|
quantity: antelope.UInt32.from(quantity),
|
|
5889
6007
|
});
|
|
5890
6008
|
}
|
|
5891
|
-
|
|
5892
|
-
return this.server.action('
|
|
6009
|
+
buyItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
|
|
6010
|
+
return this.server.action('buyitems', {
|
|
5893
6011
|
entity_type: entityType,
|
|
5894
6012
|
id: antelope.UInt64.from(entityId),
|
|
5895
|
-
|
|
6013
|
+
item_id: antelope.UInt16.from(goodId),
|
|
5896
6014
|
quantity: antelope.UInt32.from(quantity),
|
|
5897
6015
|
});
|
|
5898
6016
|
}
|
|
5899
|
-
|
|
5900
|
-
return this.server.action('
|
|
6017
|
+
sellItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
|
|
6018
|
+
return this.server.action('sellitems', {
|
|
5901
6019
|
entity_type: entityType,
|
|
5902
6020
|
id: antelope.UInt64.from(entityId),
|
|
5903
|
-
|
|
6021
|
+
item_id: antelope.UInt16.from(goodId),
|
|
5904
6022
|
quantity: antelope.UInt32.from(quantity),
|
|
5905
6023
|
});
|
|
5906
6024
|
}
|
|
@@ -5952,6 +6070,16 @@ class ActionsManager extends BaseManager {
|
|
|
5952
6070
|
ship_id: antelope.UInt64.from(shipId),
|
|
5953
6071
|
});
|
|
5954
6072
|
}
|
|
6073
|
+
warp(shipId, destination) {
|
|
6074
|
+
const x = antelope.Int64.from(destination.x);
|
|
6075
|
+
const y = antelope.Int64.from(destination.y);
|
|
6076
|
+
return this.server.action('warp', {
|
|
6077
|
+
entity_type: EntityType.SHIP,
|
|
6078
|
+
id: antelope.UInt64.from(shipId),
|
|
6079
|
+
x,
|
|
6080
|
+
y,
|
|
6081
|
+
});
|
|
6082
|
+
}
|
|
5955
6083
|
joinGame(account, companyName) {
|
|
5956
6084
|
return [this.foundCompany(account, companyName), this.join(account)];
|
|
5957
6085
|
}
|
|
@@ -5969,7 +6097,7 @@ class ActionsManager extends BaseManager {
|
|
|
5969
6097
|
const shipId = ship instanceof Ship ? ship.id : antelope.UInt64.from(ship);
|
|
5970
6098
|
return shipCargo
|
|
5971
6099
|
.filter((c) => c.hasCargo)
|
|
5972
|
-
.map((c) => this.
|
|
6100
|
+
.map((c) => this.sellItems(shipId, c.item_id, c.quantity, EntityType.SHIP));
|
|
5973
6101
|
}
|
|
5974
6102
|
}
|
|
5975
6103
|
|
|
@@ -6015,32 +6143,28 @@ class GameContext {
|
|
|
6015
6143
|
}
|
|
6016
6144
|
return this._actions;
|
|
6017
6145
|
}
|
|
6018
|
-
getGame(reload = false) {
|
|
6019
|
-
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
return game;
|
|
6029
|
-
});
|
|
6146
|
+
async getGame(reload = false) {
|
|
6147
|
+
if (!reload && this._gameCache) {
|
|
6148
|
+
return this._gameCache;
|
|
6149
|
+
}
|
|
6150
|
+
const game = await this.platform.table('games').get();
|
|
6151
|
+
if (!game) {
|
|
6152
|
+
throw new Error('Game not initialized');
|
|
6153
|
+
}
|
|
6154
|
+
this._gameCache = game;
|
|
6155
|
+
return game;
|
|
6030
6156
|
}
|
|
6031
|
-
getState(reload = false) {
|
|
6032
|
-
|
|
6033
|
-
if (!reload && this._stateCache) {
|
|
6034
|
-
return this._stateCache;
|
|
6035
|
-
}
|
|
6036
|
-
const state = yield this.server.table('state').get();
|
|
6037
|
-
if (!state) {
|
|
6038
|
-
throw new Error('Game state not initialized');
|
|
6039
|
-
}
|
|
6040
|
-
const game = this._gameCache;
|
|
6041
|
-
this._stateCache = GameState.from(state, game);
|
|
6157
|
+
async getState(reload = false) {
|
|
6158
|
+
if (!reload && this._stateCache) {
|
|
6042
6159
|
return this._stateCache;
|
|
6043
|
-
}
|
|
6160
|
+
}
|
|
6161
|
+
const state = await this.server.table('state').get();
|
|
6162
|
+
if (!state) {
|
|
6163
|
+
throw new Error('Game state not initialized');
|
|
6164
|
+
}
|
|
6165
|
+
const game = this._gameCache;
|
|
6166
|
+
this._stateCache = GameState.from(state, game);
|
|
6167
|
+
return this._stateCache;
|
|
6044
6168
|
}
|
|
6045
6169
|
get cachedGame() {
|
|
6046
6170
|
return this._gameCache;
|
|
@@ -6062,25 +6186,27 @@ class Shipload {
|
|
|
6062
6186
|
: new Contract({ client: apiClient });
|
|
6063
6187
|
this._context = new GameContext(apiClient, server$1, platform$1);
|
|
6064
6188
|
}
|
|
6065
|
-
static load(chain, shiploadOptions) {
|
|
6066
|
-
|
|
6067
|
-
|
|
6068
|
-
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6077
|
-
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
|
|
6081
|
-
|
|
6082
|
-
|
|
6083
|
-
|
|
6189
|
+
static async load(chain, shiploadOptions) {
|
|
6190
|
+
let platform$1 = new Contract$1({
|
|
6191
|
+
client: new antelope.APIClient({ url: chain.url }),
|
|
6192
|
+
});
|
|
6193
|
+
if (shiploadOptions?.platformContractName) {
|
|
6194
|
+
const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
|
|
6195
|
+
const contractKit = new ContractKit__default["default"]({ client });
|
|
6196
|
+
platform$1 = await contractKit.load(shiploadOptions.platformContractName);
|
|
6197
|
+
}
|
|
6198
|
+
let server$1 = new Contract({
|
|
6199
|
+
client: new antelope.APIClient({ url: chain.url }),
|
|
6200
|
+
});
|
|
6201
|
+
if (shiploadOptions?.serverContractName) {
|
|
6202
|
+
const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
|
|
6203
|
+
const contractKit = new ContractKit__default["default"]({ client });
|
|
6204
|
+
server$1 = await contractKit.load(shiploadOptions.serverContractName);
|
|
6205
|
+
}
|
|
6206
|
+
return new Shipload(chain, {
|
|
6207
|
+
...shiploadOptions,
|
|
6208
|
+
platformContract: platform$1,
|
|
6209
|
+
serverContract: server$1,
|
|
6084
6210
|
});
|
|
6085
6211
|
}
|
|
6086
6212
|
get client() {
|
|
@@ -6110,15 +6236,11 @@ class Shipload {
|
|
|
6110
6236
|
get actions() {
|
|
6111
6237
|
return this._context.actions;
|
|
6112
6238
|
}
|
|
6113
|
-
getGame(reload = false) {
|
|
6114
|
-
return
|
|
6115
|
-
return this._context.getGame(reload);
|
|
6116
|
-
});
|
|
6239
|
+
async getGame(reload = false) {
|
|
6240
|
+
return this._context.getGame(reload);
|
|
6117
6241
|
}
|
|
6118
|
-
getState(reload = false) {
|
|
6119
|
-
return
|
|
6120
|
-
return this._context.getState(reload);
|
|
6121
|
-
});
|
|
6242
|
+
async getState(reload = false) {
|
|
6243
|
+
return this._context.getState(reload);
|
|
6122
6244
|
}
|
|
6123
6245
|
}
|
|
6124
6246
|
|
|
@@ -6184,6 +6306,219 @@ function makeContainer(state) {
|
|
|
6184
6306
|
return new Container(entityInfo);
|
|
6185
6307
|
}
|
|
6186
6308
|
|
|
6309
|
+
const DEPTH_THRESHOLD_COMMON = 0;
|
|
6310
|
+
const DEPTH_THRESHOLD_UNCOMMON = 2000;
|
|
6311
|
+
const DEPTH_THRESHOLD_RARE = 10000;
|
|
6312
|
+
const DEPTH_THRESHOLD_EPIC = 30000;
|
|
6313
|
+
const DEPTH_THRESHOLD_LEGENDARY = 55000;
|
|
6314
|
+
const LOCATION_MIN_DEPTH = 500;
|
|
6315
|
+
const LOCATION_MAX_DEPTH = 65535;
|
|
6316
|
+
const YIELD_THRESHOLD = Math.floor(0.003 * 0xffffffff);
|
|
6317
|
+
const PLANET_SUBTYPE_GAS_GIANT = 0;
|
|
6318
|
+
const PLANET_SUBTYPE_ROCKY = 1;
|
|
6319
|
+
const PLANET_SUBTYPE_TERRESTRIAL = 2;
|
|
6320
|
+
const PLANET_SUBTYPE_ICY = 3;
|
|
6321
|
+
const PLANET_SUBTYPE_OCEAN = 4;
|
|
6322
|
+
const PLANET_SUBTYPE_INDUSTRIAL = 5;
|
|
6323
|
+
const RESOURCE_CATALOG = [
|
|
6324
|
+
{ id: 26, rarity: 'common' },
|
|
6325
|
+
{ id: 1, rarity: 'common' },
|
|
6326
|
+
{ id: 14, rarity: 'common' },
|
|
6327
|
+
{ id: 6, rarity: 'common' },
|
|
6328
|
+
{ id: 29, rarity: 'uncommon' },
|
|
6329
|
+
{ id: 2, rarity: 'uncommon' },
|
|
6330
|
+
{ id: 1000, rarity: 'uncommon' },
|
|
6331
|
+
{ id: 1003, rarity: 'uncommon' },
|
|
6332
|
+
{ id: 22, rarity: 'rare' },
|
|
6333
|
+
{ id: 18, rarity: 'rare' },
|
|
6334
|
+
{ id: 1001, rarity: 'rare' },
|
|
6335
|
+
{ id: 1002, rarity: 'rare' },
|
|
6336
|
+
{ id: 74, rarity: 'epic' },
|
|
6337
|
+
{ id: 54, rarity: 'epic' },
|
|
6338
|
+
];
|
|
6339
|
+
function getDepthThreshold(rarity) {
|
|
6340
|
+
switch (rarity) {
|
|
6341
|
+
case 'common':
|
|
6342
|
+
return DEPTH_THRESHOLD_COMMON;
|
|
6343
|
+
case 'uncommon':
|
|
6344
|
+
return DEPTH_THRESHOLD_UNCOMMON;
|
|
6345
|
+
case 'rare':
|
|
6346
|
+
return DEPTH_THRESHOLD_RARE;
|
|
6347
|
+
case 'epic':
|
|
6348
|
+
return DEPTH_THRESHOLD_EPIC;
|
|
6349
|
+
case 'legendary':
|
|
6350
|
+
return DEPTH_THRESHOLD_LEGENDARY;
|
|
6351
|
+
}
|
|
6352
|
+
}
|
|
6353
|
+
function getResourceRarity(itemId) {
|
|
6354
|
+
const entry = RESOURCE_CATALOG.find((r) => r.id === itemId);
|
|
6355
|
+
return entry ? entry.rarity : 'legendary';
|
|
6356
|
+
}
|
|
6357
|
+
function getResourceWeight(itemId, stratum) {
|
|
6358
|
+
const rarity = getResourceRarity(itemId);
|
|
6359
|
+
const threshold = getDepthThreshold(rarity);
|
|
6360
|
+
if (stratum < threshold)
|
|
6361
|
+
return 0;
|
|
6362
|
+
const depthAbove = stratum - threshold;
|
|
6363
|
+
switch (rarity) {
|
|
6364
|
+
case 'common':
|
|
6365
|
+
if (stratum < 2000)
|
|
6366
|
+
return 100;
|
|
6367
|
+
if (stratum < 10000)
|
|
6368
|
+
return 80;
|
|
6369
|
+
if (stratum < 30000)
|
|
6370
|
+
return 50;
|
|
6371
|
+
return 30;
|
|
6372
|
+
case 'uncommon':
|
|
6373
|
+
if (depthAbove < 3000)
|
|
6374
|
+
return 40;
|
|
6375
|
+
if (depthAbove < 8000)
|
|
6376
|
+
return 60;
|
|
6377
|
+
return 50;
|
|
6378
|
+
case 'rare':
|
|
6379
|
+
if (depthAbove < 5000)
|
|
6380
|
+
return 20;
|
|
6381
|
+
if (depthAbove < 15000)
|
|
6382
|
+
return 35;
|
|
6383
|
+
return 40;
|
|
6384
|
+
case 'epic':
|
|
6385
|
+
if (depthAbove < 10000)
|
|
6386
|
+
return 10;
|
|
6387
|
+
if (depthAbove < 25000)
|
|
6388
|
+
return 20;
|
|
6389
|
+
return 30;
|
|
6390
|
+
case 'legendary':
|
|
6391
|
+
return 10;
|
|
6392
|
+
}
|
|
6393
|
+
}
|
|
6394
|
+
const ASTEROID_RESOURCES = [26, 29, 22, 74, 14, 1000, 1001];
|
|
6395
|
+
const NEBULA_RESOURCES = [1, 2, 18, 54];
|
|
6396
|
+
const GAS_GIANT_RESOURCES = [1, 2, 18, 54];
|
|
6397
|
+
const ROCKY_RESOURCES = [26, 29, 22, 74, 6, 1003, 1002];
|
|
6398
|
+
const TERRESTRIAL_RESOURCES = [6, 1003, 1002, 1001];
|
|
6399
|
+
const ICY_RESOURCES = [6, 14, 1000, 1001, 18];
|
|
6400
|
+
const OCEAN_RESOURCES = [1, 2, 1003, 1002];
|
|
6401
|
+
const INDUSTRIAL_RESOURCES = [26, 29, 22, 74, 14, 1000, 54];
|
|
6402
|
+
function getLocationCandidates(locationType, subtype) {
|
|
6403
|
+
if (locationType === 2)
|
|
6404
|
+
return ASTEROID_RESOURCES;
|
|
6405
|
+
if (locationType === 3)
|
|
6406
|
+
return NEBULA_RESOURCES;
|
|
6407
|
+
if (locationType === 1) {
|
|
6408
|
+
switch (subtype) {
|
|
6409
|
+
case PLANET_SUBTYPE_GAS_GIANT:
|
|
6410
|
+
return GAS_GIANT_RESOURCES;
|
|
6411
|
+
case PLANET_SUBTYPE_ROCKY:
|
|
6412
|
+
return ROCKY_RESOURCES;
|
|
6413
|
+
case PLANET_SUBTYPE_TERRESTRIAL:
|
|
6414
|
+
return TERRESTRIAL_RESOURCES;
|
|
6415
|
+
case PLANET_SUBTYPE_ICY:
|
|
6416
|
+
return ICY_RESOURCES;
|
|
6417
|
+
case PLANET_SUBTYPE_OCEAN:
|
|
6418
|
+
return OCEAN_RESOURCES;
|
|
6419
|
+
case PLANET_SUBTYPE_INDUSTRIAL:
|
|
6420
|
+
return INDUSTRIAL_RESOURCES;
|
|
6421
|
+
}
|
|
6422
|
+
}
|
|
6423
|
+
return [];
|
|
6424
|
+
}
|
|
6425
|
+
function getEligibleResources(locationType, subtype, stratum) {
|
|
6426
|
+
const candidates = getLocationCandidates(locationType, subtype);
|
|
6427
|
+
return candidates.filter((itemId) => {
|
|
6428
|
+
const rarity = getResourceRarity(itemId);
|
|
6429
|
+
const threshold = getDepthThreshold(rarity);
|
|
6430
|
+
return stratum >= threshold;
|
|
6431
|
+
});
|
|
6432
|
+
}
|
|
6433
|
+
function depthScaleFactor(stratum) {
|
|
6434
|
+
if (stratum <= 1)
|
|
6435
|
+
return 1.0;
|
|
6436
|
+
const logScale = Math.log(stratum) / Math.log(65535);
|
|
6437
|
+
return 1.0 + logScale * 2.0;
|
|
6438
|
+
}
|
|
6439
|
+
|
|
6440
|
+
function deriveStratum(epochSeed, coords, stratum, locationType, subtype, _maxDepth) {
|
|
6441
|
+
const seed = antelope.Checksum256.from(epochSeed);
|
|
6442
|
+
const c = Coordinates.from(coords);
|
|
6443
|
+
const input = `stratum-${c.x}-${c.y}-${stratum}`;
|
|
6444
|
+
const hashResult = hash512(seed, input);
|
|
6445
|
+
const bytes = hashResult.array;
|
|
6446
|
+
const rawReserve = ((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0;
|
|
6447
|
+
let reserve = 0;
|
|
6448
|
+
if (rawReserve <= YIELD_THRESHOLD) {
|
|
6449
|
+
const baseReserve = (rawReserve % 333) + 1;
|
|
6450
|
+
const scale = depthScaleFactor(stratum);
|
|
6451
|
+
reserve = Math.floor(baseReserve * scale);
|
|
6452
|
+
}
|
|
6453
|
+
if (reserve === 0)
|
|
6454
|
+
return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
|
|
6455
|
+
const eligible = getEligibleResources(locationType, subtype, stratum);
|
|
6456
|
+
if (eligible.length === 0)
|
|
6457
|
+
return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
|
|
6458
|
+
const resourceRoll = ((bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7]) >>> 0;
|
|
6459
|
+
let totalWeight = 0;
|
|
6460
|
+
for (const id of eligible) {
|
|
6461
|
+
totalWeight += getResourceWeight(id, stratum);
|
|
6462
|
+
}
|
|
6463
|
+
let selectedItemId = eligible[0];
|
|
6464
|
+
if (totalWeight > 0) {
|
|
6465
|
+
const roll = resourceRoll % totalWeight;
|
|
6466
|
+
let cumulative = 0;
|
|
6467
|
+
for (const id of eligible) {
|
|
6468
|
+
cumulative += getResourceWeight(id, stratum);
|
|
6469
|
+
if (roll < cumulative) {
|
|
6470
|
+
selectedItemId = id;
|
|
6471
|
+
break;
|
|
6472
|
+
}
|
|
6473
|
+
}
|
|
6474
|
+
}
|
|
6475
|
+
const seedBigInt = (BigInt(bytes[8]) << 56n) |
|
|
6476
|
+
(BigInt(bytes[9]) << 48n) |
|
|
6477
|
+
(BigInt(bytes[10]) << 40n) |
|
|
6478
|
+
(BigInt(bytes[11]) << 32n) |
|
|
6479
|
+
(BigInt(bytes[12]) << 24n) |
|
|
6480
|
+
(BigInt(bytes[13]) << 16n) |
|
|
6481
|
+
(BigInt(bytes[14]) << 8n) |
|
|
6482
|
+
BigInt(bytes[15]);
|
|
6483
|
+
const rawRichness = (bytes[16] << 8) | bytes[17];
|
|
6484
|
+
const normalized = rawRichness / 65535;
|
|
6485
|
+
const baseRichness = Math.floor(normalized * normalized * 999) + 1;
|
|
6486
|
+
let depthBonus = 0;
|
|
6487
|
+
if (stratum > 1) {
|
|
6488
|
+
depthBonus = 50 * Math.log(stratum) / Math.log(65535);
|
|
6489
|
+
}
|
|
6490
|
+
const richness = Math.min(Math.floor(baseRichness + depthBonus), 1000);
|
|
6491
|
+
return { itemId: selectedItemId, seed: seedBigInt, richness, reserve };
|
|
6492
|
+
}
|
|
6493
|
+
function deriveResourceStats(seed) {
|
|
6494
|
+
const seedStr = seed.toString();
|
|
6495
|
+
const encoder = new TextEncoder();
|
|
6496
|
+
const data = encoder.encode(seedStr);
|
|
6497
|
+
const hashResult = antelope.Checksum256.hash(antelope.Bytes.from(data));
|
|
6498
|
+
const hashBytes = hashResult.array;
|
|
6499
|
+
const extractU32 = (offset) => ((hashBytes[offset] << 24) |
|
|
6500
|
+
(hashBytes[offset + 1] << 16) |
|
|
6501
|
+
(hashBytes[offset + 2] << 8) |
|
|
6502
|
+
hashBytes[offset + 3]) >>>
|
|
6503
|
+
0;
|
|
6504
|
+
return {
|
|
6505
|
+
purity: (extractU32(0) % 1000) + 1,
|
|
6506
|
+
density: (extractU32(4) % 1000) + 1,
|
|
6507
|
+
reactivity: (extractU32(8) % 1000) + 1,
|
|
6508
|
+
resonance: (extractU32(12) % 1000) + 1,
|
|
6509
|
+
};
|
|
6510
|
+
}
|
|
6511
|
+
|
|
6512
|
+
function deriveLocationSize(loc) {
|
|
6513
|
+
if (loc.type.toNumber() === exports.LocationType.EMPTY)
|
|
6514
|
+
return 0;
|
|
6515
|
+
const raw = (loc.seed0.toNumber() << 8) | loc.seed1.toNumber();
|
|
6516
|
+
const normalized = raw / 65535;
|
|
6517
|
+
const curved = Math.pow(normalized, 3.0);
|
|
6518
|
+
const range = LOCATION_MAX_DEPTH - LOCATION_MIN_DEPTH;
|
|
6519
|
+
return Math.floor(LOCATION_MIN_DEPTH + curved * range);
|
|
6520
|
+
}
|
|
6521
|
+
|
|
6187
6522
|
function canMove(e) {
|
|
6188
6523
|
return 'engines' in e && 'generator' in e && 'energy' in e;
|
|
6189
6524
|
}
|
|
@@ -6216,19 +6551,16 @@ function calcLoadDuration(entity, cargoMass) {
|
|
|
6216
6551
|
return antelope.UInt32.from(Math.ceil(Number(cargoMass) / totalThrust));
|
|
6217
6552
|
}
|
|
6218
6553
|
|
|
6219
|
-
function
|
|
6220
|
-
|
|
6221
|
-
|
|
6222
|
-
|
|
6223
|
-
const
|
|
6224
|
-
|
|
6225
|
-
|
|
6226
|
-
|
|
6227
|
-
|
|
6228
|
-
|
|
6229
|
-
const extractionTime = Math.floor(batchMass / extractor.rate.toNumber());
|
|
6230
|
-
const loadingTime = calc_load_time_internal(loaders, shipZ, batchMass);
|
|
6231
|
-
return antelope.UInt32.from(Math.max(extractionTime, loadingTime));
|
|
6554
|
+
function calc_extraction_duration(extractor, cargoMass, stratum, richness) {
|
|
6555
|
+
const rate = extractor.rate.toNumber();
|
|
6556
|
+
const efficiency = extractor.efficiency.toNumber();
|
|
6557
|
+
const drill = extractor.drill.toNumber();
|
|
6558
|
+
const rateProduct = Math.floor((rate * richness * efficiency) / PRECISION);
|
|
6559
|
+
if (rateProduct === 0)
|
|
6560
|
+
return antelope.UInt32.from(0);
|
|
6561
|
+
const extractionTime = Math.floor((cargoMass * PRECISION) / rateProduct);
|
|
6562
|
+
const drillTime = Math.floor(stratum / drill);
|
|
6563
|
+
return antelope.UInt32.from(extractionTime + drillTime);
|
|
6232
6564
|
}
|
|
6233
6565
|
function calc_extraction_energy(extractor, duration) {
|
|
6234
6566
|
const energy = Math.floor((duration * extractor.drain.toNumber()) / PRECISION);
|
|
@@ -6243,6 +6575,11 @@ exports.COMPANY_NOT_FOUND = COMPANY_NOT_FOUND;
|
|
|
6243
6575
|
exports.CONTAINER_Z = CONTAINER_Z;
|
|
6244
6576
|
exports.Container = Container;
|
|
6245
6577
|
exports.Coordinates = Coordinates;
|
|
6578
|
+
exports.DEPTH_THRESHOLD_COMMON = DEPTH_THRESHOLD_COMMON;
|
|
6579
|
+
exports.DEPTH_THRESHOLD_EPIC = DEPTH_THRESHOLD_EPIC;
|
|
6580
|
+
exports.DEPTH_THRESHOLD_LEGENDARY = DEPTH_THRESHOLD_LEGENDARY;
|
|
6581
|
+
exports.DEPTH_THRESHOLD_RARE = DEPTH_THRESHOLD_RARE;
|
|
6582
|
+
exports.DEPTH_THRESHOLD_UNCOMMON = DEPTH_THRESHOLD_UNCOMMON;
|
|
6246
6583
|
exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
|
|
6247
6584
|
exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
|
|
6248
6585
|
exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
|
|
@@ -6254,8 +6591,6 @@ exports.EntityType = EntityType;
|
|
|
6254
6591
|
exports.EpochsManager = EpochsManager;
|
|
6255
6592
|
exports.GAME_NOT_FOUND = GAME_NOT_FOUND;
|
|
6256
6593
|
exports.GAME_SEED_NOT_SET = GAME_SEED_NOT_SET;
|
|
6257
|
-
exports.GOOD_DOES_NOT_EXIST = GOOD_DOES_NOT_EXIST;
|
|
6258
|
-
exports.GOOD_NOT_AVAILABLE_AT_LOCATION = GOOD_NOT_AVAILABLE_AT_LOCATION;
|
|
6259
6594
|
exports.GameState = GameState;
|
|
6260
6595
|
exports.INITIAL_CONTAINER_CAPACITY = INITIAL_CONTAINER_CAPACITY;
|
|
6261
6596
|
exports.INITIAL_CONTAINER_HULLMASS = INITIAL_CONTAINER_HULLMASS;
|
|
@@ -6276,15 +6611,25 @@ exports.INITIAL_SHIP_THRUST = INITIAL_SHIP_THRUST;
|
|
|
6276
6611
|
exports.INITIAL_SHIP_Z = INITIAL_SHIP_Z;
|
|
6277
6612
|
exports.INITIAL_WAREHOUSE_CAPACITY = INITIAL_WAREHOUSE_CAPACITY;
|
|
6278
6613
|
exports.INSUFFICIENT_BALANCE = INSUFFICIENT_BALANCE;
|
|
6279
|
-
exports.
|
|
6280
|
-
exports.
|
|
6614
|
+
exports.INSUFFICIENT_ITEM_QUANTITY = INSUFFICIENT_ITEM_QUANTITY;
|
|
6615
|
+
exports.INSUFFICIENT_ITEM_SUPPLY = INSUFFICIENT_ITEM_SUPPLY;
|
|
6281
6616
|
exports.INVALID_AMOUNT = INVALID_AMOUNT;
|
|
6617
|
+
exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
|
|
6618
|
+
exports.ITEM_NOT_AVAILABLE_AT_LOCATION = ITEM_NOT_AVAILABLE_AT_LOCATION;
|
|
6282
6619
|
exports.InventoryAccessor = InventoryAccessor;
|
|
6620
|
+
exports.LOCATION_MAX_DEPTH = LOCATION_MAX_DEPTH;
|
|
6621
|
+
exports.LOCATION_MIN_DEPTH = LOCATION_MIN_DEPTH;
|
|
6283
6622
|
exports.Location = Location;
|
|
6284
6623
|
exports.LocationsManager = LocationsManager;
|
|
6285
6624
|
exports.MAX_ORBITAL_ALTITUDE = MAX_ORBITAL_ALTITUDE;
|
|
6286
6625
|
exports.MIN_ORBITAL_ALTITUDE = MIN_ORBITAL_ALTITUDE;
|
|
6287
6626
|
exports.NO_SCHEDULE = NO_SCHEDULE;
|
|
6627
|
+
exports.PLANET_SUBTYPE_GAS_GIANT = PLANET_SUBTYPE_GAS_GIANT;
|
|
6628
|
+
exports.PLANET_SUBTYPE_ICY = PLANET_SUBTYPE_ICY;
|
|
6629
|
+
exports.PLANET_SUBTYPE_INDUSTRIAL = PLANET_SUBTYPE_INDUSTRIAL;
|
|
6630
|
+
exports.PLANET_SUBTYPE_OCEAN = PLANET_SUBTYPE_OCEAN;
|
|
6631
|
+
exports.PLANET_SUBTYPE_ROCKY = PLANET_SUBTYPE_ROCKY;
|
|
6632
|
+
exports.PLANET_SUBTYPE_TERRESTRIAL = PLANET_SUBTYPE_TERRESTRIAL;
|
|
6288
6633
|
exports.PLAYER_ALREADY_JOINED = PLAYER_ALREADY_JOINED;
|
|
6289
6634
|
exports.PLAYER_NOT_FOUND = PLAYER_NOT_FOUND;
|
|
6290
6635
|
exports.PRECISION = PRECISION;
|
|
@@ -6373,30 +6718,37 @@ exports.createSellAndStayOption = createSellAndStayOption;
|
|
|
6373
6718
|
exports.createSellAndTradeOption = createSellAndTradeOption;
|
|
6374
6719
|
exports.createTravelToSellOption = createTravelToSellOption;
|
|
6375
6720
|
exports["default"] = Shipload;
|
|
6721
|
+
exports.depthScaleFactor = depthScaleFactor;
|
|
6376
6722
|
exports.deriveLocation = deriveLocation;
|
|
6377
6723
|
exports.deriveLocationEpoch = deriveLocationEpoch;
|
|
6378
|
-
exports.
|
|
6724
|
+
exports.deriveLocationSize = deriveLocationSize;
|
|
6379
6725
|
exports.deriveLocationStatic = deriveLocationStatic;
|
|
6726
|
+
exports.deriveResourceStats = deriveResourceStats;
|
|
6727
|
+
exports.deriveStratum = deriveStratum;
|
|
6380
6728
|
exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
|
|
6381
6729
|
exports.distanceBetweenPoints = distanceBetweenPoints;
|
|
6382
6730
|
exports.energyPercent = energyPercent;
|
|
6383
6731
|
exports.estimateDealTravelTime = estimateDealTravelTime;
|
|
6384
6732
|
exports.estimateTravelTime = estimateTravelTime;
|
|
6385
6733
|
exports.findBestDeal = findBestDeal;
|
|
6386
|
-
exports.
|
|
6734
|
+
exports.findBestItemToTrade = findBestItemToTrade;
|
|
6387
6735
|
exports.findDealsForShip = findDealsForShip;
|
|
6388
6736
|
exports.findNearbyPlanets = findNearbyPlanets;
|
|
6389
6737
|
exports.getCurrentEpoch = getCurrentEpoch;
|
|
6738
|
+
exports.getDepthThreshold = getDepthThreshold;
|
|
6390
6739
|
exports.getDestinationLocation = getDestinationLocation;
|
|
6740
|
+
exports.getEligibleResources = getEligibleResources;
|
|
6391
6741
|
exports.getEpochInfo = getEpochInfo;
|
|
6392
6742
|
exports.getFlightOrigin = getFlightOrigin;
|
|
6393
|
-
exports.
|
|
6394
|
-
exports.
|
|
6743
|
+
exports.getItem = getItem;
|
|
6744
|
+
exports.getItems = getItems;
|
|
6745
|
+
exports.getLocationCandidates = getLocationCandidates;
|
|
6395
6746
|
exports.getLocationType = getLocationType;
|
|
6396
6747
|
exports.getPositionAt = getPositionAt;
|
|
6397
6748
|
exports.getRarity = getRarity;
|
|
6749
|
+
exports.getResourceRarity = getResourceRarity;
|
|
6750
|
+
exports.getResourceWeight = getResourceWeight;
|
|
6398
6751
|
exports.getSystemName = getSystemName;
|
|
6399
|
-
exports.goodIds = goodIds;
|
|
6400
6752
|
exports.hasEnergy = hasEnergy;
|
|
6401
6753
|
exports.hasEnergyForDistance = hasEnergyForDistance$1;
|
|
6402
6754
|
exports.hasExtractor = hasExtractor;
|
|
@@ -6414,6 +6766,7 @@ exports.isExtractableLocation = isExtractableLocation;
|
|
|
6414
6766
|
exports.isFull = isFull$1;
|
|
6415
6767
|
exports.isFullFromMass = isFullFromMass;
|
|
6416
6768
|
exports.isProfitable = isProfitable;
|
|
6769
|
+
exports.itemIds = itemIds;
|
|
6417
6770
|
exports.lerp = lerp;
|
|
6418
6771
|
exports.makeContainer = makeContainer;
|
|
6419
6772
|
exports.makeShip = makeShip;
|