Skip to content

Instantly share code, notes, and snippets.

@coldino
Created July 27, 2022 11:15
Show Gist options
  • Save coldino/91adb3a28eb1897b8ba51ca94b2a60c8 to your computer and use it in GitHub Desktop.
Save coldino/91adb3a28eb1897b8ba51ca94b2a60c8 to your computer and use it in GitHub Desktop.
Ark Taming Food Calculations
Display the source blob
Display the rendered blob
Raw
{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Taming Food Calculations"]},{"cell_type":"markdown","metadata":{},"source":["## Initialisation\n","\n","Normal Purlovia initialisation, ready for interactive experimentation."]},{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["d:\\Work\\Gms\\Ark\\Purlovia\n"]}],"source":["%cd .."]},{"cell_type":"code","execution_count":2,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["! Forcing wrap width for non-shell view to: 140\n"]},{"name":"stderr","output_type":"stream","text":["INFO:automate.ark:Ensuring SteamCMD is installed\n","INFO:automate.ark:Ensuring Ark is installed and up to date\n","INFO:automate.ark:(skipped)\n","INFO:automate.ark:Attempting to collect Ark server version within Docker...\n","WARNING:automate.ark:Collecting version by running Ark server failed with retcode 1 (0x1)\n","INFO:automate.ark:Game version from version.txt: 346.16\n","INFO:automate.ark:Game version from official servers API: 348.5\n","WARNING:automate.ark:Mismatched version from version.txt and official server API - choosing version.txt\n","INFO:automate.ark:Ensuring mods are installed and up to date\n","INFO:automate.ark:Updating mods: 1169020368, 1373744537, 1652120435, 1984129536, 2003934830, 2110243671, 2447186973, 893735676\n","INFO:automate.ark:(skipped)\n","INFO:automate.ark:Removing steam workshop cache\n","INFO:automate.ark:(skipped)\n","INFO:ark.discovery:Beginning hierarchy discovery\n","INFO:ue.hierarchy:Loading internal UE hierarchy from: config\\hierarchy.yaml\n","WARNING:ark.discovery:Could not place 758 entries from 165 parents (see livedata\\hierarchy_skips.txt)\n","INFO:ark.discovery:Hierarchy reconstruction complete\n"]},{"name":"stdout","output_type":"stream","text":["\n","Interactive session ready:\n"," arkman : ArkSteamManager initialised in dry-run mode\n"," loader : Asset loader\n"," config : A safe default config\n","\n"]},{"data":{"application/javascript":"\nclass TableSortable extends HTMLTableElement {\n constructor() {\n super();\n }\n\n connectedCallback() {\n // called when the html element and descendants are ready\n this.addEventListener(\"click\", this.on_click);\n }\n\n compareText(a, b) {\n if (a.key < b.key) { return -1; }\n else if (a.key > b.key) { return 1; }\n else { return 0; }\n }\n\n\n sortTable(col, fCmp) {\n // get the body element of the table as we like to analyze and shift rows around.\n let tbody = this.querySelector('tbody');\n\n // create a list of {key,value} elements to be sorted\n let data = [];\n tbody.querySelectorAll('tr').forEach(tr => {\n let key = tr.children[col].innerText.toLowerCase();\n let asNum = parseFloat(key);\n data.push({\n key: isNaN(asNum) ? key : -asNum,\n val: tr,\n })\n });\n // sort and apply to table in ascending order\n data.sort(fCmp).forEach(r => tbody.appendChild(r.val));\n }\n\n\n elementIndex(/** @type HTMLElement */parent, /** @type HTMLElement */node) {\n let idx = -1;\n if (parent && node) {\n let e = parent.firstElementChild;\n while (e) {\n idx++;\n if (e === node) { return (idx); }\n e = e.nextElementSibling;\n }\n }\n return (-1);\n }\n\n\n on_click(/** @type MouseEvent */e) {\n let target = /** @type HTMLElement */(e.target);\n\n if (target.tagName === 'TH') {\n let n = this.elementIndex(target.parentElement, target);\n this.sortTable(n, this.compareText);\n }\n }\n}\n\ncustomElements.define('table-sortable', TableSortable, { extends: 'table' });\n","text/plain":["<IPython.core.display.Javascript object>"]},"metadata":{},"output_type":"display_data"}],"source":["from interactive.setup import *\n","from interactive.taming import *\n","\n","DAEODON_CHR = '/Game/PrimalEarth/Dinos/Daeodon/Daeodon_Character_BP.Daeodon_Character_BP_C'"]},{"cell_type":"markdown","metadata":{},"source":["## Scan all items for food effects\n","...limited to core plus official mods, without PrimPlus"]},{"cell_type":"code","execution_count":3,"metadata":{},"outputs":[],"source":["gather_items(loader, limit_modids=CORE_MODIDS)"]},{"cell_type":"markdown","metadata":{},"source":["### Dodo"]},{"cell_type":"markdown","metadata":{},"source":["#### Gather food overrides"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["dodo = gather_properties(loader[DODO_CHR])\n","dodo_food = collect_species_data(DODO_CHR, loader)\n","print_species_overrides(dodo_food)"]},{"cell_type":"markdown","metadata":{},"source":["#### Calculate taming"]},{"cell_type":"code","execution_count":20,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Dodo_Character_BP needs 118.125 affinity @ level 1:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>84656.085</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>338.624</td><td>1</td><td>Kibble_Base_XSmall</td></tr><tr><td>40.000 @ 5.0</td><td>40.0</td><td>33.862</td><td>3</td><td>Veggie_Base</td></tr><tr><td>30.000 @ 3.0</td><td>30.0</td><td>25.397</td><td>4</td><td>Berry_Mejoberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>16.931</td><td>6</td><td>Berry_Azulberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>16.931</td><td>6</td><td>Berry_Amarberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>16.931</td><td>6</td><td>Berry_Tintoberry</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dodo_Character_BP needs 140.625 affinity @ level 5:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>71111.111</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>284.444</td><td>1</td><td>Kibble_Base_XSmall</td></tr><tr><td>40.000 @ 5.0</td><td>40.0</td><td>28.444</td><td>4</td><td>Veggie_Base</td></tr><tr><td>30.000 @ 3.0</td><td>30.0</td><td>21.333</td><td>5</td><td>Berry_Mejoberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>14.222</td><td>8</td><td>Berry_Azulberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>14.222</td><td>8</td><td>Berry_Amarberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>14.222</td><td>8</td><td>Berry_Tintoberry</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Dodo_Character_BP needs 956.25 affinity @ level 150:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>10457.516</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>41.83</td><td>3</td><td>Kibble_Base_XSmall</td></tr><tr><td>40.000 @ 5.0</td><td>40.0</td><td>4.183</td><td>24</td><td>Veggie_Base</td></tr><tr><td>30.000 @ 3.0</td><td>30.0</td><td>3.137</td><td>32</td><td>Berry_Mejoberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>2.092</td><td>48</td><td>Berry_Azulberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>2.092</td><td>48</td><td>Berry_Amarberry</td></tr><tr><td>20.000 @ 3.0</td><td>20.0</td><td>2.092</td><td>48</td><td>Berry_Tintoberry</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"}],"source":["for level in (1,5,150):\n"," print_taming_for_species(DODO_CHR, loader, level)"]},{"cell_type":"markdown","metadata":{},"source":["### Daeodon"]},{"cell_type":"markdown","metadata":{},"source":["#### Gather food overrides"]},{"cell_type":"code","execution_count":6,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Daeodon_Character_BP:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>classname</th><th>pri</th><th>food*</th><th>torp*</th><th>aff*</th><th>aff=</th></tr></thead><tbody><tr><td>SuperTestMeat</td><td>1.0</td><td>1.0</td><td>0.0</td><td>1.0</td><td>100000.0</td></tr><tr><td>Kibble_Base_Large</td><td>1.0</td><td>0.888</td><td>0.0</td><td>1</td><td>400.0</td></tr><tr><td>Kibble_Base</td><td>1.0</td><td>6.0</td><td>0.0</td><td>1.0</td><td>60.0</td></tr><tr><td>RawPrimeMeat</td><td>0.3</td><td>2.5</td><td>0.0</td><td>1.0</td><td>30.0</td></tr><tr><td>CookedPrimeMeat</td><td>0.05</td><td>1.427</td><td>0.0</td><td>1.0</td><td>15.0</td></tr><tr><td>RawMeat</td><td>3.0</td><td>1.0</td><td>0.0</td><td>1.0</td><td>10.0</td></tr><tr><td>CookedMeat</td><td>1.0</td><td>1.25</td><td>0.0</td><td>1.0</td><td>5.0</td></tr><tr><td>Berry_Amarberry</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>Berry_Azulberry</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>Berry_Mejoberry</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>Berry_Narcoberry</td><td>1.0</td><td>0.0</td><td>1.0</td><td>1</td><td>0.0</td></tr><tr><td>Berry_Tintoberry</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>Berry_Stimberry</td><td>1.0</td><td>-10.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>Veggie_Base</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr><tr><td>SweetVeggieCake</td><td>1.0</td><td>0.0</td><td>0.0</td><td>1</td><td>0.0</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["(no child food overrides)\n"]}],"source":["daeod = gather_properties(loader[DAEODON_CHR])\n","daeod_food = collect_species_data(DAEODON_CHR, loader)\n","print_species_overrides(daeod_food)"]},{"cell_type":"markdown","metadata":{},"source":["#### Calcualte taming"]},{"cell_type":"code","execution_count":19,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Daeodon_Character_BP needs 1186.25 affinity @ level 1:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>8429.926</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>33.72</td><td>3</td><td>Kibble_Base_Large</td></tr><tr><td>96.000 @ 5.0</td><td>60.0</td><td>5.058</td><td>20</td><td>Kibble_Base_XSmall</td></tr><tr><td>50.000 @ 3.0</td><td>37.5</td><td>3.161</td><td>32</td><td>RawMutton</td></tr><tr><td>50.000 @ 5.0</td><td>30.0</td><td>2.529</td><td>40</td><td>RawPrimeMeat</td></tr><tr><td>49.945 @ 6.0</td><td>20.25</td><td>1.707</td><td>59</td><td>CookedLambChop</td></tr><tr><td>49.945 @ 6.0</td><td>15.0</td><td>1.264</td><td>80</td><td>CookedPrimeMeat</td></tr><tr><td>25.000 @ 5.0</td><td>12.0</td><td>1.012</td><td>99</td><td>RawPrimeMeat_Fish</td></tr><tr><td>10.000 @ 5.0</td><td>10.0</td><td>0.843</td><td>119</td><td>RawMeat</td></tr><tr><td>25.686 @ 6.0</td><td>6.0</td><td>0.506</td><td>198</td><td>CookedPrimeMeat_Fish</td></tr><tr><td>25.000 @ 6.0</td><td>5.0</td><td>0.421</td><td>238</td><td>CookedMeat</td></tr><tr><td>5.000 @ 5.0</td><td>4.0</td><td>0.337</td><td>297</td><td>RawMeat_Fish</td></tr><tr><td>12.500 @ 6.0</td><td>2.0</td><td>0.169</td><td>594</td><td>CookedMeat_Fish</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Daeodon_Character_BP needs 1431.25 affinity @ level 5:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>6986.9</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>27.948</td><td>4</td><td>Kibble_Base_Large</td></tr><tr><td>96.000 @ 5.0</td><td>60.0</td><td>4.192</td><td>24</td><td>Kibble_Base_XSmall</td></tr><tr><td>50.000 @ 3.0</td><td>37.5</td><td>2.62</td><td>39</td><td>RawMutton</td></tr><tr><td>50.000 @ 5.0</td><td>30.0</td><td>2.096</td><td>48</td><td>RawPrimeMeat</td></tr><tr><td>49.945 @ 6.0</td><td>20.25</td><td>1.415</td><td>71</td><td>CookedLambChop</td></tr><tr><td>49.945 @ 6.0</td><td>15.0</td><td>1.048</td><td>96</td><td>CookedPrimeMeat</td></tr><tr><td>25.000 @ 5.0</td><td>12.0</td><td>0.838</td><td>120</td><td>RawPrimeMeat_Fish</td></tr><tr><td>10.000 @ 5.0</td><td>10.0</td><td>0.699</td><td>144</td><td>RawMeat</td></tr><tr><td>25.686 @ 6.0</td><td>6.0</td><td>0.419</td><td>239</td><td>CookedPrimeMeat_Fish</td></tr><tr><td>25.000 @ 6.0</td><td>5.0</td><td>0.349</td><td>287</td><td>CookedMeat</td></tr><tr><td>5.000 @ 5.0</td><td>4.0</td><td>0.279</td><td>358</td><td>RawMeat_Fish</td></tr><tr><td>12.500 @ 6.0</td><td>2.0</td><td>0.14</td><td>716</td><td>CookedMeat_Fish</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["Daeodon_Character_BP needs 10312.5 affinity @ level 150:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>aff</th><th>tame%</th><th>need</th><th>class</th></tr></thead><tbody><tr><td>10.000 @ 5.0</td><td>100000.0</td><td>969.697</td><td>1</td><td>SuperTestMeat</td></tr><tr><td>85.248 @ 5.0</td><td>400.0</td><td>3.879</td><td>26</td><td>Kibble_Base_Large</td></tr><tr><td>96.000 @ 5.0</td><td>60.0</td><td>0.582</td><td>172</td><td>Kibble_Base_XSmall</td></tr><tr><td>50.000 @ 3.0</td><td>37.5</td><td>0.364</td><td>275</td><td>RawMutton</td></tr><tr><td>50.000 @ 5.0</td><td>30.0</td><td>0.291</td><td>344</td><td>RawPrimeMeat</td></tr><tr><td>49.945 @ 6.0</td><td>20.25</td><td>0.196</td><td>510</td><td>CookedLambChop</td></tr><tr><td>49.945 @ 6.0</td><td>15.0</td><td>0.145</td><td>688</td><td>CookedPrimeMeat</td></tr><tr><td>25.000 @ 5.0</td><td>12.0</td><td>0.116</td><td>860</td><td>RawPrimeMeat_Fish</td></tr><tr><td>10.000 @ 5.0</td><td>10.0</td><td>0.097</td><td>1032</td><td>RawMeat</td></tr><tr><td>25.686 @ 6.0</td><td>6.0</td><td>0.058</td><td>1719</td><td>CookedPrimeMeat_Fish</td></tr><tr><td>25.000 @ 6.0</td><td>5.0</td><td>0.048</td><td>2063</td><td>CookedMeat</td></tr><tr><td>5.000 @ 5.0</td><td>4.0</td><td>0.039</td><td>2579</td><td>RawMeat_Fish</td></tr><tr><td>12.500 @ 6.0</td><td>2.0</td><td>0.019</td><td>5157</td><td>CookedMeat_Fish</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"}],"source":["for level in (1,5,150):\n"," print_taming_for_species(DAEODON_CHR, loader, level)"]},{"cell_type":"markdown","metadata":{},"source":["## Random"]},{"cell_type":"code","execution_count":12,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Wyvern_Character_BP_Fire food:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>class</th></tr></thead><tbody><tr><td>96.000 @ 5.0</td><td>Kibble_Base_XSmall</td></tr><tr><td>50.000 @ 5.0</td><td>RawMeat</td></tr><tr><td>50.000 @ 3.0</td><td>RawMutton</td></tr><tr><td>50.000 @ 5.0</td><td>RawPrimeMeat</td></tr><tr><td>49.945 @ 6.0</td><td>CookedLambChop</td></tr><tr><td>49.945 @ 6.0</td><td>CookedPrimeMeat</td></tr><tr><td>25.686 @ 6.0</td><td>CookedPrimeMeat_Fish</td></tr><tr><td>25.000 @ 6.0</td><td>CookedMeat</td></tr><tr><td>25.000 @ 5.0</td><td>RawMeat_Fish</td></tr><tr><td>25.000 @ 5.0</td><td>RawPrimeMeat_Fish</td></tr><tr><td>12.500 @ 6.0</td><td>CookedMeat_Fish</td></tr><tr><td>10.000 @ 5.0</td><td>SuperTestMeat</td></tr><tr><td>-15.000 @ 3.0</td><td>Berry_Stimberry</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"},{"name":"stdout","output_type":"stream","text":["\n","As child:\n","Wyvern_Character_BP_Fire food:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>class</th></tr></thead><tbody><tr><td>1200.000 @ 5.0</td><td>WyvernMilk</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"}],"source":["print_food_for_species(FIREWYVERN_CHR, loader, limit_modids=CORE_MODIDS)"]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Daeodon_Character_BP food:\n"]},{"data":{"text/html":["<table is=\"table-sortable\"><thead><tr><th>food</th><th>class</th></tr></thead><tbody><tr><td>96.000 @ 5.0</td><td>Kibble_Base_XSmall</td></tr><tr><td>85.248 @ 5.0</td><td>Kibble_Base_Large</td></tr><tr><td>50.000 @ 3.0</td><td>RawMutton</td></tr><tr><td>50.000 @ 5.0</td><td>RawPrimeMeat</td></tr><tr><td>49.945 @ 6.0</td><td>CookedLambChop</td></tr><tr><td>49.945 @ 6.0</td><td>CookedPrimeMeat</td></tr><tr><td>25.686 @ 6.0</td><td>CookedPrimeMeat_Fish</td></tr><tr><td>25.000 @ 6.0</td><td>CookedMeat</td></tr><tr><td>25.000 @ 5.0</td><td>RawPrimeMeat_Fish</td></tr><tr><td>12.500 @ 6.0</td><td>CookedMeat_Fish</td></tr><tr><td>10.000 @ 5.0</td><td>RawMeat</td></tr><tr><td>10.000 @ 5.0</td><td>SuperTestMeat</td></tr><tr><td>5.000 @ 5.0</td><td>RawMeat_Fish</td></tr><tr><td>-15.000 @ 3.0</td><td>Berry_Stimberry</td></tr></tbody></table>"],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{},"output_type":"display_data"}],"source":["print_food_for_species(DAEODON_CHR, loader, limit_modids=CORE_MODIDS)"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":[]}],"metadata":{"kernelspec":{"display_name":"Python 3.10.3 ('.venv': pipenv)","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.3"},"orig_nbformat":4,"vscode":{"interpreter":{"hash":"59fa3b1bbc2643c680a0ae81984fed7ef1cb36ea6ba24a5274b0526101544cdc"}}},"nbformat":4,"nbformat_minor":2}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment