<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://wiki.uosigena.de/index.php?action=history&amp;feed=atom&amp;title=TazUO_Miningscript</id>
		<title>TazUO Miningscript - Versionsgeschichte</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.uosigena.de/index.php?action=history&amp;feed=atom&amp;title=TazUO_Miningscript"/>
		<link rel="alternate" type="text/html" href="https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;action=history"/>
		<updated>2026-09-04T03:10:31Z</updated>
		<subtitle>Versionsgeschichte dieser Seite in UO-Sigena Wiki</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;diff=3637&amp;oldid=prev</id>
		<title>Bonbori am 19. Oktober 2025 um 21:44 Uhr</title>
		<link rel="alternate" type="text/html" href="https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;diff=3637&amp;oldid=prev"/>
				<updated>2025-10-19T21:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;amp;diff=3637&amp;amp;oldid=3630&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>Bonbori</name></author>	</entry>

	<entry>
		<id>https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;diff=3630&amp;oldid=prev</id>
		<title>Bonbori: Die Seite wurde neu angelegt: „Dieses Script ist für TazUO Legion Scripts (Python). Aktuell sind Routen für die Kohle-, Kupfer und Bronzemine eingetragen, sowie für ein kleine…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.uosigena.de/index.php?title=TazUO_Miningscript&amp;diff=3630&amp;oldid=prev"/>
				<updated>2025-10-18T20:39:28Z</updated>
		
		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „Dieses Script ist für TazUO Legion Scripts (Python). Aktuell sind Routen für die &lt;a href=&quot;/index.php?title=Kohle&quot; title=&quot;Kohle&quot;&gt;Kohle&lt;/a&gt;-, &lt;a href=&quot;/index.php?title=Kupfer&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Kupfer (Seite nicht vorhanden)&quot;&gt;Kupfer&lt;/a&gt; und &lt;a href=&quot;/index.php?title=Bronze&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Bronze (Seite nicht vorhanden)&quot;&gt;Bronzemine&lt;/a&gt; eingetragen, sowie für ein kleine…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Dieses Script ist für TazUO Legion Scripts (Python). Aktuell sind Routen für die [[Kohle]]-, [[Kupfer]] und [[Bronze]]mine eingetragen, sowie für ein kleines [[Lehm]]feld.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Important: You need to define a &amp;quot;detect item&amp;quot; graphic&lt;br /&gt;
