Created
July 27, 2022 11:15
-
-
Save coldino/91adb3a28eb1897b8ba51ca94b2a60c8 to your computer and use it in GitHub Desktop.
Ark Taming Food Calculations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"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