# At least one of this needs to be in your backpack.&lt;br /&gt;
# It is used to detect the container ID of your pack animal.&lt;br /&gt;
# Said item must only exist directly in your main backpack.&lt;br /&gt;
# This is due to odd pack animal container handling on the Sigena freeshard.&lt;br /&gt;
# TODO: Count successful minings per tile to avoid &amp;quot;useless mines&amp;quot; to get the empty message&lt;br /&gt;
# TODO: max count clay: 3, ore: 9&lt;br /&gt;
import API&lt;br /&gt;
&lt;br /&gt;
food_gid = 0x1728&lt;br /&gt;
#detect_item_gid = 0xeed # Gold / Kristall&lt;br /&gt;
detect_item_gid = 3617 # Bandage&lt;br /&gt;
packanimal_gids = [0x0124, 0x0123]&lt;br /&gt;
shovel_gid = 0x0f39&lt;br /&gt;
mining_range = 2&lt;br /&gt;
tile_marking_hue = 34&lt;br /&gt;
active_route = &amp;quot;bronze&amp;quot;&lt;br /&gt;
max_tile_yield = 9 # 3 for clay&lt;br /&gt;
&lt;br /&gt;
minable_tile_graphics = list(range(1300, 1400)) + list(range(15830, 15860)) + [3333, 12877, 12878]&lt;br /&gt;
ore_gid = 0x19b9&lt;br /&gt;
clay_gid = 7145&lt;br /&gt;
crystal_gid = 0x2747&lt;br /&gt;
&lt;br /&gt;
mining_messages = {&lt;br /&gt;
    &amp;quot;fail&amp;quot; : [&amp;quot;Ihr konntet kein verwertbares Erz gewinnen.&amp;quot;, &amp;quot;Ihr findet keinen verwertbaren &amp;quot;, &amp;quot;I am already doing something else.&amp;quot;],&lt;br /&gt;
    &amp;quot;success&amp;quot;: [&amp;quot;Ihr legt etwas &amp;quot;, ],&lt;br /&gt;
    &amp;quot;empty&amp;quot;: [&amp;quot;Hier gibt es kein Erz mehr abzubauen.&amp;quot;, &amp;quot;Hier kann kein sand mehr abgebaut werden.&amp;quot;, &amp;quot;Hier ist nichts zu holen.&amp;quot;, &amp;quot;ihr eine Spitzhacke.&amp;quot;, &amp;quot;Hier kann kein clay mehr abgebaut werden.&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
pack_full_message = &amp;quot;Euer Tier kann ein solches Gewicht nicht tragen.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    packis = detect_pack_animals()&lt;br /&gt;
    move_ore_to_packanimal(packis)&lt;br /&gt;
    for waypoint in waypoints[active_route]:&lt;br /&gt;
        API.SysMsg(f&amp;quot;Pathfind: {waypoint[0]}, {waypoint[1]}&amp;quot;, 33)&lt;br /&gt;
        API.Msg(&amp;quot;all follow me&amp;quot;)&lt;br /&gt;
        API.Pathfind(x=waypoint[0], y=waypoint[1], z=waypoint[2], distance=0, wait=True, timeout=20)&lt;br /&gt;
        for x in range(mining_range * -1, mining_range + 1):&lt;br /&gt;
            for y in range(mining_range * -1, mining_range + 1):&lt;br /&gt;
                yield_count = 0&lt;br /&gt;
                while True:&lt;br /&gt;
                    API.Pause(0.01)&lt;br /&gt;
                    mining_result = mine(x, y, waypoint[2])&lt;br /&gt;
                    if API.Player.WeightMax &amp;lt; API.Player.Weight + 15:&lt;br /&gt;
                        move_ore_to_packanimal(packis)&lt;br /&gt;
&lt;br /&gt;
                    if mining_result == 1:&lt;br /&gt;
                        yield_count += 1&lt;br /&gt;
                        API.SysMsg(f&amp;quot;Yield: {yield_count}&amp;quot;, 33)&lt;br /&gt;
&lt;br /&gt;
                    mine_crystal()&lt;br /&gt;
&lt;br /&gt;
                    if mining_result == 2 or yield_count &amp;gt;= max_tile_yield:&lt;br /&gt;
                        API.MarkTile(waypoint[0] + x, waypoint[1] + y, tile_marking_hue, API.GetMap())&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
    move_ore_to_packanimal(packis)&lt;br /&gt;
&lt;br /&gt;
def detect_pack_animals():&lt;br /&gt;
    API.Pause(1)&lt;br /&gt;
    packis = {}&lt;br /&gt;
    animal_serials = get_animal_serials()&lt;br /&gt;
    for packi_serial in animal_serials:&lt;br /&gt;
        packis[packi_serial] = {&lt;br /&gt;
            &amp;quot;container&amp;quot;: detect_packi_container_id(packi_serial),&lt;br /&gt;
            &amp;quot;is_full&amp;quot;: False&lt;br /&gt;
        }&lt;br /&gt;
    return packis&lt;br /&gt;
&lt;br /&gt;
def detect_packi_container_id(packi_serial) -&amp;gt; int:&lt;br /&gt;
    API.UseObject(packi_serial)&lt;br /&gt;
    detect_item = API.FindType(detect_item_gid, API.Backpack)&lt;br /&gt;
    API.QueueMoveItem(detect_item, packi_serial, 1)&lt;br /&gt;
    API.Pause(0.5)&lt;br /&gt;
    items = API.FindTypeAll(detect_item_gid)&lt;br /&gt;
    for item in items:&lt;br /&gt;
        if item.Container != API.Backpack:&lt;br /&gt;
            API.QueueMoveItem(item, API.Backpack)&lt;br /&gt;
            return item.Container&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
def get_animal_serials():&lt;br /&gt;
    animals = []&lt;br /&gt;
    mobiles = API.GetAllMobiles()&lt;br /&gt;
    if mobiles:&lt;br /&gt;
        for mob in mobiles:&lt;br /&gt;
            if mob.Graphic in packanimal_gids:&lt;br /&gt;
                animals.append(mob)&lt;br /&gt;
                API.SysMsg(f&amp;quot;Found Packi: {mob.Name}, {mob.Serial}&amp;quot;, 33)&lt;br /&gt;
    return animals&lt;br /&gt;
&lt;br /&gt;
def mine_crystal():&lt;br /&gt;
    crystal = API.FindType(graphic=crystal_gid, range=0)&lt;br /&gt;
    if crystal:&lt;br /&gt;
        API.UseObject(crystal.Serial)&lt;br /&gt;
        while not API.InJournal(&amp;quot;Ihr legt den Kristall in Euren Rucksack.&amp;quot;, clearMatches=True):&lt;br /&gt;
            API.Pause(0.1)&lt;br /&gt;
&lt;br /&gt;
def move_ore_to_packanimal(packis):&lt;br /&gt;
    API.Msg(&amp;quot;all come&amp;quot;)&lt;br /&gt;
    API.Pause(0.5)&lt;br /&gt;
    for pack_serial in packis:&lt;br /&gt;
        if packis[pack_serial][&amp;quot;is_full&amp;quot;]:&lt;br /&gt;
            continue&lt;br /&gt;
        items_to_move = []&lt;br /&gt;
        ores = API.FindTypeAll(graphic=ore_gid, container=API.Backpack)&lt;br /&gt;
        if ores:&lt;br /&gt;
            items_to_move += ores&lt;br /&gt;
        clay = API.FindTypeAll(graphic=clay_gid, container=API.Backpack)&lt;br /&gt;
        if clay:&lt;br /&gt;
            items_to_move += clay&lt;br /&gt;
&lt;br /&gt;
        API.UseObject(pack_serial)&lt;br /&gt;
        API.Pause(0.1)&lt;br /&gt;
        for item in items_to_move:&lt;br /&gt;
            API.QueueMoveItem(item.Serial, packis[pack_serial][&amp;quot;container&amp;quot;])&lt;br /&gt;
        API.Pause(0.5)&lt;br /&gt;
        # TODO: Improve. Don't rely on journal?&lt;br /&gt;
        if API.InJournal(msg=pack_full_message, clearMatches=True):&lt;br /&gt;
            packis[pack_serial][&amp;quot;is_full&amp;quot;] = True&lt;br /&gt;
&lt;br /&gt;
def mine(x_rel, y_rel, z_abs) -&amp;gt; int:&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    :param x_rel:&lt;br /&gt;
    :param y_rel:&lt;br /&gt;
    :param z_abs:&lt;br /&gt;
    :return: int: 0 = Fail, 1 = Success, 2 = Empty/Ignore&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    x_abs = API.Player.X - x_rel&lt;br /&gt;
    y_abs = API.Player.Y - y_rel&lt;br /&gt;
    shovel = API.FindType(graphic=shovel_gid, container=API.Backpack)&lt;br /&gt;
    if not shovel:&lt;br /&gt;
        # Will pick from containers other than backpack&lt;br /&gt;
        shovel = API.FindType(graphic=shovel_gid)&lt;br /&gt;
    if not shovel:&lt;br /&gt;
        API.SysMsg(&amp;quot;No Shovel Found!&amp;quot;, 33)&lt;br /&gt;
        API.Stop()&lt;br /&gt;
&lt;br /&gt;
    field = get_minable_field(x_abs, y_abs)&lt;br /&gt;
    if not field:&lt;br /&gt;
        return 2&lt;br /&gt;
&lt;br /&gt;
    API.UseObject(shovel.Serial)&lt;br /&gt;
    API.WaitForTarget()&lt;br /&gt;
    API.Target(x_abs, y_abs, z_abs, graphic=field.Graphic)&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        API.Pause(0.1)&lt;br /&gt;
        if API.InJournalAny(msgs=mining_messages[&amp;quot;success&amp;quot;], clearMatches=True):&lt;br /&gt;
            return 1&lt;br /&gt;
        if API.InJournalAny(msgs=mining_messages[&amp;quot;fail&amp;quot;], clearMatches=True):&lt;br /&gt;
            return 0&lt;br /&gt;
        if API.InJournalAny(msgs=mining_messages[&amp;quot;empty&amp;quot;], clearMatches=True):&lt;br /&gt;
            return 2&lt;br /&gt;
&lt;br /&gt;
def get_minable_field(x, y):&lt;br /&gt;
    fields = API.GetStaticsAt(x,y) or [API.GetTile(x, y)]&lt;br /&gt;
    if not fields:&lt;br /&gt;
        return None&lt;br /&gt;
    for field in fields:&lt;br /&gt;
        if int(field.Graphic) in minable_tile_graphics and field.Hue != tile_marking_hue:&lt;br /&gt;
            return field&lt;br /&gt;
        API.SysMsg(f&amp;quot;No match: {field.Graphic} - {field.X},{field.Y},{field.Z}&amp;quot;, 33)&lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
waypoints = {&lt;br /&gt;
    &amp;quot;kupfer&amp;quot;: [&lt;br /&gt;
        [2025, 1304, 0],&lt;br /&gt;
        [2020, 1304, 0],&lt;br /&gt;
        [2018, 1300, 0],&lt;br /&gt;
        [2016, 1297, 0],&lt;br /&gt;
        [2011, 1297, 0],&lt;br /&gt;
        [2011, 1301, 0],&lt;br /&gt;
        [2007, 1301, 0],&lt;br /&gt;
        [2007, 1306, 0],&lt;br /&gt;
        [2012, 1311, 0],&lt;br /&gt;
        [2017, 1306, 0],&lt;br /&gt;
        [2020, 1306, 0],&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;kohle&amp;quot;: [&lt;br /&gt;
        [5242, 68, -20],&lt;br /&gt;
        [5242, 63, -20],&lt;br /&gt;
        [5242, 58, -20],&lt;br /&gt;
        [5237, 53, -20],&lt;br /&gt;
        [5237, 58, -20],&lt;br /&gt;
        [5237, 63, -20],&lt;br /&gt;
        [5237, 68, -20],&lt;br /&gt;
        [5237, 72, -20],&lt;br /&gt;
        [5232, 72, -20],&lt;br /&gt;
        [5232, 67, -20],&lt;br /&gt;
        [5232, 62, -20],&lt;br /&gt;
        [5232, 57, -20],&lt;br /&gt;
        [5232, 52, -20],&lt;br /&gt;
        [5227, 62, -20],&lt;br /&gt;
        [5227, 67, -20],&lt;br /&gt;
        [5227, 72, -20],&lt;br /&gt;
        [5222, 72, -20],&lt;br /&gt;
        [5222, 67, -20],&lt;br /&gt;
        [5222, 62, -20],&lt;br /&gt;
        [5222, 57, -20],&lt;br /&gt;
        [5222, 52, -20],&lt;br /&gt;
        [5218, 62, -20],&lt;br /&gt;
        [5218, 67, -20],&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;bronze&amp;quot;: [&lt;br /&gt;
        [1707, 653, 0],&lt;br /&gt;
        [1702, 653, 0],&lt;br /&gt;
        [1698, 652, 0],&lt;br /&gt;
        [1693, 647, 0],&lt;br /&gt;
        [1698, 647, 0],&lt;br /&gt;
        [1698, 642, 0],&lt;br /&gt;
        [1693, 642, 0],&lt;br /&gt;
        [1688, 642, 0],&lt;br /&gt;
        [1683, 638, 0],&lt;br /&gt;
        [1688, 638, 0],&lt;br /&gt;
        [1693, 638, 0],&lt;br /&gt;
        [1696, 638, 0],&lt;br /&gt;
        [1693, 635, 0],&lt;br /&gt;
        [1688, 635, 0],&lt;br /&gt;
        [1683, 635, 0],&lt;br /&gt;
        [1689, 643, 0],# Way down&lt;br /&gt;
        [1697, 654, 0],# Way down&lt;br /&gt;
        [1699, 658, 0],&lt;br /&gt;
        [1703, 658, 0],&lt;br /&gt;
        [1703, 663, 0],&lt;br /&gt;
        [1699, 663, 0],&lt;br /&gt;
        [1699, 668, 0],&lt;br /&gt;
        [1703, 668, 0],&lt;br /&gt;
        [1704, 672, 0],&lt;br /&gt;
        [1699, 672, 0],&lt;br /&gt;
        [1706, 675, 0],&lt;br /&gt;
        [1696, 675, 0],&lt;br /&gt;
        [1691, 675, 0],&lt;br /&gt;
        [1691, 680, 0],&lt;br /&gt;
        [1688, 680, 0],&lt;br /&gt;
        [1696, 680, 0],&lt;br /&gt;
        [1701, 680, 0],&lt;br /&gt;
        [1706, 680, 0],&lt;br /&gt;
        [1706, 684, 0],&lt;br /&gt;
        [1701, 684, 0],&lt;br /&gt;
        [1696, 684, 0],&lt;br /&gt;
        [1691, 684, 0],&lt;br /&gt;
        [1691, 687, 0],&lt;br /&gt;
        [1696, 689, 0],&lt;br /&gt;
        [1701, 689, 0],&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;clay1&amp;quot;: [&lt;br /&gt;
        [1164, 1324, 0],&lt;br /&gt;
        [1164, 1319, 0],&lt;br /&gt;
        [1169, 1319, 0],&lt;br /&gt;
        [1169, 1314, 0],&lt;br /&gt;
        [1164, 1314, 0],&lt;br /&gt;
        [1164, 1309, 0],&lt;br /&gt;
        [1169, 1309, 0],&lt;br /&gt;
        [1169, 1304, 0],&lt;br /&gt;
        [1164, 1304, 0],&lt;br /&gt;
        [1164, 1299, 0],&lt;br /&gt;
        [1169, 1299, 0],&lt;br /&gt;
        [1159, 1304, 0],&lt;br /&gt;
        [1159, 1299, 0],&lt;br /&gt;
        [1159, 1309, 0],&lt;br /&gt;
        [1159, 1314, 0],&lt;br /&gt;
        [1159, 1319, 0],&lt;br /&gt;
        [1159, 1324, 0],&lt;br /&gt;
        [1154, 1324, 0],&lt;br /&gt;
        [1154, 1319, 0],&lt;br /&gt;
        [1154, 1314, 0],&lt;br /&gt;
        [1154, 1309, 0],&lt;br /&gt;
        [1154, 1304, 0],&lt;br /&gt;
        [1152, 1304, 0],&lt;br /&gt;
        [1152, 1309, 0],&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie: Scripte]]&lt;br /&gt;
[[Kategorie: Legion Scripts]]&lt;/div&gt;</summary>
		<author><name>Bonbori</name></author>	</entry>

	</feed>